meta-openembedded and poky: subtree updates

Squash of the following due to dependencies among them
and OpenBMC changes:

meta-openembedded: subtree update:d0748372d2..9201611135
meta-openembedded: subtree update:9201611135..17fd382f34
poky: subtree update:9052e5b32a..2e11d97b6c
poky: subtree update:2e11d97b6c..a8544811d7

The change log was too large for the jenkins plugin
to handle therefore it has been removed. Here is
the first and last commit of each subtree:

meta-openembedded:d0748372d2
      cppzmq: bump to version 4.6.0
meta-openembedded:17fd382f34
      mpv: Remove X11 dependency
poky:9052e5b32a
      package_ipk: Remove pointless comment to trigger rebuild
poky:a8544811d7
      pbzip2: Fix license warning

Change-Id: If0fc6c37629642ee207a4ca2f7aa501a2c673cd6
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/meta-openembedded/meta-oe/conf/layer.conf b/meta-openembedded/meta-oe/conf/layer.conf
index bad8785..adcec83 100644
--- a/meta-openembedded/meta-oe/conf/layer.conf
+++ b/meta-openembedded/meta-oe/conf/layer.conf
@@ -23,13 +23,20 @@
 
 BBFILE_PRIORITY_openembedded-layer = "6"
 
+# only activates content when identified layers are present,
+# to ensure yocto compatibility check pass
+BBFILES_DYNAMIC += " \
+meta-python:${LAYERDIR}/dynamic-layers/meta-python/recipes-*/*/*.bb \
+perl-layer:${LAYERDIR}/dynamic-layers/perl-layer/recipes-*/*/*.bb \
+"
+
 # This should only be incremented on significant changes that will
 # cause compatibility issues with other layers
 LAYERVERSION_openembedded-layer = "1"
 
 LAYERDEPENDS_openembedded-layer = "core"
 
-LAYERSERIES_COMPAT_openembedded-layer = "thud warrior zeus"
+LAYERSERIES_COMPAT_openembedded-layer = "thud warrior zeus dunfell"
 
 LICENSE_PATH += "${LAYERDIR}/licenses"
 
@@ -49,11 +56,13 @@
   usb-modeswitch-data->usb-modeswitch \
   lmsensors->lmsensors-config \
   phoronix-test-suite->bash \
-  phoronix-test-suite->python \
+  phoronix-test-suite->python3 \
   phoronix-test-suite->php \
   phoronix-test-suite->lsb-release \
   phoronix-test-suite->util-linux \
   phoronix-test-suite->busybox \
+  phoronix-test-suite->shared-mime-info \
+  phoronix-test-suite->desktop-file-utils \
 "
 
 # ttf.inc inherits fontcache which adds fontconfig-utils to RDEPENDS
@@ -70,6 +79,7 @@
   ttf-liberation-sans-narrow->fontconfig \
   ttf-lklug->fontconfig \
   ttf-lohit->fontconfig \
+  ttf-noto-emoji->fontconfig \
   ttf-pt-sans->fontconfig \
   ttf-roboto->fontconfig \
   ttf-mplus->fontconfig \
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/speedtest-cli/speedtest-cli_2.1.2.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-benchmark/speedtest-cli/speedtest-cli_2.1.2.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-benchmark/speedtest-cli/speedtest-cli_2.1.2.bb
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-benchmark/speedtest-cli/speedtest-cli_2.1.2.bb
diff --git a/meta-openembedded/meta-oe/recipes-bsp/rwmem/rwmem_1.2.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-bsp/rwmem/rwmem_1.2.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-bsp/rwmem/rwmem_1.2.bb
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-bsp/rwmem/rwmem_1.2.bb
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc.tmpfiles b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lirc.tmpfiles
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc.tmpfiles
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lirc.tmpfiles
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc_options.conf b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lirc_options.conf
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lirc_options.conf
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lirc_options.conf
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.conf b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircd.conf
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.conf
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircd.conf
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.init b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircd.init
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.init
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircd.init
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.service b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircd.service
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircd.service
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircd.service
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircexec.init b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircexec.init
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/lircexec.init
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/lircexec.init
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/pollfd.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/pollfd.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc/pollfd.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc/pollfd.patch
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc_0.9.4d.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc_0.9.4d.bb
index 606caee..f599696 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/lirc/lirc_0.9.4d.bb
@@ -6,8 +6,7 @@
 HOMEPAGE = "http://www.lirc.org"
 SECTION = "console/network"
 LICENSE = "GPLv2"
-DEPENDS = "libxslt-native alsa-lib libftdi libusb1 libusb-compat jack portaudio-v19"
-
+DEPENDS = "libxslt-native alsa-lib libftdi libusb1 libusb-compat jack portaudio-v19 python3-pyyaml"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
@@ -61,9 +60,9 @@
 
 RDEPENDS_${PN} = "bash"
 RDEPENDS_${PN}-exec = "${PN}"
-RDEPENDS_${PN}-python = "python"
+RDEPENDS_${PN}-python = "python3-shell python3-pyyaml python3-datetime python3-netclient python3-stringold"
 
-RRECOMMENDS_lirc = "${PN}-exec ${PN}-plugins"
+RRECOMMENDS_${PN} = "${PN}-exec ${PN}-plugins"
 
 FILES_${PN}-plugins = "${libdir}/lirc/plugins/*.so ${datadir}/lirc/configs"
 FILES_${PN}-contrib = "${datadir}/lirc/contrib"
@@ -73,8 +72,7 @@
 FILES_${PN} += "${systemd_unitdir}/system/lircd.socket"
 FILES_${PN} += "${libdir}/tmpfiles.d/lirc.conf"
 FILES_${PN}-dbg += "${libdir}/lirc/plugins/.debug"
-FILES_${PN}-python += "${libdir}/python*/site-packages"
-
+FILES_${PN}-python += "${bindir}/irdb-get ${bindir}/irtext2udp ${bindir}/lircd-setup ${bindir}/pronto2lirc ${libdir}/python*/site-packages"
 
 INITSCRIPT_PACKAGES = "lirc lirc-exec"
 INITSCRIPT_NAME_lirc-exec = "lircexec"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-core/packagegroups/packagegroup-meta-oe.bbappend b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
new file mode 100644
index 0000000..50da5e5
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
@@ -0,0 +1,20 @@
+RDEPENDS_packagegroup-meta-oe-devtools += "\
+    python3-distutils-extra \
+    rwmem \
+    speedtest-cli \
+    mongodb \
+"
+
+RDEPENDS_packagegroup-meta-oe-connectivity += "\
+    lirc \
+"
+
+RDEPENDS_packagegroup-meta-oe-extended += "\
+    lcdproc \
+    mozjs \
+"
+RDEPENDS_packagegroup-meta-oe-support += "\
+    smem \
+"
+RDEPENDS_packagegroup-meta-oe-extended_remove_libc-musl = "lcdproc"
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Support-deprecated-resolver-functions.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Support-deprecated-resolver-functions.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Support-deprecated-resolver-functions.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Support-deprecated-resolver-functions.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Tell-scons-to-use-build-settings-from-environment-va.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-__GLIBC__-to-control-use-of-gnu_get_libc_version.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-Use-long-long-instead-of-int64_t.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-asio-Dont-use-experimental-with-clang.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Add-a-definition-for-the-macro-__ELF_NATIVE_CLASS.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Fix-default-stack-size-to-256K.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Fix-default-stack-size-to-256K.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0002-Fix-default-stack-size-to-256K.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0002-Fix-default-stack-size-to-256K.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0003-Fix-unknown-prefix-env.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0004-wiredtiger-Disable-strtouq-on-musl.patch
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
new file mode 100644
index 0000000..ae84bcb
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/1296.patch
@@ -0,0 +1,52 @@
+Upstream-Status: submitted https://github.com/mongodb/mongo/pull/1296
+From 362be06fc16a5ad0f9e9aa90cc763c5242e8e35c Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Sat, 9 Feb 2019 12:41:45 +0100
+Subject: [PATCH] ssl_manager.cpp: fix build with gcc 7 and -fpermissive
+
+Change prototype of DERToken::parse function from
+parse(ConstDataRange cdr, size_t* outLength);
+to parse(ConstDataRange cdr, uint64_t* outLength);
+
+Otherwise, we got the following error:
+
+src/mongo/util/net/ssl_manager.cpp: In static member function 'static mongo::StatusWith<mongo::{anonymous}::DERToken> mongo::{anonymous}::DERToken::parse(mongo::ConstDataRange, size_t*)':
+src/mongo/util/net/ssl_manager.cpp:575:79: error: invalid conversion from 'size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive]
+  if (mongoUnsignedAddOverflow64(tagAndLengthByteCount, derLength, outLength) ||
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ src/mongo/util/net/ssl_manager.cpp | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/mongo/util/net/ssl_manager.cpp b/src/mongo/util/net/ssl_manager.cpp
+index b93ebe84a4a3..3511eb5d998f 100644
+--- a/src/mongo/util/net/ssl_manager.cpp
++++ b/src/mongo/util/net/ssl_manager.cpp
+@@ -782,7 +782,7 @@ class DERToken {
+      *
+      * Returns a DERToken which consists of the (tag, length, value) tuple.
+      */
+-    static StatusWith<DERToken> parse(ConstDataRange cdr, size_t* outLength);
++    static StatusWith<DERToken> parse(ConstDataRange cdr, uint64_t* outLength);
+ 
+ private:
+     DERType _type{DERType::EndOfContent};
+@@ -799,7 +799,7 @@ struct DataType::Handler<DERToken> {
+                        size_t length,
+                        size_t* advanced,
+                        std::ptrdiff_t debug_offset) {
+-        size_t outLength;
++        uint64_t outLength;
+ 
+         auto swPair = DERToken::parse(ConstDataRange(ptr, length), &outLength);
+ 
+@@ -844,7 +844,7 @@ StatusWith<std::string> readDERString(ConstDataRangeCursor& cdc) {
+ }
+ 
+ 
+-StatusWith<DERToken> DERToken::parse(ConstDataRange cdr, size_t* outLength) {
++StatusWith<DERToken> DERToken::parse(ConstDataRange cdr, uint64_t* outLength) {
+     const size_t kTagLength = 1;
+     const size_t kTagLengthAndInitialLengthByteLength = kTagLength + 1;
+ 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/arm64-support.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb/arm64-support.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/arm64-support.patch
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb_git.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb_git.bb
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
index cd8ccdc..58841ef 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/mongodb/mongodb_git.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb_git.bb
@@ -11,9 +11,9 @@
 
 inherit scons dos2unix siteinfo python3native
 
-PV = "4.2.0+git${SRCPV}"
-#v4.2.0
-SRCREV = "18ce5c9f56a01f2c933a720d64707f3456f81c8b"
+PV = "4.2.2"
+#v4.2.2
+SRCREV = "a0bbbff6ada159e19298d37946ac8dc4b497eadf"
 SRC_URI = "git://github.com/mongodb/mongo.git;branch=v4.2 \
            file://0001-Tell-scons-to-use-build-settings-from-environment-va.patch \
            file://0001-Use-long-long-instead-of-int64_t.patch \
@@ -23,6 +23,7 @@
            file://0001-IntelRDFPMathLib20U1-Check-for-__DEFINED_wchar_t.patch \
            file://0001-Support-deprecated-resolver-functions.patch \
            file://0003-Fix-unknown-prefix-env.patch \
+           file://1296.patch \
            "
 SRC_URI_append_libc-musl ="\
            file://0001-Mark-one-of-strerror_r-implementation-glibc-specific.patch \
@@ -36,13 +37,15 @@
 
 S = "${WORKDIR}/git"
 
-COMPATIBLE_HOST ?= '(x86_64|powerpc64|aarch64).*-linux'
+COMPATIBLE_HOST ?= '(x86_64|i.86|powerpc64|arm|aarch64).*-linux'
 
 PACKAGECONFIG ??= "tcmalloc system-pcre"
 # gperftools compilation fails for arm below v7 because of missing support of
 # dmb operation. So we use system-allocator instead of tcmalloc
 PACKAGECONFIG_remove_armv6 = "tcmalloc"
 PACKAGECONFIG_remove_libc-musl = "tcmalloc"
+PACKAGECONFIG_remove_riscv64 = "tcmalloc"
+PACKAGECONFIG_remove_riscv32 = "tcmalloc"
 
 PACKAGECONFIG[tcmalloc] = "--use-system-tcmalloc,--allocator=system,gperftools,"
 PACKAGECONFIG[shell] = ",--js-engine=none,,"
diff --git a/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0001-Fix-parallel-build-fix-port-internal-make-dependenci.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc/0001-Fix-parallel-build-fix-port-internal-make-dependenci.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0001-Fix-parallel-build-fix-port-internal-make-dependenci.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc/0001-Fix-parallel-build-fix-port-internal-make-dependenci.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0002-Include-limits.h-for-PATH_MAX-definition.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc/0002-Include-limits.h-for-PATH_MAX-definition.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0002-Include-limits.h-for-PATH_MAX-definition.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc/0002-Include-limits.h-for-PATH_MAX-definition.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0003-Fix-non-x86-platforms-on-musl.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc/0003-Fix-non-x86-platforms-on-musl.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc/0003-Fix-non-x86-platforms-on-musl.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc/0003-Fix-non-x86-platforms-on-musl.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc_git.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc_git.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/lcdproc/lcdproc_git.bb
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/lcdproc/lcdproc_git.bb
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0001-Port-build-to-python3.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0001-Port-build-to-python3.patch
new file mode 100644
index 0000000..e525047
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0001-Port-build-to-python3.patch
@@ -0,0 +1,6897 @@
+From 33a373ba41d978af60c2f0230bcba6ad27357ec8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Wed, 29 Jan 2020 16:25:11 +0100
+Subject: [PATCH] Port build to python3
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* first tool of choice was 2to3
+* some parts were taken from [1] but during work it was found that this patch
+  introduces interesting effects - see hash functions. Working more on this
+  makes me guess that one has never worked...
+* Few parts were taken from upstream mirror [2]. Since they use six for porting
+  to python3 it adds us a new dependency.
+* To get a better overview what is going on or failing some additional messages
+  were added. The most verbose one is left disabled - see
+  python/mozbuild/mozbuild/configure/__init__.py / Line 310 onwards
+* major changes upstream on build are not to expect so upgrading should cause
+  little trouble and changes can be tracked by [3]
+* some solutions are workarounds/hacks so this patch will not be accepeted
+  upstream. This should not be a probelme for us: once mozjs >= 68 will arrive
+  we have to go to rust/cargo based build anyway.
+
+[1] https://code.foxkit.us/adelie/packages/blob/f2b5773da19ab397fbe64fd32dacc383cfe4cd77/user/mozjs/python3.patch
+[2] https://github.com/mozilla/gecko-dev
+[3] https://github.com/mozilla/gecko-dev/tree/esr60
+
+Upstream-Status: Inaproppriate [Some Hacks]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ build/autoconf/config.status.m4               |   2 +-
+ build/moz.configure/android-ndk.configure     |   4 +-
+ build/moz.configure/checks.configure          |   4 +-
+ build/moz.configure/init.configure            |  31 +-
+ build/moz.configure/keyfiles.configure        |   4 +-
+ build/moz.configure/old.configure             |  32 +-
+ build/moz.configure/toolchain.configure       |  18 +-
+ build/moz.configure/util.configure            |   9 +-
+ build/moz.configure/windows.configure         |  10 +-
+ build/templates.mozbuild                      |   2 +-
+ config/MozZipFile.py                          |  12 +-
+ config/expandlibs.py                          |   6 +-
+ config/expandlibs_exec.py                     |  14 +-
+ config/expandlibs_gen.py                      |   4 +-
+ configure.py                                  |  42 +-
+ js/src/build/moz.build                        |   8 +-
+ js/src/builtin/embedjs.py                     |  10 +-
+ js/src/configure                              |   2 +-
+ js/src/frontend/GenerateReservedWords.py      |   6 +-
+ js/src/gc/GenerateStatsPhases.py              |   4 +-
+ js/src/old-configure.in                       |   2 +
+ memory/build/moz.build                        |   8 +-
+ mozglue/build/moz.build                       |  22 +-
+ .../mozbuild/mozbuild/action/check_binary.py  |   2 +
+ .../mozbuild/action/process_define_files.py   |   4 +-
+ python/mozbuild/mozbuild/backend/base.py      |   8 +-
+ python/mozbuild/mozbuild/backend/common.py    |   8 +-
+ .../mozbuild/backend/configenvironment.py     |  14 +-
+ .../mozbuild/mozbuild/backend/fastermake.py   |  10 +-
+ .../mozbuild/backend/recursivemake.py         | 181 +++----
+ python/mozbuild/mozbuild/config_status.py     |   7 +-
+ .../mozbuild/mozbuild/configure/__init__.py   |  83 +++-
+ .../mozbuild/configure/check_debug_ranges.py  |   6 +-
+ python/mozbuild/mozbuild/configure/options.py |  24 +-
+ python/mozbuild/mozbuild/configure/util.py    |  12 +-
+ .../mozbuild/mozbuild/controller/building.py  |  16 +-
+ python/mozbuild/mozbuild/frontend/context.py  |  89 ++--
+ python/mozbuild/mozbuild/frontend/data.py     |   8 +-
+ python/mozbuild/mozbuild/frontend/emitter.py  |  50 +-
+ python/mozbuild/mozbuild/frontend/reader.py   |  49 +-
+ python/mozbuild/mozbuild/frontend/sandbox.py  |   3 +-
+ python/mozbuild/mozbuild/jar.py               |  12 +-
+ python/mozbuild/mozbuild/makeutil.py          |  24 +-
+ python/mozbuild/mozbuild/mozinfo.py           |   8 +-
+ python/mozbuild/mozbuild/preprocessor.py      |  27 +-
+ python/mozbuild/mozbuild/shellutil.py         |   6 +-
+ .../test/backend/test_recursivemake.py        |  18 +-
+ .../mozbuild/test/configure/common.py         |   8 +-
+ .../mozbuild/mozbuild/test/configure/lint.py  |   8 +-
+ .../test/configure/test_checks_configure.py   |   8 +-
+ .../test/configure/test_compile_checks.py     |   4 +-
+ .../mozbuild/test/configure/test_configure.py | 244 +++++-----
+ .../mozbuild/test/configure/test_lint.py      |  24 +-
+ .../test/configure/test_moz_configure.py      |  32 +-
+ .../mozbuild/test/configure/test_options.py   | 450 +++++++++---------
+ .../configure/test_toolchain_configure.py     |  22 +-
+ .../test/configure/test_toolchain_helpers.py  |  62 +--
+ .../configure/test_toolkit_moz_configure.py   |   2 +-
+ .../mozbuild/test/configure/test_util.py      |   8 +-
+ python/mozbuild/mozbuild/testing.py           |  10 +-
+ python/mozbuild/mozbuild/util.py              |  79 ++-
+ python/mozbuild/mozbuild/virtualenv.py        |   6 +-
+ python/mozbuild/mozpack/chrome/manifest.py    |   6 +-
+ python/mozbuild/mozpack/copier.py             |  12 +-
+ python/mozbuild/mozpack/files.py              |  22 +-
+ python/mozbuild/mozpack/manifests.py          |  16 +-
+ python/mozbuild/mozpack/mozjar.py             |  37 +-
+ .../manifestparser/manifestparser/ini.py      |  13 +-
+ .../manifestparser/manifestparser.py          |  24 +-
+ testing/mozbase/mozinfo/mozinfo/mozinfo.py    |  26 +-
+ .../mozprocess/mozprocess/processhandler.py   |  10 +-
+ third_party/python/which/which.py             |  18 +-
+ 72 files changed, 1081 insertions(+), 993 deletions(-)
+
+diff --git a/build/autoconf/config.status.m4 b/build/autoconf/config.status.m4
+index c75575386..543c2d682 100644
+--- a/build/autoconf/config.status.m4
++++ b/build/autoconf/config.status.m4
+@@ -122,7 +122,7 @@ trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+ 
+ dnl We're going to need [ ] for python syntax.
+ changequote(<<<, >>>)dnl
+-echo creating $CONFIG_STATUS
++echo creating $CONFIG_STATUS in `pwd`
+ 
+ cat > $CONFIG_STATUS <<EOF
+ 
+diff --git a/build/moz.configure/android-ndk.configure b/build/moz.configure/android-ndk.configure
+index 1067b8619..3b592a237 100644
+--- a/build/moz.configure/android-ndk.configure
++++ b/build/moz.configure/android-ndk.configure
+@@ -30,7 +30,7 @@ js_option('--with-android-version',
+ 
+ 
+ @depends('--with-android-version', min_android_version, '--help')
+-@imports(_from='__builtin__', _import='ValueError')
++@imports(_from='builtins', _import='ValueError')
+ def android_version(value, min_version, _):
+     if not value:
+         # Someone has passed --without-android-version.
+@@ -68,7 +68,7 @@ add_old_configure_assignment('android_ndk', ndk)
+ 
+ @depends(ndk)
+ @checking('for android ndk version')
+-@imports(_from='__builtin__', _import='open')
++@imports(_from='builtins', _import='open')
+ def ndk_version(ndk):
+     if not ndk:
+         # Building 'js/src' for non-Android.
+diff --git a/build/moz.configure/checks.configure b/build/moz.configure/checks.configure
+index 516652da9..11e1091c6 100644
+--- a/build/moz.configure/checks.configure
++++ b/build/moz.configure/checks.configure
+@@ -14,7 +14,7 @@
+ 
+ 
+ @template
+-@imports(_from='__builtin__', _import='Exception')
++@imports(_from='builtins', _import='Exception')
+ def _declare_exceptions():
+     class FatalCheckError(Exception):
+         '''An exception to throw from a function decorated with @checking.
+@@ -57,7 +57,7 @@ def checking(what, callback=None):
+                 try:
+                     ret = func(*args, **kwargs)
+                 except FatalCheckError as e:
+-                    error = e.message
++                    error = str(e)
+                 display_ret = callback(ret) if callback else ret
+                 if display_ret is True:
+                     log.info('yes')
+diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
+index 648ac2ded..4d74547d8 100644
+--- a/build/moz.configure/init.configure
++++ b/build/moz.configure/init.configure
+@@ -14,7 +14,7 @@ option(env='DIST', nargs=1, help='DIST directory')
+ 
+ 
+ @depends('--help', 'DIST')
+-@imports(_from='__builtin__', _import='open')
++@imports(_from='builtins', _import='open')
+ @imports(_from='os.path', _import='exists')
+ def check_build_environment(help, dist):
+     topobjdir = os.path.realpath(os.path.abspath('.'))
+@@ -65,7 +65,7 @@ def check_build_environment(help, dist):
+     # Check for CRLF line endings.
+     with open(os.path.join(topsrcdir, 'configure.py'), 'rb') as fh:
+         data = fh.read()
+-        if '\r' in data:
++        if b'\r' in data:
+             die('\n ***\n'
+                 ' * The source tree appears to have Windows-style line endings.\n'
+                 ' *\n'
+@@ -269,7 +269,7 @@ def early_options():
+     def early_options():
+         return set(
+             option.env
+-            for option in __sandbox__._options.itervalues()
++            for option in __sandbox__._options.values()
+             if option.env
+         )
+     return early_options
+@@ -307,15 +307,15 @@ def mozconfig_options(mozconfig, automation, help):
+                 log.info('  %s' % arg)
+                 helper.add(arg, origin='mozconfig', args=helper._args)
+ 
+-        for key, value in mozconfig['env']['added'].iteritems():
++        for key, value in mozconfig['env']['added'].items():
+             add(key, value)
+             os.environ[key] = value
+-        for key, (_, value) in mozconfig['env']['modified'].iteritems():
++        for key, (_, value) in mozconfig['env']['modified'].items():
+             add(key, value)
+             os.environ[key] = value
+-        for key, value in mozconfig['vars']['added'].iteritems():
++        for key, value in mozconfig['vars']['added'].items():
+             add(key, value)
+-        for key, (_, value) in mozconfig['vars']['modified'].iteritems():
++        for key, (_, value) in mozconfig['vars']['modified'].items():
+             add(key, value)
+ 
+ 
+@@ -353,7 +353,7 @@ option(env='PYTHON3', nargs=1, help='Python 3 interpreter (3.5 or later)')
+ @depends('PYTHON3')
+ @checking('for Python 3',
+           callback=lambda x: '%s (%s)' % (x.path, x.str_version) if x else 'no')
+-@imports(_from='__builtin__', _import='Exception')
++@imports(_from='builtins', _import='Exception')
+ @imports(_from='mozbuild.pythonutil', _import='find_python3_executable')
+ @imports(_from='mozbuild.pythonutil', _import='python_executable_version')
+ def python3(env_python):
+@@ -377,9 +377,6 @@ def python3(env_python):
+         if not python:
+             return None
+ 
+-        # The API returns a bytes whereas everything in configure is unicode.
+-        python = python.decode('utf-8')
+-
+     return namespace(
+         path=python,
+         version=version,
+@@ -481,6 +478,8 @@ def hg_config(build_env, hg, version):
+ @imports('re')
+ def git_version(git):
+     out = check_cmd_output(git, '--version').rstrip()
++    if isinstance(out, bytes):
++        out = out.decode('utf-8')
+ 
+     match = re.search('git version (.*)$', out)
+ 
+@@ -551,8 +550,8 @@ option('--target', nargs=1,
+ @imports(_from='mozbuild.configure.constants', _import='Endianness')
+ @imports(_from='mozbuild.configure.constants', _import='Kernel')
+ @imports(_from='mozbuild.configure.constants', _import='OS')
+-@imports(_from='__builtin__', _import='KeyError')
+-@imports(_from='__builtin__', _import='ValueError')
++@imports(_from='builtins', _import='KeyError')
++@imports(_from='builtins', _import='ValueError')
+ def split_triplet(triplet, allow_unknown=False):
+     # The standard triplet is defined as
+     #   CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+@@ -562,6 +561,8 @@ def split_triplet(triplet, allow_unknown=False):
+     # Additionally, some may omit "unknown" when the manufacturer
+     # is not specified and emit
+     #   CPU_TYPE-OPERATING_SYSTEM
++    if isinstance(triplet, bytes):
++        triplet = triplet.decode('utf-8')
+     parts = triplet.split('-', 2)
+     if len(parts) == 3:
+         cpu, _, os = parts
+@@ -987,7 +988,7 @@ add_old_configure_assignment('MOZ_BUILD_APP', build_project)
+ # - otherwise, if we have "a" in GRE_MILESTONE, we're building Nightly or Aurora
+ # - otherwise, we're building Release/Beta (define RELEASE_OR_BETA)
+ @depends(check_build_environment, '--help')
+-@imports(_from='__builtin__', _import='open')
++@imports(_from='builtins', _import='open')
+ @imports('re')
+ def milestone(build_env, _):
+     milestone_path = os.path.join(build_env.topsrcdir,
+@@ -1105,7 +1106,7 @@ def enabled_in_nightly(milestone, _):
+ def all_configure_options():
+     result = []
+     previous = None
+-    for option in __sandbox__._options.itervalues():
++    for option in __sandbox__._options.values():
+         # __sandbox__._options contains items for both option.name and
+         # option.env. But it's also an OrderedDict, meaning both are
+         # consecutive.
+diff --git a/build/moz.configure/keyfiles.configure b/build/moz.configure/keyfiles.configure
+index 5d51cccea..14a35a3c6 100644
+--- a/build/moz.configure/keyfiles.configure
++++ b/build/moz.configure/keyfiles.configure
+@@ -16,8 +16,8 @@ def keyfile(desc, default=None, help=None, callback=lambda x: x):
+ 
+     @depends('--with-%s-keyfile' % name)
+     @checking('for the %s key' % desc, lambda x: x and x is not no_key)
+-    @imports(_from='__builtin__', _import='open')
+-    @imports(_from='__builtin__', _import='IOError')
++    @imports(_from='builtins', _import='open')
++    @imports(_from='builtins', _import='IOError')
+     def keyfile(value):
+         if value:
+             try:
+diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure
+index 81c10b91f..29b496bae 100644
+--- a/build/moz.configure/old.configure
++++ b/build/moz.configure/old.configure
+@@ -64,9 +64,9 @@ set_config('AUTOCONF', autoconf)
+ 
+ @depends('OLD_CONFIGURE', mozconfig, autoconf, check_build_environment, shell,
+          old_configure_assignments, build_project)
+-@imports(_from='__builtin__', _import='open')
+-@imports(_from='__builtin__', _import='print')
+-@imports(_from='__builtin__', _import='sorted')
++@imports(_from='builtins', _import='open')
++@imports(_from='builtins', _import='print')
++@imports(_from='builtins', _import='sorted')
+ @imports('glob')
+ @imports('itertools')
+ @imports('subprocess')
+@@ -113,7 +113,7 @@ def prepare_configure(old_configure, mozconfig, autoconf, build_env, shell,
+ 
+         # Make old-configure append to config.log, where we put our own log.
+         # This could be done with a m4 macro, but it's way easier this way
+-        script = script.replace('>./config.log', '>>./config.log')
++        script = script.replace(b'>./config.log', b'>>./config.log')
+ 
+         with open(old_configure, 'wb') as fh:
+             fh.write(script)
+@@ -282,8 +282,8 @@ def old_configure_options(*options):
+     '--x-includes',
+     '--x-libraries',
+ )
+-@imports(_from='__builtin__', _import='compile')
+-@imports(_from='__builtin__', _import='open')
++@imports(_from='builtins', _import='compile')
++@imports(_from='builtins', _import='open')
+ @imports('logging')
+ @imports('os')
+ @imports('subprocess')
+@@ -326,7 +326,7 @@ def old_configure(prepare_configure, extra_old_configure_args, all_options,
+     log.debug('Running %s', quote(*cmd))
+     if extra_env:
+         log.debug('with extra environment: %s',
+-                  ' '.join('%s=%s' % pair for pair in extra_env.iteritems()))
++                  ' '.join('%s=%s' % pair for pair in extra_env.items()))
+ 
+     # Our logging goes to config.log, the same file old.configure uses.
+     # We can't share the handle on the file, so close it. We assume nothing
+@@ -359,7 +359,7 @@ def old_configure(prepare_configure, extra_old_configure_args, all_options,
+         # Every variation of the exec() function I tried led to:
+         # SyntaxError: unqualified exec is not allowed in function 'main' it
+         # contains a nested function with free variables
+-        exec code in raw_config # noqa
++        exec(code, raw_config) # noqa
+ 
+     # Ensure all the flags known to old-configure appear in the
+     # @old_configure_options above.
+@@ -393,16 +393,24 @@ def set_old_configure_define(name, value):
+ @depends(old_configure)
+ @imports('types')
+ def post_old_configure(raw_config):
++    log.info('post_old_configure started')
++
+     for k, v in raw_config['substs']:
+         set_old_configure_config(
+-            k[1:-1], v[1:-1] if isinstance(v, types.StringTypes) else v)
++            k[1:-1], v[1:-1] if isinstance(v, str) else v)
++
++    log.info('post_old_configure 1 finished')
+ 
+-    for k, v in dict(raw_config['defines']).iteritems():
++    for k, v in dict(raw_config['defines']).items():
+         set_old_configure_define(k[1:-1], v[1:-1])
+ 
++    log.info('post_old_configure 2 finished')
++
+     set_old_configure_config('non_global_defines',
+                              raw_config['non_global_defines'])
+ 
++    log.info('post_old_configure 3 finished')
++
+ 
+ # Assuming no other option is declared after this function, handle the
+ # env options that were injected by mozconfig_options by creating dummy
+@@ -414,6 +422,7 @@ def post_old_configure(raw_config):
+ @imports('__sandbox__')
+ @imports(_from='mozbuild.configure.options', _import='Option')
+ def remaining_mozconfig_options(_):
++    log.info('remaining_mozconfig_options started')
+     helper = __sandbox__._helper
+     for arg in helper:
+         if helper._origins[arg] != 'mozconfig':
+@@ -422,5 +431,6 @@ def remaining_mozconfig_options(_):
+         if name.isupper() and name not in __sandbox__._options:
+             option = Option(env=name, nargs='*', help=name)
+             helper.handle(option)
++    log.info('remaining_mozconfig_options finished')
+ 
+ # Please do not add anything after remaining_mozconfig_options()
+diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
+index fc640c75e..c5508dfb7 100755
+--- a/build/moz.configure/toolchain.configure
++++ b/build/moz.configure/toolchain.configure
+@@ -391,7 +391,7 @@ def get_compiler_info(compiler, language):
+         ('CPU', CPU_preprocessor_checks),
+         ('KERNEL', kernel_preprocessor_checks),
+     ):
+-        for n, (value, condition) in enumerate(preprocessor_checks.iteritems()):
++        for n, (value, condition) in enumerate(preprocessor_checks.items()):
+             check += dedent('''\
+                 #%(if)s %(condition)s
+                 %%%(name)s "%(value)s"
+@@ -425,9 +425,9 @@ def get_compiler_info(compiler, language):
+     data = {}
+     for line in result.splitlines():
+         if line.startswith(b'%'):
+-            k, _, v = line.partition(' ')
+-            k = k.lstrip('%')
+-            data[k] = v.replace(' ', '').lstrip('"').rstrip('"')
++            k, _, v = line.partition(b' ')
++            k = k.lstrip(b'%').decode('utf-8')
++            data[k] = v.replace(b' ', b'').lstrip(b'"').rstrip(b'"').decode('utf-8')
+             log.debug('%s = %s', k, data[k])
+ 
+     try:
+@@ -551,7 +551,7 @@ def check_compiler(compiler, language, target):
+     )
+ 
+ 
+-@imports(_from='__builtin__', _import='open')
++@imports(_from='builtins', _import='open')
+ @imports('json')
+ @imports('subprocess')
+ @imports('sys')
+@@ -606,7 +606,7 @@ def vs_major_version(value):
+ 
+ 
+ @depends(host, target, vs_major_version, check_build_environment, '--with-visual-studio-version')
+-@imports(_from='__builtin__', _import='sorted')
++@imports(_from='builtins', _import='sorted')
+ @imports(_from='operator', _import='itemgetter')
+ @imports('platform')
+ def vc_compiler_path(host, target, vs_major_version, env, vs_release_name):
+@@ -807,7 +807,7 @@ def compiler(language, host_or_target, c_compiler=None, other_compiler=None,
+                     target.os != 'Android':
+                 return namespace(**{
+                     k: [] if k == 'flags' else v
+-                    for k, v in other_compiler.__dict__.iteritems()
++                    for k, v in other_compiler.__dict__.items()
+                 })
+ 
+     # Normally, we'd use `var` instead of `_var`, but the interaction with
+@@ -1238,7 +1238,7 @@ set_config('VISIBILITY_FLAGS', visibility_flags)
+ 
+ @depends(c_compiler)
+ @imports('multiprocessing')
+-@imports(_from='__builtin__', _import='min')
++@imports(_from='builtins', _import='min')
+ def pgo_flags(compiler):
+     if compiler.type in ('gcc', 'clang'):
+         return namespace(
+@@ -1517,6 +1517,8 @@ def enable_gnu_linker(enable_gold_option, c_compiler, developer_options, build_e
+         gold = check_cmd_output(*detection_cmd).strip()
+         if not gold:
+             return
++        if isinstance(gold, bytes):
++            gold = gold.decode('utf-8')
+ 
+         goldFullPath = find_program(gold)
+         if goldFullPath is None:
+diff --git a/build/moz.configure/util.configure b/build/moz.configure/util.configure
+index 3284fd8b5..218813e2d 100644
+--- a/build/moz.configure/util.configure
++++ b/build/moz.configure/util.configure
+@@ -25,7 +25,6 @@ def configure_error(message):
+ # does not.
+ 
+ 
+-@imports(_from='__builtin__', _import='unicode')
+ @imports('subprocess')
+ @imports('sys')
+ @imports(_from='mozbuild.configure.util', _import='LineIO')
+@@ -39,10 +38,10 @@ def check_cmd_output(*args, **kwargs):
+     if 'env' in kwargs:
+         normalized_env = {}
+         for k, v in kwargs['env'].items():
+-            if isinstance(k, unicode):
++            if isinstance(k, str):
+                 k = k.encode('utf-8', 'strict')
+ 
+-            if isinstance(v, unicode):
++            if isinstance(v, str):
+                 v = v.encode('utf-8', 'strict')
+ 
+             normalized_env[k] = v
+@@ -285,7 +284,7 @@ def unique_list(l):
+ #     ('19.0', 'x64', r'C:\...\amd64\cl.exe')
+ #     ('19.0', 'x86', r'C:\...\amd64_x86\cl.exe')
+ @imports(_import='_winreg', _as='winreg')
+-@imports(_from='__builtin__', _import='WindowsError')
++@imports(_from='builtins', _import='WindowsError')
+ @imports(_from='fnmatch', _import='fnmatch')
+ def get_registry_values(pattern, get_32_and_64_bit=False):
+     def enum_helper(func, key):
+@@ -360,6 +359,8 @@ def get_registry_values(pattern, get_32_and_64_bit=False):
+ @imports(_from='mozbuild.configure.util', _import='Version', _as='_Version')
+ def Version(v):
+     'A version number that can be compared usefully.'
++    if isinstance(v, bytes):
++        v = v.decode('utf-8')
+     return _Version(v)
+ 
+ # Denotes a deprecated option. Combines option() and @depends:
+diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
+index a5b790e3b..2b88fc447 100644
+--- a/build/moz.configure/windows.configure
++++ b/build/moz.configure/windows.configure
+@@ -10,7 +10,7 @@ option('--with-windows-version', nargs=1, default='603',
+ 
+ 
+ @depends('--with-windows-version')
+-@imports(_from='__builtin__', _import='ValueError')
++@imports(_from='builtins', _import='ValueError')
+ def valid_windows_version(value):
+     if not value:
+         die('Cannot build with --without-windows-version')
+@@ -50,8 +50,8 @@ def windows_sdk_dir(value, host):
+ 
+ @imports('os')
+ @imports('re')
+-@imports(_from='__builtin__', _import='sorted')
+-@imports(_from='__builtin__', _import='WindowsError')
++@imports(_from='builtins', _import='sorted')
++@imports(_from='builtins', _import='WindowsError')
+ def get_sdk_dirs(sdk, subdir):
+     def get_dirs_containing(sdk, stem, subdir):
+         base = os.path.join(sdk, stem)
+@@ -96,7 +96,7 @@ def valid_windows_sdk_dir_result(value):
+ 
+ @depends(c_compiler, windows_sdk_dir, valid_windows_version, 'WINDOWSSDKDIR')
+ @checking('for Windows SDK', valid_windows_sdk_dir_result)
+-@imports(_from='__builtin__', _import='sorted')
++@imports(_from='builtins', _import='sorted')
+ @imports(_from='textwrap', _import='dedent')
+ def valid_windows_sdk_dir(compiler, windows_sdk_dir, target_version,
+                           windows_sdk_dir_env):
+@@ -174,7 +174,7 @@ def valid_ucrt_sdk_dir_result(value):
+ @depends(windows_sdk_dir, 'WINDOWSSDKDIR', c_compiler)
+ @checking('for Universal CRT SDK', valid_ucrt_sdk_dir_result)
+ @imports('os')
+-@imports(_from='__builtin__', _import='sorted')
++@imports(_from='builtins', _import='sorted')
+ @imports(_import='mozpack.path', _as='mozpath')
+ def valid_ucrt_sdk_dir(windows_sdk_dir, windows_sdk_dir_env, c_compiler):
+     if windows_sdk_dir_env:
+diff --git a/build/templates.mozbuild b/build/templates.mozbuild
+index 3da850ce5..ae5e410fe 100644
+--- a/build/templates.mozbuild
++++ b/build/templates.mozbuild
+@@ -10,7 +10,7 @@ def Binary():
+     templates.'''
+ 
+     # Add -llog by default, since we use it all over the place.
+-    if CONFIG['OS_TARGET'] == 'Android':
++    if str(CONFIG['OS_TARGET']) == 'Android':
+         OS_LIBS += ['log']
+ 
+ 
+diff --git a/config/MozZipFile.py b/config/MozZipFile.py
+index 337fe0521..dc7add4c3 100644
+--- a/config/MozZipFile.py
++++ b/config/MozZipFile.py
+@@ -18,7 +18,7 @@ class ZipFile(zipfile.ZipFile):
+   def __init__(self, file, mode="r", compression=zipfile.ZIP_STORED,
+                lock = False):
+     if lock:
+-      assert isinstance(file, basestring)
++      assert isinstance(file, str)
+       self.lockfile = lock_file(file + '.lck')
+     else:
+       self.lockfile = None
+@@ -46,7 +46,7 @@ class ZipFile(zipfile.ZipFile):
+                               date_time=time.localtime(time.time()))
+       zinfo.compress_type = self.compression
+       # Add some standard UNIX file access permissions (-rw-r--r--).
+-      zinfo.external_attr = (0x81a4 & 0xFFFF) << 16L
++      zinfo.external_attr = (0x81a4 & 0xFFFF) << 16
+     else:
+       zinfo = zinfo_or_arcname
+ 
+@@ -58,7 +58,7 @@ class ZipFile(zipfile.ZipFile):
+     # as the old, reuse the existing entry.
+ 
+     doSeek = False # store if we need to seek to the eof after overwriting
+-    if self.NameToInfo.has_key(zinfo.filename):
++    if zinfo.filename in self.NameToInfo:
+       # Find the last ZipInfo with our name.
+       # Last, because that's catching multiple overwrites
+       i = len(self.filelist)
+@@ -109,14 +109,14 @@ class ZipFile(zipfile.ZipFile):
+       # adjust file mode if we originally just wrote, now we rewrite
+       self.fp.close()
+       self.fp = open(self.filename, 'r+b')
+-    all = map(lambda zi: (zi, True), self.filelist) + \
+-        map(lambda zi: (zi, False), self._remove)
++    all = [(zi, True) for zi in self.filelist] + \
++        [(zi, False) for zi in self._remove]
+     all.sort(lambda l, r: cmp(l[0].header_offset, r[0].header_offset))
+     # empty _remove for multiple closes
+     self._remove = []
+ 
+     lengths = [all[i+1][0].header_offset - all[i][0].header_offset
+-               for i in xrange(len(all)-1)]
++               for i in range(len(all)-1)]
+     lengths.append(self.end - all[-1][0].header_offset)
+     to_pos = 0
+     for (zi, keep), length in zip(all, lengths):
+diff --git a/config/expandlibs.py b/config/expandlibs.py
+index ac06c432f..df1fed15d 100644
+--- a/config/expandlibs.py
++++ b/config/expandlibs.py
+@@ -26,7 +26,7 @@ ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} following these rules:
+   descriptor contains. And for each of these LIBS, also apply the same
+   rules.
+ '''
+-from __future__ import with_statement
++
+ import sys, os, errno
+ import expandlibs_config as conf
+ 
+@@ -36,7 +36,7 @@ def ensureParentDir(file):
+     if dir and not os.path.exists(dir):
+         try:
+             os.makedirs(dir)
+-        except OSError, error:
++        except OSError as error:
+             if error.errno != errno.EEXIST:
+                 raise
+ 
+@@ -140,4 +140,4 @@ class ExpandArgs(list):
+         return [relativize(arg)]
+ 
+ if __name__ == '__main__':
+-    print " ".join(ExpandArgs(sys.argv[1:]))
++    print(" ".join(ExpandArgs(sys.argv[1:])))
+diff --git a/config/expandlibs_exec.py b/config/expandlibs_exec.py
+index df656016c..fb786a6a8 100644
+--- a/config/expandlibs_exec.py
++++ b/config/expandlibs_exec.py
+@@ -20,7 +20,7 @@ With the --symbol-order argument, followed by a file name, it will add the
+ relevant linker options to change the order in which the linker puts the
+ symbols appear in the resulting binary. Only works for ELF targets.
+ '''
+-from __future__ import with_statement
++
+ import sys
+ import os
+ from expandlibs import (
+@@ -304,11 +304,11 @@ class SectionFinder(object):
+         return syms
+ 
+ def print_command(out, args):
+-    print >>out, "Executing: " + " ".join(args)
++    print("Executing: " + " ".join(args), file=out)
+     for tmp in [f for f in args.tmp if os.path.isfile(f)]:
+-        print >>out, tmp + ":"
++        print(tmp + ":", file=out)
+         with open(tmp) as file:
+-            print >>out, "".join(["    " + l for l in file.readlines()])
++            print("".join(["    " + l for l in file.readlines()]), file=out)
+     out.flush()
+ 
+ def main(args, proc_callback=None):
+@@ -338,13 +338,13 @@ def main(args, proc_callback=None):
+             proc = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
+             if proc_callback:
+                 proc_callback(proc)
+-        except Exception, e:
+-            print >>sys.stderr, 'error: Launching', args, ':', e
++        except Exception as e:
++            print('error: Launching', args, ':', e, file=sys.stderr)
+             raise e
+         (stdout, stderr) = proc.communicate()
+         if proc.returncode and not options.verbose:
+             print_command(sys.stderr, args)
+-        sys.stderr.write(stdout)
++        sys.stderr.write(stdout.decode("utf-8"))
+         sys.stderr.flush()
+         if proc.returncode:
+             return proc.returncode
+diff --git a/config/expandlibs_gen.py b/config/expandlibs_gen.py
+index b1de63cd0..dc62bd184 100644
+--- a/config/expandlibs_gen.py
++++ b/config/expandlibs_gen.py
+@@ -5,7 +5,7 @@
+ '''Given a list of object files and library names, prints a library
+ descriptor to standard output'''
+ 
+-from __future__ import with_statement
++
+ import sys
+ import os
+ import expandlibs_config as conf
+@@ -38,4 +38,4 @@ if __name__ == '__main__':
+ 
+     ensureParentDir(options.output)
+     with open(options.output, 'w') as outfile:
+-        print >>outfile, generate(args)
++        print(generate(args), file=outfile)
+diff --git a/configure.py b/configure.py
+index 771e34e38..bee329d7c 100644
+--- a/configure.py
++++ b/configure.py
+@@ -2,10 +2,11 @@
+ # 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/.
+ 
+-from __future__ import print_function, unicode_literals
++
+ 
+ import codecs
+ import itertools
++import logging
+ import os
+ import sys
+ import textwrap
+@@ -34,7 +35,9 @@ from mozbuild.util import (
+ def main(argv):
+     config = {}
+     sandbox = ConfigureSandbox(config, os.environ, argv)
++    print('sandbox.run started')
+     sandbox.run(os.path.join(os.path.dirname(__file__), 'moz.configure'))
++    print('sandbox.run finished')
+ 
+     if sandbox._help:
+         return 0
+@@ -56,12 +59,21 @@ def config_status(config):
+ 
+     sanitized_config = {}
+     sanitized_config['substs'] = {
+-        k: sanitized_bools(v) for k, v in config.iteritems()
++        k: sanitized_bools(v) for k, v in config.items()
+         if k not in ('DEFINES', 'non_global_defines', 'TOPSRCDIR', 'TOPOBJDIR',
+                      'ALL_CONFIGURE_PATHS')
+     }
++
++    # Hack around OptionValue entries unknown during compile
++    for opt in ('BUILD_BACKENDS', 'MOZ_UI_LOCALE', 'RUSTFLAGS' ):
++        old = sanitized_config['substs'][opt]
++        new = []
++        for setting in old:
++            new.append(setting)
++        sanitized_config['substs'][opt] = new
++
+     sanitized_config['defines'] = {
+-        k: sanitized_bools(v) for k, v in config['DEFINES'].iteritems()
++        k: sanitized_bools(v) for k, v in config['DEFINES'].items()
+     }
+     sanitized_config['non_global_defines'] = config['non_global_defines']
+     sanitized_config['topsrcdir'] = config['TOPSRCDIR']
+@@ -71,20 +83,17 @@ def config_status(config):
+     # Create config.status. Eventually, we'll want to just do the work it does
+     # here, when we're able to skip configure tests/use cached results/not rely
+     # on autoconf.
+-    print("Creating config.status", file=sys.stderr)
+-    encoding = 'mbcs' if sys.platform == 'win32' else 'utf-8'
+-    with codecs.open('config.status', 'w', encoding) as fh:
++    logging.getLogger('moz.configure').info('Creating config.status')
++    with codecs.open('config.status', 'w', 'utf-8') as fh:
+         fh.write(textwrap.dedent('''\
+             #!%(python)s
+-            # coding=%(encoding)s
+-            from __future__ import unicode_literals
+-            from mozbuild.util import encode
+-            encoding = '%(encoding)s'
+-        ''') % {'python': config['PYTHON'], 'encoding': encoding})
++            # coding=utf-8
++            print("config.status started")
++        ''') % {'python': config['PYTHON']})
+         # A lot of the build backend code is currently expecting byte
+         # strings and breaks in subtle ways with unicode strings. (bug 1296508)
+-        for k, v in sanitized_config.iteritems():
+-            fh.write('%s = encode(%s, encoding)\n' % (k, indented_repr(v)))
++        for k, v in sanitized_config.items():
++            fh.write('%s = %s\n' % (k, indented_repr(v)))
+         fh.write("__all__ = ['topobjdir', 'topsrcdir', 'defines', "
+                  "'non_global_defines', 'substs', 'mozconfig']")
+ 
+@@ -97,6 +106,9 @@ def config_status(config):
+                     args = dict([(name, globals()[name]) for name in __all__])
+                     config_status(**args)
+             '''))
++        fh.write(textwrap.dedent('''
++            print("config.status finished")
++        '''))
+ 
+     partial_config = PartialConfigEnvironment(config['TOPOBJDIR'])
+     partial_config.write_vars(sanitized_config)
+@@ -116,7 +128,7 @@ def config_status(config):
+     # executable permissions.
+     os.chmod('config.status', 0o755)
+     if config.get('MOZ_BUILD_APP') != 'js' or config.get('JS_STANDALONE'):
+-        os.environ[b'WRITE_MOZINFO'] = b'1'
++        os.environ['WRITE_MOZINFO'] = '1'
+         from mozbuild.config_status import config_status
+ 
+         # Some values in sanitized_config also have more complex types, such as
+@@ -127,7 +139,7 @@ def config_status(config):
+ 
+         # A lot of the build backend code is currently expecting byte strings
+         # and breaks in subtle ways with unicode strings.
+-        return config_status(args=[], **encode(sanitized_config, encoding))
++        return config_status(args=[], **sanitized_config)
+     return 0
+ 
+ 
+diff --git a/js/src/build/moz.build b/js/src/build/moz.build
+index a7f5fa4ce..856cae32d 100644
+--- a/js/src/build/moz.build
++++ b/js/src/build/moz.build
+@@ -47,22 +47,22 @@ USE_LIBS += [
+     'zlib',
+ ]
+ 
+-if CONFIG['OS_ARCH'] not in ('WINNT', 'HP-UX'):
++if str(CONFIG['OS_ARCH']) not in ('WINNT', 'HP-UX'):
+     OS_LIBS += [
+         'm',
+     ]
+ 
+-if CONFIG['OS_ARCH'] == 'FreeBSD':
++if str(CONFIG['OS_ARCH']) == 'FreeBSD':
+     OS_LIBS += [
+         '-pthread',
+     ]
+ 
+-if CONFIG['OS_ARCH'] == 'Linux':
++if str(CONFIG['OS_ARCH']) == 'Linux':
+     OS_LIBS += [
+         'dl',
+     ]
+ 
+-if CONFIG['OS_ARCH'] == 'SunOS':
++if str(CONFIG['OS_ARCH']) == 'SunOS':
+     OS_LIBS += [
+         'posix4',
+         'dl',
+diff --git a/js/src/builtin/embedjs.py b/js/src/builtin/embedjs.py
+index ba25e71c1..d4f2de122 100644
+--- a/js/src/builtin/embedjs.py
++++ b/js/src/builtin/embedjs.py
+@@ -36,7 +36,7 @@
+ #
+ # It uses the C preprocessor to process its inputs.
+ 
+-from __future__ import with_statement
++
+ import re, sys, os, subprocess
+ import shlex
+ import which
+@@ -52,8 +52,8 @@ def ToCAsciiArray(lines):
+ 
+ def ToCArray(lines):
+   result = []
+-  for chr in lines:
+-    result.append(str(ord(chr)))
++  for char in lines:
++    result.append("0x%0.2X" % char)
+   return ", ".join(result)
+ 
+ HEADER_TEMPLATE = """\
+@@ -87,7 +87,7 @@ def embed(cxx, preprocessorOption, cppflags, msgs, sources, c_out, js_out, names
+ 
+   js_out.write(processed)
+   import zlib
+-  compressed = zlib.compress(processed)
++  compressed = zlib.compress(processed.encode('utf-8'))
+   data = ToCArray(compressed)
+   c_out.write(HEADER_TEMPLATE % {
+     'sources_type': 'unsigned char',
+@@ -107,7 +107,7 @@ def preprocess(cxx, preprocessorOption, source, args = []):
+   tmpOut = 'self-hosting-preprocessed.pp';
+   outputArg = shlex.split(preprocessorOption + tmpOut)
+ 
+-  with open(tmpIn, 'wb') as input:
++  with open(tmpIn, 'w') as input:
+     input.write(source)
+   print(' '.join(cxx + outputArg + args + [tmpIn]))
+   result = subprocess.Popen(cxx + outputArg + args + [tmpIn]).wait()
+diff --git a/js/src/configure b/js/src/configure
+index 3b3a39af3..8f5ea41d0 100755
+--- a/js/src/configure
++++ b/js/src/configure
+@@ -24,4 +24,4 @@ export OLD_CONFIGURE="$SRCDIR"/old-configure
+ 
+ set -- "$@" --enable-project=js
+ 
+-which python2.7 > /dev/null && exec python2.7 "$TOPSRCDIR/configure.py" "$@" || exec python "$TOPSRCDIR/configure.py" "$@"
++which python3 > /dev/null && exec python3 "$TOPSRCDIR/configure.py" "$@" || exec python "$TOPSRCDIR/configure.py" "$@"
+diff --git a/js/src/frontend/GenerateReservedWords.py b/js/src/frontend/GenerateReservedWords.py
+index 3aa2307b9..381c8e2b4 100644
+--- a/js/src/frontend/GenerateReservedWords.py
++++ b/js/src/frontend/GenerateReservedWords.py
+@@ -80,14 +80,14 @@ def split_list_per_column(reserved_word_list, column):
+         per_column = column_dict.setdefault(word[column], [])
+         per_column.append(item)
+ 
+-    return sorted(column_dict.items(), key=lambda (char, word): ord(char))
++    return sorted(list(column_dict.items()), key=lambda char_word: ord(char_word[0]))
+ 
+ def generate_letter_switch(opt, unprocessed_columns, reserved_word_list,
+                            columns=None):
+     assert(len(reserved_word_list) != 0);
+ 
+     if not columns:
+-        columns = range(0, unprocessed_columns)
++        columns = list(range(0, unprocessed_columns))
+ 
+     if len(reserved_word_list) == 1:
+         index, word = reserved_word_list[0]
+@@ -161,7 +161,7 @@ def split_list_per_length(reserved_word_list):
+         per_length = length_dict.setdefault(len(word), [])
+         per_length.append(item)
+ 
+-    return sorted(length_dict.items(), key=lambda (length, word): length)
++    return sorted(list(length_dict.items()), key=lambda length_word: length_word[0])
+ 
+ def generate_switch(opt, reserved_word_list):
+     assert(len(reserved_word_list) != 0);
+diff --git a/js/src/gc/GenerateStatsPhases.py b/js/src/gc/GenerateStatsPhases.py
+index 2daf83555..e39a26a4b 100644
+--- a/js/src/gc/GenerateStatsPhases.py
++++ b/js/src/gc/GenerateStatsPhases.py
+@@ -267,7 +267,7 @@ def generateHeader(out):
+     #
+     # Generate PhaseKind enum.
+     #
+-    phaseKindNames = map(lambda phaseKind: phaseKind.name, AllPhaseKinds)
++    phaseKindNames = [phaseKind.name for phaseKind in AllPhaseKinds]
+     extraPhaseKinds = [
+         "NONE = LIMIT",
+         "EXPLICIT_SUSPENSION = LIMIT",
+@@ -279,7 +279,7 @@ def generateHeader(out):
+     #
+     # Generate Phase enum.
+     #
+-    phaseNames = map(lambda phase: phase.name, AllPhases)
++    phaseNames = [phase.name for phase in AllPhases]
+     extraPhases = [
+         "NONE = LIMIT",
+         "EXPLICIT_SUSPENSION = LIMIT",
+diff --git a/js/src/old-configure.in b/js/src/old-configure.in
+index 11c3d5a2e..389265404 100644
+--- a/js/src/old-configure.in
++++ b/js/src/old-configure.in
+@@ -1884,3 +1884,5 @@ if test "$JS_STANDALONE"; then
+ fi
+ 
+ rm -fr confdefs* $ac_clean_files
++echo confdefs* $ac_clean_files removed
++echo "old-configure done"
+diff --git a/memory/build/moz.build b/memory/build/moz.build
+index e2c715271..f09ce7935 100644
+--- a/memory/build/moz.build
++++ b/memory/build/moz.build
+@@ -30,7 +30,7 @@ else:
+         'fallback.cpp',
+     ]
+ 
+-if CONFIG['OS_TARGET'] == 'Darwin' and (CONFIG['MOZ_REPLACE_MALLOC'] or
++if str(CONFIG['OS_TARGET']) == 'Darwin' and (CONFIG['MOZ_REPLACE_MALLOC'] or
+         CONFIG['MOZ_MEMORY']):
+     SOURCES += [
+         'zone.c',
+@@ -38,15 +38,15 @@ if CONFIG['OS_TARGET'] == 'Darwin' and (CONFIG['MOZ_REPLACE_MALLOC'] or
+ 
+ Library('memory')
+ 
+-if CONFIG['OS_TARGET'] == 'Android' and CONFIG['CC_TYPE'] == 'clang':
++if str(CONFIG['OS_TARGET']) == 'Android' and str(CONFIG['CC_TYPE']) == 'clang':
+     CXXFLAGS += [
+         '-Wno-tautological-pointer-compare',
+     ]
+ 
+-if CONFIG['MOZ_BUILD_APP'] != 'memory':
++if str(CONFIG['MOZ_BUILD_APP']) != 'memory':
+     FINAL_LIBRARY = 'mozglue'
+ 
+-if CONFIG['CC_TYPE'] in ('msvc', 'clang-cl'):
++if str(CONFIG['CC_TYPE']) in ('msvc', 'clang-cl'):
+     CXXFLAGS += ['-wd4273'] # inconsistent dll linkage (bug 558163)
+ 
+ if CONFIG['MOZ_REPLACE_MALLOC_STATIC']:
+diff --git a/mozglue/build/moz.build b/mozglue/build/moz.build
+index 53758485a..5e9308802 100644
+--- a/mozglue/build/moz.build
++++ b/mozglue/build/moz.build
+@@ -9,12 +9,12 @@
+ # If this is ever changed, update MOZ_SHARED_MOZGLUE in browser/installer/Makefile.in
+ if CONFIG['JS_STANDALONE'] and not CONFIG['MOZ_MEMORY']:
+     Library('mozglue')
+-elif CONFIG['OS_TARGET'] in ('WINNT', 'Darwin', 'Android'):
++elif str(CONFIG['OS_TARGET']) in ('WINNT', 'Darwin', 'Android'):
+     SharedLibrary('mozglue')
+ else:
+     Library('mozglue')
+ 
+-if CONFIG['OS_TARGET'] == 'Android':
++if str(CONFIG['OS_TARGET']) == 'Android':
+     SOURCES += [
+         'BionicGlue.cpp',
+     ]
+@@ -24,14 +24,14 @@ if CONFIG['MOZ_ASAN']:
+         'AsanOptions.cpp',
+     ]
+ 
+-if CONFIG['OS_TARGET'] == 'WINNT':
++if str(CONFIG['OS_TARGET']) == 'WINNT':
+     DEFFILE = 'mozglue.def'
+     # We'll break the DLL blocklist if we immediately load user32.dll
+     DELAYLOAD_DLLS += [
+         'user32.dll',
+     ]
+ 
+-    if CONFIG['CC_TYPE'] == "msvc":
++    if str(CONFIG['CC_TYPE']) == "msvc":
+         CFLAGS += ['-guard:cf']
+         CXXFLAGS += ['-guard:cf']
+         LDFLAGS += ['-guard:cf']
+@@ -48,12 +48,12 @@ if CONFIG['MOZ_WIDGET_TOOLKIT']:
+             'dummy.cpp',
+         ]
+ 
+-    if CONFIG['OS_TARGET'] == 'WINNT':
++    if str(CONFIG['OS_TARGET']) == 'WINNT':
+         LOCAL_INCLUDES += [
+             '/memory/build',
+         ]
+ 
+-        if CONFIG['CC_TYPE'] == "msvc":
++        if str(CONFIG['CC_TYPE']) == "msvc":
+             SOURCES += ['WindowsCFGStatus.cpp']
+         SOURCES += [
+             'Authenticode.cpp',
+@@ -85,17 +85,17 @@ if CONFIG['MOZ_WIDGET_TOOLKIT']:
+         'WindowsDllBlocklist.h',
+     ]
+ 
+-    if CONFIG['CPU_ARCH'].startswith('x86'):
++    if str(CONFIG['CPU_ARCH']).startswith('x86'):
+         SOURCES += [
+             'SSE.cpp',
+         ]
+ 
+-    if CONFIG['CPU_ARCH'] == 'arm':
++    if str(CONFIG['CPU_ARCH']) == 'arm':
+         SOURCES += [
+             'arm.cpp',
+         ]
+ 
+-    if CONFIG['CPU_ARCH'].startswith('mips'):
++    if str(CONFIG['CPU_ARCH']).startswith('mips'):
+         SOURCES += [
+             'mips.cpp',
+         ]
+@@ -114,7 +114,7 @@ LIBRARY_DEFINES['MOZ_HAS_MOZGLUE'] = True
+ 
+ LDFLAGS += CONFIG['MOZ_GLUE_WRAP_LDFLAGS']
+ 
+-if CONFIG['OS_TARGET'] == 'Darwin':
++if str(CONFIG['OS_TARGET']) == 'Darwin':
+     # On OSX 10.10.3, a dead lock happens in some cases involving dynamic
+     # symbol resolution for symbols that jemalloc itself uses. While it
+     # might be possible to find a way to avoid all such symbol resolutions,
+@@ -124,7 +124,7 @@ if CONFIG['OS_TARGET'] == 'Darwin':
+     # for TLS.
+     LDFLAGS += ['-Wl,-bind_at_load']
+ 
+-if CONFIG['MOZ_LINKER'] and CONFIG['TARGET_CPU'] == 'arm':
++if CONFIG['MOZ_LINKER'] and str(CONFIG['TARGET_CPU']) == 'arm':
+     LDFLAGS += ['-Wl,-version-script,%s/arm-eabi-filter' % SRCDIR]
+ 
+ DIST_INSTALL = True
+diff --git a/python/mozbuild/mozbuild/action/check_binary.py b/python/mozbuild/mozbuild/action/check_binary.py
+index 5665ef053..b696f73d6 100644
+--- a/python/mozbuild/mozbuild/action/check_binary.py
++++ b/python/mozbuild/mozbuild/action/check_binary.py
+@@ -104,6 +104,8 @@ def iter_readelf_symbols(target, binary):
+ 
+ def iter_readelf_dynamic(target, binary):
+     for line in get_output(target['readelf'], '-d', binary):
++        if isinstance(line, bytes):
++            line=line.decode('utf-8')
+         data = line.split(None, 2)
+         if data and len(data) == 3 and data[0].startswith('0x'):
+             yield data[1].rstrip(')').lstrip('('), data[2]
+diff --git a/python/mozbuild/mozbuild/action/process_define_files.py b/python/mozbuild/mozbuild/action/process_define_files.py
+index 563fbb8fa..c3df2869b 100644
+--- a/python/mozbuild/mozbuild/action/process_define_files.py
++++ b/python/mozbuild/mozbuild/action/process_define_files.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import argparse
+ import os
+@@ -53,7 +53,7 @@ def process_define_file(output, input):
+                                 'CONFIGURE_DEFINE_FILE')
+                         defines = '\n'.join(sorted(
+                             '#define %s %s' % (name, val)
+-                            for name, val in config.defines['ALLDEFINES'].iteritems()))
++                            for name, val in config.defines['ALLDEFINES'].items()))
+                         l = l[:m.start('cmd') - 1] \
+                             + defines + l[m.end('name'):]
+                     elif cmd == 'define':
+diff --git a/python/mozbuild/mozbuild/backend/base.py b/python/mozbuild/mozbuild/backend/base.py
+index a8d5c94e0..7cda63475 100644
+--- a/python/mozbuild/mozbuild/backend/base.py
++++ b/python/mozbuild/mozbuild/backend/base.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ from abc import (
+     ABCMeta,
+@@ -31,7 +31,7 @@ from .configenvironment import ConfigEnvironment
+ from mozbuild.base import ExecutionSummary
+ 
+ 
+-class BuildBackend(LoggingMixin):
++class BuildBackend(LoggingMixin, metaclass=ABCMeta):
+     """Abstract base class for build backends.
+ 
+     A build backend is merely a consumer of the build configuration (the output
+@@ -39,8 +39,6 @@ class BuildBackend(LoggingMixin):
+     is the discretion of the specific implementation.
+     """
+ 
+-    __metaclass__ = ABCMeta
+-
+     def __init__(self, environment):
+         assert isinstance(environment, (ConfigEnvironment, EmptyConfig))
+         self.populate_logger()
+@@ -311,7 +309,7 @@ class BuildBackend(LoggingMixin):
+         srcdir = mozpath.dirname(obj.input_path)
+         pp.context.update({
+             k: ' '.join(v) if isinstance(v, list) else v
+-            for k, v in obj.config.substs.iteritems()
++            for k, v in obj.config.substs.items()
+         })
+         pp.context.update(
+             top_srcdir=obj.topsrcdir,
+diff --git a/python/mozbuild/mozbuild/backend/common.py b/python/mozbuild/mozbuild/backend/common.py
+index d00cbbcaf..f747df446 100644
+--- a/python/mozbuild/mozbuild/backend/common.py
++++ b/python/mozbuild/mozbuild/backend/common.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ import json
+ import os
+@@ -174,7 +174,7 @@ class CommonBackend(BuildBackend):
+         if len(self._idl_manager.idls):
+             self._write_rust_xpidl_summary(self._idl_manager)
+             self._handle_idl_manager(self._idl_manager)
+-            self._handle_generated_sources(mozpath.join(self.environment.topobjdir, 'dist/include/%s.h' % idl['root']) for idl in self._idl_manager.idls.values())
++            self._handle_generated_sources(mozpath.join(self.environment.topobjdir, 'dist/include/%s.h' % idl['root']) for idl in list(self._idl_manager.idls.values()))
+ 
+ 
+         for config in self._configs:
+@@ -372,14 +372,14 @@ class CommonBackend(BuildBackend):
+ 
+         with self._write_file(mozpath.join(topobjdir, 'dist', 'xpcrs', 'rt', 'all.rs')) as fh:
+             fh.write("// THIS FILE IS GENERATED - DO NOT EDIT\n\n")
+-            for idl in manager.idls.values():
++            for idl in list(manager.idls.values()):
+                 fh.write(include_tmpl % ("rt", idl['root']))
+                 fh.write(";\n")
+ 
+         with self._write_file(mozpath.join(topobjdir, 'dist', 'xpcrs', 'bt', 'all.rs')) as fh:
+             fh.write("// THIS FILE IS GENERATED - DO NOT EDIT\n\n")
+             fh.write("&[\n")
+-            for idl in manager.idls.values():
++            for idl in list(manager.idls.values()):
+                 fh.write(include_tmpl % ("bt", idl['root']))
+                 fh.write(",\n")
+             fh.write("]\n")
+diff --git a/python/mozbuild/mozbuild/backend/configenvironment.py b/python/mozbuild/mozbuild/backend/configenvironment.py
+index 3676a7d18..f0896cea4 100644
+--- a/python/mozbuild/mozbuild/backend/configenvironment.py
++++ b/python/mozbuild/mozbuild/backend/configenvironment.py
+@@ -2,14 +2,14 @@
+ # 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/.
+ 
+-from __future__ import absolute_import
++
+ 
+ import os
+ import sys
+ import json
+ 
+ from collections import Iterable, OrderedDict
+-from types import StringTypes, ModuleType
++from types import ModuleType
+ 
+ import mozpack.path as mozpath
+ 
+@@ -22,7 +22,7 @@ from mozbuild.shellutil import quote as shell_quote
+ 
+ 
+ if sys.version_info.major == 2:
+-    text_type = unicode
++    text_type = str
+ else:
+     text_type = str
+ 
+@@ -151,7 +151,7 @@ class ConfigEnvironment(object):
+             shell_quote(self.defines[name]).replace('$', '$$'))
+             for name in sorted(global_defines)])
+         def serialize(name, obj):
+-            if isinstance(obj, StringTypes):
++            if isinstance(obj, str):
+                 return obj
+             if isinstance(obj, Iterable):
+                 return ' '.join(obj)
+@@ -185,8 +185,8 @@ class ConfigEnvironment(object):
+                 except UnicodeDecodeError:
+                     return v.decode('utf-8', 'replace')
+ 
+-        for k, v in self.substs.items():
+-            if not isinstance(v, StringTypes):
++        for k, v in list(self.substs.items()):
++            if not isinstance(v, str):
+                 if isinstance(v, Iterable):
+                     type(v)(decode(i) for i in v)
+             elif not isinstance(v, text_type):
+@@ -255,7 +255,7 @@ class PartialConfigDict(object):
+         existing_files = self._load_config_track()
+ 
+         new_files = set()
+-        for k, v in values.iteritems():
++        for k, v in values.items():
+             new_files.add(self._write_file(k, v))
+ 
+         for filename in existing_files - new_files:
+diff --git a/python/mozbuild/mozbuild/backend/fastermake.py b/python/mozbuild/mozbuild/backend/fastermake.py
+index b029aa10f..b66ade64f 100644
+--- a/python/mozbuild/mozbuild/backend/fastermake.py
++++ b/python/mozbuild/mozbuild/backend/fastermake.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals, print_function
++
+ 
+ from mozbuild.backend.base import PartialBackend
+ from mozbuild.backend.common import CommonBackend
+@@ -140,7 +140,7 @@ class FasterMakeBackend(CommonBackend, PartialBackend):
+         # Add information for chrome manifest generation
+         manifest_targets = []
+ 
+-        for target, entries in self._manifest_entries.iteritems():
++        for target, entries in self._manifest_entries.items():
+             manifest_targets.append(target)
+             install_target = mozpath.basedir(target, install_manifests_bases)
+             self._install_manifests[install_target].add_content(
+@@ -152,13 +152,13 @@ class FasterMakeBackend(CommonBackend, PartialBackend):
+                          % ' '.join(self._install_manifests.keys()))
+ 
+         # Add dependencies we infered:
+-        for target, deps in self._dependencies.iteritems():
++        for target, deps in self._dependencies.items():
+             mk.create_rule([target]).add_dependencies(
+                 '$(TOPOBJDIR)/%s' % d for d in deps)
+ 
+         mk.add_statement('include $(TOPSRCDIR)/config/faster/rules.mk')
+ 
+-        for base, install_manifest in self._install_manifests.iteritems():
++        for base, install_manifest in self._install_manifests.items():
+             with self._write_file(
+                     mozpath.join(self.environment.topobjdir, 'faster',
+                                  'install_%s' % base.replace('/', '_'))) as fh:
+@@ -167,7 +167,7 @@ class FasterMakeBackend(CommonBackend, PartialBackend):
+         # For artifact builds only, write a single unified manifest for consumption by |mach watch|.
+         if self.environment.is_artifact_build:
+             unified_manifest = InstallManifest()
+-            for base, install_manifest in self._install_manifests.iteritems():
++            for base, install_manifest in self._install_manifests.items():
+                 # Expect 'dist/bin/**', which includes 'dist/bin' with no trailing slash.
+                 assert base.startswith('dist/bin')
+                 base = base[len('dist/bin'):]
+diff --git a/python/mozbuild/mozbuild/backend/recursivemake.py b/python/mozbuild/mozbuild/backend/recursivemake.py
+index dd9020d62..aa89cc297 100644
+--- a/python/mozbuild/mozbuild/backend/recursivemake.py
++++ b/python/mozbuild/mozbuild/backend/recursivemake.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ import logging
+ import os
+@@ -12,7 +12,7 @@ from collections import (
+     defaultdict,
+     namedtuple,
+ )
+-from StringIO import StringIO
++from io import StringIO
+ from itertools import chain
+ 
+ from mozpack.manifests import (
+@@ -80,75 +80,76 @@ from ..util import (
+ )
+ from ..makeutil import Makefile
+ from mozbuild.shellutil import quote as shell_quote
++from functools import reduce
+ 
+ MOZBUILD_VARIABLES = [
+-    b'ASFLAGS',
+-    b'CMSRCS',
+-    b'CMMSRCS',
+-    b'CPP_UNIT_TESTS',
+-    b'DIRS',
+-    b'DIST_INSTALL',
+-    b'EXTRA_DSO_LDOPTS',
+-    b'EXTRA_JS_MODULES',
+-    b'EXTRA_PP_COMPONENTS',
+-    b'EXTRA_PP_JS_MODULES',
+-    b'FORCE_SHARED_LIB',
+-    b'FORCE_STATIC_LIB',
+-    b'FINAL_LIBRARY',
+-    b'HOST_CFLAGS',
+-    b'HOST_CSRCS',
+-    b'HOST_CMMSRCS',
+-    b'HOST_CXXFLAGS',
+-    b'HOST_EXTRA_LIBS',
+-    b'HOST_LIBRARY_NAME',
+-    b'HOST_PROGRAM',
+-    b'HOST_SIMPLE_PROGRAMS',
+-    b'JAR_MANIFEST',
+-    b'JAVA_JAR_TARGETS',
+-    b'LIBRARY_NAME',
+-    b'LIBS',
+-    b'MAKE_FRAMEWORK',
+-    b'MODULE',
+-    b'NO_DIST_INSTALL',
+-    b'NO_EXPAND_LIBS',
+-    b'NO_INTERFACES_MANIFEST',
+-    b'NO_JS_MANIFEST',
+-    b'OS_LIBS',
+-    b'PARALLEL_DIRS',
+-    b'PREF_JS_EXPORTS',
+-    b'PROGRAM',
+-    b'RESOURCE_FILES',
+-    b'SHARED_LIBRARY_LIBS',
+-    b'SHARED_LIBRARY_NAME',
+-    b'SIMPLE_PROGRAMS',
+-    b'SONAME',
+-    b'STATIC_LIBRARY_NAME',
+-    b'TEST_DIRS',
+-    b'TOOL_DIRS',
++    'ASFLAGS',
++    'CMSRCS',
++    'CMMSRCS',
++    'CPP_UNIT_TESTS',
++    'DIRS',
++    'DIST_INSTALL',
++    'EXTRA_DSO_LDOPTS',
++    'EXTRA_JS_MODULES',
++    'EXTRA_PP_COMPONENTS',
++    'EXTRA_PP_JS_MODULES',
++    'FORCE_SHARED_LIB',
++    'FORCE_STATIC_LIB',
++    'FINAL_LIBRARY',
++    'HOST_CFLAGS',
++    'HOST_CSRCS',
++    'HOST_CMMSRCS',
++    'HOST_CXXFLAGS',
++    'HOST_EXTRA_LIBS',
++    'HOST_LIBRARY_NAME',
++    'HOST_PROGRAM',
++    'HOST_SIMPLE_PROGRAMS',
++    'JAR_MANIFEST',
++    'JAVA_JAR_TARGETS',
++    'LIBRARY_NAME',
++    'LIBS',
++    'MAKE_FRAMEWORK',
++    'MODULE',
++    'NO_DIST_INSTALL',
++    'NO_EXPAND_LIBS',
++    'NO_INTERFACES_MANIFEST',
++    'NO_JS_MANIFEST',
++    'OS_LIBS',
++    'PARALLEL_DIRS',
++    'PREF_JS_EXPORTS',
++    'PROGRAM',
++    'RESOURCE_FILES',
++    'SHARED_LIBRARY_LIBS',
++    'SHARED_LIBRARY_NAME',
++    'SIMPLE_PROGRAMS',
++    'SONAME',
++    'STATIC_LIBRARY_NAME',
++    'TEST_DIRS',
++    'TOOL_DIRS',
+     # XXX config/Makefile.in specifies this in a make invocation
+     #'USE_EXTENSION_MANIFEST',
+-    b'XPCSHELL_TESTS',
+-    b'XPIDL_MODULE',
++    'XPCSHELL_TESTS',
++    'XPIDL_MODULE',
+ ]
+ 
+ DEPRECATED_VARIABLES = [
+-    b'EXPORT_LIBRARY',
+-    b'EXTRA_LIBS',
+-    b'HOST_LIBS',
+-    b'LIBXUL_LIBRARY',
+-    b'MOCHITEST_A11Y_FILES',
+-    b'MOCHITEST_BROWSER_FILES',
+-    b'MOCHITEST_BROWSER_FILES_PARTS',
+-    b'MOCHITEST_CHROME_FILES',
+-    b'MOCHITEST_FILES',
+-    b'MOCHITEST_FILES_PARTS',
+-    b'MOCHITEST_METRO_FILES',
+-    b'MOCHITEST_ROBOCOP_FILES',
+-    b'MODULE_OPTIMIZE_FLAGS',
+-    b'MOZ_CHROME_FILE_FORMAT',
+-    b'SHORT_LIBNAME',
+-    b'TESTING_JS_MODULES',
+-    b'TESTING_JS_MODULE_DIR',
++    'EXPORT_LIBRARY',
++    'EXTRA_LIBS',
++    'HOST_LIBS',
++    'LIBXUL_LIBRARY',
++    'MOCHITEST_A11Y_FILES',
++    'MOCHITEST_BROWSER_FILES',
++    'MOCHITEST_BROWSER_FILES_PARTS',
++    'MOCHITEST_CHROME_FILES',
++    'MOCHITEST_FILES',
++    'MOCHITEST_FILES_PARTS',
++    'MOCHITEST_METRO_FILES',
++    'MOCHITEST_ROBOCOP_FILES',
++    'MODULE_OPTIMIZE_FLAGS',
++    'MOZ_CHROME_FILE_FORMAT',
++    'SHORT_LIBNAME',
++    'TESTING_JS_MODULES',
++    'TESTING_JS_MODULE_DIR',
+ ]
+ 
+ MOZBUILD_VARIABLES_MESSAGE = 'It should only be defined in moz.build files.'
+@@ -207,7 +208,7 @@ class BackendMakeFile(object):
+         self.fh.write(buf)
+ 
+     def write_once(self, buf):
+-        if isinstance(buf, unicode):
++        if isinstance(buf, str):
+             buf = buf.encode('utf-8')
+         if b'\n' + buf not in self.fh.getvalue():
+             self.write(buf)
+@@ -280,7 +281,7 @@ class RecursiveMakeTraversal(object):
+         Helper function to call a filter from compute_dependencies and
+         traverse.
+         """
+-        return filter(current, self.get_subdirs(current))
++        return list(filter(current, self.get_subdirs(current)))
+ 
+     def compute_dependencies(self, filter=None):
+         """
+@@ -710,7 +711,7 @@ class RecursiveMakeBackend(CommonBackend):
+         convenience variables, and the other dependency definitions for a
+         hopefully proper directory traversal.
+         """
+-        for tier, no_skip in self._no_skip.items():
++        for tier, no_skip in list(self._no_skip.items()):
+             self.log(logging.DEBUG, 'fill_root_mk', {
+                 'number': len(no_skip), 'tier': tier
+                 }, 'Using {number} directories during {tier}')
+@@ -757,7 +758,7 @@ class RecursiveMakeBackend(CommonBackend):
+         for tier, filter in filters:
+             main, all_deps = \
+                 self._traversal.compute_dependencies(filter)
+-            for dir, deps in all_deps.items():
++            for dir, deps in list(all_deps.items()):
+                 if deps is not None or (dir in self._idl_dirs \
+                                         and tier == 'export'):
+                     rule = root_deps_mk.create_rule(['%s/%s' % (dir, tier)])
+@@ -770,7 +771,7 @@ class RecursiveMakeBackend(CommonBackend):
+                 rule.add_dependencies('%s/%s' % (d, tier) for d in main)
+ 
+         all_compile_deps = reduce(lambda x,y: x|y,
+-            self._compile_graph.values()) if self._compile_graph else set()
++            list(self._compile_graph.values())) if self._compile_graph else set()
+         # Include the following as dependencies of the top recursion target for
+         # compilation:
+         # - nodes that are not dependended upon by anything. Typically, this
+@@ -783,7 +784,7 @@ class RecursiveMakeBackend(CommonBackend):
+         #   as direct dependencies of the top recursion target, to somehow
+         #   prioritize them.
+         #   1. See bug 1262241 comment 5.
+-        compile_roots = [t for t, deps in self._compile_graph.iteritems()
++        compile_roots = [t for t, deps in list(self._compile_graph.items())
+                          if not deps or t not in all_compile_deps]
+ 
+         rule = root_deps_mk.create_rule(['recurse_compile'])
+@@ -845,14 +846,14 @@ class RecursiveMakeBackend(CommonBackend):
+             rule.add_dependencies(['$(CURDIR)/%: %'])
+ 
+     def _check_blacklisted_variables(self, makefile_in, makefile_content):
+-        if b'EXTERNALLY_MANAGED_MAKE_FILE' in makefile_content:
++        if 'EXTERNALLY_MANAGED_MAKE_FILE' in makefile_content:
+             # Bypass the variable restrictions for externally managed makefiles.
+             return
+ 
+         for l in makefile_content.splitlines():
+             l = l.strip()
+             # Don't check comments
+-            if l.startswith(b'#'):
++            if l.startswith('#'):
+                 continue
+             for x in chain(MOZBUILD_VARIABLES, DEPRECATED_VARIABLES):
+                 if x not in l:
+@@ -909,11 +910,11 @@ class RecursiveMakeBackend(CommonBackend):
+                     # Directories with a Makefile containing a tools target, or
+                     # XPI_PKGNAME or INSTALL_EXTENSION_ID can't be skipped and
+                     # must run during the 'tools' tier.
+-                    for t in (b'XPI_PKGNAME', b'INSTALL_EXTENSION_ID',
+-                            b'tools'):
++                    for t in ('XPI_PKGNAME', 'INSTALL_EXTENSION_ID',
++                            'tools'):
+                         if t not in content:
+                             continue
+-                        if t == b'tools' and not re.search('(?:^|\s)tools.*::', content, re.M):
++                        if t == 'tools' and not re.search('(?:^|\s)tools.*::', content, re.M):
+                             continue
+                         if objdir == self.environment.topobjdir:
+                             continue
+@@ -933,7 +934,7 @@ class RecursiveMakeBackend(CommonBackend):
+         self._fill_root_mk()
+ 
+         # Make the master test manifest files.
+-        for flavor, t in self._test_manifests.items():
++        for flavor, t in list(self._test_manifests.items()):
+             install_prefix, manifests = t
+             manifest_stem = mozpath.join(install_prefix, '%s.ini' % flavor)
+             self._write_master_test_manifest(mozpath.join(
+@@ -1039,7 +1040,7 @@ class RecursiveMakeBackend(CommonBackend):
+         for p in ('Makefile', 'backend.mk', '.deps/.mkdir.done'):
+             build_files.add_optional_exists(p)
+ 
+-        for idl in manager.idls.values():
++        for idl in list(manager.idls.values()):
+             self._install_manifests['dist_idl'].add_link(idl['source'],
+                 idl['basename'])
+             self._install_manifests['dist_include'].add_optional_exists('%s.h'
+@@ -1086,7 +1087,7 @@ class RecursiveMakeBackend(CommonBackend):
+ 
+         interfaces_manifests = []
+         dist_dir = mozpath.join(self.environment.topobjdir, 'dist')
+-        for manifest, entries in manager.interface_manifests.items():
++        for manifest, entries in list(manager.interface_manifests.items()):
+             interfaces_manifests.append(mozpath.join('$(DEPTH)', manifest))
+             for xpt in sorted(entries):
+                 registered_xpt_files.add(mozpath.join(
+@@ -1194,7 +1195,7 @@ class RecursiveMakeBackend(CommonBackend):
+         # Don't allow files to be defined multiple times unless it is allowed.
+         # We currently allow duplicates for non-test files or test files if
+         # the manifest is listed as a duplicate.
+-        for source, (dest, is_test) in obj.installs.items():
++        for source, (dest, is_test) in list(obj.installs.items()):
+             try:
+                 self._install_manifests['_test_files'].add_link(source, dest)
+             except ValueError:
+@@ -1558,7 +1559,7 @@ class RecursiveMakeBackend(CommonBackend):
+         man_dir = mozpath.join(self.environment.topobjdir, '_build_manifests',
+             dest)
+ 
+-        for k, manifest in manifests.items():
++        for k, manifest in list(manifests.items()):
+             with self._write_file(mozpath.join(man_dir, k)) as fh:
+                 manifest.write(fileobj=fh)
+ 
+@@ -1593,20 +1594,20 @@ class RecursiveMakeBackend(CommonBackend):
+                 pp.context.update(extra)
+             if not pp.context.get('autoconfmk', ''):
+                 pp.context['autoconfmk'] = 'autoconf.mk'
+-            pp.handleLine(b'# THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT MODIFY BY HAND.\n');
+-            pp.handleLine(b'DEPTH := @DEPTH@\n')
+-            pp.handleLine(b'topobjdir := @topobjdir@\n')
+-            pp.handleLine(b'topsrcdir := @top_srcdir@\n')
+-            pp.handleLine(b'srcdir := @srcdir@\n')
+-            pp.handleLine(b'VPATH := @srcdir@\n')
+-            pp.handleLine(b'relativesrcdir := @relativesrcdir@\n')
+-            pp.handleLine(b'include $(DEPTH)/config/@autoconfmk@\n')
++            pp.handleLine('# THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT MODIFY BY HAND.\n');
++            pp.handleLine('DEPTH := @DEPTH@\n')
++            pp.handleLine('topobjdir := @topobjdir@\n')
++            pp.handleLine('topsrcdir := @top_srcdir@\n')
++            pp.handleLine('srcdir := @srcdir@\n')
++            pp.handleLine('VPATH := @srcdir@\n')
++            pp.handleLine('relativesrcdir := @relativesrcdir@\n')
++            pp.handleLine('include $(DEPTH)/config/@autoconfmk@\n')
+             if not stub:
+                 pp.do_include(obj.input_path)
+             # Empty line to avoid failures when last line in Makefile.in ends
+             # with a backslash.
+-            pp.handleLine(b'\n')
+-            pp.handleLine(b'include $(topsrcdir)/config/recurse.mk\n')
++            pp.handleLine('\n')
++            pp.handleLine('include $(topsrcdir)/config/recurse.mk\n')
+         if not stub:
+             # Adding the Makefile.in here has the desired side-effect
+             # that if the Makefile.in disappears, this will force
+diff --git a/python/mozbuild/mozbuild/config_status.py b/python/mozbuild/mozbuild/config_status.py
+index d46f1332d..a9a27a699 100644
+--- a/python/mozbuild/mozbuild/config_status.py
++++ b/python/mozbuild/mozbuild/config_status.py
+@@ -77,6 +77,7 @@ def config_status(topobjdir='.', topsrcdir='.', defines=None,
+     See build/autoconf/config.status.m4.
+     '''
+ 
++    print("config_status started")
+     if 'CONFIG_FILES' in os.environ:
+         raise Exception('Using the CONFIG_FILES environment variable is not '
+             'supported.')
+@@ -119,7 +120,7 @@ def config_status(topobjdir='.', topsrcdir='.', defines=None,
+     if 'WRITE_MOZINFO' in os.environ:
+         write_mozinfo(os.path.join(topobjdir, 'mozinfo.json'), env, os.environ)
+ 
+-    cpu_start = time.clock()
++    cpu_start = time.perf_counter()
+     time_start = time.time()
+ 
+     # Make appropriate backend instances, defaulting to RecursiveMakeBackend,
+@@ -155,7 +156,7 @@ def config_status(topobjdir='.', topsrcdir='.', defines=None,
+             summary = obj.gyp_summary()
+             print(summary, file=sys.stderr)
+ 
+-    cpu_time = time.clock() - cpu_start
++    cpu_time = time.perf_counter() - cpu_start
+     wall_time = time.time() - time_start
+     efficiency = cpu_time / wall_time if wall_time else 100
+     untracked = wall_time - execution_time
+@@ -179,3 +180,5 @@ def config_status(topobjdir='.', topsrcdir='.', defines=None,
+     # Advertise Android Studio if it is appropriate.
+     if MachCommandConditions.is_android(env):
+         print(ANDROID_IDE_ADVERTISEMENT)
++
++    print("config_status finished")
+diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
+index d03615707..13d623d4f 100644
+--- a/python/mozbuild/mozbuild/configure/__init__.py
++++ b/python/mozbuild/mozbuild/configure/__init__.py
+@@ -2,9 +2,9 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
+ 
+-import __builtin__
++
++import builtins
+ import inspect
+ import logging
+ import os
+@@ -38,6 +38,8 @@ from mozbuild.util import (
+ 
+ import mozpack.path as mozpath
+ 
++import traceback
++
+ 
+ class ConfigureError(Exception):
+     pass
+@@ -69,7 +71,7 @@ class SandboxDependsFunction(object):
+     def __getattr__(self, key):
+         return self._getattr(key).sandboxed
+ 
+-    def __nonzero__(self):
++    def __bool__(self):
+         raise ConfigureError(
+             'Cannot do boolean operations on @depends functions.')
+ 
+@@ -96,6 +98,7 @@ class DependsFunction(object):
+             sandbox._value_for(self)
+         elif not sandbox._help:
+             sandbox._execution_queue.append((sandbox._value_for, (self,)))
++            sandbox.tasks_debug_out("DependsFunction.__init %s" % func.__name__)
+ 
+     @property
+     def name(self):
+@@ -206,6 +209,15 @@ class CombinedDependsFunction(DependsFunction):
+     def __ne__(self, other):
+         return not self == other
+ 
++    def __hash__(self):
++        # This was one was taken from [1] initially. Should not have done that:
++        # it causes explosion of ConfigureSandbox._execution_queue with 100%
++        # CPU load and eating all avaliable memory...
++        #
++        # [1] https://code.foxkit.us/adelie/packages/blob/f2b5773da19ab397fbe64fd32dacc383cfe4cd77/user/mozjs/python3.patch#L8068
++        return hash((self._name, tuple(self.dependencies)))
++
++
+ class SandboxedGlobal(dict):
+     '''Identifiable dict type for use as function global'''
+ 
+@@ -253,11 +265,12 @@ class ConfigureSandbox(dict):
+     # The default set of builtins. We expose unicode as str to make sandboxed
+     # files more python3-ready.
+     BUILTINS = ReadOnlyDict({
+-        b: getattr(__builtin__, b)
++        b: getattr(builtins, b)
+         for b in ('None', 'False', 'True', 'int', 'bool', 'any', 'all', 'len',
+                   'list', 'tuple', 'set', 'dict', 'isinstance', 'getattr',
+-                  'hasattr', 'enumerate', 'range', 'zip')
+-    }, __import__=forbidden_import, str=unicode)
++                  'hasattr', 'enumerate', 'range', 'zip', '__build_class__',
++                  'bytes', 'exec')
++    }, __import__=forbidden_import, str=str)
+ 
+     # Expose a limited set of functions from os.path
+     OS = ReadOnlyNamespace(path=ReadOnlyNamespace(**{
+@@ -294,6 +307,11 @@ class ConfigureSandbox(dict):
+         # Queue of functions to execute, with their arguments
+         self._execution_queue = []
+ 
++        # For debugging: Show number of tasks started in run() / added elsewhere
++        # and some additional info
++        self.task_debug = False # set True to enable
++        self.tasks_started = 0
++
+         # Store the `when`s associated to some options.
+         self._conditions = {}
+ 
+@@ -331,7 +349,7 @@ class ConfigureSandbox(dict):
+                 return method
+             def wrapped(*args, **kwargs):
+                 out_args = [
+-                    arg.decode(encoding) if isinstance(arg, str) else arg
++                    arg.decode(encoding) if isinstance(arg, bytes) else arg
+                     for arg in args
+                 ]
+                 return method(*out_args, **kwargs)
+@@ -360,6 +378,14 @@ class ConfigureSandbox(dict):
+             handler.setFormatter(formatter)
+             logger.addHandler(handler)
+ 
++    def tasks_debug_out(self, text):
++        if self.task_debug:
++            print("%s / queued %i / done %i" %(text, len(self._execution_queue), self.tasks_started))
++            #if len(self._execution_queue) > 5000:
++            #    traceback.print_stack(file=sys.stdout)
++            #if len(self._execution_queue) > 5010:
++            #    raise Exception("Too many tasks")
++
+     def include_file(self, path):
+         '''Include one file in the sandbox. Users of this class probably want
+         to use `run` instead.
+@@ -380,6 +406,9 @@ class ConfigureSandbox(dict):
+         if path in self._all_paths:
+             raise ConfigureError(
+                 'Cannot include `%s` because it was included already.' % path)
++
++        if self.task_debug:
++            print("include_file", path)
+         self._paths.append(path)
+         self._all_paths.add(path)
+ 
+@@ -398,7 +427,7 @@ class ConfigureSandbox(dict):
+         if path:
+             self.include_file(path)
+ 
+-        for option in self._options.itervalues():
++        for option in self._options.values():
+             # All options must be referenced by some @depends function
+             if option not in self._seen:
+                 raise ConfigureError(
+@@ -425,6 +454,8 @@ class ConfigureSandbox(dict):
+ 
+         # Run the execution queue
+         for func, args in self._execution_queue:
++            self.tasks_started += 1
++            self.tasks_debug_out("ConfigureSandbox.run(%s)" % func.__name__)
+             func(*args)
+ 
+         if self._help:
+@@ -504,7 +535,7 @@ class ConfigureSandbox(dict):
+                     value = PositiveOptionValue()
+                 elif value is False or value == ():
+                     value = NegativeOptionValue()
+-                elif isinstance(value, types.StringTypes):
++                elif isinstance(value, (str,)):
+                     value = PositiveOptionValue((value,))
+                 elif isinstance(value, tuple):
+                     value = PositiveOptionValue(value)
+@@ -544,7 +575,7 @@ class ConfigureSandbox(dict):
+         return value
+ 
+     def _dependency(self, arg, callee_name, arg_name=None):
+-        if isinstance(arg, types.StringTypes):
++        if isinstance(arg, (str,)):
+             prefix, name, values = Option.split_option(arg)
+             if values != ():
+                 raise ConfigureError("Option must not contain an '='")
+@@ -608,7 +639,7 @@ class ConfigureSandbox(dict):
+         '''
+         when = self._normalize_when(kwargs.get('when'), 'option')
+         args = [self._resolve(arg) for arg in args]
+-        kwargs = {k: self._resolve(v) for k, v in kwargs.iteritems()
++        kwargs = {k: self._resolve(v) for k, v in kwargs.items()
+                                       if k != 'when'}
+         option = Option(*args, **kwargs)
+         if when:
+@@ -689,7 +720,7 @@ class ConfigureSandbox(dict):
+         with self.only_when_impl(when):
+             what = self._resolve(what)
+             if what:
+-                if not isinstance(what, types.StringTypes):
++                if not isinstance(what, (str,)):
+                     raise TypeError("Unexpected type: '%s'" % type(what).__name__)
+                 self.include_file(what)
+ 
+@@ -707,7 +738,7 @@ class ConfigureSandbox(dict):
+             (k[:-len('_impl')], getattr(self, k))
+             for k in dir(self) if k.endswith('_impl') and k != 'template_impl'
+         )
+-        glob.update((k, v) for k, v in self.iteritems() if k not in glob)
++        glob.update((k, v) for k, v in self.items() if k not in glob)
+ 
+         # Any function argument to the template must be prepared to be sandboxed.
+         # If the template itself returns a function (in which case, it's very
+@@ -731,7 +762,7 @@ class ConfigureSandbox(dict):
+             def wrapper(*args, **kwargs):
+                 args = [maybe_prepare_function(arg) for arg in args]
+                 kwargs = {k: maybe_prepare_function(v)
+-                          for k, v in kwargs.iteritems()}
++                          for k, v in kwargs.items()}
+                 ret = template(*args, **kwargs)
+                 if isfunction(ret):
+                     # We can't expect the sandboxed code to think about all the
+@@ -766,7 +797,7 @@ class ConfigureSandbox(dict):
+         for value, required in (
+                 (_import, True), (_from, False), (_as, False)):
+ 
+-            if not isinstance(value, types.StringTypes) and (
++            if not isinstance(value, (str,)) and (
+                     required or value is not None):
+                 raise TypeError("Unexpected type: '%s'" % type(value).__name__)
+             if value is not None and not self.RE_MODULE.match(value):
+@@ -807,7 +838,7 @@ class ConfigureSandbox(dict):
+         # Special case for the open() builtin, because otherwise, using it
+         # fails with "IOError: file() constructor not accessible in
+         # restricted mode"
+-        if what == '__builtin__.open':
++        if what == 'builtins.open':
+             return lambda *args, **kwargs: open(*args, **kwargs)
+         # Until this proves to be a performance problem, just construct an
+         # import statement and execute it.
+@@ -829,7 +860,7 @@ class ConfigureSandbox(dict):
+         name = self._resolve(name, need_help_dependency=False)
+         if name is None:
+             return
+-        if not isinstance(name, types.StringTypes):
++        if not isinstance(name, (str,)):
+             raise TypeError("Unexpected type: '%s'" % type(name).__name__)
+         if name in data:
+             raise ConfigureError(
+@@ -850,6 +881,7 @@ class ConfigureSandbox(dict):
+ 
+         self._execution_queue.append((
+             self._resolve_and_set, (self._config, name, value, when)))
++        self.tasks_debug_out("ConfigureSandbox.set_config_impl / %s(%s" % (name, value))
+ 
+     def set_define_impl(self, name, value, when=None):
+         '''Implementation of set_define().
+@@ -864,6 +896,7 @@ class ConfigureSandbox(dict):
+         defines = self._config.setdefault('DEFINES', {})
+         self._execution_queue.append((
+             self._resolve_and_set, (defines, name, value, when)))
++        self.tasks_debug_out("ConfigureSandbox.set_define_impl / %s(%s)" % (name, value))
+ 
+     def imply_option_impl(self, option, value, reason=None, when=None):
+         '''Implementation of imply_option().
+@@ -922,7 +955,7 @@ class ConfigureSandbox(dict):
+                 if isinstance(possible_reasons[0], Option):
+                     reason = possible_reasons[0]
+         if not reason and (isinstance(value, (bool, tuple)) or
+-                           isinstance(value, types.StringTypes)):
++                           isinstance(value, (str,))):
+             # A reason can be provided automatically when imply_option
+             # is called with an immediate value.
+             _, filename, line, _, _, _ = inspect.stack()[1]
+@@ -955,10 +988,10 @@ class ConfigureSandbox(dict):
+         if not inspect.isfunction(func):
+             raise TypeError("Unexpected type: '%s'" % type(func).__name__)
+         if func in self._prepared_functions:
+-            return func, func.func_globals
++            return func, func.__globals__
+ 
+         glob = SandboxedGlobal(
+-            (k, v) for k, v in func.func_globals.iteritems()
++            (k, v) for k, v in func.__globals__.items()
+             if (inspect.isfunction(v) and v not in self._templates) or (
+                 inspect.isclass(v) and issubclass(v, Exception))
+         )
+@@ -979,20 +1012,20 @@ class ConfigureSandbox(dict):
+         # Note this is not entirely bullet proof (if the value is e.g. a list,
+         # the list contents could have changed), but covers the bases.
+         closure = None
+-        if func.func_closure:
++        if func.__closure__:
+             def makecell(content):
+                 def f():
+                     content
+-                return f.func_closure[0]
++                return f.__closure__[0]
+ 
+             closure = tuple(makecell(cell.cell_contents)
+-                            for cell in func.func_closure)
++                            for cell in func.__closure__)
+ 
+         new_func = self.wraps(func)(types.FunctionType(
+-            func.func_code,
++            func.__code__,
+             glob,
+             func.__name__,
+-            func.func_defaults,
++            func.__defaults__,
+             closure
+         ))
+         @self.wraps(new_func)
+diff --git a/python/mozbuild/mozbuild/configure/check_debug_ranges.py b/python/mozbuild/mozbuild/configure/check_debug_ranges.py
+index c0caa9cc5..a3e1f37e1 100644
+--- a/python/mozbuild/mozbuild/configure/check_debug_ranges.py
++++ b/python/mozbuild/mozbuild/configure/check_debug_ranges.py
+@@ -6,7 +6,7 @@
+ # to a given compilation unit. This is used as a helper to find a bug in some
+ # versions of GNU ld.
+ 
+-from __future__ import absolute_import
++
+ 
+ import subprocess
+ import sys
+@@ -45,6 +45,8 @@ def get_range_length(range, debug_ranges):
+ def main(bin, compilation_unit):
+     p = subprocess.Popen(['objdump', '-W', bin], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
+     (out, err) = p.communicate()
++    if isinstance(out, bytes):
++        out = out.decode('utf-8')
+     sections = re.split('\n(Contents of the|The section) ', out)
+     debug_info = [s for s in sections if s.startswith('.debug_info')]
+     debug_ranges = [s for s in sections if s.startswith('.debug_ranges')]
+@@ -59,4 +61,4 @@ def main(bin, compilation_unit):
+ 
+ 
+ if __name__ == '__main__':
+-    print(main(*sys.argv[1:]))
++    print((main(*sys.argv[1:])))
+diff --git a/python/mozbuild/mozbuild/configure/options.py b/python/mozbuild/mozbuild/configure/options.py
+index 53ae2ae6d..4d80cad86 100644
+--- a/python/mozbuild/mozbuild/configure/options.py
++++ b/python/mozbuild/mozbuild/configure/options.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import os
+ import sys
+@@ -12,7 +12,7 @@ from collections import OrderedDict
+ 
+ def istupleofstrings(obj):
+     return isinstance(obj, tuple) and len(obj) and all(
+-        isinstance(o, types.StringTypes) for o in obj)
++        isinstance(o, (str,)) for o in obj)
+ 
+ 
+ class OptionValue(tuple):
+@@ -88,7 +88,7 @@ class PositiveOptionValue(OptionValue):
+     in the form of a tuple for when values are given to the option (in the form
+     --option=value[,value2...].
+     '''
+-    def __nonzero__(self):
++    def __bool__(self):
+         return True
+ 
+ 
+@@ -113,7 +113,7 @@ class ConflictingOptionError(InvalidOptionError):
+         if format_data:
+             message = message.format(**format_data)
+         super(ConflictingOptionError, self).__init__(message)
+-        for k, v in format_data.iteritems():
++        for k, v in format_data.items():
+             setattr(self, k, v)
+ 
+ 
+@@ -149,7 +149,7 @@ class Option(object):
+                 'At least an option name or an environment variable name must '
+                 'be given')
+         if name:
+-            if not isinstance(name, types.StringTypes):
++            if not isinstance(name, (str,)):
+                 raise InvalidOptionError('Option must be a string')
+             if not name.startswith('--'):
+                 raise InvalidOptionError('Option must start with `--`')
+@@ -158,7 +158,7 @@ class Option(object):
+             if not name.islower():
+                 raise InvalidOptionError('Option must be all lowercase')
+         if env:
+-            if not isinstance(env, types.StringTypes):
++            if not isinstance(env, (str,)):
+                 raise InvalidOptionError(
+                     'Environment variable name must be a string')
+             if not env.isupper():
+@@ -168,8 +168,8 @@ class Option(object):
+                 isinstance(nargs, int) and nargs >= 0):
+             raise InvalidOptionError(
+                 "nargs must be a positive integer, '?', '*' or '+'")
+-        if (not isinstance(default, types.StringTypes) and
+-                not isinstance(default, (bool, types.NoneType)) and
++        if (not isinstance(default, (str,)) and
++                not isinstance(default, (bool, type(None))) and
+                 not istupleofstrings(default)):
+             raise InvalidOptionError(
+                 'default must be a bool, a string or a tuple of strings')
+@@ -241,7 +241,7 @@ class Option(object):
+                     ', '.join("'%s'" % c for c in choices))
+         elif has_choices:
+             maxargs = self.maxargs
+-            if len(choices) < maxargs and maxargs != sys.maxint:
++            if len(choices) < maxargs and maxargs != sys.maxsize:
+                 raise InvalidOptionError('Not enough `choices` for `nargs`')
+         self.choices = choices
+         self.help = help
+@@ -255,7 +255,7 @@ class Option(object):
+         where prefix is one of 'with', 'without', 'enable' or 'disable'.
+         The '=values' part is optional. Values are separated with commas.
+         '''
+-        if not isinstance(option, types.StringTypes):
++        if not isinstance(option, (str,)):
+             raise InvalidOptionError('Option must be a string')
+ 
+         elements = option.split('=', 1)
+@@ -308,7 +308,7 @@ class Option(object):
+     def maxargs(self):
+         if isinstance(self.nargs, int):
+             return self.nargs
+-        return 1 if self.nargs == '?' else sys.maxint
++        return 1 if self.nargs == '?' else sys.maxsize
+ 
+     def _validate_nargs(self, num):
+         minargs, maxargs = self.minargs, self.maxargs
+@@ -499,5 +499,5 @@ class CommandLineHelper(object):
+ 
+     def __iter__(self):
+         for d in (self._args, self._extra_args):
+-            for arg, pos in d.itervalues():
++            for arg, pos in d.values():
+                 yield arg
+diff --git a/python/mozbuild/mozbuild/configure/util.py b/python/mozbuild/mozbuild/configure/util.py
+index 9d8b2eb0e..a12986e48 100644
+--- a/python/mozbuild/mozbuild/configure/util.py
++++ b/python/mozbuild/mozbuild/configure/util.py
+@@ -77,15 +77,7 @@ class ConfigureOutputHandler(logging.Handler):
+         # Python has this feature where it sets the encoding of pipes to
+         # ascii, which blatantly fails when trying to print out non-ascii.
+         def fix_encoding(fh):
+-            try:
+-                isatty = fh.isatty()
+-            except AttributeError:
+-                isatty = True
+-
+-            if not isatty:
+-                encoding = getpreferredencoding()
+-                if encoding:
+-                    return codecs.getwriter(encoding)(fh)
++            # no magic on oe / python3
+             return fh
+ 
+         self._stdout = fix_encoding(stdout)
+@@ -200,7 +192,7 @@ class LineIO(object):
+         self._errors = errors
+ 
+     def write(self, buf):
+-        if self._encoding and isinstance(buf, str):
++        if self._encoding and isinstance(buf, bytes):
+             buf = buf.decode(self._encoding, self._errors)
+         lines = buf.splitlines()
+         if not lines:
+diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py
+index d5af532f7..e9810fe58 100644
+--- a/python/mozbuild/mozbuild/controller/building.py
++++ b/python/mozbuild/mozbuild/controller/building.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ import errno
+ import getpass
+@@ -146,7 +146,7 @@ class TierStatus(object):
+         """
+         o = []
+ 
+-        for tier, state in self.tiers.items():
++        for tier, state in list(self.tiers.items()):
+             t_entry = dict(
+                 name=tier,
+                 start=state['begin_time'],
+@@ -574,7 +574,7 @@ class BuildProgressFooter(Footer):
+ 
+     def __init__(self, terminal, monitor):
+         Footer.__init__(self, terminal)
+-        self.tiers = monitor.tiers.tier_status.viewitems()
++        self.tiers = monitor.tiers.tier_status.items()
+ 
+     def draw(self):
+         """Draws this footer in the terminal."""
+@@ -911,8 +911,8 @@ class CCacheStats(object):
+ 
+         return '\n'.join(lines)
+ 
+-    def __nonzero__(self):
+-        relative_values = [v for k, v in self._values.items()
++    def __bool__(self):
++        relative_values = [v for k, v in list(self._values.items())
+                            if k not in self.ABSOLUTE_KEYS]
+         return (all(v >= 0 for v in relative_values) and
+                 any(v > 0 for v in relative_values))
+@@ -1156,7 +1156,7 @@ class BuildDriver(MozbuildObject):
+ 
+         high_finder, finder_percent = monitor.have_high_finder_usage()
+         if high_finder:
+-            print(FINDER_SLOW_MESSAGE % finder_percent)
++            print((FINDER_SLOW_MESSAGE % finder_percent))
+ 
+         ccache_end = monitor.ccache_stats()
+ 
+@@ -1276,8 +1276,8 @@ class BuildDriver(MozbuildObject):
+         """Install test files."""
+ 
+         if self.is_clobber_needed():
+-            print(INSTALL_TESTS_CLOBBER.format(
+-                  clobber_file=os.path.join(self.topobjdir, 'CLOBBER')))
++            print((INSTALL_TESTS_CLOBBER.format(
++                  clobber_file=os.path.join(self.topobjdir, 'CLOBBER'))))
+             sys.exit(1)
+ 
+         if not test_objs:
+diff --git a/python/mozbuild/mozbuild/frontend/context.py b/python/mozbuild/mozbuild/frontend/context.py
+index fbdbefc1d..1aef6a65a 100644
+--- a/python/mozbuild/mozbuild/frontend/context.py
++++ b/python/mozbuild/mozbuild/frontend/context.py
+@@ -14,7 +14,7 @@ If you are looking for the absolute authority on what moz.build files can
+ contain, you've come to the right place.
+ """
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ import os
+ 
+@@ -237,15 +237,15 @@ class Context(KeyedDefaultDict):
+         This function is transactional: if setitem fails for one of the values,
+         the context is not updated at all."""
+         if isinstance(iterable, dict):
+-            iterable = iterable.items()
++            iterable = list(iterable.items())
+ 
+         update = {}
+-        for key, value in itertools.chain(iterable, kwargs.items()):
++        for key, value in itertools.chain(iterable, list(kwargs.items())):
+             stored_type = self._validate(key, value)
+             # Don't create an instance of stored_type if coercion is needed,
+             # until all values are validated.
+             update[key] = (value, stored_type)
+-        for key, (value, stored_type) in update.items():
++        for key, (value, stored_type) in list(update.items()):
+             if not isinstance(value, stored_type):
+                 update[key] = stored_type(value)
+             else:
+@@ -311,7 +311,7 @@ class BaseCompileFlags(ContextDerivedValue, dict):
+         # a template were set and which were provided as defaults.
+         template_name = getattr(context, 'template', None)
+         if template_name in (None, 'Gyp'):
+-            dict.__init__(self, ((k, v if v is None else TypedList(unicode)(v))
++            dict.__init__(self, ((k, v if v is None else TypedList(str)(v))
+                                  for k, v, _ in self.flag_variables))
+         else:
+             dict.__init__(self)
+@@ -520,13 +520,13 @@ class CompileFlags(BaseCompileFlags):
+         if key in self and self[key] is None:
+             raise ValueError('`%s` may not be set in COMPILE_FLAGS from moz.build, this '
+                              'value is resolved from the emitter.' % key)
+-        if not (isinstance(value, list) and all(isinstance(v, basestring) for v in value)):
++        if not (isinstance(value, list) and all(isinstance(v, str) for v in value)):
+             raise ValueError('A list of strings must be provided as a value for a '
+                              'compile flags category.')
+         dict.__setitem__(self, key, value)
+ 
+ 
+-class FinalTargetValue(ContextDerivedValue, unicode):
++class FinalTargetValue(ContextDerivedValue, str):
+     def __new__(cls, context, value=""):
+         if not value:
+             value = 'dist/'
+@@ -536,7 +536,7 @@ class FinalTargetValue(ContextDerivedValue, unicode):
+                 value += 'bin'
+             if context['DIST_SUBDIR']:
+                 value += '/' + context['DIST_SUBDIR']
+-        return unicode.__new__(cls, value)
++        return str.__new__(cls, value)
+ 
+ 
+ def Enum(*values):
+@@ -584,7 +584,7 @@ class PathMeta(type):
+                 cls = SourcePath
+         return super(PathMeta, cls).__call__(context, value)
+ 
+-class Path(ContextDerivedValue, unicode):
++class Path(ContextDerivedValue, str, metaclass=PathMeta):
+     """Stores and resolves a source path relative to a given context
+ 
+     This class is used as a backing type for some of the sandbox variables.
+@@ -595,7 +595,6 @@ class Path(ContextDerivedValue, unicode):
+       - '!objdir/relative/paths'
+       - '%/filesystem/absolute/paths'
+     """
+-    __metaclass__ = PathMeta
+ 
+     def __new__(cls, context, value=None):
+         return super(Path, cls).__new__(cls, value)
+@@ -612,10 +611,14 @@ class Path(ContextDerivedValue, unicode):
+         """
+         return Path(self.context, mozpath.join(self, *p))
+ 
++    @staticmethod
++    def cmp(a, b):
++        return (a > b) - (a < b)
++
+     def __cmp__(self, other):
+         if isinstance(other, Path) and self.srcdir != other.srcdir:
+-            return cmp(self.full_path, other.full_path)
+-        return cmp(unicode(self), other)
++            return self.cmp(self.full_path, other.full_path)
++        return self.cmp(str(self), other)
+ 
+     # __cmp__ is not enough because unicode has __eq__, __ne__, etc. defined
+     # and __cmp__ is only used for those when they don't exist.
+@@ -773,7 +776,7 @@ def ContextDerivedTypedRecord(*fields):
+         __slots__ = tuple([name for name, _ in fields])
+ 
+         def __init__(self, context):
+-            for fname, ftype in self._fields.items():
++            for fname, ftype in list(self._fields.items()):
+                 if issubclass(ftype, ContextDerivedValue):
+                     setattr(self, fname, self._fields[fname](context))
+                 else:
+@@ -909,8 +912,8 @@ def TypedListWithAction(typ, action):
+     return _TypedListWithAction
+ 
+ WebPlatformTestManifest = TypedNamedTuple("WebPlatformTestManifest",
+-                                          [("manifest_path", unicode),
+-                                           ("test_root", unicode)])
++                                          [("manifest_path", str),
++                                           ("test_root", str)])
+ ManifestparserManifestList = OrderedPathListWithAction(read_manifestparser_manifest)
+ ReftestManifestList = OrderedPathListWithAction(read_reftest_manifest)
+ WptManifestList = TypedListWithAction(WebPlatformTestManifest, read_wpt_manifest)
+@@ -918,18 +921,18 @@ WptManifestList = TypedListWithAction(WebPlatformTestManifest, read_wpt_manifest
+ OrderedSourceList = ContextDerivedTypedList(SourcePath, StrictOrderingOnAppendList)
+ OrderedTestFlavorList = TypedList(Enum(*all_test_flavors()),
+                                   StrictOrderingOnAppendList)
+-OrderedStringList = TypedList(unicode, StrictOrderingOnAppendList)
++OrderedStringList = TypedList(str, StrictOrderingOnAppendList)
+ DependentTestsEntry = ContextDerivedTypedRecord(('files', OrderedSourceList),
+                                                 ('tags', OrderedStringList),
+                                                 ('flavors', OrderedTestFlavorList))
+ BugzillaComponent = TypedNamedTuple('BugzillaComponent',
+-                        [('product', unicode), ('component', unicode)])
++                        [('product', str), ('component', str)])
+ SchedulingComponents = ContextDerivedTypedRecord(
+-        ('inclusive', TypedList(unicode, StrictOrderingOnAppendList)),
+-        ('exclusive', TypedList(unicode, StrictOrderingOnAppendList)))
++        ('inclusive', TypedList(str, StrictOrderingOnAppendList)),
++        ('exclusive', TypedList(str, StrictOrderingOnAppendList)))
+ 
+ GeneratedFilesList = StrictOrderingOnAppendListWithFlagsFactory({
+-    'script': unicode,
++    'script': str,
+     'inputs': list,
+     'flags': list, })
+ 
+@@ -1096,7 +1099,7 @@ class Files(SubContext):
+         self.test_tags |= other.test_tags
+         self.test_flavors |= other.test_flavors
+ 
+-        for k, v in other.items():
++        for k, v in list(other.items()):
+             if k == 'IMPACTED_TESTS':
+                 self.test_files |= set(mozpath.relpath(e.full_path, e.context.config.topsrcdir)
+                                        for e in v.files)
+@@ -1154,7 +1157,7 @@ class Files(SubContext):
+ 
+         bug_components = Counter()
+ 
+-        for f in files.values():
++        for f in list(files.values()):
+             bug_component = f.get('BUG_COMPONENT')
+             if bug_component:
+                 bug_components[bug_component] += 1
+@@ -1232,7 +1235,7 @@ VARIABLES = {
+         RustLibrary template instead.
+         """),
+ 
+-    'RUST_LIBRARY_TARGET_DIR': (unicode, unicode,
++    'RUST_LIBRARY_TARGET_DIR': (str, str,
+         """Where CARGO_TARGET_DIR should point when compiling this library.  If
+         not set, it defaults to the current objdir.  It should be a relative path
+         to the current objdir; absolute paths should not be used.
+@@ -1248,7 +1251,7 @@ VARIABLES = {
+         HostRustLibrary template instead.
+         """),
+ 
+-    'RUST_TEST': (unicode, unicode,
++    'RUST_TEST': (str, str,
+         """Name of a Rust test to build and run via `cargo test`.
+ 
+         This variable should not be used directly; you should be using the
+@@ -1487,7 +1490,7 @@ VARIABLES = {
+         """Like ``OBJDIR_FILES``, with preprocessing. Use sparingly.
+         """),
+ 
+-    'FINAL_LIBRARY': (unicode, unicode,
++    'FINAL_LIBRARY': (str, str,
+         """Library in which the objects of the current directory will be linked.
+ 
+         This variable contains the name of a library, defined elsewhere with
+@@ -1528,7 +1531,7 @@ VARIABLES = {
+         with the host compiler.
+         """),
+ 
+-    'HOST_LIBRARY_NAME': (unicode, unicode,
++    'HOST_LIBRARY_NAME': (str, str,
+         """Name of target library generated when cross compiling.
+         """),
+ 
+@@ -1546,7 +1549,7 @@ VARIABLES = {
+         libraries that link into this library via FINAL_LIBRARY.
+         """),
+ 
+-    'LIBRARY_NAME': (unicode, unicode,
++    'LIBRARY_NAME': (str, str,
+         """The code name of the library generated for a directory.
+ 
+         By default STATIC_LIBRARY_NAME and SHARED_LIBRARY_NAME take this name.
+@@ -1558,7 +1561,7 @@ VARIABLES = {
+         ``example/components/xpcomsample.lib`` on Windows.
+         """),
+ 
+-    'SHARED_LIBRARY_NAME': (unicode, unicode,
++    'SHARED_LIBRARY_NAME': (str, str,
+         """The name of the static library generated for a directory, if it needs to
+         differ from the library code name.
+ 
+@@ -1572,7 +1575,7 @@ VARIABLES = {
+         Implies FORCE_SHARED_LIB.
+         """),
+ 
+-    'STATIC_LIBRARY_NAME': (unicode, unicode,
++    'STATIC_LIBRARY_NAME': (str, str,
+         """The name of the static library generated for a directory, if it needs to
+         differ from the library code name.
+ 
+@@ -1604,31 +1607,31 @@ VARIABLES = {
+ 
+         This variable contains a list of system libaries to link against.
+         """),
+-    'RCFILE': (unicode, unicode,
++    'RCFILE': (str, str,
+         """The program .rc file.
+ 
+         This variable can only be used on Windows.
+         """),
+ 
+-    'RESFILE': (unicode, unicode,
++    'RESFILE': (str, str,
+         """The program .res file.
+ 
+         This variable can only be used on Windows.
+         """),
+ 
+-    'RCINCLUDE': (unicode, unicode,
++    'RCINCLUDE': (str, str,
+         """The resource script file to be included in the default .res file.
+ 
+         This variable can only be used on Windows.
+         """),
+ 
+-    'DEFFILE': (unicode, unicode,
++    'DEFFILE': (str, str,
+         """The program .def (module definition) file.
+ 
+         This variable can only be used on Windows.
+         """),
+ 
+-    'SYMBOLS_FILE': (Path, unicode,
++    'SYMBOLS_FILE': (Path, str,
+         """A file containing a list of symbols to export from a shared library.
+ 
+         The given file contains a list of symbols to be exported, and is
+@@ -1649,7 +1652,7 @@ VARIABLES = {
+         ``BIN_SUFFIX``, the name will remain unchanged.
+         """),
+ 
+-    'SONAME': (unicode, unicode,
++    'SONAME': (str, str,
+         """The soname of the shared object currently being linked
+ 
+         soname is the "logical name" of a shared object, often used to provide
+@@ -1719,7 +1722,7 @@ VARIABLES = {
+         ``GENERATED_FILES``.
+         """),
+ 
+-    'PROGRAM' : (unicode, unicode,
++    'PROGRAM' : (str, str,
+         """Compiled executable name.
+ 
+         If the configuration token ``BIN_SUFFIX`` is set, its value will be
+@@ -1727,7 +1730,7 @@ VARIABLES = {
+         ``BIN_SUFFIX``, ``PROGRAM`` will remain unchanged.
+         """),
+ 
+-    'HOST_PROGRAM' : (unicode, unicode,
++    'HOST_PROGRAM' : (str, str,
+         """Compiled host executable name.
+ 
+         If the configuration token ``HOST_BIN_SUFFIX`` is set, its value will be
+@@ -1765,7 +1768,7 @@ VARIABLES = {
+         files.
+         """),
+ 
+-    'XPIDL_MODULE': (unicode, unicode,
++    'XPIDL_MODULE': (str, str,
+         """XPCOM Interface Definition Module Name.
+ 
+         This is the name of the ``.xpt`` file that is created by linking
+@@ -1924,14 +1927,14 @@ VARIABLES = {
+ 
+ 
+     # The following variables are used to control the target of installed files.
+-    'XPI_NAME': (unicode, unicode,
++    'XPI_NAME': (str, str,
+         """The name of an extension XPI to generate.
+ 
+         When this variable is present, the results of this directory will end up
+         being packaged into an extension instead of the main dist/bin results.
+         """),
+ 
+-    'DIST_SUBDIR': (unicode, unicode,
++    'DIST_SUBDIR': (str, str,
+         """The name of an alternate directory to install files to.
+ 
+         When this variable is present, the results of this directory will end up
+@@ -1939,7 +1942,7 @@ VARIABLES = {
+         otherwise be placed.
+         """),
+ 
+-    'FINAL_TARGET': (FinalTargetValue, unicode,
++    'FINAL_TARGET': (FinalTargetValue, str,
+         """The name of the directory to install targets to.
+ 
+         The directory is relative to the top of the object directory. The
+@@ -1970,7 +1973,7 @@ VARIABLES = {
+ 
+     'GYP_DIRS': (StrictOrderingOnAppendListWithFlagsFactory({
+             'variables': dict,
+-            'input': unicode,
++            'input': str,
+             'sandbox_vars': dict,
+             'no_chromium': bool,
+             'no_unified': bool,
+@@ -2194,7 +2197,7 @@ VARIABLES = {
+ }
+ 
+ # Sanity check: we don't want any variable above to have a list as storage type.
+-for name, (storage_type, input_types, docs) in VARIABLES.items():
++for name, (storage_type, input_types, docs) in list(VARIABLES.items()):
+     if storage_type == list:
+         raise RuntimeError('%s has a "list" storage type. Use "List" instead.'
+             % name)
+diff --git a/python/mozbuild/mozbuild/frontend/data.py b/python/mozbuild/mozbuild/frontend/data.py
+index 442fc9e0a..837453a9f 100644
+--- a/python/mozbuild/mozbuild/frontend/data.py
++++ b/python/mozbuild/mozbuild/frontend/data.py
+@@ -15,7 +15,7 @@ contains the code for converting executed mozbuild files into these data
+ structures.
+ """
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ from mozbuild.util import StrictOrderingOnAppendList
+ from mozpack.chrome.manifest import ManifestEntry
+@@ -182,7 +182,7 @@ class ComputedFlags(ContextDerived):
+             if value:
+                 for dest_var in dest_vars:
+                     flags[dest_var].extend(value)
+-        return flags.items()
++        return list(flags.items())
+ 
+ class XPIDLFile(ContextDerived):
+     """Describes an XPIDL file to be compiled."""
+@@ -213,7 +213,7 @@ class BaseDefines(ContextDerived):
+         self.defines = defines
+ 
+     def get_defines(self):
+-        for define, value in self.defines.iteritems():
++        for define, value in self.defines.items():
+             if value is True:
+                 yield('-D%s' % define)
+             elif value is False:
+@@ -494,7 +494,7 @@ class SimpleProgram(BaseProgram):
+     KIND = 'target'
+ 
+     def source_files(self):
+-        for srcs in self.sources.values():
++        for srcs in list(self.sources.values()):
+             for f in srcs:
+                 if mozpath.basename(mozpath.splitext(f)[0]) == mozpath.splitext(self.program)[0]:
+                     return [f]
+diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py
+index 642b381c0..c28344a75 100644
+--- a/python/mozbuild/mozbuild/frontend/emitter.py
++++ b/python/mozbuild/mozbuild/frontend/emitter.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ import itertools
+ import logging
+@@ -116,8 +116,8 @@ class TreeMetadataEmitter(LoggingMixin):
+         # arguments. This gross hack works around the problem until we
+         # rid ourselves of 2.6.
+         self.info = {}
+-        for k, v in mozinfo.info.items():
+-            if isinstance(k, unicode):
++        for k, v in list(mozinfo.info.items()):
++            if isinstance(k, str):
+                 k = k.encode('ascii')
+             self.info[k] = v
+ 
+@@ -234,7 +234,7 @@ class TreeMetadataEmitter(LoggingMixin):
+ 
+ 
+         # Next do FINAL_LIBRARY linkage.
+-        for lib in (l for libs in self._libs.values() for l in libs):
++        for lib in (l for libs in list(self._libs.values()) for l in libs):
+             if not isinstance(lib, (StaticLibrary, RustLibrary)) or not lib.link_into:
+                 continue
+             if lib.link_into not in self._libs:
+@@ -294,13 +294,13 @@ class TreeMetadataEmitter(LoggingMixin):
+                         lib.link_into == outerlib.basename):
+                     propagate_defines(lib, defines)
+ 
+-        for lib in (l for libs in self._libs.values() for l in libs):
++        for lib in (l for libs in list(self._libs.values()) for l in libs):
+             if isinstance(lib, Library):
+                 propagate_defines(lib, lib.lib_defines)
+             yield lib
+ 
+ 
+-        for lib in (l for libs in self._libs.values() for l in libs):
++        for lib in (l for libs in list(self._libs.values()) for l in libs):
+             lib_defines = list(lib.lib_defines.get_defines())
+             if lib_defines:
+                 objdir_flags = self._compile_flags[lib.objdir]
+@@ -310,13 +310,13 @@ class TreeMetadataEmitter(LoggingMixin):
+                 if objdir_flags:
+                     objdir_flags.resolve_flags('LIBRARY_DEFINES', lib_defines)
+ 
+-        for flags_obj in self._compile_flags.values():
++        for flags_obj in list(self._compile_flags.values()):
+             yield flags_obj
+ 
+-        for flags_obj in self._compile_as_flags.values():
++        for flags_obj in list(self._compile_as_flags.values()):
+             yield flags_obj
+ 
+-        for obj in self._binaries.values():
++        for obj in list(self._binaries.values()):
+             yield obj
+ 
+ 
+@@ -409,7 +409,7 @@ class TreeMetadataEmitter(LoggingMixin):
+                         libs[key] = l
+                     if key not in libs:
+                         libs[key] = l
+-            candidates = libs.values()
++            candidates = list(libs.values())
+             if force_static and not candidates:
+                 if dir:
+                     raise SandboxValidationError(
+@@ -473,9 +473,9 @@ class TreeMetadataEmitter(LoggingMixin):
+ 
+     def _verify_deps(self, context, crate_dir, crate_name, dependencies, description='Dependency'):
+         """Verify that a crate's dependencies all specify local paths."""
+-        for dep_crate_name, values in dependencies.iteritems():
++        for dep_crate_name, values in dependencies.items():
+             # A simple version number.
+-            if isinstance(values, (str, unicode)):
++            if isinstance(values, str):
+                 raise SandboxValidationError(
+                     '%s %s of crate %s does not list a path' % (description, dep_crate_name, crate_name),
+                     context)
+@@ -529,7 +529,7 @@ class TreeMetadataEmitter(LoggingMixin):
+ 
+         cargo_target_dir = context.get('RUST_LIBRARY_TARGET_DIR', '.')
+ 
+-        dependencies = set(config.get('dependencies', {}).iterkeys())
++        dependencies = set(config.get('dependencies', {}).keys())
+ 
+         features = context.get(cls.FEATURES_VAR, [])
+         unique_features = set(features)
+@@ -863,7 +863,7 @@ class TreeMetadataEmitter(LoggingMixin):
+         assert not gen_sources['UNIFIED_SOURCES']
+ 
+         no_pgo = context.get('NO_PGO')
+-        no_pgo_sources = [f for f, flags in all_flags.iteritems()
++        no_pgo_sources = [f for f, flags in all_flags.items()
+                           if flags.no_pgo]
+         if no_pgo:
+             if no_pgo_sources:
+@@ -890,7 +890,7 @@ class TreeMetadataEmitter(LoggingMixin):
+ 
+         # The inverse of the above, mapping suffixes to their canonical suffix.
+         canonicalized_suffix_map = {}
+-        for suffix, alternatives in suffix_map.iteritems():
++        for suffix, alternatives in suffix_map.items():
+             alternatives.add(suffix)
+             for a in alternatives:
+                 canonicalized_suffix_map[a] = suffix
+@@ -914,7 +914,7 @@ class TreeMetadataEmitter(LoggingMixin):
+         # Source files to track for linkables associated with this context.
+         ctxt_sources = defaultdict(lambda: defaultdict(list))
+ 
+-        for variable, (klass, gen_klass, suffixes) in varmap.items():
++        for variable, (klass, gen_klass, suffixes) in list(varmap.items()):
+             allowed_suffixes = set().union(*[suffix_map[s] for s in suffixes])
+ 
+             # First ensure that we haven't been given filetypes that we don't
+@@ -941,20 +941,20 @@ class TreeMetadataEmitter(LoggingMixin):
+                     obj = cls(*arglist)
+                     srcs = obj.files
+                     if isinstance(obj, UnifiedSources) and obj.have_unified_mapping:
+-                        srcs = dict(obj.unified_source_mapping).keys()
++                        srcs = list(dict(obj.unified_source_mapping).keys())
+                     ctxt_sources[variable][canonical_suffix] += sorted(srcs)
+                     yield obj
+ 
+         if ctxt_sources:
+             for linkable in linkables:
+                 for target_var in ('SOURCES', 'UNIFIED_SOURCES'):
+-                    for suffix, srcs in ctxt_sources[target_var].items():
++                    for suffix, srcs in list(ctxt_sources[target_var].items()):
+                         linkable.sources[suffix] += srcs
+             for host_linkable in host_linkables:
+-                for suffix, srcs in ctxt_sources['HOST_SOURCES'].items():
++                for suffix, srcs in list(ctxt_sources['HOST_SOURCES'].items()):
+                     host_linkable.sources[suffix] += srcs
+ 
+-        for f, flags in all_flags.iteritems():
++        for f, flags in all_flags.items():
+             if flags.flags:
+                 ext = mozpath.splitext(f)[1]
+                 yield PerSourceFlag(context, f, flags.flags)
+@@ -1143,7 +1143,7 @@ class TreeMetadataEmitter(LoggingMixin):
+         for obj in self._handle_linkables(context, passthru, generated_files):
+             yield obj
+ 
+-        generated_files.update(['%s%s' % (k, self.config.substs.get('BIN_SUFFIX', '')) for k in self._binaries.keys()])
++        generated_files.update(['%s%s' % (k, self.config.substs.get('BIN_SUFFIX', '')) for k in list(self._binaries.keys())])
+ 
+         components = []
+         for var, cls in (
+@@ -1277,7 +1277,7 @@ class TreeMetadataEmitter(LoggingMixin):
+         for obj in self._process_jar_manifests(context):
+             yield obj
+ 
+-        for name, jar in context.get('JAVA_JAR_TARGETS', {}).items():
++        for name, jar in list(context.get('JAVA_JAR_TARGETS', {}).items()):
+             yield ContextWrapped(context, jar)
+ 
+         computed_as_flags.resolve_flags('MOZBUILD',
+@@ -1346,7 +1346,7 @@ class TreeMetadataEmitter(LoggingMixin):
+             script = mozpath.join(mozpath.dirname(mozpath.dirname(__file__)),
+                                   'action', 'process_define_files.py')
+             yield GeneratedFile(context, script, 'process_define_file',
+-                                unicode(path),
++                                str(path),
+                                 [Path(context, path + '.in')])
+ 
+         generated_files = context.get('GENERATED_FILES') or []
+@@ -1393,7 +1393,7 @@ class TreeMetadataEmitter(LoggingMixin):
+                                     flags.flags, localized=localized)
+ 
+     def _process_test_manifests(self, context):
+-        for prefix, info in TEST_MANIFESTS.items():
++        for prefix, info in list(TEST_MANIFESTS.items()):
+             for path, manifest in context.get('%s_MANIFESTS' % prefix, []):
+                 for obj in self._process_test_manifest(context, info, path, manifest):
+                     yield obj
+@@ -1479,7 +1479,7 @@ class TreeMetadataEmitter(LoggingMixin):
+ 
+                 process_support_files(test)
+ 
+-            for path, m_defaults in mpmanifest.manifest_defaults.items():
++            for path, m_defaults in list(mpmanifest.manifest_defaults.items()):
+                 process_support_files(m_defaults)
+ 
+             # We also copy manifests into the output directory,
+diff --git a/python/mozbuild/mozbuild/frontend/reader.py b/python/mozbuild/mozbuild/frontend/reader.py
+index c1efc1c3d..0cdf8b8db 100644
+--- a/python/mozbuild/mozbuild/frontend/reader.py
++++ b/python/mozbuild/mozbuild/frontend/reader.py
+@@ -16,7 +16,7 @@ The BuildReader contains basic logic for traversing a tree of mozbuild files.
+ It does this by examining specific variables populated during execution.
+ """
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import ast
+ import inspect
+@@ -81,12 +81,13 @@ from .context import (
+ 
+ from mozbuild.base import ExecutionSummary
+ from concurrent.futures.process import ProcessPoolExecutor
++from functools import reduce
+ 
+ 
+ 
+ if sys.version_info.major == 2:
+-    text_type = unicode
+-    type_type = types.TypeType
++    text_type = str
++    type_type = type
+ else:
+     text_type = str
+     type_type = type
+@@ -127,7 +128,7 @@ class EmptyConfig(object):
+ 
+         self.substs = self.PopulateOnGetDict(EmptyValue, substs or self.default_substs)
+         udict = {}
+-        for k, v in self.substs.items():
++        for k, v in list(self.substs.items()):
+             if isinstance(v, str):
+                 udict[k.decode('utf-8')] = v.decode('utf-8')
+             else:
+@@ -311,7 +312,7 @@ class MozbuildSandbox(Sandbox):
+             raise Exception('`template` is a function decorator. You must '
+                 'use it as `@template` preceding a function declaration.')
+ 
+-        name = func.func_name
++        name = func.__name__
+ 
+         if name in self.templates:
+             raise KeyError(
+@@ -390,7 +391,7 @@ class MozbuildSandbox(Sandbox):
+             klass = self._context.__class__
+             self._context.__class__ = TemplateContext
+             # The sandbox will do all the necessary checks for these merges.
+-            for key, value in context.items():
++            for key, value in list(context.items()):
+                 if isinstance(value, dict):
+                     self[key].update(value)
+                 elif isinstance(value, (list, HierarchicalStringList)):
+@@ -407,12 +408,14 @@ class MozbuildSandbox(Sandbox):
+ 
+ class TemplateFunction(object):
+     def __init__(self, func, sandbox):
+-        self.path = func.func_code.co_filename
+-        self.name = func.func_name
++        self.path = func.__code__.co_filename
++        self.name = func.__name__
+ 
+-        code = func.func_code
++        code = func.__code__
+         firstlineno = code.co_firstlineno
+         lines = sandbox._current_source.splitlines(True)
++        if len(lines) and isinstance(lines[0], bytes):
++            lines = [l.decode('utf-8') for l in lines]
+         lines = inspect.getblock(lines[firstlineno - 1:])
+ 
+         # The code lines we get out of inspect.getsourcelines look like
+@@ -430,7 +433,7 @@ class TemplateFunction(object):
+         # actually never calls __getitem__ and __setitem__, so we need to
+         # modify the AST so that accesses to globals are properly directed
+         # to a dict.
+-        self._global_name = b'_data' # AST wants str for this, not unicode
++        self._global_name = '_data'
+         # In case '_data' is a name used for a variable in the function code,
+         # prepend more underscores until we find an unused name.
+         while (self._global_name in code.co_names or
+@@ -449,8 +452,8 @@ class TemplateFunction(object):
+             compile(func_ast, self.path, 'exec'),
+             glob,
+             self.name,
+-            func.func_defaults,
+-            func.func_closure,
++            func.__defaults__,
++            func.__closure__,
+         )
+         func()
+ 
+@@ -464,11 +467,11 @@ class TemplateFunction(object):
+             '__builtins__': sandbox._builtins
+         }
+         func = types.FunctionType(
+-            self._func.func_code,
++            self._func.__code__,
+             glob,
+             self.name,
+-            self._func.func_defaults,
+-            self._func.func_closure
++            self._func.__defaults__,
++            self._func.__closure__
+         )
+         sandbox.exec_function(func, args, kwargs, self.path,
+                               becomes_current_path=False)
+@@ -484,7 +487,7 @@ class TemplateFunction(object):
+         def visit_Str(self, node):
+             # String nodes we got from the AST parser are str, but we want
+             # unicode literals everywhere, so transform them.
+-            node.s = unicode(node.s)
++            node.s = str(node.s)
+             return node
+ 
+         def visit_Name(self, node):
+@@ -617,7 +620,7 @@ class BuildReaderError(Exception):
+ 
+             for l in traceback.format_exception(type(self.other), self.other,
+                 self.trace):
+-                s.write(unicode(l))
++                s.write(str(l))
+ 
+         return s.getvalue()
+ 
+@@ -767,7 +770,7 @@ class BuildReaderError(Exception):
+             s.write('    %s\n' % inner.args[2])
+             s.write('\n')
+             close_matches = difflib.get_close_matches(inner.args[2],
+-                                                      VARIABLES.keys(), 2)
++                                                      list(VARIABLES.keys()), 2)
+             if close_matches:
+                 s.write('Maybe you meant %s?\n' % ' or '.join(close_matches))
+                 s.write('\n')
+@@ -1152,7 +1155,7 @@ class BuildReader(object):
+                         context)
+                 non_unified_sources.add(source)
+             action_overrides = {}
+-            for action, script in gyp_dir.action_overrides.iteritems():
++            for action, script in gyp_dir.action_overrides.items():
+                 action_overrides[action] = SourcePath(context, script)
+ 
+             gyp_processor = GypProcessor(context.config,
+@@ -1188,7 +1191,7 @@ class BuildReader(object):
+ 
+                 recurse_info[d][key] = dict(sandbox.metadata[key])
+ 
+-        for path, child_metadata in recurse_info.items():
++        for path, child_metadata in list(recurse_info.items()):
+             child_path = path.join('moz.build').full_path
+ 
+             # Ensure we don't break out of the topsrcdir. We don't do realpath
+@@ -1279,7 +1282,7 @@ class BuildReader(object):
+         # There is room to improve this code (and the code in
+         # _find_relevant_mozbuilds) to better handle multiple files in the same
+         # directory. Bug 1136966 tracks.
+-        for path, mbpaths in relevants.items():
++        for path, mbpaths in list(relevants.items()):
+             path_mozbuilds[path] = [mozpath.join(topsrcdir, p) for p in mbpaths]
+ 
+             for i, mbpath in enumerate(mbpaths[0:-1]):
+@@ -1316,7 +1319,7 @@ class BuildReader(object):
+             all_contexts.append(context)
+ 
+         result = {}
+-        for path, paths in path_mozbuilds.items():
++        for path, paths in list(path_mozbuilds.items()):
+             result[path] = reduce(lambda x, y: x + y, (contexts[p] for p in paths), [])
+ 
+         return result, all_contexts
+@@ -1356,7 +1359,7 @@ class BuildReader(object):
+ 
+         r = {}
+ 
+-        for path, ctxs in paths.items():
++        for path, ctxs in list(paths.items()):
+             # Should be normalized by read_relevant_mozbuilds.
+             assert '\\' not in path
+ 
+diff --git a/python/mozbuild/mozbuild/frontend/sandbox.py b/python/mozbuild/mozbuild/frontend/sandbox.py
+index b2090802e..6d94291ea 100644
+--- a/python/mozbuild/mozbuild/frontend/sandbox.py
++++ b/python/mozbuild/mozbuild/frontend/sandbox.py
+@@ -17,7 +17,7 @@ KeyError are machine parseable. This machine-friendly data is used to present
+ user-friendly error messages in the case of errors.
+ """
+ 
+-from __future__ import absolute_import, unicode_literals
++
+ 
+ import os
+ import sys
+@@ -112,6 +112,7 @@ class Sandbox(dict):
+         'int': int,
+         'set': set,
+         'tuple': tuple,
++        'str': str,
+     })
+ 
+     def __init__(self, context, finder=default_finder):
+diff --git a/python/mozbuild/mozbuild/jar.py b/python/mozbuild/mozbuild/jar.py
+index 47a2eff63..96aea63ce 100644
+--- a/python/mozbuild/mozbuild/jar.py
++++ b/python/mozbuild/mozbuild/jar.py
+@@ -8,7 +8,7 @@ processing jar.mn files.
+ See the documentation for jar.mn on MDC for further details on the format.
+ '''
+ 
+-from __future__ import absolute_import
++
+ 
+ import sys
+ import os
+@@ -17,7 +17,7 @@ import re
+ import logging
+ from time import localtime
+ from MozZipFile import ZipFile
+-from cStringIO import StringIO
++from io import StringIO
+ from collections import defaultdict
+ 
+ from mozbuild.preprocessor import Preprocessor
+@@ -302,9 +302,9 @@ class JarMaker(object):
+         '''updateManifest replaces the % in the chrome registration entries
+         with the given chrome base path, and updates the given manifest file.
+         '''
+-        myregister = dict.fromkeys(map(lambda s: s.replace('%',
+-            chromebasepath), register))
+-        addEntriesToListFile(manifestPath, myregister.iterkeys())
++        myregister = dict.fromkeys([s.replace('%',
++            chromebasepath) for s in register])
++        addEntriesToListFile(manifestPath, iter(myregister.keys()))
+ 
+     def makeJar(self, infile, jardir):
+         '''makeJar is the main entry point to JarMaker.
+@@ -322,7 +322,7 @@ class JarMaker(object):
+         elif self.relativesrcdir:
+             self.localedirs = \
+                 self.generateLocaleDirs(self.relativesrcdir)
+-        if isinstance(infile, basestring):
++        if isinstance(infile, str):
+             logging.info('processing ' + infile)
+             self.sourcedirs.append(_normpath(os.path.dirname(infile)))
+         pp = self.pp.clone()
+diff --git a/python/mozbuild/mozbuild/makeutil.py b/python/mozbuild/mozbuild/makeutil.py
+index fcd45bed2..f77c5d2c3 100644
+--- a/python/mozbuild/mozbuild/makeutil.py
++++ b/python/mozbuild/mozbuild/makeutil.py
+@@ -2,11 +2,10 @@
+ # 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/.
+ 
+-from __future__ import absolute_import
++
+ 
+ import os
+ import re
+-from types import StringTypes
+ from collections import Iterable
+ 
+ 
+@@ -66,7 +65,7 @@ class _SimpleOrderedSet(object):
+         self._list = []
+         self._set = set()
+ 
+-    def __nonzero__(self):
++    def __bool__(self):
+         return bool(self._set)
+ 
+     def __iter__(self):
+@@ -103,19 +102,19 @@ class Rule(object):
+ 
+     def add_targets(self, targets):
+         '''Add additional targets to the rule.'''
+-        assert isinstance(targets, Iterable) and not isinstance(targets, StringTypes)
++        assert isinstance(targets, Iterable) and not isinstance(targets, str)
+         self._targets.update(targets)
+         return self
+ 
+     def add_dependencies(self, deps):
+         '''Add dependencies to the rule.'''
+-        assert isinstance(deps, Iterable) and not isinstance(deps, StringTypes)
++        assert isinstance(deps, Iterable) and not isinstance(deps, str)
+         self._dependencies.update(deps)
+         return self
+ 
+     def add_commands(self, commands):
+         '''Add commands to the rule.'''
+-        assert isinstance(commands, Iterable) and not isinstance(commands, StringTypes)
++        assert isinstance(commands, Iterable) and not isinstance(commands, str)
+         self._commands.extend(commands)
+         return self
+ 
+@@ -139,13 +138,16 @@ class Rule(object):
+         '''
+         if not self._targets:
+             return
+-        fh.write('%s:' % ' '.join(self._targets))
++        wstring = '%s:' % ' '.join(self._targets)
+         if self._dependencies:
+-            fh.write(' %s' % ' '.join(self.dependencies()))
+-        fh.write('\n')
++            wstring += ' %s' % ' '.join(self.dependencies())
++        wstring += '\n'
+         for cmd in self._commands:
+-            fh.write('\t%s\n' % cmd)
+-
++            wstring += '\t%s\n' % cmd
++        try:
++            fh.write(wstring.encode('utf-8'))
++        except TypeError:
++            fh.write(wstring)
+ 
+ # colon followed by anything except a slash (Windows path detection)
+ _depfilesplitter = re.compile(r':(?![\\/])')
+diff --git a/python/mozbuild/mozbuild/mozinfo.py b/python/mozbuild/mozbuild/mozinfo.py
+index 7e7ad1b2a..f03f20ba3 100755
+--- a/python/mozbuild/mozbuild/mozinfo.py
++++ b/python/mozbuild/mozbuild/mozinfo.py
+@@ -5,7 +5,7 @@
+ # This module produces a JSON file that provides basic build info and
+ # configuration metadata.
+ 
+-from __future__ import absolute_import
++
+ 
+ import os
+ import re
+@@ -33,7 +33,7 @@ def build_dict(config, env=os.environ):
+         d['mozconfig'] = config.mozconfig
+ 
+     # os
+-    o = substs["OS_TARGET"]
++    o = str(substs["OS_TARGET"])
+     known_os = {"Linux": "linux",
+                 "WINNT": "win",
+                 "Darwin": "mac",
+@@ -148,7 +148,7 @@ def write_mozinfo(file, config, env=os.environ):
+     and what keys are produced.
+     """
+     build_conf = build_dict(config, env)
+-    if isinstance(file, basestring):
+-        file = open(file, 'wb')
++    if isinstance(file, str):
++        file = open(file, 'w')
+ 
+     json.dump(build_conf, file, sort_keys=True, indent=4)
+diff --git a/python/mozbuild/mozbuild/preprocessor.py b/python/mozbuild/mozbuild/preprocessor.py
+index 6780b8b72..19e59884e 100644
+--- a/python/mozbuild/mozbuild/preprocessor.py
++++ b/python/mozbuild/mozbuild/preprocessor.py
+@@ -27,7 +27,8 @@ import os
+ import re
+ from optparse import OptionParser
+ import errno
+-from makeutil import Makefile
++from .makeutil import Makefile
++from functools import reduce
+ 
+ # hack around win32 mangling our line endings
+ # http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65443
+@@ -230,7 +231,7 @@ class Expression:
+         def __repr__(self):
+             return self.value.__repr__()
+ 
+-    class ParseError(StandardError):
++    class ParseError(Exception):
+         """
+         Error raised when parsing fails.
+         It has two members, offset and content, which give the offset of the
+@@ -278,7 +279,7 @@ class Preprocessor:
+         self.context = Context()
+         for k,v in {'FILE': '',
+                     'LINE': 0,
+-                    'DIRECTORY': os.path.abspath('.')}.iteritems():
++                    'DIRECTORY': os.path.abspath('.')}.items():
+             self.context[k] = v
+         self.actionLevel = 0
+         self.disableLevel = 0
+@@ -292,21 +293,21 @@ class Preprocessor:
+         self.cmds = {}
+         for cmd, level in {'define': 0,
+                            'undef': 0,
+-                           'if': sys.maxint,
+-                           'ifdef': sys.maxint,
+-                           'ifndef': sys.maxint,
++                           'if': sys.maxsize,
++                           'ifdef': sys.maxsize,
++                           'ifndef': sys.maxsize,
+                            'else': 1,
+                            'elif': 1,
+                            'elifdef': 1,
+                            'elifndef': 1,
+-                           'endif': sys.maxint,
++                           'endif': sys.maxsize,
+                            'expand': 0,
+                            'literal': 0,
+                            'filter': 0,
+                            'unfilter': 0,
+                            'include': 0,
+                            'includesubst': 0,
+-                           'error': 0}.iteritems():
++                           'error': 0}.items():
+             self.cmds[cmd] = (level, getattr(self, 'do_' + cmd))
+         self.out = sys.stdout
+         self.setMarker(marker)
+@@ -434,7 +435,7 @@ class Preprocessor:
+         filteredLine = self.applyFilters(aLine)
+         if filteredLine != aLine:
+             self.actionLevel = 2
+-        self.out.write(filteredLine)
++        self.out.write(filteredLine.encode('utf-8'))
+ 
+     def handleCommandLine(self, args, defaultToStdin = False):
+         """
+@@ -468,7 +469,7 @@ class Preprocessor:
+                 raise Preprocessor.Error(self, "--depend doesn't work with stdout",
+                                          None)
+             try:
+-                from makeutil import Makefile
++                from .makeutil import Makefile
+             except:
+                 raise Preprocessor.Error(self, "--depend requires the "
+                                                "mozbuild.makeutil module", None)
+@@ -683,7 +684,7 @@ class Preprocessor:
+         current = dict(self.filters)
+         for f in filters:
+             current[f] = getattr(self, 'filter_' + f)
+-        filterNames = current.keys()
++        filterNames = list(current.keys())
+         filterNames.sort()
+         self.filters = [(fn, current[fn]) for fn in filterNames]
+         return
+@@ -693,7 +694,7 @@ class Preprocessor:
+         for f in filters:
+             if f in current:
+                 del current[f]
+-        filterNames = current.keys()
++        filterNames = list(current.keys())
+         filterNames.sort()
+         self.filters = [(fn, current[fn]) for fn in filterNames]
+         return
+@@ -738,7 +739,7 @@ class Preprocessor:
+         args can either be a file name, or a file-like object.
+         Files should be opened, and will be closed after processing.
+         """
+-        isName = type(args) == str or type(args) == unicode
++        isName = type(args) == str or type(args) == str
+         oldCheckLineNumbers = self.checkLineNumbers
+         self.checkLineNumbers = False
+         if isName:
+diff --git a/python/mozbuild/mozbuild/shellutil.py b/python/mozbuild/mozbuild/shellutil.py
+index 185a970ee..c0c15f8f2 100644
+--- a/python/mozbuild/mozbuild/shellutil.py
++++ b/python/mozbuild/mozbuild/shellutil.py
+@@ -15,7 +15,7 @@ def _tokens2re(**tokens):
+     # which matches the pattern and captures it in a named match group.
+     # The group names and patterns are given as arguments.
+     all_tokens = '|'.join('(?P<%s>%s)' % (name, value)
+-                          for name, value in tokens.iteritems())
++                          for name, value in tokens.items())
+     nonescaped = r'(?<!\\)(?:%s)' % all_tokens
+ 
+     # The final pattern matches either the above pattern, or an escaped
+@@ -96,7 +96,7 @@ class _ClineSplitter(object):
+             self.cline = self.cline[m.end():]
+ 
+             match = {name: value
+-                     for name, value in m.groupdict().items() if value}
++                     for name, value in list(m.groupdict().items()) if value}
+             if 'quote' in match:
+                 # " or ' start a quoted string
+                 if match['quote'] == '"':
+@@ -144,7 +144,7 @@ class _ClineSplitter(object):
+             self._push(self.cline[:m.start()])
+             self.cline = self.cline[m.end():]
+             match = {name: value
+-                     for name, value in m.groupdict().items() if value}
++                     for name, value in list(m.groupdict().items()) if value}
+             if 'quote' in match:
+                 # a double quote ends the quoted string, so go back to
+                 # unquoted parsing
+diff --git a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py
+index a05059f8a..355a96165 100644
+--- a/python/mozbuild/mozbuild/test/backend/test_recursivemake.py
++++ b/python/mozbuild/mozbuild/test/backend/test_recursivemake.py
+@@ -2,9 +2,9 @@
+ # 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/.
+ 
+-from __future__ import unicode_literals
+ 
+-import cPickle as pickle
++
++import pickle as pickle
+ import json
+ import os
+ import unittest
+@@ -333,7 +333,7 @@ class TestRecursiveMakeBackend(BackendTester):
+             ],
+         }
+ 
+-        for var, val in expected.items():
++        for var, val in list(expected.items()):
+             # print("test_variable_passthru[%s]" % (var))
+             found = [str for str in lines if str.startswith(var)]
+             self.assertEqual(found, val)
+@@ -372,7 +372,7 @@ class TestRecursiveMakeBackend(BackendTester):
+             ],
+         }
+ 
+-        for var, val in expected.items():
++        for var, val in list(expected.items()):
+             found = [str for str in lines if str.startswith(var)]
+             self.assertEqual(found, val)
+ 
+@@ -563,7 +563,7 @@ class TestRecursiveMakeBackend(BackendTester):
+ 
+         # This is not the most robust test in the world, but it gets the job
+         # done.
+-        entries = [e for e in m._dests.keys() if '**' in e]
++        entries = [e for e in list(m._dests.keys()) if '**' in e]
+         self.assertEqual(len(entries), 1)
+         self.assertIn('support/**', entries[0])
+ 
+@@ -590,11 +590,11 @@ class TestRecursiveMakeBackend(BackendTester):
+                          set(['child/test_sub.js',
+                               'child/data/**',
+                               'child/another-file.sjs']))
+-        for key in test_installs.keys():
++        for key in list(test_installs.keys()):
+             self.assertIn(key, test_installs)
+ 
+         synthesized_manifest = InstallManifest()
+-        for item, installs in test_installs.items():
++        for item, installs in list(test_installs.items()):
+             for install_info in installs:
+                 if len(install_info) == 3:
+                     synthesized_manifest.add_pattern_link(*install_info)
+@@ -602,7 +602,7 @@ class TestRecursiveMakeBackend(BackendTester):
+                     synthesized_manifest.add_link(*install_info)
+ 
+         self.assertEqual(len(synthesized_manifest), 3)
+-        for item, info in synthesized_manifest._dests.items():
++        for item, info in list(synthesized_manifest._dests.items()):
+             self.assertIn(item, m)
+             self.assertEqual(info, m._dests[item])
+ 
+@@ -864,7 +864,7 @@ class TestRecursiveMakeBackend(BackendTester):
+         expected[mozpath.join(env.topobjdir, 'final-target')] = [
+             'FINAL_TARGET = $(DEPTH)/random-final-target'
+         ]
+-        for key, expected_rules in expected.iteritems():
++        for key, expected_rules in expected.items():
+             backend_path = mozpath.join(key, 'backend.mk')
+             lines = [l.strip() for l in open(backend_path, 'rt').readlines()[2:]]
+             found = [str for str in lines if
+diff --git a/python/mozbuild/mozbuild/test/configure/common.py b/python/mozbuild/mozbuild/test/configure/common.py
+index 150c6e393..5e2c2afaa 100644
+--- a/python/mozbuild/mozbuild/test/configure/common.py
++++ b/python/mozbuild/mozbuild/test/configure/common.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import copy
+ import errno
+@@ -16,7 +16,7 @@ from mozbuild.configure import ConfigureSandbox
+ from mozbuild.util import ReadOnlyNamespace
+ from mozpack import path as mozpath
+ 
+-from StringIO import StringIO
++from io import StringIO
+ from which import WhichError
+ 
+ from buildconfig import (
+@@ -77,10 +77,10 @@ class ConfigureTestSandbox(ConfigureSandbox):
+         self._search_path = environ.get('PATH', '').split(os.pathsep)
+ 
+         self._subprocess_paths = {
+-            mozpath.abspath(k): v for k, v in paths.iteritems() if v
++            mozpath.abspath(k): v for k, v in paths.items() if v
+         }
+ 
+-        paths = paths.keys()
++        paths = list(paths.keys())
+ 
+         environ = dict(environ)
+         if 'CONFIG_SHELL' not in environ:
+diff --git a/python/mozbuild/mozbuild/test/configure/lint.py b/python/mozbuild/mozbuild/test/configure/lint.py
+index 98f5f4fe7..a549b4bcf 100644
+--- a/python/mozbuild/mozbuild/test/configure/lint.py
++++ b/python/mozbuild/mozbuild/test/configure/lint.py
+@@ -2,11 +2,11 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import os
+ import unittest
+-from StringIO import StringIO
++from io import StringIO
+ from mozunit import main
+ from buildconfig import (
+     topobjdir,
+@@ -40,9 +40,7 @@ class LintMeta(type):
+         return type.__new__(mcs, name, bases, attrs)
+ 
+ 
+-class Lint(unittest.TestCase):
+-    __metaclass__ = LintMeta
+-
++class Lint(unittest.TestCase, metaclass=LintMeta):
+     def setUp(self):
+         self._curdir = os.getcwd()
+         os.chdir(topobjdir)
+diff --git a/python/mozbuild/mozbuild/test/configure/test_checks_configure.py b/python/mozbuild/mozbuild/test/configure/test_checks_configure.py
+index c60000bb2..07091c077 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_checks_configure.py
++++ b/python/mozbuild/mozbuild/test/configure/test_checks_configure.py
+@@ -2,9 +2,9 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
+ 
+-from StringIO import StringIO
++
++from io import StringIO
+ import os
+ import sys
+ import textwrap
+@@ -447,7 +447,7 @@ class TestChecksConfigure(unittest.TestCase):
+             checking for a... %s
+         ''' % self.OTHER_A))
+ 
+-        dirs = map(mozpath.dirname, (self.OTHER_A, self.KNOWN_A))
++        dirs = list(map(mozpath.dirname, (self.OTHER_A, self.KNOWN_A)))
+         config, out, status = self.get_result(textwrap.dedent('''\
+             check_prog("A", ("known-a",), paths=["%s"])
+         ''' % os.pathsep.join(dirs)))
+@@ -457,7 +457,7 @@ class TestChecksConfigure(unittest.TestCase):
+             checking for a... %s
+         ''' % self.OTHER_A))
+ 
+-        dirs = map(mozpath.dirname, (self.KNOWN_A, self.KNOWN_B))
++        dirs = list(map(mozpath.dirname, (self.KNOWN_A, self.KNOWN_B)))
+         config, out, status = self.get_result(textwrap.dedent('''\
+             check_prog("A", ("known-a",), paths=["%s", "%s"])
+         ''' % (os.pathsep.join(dirs), self.OTHER_A)))
+diff --git a/python/mozbuild/mozbuild/test/configure/test_compile_checks.py b/python/mozbuild/mozbuild/test/configure/test_compile_checks.py
+index b5be3bf2e..282000bb2 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_compile_checks.py
++++ b/python/mozbuild/mozbuild/test/configure/test_compile_checks.py
+@@ -2,14 +2,14 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import os
+ import textwrap
+ import unittest
+ import mozpack.path as mozpath
+ 
+-from StringIO import StringIO
++from io import StringIO
+ 
+ from buildconfig import topsrcdir
+ from common import ConfigureTestSandbox
+diff --git a/python/mozbuild/mozbuild/test/configure/test_configure.py b/python/mozbuild/mozbuild/test/configure/test_configure.py
+index f37e2701f..eb0ca84fb 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_configure.py
++++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
+@@ -2,9 +2,9 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
+ 
+-from StringIO import StringIO
++
++from io import StringIO
+ import os
+ import sys
+ import textwrap
+@@ -43,7 +43,7 @@ class TestConfigure(unittest.TestCase):
+ 
+         if '--help' in options:
+             return out.getvalue(), config
+-        self.assertEquals('', out.getvalue())
++        self.assertEqual('', out.getvalue())
+         return config
+ 
+     def moz_configure(self, source):
+@@ -55,7 +55,7 @@ class TestConfigure(unittest.TestCase):
+     def test_defaults(self):
+         config = self.get_config()
+         self.maxDiff = None
+-        self.assertEquals({
++        self.assertEqual({
+             'CHOICES': NegativeOptionValue(),
+             'DEFAULTED': PositiveOptionValue(('not-simple',)),
+             'IS_GCC': NegativeOptionValue(),
+@@ -71,9 +71,9 @@ class TestConfigure(unittest.TestCase):
+     def test_help(self):
+         help, config = self.get_config(['--help'], prog='configure')
+ 
+-        self.assertEquals({}, config)
++        self.assertEqual({}, config)
+         self.maxDiff = None
+-        self.assertEquals(
++        self.assertEqual(
+             'Usage: configure [options]\n'
+             '\n'
+             'Options: [defaults in brackets after descriptions]\n'
+@@ -109,7 +109,7 @@ class TestConfigure(unittest.TestCase):
+         ):
+             self.assertNotIn('ENABLED_SIMPLE', config)
+             self.assertIn('SIMPLE', config)
+-            self.assertEquals(NegativeOptionValue(), config['SIMPLE'])
++            self.assertEqual(NegativeOptionValue(), config['SIMPLE'])
+ 
+         for config in (
+                 self.get_config(['--enable-simple']),
+@@ -117,7 +117,7 @@ class TestConfigure(unittest.TestCase):
+         ):
+             self.assertIn('ENABLED_SIMPLE', config)
+             self.assertIn('SIMPLE', config)
+-            self.assertEquals(PositiveOptionValue(), config['SIMPLE'])
++            self.assertEqual(PositiveOptionValue(), config['SIMPLE'])
+             self.assertIs(config['SIMPLE'], config['ENABLED_SIMPLE'])
+ 
+         # --enable-simple doesn't take values.
+@@ -135,7 +135,7 @@ class TestConfigure(unittest.TestCase):
+                                 env={'MOZ_WITH_ENV': '1'}),
+         ):
+             self.assertIn('WITH_ENV', config)
+-            self.assertEquals(NegativeOptionValue(), config['WITH_ENV'])
++            self.assertEqual(NegativeOptionValue(), config['WITH_ENV'])
+ 
+         for config in (
+                 self.get_config(['--enable-with-env']),
+@@ -145,7 +145,7 @@ class TestConfigure(unittest.TestCase):
+                                 env={'MOZ_WITH_ENV': ''}),
+         ):
+             self.assertIn('WITH_ENV', config)
+-            self.assertEquals(PositiveOptionValue(), config['WITH_ENV'])
++            self.assertEqual(PositiveOptionValue(), config['WITH_ENV'])
+ 
+         with self.assertRaises(InvalidOptionError):
+             self.get_config(['--enable-with-env=value'])
+@@ -160,23 +160,23 @@ class TestConfigure(unittest.TestCase):
+             self.get_config(['--enable-values', '--disable-values']),
+         ):
+             self.assertIn(name, config)
+-            self.assertEquals(NegativeOptionValue(), config[name])
++            self.assertEqual(NegativeOptionValue(), config[name])
+ 
+         for config in (
+             self.get_config(['--enable-values']),
+             self.get_config(['--disable-values', '--enable-values']),
+         ):
+             self.assertIn(name, config)
+-            self.assertEquals(PositiveOptionValue(), config[name])
++            self.assertEqual(PositiveOptionValue(), config[name])
+ 
+         config = self.get_config(['--enable-values=foo'])
+         self.assertIn(name, config)
+-        self.assertEquals(PositiveOptionValue(('foo',)), config[name])
++        self.assertEqual(PositiveOptionValue(('foo',)), config[name])
+ 
+         config = self.get_config(['--enable-values=foo,bar'])
+         self.assertIn(name, config)
+         self.assertTrue(config[name])
+-        self.assertEquals(PositiveOptionValue(('foo', 'bar')), config[name])
++        self.assertEqual(PositiveOptionValue(('foo', 'bar')), config[name])
+ 
+     def test_values2(self):
+         self.test_values('VALUES2')
+@@ -187,12 +187,12 @@ class TestConfigure(unittest.TestCase):
+     def test_returned_default(self):
+         config = self.get_config(['--enable-simple'])
+         self.assertIn('DEFAULTED', config)
+-        self.assertEquals(
++        self.assertEqual(
+             PositiveOptionValue(('simple',)), config['DEFAULTED'])
+ 
+         config = self.get_config(['--disable-simple'])
+         self.assertIn('DEFAULTED', config)
+-        self.assertEquals(
++        self.assertEqual(
+             PositiveOptionValue(('not-simple',)), config['DEFAULTED'])
+ 
+     def test_returned_choices(self):
+@@ -200,13 +200,13 @@ class TestConfigure(unittest.TestCase):
+             config = self.get_config(
+                 ['--enable-values=alpha', '--returned-choices=%s' % val])
+             self.assertIn('CHOICES', config)
+-            self.assertEquals(PositiveOptionValue((val,)), config['CHOICES'])
++            self.assertEqual(PositiveOptionValue((val,)), config['CHOICES'])
+ 
+         for val in ('0', '1', '2'):
+             config = self.get_config(
+                 ['--enable-values=numeric', '--returned-choices=%s' % val])
+             self.assertIn('CHOICES', config)
+-            self.assertEquals(PositiveOptionValue((val,)), config['CHOICES'])
++            self.assertEqual(PositiveOptionValue((val,)), config['CHOICES'])
+ 
+         with self.assertRaises(InvalidOptionError):
+             self.get_config(['--enable-values=numeric',
+@@ -218,12 +218,12 @@ class TestConfigure(unittest.TestCase):
+     def test_included(self):
+         config = self.get_config(env={'CC': 'gcc'})
+         self.assertIn('IS_GCC', config)
+-        self.assertEquals(config['IS_GCC'], True)
++        self.assertEqual(config['IS_GCC'], True)
+ 
+         config = self.get_config(
+             ['--enable-include=extra.configure', '--extra'])
+         self.assertIn('EXTRA', config)
+-        self.assertEquals(PositiveOptionValue(), config['EXTRA'])
++        self.assertEqual(PositiveOptionValue(), config['EXTRA'])
+ 
+         with self.assertRaises(InvalidOptionError):
+             self.get_config(['--extra'])
+@@ -231,7 +231,7 @@ class TestConfigure(unittest.TestCase):
+     def test_template(self):
+         config = self.get_config(env={'CC': 'gcc'})
+         self.assertIn('CFLAGS', config)
+-        self.assertEquals(config['CFLAGS'], ['-Werror=foobar'])
++        self.assertEqual(config['CFLAGS'], ['-Werror=foobar'])
+ 
+         config = self.get_config(env={'CC': 'clang'})
+         self.assertNotIn('CFLAGS', config)
+@@ -288,7 +288,7 @@ class TestConfigure(unittest.TestCase):
+             sandbox
+         )
+ 
+-        import __builtin__
++        import builtins
+         self.assertIs(sandbox['foo'](), __builtin__)
+ 
+         exec_(textwrap.dedent('''
+@@ -300,7 +300,7 @@ class TestConfigure(unittest.TestCase):
+         )
+ 
+         f = sandbox['foo']()
+-        self.assertEquals(f.name, os.devnull)
++        self.assertEqual(f.name, os.devnull)
+         f.close()
+ 
+         # This unlocks the sandbox
+@@ -336,8 +336,8 @@ class TestConfigure(unittest.TestCase):
+         self.assertIs(sandbox['foo'](), sandbox)
+ 
+         # Nothing leaked from the function being executed
+-        self.assertEquals(sandbox.keys(), ['__builtins__', 'foo'])
+-        self.assertEquals(sandbox['__builtins__'], ConfigureSandbox.BUILTINS)
++        self.assertEqual(list(sandbox.keys()), ['__builtins__', 'foo'])
++        self.assertEqual(sandbox['__builtins__'], ConfigureSandbox.BUILTINS)
+ 
+         exec_(textwrap.dedent('''
+             @template
+@@ -354,7 +354,7 @@ class TestConfigure(unittest.TestCase):
+         with self.assertRaises(NameError) as e:
+             sandbox._depends[sandbox['bar']].result()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "global name 'sys' is not defined")
+ 
+     def test_apply_imports(self):
+@@ -380,28 +380,28 @@ class TestConfigure(unittest.TestCase):
+             sandbox
+         )
+ 
+-        self.assertEquals(len(imports), 1)
++        self.assertEqual(len(imports), 1)
+ 
+     def test_os_path(self):
+         config = self.get_config(['--with-imports=%s' % __file__])
+         self.assertIn('HAS_ABSPATH', config)
+-        self.assertEquals(config['HAS_ABSPATH'], True)
++        self.assertEqual(config['HAS_ABSPATH'], True)
+         self.assertIn('HAS_GETATIME', config)
+-        self.assertEquals(config['HAS_GETATIME'], True)
++        self.assertEqual(config['HAS_GETATIME'], True)
+         self.assertIn('HAS_GETATIME2', config)
+-        self.assertEquals(config['HAS_GETATIME2'], False)
++        self.assertEqual(config['HAS_GETATIME2'], False)
+ 
+     def test_template_call(self):
+         config = self.get_config(env={'CC': 'gcc'})
+         self.assertIn('TEMPLATE_VALUE', config)
+-        self.assertEquals(config['TEMPLATE_VALUE'], 42)
++        self.assertEqual(config['TEMPLATE_VALUE'], 42)
+         self.assertIn('TEMPLATE_VALUE_2', config)
+-        self.assertEquals(config['TEMPLATE_VALUE_2'], 21)
++        self.assertEqual(config['TEMPLATE_VALUE_2'], 21)
+ 
+     def test_template_imports(self):
+         config = self.get_config(['--enable-imports-in-template'])
+         self.assertIn('PLATFORM', config)
+-        self.assertEquals(config['PLATFORM'], sys.platform)
++        self.assertEqual(config['PLATFORM'], sys.platform)
+ 
+     def test_decorators(self):
+         config = {}
+@@ -419,27 +419,27 @@ class TestConfigure(unittest.TestCase):
+             return self.get_config(*args, configure='set_config.configure')
+ 
+         help, config = get_config(['--help'])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config(['--set-foo'])
+         self.assertIn('FOO', config)
+-        self.assertEquals(config['FOO'], True)
++        self.assertEqual(config['FOO'], True)
+ 
+         config = get_config(['--set-bar'])
+         self.assertNotIn('FOO', config)
+         self.assertIn('BAR', config)
+-        self.assertEquals(config['BAR'], True)
++        self.assertEqual(config['BAR'], True)
+ 
+         config = get_config(['--set-value=qux'])
+         self.assertIn('VALUE', config)
+-        self.assertEquals(config['VALUE'], 'qux')
++        self.assertEqual(config['VALUE'], 'qux')
+ 
+         config = get_config(['--set-name=hoge'])
+         self.assertIn('hoge', config)
+-        self.assertEquals(config['hoge'], True)
++        self.assertEqual(config['hoge'], True)
+ 
+         config = get_config([])
+-        self.assertEquals(config, {'BAR': False})
++        self.assertEqual(config, {'BAR': False})
+ 
+         with self.assertRaises(ConfigureError):
+             # Both --set-foo and --set-name=FOO are going to try to
+@@ -454,11 +454,11 @@ class TestConfigure(unittest.TestCase):
+             set_config('QUX', 'qux', when='--with-qux')
+         '''):
+             config = self.get_config()
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': 'foo',
+             })
+             config = self.get_config(['--with-qux'])
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': 'foo',
+                 'QUX': 'qux',
+             })
+@@ -468,27 +468,27 @@ class TestConfigure(unittest.TestCase):
+             return self.get_config(*args, configure='set_define.configure')
+ 
+         help, config = get_config(['--help'])
+-        self.assertEquals(config, {'DEFINES': {}})
++        self.assertEqual(config, {'DEFINES': {}})
+ 
+         config = get_config(['--set-foo'])
+         self.assertIn('FOO', config['DEFINES'])
+-        self.assertEquals(config['DEFINES']['FOO'], True)
++        self.assertEqual(config['DEFINES']['FOO'], True)
+ 
+         config = get_config(['--set-bar'])
+         self.assertNotIn('FOO', config['DEFINES'])
+         self.assertIn('BAR', config['DEFINES'])
+-        self.assertEquals(config['DEFINES']['BAR'], True)
++        self.assertEqual(config['DEFINES']['BAR'], True)
+ 
+         config = get_config(['--set-value=qux'])
+         self.assertIn('VALUE', config['DEFINES'])
+-        self.assertEquals(config['DEFINES']['VALUE'], 'qux')
++        self.assertEqual(config['DEFINES']['VALUE'], 'qux')
+ 
+         config = get_config(['--set-name=hoge'])
+         self.assertIn('hoge', config['DEFINES'])
+-        self.assertEquals(config['DEFINES']['hoge'], True)
++        self.assertEqual(config['DEFINES']['hoge'], True)
+ 
+         config = get_config([])
+-        self.assertEquals(config['DEFINES'], {'BAR': False})
++        self.assertEqual(config['DEFINES'], {'BAR': False})
+ 
+         with self.assertRaises(ConfigureError):
+             # Both --set-foo and --set-name=FOO are going to try to
+@@ -503,11 +503,11 @@ class TestConfigure(unittest.TestCase):
+             set_define('QUX', 'qux', when='--with-qux')
+         '''):
+             config = self.get_config()
+-            self.assertEquals(config['DEFINES'], {
++            self.assertEqual(config['DEFINES'], {
+                 'FOO': 'foo',
+             })
+             config = self.get_config(['--with-qux'])
+-            self.assertEquals(config['DEFINES'], {
++            self.assertEqual(config['DEFINES'], {
+                 'FOO': 'foo',
+                 'QUX': 'qux',
+             })
+@@ -518,19 +518,19 @@ class TestConfigure(unittest.TestCase):
+                 *args, configure='imply_option/simple.configure')
+ 
+         help, config = get_config(['--help'])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config([])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config(['--enable-foo'])
+         self.assertIn('BAR', config)
+-        self.assertEquals(config['BAR'], PositiveOptionValue())
++        self.assertEqual(config['BAR'], PositiveOptionValue())
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             get_config(['--enable-foo', '--disable-bar'])
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             "'--enable-bar' implied by '--enable-foo' conflicts with "
+             "'--disable-bar' from the command-line")
+@@ -541,31 +541,31 @@ class TestConfigure(unittest.TestCase):
+                 *args, configure='imply_option/negative.configure')
+ 
+         help, config = get_config(['--help'])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config([])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config(['--enable-foo'])
+         self.assertIn('BAR', config)
+-        self.assertEquals(config['BAR'], NegativeOptionValue())
++        self.assertEqual(config['BAR'], NegativeOptionValue())
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             get_config(['--enable-foo', '--enable-bar'])
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             "'--disable-bar' implied by '--enable-foo' conflicts with "
+             "'--enable-bar' from the command-line")
+ 
+         config = get_config(['--disable-hoge'])
+         self.assertIn('BAR', config)
+-        self.assertEquals(config['BAR'], NegativeOptionValue())
++        self.assertEqual(config['BAR'], NegativeOptionValue())
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             get_config(['--disable-hoge', '--enable-bar'])
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             "'--disable-bar' implied by '--disable-hoge' conflicts with "
+             "'--enable-bar' from the command-line")
+@@ -576,23 +576,23 @@ class TestConfigure(unittest.TestCase):
+                 *args, configure='imply_option/values.configure')
+ 
+         help, config = get_config(['--help'])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config([])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config(['--enable-foo=a'])
+         self.assertIn('BAR', config)
+-        self.assertEquals(config['BAR'], PositiveOptionValue(('a',)))
++        self.assertEqual(config['BAR'], PositiveOptionValue(('a',)))
+ 
+         config = get_config(['--enable-foo=a,b'])
+         self.assertIn('BAR', config)
+-        self.assertEquals(config['BAR'], PositiveOptionValue(('a','b')))
++        self.assertEqual(config['BAR'], PositiveOptionValue(('a','b')))
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             get_config(['--enable-foo=a,b', '--disable-bar'])
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             "'--enable-bar=a,b' implied by '--enable-foo' conflicts with "
+             "'--disable-bar' from the command-line")
+@@ -603,15 +603,15 @@ class TestConfigure(unittest.TestCase):
+                 *args, configure='imply_option/infer.configure')
+ 
+         help, config = get_config(['--help'])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config([])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             get_config(['--enable-foo', '--disable-bar'])
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             "'--enable-bar' implied by '--enable-foo' conflicts with "
+             "'--disable-bar' from the command-line")
+@@ -619,7 +619,7 @@ class TestConfigure(unittest.TestCase):
+         with self.assertRaises(ConfigureError) as e:
+             self.get_config([], configure='imply_option/infer_ko.configure')
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             "Cannot infer what implies '--enable-bar'. Please add a `reason` "
+             "to the `imply_option` call.")
+@@ -630,25 +630,25 @@ class TestConfigure(unittest.TestCase):
+                 *args, configure='imply_option/imm.configure')
+ 
+         help, config = get_config(['--help'])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config = get_config([])
+-        self.assertEquals(config, {})
++        self.assertEqual(config, {})
+ 
+         config_path = mozpath.abspath(
+             mozpath.join(test_data_path, 'imply_option', 'imm.configure'))
+ 
+-        with self.assertRaisesRegexp(InvalidOptionError,
++        with self.assertRaisesRegex(InvalidOptionError,
+             "--enable-foo' implied by 'imply_option at %s:7' conflicts with "
+             "'--disable-foo' from the command-line" % config_path):
+             get_config(['--disable-foo'])
+ 
+-        with self.assertRaisesRegexp(InvalidOptionError,
++        with self.assertRaisesRegex(InvalidOptionError,
+             "--enable-bar=foo,bar' implied by 'imply_option at %s:16' conflicts"
+             " with '--enable-bar=a,b,c' from the command-line" % config_path):
+             get_config(['--enable-bar=a,b,c'])
+ 
+-        with self.assertRaisesRegexp(InvalidOptionError,
++        with self.assertRaisesRegex(InvalidOptionError,
+             "--enable-baz=BAZ' implied by 'imply_option at %s:25' conflicts"
+             " with '--enable-baz=QUUX' from the command-line" % config_path):
+             get_config(['--enable-baz=QUUX'])
+@@ -660,7 +660,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "`--with-foo`, emitted from `%s` line 2, is unknown."
+                           % mozpath.join(test_data_path, 'moz.configure'))
+ 
+@@ -675,7 +675,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Unexpected type: 'int'")
+ 
+     def test_imply_option_when(self):
+@@ -686,12 +686,12 @@ class TestConfigure(unittest.TestCase):
+             set_config('QUX', depends('--with-qux')(lambda x: x))
+         '''):
+             config = self.get_config()
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'QUX': NegativeOptionValue(),
+             })
+ 
+             config = self.get_config(['--with-foo'])
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'QUX': PositiveOptionValue(),
+             })
+ 
+@@ -700,7 +700,7 @@ class TestConfigure(unittest.TestCase):
+             with self.moz_configure('option("--with-foo", help="foo")'):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Option `--with-foo` is not handled ; reference it with a @depends'
+         )
+@@ -712,7 +712,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Option `--with-foo` already defined'
+         )
+@@ -724,7 +724,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Option `MOZ_FOO` already defined'
+         )
+@@ -736,7 +736,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Option `MOZ_FOO` already defined'
+         )
+@@ -748,7 +748,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Option `MOZ_FOO` already defined'
+         )
+@@ -760,7 +760,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Option `--with-foo` already defined'
+         )
+@@ -776,18 +776,18 @@ class TestConfigure(unittest.TestCase):
+             set_config('QUX', depends('--with-qux', when='--with-foo')(lambda x: x))
+         '''):
+             config = self.get_config()
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': NegativeOptionValue(),
+             })
+ 
+             config = self.get_config(['--with-foo'])
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': PositiveOptionValue(),
+                 'QUX': NegativeOptionValue(),
+             })
+ 
+             config = self.get_config(['--with-foo', '--with-qux'])
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': PositiveOptionValue(),
+                 'QUX': PositiveOptionValue(),
+             })
+@@ -795,7 +795,7 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(InvalidOptionError) as e:
+                 self.get_config(['--with-bar'])
+ 
+-            self.assertEquals(
++            self.assertEqual(
+                 e.exception.message,
+                 '--with-bar is not available in this configuration'
+             )
+@@ -803,7 +803,7 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(InvalidOptionError) as e:
+                 self.get_config(['--with-qux'])
+ 
+-            self.assertEquals(
++            self.assertEqual(
+                 e.exception.message,
+                 '--with-qux is not available in this configuration'
+             )
+@@ -811,18 +811,18 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(InvalidOptionError) as e:
+                 self.get_config(['QUX=1'])
+ 
+-            self.assertEquals(
++            self.assertEqual(
+                 e.exception.message,
+                 'QUX is not available in this configuration'
+             )
+ 
+             config = self.get_config(env={'QUX': '1'})
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': NegativeOptionValue(),
+             })
+ 
+             help, config = self.get_config(['--help'])
+-            self.assertEquals(help, textwrap.dedent('''\
++            self.assertEqual(help, textwrap.dedent('''\
+                 Usage: configure [options]
+ 
+                 Options: [defaults in brackets after descriptions]
+@@ -833,7 +833,7 @@ class TestConfigure(unittest.TestCase):
+             '''))
+ 
+             help, config = self.get_config(['--help', '--with-foo'])
+-            self.assertEquals(help, textwrap.dedent('''\
++            self.assertEqual(help, textwrap.dedent('''\
+                 Usage: configure [options]
+ 
+                 Options: [defaults in brackets after descriptions]
+@@ -851,7 +851,7 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(ConfigureError) as e:
+                 self.get_config()
+ 
+-            self.assertEquals(e.exception.message,
++            self.assertEqual(e.exception.message,
+                               '@depends function needs the same `when` as '
+                               'options it depends on')
+ 
+@@ -868,7 +868,7 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(ConfigureError) as e:
+                 self.get_config()
+ 
+-            self.assertEquals(e.exception.message,
++            self.assertEqual(e.exception.message,
+                               '@depends function needs the same `when` as '
+                               'options it depends on')
+ 
+@@ -896,7 +896,7 @@ class TestConfigure(unittest.TestCase):
+             with self.moz_configure('include("../foo.configure")'):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Cannot include `%s` because it is not in a subdirectory of `%s`'
+             % (mozpath.normpath(mozpath.join(test_data_path, '..',
+@@ -911,7 +911,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'Cannot include `%s` because it was included already.'
+             % mozpath.normpath(mozpath.join(test_data_path,
+@@ -924,7 +924,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message, "Unexpected type: 'int'")
++        self.assertEqual(e.exception.message, "Unexpected type: 'int'")
+ 
+     def test_include_when(self):
+         with MockedOpen({
+@@ -967,26 +967,26 @@ class TestConfigure(unittest.TestCase):
+             '''),
+         }):
+             config = self.get_config()
+-            self.assertEquals(config, {})
++            self.assertEqual(config, {})
+ 
+             config = self.get_config(['--with-foo'])
+-            self.assertEquals(config, {})
++            self.assertEqual(config, {})
+ 
+             config = self.get_config(['--with-bar'])
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'BAR': 'bar',
+             })
+ 
+             with self.assertRaises(InvalidOptionError) as e:
+                 self.get_config(['--with-qux'])
+ 
+-            self.assertEquals(
++            self.assertEqual(
+                 e.exception.message,
+                 '--with-qux is not available in this configuration'
+             )
+ 
+             config = self.get_config(['--with-foo', '--with-foo-really'])
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': 'foo',
+                 'FOO2': True,
+             })
+@@ -998,7 +998,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message, 'Cannot reassign builtins')
++        self.assertEqual(e.exception.message, 'Cannot reassign builtins')
+ 
+         with self.assertRaises(KeyError) as e:
+             with self.moz_configure('''
+@@ -1006,7 +1006,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           'Cannot assign `foo` because it is neither a '
+                           '@depends nor a @template')
+ 
+@@ -1019,7 +1019,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "@depends needs at least one argument")
+ 
+         with self.assertRaises(ConfigureError) as e:
+@@ -1030,7 +1030,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "'--with-foo' is not a known option. Maybe it's "
+                           "declared too late?")
+ 
+@@ -1042,7 +1042,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Option must not contain an '='")
+ 
+         with self.assertRaises(TypeError) as e:
+@@ -1053,7 +1053,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Cannot use object of type 'int' as argument "
+                           "to @depends")
+ 
+@@ -1065,7 +1065,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Cannot decorate generator functions with @depends")
+ 
+         with self.assertRaises(TypeError) as e:
+@@ -1074,7 +1074,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Unexpected type: 'int'")
+ 
+         with self.assertRaises(ConfigureError) as e:
+@@ -1088,7 +1088,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The `foo` function may not be called")
+ 
+         with self.assertRaises(TypeError) as e:
+@@ -1099,7 +1099,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "depends_impl() got an unexpected keyword argument 'foo'")
+ 
+     def test_depends_when(self):
+@@ -1124,12 +1124,12 @@ class TestConfigure(unittest.TestCase):
+             set_config('QUX', qux)
+         '''):
+             config = self.get_config()
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': 'foo',
+             })
+ 
+             config = self.get_config(['--with-qux'])
+-            self.assertEquals(config, {
++            self.assertEqual(config, {
+                 'FOO': 'foo',
+                 'QUX': 'qux',
+             })
+@@ -1144,7 +1144,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           '@imports must appear after @template')
+ 
+         with self.assertRaises(ConfigureError) as e:
+@@ -1157,7 +1157,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           '@imports must appear after @depends')
+ 
+         for import_ in (
+@@ -1174,7 +1174,7 @@ class TestConfigure(unittest.TestCase):
+                 ''' % import_):
+                     self.get_config()
+ 
+-            self.assertEquals(e.exception.message, "Unexpected type: 'int'")
++            self.assertEqual(e.exception.message, "Unexpected type: 'int'")
+ 
+         with self.assertRaises(TypeError) as e:
+             with self.moz_configure('''
+@@ -1185,7 +1185,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message, "Unexpected type: 'int'")
++        self.assertEqual(e.exception.message, "Unexpected type: 'int'")
+ 
+         with self.assertRaises(ValueError) as e:
+             with self.moz_configure('''
+@@ -1195,7 +1195,7 @@ class TestConfigure(unittest.TestCase):
+             '''):
+                 self.get_config()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Invalid argument to @imports: 'os*'")
+ 
+     def test_only_when(self):
+@@ -1250,7 +1250,7 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(InvalidOptionError) as e:
+                 self.get_config(['--foo'])
+ 
+-            self.assertEquals(e.exception.message,
++            self.assertEqual(e.exception.message,
+                               '--foo is not available in this configuration')
+ 
+         # Cannot depend on an option defined in a only_when block, because we
+@@ -1261,7 +1261,7 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(ConfigureError) as e:
+                 self.get_config()
+ 
+-            self.assertEquals(e.exception.message,
++            self.assertEqual(e.exception.message,
+                               '@depends function needs the same `when` as '
+                               'options it depends on')
+ 
+@@ -1278,7 +1278,7 @@ class TestConfigure(unittest.TestCase):
+             with self.assertRaises(InvalidOptionError) as e:
+                 self.get_config()
+ 
+-            self.assertEquals(e.exception.message,
++            self.assertEqual(e.exception.message,
+                               '--foo is not available in this configuration')
+ 
+         # And similarly doesn't fail when the condition is true.
+diff --git a/python/mozbuild/mozbuild/test/configure/test_lint.py b/python/mozbuild/mozbuild/test/configure/test_lint.py
+index 6d8d4c49f..6ad897839 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_lint.py
++++ b/python/mozbuild/mozbuild/test/configure/test_lint.py
+@@ -2,9 +2,9 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
+ 
+-from StringIO import StringIO
++
++from io import StringIO
+ import os
+ import textwrap
+ import unittest
+@@ -62,7 +62,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "`bar` depends on '--help' and `foo`. "
+                           "`foo` must depend on '--help'")
+ 
+@@ -85,7 +85,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "`bar` depends on '--help' and `foo`. "
+                           "`foo` must depend on '--help'")
+ 
+@@ -111,7 +111,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Missing @depends for `foo`: '--help'")
+ 
+         with self.assertRaises(ConfigureError) as e:
+@@ -130,7 +130,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Missing @depends for `foo`: '--help'")
+ 
+         with self.assertRaises(ConfigureError) as e:
+@@ -145,7 +145,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Missing @depends for `foo`: '--help'")
+ 
+         # This would have failed with "Missing @depends for `foo`: '--help'"
+@@ -178,7 +178,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "Missing @depends for `foo`: '--help'")
+ 
+         # There is a default restricted `os` module when there is no explicit
+@@ -205,7 +205,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "%s:3: The dependency on `--foo` is unused."
+                           % mozpath.join(test_data_path, 'moz.configure'))
+ 
+@@ -222,7 +222,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "%s:5: The dependency on `bar` is unused."
+                           % mozpath.join(test_data_path, 'moz.configure'))
+ 
+@@ -236,7 +236,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "%s:2: The dependency on `<lambda>` is unused."
+                           % mozpath.join(test_data_path, 'moz.configure'))
+ 
+@@ -257,7 +257,7 @@ class TestLint(unittest.TestCase):
+             '''):
+                 self.lint_test()
+ 
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "%s:9: The dependency on `qux` is unused."
+                           % mozpath.join(test_data_path, 'moz.configure'))
+ 
+diff --git a/python/mozbuild/mozbuild/test/configure/test_moz_configure.py b/python/mozbuild/mozbuild/test/configure/test_moz_configure.py
+index b3342e268..7a26e9e09 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_moz_configure.py
++++ b/python/mozbuild/mozbuild/test/configure/test_moz_configure.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ from mozunit import main
+ from mozpack import path as mozpath
+@@ -27,10 +27,10 @@ class TestMozConfigure(BaseConfigureTest):
+             shell = mozpath.abspath('/bin/sh')
+             return result.replace('CONFIG_SHELL=%s ' % shell, '')
+ 
+-        self.assertEquals('--enable-application=browser',
++        self.assertEqual('--enable-application=browser',
+                           get_value_for(['--enable-application=browser']))
+ 
+-        self.assertEquals('--enable-application=browser '
++        self.assertEqual('--enable-application=browser '
+                           'MOZ_VTUNE=1',
+                           get_value_for(['--enable-application=browser',
+                                          'MOZ_VTUNE=1']))
+@@ -39,25 +39,25 @@ class TestMozConfigure(BaseConfigureTest):
+             environ={'MOZ_VTUNE': '1'},
+             mozconfig='ac_add_options --enable-project=js')
+ 
+-        self.assertEquals('--enable-project=js MOZ_VTUNE=1',
++        self.assertEqual('--enable-project=js MOZ_VTUNE=1',
+                           value)
+ 
+         # --disable-js-shell is the default, so it's filtered out.
+-        self.assertEquals('--enable-application=browser',
++        self.assertEqual('--enable-application=browser',
+                           get_value_for(['--enable-application=browser',
+                                          '--disable-js-shell']))
+ 
+         # Normally, --without-foo would be filtered out because that's the
+         # default, but since it is a (fake) old-configure option, it always
+         # appears.
+-        self.assertEquals('--enable-application=browser --without-foo',
++        self.assertEqual('--enable-application=browser --without-foo',
+                           get_value_for(['--enable-application=browser',
+                                          '--without-foo']))
+-        self.assertEquals('--enable-application=browser --with-foo',
++        self.assertEqual('--enable-application=browser --with-foo',
+                           get_value_for(['--enable-application=browser',
+                                          '--with-foo']))
+ 
+-        self.assertEquals("--enable-application=browser '--with-foo=foo bar'",
++        self.assertEqual("--enable-application=browser '--with-foo=foo bar'",
+                           get_value_for(['--enable-application=browser',
+                                          '--with-foo=foo bar']))
+ 
+@@ -69,7 +69,7 @@ class TestMozConfigure(BaseConfigureTest):
+                 self.version = version
+ 
+             def __call__(self, stdin, args):
+-                this.assertEquals(args, ('-version',))
++                this.assertEqual(args, ('-version',))
+                 return 0, self.version, ''
+ 
+         def check_nsis_version(version):
+@@ -84,13 +84,13 @@ class TestMozConfigure(BaseConfigureTest):
+         with self.assertRaises(SystemExit) as e:
+             check_nsis_version('v3.0a2')
+ 
+-        self.assertEquals(check_nsis_version('v3.0b1'), '3.0b1')
+-        self.assertEquals(check_nsis_version('v3.0b2'), '3.0b2')
+-        self.assertEquals(check_nsis_version('v3.0rc1'), '3.0rc1')
+-        self.assertEquals(check_nsis_version('v3.0'), '3.0')
+-        self.assertEquals(check_nsis_version('v3.0-2'), '3.0')
+-        self.assertEquals(check_nsis_version('v3.0.1'), '3.0')
+-        self.assertEquals(check_nsis_version('v3.1'), '3.1')
++        self.assertEqual(check_nsis_version('v3.0b1'), '3.0b1')
++        self.assertEqual(check_nsis_version('v3.0b2'), '3.0b2')
++        self.assertEqual(check_nsis_version('v3.0rc1'), '3.0rc1')
++        self.assertEqual(check_nsis_version('v3.0'), '3.0')
++        self.assertEqual(check_nsis_version('v3.0-2'), '3.0')
++        self.assertEqual(check_nsis_version('v3.0.1'), '3.0')
++        self.assertEqual(check_nsis_version('v3.1'), '3.1')
+ 
+ 
+ if __name__ == '__main__':
+diff --git a/python/mozbuild/mozbuild/test/configure/test_options.py b/python/mozbuild/mozbuild/test/configure/test_options.py
+index 9defccb2c..330ce3b1f 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_options.py
++++ b/python/mozbuild/mozbuild/test/configure/test_options.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import unittest
+ 
+@@ -28,139 +28,139 @@ class Option(Option):
+ class TestOption(unittest.TestCase):
+     def test_option(self):
+         option = Option('--option')
+-        self.assertEquals(option.prefix, '')
+-        self.assertEquals(option.name, 'option')
+-        self.assertEquals(option.env, None)
++        self.assertEqual(option.prefix, '')
++        self.assertEqual(option.name, 'option')
++        self.assertEqual(option.env, None)
+         self.assertFalse(option.default)
+ 
+         option = Option('--enable-option')
+-        self.assertEquals(option.prefix, 'enable')
+-        self.assertEquals(option.name, 'option')
+-        self.assertEquals(option.env, None)
++        self.assertEqual(option.prefix, 'enable')
++        self.assertEqual(option.name, 'option')
++        self.assertEqual(option.env, None)
+         self.assertFalse(option.default)
+ 
+         option = Option('--disable-option')
+-        self.assertEquals(option.prefix, 'disable')
+-        self.assertEquals(option.name, 'option')
+-        self.assertEquals(option.env, None)
++        self.assertEqual(option.prefix, 'disable')
++        self.assertEqual(option.name, 'option')
++        self.assertEqual(option.env, None)
+         self.assertTrue(option.default)
+ 
+         option = Option('--with-option')
+-        self.assertEquals(option.prefix, 'with')
+-        self.assertEquals(option.name, 'option')
+-        self.assertEquals(option.env, None)
++        self.assertEqual(option.prefix, 'with')
++        self.assertEqual(option.name, 'option')
++        self.assertEqual(option.env, None)
+         self.assertFalse(option.default)
+ 
+         option = Option('--without-option')
+-        self.assertEquals(option.prefix, 'without')
+-        self.assertEquals(option.name, 'option')
+-        self.assertEquals(option.env, None)
++        self.assertEqual(option.prefix, 'without')
++        self.assertEqual(option.name, 'option')
++        self.assertEqual(option.env, None)
+         self.assertTrue(option.default)
+ 
+         option = Option('--without-option-foo', env='MOZ_OPTION')
+-        self.assertEquals(option.env, 'MOZ_OPTION')
++        self.assertEqual(option.env, 'MOZ_OPTION')
+ 
+         option = Option(env='MOZ_OPTION')
+-        self.assertEquals(option.prefix, '')
+-        self.assertEquals(option.name, None)
+-        self.assertEquals(option.env, 'MOZ_OPTION')
++        self.assertEqual(option.prefix, '')
++        self.assertEqual(option.name, None)
++        self.assertEqual(option.env, 'MOZ_OPTION')
+         self.assertFalse(option.default)
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=0, default=('a',))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=1, default=())
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'default must be a bool, a string or a tuple of strings')
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=1, default=True)
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=1, default=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=2, default=())
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'default must be a bool, a string or a tuple of strings')
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=2, default=True)
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=2, default=('a',))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs='?', default=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs='+', default=())
+-        self.assertEquals(
++        self.assertEqual(
+             e.exception.message,
+             'default must be a bool, a string or a tuple of strings')
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs='+', default=True)
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         # --disable options with a nargs value that requires at least one
+         # argument need to be given a default.
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--disable-option', nargs=1)
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--disable-option', nargs='+')
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+         # Test nargs inference from default value
+         option = Option('--with-foo', default=True)
+-        self.assertEquals(option.nargs, 0)
++        self.assertEqual(option.nargs, 0)
+ 
+         option = Option('--with-foo', default=False)
+-        self.assertEquals(option.nargs, 0)
++        self.assertEqual(option.nargs, 0)
+ 
+         option = Option('--with-foo', default='a')
+-        self.assertEquals(option.nargs, '?')
++        self.assertEqual(option.nargs, '?')
+ 
+         option = Option('--with-foo', default=('a',))
+-        self.assertEquals(option.nargs, '?')
++        self.assertEqual(option.nargs, '?')
+ 
+         option = Option('--with-foo', default=('a', 'b'))
+-        self.assertEquals(option.nargs, '*')
++        self.assertEqual(option.nargs, '*')
+ 
+         option = Option(env='FOO', default=True)
+-        self.assertEquals(option.nargs, 0)
++        self.assertEqual(option.nargs, 0)
+ 
+         option = Option(env='FOO', default=False)
+-        self.assertEquals(option.nargs, 0)
++        self.assertEqual(option.nargs, 0)
+ 
+         option = Option(env='FOO', default='a')
+-        self.assertEquals(option.nargs, '?')
++        self.assertEqual(option.nargs, '?')
+ 
+         option = Option(env='FOO', default=('a',))
+-        self.assertEquals(option.nargs, '?')
++        self.assertEqual(option.nargs, '?')
+ 
+         option = Option(env='FOO', default=('a', 'b'))
+-        self.assertEquals(option.nargs, '*')
++        self.assertEqual(option.nargs, '*')
+ 
+     def test_option_option(self):
+         for option in (
+@@ -170,70 +170,70 @@ class TestOption(unittest.TestCase):
+             '--with-option',
+             '--without-option',
+         ):
+-            self.assertEquals(Option(option).option, option)
+-            self.assertEquals(Option(option, env='FOO').option, option)
++            self.assertEqual(Option(option).option, option)
++            self.assertEqual(Option(option, env='FOO').option, option)
+ 
+             opt = Option(option, default=False)
+-            self.assertEquals(opt.option,
++            self.assertEqual(opt.option,
+                               option.replace('-disable-', '-enable-')
+                                     .replace('-without-', '-with-'))
+ 
+             opt = Option(option, default=True)
+-            self.assertEquals(opt.option,
++            self.assertEqual(opt.option,
+                               option.replace('-enable-', '-disable-')
+                                     .replace('-with-', '-without-'))
+ 
+-        self.assertEquals(Option(env='FOO').option, 'FOO')
++        self.assertEqual(Option(env='FOO').option, 'FOO')
+ 
+     def test_option_choices(self):
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=3, choices=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           'Not enough `choices` for `nargs`')
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--without-option', nargs=1, choices=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           'A `default` must be given along with `choices`')
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--without-option', nargs='+', choices=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           'A `default` must be given along with `choices`')
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--without-option', default='c', choices=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The `default` value must be one of 'a', 'b'")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--without-option', default=('a', 'c',), choices=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The `default` value must be one of 'a', 'b'")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--without-option', default=('c',), choices=('a', 'b'))
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The `default` value must be one of 'a', 'b'")
+ 
+         option = Option('--with-option', nargs='+', choices=('a', 'b'))
+         with self.assertRaises(InvalidOptionError) as e:
+             option.get_value('--with-option=c')
+-        self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'")
++        self.assertEqual(e.exception.message, "'c' is not one of 'a', 'b'")
+ 
+         value = option.get_value('--with-option=b,a')
+         self.assertTrue(value)
+-        self.assertEquals(PositiveOptionValue(('b', 'a')), value)
++        self.assertEqual(PositiveOptionValue(('b', 'a')), value)
+ 
+         option = Option('--without-option', nargs='*', default='a',
+                         choices=('a', 'b'))
+         with self.assertRaises(InvalidOptionError) as e:
+             option.get_value('--with-option=c')
+-        self.assertEquals(e.exception.message, "'c' is not one of 'a', 'b'")
++        self.assertEqual(e.exception.message, "'c' is not one of 'a', 'b'")
+ 
+         value = option.get_value('--with-option=b,a')
+         self.assertTrue(value)
+-        self.assertEquals(PositiveOptionValue(('b', 'a')), value)
++        self.assertEqual(PositiveOptionValue(('b', 'a')), value)
+ 
+         # Test nargs inference from choices
+         option = Option('--with-option', choices=('a', 'b'))
+@@ -244,37 +244,37 @@ class TestOption(unittest.TestCase):
+                         choices=('a', 'b', 'c', 'd'))
+ 
+         value = option.get_value('--with-option=+d')
+-        self.assertEquals(PositiveOptionValue(('b', 'c', 'd')), value)
++        self.assertEqual(PositiveOptionValue(('b', 'c', 'd')), value)
+ 
+         value = option.get_value('--with-option=-b')
+-        self.assertEquals(PositiveOptionValue(('c',)), value)
++        self.assertEqual(PositiveOptionValue(('c',)), value)
+ 
+         value = option.get_value('--with-option=-b,+d')
+-        self.assertEquals(PositiveOptionValue(('c','d')), value)
++        self.assertEqual(PositiveOptionValue(('c','d')), value)
+ 
+         # Adding something that is in the default is fine
+         value = option.get_value('--with-option=+b')
+-        self.assertEquals(PositiveOptionValue(('b', 'c')), value)
++        self.assertEqual(PositiveOptionValue(('b', 'c')), value)
+ 
+         # Removing something that is not in the default is fine, as long as it
+         # is one of the choices
+         value = option.get_value('--with-option=-a')
+-        self.assertEquals(PositiveOptionValue(('b', 'c')), value)
++        self.assertEqual(PositiveOptionValue(('b', 'c')), value)
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             option.get_value('--with-option=-e')
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "'e' is not one of 'a', 'b', 'c', 'd'")
+ 
+         # Other "not a choice" errors.
+         with self.assertRaises(InvalidOptionError) as e:
+             option.get_value('--with-option=+e')
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "'e' is not one of 'a', 'b', 'c', 'd'")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             option.get_value('--with-option=e')
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "'e' is not one of 'a', 'b', 'c', 'd'")
+ 
+     def test_option_value_compare(self):
+@@ -294,7 +294,7 @@ class TestOption(unittest.TestCase):
+ 
+         # For usability reasons, we raise TypeError when attempting to compare
+         # against a non-tuple.
+-        with self.assertRaisesRegexp(TypeError, 'cannot compare a'):
++        with self.assertRaisesRegex(TypeError, 'cannot compare a'):
+             val == 'foo'
+ 
+         # But we allow empty option values to compare otherwise we can't
+@@ -313,36 +313,36 @@ class TestOption(unittest.TestCase):
+ 
+     def test_option_value_format(self):
+         val = PositiveOptionValue()
+-        self.assertEquals('--with-value', val.format('--with-value'))
+-        self.assertEquals('--with-value', val.format('--without-value'))
+-        self.assertEquals('--enable-value', val.format('--enable-value'))
+-        self.assertEquals('--enable-value', val.format('--disable-value'))
+-        self.assertEquals('--value', val.format('--value'))
+-        self.assertEquals('VALUE=1', val.format('VALUE'))
++        self.assertEqual('--with-value', val.format('--with-value'))
++        self.assertEqual('--with-value', val.format('--without-value'))
++        self.assertEqual('--enable-value', val.format('--enable-value'))
++        self.assertEqual('--enable-value', val.format('--disable-value'))
++        self.assertEqual('--value', val.format('--value'))
++        self.assertEqual('VALUE=1', val.format('VALUE'))
+ 
+         val = PositiveOptionValue(('a',))
+-        self.assertEquals('--with-value=a', val.format('--with-value'))
+-        self.assertEquals('--with-value=a', val.format('--without-value'))
+-        self.assertEquals('--enable-value=a', val.format('--enable-value'))
+-        self.assertEquals('--enable-value=a', val.format('--disable-value'))
+-        self.assertEquals('--value=a', val.format('--value'))
+-        self.assertEquals('VALUE=a', val.format('VALUE'))
++        self.assertEqual('--with-value=a', val.format('--with-value'))
++        self.assertEqual('--with-value=a', val.format('--without-value'))
++        self.assertEqual('--enable-value=a', val.format('--enable-value'))
++        self.assertEqual('--enable-value=a', val.format('--disable-value'))
++        self.assertEqual('--value=a', val.format('--value'))
++        self.assertEqual('VALUE=a', val.format('VALUE'))
+ 
+         val = PositiveOptionValue(('a', 'b'))
+-        self.assertEquals('--with-value=a,b', val.format('--with-value'))
+-        self.assertEquals('--with-value=a,b', val.format('--without-value'))
+-        self.assertEquals('--enable-value=a,b', val.format('--enable-value'))
+-        self.assertEquals('--enable-value=a,b', val.format('--disable-value'))
+-        self.assertEquals('--value=a,b', val.format('--value'))
+-        self.assertEquals('VALUE=a,b', val.format('VALUE'))
++        self.assertEqual('--with-value=a,b', val.format('--with-value'))
++        self.assertEqual('--with-value=a,b', val.format('--without-value'))
++        self.assertEqual('--enable-value=a,b', val.format('--enable-value'))
++        self.assertEqual('--enable-value=a,b', val.format('--disable-value'))
++        self.assertEqual('--value=a,b', val.format('--value'))
++        self.assertEqual('VALUE=a,b', val.format('VALUE'))
+ 
+         val = NegativeOptionValue()
+-        self.assertEquals('--without-value', val.format('--with-value'))
+-        self.assertEquals('--without-value', val.format('--without-value'))
+-        self.assertEquals('--disable-value', val.format('--enable-value'))
+-        self.assertEquals('--disable-value', val.format('--disable-value'))
+-        self.assertEquals('', val.format('--value'))
+-        self.assertEquals('VALUE=', val.format('VALUE'))
++        self.assertEqual('--without-value', val.format('--with-value'))
++        self.assertEqual('--without-value', val.format('--without-value'))
++        self.assertEqual('--disable-value', val.format('--enable-value'))
++        self.assertEqual('--disable-value', val.format('--disable-value'))
++        self.assertEqual('', val.format('--value'))
++        self.assertEqual('VALUE=', val.format('VALUE'))
+ 
+     def test_option_value(self, name='option', nargs=0, default=None):
+         disabled = name.startswith(('disable-', 'without-'))
+@@ -359,28 +359,28 @@ class TestOption(unittest.TestCase):
+ 
+         if nargs in (0, '?', '*') or disabled:
+             value = option.get_value('--%s' % name, 'option')
+-            self.assertEquals(value, posOptionValue())
+-            self.assertEquals(value.origin, 'option')
++            self.assertEqual(value, posOptionValue())
++            self.assertEqual(value.origin, 'option')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('--%s' % name)
+             if nargs == 1:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes 1 value' % name)
+             elif nargs == '+':
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes 1 or more values' % name)
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes 2 values' % name)
+ 
+         value = option.get_value('')
+-        self.assertEquals(value, defaultValue)
+-        self.assertEquals(value.origin, 'default')
++        self.assertEqual(value, defaultValue)
++        self.assertEqual(value.origin, 'default')
+ 
+         value = option.get_value(None)
+-        self.assertEquals(value, defaultValue)
+-        self.assertEquals(value.origin, 'default')
++        self.assertEqual(value, defaultValue)
++        self.assertEqual(value.origin, 'default')
+ 
+         with self.assertRaises(AssertionError):
+             value = option.get_value('MOZ_OPTION=', 'environment')
+@@ -393,47 +393,47 @@ class TestOption(unittest.TestCase):
+ 
+         if nargs in (1, '?', '*', '+') and not disabled:
+             value = option.get_value('--%s=' % name, 'option')
+-            self.assertEquals(value, PositiveOptionValue(('',)))
+-            self.assertEquals(value.origin, 'option')
++            self.assertEqual(value, PositiveOptionValue(('',)))
++            self.assertEqual(value.origin, 'option')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('--%s=' % name)
+             if disabled:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'Cannot pass a value to --%s' % name)
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes %d values' % (name, nargs))
+ 
+         if nargs in (1, '?', '*', '+') and not disabled:
+             value = option.get_value('--%s=foo' % name, 'option')
+-            self.assertEquals(value, PositiveOptionValue(('foo',)))
+-            self.assertEquals(value.origin, 'option')
++            self.assertEqual(value, PositiveOptionValue(('foo',)))
++            self.assertEqual(value.origin, 'option')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('--%s=foo' % name)
+             if disabled:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'Cannot pass a value to --%s' % name)
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes %d values' % (name, nargs))
+ 
+         if nargs in (2, '*', '+') and not disabled:
+             value = option.get_value('--%s=foo,bar' % name, 'option')
+-            self.assertEquals(value, PositiveOptionValue(('foo', 'bar')))
+-            self.assertEquals(value.origin, 'option')
++            self.assertEqual(value, PositiveOptionValue(('foo', 'bar')))
++            self.assertEqual(value.origin, 'option')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('--%s=foo,bar' % name, 'option')
+             if disabled:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'Cannot pass a value to --%s' % name)
+             elif nargs == '?':
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes 0 or 1 values' % name)
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes %d value%s'
+                                   % (name, nargs, 's' if nargs != 1 else ''))
+ 
+@@ -441,59 +441,59 @@ class TestOption(unittest.TestCase):
+                         default=default)
+         if nargs in (0, '?', '*') or disabled:
+             value = option.get_value('--%s' % name, 'option')
+-            self.assertEquals(value, posOptionValue())
+-            self.assertEquals(value.origin, 'option')
++            self.assertEqual(value, posOptionValue())
++            self.assertEqual(value.origin, 'option')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('--%s' % name)
+             if disabled:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'Cannot pass a value to --%s' % name)
+             elif nargs == '+':
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes 1 or more values' % name)
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes %d value%s'
+                                   % (name, nargs, 's' if nargs != 1 else ''))
+ 
+         value = option.get_value('')
+-        self.assertEquals(value, defaultValue)
+-        self.assertEquals(value.origin, 'default')
++        self.assertEqual(value, defaultValue)
++        self.assertEqual(value.origin, 'default')
+ 
+         value = option.get_value(None)
+-        self.assertEquals(value, defaultValue)
+-        self.assertEquals(value.origin, 'default')
++        self.assertEqual(value, defaultValue)
++        self.assertEqual(value.origin, 'default')
+ 
+         value = option.get_value('MOZ_OPTION=', 'environment')
+-        self.assertEquals(value, NegativeOptionValue())
+-        self.assertEquals(value.origin, 'environment')
++        self.assertEqual(value, NegativeOptionValue())
++        self.assertEqual(value.origin, 'environment')
+ 
+         if nargs in (0, '?', '*'):
+             value = option.get_value('MOZ_OPTION=1', 'environment')
+-            self.assertEquals(value, PositiveOptionValue())
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value, PositiveOptionValue())
++            self.assertEqual(value.origin, 'environment')
+         elif nargs in (1, '+'):
+             value = option.get_value('MOZ_OPTION=1', 'environment')
+-            self.assertEquals(value, PositiveOptionValue(('1',)))
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value, PositiveOptionValue(('1',)))
++            self.assertEqual(value.origin, 'environment')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('MOZ_OPTION=1', 'environment')
+-            self.assertEquals(e.exception.message, 'MOZ_OPTION takes 2 values')
++            self.assertEqual(e.exception.message, 'MOZ_OPTION takes 2 values')
+ 
+         if nargs in (1, '?', '*', '+') and not disabled:
+             value = option.get_value('--%s=' % name, 'option')
+-            self.assertEquals(value, PositiveOptionValue(('',)))
+-            self.assertEquals(value.origin, 'option')
++            self.assertEqual(value, PositiveOptionValue(('',)))
++            self.assertEqual(value.origin, 'option')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('--%s=' % name, 'option')
+             if disabled:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'Cannot pass a value to --%s' % name)
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s takes %d values' % (name, nargs))
+ 
+         with self.assertRaises(AssertionError):
+@@ -501,26 +501,26 @@ class TestOption(unittest.TestCase):
+ 
+         if nargs in (1, '?', '*', '+'):
+             value = option.get_value('MOZ_OPTION=foo', 'environment')
+-            self.assertEquals(value, PositiveOptionValue(('foo',)))
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value, PositiveOptionValue(('foo',)))
++            self.assertEqual(value.origin, 'environment')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('MOZ_OPTION=foo', 'environment')
+-            self.assertEquals(e.exception.message,
++            self.assertEqual(e.exception.message,
+                               'MOZ_OPTION takes %d values' % nargs)
+ 
+         if nargs in (2, '*', '+'):
+             value = option.get_value('MOZ_OPTION=foo,bar', 'environment')
+-            self.assertEquals(value, PositiveOptionValue(('foo', 'bar')))
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value, PositiveOptionValue(('foo', 'bar')))
++            self.assertEqual(value.origin, 'environment')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('MOZ_OPTION=foo,bar', 'environment')
+             if nargs == '?':
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'MOZ_OPTION takes 0 or 1 values')
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'MOZ_OPTION takes %d value%s'
+                                   % (nargs, 's' if nargs != 1 else ''))
+ 
+@@ -532,26 +532,26 @@ class TestOption(unittest.TestCase):
+             env_option.get_value('--%s' % name)
+ 
+         value = env_option.get_value('')
+-        self.assertEquals(value, defaultValue)
+-        self.assertEquals(value.origin, 'default')
++        self.assertEqual(value, defaultValue)
++        self.assertEqual(value.origin, 'default')
+ 
+         value = env_option.get_value('MOZ_OPTION=', 'environment')
+-        self.assertEquals(value, negOptionValue())
+-        self.assertEquals(value.origin, 'environment')
++        self.assertEqual(value, negOptionValue())
++        self.assertEqual(value.origin, 'environment')
+ 
+         if nargs in (0, '?', '*'):
+             value = env_option.get_value('MOZ_OPTION=1', 'environment')
+-            self.assertEquals(value, posOptionValue())
++            self.assertEqual(value, posOptionValue())
+             self.assertTrue(value)
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value.origin, 'environment')
+         elif nargs in (1, '+'):
+             value = env_option.get_value('MOZ_OPTION=1', 'environment')
+-            self.assertEquals(value, PositiveOptionValue(('1',)))
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value, PositiveOptionValue(('1',)))
++            self.assertEqual(value.origin, 'environment')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 env_option.get_value('MOZ_OPTION=1', 'environment')
+-            self.assertEquals(e.exception.message, 'MOZ_OPTION takes 2 values')
++            self.assertEqual(e.exception.message, 'MOZ_OPTION takes 2 values')
+ 
+         with self.assertRaises(AssertionError) as e:
+             env_option.get_value('--%s' % name)
+@@ -561,26 +561,26 @@ class TestOption(unittest.TestCase):
+ 
+         if nargs in (1, '?', '*', '+'):
+             value = env_option.get_value('MOZ_OPTION=foo', 'environment')
+-            self.assertEquals(value, PositiveOptionValue(('foo',)))
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value, PositiveOptionValue(('foo',)))
++            self.assertEqual(value.origin, 'environment')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 env_option.get_value('MOZ_OPTION=foo', 'environment')
+-            self.assertEquals(e.exception.message,
++            self.assertEqual(e.exception.message,
+                               'MOZ_OPTION takes %d values' % nargs)
+ 
+         if nargs in (2, '*', '+'):
+             value = env_option.get_value('MOZ_OPTION=foo,bar', 'environment')
+-            self.assertEquals(value, PositiveOptionValue(('foo', 'bar')))
+-            self.assertEquals(value.origin, 'environment')
++            self.assertEqual(value, PositiveOptionValue(('foo', 'bar')))
++            self.assertEqual(value.origin, 'environment')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 env_option.get_value('MOZ_OPTION=foo,bar', 'environment')
+             if nargs == '?':
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'MOZ_OPTION takes 0 or 1 values')
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   'MOZ_OPTION takes %d value%s'
+                                   % (nargs, 's' if nargs != 1 else ''))
+ 
+@@ -592,28 +592,28 @@ class TestOption(unittest.TestCase):
+                                         default=default)
+ 
+         value = option.get_value('--%s-option' % disable, 'option')
+-        self.assertEquals(value, NegativeOptionValue())
+-        self.assertEquals(value.origin, 'option')
++        self.assertEqual(value, NegativeOptionValue())
++        self.assertEqual(value.origin, 'option')
+ 
+         option = self.test_option_value('%s-option' % disable, nargs=nargs,
+                                         default=default)
+ 
+         if nargs in (0, '?', '*'):
+             value = option.get_value('--%s-option' % enable, 'option')
+-            self.assertEquals(value, PositiveOptionValue())
+-            self.assertEquals(value.origin, 'option')
++            self.assertEqual(value, PositiveOptionValue())
++            self.assertEqual(value.origin, 'option')
+         else:
+             with self.assertRaises(InvalidOptionError) as e:
+                 option.get_value('--%s-option' % enable, 'option')
+             if nargs == 1:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s-option takes 1 value' % enable)
+             elif nargs == '+':
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s-option takes 1 or more values'
+                                   % enable)
+             else:
+-                self.assertEquals(e.exception.message,
++                self.assertEqual(e.exception.message,
+                                   '--%s-option takes 2 values' % enable)
+ 
+     def test_option_value_with(self):
+@@ -622,12 +622,12 @@ class TestOption(unittest.TestCase):
+     def test_option_value_invalid_nargs(self):
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs='foo')
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "nargs must be a positive integer, '?', '*' or '+'")
+ 
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--option', nargs=-2)
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "nargs must be a positive integer, '?', '*' or '+'")
+ 
+     def test_option_value_nargs_1(self):
+@@ -638,7 +638,7 @@ class TestOption(unittest.TestCase):
+         # A default is required
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--disable-option', nargs=1)
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+     def test_option_value_nargs_2(self):
+@@ -649,7 +649,7 @@ class TestOption(unittest.TestCase):
+         # A default is required
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--disable-option', nargs=2)
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+     def test_option_value_nargs_0_or_1(self):
+@@ -676,7 +676,7 @@ class TestOption(unittest.TestCase):
+         # A default is required
+         with self.assertRaises(InvalidOptionError) as e:
+             Option('--disable-option', nargs='+')
+-        self.assertEquals(e.exception.message,
++        self.assertEqual(e.exception.message,
+                           "The given `default` doesn't satisfy `nargs`")
+ 
+ 
+@@ -684,21 +684,21 @@ class TestCommandLineHelper(unittest.TestCase):
+     def test_basic(self):
+         helper = CommandLineHelper({}, ['cmd', '--foo', '--bar'])
+ 
+-        self.assertEquals(['--foo', '--bar'], list(helper))
++        self.assertEqual(['--foo', '--bar'], list(helper))
+ 
+         helper.add('--enable-qux')
+ 
+-        self.assertEquals(['--foo', '--bar', '--enable-qux'], list(helper))
++        self.assertEqual(['--foo', '--bar', '--enable-qux'], list(helper))
+ 
+         value, option = helper.handle(Option('--bar'))
+-        self.assertEquals(['--foo', '--enable-qux'], list(helper))
+-        self.assertEquals(PositiveOptionValue(), value)
+-        self.assertEquals('--bar', option)
++        self.assertEqual(['--foo', '--enable-qux'], list(helper))
++        self.assertEqual(PositiveOptionValue(), value)
++        self.assertEqual('--bar', option)
+ 
+         value, option = helper.handle(Option('--baz'))
+-        self.assertEquals(['--foo', '--enable-qux'], list(helper))
+-        self.assertEquals(NegativeOptionValue(), value)
+-        self.assertEquals(None, option)
++        self.assertEqual(['--foo', '--enable-qux'], list(helper))
++        self.assertEqual(NegativeOptionValue(), value)
++        self.assertEqual(None, option)
+ 
+         with self.assertRaises(AssertionError):
+             CommandLineHelper({}, ['--foo', '--bar'])
+@@ -707,89 +707,89 @@ class TestCommandLineHelper(unittest.TestCase):
+         foo = Option('--with-foo', nargs='*')
+         helper = CommandLineHelper({}, ['cmd', '--with-foo=a,b'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b')), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--with-foo=a,b', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b')), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--with-foo=a,b', option)
+ 
+         helper = CommandLineHelper({}, ['cmd', '--with-foo=a,b',
+                                         '--without-foo'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(NegativeOptionValue(), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--without-foo', option)
++        self.assertEqual(NegativeOptionValue(), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--without-foo', option)
+ 
+         helper = CommandLineHelper({}, ['cmd', '--without-foo',
+                                         '--with-foo=a,b'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b')), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--with-foo=a,b', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b')), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--with-foo=a,b', option)
+ 
+         foo = Option('--with-foo', env='FOO', nargs='*')
+         helper = CommandLineHelper({'FOO': ''}, ['cmd', '--with-foo=a,b'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b')), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--with-foo=a,b', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b')), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--with-foo=a,b', option)
+ 
+         helper = CommandLineHelper({'FOO': 'a,b'}, ['cmd', '--without-foo'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(NegativeOptionValue(), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--without-foo', option)
++        self.assertEqual(NegativeOptionValue(), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--without-foo', option)
+ 
+         helper = CommandLineHelper({'FOO': ''}, ['cmd', '--with-bar=a,b'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(NegativeOptionValue(), value)
+-        self.assertEquals('environment', value.origin)
+-        self.assertEquals('FOO=', option)
++        self.assertEqual(NegativeOptionValue(), value)
++        self.assertEqual('environment', value.origin)
++        self.assertEqual('FOO=', option)
+ 
+         helper = CommandLineHelper({'FOO': 'a,b'}, ['cmd', '--without-bar'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b')), value)
+-        self.assertEquals('environment', value.origin)
+-        self.assertEquals('FOO=a,b', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b')), value)
++        self.assertEqual('environment', value.origin)
++        self.assertEqual('FOO=a,b', option)
+ 
+         helper = CommandLineHelper({}, ['cmd', '--with-foo=a,b', 'FOO='])
+         value, option = helper.handle(foo)
+-        self.assertEquals(NegativeOptionValue(), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('FOO=', option)
++        self.assertEqual(NegativeOptionValue(), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('FOO=', option)
+ 
+         helper = CommandLineHelper({}, ['cmd', '--without-foo', 'FOO=a,b'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b')), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('FOO=a,b', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b')), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('FOO=a,b', option)
+ 
+         helper = CommandLineHelper({}, ['cmd', 'FOO=', '--with-foo=a,b'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b')), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--with-foo=a,b', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b')), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--with-foo=a,b', option)
+ 
+         helper = CommandLineHelper({}, ['cmd', 'FOO=a,b', '--without-foo'])
+         value, option = helper.handle(foo)
+-        self.assertEquals(NegativeOptionValue(), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--without-foo', option)
++        self.assertEqual(NegativeOptionValue(), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--without-foo', option)
+ 
+     def test_extra_args(self):
+         foo = Option('--with-foo', env='FOO', nargs='*')
+         helper = CommandLineHelper({}, ['cmd'])
+         helper.add('FOO=a,b,c', 'other-origin')
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b', 'c')), value)
+-        self.assertEquals('other-origin', value.origin)
+-        self.assertEquals('FOO=a,b,c', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b', 'c')), value)
++        self.assertEqual('other-origin', value.origin)
++        self.assertEqual('FOO=a,b,c', option)
+ 
+         helper = CommandLineHelper({}, ['cmd'])
+         helper.add('FOO=a,b,c', 'other-origin')
+         helper.add('--with-foo=a,b,c', 'other-origin')
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b', 'c')), value)
+-        self.assertEquals('other-origin', value.origin)
+-        self.assertEquals('--with-foo=a,b,c', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b', 'c')), value)
++        self.assertEqual('other-origin', value.origin)
++        self.assertEqual('--with-foo=a,b,c', option)
+ 
+         # Adding conflicting options is not allowed.
+         helper = CommandLineHelper({}, ['cmd'])
+@@ -809,9 +809,9 @@ class TestCommandLineHelper(unittest.TestCase):
+         # But adding the same is allowed.
+         helper.add('FOO=a,b,c', 'other-origin')
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b', 'c')), value)
+-        self.assertEquals('other-origin', value.origin)
+-        self.assertEquals('FOO=a,b,c', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b', 'c')), value)
++        self.assertEqual('other-origin', value.origin)
++        self.assertEqual('FOO=a,b,c', option)
+ 
+         # The same rule as above applies when using the option form vs. the
+         # variable form. But we can't detect it when .add is called.
+@@ -837,9 +837,9 @@ class TestCommandLineHelper(unittest.TestCase):
+         helper.add('FOO=a,b,c', 'other-origin')
+         helper.add('--with-foo=a,b,c', 'other-origin')
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(('a', 'b', 'c')), value)
+-        self.assertEquals('other-origin', value.origin)
+-        self.assertEquals('--with-foo=a,b,c', option)
++        self.assertEqual(PositiveOptionValue(('a', 'b', 'c')), value)
++        self.assertEqual('other-origin', value.origin)
++        self.assertEqual('--with-foo=a,b,c', option)
+ 
+         # Conflicts are also not allowed against what is in the
+         # environment/on the command line.
+@@ -869,19 +869,19 @@ class TestCommandLineHelper(unittest.TestCase):
+         foo = Option('--foo',
+                      possible_origins=('command-line',))
+         value, option = helper.handle(foo)
+-        self.assertEquals(PositiveOptionValue(), value)
+-        self.assertEquals('command-line', value.origin)
+-        self.assertEquals('--foo', option)
++        self.assertEqual(PositiveOptionValue(), value)
++        self.assertEqual('command-line', value.origin)
++        self.assertEqual('--foo', option)
+ 
+         bar = Option('--bar',
+                      possible_origins=('mozconfig',))
+-        with self.assertRaisesRegexp(InvalidOptionError,
++        with self.assertRaisesRegex(InvalidOptionError,
+             "--bar can not be set by command-line. Values are accepted from: mozconfig"):
+             helper.handle(bar)
+ 
+         baz = Option(env='BAZ',
+                      possible_origins=('implied',))
+-        with self.assertRaisesRegexp(InvalidOptionError,
++        with self.assertRaisesRegex(InvalidOptionError,
+             "BAZ=1 can not be set by environment. Values are accepted from: implied"):
+             helper.handle(baz)
+ 
+diff --git a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
+index cb7ff709e..c339a32bf 100755
+--- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
++++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py
+@@ -2,12 +2,12 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import logging
+ import os
+ 
+-from StringIO import StringIO
++from io import StringIO
+ 
+ from mozunit import main
+ 
+@@ -366,9 +366,9 @@ class BaseToolchainTest(BaseConfigureTest):
+                 compiler = sandbox._value_for(sandbox[var])
+                 # Add var on both ends to make it clear which of the
+                 # variables is failing the test when that happens.
+-                self.assertEquals((var, compiler), (var, result))
++                self.assertEqual((var, compiler), (var, result))
+             except SystemExit:
+-                self.assertEquals((var, result),
++                self.assertEqual((var, result),
+                                   (var, self.out.getvalue().strip()))
+                 return
+ 
+@@ -407,7 +407,7 @@ class BaseToolchainTest(BaseConfigureTest):
+             'RUST_LIB_SUFFIX',
+             'OBJ_SUFFIX',
+         ):
+-            self.assertEquals('%s=%s' % (k, sandbox.get_config(k)),
++            self.assertEqual('%s=%s' % (k, sandbox.get_config(k)),
+                               '%s=%s' % (k, library_name_info[k]))
+ 
+ 
+@@ -584,7 +584,7 @@ class LinuxToolchainTest(BaseToolchainTest):
+         # We'll try gcc and clang, but since there is no gcc (gcc-x.y doesn't
+         # count), find clang.
+         paths = {
+-            k: v for k, v in self.PATHS.iteritems()
++            k: v for k, v in self.PATHS.items()
+             if os.path.basename(k) not in ('gcc', 'g++')
+         }
+         self.do_toolchain_test(paths, {
+@@ -619,7 +619,7 @@ class LinuxToolchainTest(BaseToolchainTest):
+         # Even if there are gcc-x.y or clang-x.y compilers available, we
+         # don't try them. This could be considered something to improve.
+         paths = {
+-            k: v for k, v in self.PATHS.iteritems()
++            k: v for k, v in self.PATHS.items()
+             if os.path.basename(k) not in ('gcc', 'g++', 'clang', 'clang++')
+         }
+         self.do_toolchain_test(paths, {
+@@ -800,7 +800,7 @@ class OSXToolchainTest(BaseToolchainTest):
+     def test_not_gcc(self):
+         # We won't pick GCC if it's the only thing available.
+         paths = {
+-            k: v for k, v in self.PATHS.iteritems()
++            k: v for k, v in self.PATHS.items()
+             if os.path.basename(k) not in ('clang', 'clang++')
+         }
+         self.do_toolchain_test(paths, {
+@@ -976,7 +976,7 @@ class WindowsToolchainTest(BaseToolchainTest):
+     def test_clang_cl(self):
+         # We'll pick clang-cl if msvc can't be found.
+         paths = {
+-            k: v for k, v in self.PATHS.iteritems()
++            k: v for k, v in self.PATHS.items()
+             if os.path.basename(k) != 'cl'
+         }
+         self.do_toolchain_test(paths, {
+@@ -987,7 +987,7 @@ class WindowsToolchainTest(BaseToolchainTest):
+     def test_gcc(self):
+         # We'll pick GCC if msvc and clang-cl can't be found.
+         paths = {
+-            k: v for k, v in self.PATHS.iteritems()
++            k: v for k, v in self.PATHS.items()
+             if os.path.basename(k) not in ('cl', 'clang-cl')
+         }
+         self.do_toolchain_test(paths, {
+@@ -1006,7 +1006,7 @@ class WindowsToolchainTest(BaseToolchainTest):
+     def test_clang(self):
+         # We'll pick clang if nothing else is found.
+         paths = {
+-            k: v for k, v in self.PATHS.iteritems()
++            k: v for k, v in self.PATHS.items()
+             if os.path.basename(k) not in ('cl', 'clang-cl', 'gcc')
+         }
+         self.do_toolchain_test(paths, {
+diff --git a/python/mozbuild/mozbuild/test/configure/test_toolchain_helpers.py b/python/mozbuild/mozbuild/test/configure/test_toolchain_helpers.py
+index 8ec33a8b7..ba046ed12 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_toolchain_helpers.py
++++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_helpers.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import copy
+ import re
+@@ -10,7 +10,7 @@ import types
+ import unittest
+ 
+ from fnmatch import fnmatch
+-from StringIO import StringIO
++from io import StringIO
+ from textwrap import dedent
+ 
+ from mozunit import (
+@@ -43,7 +43,7 @@ class CompilerPreprocessor(Preprocessor):
+         # Hack around it enough that the configure tests work properly.
+         context = self.context
+         def normalize_numbers(value):
+-            if isinstance(value, types.StringTypes):
++            if isinstance(value, (str,)):
+                 if value[-1:] == 'L' and value[:-1].isdigit():
+                     value = int(value[:-1])
+             return value
+@@ -53,7 +53,7 @@ class CompilerPreprocessor(Preprocessor):
+             return self.HAS_FEATURE.sub(r'\1\2', expr)
+         self.context = self.Context(
+             (normalize_has_feature(k), normalize_numbers(v))
+-            for k, v in context.iteritems()
++            for k, v in context.items()
+         )
+         try:
+             return Preprocessor.do_if(self, normalize_has_feature(expression),
+@@ -95,7 +95,7 @@ class TestCompilerPreprocessor(unittest.TestCase):
+         input.name = 'foo'
+         pp.do_include(input)
+ 
+-        self.assertEquals(pp.out.getvalue(), '1 . 2 . c "D"')
++        self.assertEqual(pp.out.getvalue(), '1 . 2 . c "D"')
+ 
+     def test_condition(self):
+         pp = CompilerPreprocessor({
+@@ -125,7 +125,7 @@ class TestCompilerPreprocessor(unittest.TestCase):
+         input.name = 'foo'
+         pp.do_include(input)
+ 
+-        self.assertEquals('IFDEF_A\nIF_A\nIF_B\nIF_NOT_C\n', pp.out.getvalue())
++        self.assertEqual('IFDEF_A\nIF_A\nIF_B\nIF_NOT_C\n', pp.out.getvalue())
+ 
+ 
+ class FakeCompiler(dict):
+@@ -164,9 +164,9 @@ class FakeCompiler(dict):
+     '''
+     def __init__(self, *definitions):
+         for definition in definitions:
+-            if all(not isinstance(d, dict) for d in definition.itervalues()):
++            if all(not isinstance(d, dict) for d in definition.values()):
+                 definition = {None: definition}
+-            for key, value in definition.iteritems():
++            for key, value in definition.items():
+                 self.setdefault(key, {}).update(value)
+ 
+     def __call__(self, stdin, args):
+@@ -178,14 +178,14 @@ class FakeCompiler(dict):
+             pp = CompilerPreprocessor(self[None])
+ 
+             def apply_defn(defn):
+-                for k, v in defn.iteritems():
++                for k, v in defn.items():
+                     if v is False:
+                         if k in pp.context:
+                             del pp.context[k]
+                     else:
+                         pp.context[k] = v
+ 
+-            for glob, defn in self.iteritems():
++            for glob, defn in self.items():
+                 if glob and not glob.startswith('-') and fnmatch(file, glob):
+                     apply_defn(defn)
+ 
+@@ -216,7 +216,7 @@ class TestFakeCompiler(unittest.TestCase):
+                 'A': '1',
+                 'B': '2',
+             })
+-            self.assertEquals(compiler(None, ['-E', 'file']),
++            self.assertEqual(compiler(None, ['-E', 'file']),
+                               (0, '1 2 C', ''))
+ 
+             compiler = FakeCompiler({
+@@ -238,25 +238,25 @@ class TestFakeCompiler(unittest.TestCase):
+                     'B': '42',
+                 },
+             })
+-            self.assertEquals(compiler(None, ['-E', 'file']),
++            self.assertEqual(compiler(None, ['-E', 'file']),
+                               (0, '1 2 C', ''))
+-            self.assertEquals(compiler(None, ['-E', '-foo', 'file']),
++            self.assertEqual(compiler(None, ['-E', '-foo', 'file']),
+                               (0, '1 2 foo', ''))
+-            self.assertEquals(compiler(None, ['-E', '-bar', 'file']),
++            self.assertEqual(compiler(None, ['-E', '-bar', 'file']),
+                               (0, '1 bar bar', ''))
+-            self.assertEquals(compiler(None, ['-E', '-qux', 'file']),
++            self.assertEqual(compiler(None, ['-E', '-qux', 'file']),
+                               (0, '1 B C', ''))
+-            self.assertEquals(compiler(None, ['-E', '-foo', '-bar', 'file']),
++            self.assertEqual(compiler(None, ['-E', '-foo', '-bar', 'file']),
+                               (0, '1 bar bar', ''))
+-            self.assertEquals(compiler(None, ['-E', '-bar', '-foo', 'file']),
++            self.assertEqual(compiler(None, ['-E', '-bar', '-foo', 'file']),
+                               (0, '1 bar foo', ''))
+-            self.assertEquals(compiler(None, ['-E', '-bar', '-qux', 'file']),
++            self.assertEqual(compiler(None, ['-E', '-bar', '-qux', 'file']),
+                               (0, '1 B bar', ''))
+-            self.assertEquals(compiler(None, ['-E', '-qux', '-bar', 'file']),
++            self.assertEqual(compiler(None, ['-E', '-qux', '-bar', 'file']),
+                               (0, '1 bar bar', ''))
+-            self.assertEquals(compiler(None, ['-E', 'file.c']),
++            self.assertEqual(compiler(None, ['-E', 'file.c']),
+                               (0, '1 42 C', ''))
+-            self.assertEquals(compiler(None, ['-E', '-bar', 'file.c']),
++            self.assertEqual(compiler(None, ['-E', '-bar', 'file.c']),
+                               (0, '1 bar bar', ''))
+ 
+     def test_multiple_definitions(self):
+@@ -267,7 +267,7 @@ class TestFakeCompiler(unittest.TestCase):
+             'C': 3,
+         })
+ 
+-        self.assertEquals(compiler, {
++        self.assertEqual(compiler, {
+             None: {
+                 'A': 1,
+                 'B': 2,
+@@ -282,7 +282,7 @@ class TestFakeCompiler(unittest.TestCase):
+             'C': 3,
+         })
+ 
+-        self.assertEquals(compiler, {
++        self.assertEqual(compiler, {
+             None: {
+                 'A': 1,
+                 'B': 4,
+@@ -302,7 +302,7 @@ class TestFakeCompiler(unittest.TestCase):
+             },
+         })
+ 
+-        self.assertEquals(compiler, {
++        self.assertEqual(compiler, {
+             None: {
+                 'A': 1,
+                 'B': 4,
+@@ -330,7 +330,7 @@ class TestFakeCompiler(unittest.TestCase):
+             },
+         })
+ 
+-        self.assertEquals(compiler, {
++        self.assertEqual(compiler, {
+             None: {
+                 'A': 1,
+                 'B': 2,
+@@ -370,7 +370,7 @@ class CompilerResult(ReadOnlyNamespace):
+     def __add__(self, other):
+         assert isinstance(other, dict)
+         result = copy.deepcopy(self.__dict__)
+-        for k, v in other.iteritems():
++        for k, v in other.items():
+             if k == 'flags':
+                 result.setdefault(k, []).extend(v)
+             else:
+@@ -381,7 +381,7 @@ class CompilerResult(ReadOnlyNamespace):
+ class TestCompilerResult(unittest.TestCase):
+     def test_compiler_result(self):
+         result = CompilerResult()
+-        self.assertEquals(result.__dict__, {
++        self.assertEqual(result.__dict__, {
+             'wrapper': [],
+             'compiler': mozpath.abspath(''),
+             'version': '',
+@@ -397,7 +397,7 @@ class TestCompilerResult(unittest.TestCase):
+             language='C',
+             flags=['-std=gnu99'],
+         )
+-        self.assertEquals(result.__dict__, {
++        self.assertEqual(result.__dict__, {
+             'wrapper': [],
+             'compiler': mozpath.abspath('/usr/bin/gcc'),
+             'version': '4.2.1',
+@@ -407,7 +407,7 @@ class TestCompilerResult(unittest.TestCase):
+         })
+ 
+         result2 = result + {'flags': ['-m32']}
+-        self.assertEquals(result2.__dict__, {
++        self.assertEqual(result2.__dict__, {
+             'wrapper': [],
+             'compiler': mozpath.abspath('/usr/bin/gcc'),
+             'version': '4.2.1',
+@@ -416,14 +416,14 @@ class TestCompilerResult(unittest.TestCase):
+             'flags': ['-std=gnu99', '-m32'],
+         })
+         # Original flags are untouched.
+-        self.assertEquals(result.flags, ['-std=gnu99'])
++        self.assertEqual(result.flags, ['-std=gnu99'])
+ 
+         result3 = result + {
+             'compiler': '/usr/bin/gcc-4.7',
+             'version': '4.7.3',
+             'flags': ['-m32'],
+         }
+-        self.assertEquals(result3.__dict__, {
++        self.assertEqual(result3.__dict__, {
+             'wrapper': [],
+             'compiler': mozpath.abspath('/usr/bin/gcc-4.7'),
+             'version': '4.7.3',
+diff --git a/python/mozbuild/mozbuild/test/configure/test_toolkit_moz_configure.py b/python/mozbuild/mozbuild/test/configure/test_toolkit_moz_configure.py
+index ac35d745f..cdd8ece1b 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_toolkit_moz_configure.py
++++ b/python/mozbuild/mozbuild/test/configure/test_toolkit_moz_configure.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import os
+ 
+diff --git a/python/mozbuild/mozbuild/test/configure/test_util.py b/python/mozbuild/mozbuild/test/configure/test_util.py
+index 9f9575fd0..c2db1a628 100644
+--- a/python/mozbuild/mozbuild/test/configure/test_util.py
++++ b/python/mozbuild/mozbuild/test/configure/test_util.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function, unicode_literals
++
+ 
+ import logging
+ import os
+@@ -11,7 +11,7 @@ import textwrap
+ import unittest
+ import sys
+ 
+-from StringIO import StringIO
++from io import StringIO
+ 
+ from mozunit import main
+ from mozpack import path as mozpath
+@@ -434,11 +434,11 @@ class TestLogSubprocessOutput(unittest.TestCase):
+         except SystemExit as e:
+             status = e.code
+ 
+-        self.assertEquals(status, 0)
++        self.assertEqual(status, 0)
+         quote_char = "'"
+         if getpreferredencoding().lower() == 'utf-8':
+             quote_char = '\u00B4'.encode('utf-8')
+-        self.assertEquals(out.getvalue().strip(), quote_char)
++        self.assertEqual(out.getvalue().strip(), quote_char)
+ 
+ 
+ class TestVersion(unittest.TestCase):
+diff --git a/python/mozbuild/mozbuild/testing.py b/python/mozbuild/mozbuild/testing.py
+index 3229c3f77..82d250fab 100644
+--- a/python/mozbuild/mozbuild/testing.py
++++ b/python/mozbuild/mozbuild/testing.py
+@@ -2,9 +2,9 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals
+ 
+-import cPickle as pickle
++
++import pickle as pickle
+ import os
+ import sys
+ 
+@@ -70,7 +70,7 @@ REFTEST_FLAVORS = ('crashtest', 'reftest')
+ WEB_PLATFORM_TESTS_FLAVORS = ('web-platform-tests',)
+ 
+ def all_test_flavors():
+-    return ([v[0] for v in TEST_MANIFESTS.values()] +
++    return ([v[0] for v in list(TEST_MANIFESTS.values())] +
+             list(REFTEST_FLAVORS) +
+             list(WEB_PLATFORM_TESTS_FLAVORS))
+ 
+@@ -210,7 +210,7 @@ def install_test_files(topsrcdir, topobjdir, tests_root, test_objs):
+     only a few tests need to be run.
+     """
+     flavor_info = {flavor: (root, prefix, install)
+-                   for (flavor, root, prefix, install) in TEST_MANIFESTS.values()}
++                   for (flavor, root, prefix, install) in list(TEST_MANIFESTS.values())}
+     objdir_dest = mozpath.join(topobjdir, tests_root)
+ 
+     converter = SupportFilesConverter()
+@@ -292,7 +292,7 @@ def read_wpt_manifest(context, paths):
+         paths_file = os.path.join(context.config.topsrcdir, "testing",
+                                   "web-platform", "tests", "tools", "localpaths.py")
+         _globals = {"__file__": paths_file}
+-        execfile(paths_file, _globals)
++        exec(compile(open(paths_file, "rb").read(), paths_file, 'exec'), _globals)
+         import manifest as wptmanifest
+     finally:
+         sys.path = old_path
+diff --git a/python/mozbuild/mozbuild/util.py b/python/mozbuild/mozbuild/util.py
+index 4ea227dc0..79cb15713 100644
+--- a/python/mozbuild/mozbuild/util.py
++++ b/python/mozbuild/mozbuild/util.py
+@@ -5,7 +5,7 @@
+ # This file contains miscellaneous utility functions that don't belong anywhere
+ # in particular.
+ 
+-from __future__ import absolute_import, unicode_literals, print_function
++
+ 
+ import argparse
+ import collections
+@@ -21,6 +21,9 @@ import stat
+ import sys
+ import time
+ import types
++import pprint
++import six
++import subprocess
+ 
+ from collections import (
+     defaultdict,
+@@ -36,7 +39,7 @@ from io import (
+ if sys.version_info[0] == 3:
+     str_type = str
+ else:
+-    str_type = basestring
++    str_type = str
+ 
+ if sys.platform == 'win32':
+     _kernel32 = ctypes.windll.kernel32
+@@ -78,7 +81,7 @@ def hash_file(path, hasher=None):
+     return h.hexdigest()
+ 
+ 
+-class EmptyValue(unicode):
++class EmptyValue(str):
+     """A dummy type that behaves like an empty string and sequence.
+ 
+     This type exists in order to support
+@@ -92,7 +95,7 @@ class EmptyValue(unicode):
+ class ReadOnlyNamespace(object):
+     """A class for objects with immutable attributes set at initialization."""
+     def __init__(self, **kwargs):
+-        for k, v in kwargs.iteritems():
++        for k, v in kwargs.items():
+             super(ReadOnlyNamespace, self).__setattr__(k, v)
+ 
+     def __delattr__(self, key):
+@@ -224,7 +227,7 @@ class FileAvoidWrite(BytesIO):
+         self.mode = mode
+ 
+     def write(self, buf):
+-        if isinstance(buf, unicode):
++        if isinstance(buf, str):
+             buf = buf.encode('utf-8')
+         BytesIO.write(self, buf)
+ 
+@@ -267,6 +270,10 @@ class FileAvoidWrite(BytesIO):
+             if 'b' in self.mode:
+                 writemode += 'b'
+             with open(self.name, writemode) as file:
++                if 'b' in self.mode and isinstance(buf, str):
++                    buf = buf.encode('utf-8')
++                elif 'b' not in self.mode and isinstance(buf, bytes):
++                    buf = buf.decode('utf-8')
+                 file.write(buf)
+ 
+         if self._capture_diff:
+@@ -381,7 +388,7 @@ class ListMixin(object):
+     def __add__(self, other):
+         # Allow None and EmptyValue is a special case because it makes undefined
+         # variable references in moz.build behave better.
+-        other = [] if isinstance(other, (types.NoneType, EmptyValue)) else other
++        other = [] if isinstance(other, (type(None), EmptyValue)) else other
+         if not isinstance(other, list):
+             raise ValueError('Only lists can be appended to lists.')
+ 
+@@ -390,7 +397,7 @@ class ListMixin(object):
+         return new_list
+ 
+     def __iadd__(self, other):
+-        other = [] if isinstance(other, (types.NoneType, EmptyValue)) else other
++        other = [] if isinstance(other, (type(None), EmptyValue)) else other
+         if not isinstance(other, list):
+             raise ValueError('Only lists can be appended to lists.')
+ 
+@@ -561,14 +568,14 @@ def FlagsFactory(flags):
+     functions below.
+     """
+     assert isinstance(flags, dict)
+-    assert all(isinstance(v, type) for v in flags.values())
++    assert all(isinstance(v, type) for v in list(flags.values()))
+ 
+     class Flags(object):
+-        __slots__ = flags.keys()
++        __slots__ = list(flags.keys())
+         _flags = flags
+ 
+         def update(self, **kwargs):
+-            for k, v in kwargs.iteritems():
++            for k, v in kwargs.items():
+                 setattr(self, k, v)
+ 
+         def __getattr__(self, name):
+@@ -1006,8 +1013,6 @@ def TypedNamedTuple(name, fields):
+                                     'got %s, expected %s' % (fname,
+                                     type(value), ftype))
+ 
+-            super(TypedTuple, self).__init__(*args, **kwargs)
+-
+     TypedTuple._fields = fields
+ 
+     return TypedTuple
+@@ -1099,14 +1104,14 @@ def group_unified_files(files, unified_prefix, unified_suffix,
+     # issue.  So we do a little dance to filter it out ourselves.
+     dummy_fill_value = ("dummy",)
+     def filter_out_dummy(iterable):
+-        return itertools.ifilter(lambda x: x != dummy_fill_value,
++        return filter(lambda x: x != dummy_fill_value,
+                                  iterable)
+ 
+     # From the itertools documentation, slightly modified:
+     def grouper(n, iterable):
+         "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
+         args = [iter(iterable)] * n
+-        return itertools.izip_longest(fillvalue=dummy_fill_value, *args)
++        return itertools.zip_longest(fillvalue=dummy_fill_value, *args)
+ 
+     for i, unified_group in enumerate(grouper(files_per_unified_file,
+                                               files)):
+@@ -1123,7 +1128,7 @@ def pair(iterable):
+         [(1,2), (3,4), (5,6)]
+     '''
+     i = iter(iterable)
+-    return itertools.izip_longest(i, i)
++    return itertools.zip_longest(i, i)
+ 
+ 
+ VARIABLES_RE = re.compile('\$\((\w+)\)')
+@@ -1141,7 +1146,7 @@ def expand_variables(s, variables):
+         value = variables.get(name)
+         if not value:
+             continue
+-        if not isinstance(value, types.StringTypes):
++        if not isinstance(value, (str,)):
+             value = ' '.join(value)
+         result += value
+     return result
+@@ -1168,7 +1173,7 @@ class EnumStringComparisonError(Exception):
+     pass
+ 
+ 
+-class EnumString(unicode):
++class EnumString(str):
+     '''A string type that only can have a limited set of values, similarly to
+     an Enum, and can only be compared against that set of values.
+ 
+@@ -1185,8 +1190,8 @@ class EnumString(unicode):
+     def __eq__(self, other):
+         if other not in self.POSSIBLE_VALUES:
+             raise EnumStringComparisonError(
+-                'Can only compare with %s'
+-                % ', '.join("'%s'" % v for v in self.POSSIBLE_VALUES))
++                '%s is not in %s'
++                % (other, ', '.join("'%s'" % v for v in self.POSSIBLE_VALUES)))
+         return super(EnumString, self).__eq__(other)
+ 
+     def __ne__(self, other):
+@@ -1204,14 +1209,14 @@ def _escape_char(c):
+     # quoting could be done with either ' or ".
+     if c == "'":
+         return "\\'"
+-    return unicode(c.encode('unicode_escape'))
++    return str(c.encode('unicode_escape'))
+ 
+ # Mapping table between raw characters below \x80 and their escaped
+ # counterpart, when they differ
+ _INDENTED_REPR_TABLE = {
+     c: e
+     for c, e in map(lambda x: (x, _escape_char(x)),
+-                    map(unichr, range(128)))
++                    map(chr, range(128)))
+     if c != e
+ }
+ # Regexp matching all characters to escape.
+@@ -1219,7 +1224,33 @@ _INDENTED_REPR_RE = re.compile(
+     '([' + ''.join(_INDENTED_REPR_TABLE.values()) + ']+)')
+ 
+ 
++# Stolen from gecko master [1]
++# [1] https://github.com/mozilla/gecko-dev/blob/4165a2e843c494bfb3e35d8a1fbf9c61209e3675/python/mozbuild/mozbuild/util.py#L1286
++
++# The default PrettyPrinter has some issues with UTF-8, so we need to override
++# some stuff here.
++class _PrettyPrinter(pprint.PrettyPrinter):
++    def format(self, object, context, maxlevels, level):
++        if not (isinstance(object, six.text_type) or
++                isinstance(object, six.binary_type)):
++            return super(_PrettyPrinter, self).format(
++                object, context, maxlevels, level)
++        # This is super hacky and weird, but the output of 'repr' actually
++        # varies based on the default I/O encoding of the process, which isn't
++        # necessarily utf-8. Instead we open a new shell and ask what the repr
++        # WOULD be assuming the default encoding is utf-8. If you can come up
++        # with a better way of doing this without simply re-implementing the
++        # logic of "repr", please replace this.
++        env = dict(os.environ)
++        env['PYTHONIOENCODING'] = 'utf-8'
++        ret = six.ensure_text(subprocess.check_output(
++            [sys.executable], input='print(repr(%s))' % repr(object),
++            universal_newlines=True, env=env, encoding='utf-8')).strip()
++        return (ret, True, False)
++
+ def indented_repr(o, indent=4):
++    return _PrettyPrinter(indent=indent).pformat(o)
++
+     '''Similar to repr(), but returns an indented representation of the object
+ 
+     One notable difference with repr is that the returned representation
+@@ -1242,7 +1273,7 @@ def indented_repr(o, indent=4):
+         elif isinstance(o, bytes):
+             yield 'b'
+             yield repr(o)
+-        elif isinstance(o, unicode):
++        elif isinstance(o, str):
+             yield "'"
+             # We want a readable string (non escaped unicode), but some
+             # special characters need escaping (e.g. \n, \t, etc.)
+@@ -1272,11 +1303,11 @@ def encode(obj, encoding='utf-8'):
+     if isinstance(obj, dict):
+         return {
+             encode(k, encoding): encode(v, encoding)
+-            for k, v in obj.iteritems()
++            for k, v in obj.items()
+         }
+     if isinstance(obj, bytes):
+         return obj
+-    if isinstance(obj, unicode):
++    if isinstance(obj, str):
+         return obj.encode(encoding)
+     if isinstance(obj, Iterable):
+         return [encode(i, encoding) for i in obj]
+diff --git a/python/mozbuild/mozbuild/virtualenv.py b/python/mozbuild/mozbuild/virtualenv.py
+index 38d06d71d..c67c046f3 100644
+--- a/python/mozbuild/mozbuild/virtualenv.py
++++ b/python/mozbuild/mozbuild/virtualenv.py
+@@ -531,9 +531,9 @@ def verify_python_version(log_handle):
+ 
+     our = LooseVersion('%d.%d.%d' % (major, minor, micro))
+ 
+-    if major != MINIMUM_PYTHON_MAJOR or our < MINIMUM_PYTHON_VERSION:
+-        log_handle.write('Python %s or greater (but not Python 3) is '
+-            'required to build. ' % MINIMUM_PYTHON_VERSION)
++    if our < MINIMUM_PYTHON_VERSION:
++        log_handle.write('Python %s or greater is required to build. '
++            % MINIMUM_PYTHON_VERSION)
+         log_handle.write('You are running Python %s.\n' % our)
+ 
+         if os.name in ('nt', 'ce'):
+diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpack/chrome/manifest.py
+index c91b99cf1..02eac0dbb 100644
+--- a/python/mozbuild/mozpack/chrome/manifest.py
++++ b/python/mozbuild/mozpack/chrome/manifest.py
+@@ -2,11 +2,11 @@
+ # 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/.
+ 
+-from __future__ import absolute_import
++
+ 
+ import re
+ import os
+-from urlparse import urlparse
++from urllib.parse import urlparse
+ import mozpack.path as mozpath
+ from mozpack.chrome.flags import Flags
+ from mozpack.errors import errors
+@@ -316,7 +316,7 @@ class ManifestContract(ManifestEntry):
+         return self.serialize(self.contractID, self.cid)
+ 
+ # All manifest classes by their type name.
+-MANIFESTS_TYPES = dict([(c.type, c) for c in globals().values()
++MANIFESTS_TYPES = dict([(c.type, c) for c in list(globals().values())
+                        if type(c) == type and issubclass(c, ManifestEntry)
+                        and hasattr(c, 'type') and c.type])
+ 
+diff --git a/python/mozbuild/mozpack/copier.py b/python/mozbuild/mozpack/copier.py
+index 1e521e52b..43ed9be4a 100644
+--- a/python/mozbuild/mozpack/copier.py
++++ b/python/mozbuild/mozpack/copier.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import
++
+ 
+ import os
+ import stat
+@@ -113,7 +113,7 @@ class FileRegistry(object):
+         '''
+         Return all paths stored in the container, in the order they were added.
+         '''
+-        return self._files.keys()
++        return list(self._files.keys())
+ 
+     def __len__(self):
+         '''
+@@ -146,7 +146,7 @@ class FileRegistry(object):
+             for path, file in registry:
+                 (...)
+         '''
+-        return self._files.iteritems()
++        return iter(self._files.items())
+ 
+     def required_directories(self):
+         '''
+@@ -155,7 +155,7 @@ class FileRegistry(object):
+         unspecified (virtual) root directory (and do not include said root
+         directory).
+         '''
+-        return set(k for k, v in self._required_directories.items() if v > 0)
++        return set(k for k, v in list(self._required_directories.items()) if v > 0)
+ 
+     def output_to_inputs_tree(self):
+         '''
+@@ -295,7 +295,7 @@ class FileCopier(FileRegistry):
+ 
+         Returns a FileCopyResult that details what changed.
+         '''
+-        assert isinstance(destination, basestring)
++        assert isinstance(destination, str)
+         assert not os.path.exists(destination) or os.path.isdir(destination)
+ 
+         result = FileCopyResult()
+@@ -563,7 +563,7 @@ class Jarrer(FileRegistry, BaseFile):
+             def exists(self):
+                 return self.deflater is not None
+ 
+-        if isinstance(dest, basestring):
++        if isinstance(dest, str):
+             dest = Dest(dest)
+         assert isinstance(dest, Dest)
+ 
+diff --git a/python/mozbuild/mozpack/files.py b/python/mozbuild/mozpack/files.py
+index 8ce353375..bf35e39b8 100644
+--- a/python/mozbuild/mozpack/files.py
++++ b/python/mozbuild/mozpack/files.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import
++
+ 
+ import errno
+ import os
+@@ -57,7 +57,7 @@ else:
+ 
+     def _copyfile(src, dest):
+         # False indicates `dest` should be overwritten if it exists already.
+-        if isinstance(src, unicode) and isinstance(dest, unicode):
++        if isinstance(src, str) and isinstance(dest, str):
+             _CopyFileW(src, dest, False)
+         elif isinstance(src, str) and isinstance(dest, str):
+             _CopyFileA(src, dest, False)
+@@ -164,7 +164,7 @@ class BaseFile(object):
+         disabled when skip_if_older is False.
+         Returns whether a copy was actually performed (True) or not (False).
+         '''
+-        if isinstance(dest, basestring):
++        if isinstance(dest, str):
+             dest = Dest(dest)
+         else:
+             assert isinstance(dest, Dest)
+@@ -278,11 +278,11 @@ class ExecutableFile(File):
+     '''
+     def copy(self, dest, skip_if_older=True):
+         real_dest = dest
+-        if not isinstance(dest, basestring):
++        if not isinstance(dest, str):
+             fd, dest = mkstemp()
+             os.close(fd)
+             os.remove(dest)
+-        assert isinstance(dest, basestring)
++        assert isinstance(dest, str)
+         # If File.copy didn't actually copy because dest is newer, check the
+         # file sizes. If dest is smaller, it means it is already stripped and
+         # elfhacked, so we can skip.
+@@ -319,7 +319,7 @@ class AbsoluteSymlinkFile(File):
+         File.__init__(self, path)
+ 
+     def copy(self, dest, skip_if_older=True):
+-        assert isinstance(dest, basestring)
++        assert isinstance(dest, str)
+ 
+         # The logic in this function is complicated by the fact that symlinks
+         # aren't universally supported. So, where symlinks aren't supported, we
+@@ -410,7 +410,7 @@ class HardlinkFile(File):
+     '''
+ 
+     def copy(self, dest, skip_if_older=True):
+-        assert isinstance(dest, basestring)
++        assert isinstance(dest, str)
+ 
+         if not hasattr(os, 'link'):
+             return super(HardlinkFile, self).copy(
+@@ -471,7 +471,7 @@ class ExistingFile(BaseFile):
+         self.required = required
+ 
+     def copy(self, dest, skip_if_older=True):
+-        if isinstance(dest, basestring):
++        if isinstance(dest, str):
+             dest = Dest(dest)
+         else:
+             assert isinstance(dest, Dest)
+@@ -517,7 +517,7 @@ class PreprocessedFile(BaseFile):
+         '''
+         Invokes the preprocessor to create the destination file.
+         '''
+-        if isinstance(dest, basestring):
++        if isinstance(dest, str):
+             dest = Dest(dest)
+         else:
+             assert isinstance(dest, Dest)
+@@ -657,7 +657,7 @@ class XPTFile(GeneratedFile):
+         the individual XPTs to link.
+         skip_if_older is ignored.
+         '''
+-        if isinstance(dest, basestring):
++        if isinstance(dest, str):
+             dest = Dest(dest)
+         assert isinstance(dest, Dest)
+ 
+@@ -1108,7 +1108,7 @@ class ComposedFinder(BaseFinder):
+         from mozpack.copier import FileRegistry
+         self.files = FileRegistry()
+ 
+-        for base, finder in sorted(finders.iteritems()):
++        for base, finder in sorted(finders.items()):
+             if self.files.contains(base):
+                 self.files.remove(base)
+             for p, f in finder.find(''):
+diff --git a/python/mozbuild/mozpack/manifests.py b/python/mozbuild/mozpack/manifests.py
+index 27c66634b..f79b40086 100644
+--- a/python/mozbuild/mozpack/manifests.py
++++ b/python/mozbuild/mozpack/manifests.py
+@@ -2,8 +2,6 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, unicode_literals
+-
+ from contextlib import contextmanager
+ import json
+ 
+@@ -116,7 +114,7 @@ class InstallManifest(object):
+         self._source_files = set()
+ 
+         if path or fileobj:
+-            with _auto_fileobj(path, fileobj, 'rb') as fh:
++            with _auto_fileobj(path, fileobj, 'r') as fh:
+                 self._source_files.add(fh.name)
+                 self._load_from_fileobj(fh)
+ 
+@@ -175,7 +173,7 @@ class InstallManifest(object):
+                 dest, content = fields[1:]
+ 
+                 self.add_content(
+-                    self._decode_field_entry(content).encode('utf-8'), dest)
++                    self._decode_field_entry(content), dest)
+                 continue
+ 
+             # Don't fail for non-actionable items, allowing
+@@ -228,7 +226,7 @@ class InstallManifest(object):
+ 
+         It is an error if both are specified.
+         """
+-        with _auto_fileobj(path, fileobj, 'wb') as fh:
++        with _auto_fileobj(path, fileobj, 'w') as fh:
+             fh.write('%d\n' % self.CURRENT_VERSION)
+ 
+             for dest in sorted(self._dests):
+@@ -242,13 +240,11 @@ class InstallManifest(object):
+                     for path in paths:
+                         source = mozpath.join(base, path)
+                         parts = ['%d' % type, mozpath.join(dest, path), source]
+-                        fh.write('%s\n' % self.FIELD_SEPARATOR.join(
+-                            p.encode('utf-8') for p in parts))
++                        fh.write('%s\n' % self.FIELD_SEPARATOR.join(parts))
+                 else:
+                     parts = ['%d' % entry[0], dest]
+                     parts.extend(entry[1:])
+-                    fh.write('%s\n' % self.FIELD_SEPARATOR.join(
+-                        p.encode('utf-8') for p in parts))
++                    fh.write('%s\n' % self.FIELD_SEPARATOR.join(parts))
+ 
+     def add_link(self, source, dest):
+         """Add a link to this manifest.
+@@ -439,7 +435,7 @@ class InstallManifest(object):
+             if install_type == self.CONTENT:
+                 # GeneratedFile expect the buffer interface, which the unicode
+                 # type doesn't have, so encode to a str.
+-                content = self._decode_field_entry(entry[1]).encode('utf-8')
++                content = self._decode_field_entry(entry[1])
+                 registry.add(dest, GeneratedFile(content))
+                 continue
+ 
+diff --git a/python/mozbuild/mozpack/mozjar.py b/python/mozbuild/mozpack/mozjar.py
+index a723fd2c0..0b04d233c 100644
+--- a/python/mozbuild/mozpack/mozjar.py
++++ b/python/mozbuild/mozpack/mozjar.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import
++
+ 
+ from io import BytesIO
+ import struct
+@@ -14,9 +14,10 @@ from zipfile import (
+     ZIP_DEFLATED,
+ )
+ from collections import OrderedDict
+-from urlparse import urlparse, ParseResult
++from urllib.parse import urlparse, ParseResult
+ import mozpack.path as mozpath
+ from mozbuild.util import memoize
++from functools import reduce
+ 
+ 
+ JAR_STORED = ZIP_STORED
+@@ -72,7 +73,7 @@ class JarStruct(object):
+         an instance with empty fields.
+         '''
+         assert self.MAGIC and isinstance(self.STRUCT, OrderedDict)
+-        self.size_fields = set(t for t in self.STRUCT.itervalues()
++        self.size_fields = set(t for t in self.STRUCT.values()
+                                if not t in JarStruct.TYPE_MAPPING)
+         self._values = {}
+         if data:
+@@ -94,7 +95,7 @@ class JarStruct(object):
+         # For all fields used as other fields sizes, keep track of their value
+         # separately.
+         sizes = dict((t, 0) for t in self.size_fields)
+-        for name, t in self.STRUCT.iteritems():
++        for name, t in self.STRUCT.items():
+             if t in JarStruct.TYPE_MAPPING:
+                 value, size = JarStruct.get_data(t, data[offset:])
+             else:
+@@ -113,7 +114,7 @@ class JarStruct(object):
+         Initialize an instance with empty fields.
+         '''
+         self.signature = self.MAGIC
+-        for name, t in self.STRUCT.iteritems():
++        for name, t in self.STRUCT.items():
+             if name in self.size_fields:
+                 continue
+             self._values[name] = 0 if t in JarStruct.TYPE_MAPPING else ''
+@@ -138,9 +139,9 @@ class JarStruct(object):
+         from self.STRUCT.
+         '''
+         serialized = struct.pack('<I', self.signature)
+-        sizes = dict((t, name) for name, t in self.STRUCT.iteritems()
++        sizes = dict((t, name) for name, t in self.STRUCT.items()
+                      if not t in JarStruct.TYPE_MAPPING)
+-        for name, t in self.STRUCT.iteritems():
++        for name, t in self.STRUCT.items():
+             if t in JarStruct.TYPE_MAPPING:
+                 format, size = JarStruct.TYPE_MAPPING[t]
+                 if name in sizes:
+@@ -159,7 +160,7 @@ class JarStruct(object):
+         variable length fields.
+         '''
+         size = JarStruct.TYPE_MAPPING['uint32'][1]
+-        for name, type in self.STRUCT.iteritems():
++        for name, type in self.STRUCT.items():
+             if type in JarStruct.TYPE_MAPPING:
+                 size += JarStruct.TYPE_MAPPING[type][1]
+             else:
+@@ -180,7 +181,7 @@ class JarStruct(object):
+         return key in self._values
+ 
+     def __iter__(self):
+-        return self._values.iteritems()
++        return iter(self._values.items())
+ 
+     def __repr__(self):
+         return "<%s %s>" % (self.__class__.__name__,
+@@ -374,7 +375,7 @@ class JarReader(object):
+         entries = self.entries
+         if not entries:
+             return JAR_STORED
+-        return max(f['compression'] for f in entries.itervalues())
++        return max(f['compression'] for f in entries.values())
+ 
+     @property
+     def entries(self):
+@@ -390,7 +391,7 @@ class JarReader(object):
+             preload = JarStruct.get_data('uint32', self._data)[0]
+         entries = OrderedDict()
+         offset = self._cdir_end['cdir_offset']
+-        for e in xrange(self._cdir_end['cdir_entries']):
++        for e in range(self._cdir_end['cdir_entries']):
+             entry = JarCdirEntry(self._data[offset:])
+             offset += entry.size
+             # Creator host system. 0 is MSDOS, 3 is Unix
+@@ -452,7 +453,7 @@ class JarReader(object):
+             for file in jarReader:
+                 ...
+         '''
+-        for entry in self.entries.itervalues():
++        for entry in self.entries.values():
+             yield self._getreader(entry)
+ 
+     def __getitem__(self, name):
+@@ -547,7 +548,7 @@ class JarWriter(object):
+         headers = {}
+         preload_size = 0
+         # Prepare central directory entries
+-        for entry, content in self._contents.itervalues():
++        for entry, content in self._contents.values():
+             header = JarLocalFileHeader()
+             for name in entry.STRUCT:
+                 if name in header:
+@@ -562,7 +563,7 @@ class JarWriter(object):
+         end['disk_entries'] = len(self._contents)
+         end['cdir_entries'] = end['disk_entries']
+         end['cdir_size'] = reduce(lambda x, y: x + y[0].size,
+-                                  self._contents.values(), 0)
++                                  list(self._contents.values()), 0)
+         # On optimized archives, store the preloaded size and the central
+         # directory entries, followed by the first end of central directory.
+         if self._optimize:
+@@ -571,18 +572,18 @@ class JarWriter(object):
+             if preload_size:
+                 preload_size += offset
+             self._data.write(struct.pack('<I', preload_size))
+-            for entry, _ in self._contents.itervalues():
++            for entry, _ in self._contents.values():
+                 entry['offset'] += offset
+                 self._data.write(entry.serialize())
+             self._data.write(end.serialize())
+         # Store local file entries followed by compressed data
+-        for entry, content in self._contents.itervalues():
++        for entry, content in self._contents.values():
+             self._data.write(headers[entry].serialize())
+             self._data.write(content)
+         # On non optimized archives, store the central directory entries.
+         if not self._optimize:
+             end['cdir_offset'] = offset
+-            for entry, _ in self._contents.itervalues():
++            for entry, _ in self._contents.values():
+                 self._data.write(entry.serialize())
+         # Store the end of central directory.
+         self._data.write(end.serialize())
+@@ -622,7 +623,7 @@ class JarWriter(object):
+             deflater = data
+         else:
+             deflater = Deflater(compress, compress_level=self._compress_level)
+-            if isinstance(data, basestring):
++            if isinstance(data, str):
+                 deflater.write(data)
+             elif hasattr(data, 'read'):
+                 if hasattr(data, 'seek'):
+diff --git a/testing/mozbase/manifestparser/manifestparser/ini.py b/testing/mozbase/manifestparser/manifestparser/ini.py
+index e5ba249c1..c141a18b7 100644
+--- a/testing/mozbase/manifestparser/manifestparser/ini.py
++++ b/testing/mozbase/manifestparser/manifestparser/ini.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import
++
+ 
+ import os
+ import sys
+@@ -12,7 +12,7 @@ __all__ = ['read_ini', 'combine_fields']
+ 
+ class IniParseError(Exception):
+     def __init__(self, fp, linenum, msg):
+-        if isinstance(fp, basestring):
++        if isinstance(fp, str):
+             path = fp
+         elif hasattr(fp, 'name'):
+             path = fp.name
+@@ -43,12 +43,15 @@ def read_ini(fp, variables=None, default='DEFAULT', defaults_only=False,
+     sections = []
+     key = value = None
+     section_names = set()
+-    if isinstance(fp, basestring):
++    if isinstance(fp, str):
+         fp = file(fp)
+ 
+     # read the lines
+     for (linenum, line) in enumerate(fp.read().splitlines(), start=1):
+ 
++        if isinstance(line, bytes):
++           line = line.decode('utf-8')
++
+         stripped = line.strip()
+ 
+         # ignore blank lines
+@@ -66,7 +69,7 @@ def read_ini(fp, variables=None, default='DEFAULT', defaults_only=False,
+         inline_prefixes = {p: -1 for p in comments}
+         while comment_start == sys.maxsize and inline_prefixes:
+             next_prefixes = {}
+-            for prefix, index in inline_prefixes.items():
++            for prefix, index in list(inline_prefixes.items()):
+                 index = line.find(prefix, index+1)
+                 if index == -1:
+                     continue
+@@ -163,7 +166,7 @@ def combine_fields(global_vars, local_vars):
+         'support-files': '%s %s',
+     }
+     final_mapping = global_vars.copy()
+-    for field_name, value in local_vars.items():
++    for field_name, value in list(local_vars.items()):
+         if field_name not in field_patterns or field_name not in global_vars:
+             final_mapping[field_name] = value
+             continue
+diff --git a/testing/mozbase/manifestparser/manifestparser/manifestparser.py b/testing/mozbase/manifestparser/manifestparser/manifestparser.py
+index 921369fd2..5b2f4c453 100755
+--- a/testing/mozbase/manifestparser/manifestparser/manifestparser.py
++++ b/testing/mozbase/manifestparser/manifestparser/manifestparser.py
+@@ -2,9 +2,9 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function
+ 
+-from StringIO import StringIO
++
++from io import StringIO
+ import json
+ import fnmatch
+ import os
+@@ -23,7 +23,7 @@ from .filters import (
+ __all__ = ['ManifestParser', 'TestManifest', 'convert']
+ 
+ relpath = os.path.relpath
+-string = (basestring,)
++string = (str,)
+ 
+ 
+ # path normalization
+@@ -195,7 +195,7 @@ class ManifestParser(object):
+ 
+             # otherwise an item
+             # apply ancestor defaults, while maintaining current file priority
+-            data = dict(self._ancestor_defaults.items() + data.items())
++            data = dict(list(self._ancestor_defaults.items()) + list(data.items()))
+ 
+             test = data
+             test['name'] = section
+@@ -323,19 +323,19 @@ class ManifestParser(object):
+         # make some check functions
+         if inverse:
+             def has_tags(test):
+-                return not tags.intersection(test.keys())
++                return not tags.intersection(list(test.keys()))
+ 
+             def dict_query(test):
+-                for key, value in kwargs.items():
++                for key, value in list(kwargs.items()):
+                     if test.get(key) == value:
+                         return False
+                 return True
+         else:
+             def has_tags(test):
+-                return tags.issubset(test.keys())
++                return tags.issubset(list(test.keys()))
+ 
+             def dict_query(test):
+-                for key, value in kwargs.items():
++                for key, value in list(kwargs.items()):
+                     if test.get(key) != value:
+                         return False
+                 return True
+@@ -359,7 +359,7 @@ class ManifestParser(object):
+         if tests is None:
+             manifests = []
+             # Make sure to return all the manifests, even ones without tests.
+-            for manifest in self.manifest_defaults.keys():
++            for manifest in list(self.manifest_defaults.keys()):
+                 if isinstance(manifest, tuple):
+                     parentmanifest, manifest = manifest
+                 if manifest not in manifests:
+@@ -409,7 +409,7 @@ class ManifestParser(object):
+         """
+ 
+         files = set([])
+-        if isinstance(directories, basestring):
++        if isinstance(directories, str):
+             directories = [directories]
+ 
+         # get files in directories
+@@ -476,7 +476,7 @@ class ManifestParser(object):
+             print('[DEFAULT]', file=fp)
+             for tag in global_tags:
+                 print('%s =' % tag, file=fp)
+-            for key, value in global_kwargs.items():
++            for key, value in list(global_kwargs.items()):
+                 print('%s = %s' % (key, value), file=fp)
+             print(file=fp)
+ 
+@@ -602,7 +602,7 @@ class ManifestParser(object):
+         internal function to import directories
+         """
+ 
+-        if isinstance(pattern, basestring):
++        if isinstance(pattern, str):
+             patterns = [pattern]
+         else:
+             patterns = pattern
+diff --git a/testing/mozbase/mozinfo/mozinfo/mozinfo.py b/testing/mozbase/mozinfo/mozinfo/mozinfo.py
+index 90c187568..6c5a1f322 100755
+--- a/testing/mozbase/mozinfo/mozinfo/mozinfo.py
++++ b/testing/mozbase/mozinfo/mozinfo/mozinfo.py
+@@ -8,7 +8,7 @@
+ # linux) to the information; I certainly wouldn't want anyone parsing this
+ # information and having behaviour depend on it
+ 
+-from __future__ import absolute_import, print_function
++
+ 
+ import os
+ import platform
+@@ -24,7 +24,7 @@ _os = os
+ class unknown(object):
+     """marker class for unknown information"""
+ 
+-    def __nonzero__(self):
++    def __bool__(self):
+         return False
+ 
+     def __str__(self):
+@@ -96,20 +96,17 @@ elif system.startswith(('MINGW', 'MSYS_NT')):
+     info['os'] = 'win'
+     os_version = version = unknown
+ elif system == "Linux":
+-    if hasattr(platform, "linux_distribution"):
+-        (distro, os_version, codename) = platform.linux_distribution()
+-    else:
+-        (distro, os_version, codename) = platform.dist()
+     if not processor:
+         processor = machine
+-    version = "%s %s" % (distro, os_version)
++
++    distro = 'OE/Yocto'
++    os_version = version = unknown
+ 
+     # Bug in Python 2's `platform` library:
+     # It will return a triple of empty strings if the distribution is not supported.
+     # It works on Python 3. If we don't have an OS version,
+     # the unit tests fail to run.
+     if not distro and not os_version and not codename:
+-        distro = 'lfs'
+         version = release
+         os_version = release
+ 
+@@ -131,7 +128,7 @@ else:
+     os_version = version = unknown
+ 
+ info['version'] = version
+-info['os_version'] = StringVersion(os_version)
++info['os_version'] = version
+ 
+ # processor type and bits
+ if processor in ["i386", "i686"]:
+@@ -188,12 +185,7 @@ def update(new_info):
+                      to a json file containing the new info.
+     """
+ 
+-    PY3 = sys.version_info[0] == 3
+-    if PY3:
+-        string_types = str,
+-    else:
+-        string_types = basestring,
+-    if isinstance(new_info, string_types):
++    if isinstance(new_info, str):
+         # lazy import
+         import mozfile
+         import json
+@@ -295,7 +287,7 @@ def main(args=None):
+ 
+     # print out choices if requested
+     flag = False
+-    for key, value in options.__dict__.items():
++    for key, value in list(options.__dict__.items()):
+         if value is True:
+             print('%s choices: %s' % (key, ' '.join([str(choice)
+                                                      for choice in choices[key]])))
+@@ -304,7 +296,7 @@ def main(args=None):
+         return
+ 
+     # otherwise, print out all info
+-    for key, value in info.items():
++    for key, value in list(info.items()):
+         print('%s: %s' % (key, value))
+ 
+ 
+diff --git a/testing/mozbase/mozprocess/mozprocess/processhandler.py b/testing/mozbase/mozprocess/mozprocess/processhandler.py
+index 3efb650b7..2575a4702 100644
+--- a/testing/mozbase/mozprocess/mozprocess/processhandler.py
++++ b/testing/mozbase/mozprocess/mozprocess/processhandler.py
+@@ -2,7 +2,7 @@
+ # 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/.
+ 
+-from __future__ import absolute_import, print_function
++
+ 
+ import errno
+ import os
+@@ -13,7 +13,7 @@ import threading
+ import time
+ import traceback
+ 
+-from Queue import Queue, Empty
++from queue import Queue, Empty
+ from datetime import datetime
+ 
+ 
+@@ -124,14 +124,14 @@ class ProcessHandlerMixin(object):
+             thread = threading.current_thread().name
+             print("DBG::MOZPROC PID:{} ({}) | {}".format(self.pid, thread, msg))
+ 
+-        def __del__(self, _maxint=sys.maxint):
++        def __del__(self, _maxint=sys.maxsize):
+             if isWin:
+                 handle = getattr(self, '_handle', None)
+                 if handle:
+                     if hasattr(self, '_internal_poll'):
+                         self._internal_poll(_deadstate=_maxint)
+                     else:
+-                        self.poll(_deadstate=sys.maxint)
++                        self.poll(_deadstate=sys.maxsize)
+                 if handle or self._job or self._io_port:
+                     self._cleanup()
+             else:
+@@ -243,7 +243,7 @@ class ProcessHandlerMixin(object):
+                      p2cread, p2cwrite,
+                      c2pread, c2pwrite,
+                      errread, errwrite) = args_tuple
+-                if not isinstance(args, basestring):
++                if not isinstance(args, str):
+                     args = subprocess.list2cmdline(args)
+ 
+                 # Always or in the create new process group
+diff --git a/third_party/python/which/which.py b/third_party/python/which/which.py
+index 9c7d10835..f02b2616e 100644
+--- a/third_party/python/which/which.py
++++ b/third_party/python/which/which.py
+@@ -90,13 +90,13 @@ def _getRegisteredExecutable(exeName):
+     if sys.platform.startswith('win'):
+         if os.path.splitext(exeName)[1].lower() != '.exe':
+             exeName += '.exe'
+-        import _winreg
++        import winreg
+         try:
+             key = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" +\
+                   exeName
+-            value = _winreg.QueryValue(_winreg.HKEY_LOCAL_MACHINE, key)
++            value = winreg.QueryValue(winreg.HKEY_LOCAL_MACHINE, key)
+             registered = (value, "from HKLM\\"+key)
+-        except _winreg.error:
++        except winreg.error:
+             pass
+         if registered and not os.path.exists(registered[0]):
+             registered = None
+@@ -244,7 +244,7 @@ def which(command, path=None, verbose=0, exts=None):
+     If no match is found for the command, a WhichError is raised.
+     """
+     try:
+-        match = whichgen(command, path, verbose, exts).next()
++        match = next(whichgen(command, path, verbose, exts))
+     except StopIteration:
+         raise WhichError("Could not find '%s' on the path." % command)
+     return match
+@@ -281,17 +281,17 @@ def main(argv):
+     try:
+         optlist, args = getopt.getopt(argv[1:], 'haVvqp:e:',
+             ['help', 'all', 'version', 'verbose', 'quiet', 'path=', 'exts='])
+-    except getopt.GetoptError, msg:
++    except getopt.GetoptError as msg:
+         sys.stderr.write("which: error: %s. Your invocation was: %s\n"\
+                          % (msg, argv))
+         sys.stderr.write("Try 'which --help'.\n")
+         return 1
+     for opt, optarg in optlist:
+         if opt in ('-h', '--help'):
+-            print _cmdlnUsage
++            print(_cmdlnUsage)
+             return 0
+         elif opt in ('-V', '--version'):
+-            print "which %s" % __version__
++            print("which %s" % __version__)
+             return 0
+         elif opt in ('-a', '--all'):
+             all = 1
+@@ -319,9 +319,9 @@ def main(argv):
+         nmatches = 0
+         for match in whichgen(arg, path=altpath, verbose=verbose, exts=exts):
+             if verbose:
+-                print "%s (%s)" % match
++                print("%s (%s)" % match)
+             else:
+-                print match
++                print(match)
+             nmatches += 1
+             if not all:
+                 break
+-- 
+2.21.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0002-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0002-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0010-fix-cross-compilation-on-i586-targets.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0003-fix-cross-compilation-on-i586-targets.patch
similarity index 64%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0010-fix-cross-compilation-on-i586-targets.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0003-fix-cross-compilation-on-i586-targets.patch
index 3ac25f6..e0929a8 100644
--- a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0010-fix-cross-compilation-on-i586-targets.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0003-fix-cross-compilation-on-i586-targets.patch
@@ -13,18 +13,26 @@
 
 Rebase to 52.8.1
 Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+Rebase to 60.9.0 (firefox-esr sources)
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
 ---
- js/src/old-configure | 2 +-
+ js/src/old-configure.in | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
---- a/js/src/old-configure
-+++ b/js/src/old-configure
-@@ -3833,7 +3833,7 @@ AS='$(CC)'
+diff --git a/js/src/old-configure.in b/js/src/old-configure.in
+index 3d53ee1..11c3d5a 100644
+--- a/js/src/old-configure.in
++++ b/js/src/old-configure.in
+@@ -405,7 +405,7 @@ AS='$(CC)'
  AS_DASH_C_FLAG='-c'
  MOZ_USER_DIR=".mozilla"
  
 -MOZ_FIX_LINK_PATHS="-Wl,-rpath-link,${DIST}/bin -Wl,-rpath-link,${prefix}/lib"
 +MOZ_FIX_LINK_PATHS="-Wl,-rpath-link,${DIST}/bin"
  
- 
- 
+ dnl Configure platform-specific CPU architecture compiler options.
+ dnl ==============================================================
+-- 
+2.21.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-do-not-create-python-environment.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0004-do-not-create-python-environment.patch
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-do-not-create-python-environment.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0004-do-not-create-python-environment.patch
index a3c1b69..985fc36 100644
--- a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-do-not-create-python-environment.patch
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0004-do-not-create-python-environment.patch
@@ -8,10 +8,12 @@
 Upstream-Status: Inappropriate [oe specific]
 
 Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+Rebase to 60.9.0 (firefox-esr sources)
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
 ---
  build/moz.configure/init.configure | 18 ------------------
  configure.py                       | 10 +++++++++-
- js/src/old-configure               |  4 ++--
  3 files changed, 11 insertions(+), 21 deletions(-)
 
 --- a/build/moz.configure/init.configure
@@ -60,14 +62,3 @@
  from mozbuild.configure import ConfigureSandbox
  from mozbuild.makeutil import Makefile
  from mozbuild.pythonutil import iter_modules_in_path
---- a/js/src/old-configure
-+++ b/js/src/old-configure
-@@ -9974,7 +9974,7 @@ if test "$JS_STANDALONE"; then
-   
- if test "$no_recursion" != yes; then
-   trap '' EXIT
--  if ! $PYTHON $_topsrcdir/build/subconfigure.py --list subconfigures --skip skip_subconfigures; then
-+  if ! PYTHONPATH=$_topsrcdir/python/mozbuild/ $PYTHON $_topsrcdir/build/subconfigure.py --list subconfigures --skip skip_subconfigures; then
-       exit 1
-   fi
- fi
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0002-fix-cannot-find-link.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0005-fix-cannot-find-link.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0002-fix-cannot-find-link.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0005-fix-cannot-find-link.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0003-workaround-autoconf-2.13-detection-failed.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0006-workaround-autoconf-2.13-detection-failed.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0003-workaround-autoconf-2.13-detection-failed.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0006-workaround-autoconf-2.13-detection-failed.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0005-fix-do_compile-failed-on-mips.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0007-fix-do_compile-failed-on-mips.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0005-fix-do_compile-failed-on-mips.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0007-fix-do_compile-failed-on-mips.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/add-riscv-support.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0008-add-riscv-support.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/add-riscv-support.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0008-add-riscv-support.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-mozjs-fix-coredump-caused-by-getenv.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0009-mozjs-fix-coredump-caused-by-getenv.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-mozjs-fix-coredump-caused-by-getenv.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0009-mozjs-fix-coredump-caused-by-getenv.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/format-overflow.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0010-format-overflow.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/format-overflow.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0010-format-overflow.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-To-fix-build-error-on-arm32BE.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0011-To-fix-build-error-on-arm32BE.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-To-fix-build-error-on-arm32BE.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0011-To-fix-build-error-on-arm32BE.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/JS_PUBLIC_API.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0012-JS_PUBLIC_API.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/JS_PUBLIC_API.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0012-JS_PUBLIC_API.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-riscv-Disable-atomic-operations.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0013-riscv-Disable-atomic-operations.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-riscv-Disable-atomic-operations.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0013-riscv-Disable-atomic-operations.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fallback-to-2011-C++-standard.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0014-fallback-to-2011-C++-standard.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/fallback-to-2011-C++-standard.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/0014-fallback-to-2011-C++-standard.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-fix-compiling-failure-on-mips64-n32-bsp.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/mipsarchn32/0001-fix-compiling-failure-on-mips64-n32-bsp.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-fix-compiling-failure-on-mips64-n32-bsp.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/mipsarchn32/0001-fix-compiling-failure-on-mips64-n32-bsp.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0006-support-musl.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/musl/0001-support-musl.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0006-support-musl.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/musl/0001-support-musl.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js-Fix-build-with-musl.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/musl/0002-js-Fix-build-with-musl.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0001-js-Fix-build-with-musl.patch
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs/musl/0002-js-Fix-build-with-musl.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs_60.5.2.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs_60.9.0.bb
similarity index 60%
rename from meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs_60.5.2.bb
rename to meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs_60.9.0.bb
index 389bcac..9466c62 100644
--- a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs_60.5.2.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-extended/mozjs/mozjs_60.9.0.bb
@@ -3,40 +3,45 @@
 LICENSE = "MPL-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=dc9b6ecd19a14a54a628edaaf23733bf"
 
-SRC_URI = "https://dev.gentoo.org/~axs/distfiles/mozjs-60.5.2.tar.bz2 \
-           file://0001-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch \
-           file://0010-fix-cross-compilation-on-i586-targets.patch \
-           file://0001-do-not-create-python-environment.patch \
-           file://0002-fix-cannot-find-link.patch \
-           file://0003-workaround-autoconf-2.13-detection-failed.patch \
-           file://0004-do-not-use-autoconf-2.13-to-refresh-old.configure.patch \
-           file://0005-fix-do_compile-failed-on-mips.patch \
-           file://add-riscv-support.patch \
-           file://0001-mozjs-fix-coredump-caused-by-getenv.patch \
-           file://format-overflow.patch \
-           file://0001-To-fix-build-error-on-arm32BE.patch \
-           file://JS_PUBLIC_API.patch \
-           file://0001-riscv-Disable-atomic-operations.patch \
-           file://fallback-to-2011-C++-standard.patch \
-           "
+SRC_URI = " \
+    https://archive.mozilla.org/pub/firefox/releases/${PV}esr/source/firefox-${PV}esr.source.tar.xz \
+    file://0001-Port-build-to-python3.patch \
+    file://0002-js.pc.in-do-not-include-RequiredDefines.h-for-depend.patch \
+    file://0003-fix-cross-compilation-on-i586-targets.patch \
+    file://0004-do-not-create-python-environment.patch \
+    file://0005-fix-cannot-find-link.patch \
+    file://0006-workaround-autoconf-2.13-detection-failed.patch \
+    file://0007-fix-do_compile-failed-on-mips.patch \
+    file://0008-add-riscv-support.patch \
+    file://0009-mozjs-fix-coredump-caused-by-getenv.patch \
+    file://0010-format-overflow.patch \
+    file://0011-To-fix-build-error-on-arm32BE.patch \
+    file://0012-JS_PUBLIC_API.patch \
+    file://0013-riscv-Disable-atomic-operations.patch \
+    file://0014-fallback-to-2011-C++-standard.patch \
+"
 SRC_URI_append_libc-musl = " \
-           file://0006-support-musl.patch \
-           file://0001-js-Fix-build-with-musl.patch \
-           "
+    file://musl/0001-support-musl.patch \
+    file://musl/0002-js-Fix-build-with-musl.patch \
+"
 SRC_URI_append_mipsarchn32 = " \
-           file://0001-fix-compiling-failure-on-mips64-n32-bsp.patch \
-           "
-SRC_URI[md5sum] = "023ed014e9e93d01620d121bc06a3589"
-SRC_URI[sha256sum] = "f51039c997415fd0f13f8e01966b4a8ff80cbf90deb8b14c18827104a369cc0d"
+    file://mipsarchn32/0001-fix-compiling-failure-on-mips64-n32-bsp.patch \
+"
+SRC_URI[md5sum] = "69a0be9ce695e5dc4941ed0c78ef00c2"
+SRC_URI[sha256sum] = "9f453c8cc5669e46e38f977764d49a36295bf0d023619d9aac782e6bb3e8c53f"
 
-inherit autotools pkgconfig perlnative pythonnative
+S = "${WORKDIR}/firefox-${@d.getVar("PV").replace("esr", "")}"
+
+inherit autotools pkgconfig perlnative python3native
 
 inherit features_check
 CONFLICT_DISTRO_FEATURES_mipsarchn32 = "ld-is-gold"
 
-DEPENDS += "nspr zlib python-six-native python-pytoml-native \
-            python-jsmin-native python-futures-native \
-            python-which-native"
+DEPENDS += " \
+    nspr zlib autoconf-2.13-native \
+    python3-six-native python3-pytoml-native \
+    python3-jsmin-native python3-six \
+"
 
 # Disable null pointer optimization in gcc >= 6
 # https://bugzilla.redhat.com/show_bug.cgi?id=1328045
@@ -51,6 +56,7 @@
     --libdir=${libdir} \
     --disable-tests --disable-strip --disable-optimize \
     --disable-jemalloc \
+    --with-nspr-cflags='-I${STAGING_INCDIR}/nspr -I${STAGING_INCDIR}/nss3' \
     --with-nspr-libs='-lplds4 -lplc4 -lnspr4' \
     ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', "--enable-gold", '--disable-gold', d)} \
 "
@@ -77,42 +83,39 @@
 
 do_configure() {
     export SHELL="/bin/sh"
-    export TMP="${B}"
+    cd ${S}
+    # Add mozjs python-modules necessary
+    PYTHONPATH="${S}/third_party/python/which:${S}/config:${S}/build"
+    for sub_dir in python testing/mozbase; do
+        for module_dir in `ls $sub_dir -1`;do
+            [ $module_dir = "virtualenv" ] && continue
+            if [ -d "${S}/$sub_dir/$module_dir" ];then
+                PYTHONPATH="$PYTHONPATH:${S}/$sub_dir/$module_dir"
+            fi
+        done
+    done
+    echo "$PYTHONPATH" > ${B}/PYTHONPATH
+    export PYTHONPATH=`cat ${B}/PYTHONPATH`
+
+    cd ${S}/js/src
+    autoconf213 --macrodir=${STAGING_DATADIR_NATIVE}/autoconf213 old-configure.in > old-configure
+
+    cd ${B}
     ${S}/js/src/configure ${EXTRA_OECONF}
+
+    # Make standard Makefile checks pass
+    touch ${S}/js/src/configure
+    touch ${B}/config.status
 }
 
 do_compile_prepend() {
     export SHELL="/bin/sh"
-    export S
-    export PYTHONPATH
-    cd ${S}
-    for sub_dir in python testing/mozbase; do
-        for module_dir in `ls $sub_dir -1`;do
-            [ $module_dir = "virtualenv" ] && continue
-            if [ -d "${S}/$sub_dir/$module_dir" ];then
-                PYTHONPATH="$PYTHONPATH:${S}/$sub_dir/$module_dir"
-            fi
-        done
-    done
-    PYTHONPATH="$PYTHONPATH:${S}/config:${S}/build"
-    cd -
+    export PYTHONPATH=`cat ${B}/PYTHONPATH`
 }
 
 do_install_prepend() {
     export SHELL="/bin/sh"
-    export S
-    export PYTHONPATH
-    cd ${S}
-    for sub_dir in python testing/mozbase; do
-        for module_dir in `ls $sub_dir -1`;do
-            [ $module_dir = "virtualenv" ] && continue
-            if [ -d "${S}/$sub_dir/$module_dir" ];then
-                PYTHONPATH="$PYTHONPATH:${S}/$sub_dir/$module_dir"
-            fi
-        done
-    done
-    PYTHONPATH="$PYTHONPATH:${S}/config:${S}/build"
-    cd -
+    export PYTHONPATH=`cat ${B}/PYTHONPATH`
 }
 
 PACKAGES =+ "lib${BPN}"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-support/smem/smem/0001-smem-fix-support-for-source-option-python3.patch b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-support/smem/smem/0001-smem-fix-support-for-source-option-python3.patch
new file mode 100644
index 0000000..5c1be5a
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-support/smem/smem/0001-smem-fix-support-for-source-option-python3.patch
@@ -0,0 +1,53 @@
+From 3ff78f1f00973393d1a7ee4e467a2bacf1c807f3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Wed, 5 Feb 2020 16:14:21 +0000
+Subject: [PATCH] smem: fix support for --source option (python3)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Using --source doesn't work without this patch:
+Traceback (most recent call last):
+  File "./smem", line 727, in <module>
+    showpids()
+  File "./smem", line 299, in showpids
+    showtable(pt.keys(), fields, columns.split(), options.sort or 'pss')
+  File "./smem", line 519, in showtable
+    mt = totalmem()
+  File "./smem", line 118, in totalmem
+    _totalmem = memory()['memtotal']
+  File "./smem", line 193, in memory
+    m = f.match(l)
+TypeError: cannot use a string pattern on a bytes-like object
+
+python3's tarfile returns bytes, whereas all of the rest of
+the code assumes str.
+
+Fix the tarfile usage to convert to str before returning the
+results.
+
+Signed-off-by: André Draszik <git@andred.net>
+Upstream-Status: Inappropriate [upstream wants to support python2 & python3]
+---
+ smem | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/smem b/smem
+index 46a3189..54d40dd 100755
+--- a/smem
++++ b/smem
+@@ -90,9 +90,9 @@ class tardata(procdata):
+                 d,f = ti.name.split('/')
+                 yield d
+     def _read(self, f):
+-        return self.tar.extractfile(f).read()
++        return self.tar.extractfile(f).read().decode()
+     def _readlines(self, f):
+-        return self.tar.extractfile(f).readlines()
++        return [l.decode() for l in self.tar.extractfile(f).readlines()]
+     def piduser(self, p):
+         t = self.tar.getmember("%d" % p)
+         if t.uname:
+-- 
+2.23.0.rc1
+
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-support/smem/smem_1.5.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-support/smem/smem_1.5.bb
new file mode 100644
index 0000000..90db9c3
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-support/smem/smem_1.5.bb
@@ -0,0 +1,43 @@
+SUMMARY = "Report application memory usage in a meaningful way"
+DESCRIPTION = "smem is a tool that can give numerous reports on memory usage on Linux \
+systems. Unlike existing tools, smem can report proportional set size (PSS), \
+which is a more meaningful representation of the amount of memory used by \
+libraries and applications in a virtual memory system."
+HOMEPAGE = "http://www.selenic.com/smem/"
+SECTION = "Applications/System"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+HG_CHANGESET = "98273ce331bb"
+SRC_URI = "https://selenic.com/repo/${BPN}/archive/${HG_CHANGESET}.tar.bz2;downloadfilename=${BP}.tar.bz2 \
+           file://0001-smem-fix-support-for-source-option-python3.patch"
+SRC_URI[md5sum] = "51c3989779360f42b42ef46b2831be3a"
+SRC_URI[sha256sum] = "161131c686a6d9962a0e96912526dd46308e022d62e3f8acaed5a56fda8e08ce"
+
+UPSTREAM_CHECK_URI = "https://selenic.com/repo/smem/tags"
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)"
+
+S = "${WORKDIR}/${BPN}-${HG_CHANGESET}"
+
+do_compile() {
+        ${CC} ${CFLAGS} ${LDFLAGS} smemcap.c -o smemcap
+}
+
+do_install() {
+        install -d ${D}/${bindir}/
+        install -d ${D}/${mandir}/man8
+        install -m 0755 ${S}/smem ${D}${bindir}/
+        sed -i -e '1s,#!.*python.*,#!${USRBINPATH}/env python3,' ${D}${bindir}/smem
+        install -m 0755 ${S}/smemcap ${D}${bindir}/
+        install -m 0644 ${S}/smem.8 ${D}/${mandir}/man8/
+}
+
+RDEPENDS_${PN} = "python3-core python3-compression"
+RRECOMMENDS_${PN} = "python3-matplotlib python3-numpy"
+
+PACKAGE_BEFORE_PN = "smemcap"
+
+FILES_smemcap = "${bindir}/smemcap"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
new file mode 100644
index 0000000..69bc788
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
@@ -0,0 +1 @@
+RDEPENDS_packagegroup-meta-oe-support += "debsums"
diff --git a/meta-openembedded/meta-oe/recipes-support/debsums/debsums_2.2.2.bb b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb
similarity index 98%
rename from meta-openembedded/meta-oe/recipes-support/debsums/debsums_2.2.2.bb
rename to meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb
index 13f20eb..07ab5e6 100644
--- a/meta-openembedded/meta-oe/recipes-support/debsums/debsums_2.2.2.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb
@@ -20,6 +20,8 @@
 
 inherit perlnative gettext
 
+DEPENDS += "po4a-native"
+
 do_install() {
         install -d ${D}/${sysconfdir}/cron.daily ${D}/${sysconfdir}/cron.weekly
         install -d ${D}/${sysconfdir}/cron.monthly ${D}${sbindir} ${D}${bindir}
diff --git a/meta-openembedded/meta-oe/licenses/wxWidgets b/meta-openembedded/meta-oe/licenses/wxWidgets
new file mode 100644
index 0000000..0f6b9d6
--- /dev/null
+++ b/meta-openembedded/meta-oe/licenses/wxWidgets
@@ -0,0 +1,54 @@
+                wxWindows Library Licence, Version 3.1
+                ======================================
+
+  Copyright (c) 1998-2005 Julian Smart, Robert Roebling et al
+
+  Everyone is permitted to copy and distribute verbatim copies
+  of this licence document, but changing it is not allowed.
+
+                       WXWINDOWS LIBRARY LICENCE
+     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  This library is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Library General Public Licence as published by
+  the Free Software Foundation; either version 2 of the Licence, 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 Licence for more details.
+
+  You should have received a copy of the GNU Library General Public Licence
+  along with this software, usually in a file named COPYING.LIB.  If not,
+  write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  Boston, MA 02110-1301 USA.
+
+  EXCEPTION NOTICE
+
+  1. As a special exception, the copyright holders of this library give
+  permission for additional uses of the text contained in this release of
+  the library as licenced under the wxWindows Library Licence, applying
+  either version 3.1 of the Licence, or (at your option) any later version of
+  the Licence as published by the copyright holders of version
+  3.1 of the Licence document.
+
+  2. The exception is that you may use, copy, link, modify and distribute
+  under your own terms, binary object code versions of works based
+  on the Library.
+
+  3. If you copy code from files distributed under the terms of the GNU
+  General Public Licence or the GNU Library General Public Licence into a
+  copy of this library, as this licence permits, the exception does not
+  apply to the code that you add in this way.  To avoid misleading anyone as
+  to the status of such modified files, you must delete this exception
+  notice from such code and/or adjust the licensing conditions notice
+  accordingly.
+
+  4. If you write modifications of your own for this library, it is your
+  choice whether to permit this exception to apply to your modifications.
+  If you do not wish that, you must delete the exception notice from such
+  code and/or adjust the licensing conditions notice accordingly.
+
+
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/analyze-suspend/analyze-suspend_5.5.bb b/meta-openembedded/meta-oe/recipes-benchmark/analyze-suspend/analyze-suspend_5.5.bb
deleted file mode 100644
index bb0aad3..0000000
--- a/meta-openembedded/meta-oe/recipes-benchmark/analyze-suspend/analyze-suspend_5.5.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "Analyze Suspend"
-DESCRIPTION = "analyze-suspend is a tool for system developers to visualize \
-the activity between suspend and resume, allowing them to identify \
-inefficiencies and bottlenecks."
-HOMEPAGE = "https://01.org/suspendresume"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
-
-# Apart from the listed RDEPENDS, analyze-suspend depends on some features
-# provided by the kernel. These options are:
-#   - CONFIG_PM_DEBUG=y
-#   - CONFIG_PM_SLEEP_DEBUG=y
-#   - CONFIG_FTRACE=y
-#   - CONFIG_FUNCTION_TRACER=y
-#   - CONFIG_FUNCTION_GRAPH_TRACER=y
-
-RDEPENDS_${PN} += "python-core python-datetime python-stringold"
-
-SRC_URI = "git://github.com/01org/suspendresume.git;protocol=https"
-SRCREV = "cf59527dc24fdd2f314ae4dcaeb3d68a117988f6"
-
-S = "${WORKDIR}/git"
-
-do_install() {
-    install -Dm 0755 analyze_suspend.py ${D}${bindir}/analyze_suspend.py
-    install -Dm 0644 README ${D}${docdir}/analyze-suspend/README
-}
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/files/python3_shebangs.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/files/python3_shebangs.patch
new file mode 100644
index 0000000..068b021
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/files/python3_shebangs.patch
@@ -0,0 +1,38 @@
+python3: change four shebangs to python3
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+--- a/tools/fio_jsonplus_clat2csv
++++ b/tools/fio_jsonplus_clat2csv
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Note: this script is python2 and python3 compatible.
+ #
+ # fio_jsonplus_clat2csv
+--- a/tools/fiologparser.py
++++ b/tools/fiologparser.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Note: this script is python2 and python 3 compatible.
+ #
+ # fiologparser.py
+--- a/tools/hist/fiologparser_hist.py
++++ b/tools/hist/fiologparser_hist.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ """ 
+     Utility for converting *_clat_hist* files generated by fio into latency statistics.
+     
+--- a/tools/plot/fio2gnuplot
++++ b/tools/plot/fio2gnuplot
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ # Note: this script is python2 and python3 compatible.
+ #
+ #  Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.17.bb b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.17.bb
index e41c21d..759d108 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.17.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.17.bb
@@ -11,7 +11,8 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
 DEPENDS = "libaio zlib coreutils-native"
-RDEPENDS_${PN} = "python bash"
+DEPENDS += "${@bb.utils.contains('MACHINE_FEATURES', 'pmem', 'pmdk', '', d)}"
+RDEPENDS_${PN} = "python3-core bash"
 
 PACKAGECONFIG_NUMA = "numa"
 # ARM does not currently support NUMA
@@ -24,6 +25,7 @@
 SRCREV = "08ce9dc20b8a4e55db7af6d869ddfa49b4a02d03"
 SRC_URI = "git://git.kernel.dk/fio.git \
           file://0001-update-the-interpreter-paths.patch \
+          file://python3_shebangs.patch \
 "
 
 S = "${WORKDIR}/git"
@@ -32,7 +34,7 @@
 DISABLE_STATIC = ""
 
 EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}'"
-EXTRA_OECONF = "--disable-optimizations"
+EXTRA_OECONF = "${@bb.utils.contains('MACHINE_FEATURES', 'x86', '--disable-optimizations', '', d)}"
 
 do_configure() {
     ./configure ${EXTRA_OECONF}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
index 50b553c..6d20bbd 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/glmark2/glmark2_git.bb
@@ -10,13 +10,13 @@
 
 DEPENDS = "libpng jpeg udev"
 
-PV = "20190904+${SRCPV}"
+PV = "20191226+${SRCPV}"
 
 COMPATIBLE_HOST_rpi  = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '.*-linux*', 'null', d)}"
 
 SRC_URI = "git://github.com/glmark2/glmark2.git;protocol=https \
            file://python3.patch"
-SRCREV = "24a1139dcbfd86bd02065316eaa90559e39374e1"
+SRCREV = "72dabc5d72b49c6d45badeb8a941ba4d829b0bd6"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_488.bb b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_489.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_488.bb
rename to meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_489.bb
index 4d9e077..e4b7e4f 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_488.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/iozone3/iozone3_489.bb
@@ -11,8 +11,8 @@
     file://0001-let-system-headers-provide-pread64.patch \
     file://copyright.txt \
 "
-SRC_URI[md5sum] = "d60a69e44cda8436f4f94d860958efc2"
-SRC_URI[sha256sum] = "960265163d93f15f7ad352f726d4837c5dd794fff357c743fdb56cbcf4abca04"
+SRC_URI[md5sum] = "e863281987689cd6d9729e535637b77d"
+SRC_URI[sha256sum] = "6155850d1019f2450dc926bbdb5a24abf423ee3bb928ab1e68569cf60a908584"
 
 UPSTREAM_CHECK_REGEX = "iozone3_(?P<pver>\d+).tar"
 
@@ -25,6 +25,7 @@
 #
 EXTRA_OEMAKE_powerpc = "linux-powerpc CC='${CC}' GCC='${CC}'"
 EXTRA_OEMAKE_powerpc64 = "linux-powerpc64 CC='${CC}' GCC='${CC}'"
+EXTRA_OEMAKE_powerpc64le = "linux-powerpc64 CC='${CC}' GCC='${CC}'"
 EXTRA_OEMAKE_x86-64 = "linux-AMD64 CC='${CC}' GCC='${CC}'"
 EXTRA_OEMAKE_arm = "linux-arm CC='${CC}' GCC='${CC}'"
 EXTRA_OEMAKE = "linux CC='${CC}' GCC='${CC}'"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-huge_page_setup_helper-use-python3-interpreter.patch b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-huge_page_setup_helper-use-python3-interpreter.patch
new file mode 100644
index 0000000..e45f283
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/files/0001-huge_page_setup_helper-use-python3-interpreter.patch
@@ -0,0 +1,29 @@
+From b77c61de4d88d2c6e5d31f4f5a5877cc4c61272e Mon Sep 17 00:00:00 2001
+From: Andrey Zhizhikin <andrey.z@gmail.com>
+Date: Mon, 27 Jan 2020 17:27:55 +0000
+Subject: [PATCH] huge_page_setup_helper: use python3 interpreter
+
+Setup helper script is already prepared to be used with python3, use the
+interpreter explicitly. This removes dependency to python2 and will not
+fail the QA check.
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
+---
+ huge_page_setup_helper.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/huge_page_setup_helper.py b/huge_page_setup_helper.py
+index a9ba2bf..7ba0c92 100755
+--- a/huge_page_setup_helper.py
++++ b/huge_page_setup_helper.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/env python3
+ 
+ #
+ # Tool to set up Linux large page support with minimal effort
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
index e66db1a..4768d7b 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/libhugetlbfs/libhugetlbfs_git.bb
@@ -4,7 +4,7 @@
 LIC_FILES_CHKSUM = "file://LGPL-2.1;md5=2d5025d4aa3495befef8f17206a5b0a1"
 
 DEPENDS = "sysfsutils"
-RDEPENDS_${PN} += "bash python python-io python-lang python-subprocess python-resource"
+RDEPENDS_${PN} += "bash python3-core"
 RDEPENDS_${PN}-tests += "bash python3-core"
 
 PV = "2.22"
@@ -25,6 +25,7 @@
     file://0005-Include-dirent.h-for-ino_t.patch \
     file://0006-include-limits.h-for-PATH_MAX.patch \
     file://0001-tests-add-explicit-permissions-to-open-call.patch \
+    file://0001-huge_page_setup_helper-use-python3-interpreter.patch \
 "
 
 UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
@@ -37,6 +38,7 @@
 LIBHUGETLBFS_ARCH = "${TARGET_ARCH}"
 LIBHUGETLBFS_ARCH_powerpc = "ppc"
 LIBHUGETLBFS_ARCH_powerpc64 = "ppc64"
+LIBHUGETLBFS_ARCH_powerpc64le = "ppc64"
 EXTRA_OEMAKE = "'ARCH=${LIBHUGETLBFS_ARCH}' 'OPT=${CFLAGS}' 'CC=${CC}' ${LIBARGS} BUILDTYPE=NATIVEONLY V=2"
 PARALLEL_MAKE = ""
 CFLAGS += "-fexpensive-optimizations -frename-registers -fomit-frame-pointer -g0"
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_9.2.1.bb b/meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_9.2.1.bb
index 52b341b..4a8e5b5 100644
--- a/meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_9.2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_9.2.1.bb
@@ -11,7 +11,7 @@
 
 S = "${WORKDIR}/phoronix-test-suite"
 
-inherit systemd allarch
+inherit systemd allarch mime mime-xdg
 
 do_install() {
     DESTDIR=${D} ./install-sh ${exec_prefix}
@@ -29,7 +29,7 @@
 SYSTEMD_AUTO_ENABLE = "disable"
 SYSTEMD_SERVICE_${PN} = "phoromatic-client.service phoromatic-server.service"
 
-RDEPENDS_${PN} += "bash python php-cli util-linux-lscpu os-release lsb-release"
+RDEPENDS_${PN} += "bash python3-core php-cli util-linux-lscpu os-release lsb-release"
 
 FILES_${PN} += " \
     ${datadir}/phoronix-test-suite \
diff --git a/meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb
index 09e7384..b89fe67 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/edac-utils/edac-utils_git.bb
@@ -30,6 +30,7 @@
 RDEPENDS_${PN}_aarch64 = "dmidecode"
 RDEPENDS_${PN}_powerpc = "dmidecode"
 RDEPENDS_${PN}_powerpc64 = "dmidecode"
+RDEPENDS_${PN}_powerpc64le = "dmidecode"
 RDEPENDS_${PN}_append = " \
     perl \
     perl-module-file-basename \
diff --git a/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/0001-typecast-enum-conversions-explicitly.patch b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/0001-typecast-enum-conversions-explicitly.patch
new file mode 100644
index 0000000..7ac5365
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom/0001-typecast-enum-conversions-explicitly.patch
@@ -0,0 +1,69 @@
+From 8a236330f2af56bde21e9f69208ea3e59f529f0c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 15 Mar 2020 17:02:30 -0700
+Subject: [PATCH] typecast enum conversions explicitly
+
+clang complains like below
+
+libflashrom.c:191:43: error: implicit conversion from enumeration type 'const enum test_state' to different enumeration type 'enum flashrom_test_state' [-Werror,-Wenum-conversion]
+                        supported_boards[i].working = binfo[i].working;
+                                                    ~ ~~~~~~~~~^~~~~~~
+libflashrom.c:229:46: error: implicit conversion from enumeration type 'const enum test_state' to different enumeration type 'enum flashrom_test_state' [-Werror,-Wenum-conversion]
+                        supported_chipsets[i].status = chipset[i].status;
+                                                     ~ ~~~~~~~~~~~^~~~~~
+
+However these enums are exactly same so they can be typecasted
+
+libflashrom.h
+
+/** @ingroup flashrom-query */
+enum flashrom_test_state {
+        FLASHROM_TESTED_OK  = 0,
+        FLASHROM_TESTED_NT  = 1,
+        FLASHROM_TESTED_BAD = 2,
+        FLASHROM_TESTED_DEP = 3,
+        FLASHROM_TESTED_NA  = 4,
+};
+
+flash.h
+
+enum test_state {
+          OK = 0,
+          NT = 1, /* Not tested */
+          BAD,    /* Known to not work */
+          DEP,    /* Support depends on configuration (e.g. Intel flash descriptor) */
+          NA,     /* Not applicable (e.g. write support on ROM chips) */
+  };
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libflashrom.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libflashrom.c b/libflashrom.c
+index 0dec22e..7956685 100644
+--- a/libflashrom.c
++++ b/libflashrom.c
+@@ -188,7 +188,7 @@ struct flashrom_board_info *flashrom_supported_boards(void)
+ 		for (; i < boards_known_size; ++i) {
+ 			supported_boards[i].vendor = binfo[i].vendor;
+ 			supported_boards[i].name = binfo[i].name;
+-			supported_boards[i].working = binfo[i].working;
++			supported_boards[i].working = (enum flashrom_test_state)binfo[i].working;
+ 		}
+ 	} else {
+ 		msg_gerr("Memory allocation error!\n");
+@@ -226,7 +226,7 @@ struct flashrom_chipset_info *flashrom_supported_chipsets(void)
+ 			supported_chipsets[i].chipset = chipset[i].device_name;
+ 			supported_chipsets[i].vendor_id = chipset[i].vendor_id;
+ 			supported_chipsets[i].chipset_id = chipset[i].device_id;
+-			supported_chipsets[i].status = chipset[i].status;
++			supported_chipsets[i].status = (enum flashrom_test_state)chipset[i].status;
+ 	  }
+ 	} else {
+ 		msg_gerr("Memory allocation error!\n");
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.1.bb b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.2.bb
similarity index 69%
rename from meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.1.bb
rename to meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.2.bb
index 074a1a5..642cec1 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.1.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/flashrom/flashrom_1.2.bb
@@ -6,9 +6,10 @@
 DEPENDS = "pciutils libusb libusb-compat"
 
 SRC_URI = "https://download.flashrom.org/releases/flashrom-v${PV}.tar.bz2 \
+           file://0001-typecast-enum-conversions-explicitly.patch \
            "
-SRC_URI[md5sum] = "91bab6c072e38a493bb4eb673e4fe0d6"
-SRC_URI[sha256sum] = "aeada9c70c22421217c669356180c0deddd0b60876e63d2224e3260b90c14e19"
+SRC_URI[md5sum] = "7f8e4b87087eb12ecee0fcc5445b4956"
+SRC_URI[sha256sum] = "e1f8d95881f5a4365dfe58776ce821dfcee0f138f75d0f44f8a3cd032d9ea42b"
 
 S = "${WORKDIR}/flashrom-v${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.6.0.bb b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.6.0.bb
index 48490e8..890db55 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.6.0.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/lm_sensors/lmsensors_3.6.0.bb
@@ -7,7 +7,6 @@
 DEPENDS = " \
     bison-native \
     flex-native \
-    rrdtool \
     virtual/libiconv \
 "
 
@@ -91,7 +90,7 @@
 RDEPENDS_${PN} += " \
     ${PN}-libsensors \
     ${PN}-sensors \
-    ${PN}-sensord \
+    ${@bb.utils.contains('PACKAGECONFIG', 'sensord', '${PN}-sensord', '', d)} \
     ${PN}-fancontrol \
     ${PN}-sensorsdetect \
     ${PN}-sensorsconfconvert \
diff --git a/meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli/0001-fix-musl-compilation.patch b/meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli/0001-fix-musl-compilation.patch
new file mode 100644
index 0000000..be5d0da
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli/0001-fix-musl-compilation.patch
@@ -0,0 +1,26 @@
+From 0ff7ad2c88e3a47e7e3f6fe68c28a8d2d8a71f1f Mon Sep 17 00:00:00 2001
+From: Neel Chotai <neel@chot.ai>
+Date: Fri, 14 Feb 2020 17:56:23 +0000
+Subject: [PATCH] fix musl compilation
+
+Upstream-Status: Backport [https://github.com/linux-nvme/nvme-cli/commit/0ff7ad2c88e3a47e7e3f6fe68c28a8d2d8a71f1f]
+Signed-off-by: Pierre-Jean Texier <pjtexier@koncepto.io>
+---
+ plugins/micron/micron-nvme.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/plugins/micron/micron-nvme.c b/plugins/micron/micron-nvme.c
+index 8240887..165fcf0 100644
+--- a/plugins/micron/micron-nvme.c
++++ b/plugins/micron/micron-nvme.c
+@@ -13,6 +13,7 @@
+ #include "nvme-print.h"
+ #include "nvme-ioctl.h"
+ #include <sys/ioctl.h>
++#include <limits.h>
+ 
+ #define CREATE_CMD
+ #include "micron-nvme.h"
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli_1.9.bb b/meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli_1.10.1.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli_1.9.bb
rename to meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli_1.10.1.bb
index ea8bc17..4f4bb2d 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli_1.9.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/nvme-cli/nvme-cli_1.10.1.bb
@@ -7,8 +7,10 @@
 DEPENDS = "util-linux"
 PV .= "+git${SRCPV}"
 
-SRC_URI = "git://github.com/linux-nvme/nvme-cli.git"
-SRCREV = "977e7d4cf59c3c7f89e9c093c91f991b07292e45"
+SRC_URI = "git://github.com/linux-nvme/nvme-cli.git \
+           file://0001-fix-musl-compilation.patch \
+"
+SRCREV = "1d84d6ae0c7d7ceff5a73fe174dde8b0005f6108"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb
index 4441175..fd6b85f 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gammu/gammu_1.32.0.bb
@@ -13,7 +13,7 @@
 SRC_URI[md5sum] = "8ea16c6b3cc48097a8e62311fe0e25b9"
 SRC_URI[sha256sum] = "de67caa102aa4c8fbed5300e5a0262e40411c4cc79f4379a8d34eed797968fc3"
 
-inherit distutils cmake gettext
+inherit distutils3 cmake gettext
 
 do_install_append() {
     # these files seem to only be used by symbian and trigger QA warnings
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio/0001-filter-Rename-some-variables-to-tr_stdxxx.patch b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio/0001-filter-Rename-some-variables-to-tr_stdxxx.patch
new file mode 100644
index 0000000..dbc48a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio/0001-filter-Rename-some-variables-to-tr_stdxxx.patch
@@ -0,0 +1,108 @@
+From 601e6e56f44b91d957bb643662455f52540f336a Mon Sep 17 00:00:00 2001
+From: Corey Minyard <cminyard@mvista.com>
+Date: Tue, 25 Feb 2020 16:08:40 -0600
+Subject: [PATCH] filter: Rename some variables to tr_stdxxx
+
+stdout and stderr can be macros, don't use the names directly.
+
+Signed-off-by: Corey Minyard <cminyard@mvista.com>
+Upstream-Status: Backport [https://github.com/cminyard/gensio/commit/601e6e56f44b91d957bb643662455f52540f336a]
+Signed-off-by: Pierre-Jean Texier <pjtexier@koncepto.io>
+---
+ lib/gensio_filter_trace.c | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/lib/gensio_filter_trace.c b/lib/gensio_filter_trace.c
+index d39d58b..abe2db6 100644
+--- a/lib/gensio_filter_trace.c
++++ b/lib/gensio_filter_trace.c
+@@ -32,8 +32,8 @@ struct trace_filter {
+     enum trace_dir dir;
+     bool raw;
+     char *filename;
+-    bool stdout;
+-    bool stderr;
++    bool tr_stdout;
++    bool tr_stderr;
+ 
+     FILE *tr;
+ };
+@@ -82,9 +82,9 @@ trace_try_connect(struct gensio_filter *filter, struct timeval *timeout)
+ {
+     struct trace_filter *tfilter = filter_to_trace(filter);
+ 
+-    if (tfilter->stdout) {
++    if (tfilter->tr_stdout) {
+ 	tfilter->tr = stdout;
+-    } else if (tfilter->stderr) {
++    } else if (tfilter->tr_stderr) {
+ 	tfilter->tr = stderr;
+     } else if (tfilter->filename) {
+ 	tfilter->tr = fopen(tfilter->filename, "a+");
+@@ -99,7 +99,7 @@ trace_try_disconnect(struct gensio_filter *filter, struct timeval *timeout)
+ {
+     struct trace_filter *tfilter = filter_to_trace(filter);
+ 
+-    if (!tfilter->stdout && !tfilter->stderr && tfilter->tr)
++    if (!tfilter->tr_stdout && !tfilter->tr_stderr && tfilter->tr)
+ 	fclose(tfilter->tr);
+     tfilter->tr = NULL;
+     return 0;
+@@ -331,12 +331,12 @@ static int gensio_trace_filter_func(struct gensio_filter *filter, int op,
+ 
+ static struct gensio_filter *
+ gensio_trace_filter_raw_alloc(struct gensio_os_funcs *o, enum trace_dir dir,
+-			      bool raw, const char *filename, bool stdout,
+-			      bool stderr)
++			      bool raw, const char *filename, bool tr_stdout,
++			      bool tr_stderr)
+ {
+     struct trace_filter *tfilter;
+ 
+-    if (!filename && !stdout && !stderr)
++    if (!filename && !tr_stdout && !tr_stderr)
+ 	dir = TRACE_NONE;
+ 
+     tfilter = o->zalloc(o, sizeof(*tfilter));
+@@ -351,8 +351,8 @@ gensio_trace_filter_raw_alloc(struct gensio_os_funcs *o, enum trace_dir dir,
+ 	if (!tfilter->filename)
+ 	    goto out_nomem;
+     }
+-    tfilter->stdout = stdout;
+-    tfilter->stderr = stderr;
++    tfilter->tr_stdout = tr_stdout;
++    tfilter->tr_stderr = tr_stderr;
+ 
+     tfilter->lock = o->alloc_lock(o);
+     if (!tfilter->lock)
+@@ -385,7 +385,7 @@ gensio_trace_filter_alloc(struct gensio_os_funcs *o,
+ {
+     struct gensio_filter *filter;
+     int dir = TRACE_NONE;
+-    bool raw = false, stdout = false, stderr = false;
++    bool raw = false, tr_stdout = false, tr_stderr = false;
+     const char *filename = NULL;
+     unsigned int i;
+ 
+@@ -396,15 +396,15 @@ gensio_trace_filter_alloc(struct gensio_os_funcs *o,
+ 	    continue;
+ 	if (gensio_check_keyvalue(args[i], "file", &filename) > 0)
+ 	    continue;
+-	if (gensio_check_keybool(args[i], "stdout", &stdout) > 0)
++	if (gensio_check_keybool(args[i], "stdout", &tr_stdout) > 0)
+ 	    continue;
+-	if (gensio_check_keybool(args[i], "stderr", &stderr) > 0)
++	if (gensio_check_keybool(args[i], "stderr", &tr_stderr) > 0)
+ 	    continue;
+ 	return GE_INVAL;
+     }
+ 
+     filter = gensio_trace_filter_raw_alloc(o, dir, raw, filename,
+-					   stdout, stderr);
++					   tr_stdout, tr_stderr);
+     if (!filter)
+ 	return GE_NOMEM;
+ 
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_1.5.3.bb b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_1.5.3.bb
new file mode 100644
index 0000000..8c97662
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_1.5.3.bb
@@ -0,0 +1,27 @@
+SUMMARY = "A library to abstract stream I/O like serial port, TCP, telnet, etc"
+HOMEPAGE = "https://github.com/cminyard/gensio"
+LICENSE = "GPL-2.0 & LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=a0fd36908af843bcee10cb6dfc47fa67 \
+                    file://COPYING;md5=bae3019b4c6dc4138c217864bd04331f \
+                    "
+
+SRCREV = "95ec1ab31ee97411fc37156d12061adcf0331598"
+PV = "1.5.3+git${SRCPV}"
+
+SRC_URI = "git://github.com/cminyard/gensio;protocol=https \
+           file://0001-filter-Rename-some-variables-to-tr_stdxxx.patch \
+           "
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PACKAGECONFIG ??= "openssl tcp-wrappers"
+
+PACKAGECONFIG[openssl] = "--with-openssl=${STAGING_DIR_HOST}${prefix},--without-openssl, openssl"
+PACKAGECONFIG[tcp-wrappers] = "--with-tcp-wrappers,--without-tcp-wrappers, tcp-wrappers"
+PACKAGECONFIG[swig] = "--with-swig,--without-swig, swig"
+
+EXTRA_OECONF = "--without-python"
+
+RDEPENDS_${PN} += "bash"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-16275.patch b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-16275.patch
new file mode 100644
index 0000000..9cefd4f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2019-16275.patch
@@ -0,0 +1,79 @@
+From d86d66dc073bc21d3b12faf4112062ae00c1773f Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Thu, 29 Aug 2019 11:52:04 +0300
+Subject: 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.
+
+Upstream-Status: Accepted
+CVE: CVE-2019-16275
+
+Reference to upstream patch:
+https://w1.fi/cgit/hostap/commit/?id=d86d66dc073bc21d3b12faf4112062ae00c1773f
+
+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 3158768..34ca379 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 c85a28d..2816812 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.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb
index 982514f..68dc123 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb
@@ -11,6 +11,7 @@
     file://defconfig \
     file://init \
     file://hostapd.service \
+    file://CVE-2019-16275.patch \
 "
 
 SRC_URI[md5sum] = "f188fc53a495fe7af3b6d77d3c31dee8"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.1.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.2.2.bb
similarity index 70%
rename from meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.1.2.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.2.2.bb
index e2867e8..da5403e 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.1.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.2.2.bb
@@ -6,8 +6,10 @@
 DEPENDS = "glib-2.0 ncurses openssl"
 
 SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz"
-SRC_URI[md5sum] = "271d2fd875cddd34526234d8a766d82c"
-SRC_URI[sha256sum] = "5ccc2b89a394e91bea0aa83a951c3b1d471c76da87b4169ec435530a31bf9732"
+SRC_URI[md5sum] = "8547f89e014e23e1bbbb665bcf7e2f70"
+SRC_URI[sha256sum] = "6727060c918568ba2ff4295ad736128dba0b995d7b20491bca11f593bd857578"
+
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
 
 inherit autotools pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd/0001-Makefile.am-Avoid-redirection-of-input-and-output-fi.patch b/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd/0001-Makefile.am-Avoid-redirection-of-input-and-output-fi.patch
deleted file mode 100644
index 93ef007..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd/0001-Makefile.am-Avoid-redirection-of-input-and-output-fi.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From f2a2b9f445ab1e31fbb27a74744e9a2ededfce17 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 4 Nov 2019 16:38:04 -0800
-Subject: [PATCH] Makefile.am: Avoid redirection of input and output files
-
-Ensure that directory is created before its written to
-
-This can cause a build race in a highly parallelised build where a directory is not yet created but
-output file is being written using redirection e.g.
-
-rst2man.py --strict --no-raw --no-generator --no-datestamp < ../git/monitor/iwmon.rst > monitor/iwmon.1
-/bin/sh: monitor/iwmon.1: No such file or directory
-make[1]: *** [Makefile:3544: monitor/iwmon.1] Error 1
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- Makefile.am | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/Makefile.am b/Makefile.am
-index 823b7d02..1bd0005c 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -626,8 +626,9 @@ SED_PROCESS = $(AM_V_GEN)$(MKDIR_P) $(dir $@) && $(SED) \
- 		< $< > $@
- 
- if RUN_RST2MAN
--RST2MAN_PROCESS = $(AM_V_GEN)$(RST2MAN) --strict --no-raw --no-generator \
--			--no-datestamp < $< > $@
-+RST2MAN_PROCESS = $(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
-+			$(AM_V_GEN)$(RST2MAN) --strict --no-raw \
-+			--no-generator --no-datestamp $< $@
- else
- RST2MAN_PROCESS = $(AM_V_GEN)test -f $@ || \
- 		{ echo "Generated manual page $@ does not exist"; false; }
--- 
-2.24.0
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.0.bb
deleted file mode 100644
index cc34ca2..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.0.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-DESCRIPTION = "Wireless daemon for Linux"
-LICENSE = "LGPL-2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=fb504b67c50331fc78734fed90fb0e09"
-
-inherit autotools pkgconfig systemd python3native
-
-DEPENDS = "ell readline dbus python3-docutils-native"
-
-SRC_URI = "git://git.kernel.org/pub/scm/network/wireless/iwd.git \
-           file://0001-Makefile.am-Avoid-redirection-of-input-and-output-fi.patch \
-          "
-SRCREV = "971e1d2038a203ad43bd2278a811a9e5ec8d52db"
-S = "${WORKDIR}/git"
-
-PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
-PACKAGECONFIG[wired] = "--enable-wired,--disable-wired"
-PACKAGECONFIG[ofono] = "--enable-ofono,--disable-ofono"
-PACKAGECONFIG[systemd] = "--with-systemd-unitdir=${systemd_system_unitdir},--disable-systemd-service,systemd"
-
-EXTRA_OECONF += "--enable-external-ell"
-
-do_configure_prepend () {
-    mkdir -p ${S}/build-aux
-}
-
-do_install_append() {
-    mkdir --parents ${D}${docdir}/${BPN}
-    install -m644 ${S}/doc/*.txt ${D}${docdir}/${BPN}
-}
-
-FILES_${PN} += "${datadir}/dbus-1 ${nonarch_libdir}/modules-load.d ${systemd_unitdir}/network/"
-
-SYSTEMD_SERVICE_${PN} = "iwd.service ${@bb.utils.contains('PACKAGECONFIG', 'wired', 'ead.service', '', d)}"
-
-RRECOMMENDS_${PN} = "\
-    kernel-module-pkcs7-message \
-    kernel-module-pkcs8-key-parser \
-    kernel-module-x509-key-parser \
-"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.6.bb
new file mode 100644
index 0000000..10ac03e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/iwd/iwd_1.6.bb
@@ -0,0 +1,54 @@
+SUMMARY = "Wireless daemon for Linux"
+HOMEPAGE = "https://iwd.wiki.kernel.org/"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fb504b67c50331fc78734fed90fb0e09"
+
+DEPENDS = "ell"
+
+SRC_URI = "git://git.kernel.org/pub/scm/network/wireless/iwd.git"
+SRCREV = "ad97f4f945b828425ff288e905523e11b330d41d"
+S = "${WORKDIR}/git"
+
+inherit autotools manpages pkgconfig python3native systemd
+
+PACKAGECONFIG ??= " \
+    client \
+    monitor \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+"
+PACKAGECONFIG[client] = "--enable-client,--disable-client,readline"
+PACKAGECONFIG[monitor] = "--enable-monitor,--disable-monitor"
+PACKAGECONFIG[manpages] = "--enable-manual-pages,--disable-manual-pages,python3-docutils-native"
+PACKAGECONFIG[wired] = "--enable-wired,--disable-wired"
+PACKAGECONFIG[ofono] = "--enable-ofono,--disable-ofono"
+PACKAGECONFIG[systemd] = "--with-systemd-unitdir=${systemd_system_unitdir},--disable-systemd-service,systemd"
+
+EXTRA_OECONF = "--enable-external-ell"
+
+SYSTEMD_SERVICE_${PN} = " \
+    iwd.service \
+    ${@bb.utils.contains('PACKAGECONFIG', 'wired', 'ead.service', '', d)} \
+"
+
+do_configure_prepend() {
+    install -d ${S}/build-aux
+}
+
+do_install_append() {
+    # If client and monitor are disabled, bindir is empty, causing a QA error
+    rmdir --ignore-fail-on-non-empty ${D}/${bindir}
+}
+
+FILES_${PN} += " \
+    ${datadir}/dbus-1 \
+    ${nonarch_libdir}/modules-load.d \
+    ${systemd_unitdir}/network \
+"
+
+RDEPENDS_${PN} = "dbus"
+
+RRECOMMENDS_${PN} = "\
+    kernel-module-pkcs7-message \
+    kernel-module-pkcs8-key-parser \
+    kernel-module-x509-key-parser \
+"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.27.bb b/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.33.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.27.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.33.bb
index be4536b..760c2db 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.27.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libev/libev_4.33.bb
@@ -5,8 +5,8 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=d6ad416afd040c90698edcdf1cbee347"
 
 SRC_URI = "http://dist.schmorp.de/libev/Attic/${BP}.tar.gz"
-SRC_URI[md5sum] = "d38925fbc030153fe674c4e0e864a69a"
-SRC_URI[sha256sum] = "2d5526fc8da4f072dd5c73e18fbb1666f5ef8ed78b73bba12e195cfdd810344e"
+SRC_URI[md5sum] = "a3433f23583167081bf4acdd5b01b34f"
+SRC_URI[sha256sum] = "507eb7b8d1015fbec5b935f34ebed15bf346bed04a11ab82b8eee848c4205aea"
 
 inherit autotools
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim/clang.patch b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim/clang.patch
deleted file mode 100644
index d885784..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim/clang.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Check for clang compiler since we need to disable
-unused-function warning for clang, at same time
-pass werror when checking for compiler options if
-werror is enabled so spurious options do not get
-enabled. Only the ones that are supported by given
-compiler are accepted.
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: Pending
-
-Index: libmbim-1.14.0/m4/compiler-warnings.m4
-===================================================================
---- libmbim-1.14.0.orig/m4/compiler-warnings.m4
-+++ libmbim-1.14.0/m4/compiler-warnings.m4
-@@ -2,10 +2,30 @@ AC_DEFUN([LIBMBIM_COMPILER_WARNINGS],
- [AC_ARG_ENABLE(more-warnings,
- 	AS_HELP_STRING([--enable-more-warnings], [Possible values: no/yes/error]),
- 	set_more_warnings="$enableval",set_more_warnings=error)
-+
-+# Clang throws a lot of warnings when it does not understand a flag. Disable
-+# this warning for now so other warnings are visible.
-+AC_MSG_CHECKING([if compiling with clang])
-+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
-+#ifndef __clang__
-+	not clang
-+#endif
-+	]])],
-+	[CLANG=yes],
-+	[CLANG=no]
-+)
-+AC_MSG_RESULT([$CLANG])
-+AS_IF([test "x$CLANG" = "xyes"], [CLANG_FLAGS=-Wno-error=unused-function])
-+CFLAGS="$CFLAGS $CLANG_FLAGS"
-+LDFLAGS="$LDFLAGS $CLANG_FLAGS"
-+
- AC_MSG_CHECKING(for more warnings)
- if test "$GCC" = "yes" -a "$set_more_warnings" != "no"; then
- 	AC_MSG_RESULT(yes)
- 	CFLAGS="-Wall -std=gnu89 $CFLAGS"
-+	if test "x$set_more_warnings" = xerror; then
-+		WERROR="-Werror"
-+	fi
- 
- 	for option in -Wmissing-declarations -Wmissing-prototypes \
- 		      -Wdeclaration-after-statement -Wstrict-prototypes \
-@@ -17,22 +37,23 @@ if test "$GCC" = "yes" -a "$set_more_war
- 		      -Wmissing-include-dirs -Waggregate-return \
- 		      -Wformat-security -Wtype-limits; do
- 		SAVE_CFLAGS="$CFLAGS"
--		CFLAGS="$CFLAGS $option"
-+		CFLAGS="$CFLAGS $option $WERROR"
- 		AC_MSG_CHECKING([whether gcc understands $option])
- 		AC_TRY_COMPILE([], [],
- 			has_option=yes,
- 			has_option=no,)
- 		if test $has_option = no; then
- 			CFLAGS="$SAVE_CFLAGS"
-+		else
-+			CFLAGS="$SAVE_CFLAGS $option"
- 		fi
- 		AC_MSG_RESULT($has_option)
- 		unset has_option
- 		unset SAVE_CFLAGS
- 	done
-+	CFLAGS="$CFLAGS $WERROR"
- 	unset option
--	if test "x$set_more_warnings" = xerror; then
--		CFLAGS="$CFLAGS -Werror"
--	fi
-+	unset WERROR
- else
- 	AC_MSG_RESULT(no)
- fi
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.20.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.22.0.bb
similarity index 76%
rename from meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.20.4.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.22.0.bb
index a3ef80c..61e314f 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.20.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.22.0.bb
@@ -11,8 +11,7 @@
 
 inherit autotools pkgconfig bash-completion
 
-SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz \
-           file://clang.patch \
-"
-SRC_URI[md5sum] = "d38d637e33cde8a91484f53a9f6c4d49"
-SRC_URI[sha256sum] = "ac2708a409b09f1f6f1786a8a9e39c36619aa8d6f285ea943daa7a48ea36d3e8"
+SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "87060e8957013177e4140edc6f64f5bd"
+SRC_URI[sha256sum] = "5c0778eb1cd12c3604523134e55183f5147b0cae71150e875b583768f7aa1f38"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.16.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.17.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.16.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.17.bb
index 596e315..54decbc 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.16.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.17.bb
@@ -21,8 +21,8 @@
 SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz"
 SRC_URI_append_class-target = " file://0001-Use-native-mtp-hotplug.patch"
 
-SRC_URI[md5sum] = "7796179af46e90938dde1d0c4d1d1d4c"
-SRC_URI[sha256sum] = "5b68f9dd1ed38de558de687f40e255a39e4d5e32ef3de601f0ac19dd5682bba0"
+SRC_URI[md5sum] = "81aea5d3139e5189c2e055ed2c98cd91"
+SRC_URI[sha256sum] = "f8a34cf52d9f9b9cb8c7f26b12da347d4af7eb904c13189602e4c6b62d1a79dc"
 
 inherit autotools pkgconfig lib_package
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.24.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.24.8.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.24.2.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.24.8.bb
index 35a58d2..124b0f1 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.24.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.24.8.bb
@@ -14,8 +14,7 @@
 SRC_URI = "http://www.freedesktop.org/software/${BPN}/${BPN}-${PV}.tar.xz \
            "
 
-SRC_URI[md5sum] = "e49c419112d708b5301af7ccc2c090ff"
-SRC_URI[sha256sum] = "4ae4e476f960dbc0d04b1c0368776eb78edffd4421f3e4c074bb2bfb6375b282"
+SRC_URI[sha256sum] = "c793db2c91d7928160341b357b26315d9c879ecb36699cb7a6b36054cba60893"
 
 PACKAGECONFIG ??= "udev mbim"
 PACKAGECONFIG[udev] = ",--without-udev,libgudev"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.34.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.36.0.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.34.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.36.0.bb
index b842bbd..deeaa2b 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.34.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libuv/libuv_1.36.0.bb
@@ -4,7 +4,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=a68902a430e32200263d182d44924d47"
 
-SRCREV = "15ae750151ac9341e5945eb38f8982d59fb99201"
+SRCREV = "533b738838ad8407032e14b6772b29ef9af63cfa"
 SRC_URI = "git://github.com/libuv/libuv;branch=v1.x"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_3.2.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.0.1.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_3.2.0.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.0.1.bb
index 9c55033..0d1f57a 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_3.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.0.1.bb
@@ -1,13 +1,16 @@
 SUMMARY = "Canonical libwebsockets.org websocket library"
 HOMEPAGE = "https://libwebsockets.org/"
-LICENSE = "LGPL-2.1"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=4ce87f3facb6f911c142c8bef9bfb380"
+LICENSE = "MIT & Zlib & BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c47b078124308a4e1354e8d59f606b7"
 
 DEPENDS = "zlib"
 
 S = "${WORKDIR}/git"
-SRCREV = "94931cad003faf9d316e698b557bbb6d245f1f91"
-SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;branch=v3.2-stable"
+SRCREV = "6eb39388f43f6e2a27f0efcbf8cb2391e38824e9"
+SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;branch=v4.0-stable"
+
+UPSTREAM_CHECK_URI = "https://github.com/warmcat/${BPN}/releases"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
 
 inherit cmake pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.10.8.bb b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.12.8.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.10.8.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.12.8.bb
index 3cd21cc..47a86b9 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.10.8.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.12.8.bb
@@ -14,8 +14,7 @@
 SRC_URI = "http://www.freedesktop.org/software/ModemManager/ModemManager-${PV}.tar.xz \
            "
 
-SRC_URI[md5sum] = "c05ac4246c81cc15d617c4a129232988"
-SRC_URI[sha256sum] = "cbe174078dbdf3f746a55f0004353d3c27da2a31da553036d90fc7dc34a0169a"
+SRC_URI[sha256sum] = "68b53d0615ba0d3e2bbf386ed029dfe644a6a30a79ab8d85523527bb4e713aff"
 
 S = "${WORKDIR}/ModemManager-${PV}"
 
@@ -23,6 +22,7 @@
     ${@bb.utils.filter('DISTRO_FEATURES', 'systemd polkit', d)} \
 "
 
+PACKAGECONFIG[at] = "--with-at-command-via-dbus"
 PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,,"
 PACKAGECONFIG[polkit] = "--with-polkit=yes,--with-polkit=no,polkit"
 # Support WWAN modems and devices which speak the Mobile Interface Broadband Model (MBIM) protocol.
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/0001-Fix-bug-of-free-with-musl.patch b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/0001-Fix-bug-of-free-with-musl.patch
new file mode 100644
index 0000000..12f9e7a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/files/0001-Fix-bug-of-free-with-musl.patch
@@ -0,0 +1,39 @@
+From 96233a8382b9520293a48b08dc3b204a21205800 Mon Sep 17 00:00:00 2001
+From: Wang Mingyu <wangmy@cn.fujitsu.com>
+Date: Fri, 24 Apr 2020 00:53:19 +0900
+Subject: [PATCH] Fix bug of free() with musl
+
+This fixes build error with musl C library:
+/ubinux-dev/ubinux001/contribution/build/tmp/work/armv7vet2hf-neon-poky-linux-musleabi/paho-mqtt-c/1.3.2-r0/git/src/Heap.h:55:24:
+error: expected declaration specifiers or '...' before string constant
+   55 | #define free(x) myfree(__FILE__, __LINE__, x)
+      |                        ^~~~~~~~
+/ubinux-dev/ubinux001/contribution/build/tmp/work/armv7vet2hf-neon-poky-linux-musleabi/paho-mqtt-c/1.3.2-r0/git/src/Heap.h:55:34:
+error: expected declaration specifiers or '...' before numeric constant
+   55 | #define free(x) myfree(__FILE__, __LINE__, x)
+      |                                  ^~~~~~~~
+
+Signed-off-by: Wang Mingyu <wangmy@cn.fujitsu.com>
+---
+ src/MQTTReasonCodes.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/MQTTReasonCodes.c b/src/MQTTReasonCodes.c
+index 416eab5..479dbac 100644
+--- a/src/MQTTReasonCodes.c
++++ b/src/MQTTReasonCodes.c
+@@ -16,10 +16,10 @@
+ 
+ #include "MQTTReasonCodes.h"
+ 
+-#include "Heap.h"
+ #include "StackTrace.h"
+ 
+ #include <memory.h>
++#include "Heap.h"
+ 
+ #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
+ 
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.1.bb
deleted file mode 100644
index fa24967..0000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.1.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SUMMARY = "Paho MQTT - C libraries for the MQTT and MQTT-SN protocols"
-DESCRIPTION = "Client implementation of open and standard messaging protocols for Machine-to-Machine (M2M) and Internet of Things (IoT)."
-HOMEPAGE = "http://www.eclipse.org/paho/"
-SECTION = "console/network"
-LICENSE = "EPL-1.0 | EDL-1.0"
-
-LIC_FILES_CHKSUM = " \
-        file://edl-v10;md5=3adfcc70f5aeb7a44f3f9b495aa1fbf3 \
-        file://epl-v10;md5=659c8e92a40b6df1d9e3dccf5ae45a08 \
-        file://notice.html;md5=a00d6f9ab542be7babc2d8b80d5d2a4c \
-        file://about.html;md5=dcde438d73cf42393da9d40fabc0c9bc \
-"
-
-SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=http"
-
-SRCREV = "d34c51214f4172f2e12bb17532c9f44f72a57dd4"
-
-DEPENDS = "openssl"
-
-S = "${WORKDIR}/git"
-
-inherit cmake
-
-do_install_append() {
-    # paho-mqtt installes some thing that we don't want.
-    rm -rf ${D}${prefix}/samples
-    find ${D}${prefix} -maxdepth 1 -type f -delete
-}
-
-EXTRA_OECMAKE = "-DPAHO_WITH_SSL=ON"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.2.bb
new file mode 100644
index 0000000..fa8c714
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.2.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Paho MQTT - C libraries for the MQTT and MQTT-SN protocols"
+DESCRIPTION = "Client implementation of open and standard messaging protocols for Machine-to-Machine (M2M) and Internet of Things (IoT)."
+HOMEPAGE = "http://www.eclipse.org/paho/"
+SECTION = "console/network"
+LICENSE = "EPL-1.0 | EDL-1.0"
+
+LIC_FILES_CHKSUM = " \
+        file://edl-v10;md5=3adfcc70f5aeb7a44f3f9b495aa1fbf3 \
+        file://epl-v20;md5=d9fc0efef5228704e7f5b37f27192723 \
+        file://notice.html;md5=943f861069889acecebf51dfa24478e2 \
+        file://about.html;md5=e5662cbb5f8fd5c9faac526e4077898e \
+"
+
+SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=http \
+           file://0001-Fix-bug-of-free-with-musl.patch"
+
+SRCREV = "fbe39064c4416f879308a8a5390b19d544970789"
+
+DEPENDS = "openssl"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+do_install_append() {
+    # paho-mqtt installes some thing that we don't want.
+    rm -rf ${D}${prefix}/samples
+    find ${D}${prefix} -maxdepth 1 -type f -delete
+}
+
+EXTRA_OECMAKE = "-DPAHO_WITH_SSL=ON"
+
+do_configure_prepend_libc-musl() {
+    sed -i -e "s/SET(LIBS_SYSTEM c dl pthread anl rt)/SET(LIBS_SYSTEM c dl pthread rt)/g" ${S}/src/CMakeLists.txt 
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.5.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.1.5.bb
similarity index 67%
rename from meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.5.1.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.1.5.bb
index ed8aab0..0df134e 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_3.5.1.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.1.5.bb
@@ -5,10 +5,12 @@
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=bae3019b4c6dc4138c217864bd04331f"
 
+DEPENDS = "gensio libyaml"
+
 SRC_URI = "${SOURCEFORGE_MIRROR}/project/ser2net/ser2net/ser2net-${PV}.tar.gz"
 
-SRC_URI[md5sum] = "569267b37b8f507d8874f28f5334b5d2"
-SRC_URI[sha256sum] = "02f5dd0abbef5a17b80836b0de1ef0588e257106fb5e269b86822bfd001dc862"
+SRC_URI[md5sum] = "52c5e56d2d54ced0cdeb764a7e8fec92"
+SRC_URI[sha256sum] = "df904d271eb161c265c956f0cb938dd0a375dda4a919a344f73b08bc50b9f308"
 
 inherit autotools pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb
index ca09f6d..7cb25b6 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/telepathy/telepathy-idle_0.2.0.bb
@@ -11,7 +11,12 @@
 SRC_URI[md5sum] = "92a2de5198284cbd3c430b0d1a971a86"
 SRC_URI[sha256sum] = "3013ad4b38d14ee630b8cc8ada5e95ccaa849b9a6fe15d2eaf6d0717d76f2fab"
 
-inherit autotools pkgconfig pythonnative
+inherit autotools pkgconfig ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "pythonnative", "", d)}
 
 FILES_${PN} += "${datadir}/telepathy \
                 ${datadir}/dbus-1"
+
+python() {
+    if 'meta-python2' not in d.getVar('BBFILE_COLLECTIONS').split():
+        raise bb.parse.SkipRecipe('Requires meta-python2 to be present.')
+}
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_4.4.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_4.4.6.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_4.4.1.bb
rename to meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_4.4.6.bb
index 656ff0d..0e0ddd5 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_4.4.1.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zabbix/zabbix_4.4.6.bb
@@ -28,8 +28,8 @@
     file://zabbix-agent.service \
 "
 
-SRC_URI[md5sum] = "e9df94149790f86732f18d042b70155d"
-SRC_URI[sha256sum] = "0bf74e597dd41a558305fe17a2b1ed6fe2d77044b87696a92e4227fbf315564a"
+SRC_URI[md5sum] = "e666539220be93b1af38e40f5fbb1f79"
+SRC_URI[sha256sum] = "22bb28e667424ad4688f47732853f4241df0e78a7607727b043d704ba726ae0e"
 
 inherit autotools-brokensep linux-kernel-base pkgconfig systemd useradd
 
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.0.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.0.bb
index 4ec1c04..7c9a33e 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.0.bb
@@ -9,6 +9,8 @@
 SRC_URI[md5sum] = "7e09997db6ac3b25e8ed104053040722"
 SRC_URI[sha256sum] = "cfab29c2b3cc8a845749758a51e1dd5f5160c1ef57e2a41ea96e4c2dcc8feceb"
 
+UPSTREAM_CHECK_URI = "https://github.com/zeromq/${BPN}/releases"
+
 inherit cmake
 
 PACKAGES = "lib${BPN} lib${BPN}-dev lib${BPN}-staticdev ${PN} ${PN}-dbg"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch
new file mode 100644
index 0000000..eb3dee4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch
@@ -0,0 +1,39 @@
+From: Niko Mauno <niko.mauno@vaisala.com>
+Date: Wed Apr 22 09:00:00 2020 +0300
+Subject: CMakeLists.txt: Avoid host-specific path to libsodium
+
+Avoid propagating full build host specific path to generated
+ZeroMQTargets.cmake when building with libsodium, which changes the
+content in generated ZeroMQTargets.cmake files followingly:
+
+  -INTERFACE_LINK_LIBRARIES "-lpthread;/build/host/specific/path/to/zeromq/4.3.2-r0/recipe-sysroot/usr/lib/libsodium.so;-lrt"
+  +INTERFACE_LINK_LIBRARIES "-lpthread;-lsodium;-lrt"
+
+This change mitigates an issue stemming from reuse of build artifacts
+where the path to libsodium.so does not match exactly between two
+different build hosts.
+
+Upstream-Status: Pending
+
+Signed-off-by: Niko Mauno <niko.mauno@vaisala.com>
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1210,7 +1210,7 @@
+   target_link_libraries(libzmq ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+ 
+   if(SODIUM_FOUND)
+-    target_link_libraries(libzmq ${SODIUM_LIBRARIES})
++    target_link_libraries(libzmq -lsodium)
+     # On Solaris, libsodium depends on libssp
+     if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+       target_link_libraries(libzmq ssp)
+@@ -1240,7 +1240,7 @@
+   target_link_libraries(libzmq-static ${OPTIONAL_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+ 
+   if(SODIUM_FOUND)
+-    target_link_libraries(libzmq-static ${SODIUM_LIBRARIES})
++    target_link_libraries(libzmq-static -lsodium)
+     # On Solaris, libsodium depends on libssp
+     if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+       target_link_libraries(libzmq-static ssp)
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.2.bb
index adf2c7b..02a4c04 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.2.bb
@@ -7,11 +7,14 @@
 PACKAGECONFIG[libsodium] = "-DWITH_LIBSODIUM=ON,-DWITH_LIBSODIUM=OFF, libsodium"
 
 SRC_URI = "http://github.com/zeromq/libzmq/releases/download/v${PV}/zeromq-${PV}.tar.gz \
+    file://0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch \
     file://run-ptest \
 "
 SRC_URI[md5sum] = "2047e917c2cc93505e2579bcba67a573"
 SRC_URI[sha256sum] = "ebd7b5c830d6428956b67a0454a7f8cbed1de74b3b01e5c33c5378e22740f763"
 
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/libzmq/releases"
+
 inherit cmake ptest pkgconfig
 
 EXTRA_OECMAKE = "${@bb.utils.contains('PTEST_ENABLED', '1', '-DBUILD_TESTS=ON', '-DBUILD_TESTS=OFF', d)} \
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0001-launch-improve-error-handling-for-opendir.patch b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0001-launch-improve-error-handling-for-opendir.patch
deleted file mode 100644
index ccc175b..0000000
--- a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0001-launch-improve-error-handling-for-opendir.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From f42d5e38859c65a186acd0da94bbeeca12faf7a2 Mon Sep 17 00:00:00 2001
-From: David Rheinsberg <david.rheinsberg@gmail.com>
-Date: Thu, 2 May 2019 17:33:34 +0200
-Subject: [PATCH] launch: improve error handling for opendir()
-
-This improves the error-handling of opendir() by always printing
-diagnostics. Furthermore, it aligns the behavior with dbus-deamon and
-ignores EACCES.
-
-Signed-off-by: David Rheinsberg <david.rheinsberg@gmail.com>
-Upstream-Status: dbus-broker@f42d5e38859c65a186acd0da94bbeeca12faf7a2
----
- src/launch/launcher.c | 17 +++++++++++++++--
- 1 file changed, 15 insertions(+), 2 deletions(-)
-
-diff --git a/src/launch/launcher.c b/src/launch/launcher.c
-index 31a5364..2ec4bda 100644
---- a/src/launch/launcher.c
-+++ b/src/launch/launcher.c
-@@ -749,10 +749,23 @@ static int launcher_load_service_dir(Launcher *launcher, const char *dirpath, NS
- 
-         dir = opendir(dirpath);
-         if (!dir) {
--                if (errno == ENOENT || errno == ENOTDIR)
-+                if (errno == ENOENT || errno == ENOTDIR) {
-                         return 0;
--                else
-+                } else if (errno == EACCES) {
-+                        log_append_here(&launcher->log, LOG_ERR, 0, NULL);
-+                        r = log_commitf(&launcher->log, "Access denied to service directory '%s'\n", dirpath);
-+                        if (r)
-+                                return error_fold(r);
-+
-+                        return 0;
-+                } else {
-+                        log_append_here(&launcher->log, LOG_ERR, errno, NULL);
-+                        r = log_commitf(&launcher->log, "Unable to open service directory '%s': %m\n", dirpath);
-+                        if (r)
-+                                return error_fold(r);
-+
-                         return error_origin(-errno);
-+                }
-         }
- 
-         r = dirwatch_add(launcher->dirwatch, dirpath);
--- 
-2.20.1
-
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0002-metrics-change-the-constant-used-for-invalid-timesta.patch b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0002-metrics-change-the-constant-used-for-invalid-timesta.patch
deleted file mode 100644
index 67a2dc4..0000000
--- a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0002-metrics-change-the-constant-used-for-invalid-timesta.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 3570b3e9ba367f10718b56336ce32d5254f66575 Mon Sep 17 00:00:00 2001
-From: Tom Gundersen <teg@jklm.no>
-Date: Thu, 9 May 2019 13:00:37 +0200
-Subject: [PATCH] metrics: change the constant used for invalid timestamps
-
-Use (uint64_t)-1 rather than 0 to indicate an invalid timestamp. It
-should not be possible for the kernel to return 0 from
-clock_gettime(), but we have received some reports of our asserts
-triggering, so avoid the issue entirely  by using -1 instead (which
-really can never be returned).
-
-See https://retrace.fedoraproject.org/faf/reports/2539484/
-
-Signed-off-by: Tom Gundersen <teg@jklm.no>
-Upstream-Status: dbus-broker@3570b3e9ba367f10718b56336ce32d5254f66575
----
- src/util/metrics.c | 8 ++++----
- src/util/metrics.h | 9 ++++++---
- 2 files changed, 10 insertions(+), 7 deletions(-)
-
-diff --git a/src/util/metrics.c b/src/util/metrics.c
-index b5a7182..eef94eb 100644
---- a/src/util/metrics.c
-+++ b/src/util/metrics.c
-@@ -26,7 +26,7 @@ void metrics_init(Metrics *metrics, clockid_t id) {
- }
- 
- void metrics_deinit(Metrics *metrics) {
--        c_assert(!metrics->timestamp);
-+        c_assert(metrics->timestamp == METRICS_TIMESTAMP_INVALID);
-         metrics_init(metrics, metrics->id);
- }
- 
-@@ -82,7 +82,7 @@ void metrics_sample_add(Metrics *metrics, uint64_t timestamp) {
-  * a sample is not currently running.
-  */
- void metrics_sample_start(Metrics *metrics) {
--        c_assert(!metrics->timestamp);
-+        c_assert(metrics->timestamp == METRICS_TIMESTAMP_INVALID);
-         metrics->timestamp = metrics_get_time(metrics);
- }
- 
-@@ -93,11 +93,11 @@ void metrics_sample_start(Metrics *metrics) {
-  * End a currently running sample, and update the internal state.
-  */
- void metrics_sample_end(Metrics *metrics) {
--        c_assert(metrics->timestamp);
-+        c_assert(metrics->timestamp != METRICS_TIMESTAMP_INVALID);
- 
-         metrics_sample_add(metrics, metrics->timestamp);
- 
--        metrics->timestamp = 0;
-+        metrics->timestamp = METRICS_TIMESTAMP_INVALID;
- }
- 
- /**
-diff --git a/src/util/metrics.h b/src/util/metrics.h
-index a8ee915..b00dee6 100644
---- a/src/util/metrics.h
-+++ b/src/util/metrics.h
-@@ -8,6 +8,8 @@
- #include <stdlib.h>
- #include <time.h>
- 
-+#define METRICS_TIMESTAMP_INVALID ((uint64_t) -1)
-+
- typedef struct Metrics Metrics;
- 
- struct Metrics {
-@@ -23,9 +25,10 @@ struct Metrics {
-         uint64_t sum_of_squares;
- };
- 
--#define METRICS_INIT(_id) {                     \
--                .minimum = (uint64_t) -1,       \
--                .id = (_id),                    \
-+#define METRICS_INIT(_id) {                                     \
-+                .minimum = (uint64_t) -1,                       \
-+                .id = (_id),                                    \
-+                .timestamp = METRICS_TIMESTAMP_INVALID,         \
-         }
- 
- void metrics_init(Metrics *metrics, clockid_t id);
--- 
-2.21.0
-
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0003-dbus-socket-treat-MSG_CTRUNC-gracefully.patch b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0003-dbus-socket-treat-MSG_CTRUNC-gracefully.patch
deleted file mode 100644
index 53f9e71..0000000
--- a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0003-dbus-socket-treat-MSG_CTRUNC-gracefully.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 520c47c53deeb893e03194fefaf3c5b9223ede27 Mon Sep 17 00:00:00 2001
-From: David Rheinsberg <david.rheinsberg@gmail.com>
-Date: Fri, 10 May 2019 10:58:06 +0200
-Subject: [PATCH] dbus/socket: treat MSG_CTRUNC gracefully
-
-As it turns out, LSMs allow clients to trigger a MSG_CTRUNC on the
-remote side of a unix socket. Whenever LSMs reject the transmission of
-an FD, they will simply drop the FD and set MSG_CTRUNC, without any
-other error notification.
-
-Therefore, we must assume any occurance of MSG_CTRUNC is trigger by a
-client. This makes it impossible to consider MSG_CTRUNC for any other
-error handling, and as such we are left to disconnecting the client and
-ignoring the flag.
-
-Luckily, MSG_CTRUNC is expected for any other event, so we only used it
-for diagnostics so far.
-
-Signed-off-by: David Rheinsberg <david.rheinsberg@gmail.com>
-Upstream-Status: dbus-broker@520c47c53deeb893e03194fefaf3c5b9223ede27
----
- src/dbus/socket.c | 44 +++++++++++++++++++++++++++++++++-----------
- 1 file changed, 33 insertions(+), 11 deletions(-)
-
-diff --git a/src/dbus/socket.c b/src/dbus/socket.c
-index cacdff2..6e6ba10 100644
---- a/src/dbus/socket.c
-+++ b/src/dbus/socket.c
-@@ -593,18 +593,40 @@ static int socket_recvmsg(Socket *socket,
- 
-         if (msg.msg_flags & MSG_CTRUNC) {
-                 /*
--                 * This flag means the control-buffer was too small to retrieve
--                 * all data. If this can be triggered remotely, it means a peer
--                 * can cause us to miss FDs. Hence, we really must protect
--                 * against this.
--                 * We do provide suitably sized buffers to be prepared for any
--                 * possible scenario. So if this happens, something is fishy
--                 * and we better report it.
--                 * Note that this is also reported by the kernel if we exceeded
--                 * our NOFILE limit. Since this implies resource
--                 * misconfiguration as well, we treat it the same way.
-+                 * Our control-buffer-size is carefully calculated to be big
-+                 * enough for any possible ancillary data we expect. Therefore,
-+                 * the kernel should never be required to truncate it, and thus
-+                 * MSG_CTRUNC will never be set. This is also foward compatible
-+                 * to future extensions to the ancillary data, since these must
-+                 * be enabled explicitly before the kernel considers forwarding
-+                 * them.
-+                 *
-+                 * Unfortunately, the SCM_RIGHTS implementation might set this
-+                 * flag as well. In particular, if not all FDs can be returned
-+                 * to user-space, MSG_CTRUNC will be set (signalling that the
-+                 * FD-set is non-complete). No other error is returned or
-+                 * signalled, though. There are several reasons why the FD
-+                 * transmission can fail. Most importantly, if we exhaust our
-+                 * FD limit, further FDs will simply be discarded. We are
-+                 * protected against this by our accounting-quotas, but we
-+                 * would still like to catch this condition and warn loudly.
-+                 * However, FDs are also dropped if the security layer refused
-+                 * the transmission of the FD in question. This means, if an
-+                 * LSM refuses the D-Bus client to send us an FD, the FD is
-+                 * just dropped and MSG_CTRUNC will be set. This can be
-+                 * triggered by clients.
-+                 *
-+                 * To summarize: In an ideal world, we would expect this flag
-+                 * to never be set, and we would just use
-+                 * `error_origin(-ENOTRECOVERABLE)` to provide diagnostics.
-+                 * Unfortunately, the gross misuse of this flag for LSM
-+                 * security enforcements means we have to assume any occurence
-+                 * of MSG_CTRUNC means the client was refused to send a
-+                 * specific message. Our only possible way to deal with this is
-+                 * to disconnect the client.
-                  */
--                r = error_origin(-ENOTRECOVERABLE);
-+                socket_close(socket);
-+                r = SOCKET_E_LOST_INTEREST;
-                 goto error;
-         }
- 
--- 
-2.21.0
-
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0004-launcher-fix-build-with-musl-libc.patch b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0004-launcher-fix-build-with-musl-libc.patch
deleted file mode 100644
index 0348d97..0000000
--- a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker/0004-launcher-fix-build-with-musl-libc.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From fc1d26dd08c48c04fc9883b36a94c219aba2091c Mon Sep 17 00:00:00 2001
-From: Luca Boccassi <luca.boccassi@microsoft.com>
-Date: Mon, 28 Oct 2019 14:31:38 +0000
-Subject: [PATCH] launcher: fix build with musl libc
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-../src/launch/launcher.c: In function ‘launcher_fork’:
-../src/launch/launcher.c:378:60: error: ‘WEXITED’ undeclared (first use in this function); did you mean ‘WIFEXITED’?
-         r = sd_event_add_child(launcher->event, NULL, pid, WEXITED, launcher_on_child_exit, launcher);
-                                                            ^~~~~~~
-                                                            WIFEXITED
-
-Include sys/wait.h which defines it.
-
-Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com>
-Suggested-by: Khem Raj <raj.khem@gmail.com>
-Upstream-Status: pending https://github.com/bus1/dbus-broker/pull/214
----
- src/launch/launcher.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/launch/launcher.c b/src/launch/launcher.c
-index 2ec4bda..1f38fcf 100644
---- a/src/launch/launcher.c
-+++ b/src/launch/launcher.c
-@@ -10,6 +10,7 @@
- #include <stdlib.h>
- #include <sys/prctl.h>
- #include <sys/un.h>
-+#include <sys/wait.h>
- #include <systemd/sd-bus.h>
- #include <systemd/sd-daemon.h>
- #include <systemd/sd-event.h>
--- 
-2.20.1
-
diff --git a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_21.bb b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_22.bb
similarity index 68%
rename from meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_21.bb
rename to meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_22.bb
index 8b4101a..c0b6f7f 100644
--- a/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_21.bb
+++ b/meta-openembedded/meta-oe/recipes-core/dbus/dbus-broker_22.bb
@@ -7,12 +7,10 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=7b486c2338d225a1405d979ed2c15ce8"
 
 SRC_URI = "https://github.com/bus1/dbus-broker/releases/download/v${PV}/dbus-broker-${PV}.tar.xz"
-SRC_URI += " file://0001-launch-improve-error-handling-for-opendir.patch"
-SRC_URI += " file://0002-metrics-change-the-constant-used-for-invalid-timesta.patch"
-SRC_URI += " file://0003-dbus-socket-treat-MSG_CTRUNC-gracefully.patch"
-SRC_URI += " file://0004-launcher-fix-build-with-musl-libc.patch"
-SRC_URI[md5sum] = "a17886a92ab1e0bc2e4b1a274339e388"
-SRC_URI[sha256sum] = "6fff9a831a514659e2c7d704e76867ce31ebcf43e8d7a62e080c6656f64cd39e"
+SRC_URI[md5sum] = "03c4730f2110b5492e1212c81af325dc"
+SRC_URI[sha256sum] = "32f30700cefc997c479d75fcc42f3177940f1ebbee9c5a60c1e3ee39b90a9783"
+
+UPSTREAM_CHECK_URI = "https://github.com/bus1/${BPN}/releases"
 
 inherit meson pkgconfig systemd features_check
 
diff --git a/meta-openembedded/meta-oe/recipes-core/emlog/emlog/0001-Remove-modules_clean-from-clean-target.patch b/meta-openembedded/meta-oe/recipes-core/emlog/emlog/0001-Remove-modules_clean-from-clean-target.patch
new file mode 100644
index 0000000..beba528
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-core/emlog/emlog/0001-Remove-modules_clean-from-clean-target.patch
@@ -0,0 +1,33 @@
+From fd0a4ee201b5c7b24da79dcd346ac121978951a0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 29 Mar 2020 19:58:36 -0700
+Subject: [PATCH] Remove modules_clean from clean target
+
+This is needed when building applications (w/o module)
+Since OE will run 'make clean' before reconfiguring, this
+will try to run module_clean and will wrongly try to look for removing
+modules from /lib/modules
+
+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 c60863f..fc897d5 100644
+--- a/Makefile
++++ b/Makefile
+@@ -23,7 +23,7 @@ all: modules nbcat mkemlog
+ 
+ install: modules_install nbcat_install mkemlog_install
+ 
+-clean: modules_clean nbcat_clean mkemlog_clean
++clean: nbcat_clean mkemlog_clean
+ 
+ modules:
+ 	$(MAKE) -C $(KDIR) M=$(CURDIR) modules
+-- 
+2.26.0
+
diff --git a/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb b/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
index 22308d7..387dd67 100644
--- a/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
+++ b/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
@@ -1,6 +1,8 @@
 require ${BPN}.inc
 
-SRC_URI += "file://${BPN}.initd"
+SRC_URI += "file://${BPN}.initd \
+            file://0001-Remove-modules_clean-from-clean-target.patch \
+            "
 
 SRC_URI_append_libc-musl = " file://Drop-use-of-error-h.patch"
 
@@ -8,6 +10,8 @@
 
 INITSCRIPT_NAME = "${BPN}"
 
+
+
 do_compile() {
     oe_runmake nbcat
     oe_runmake mkemlog
diff --git a/meta-openembedded/meta-oe/recipes-core/libnfc/libnfc_git.bb b/meta-openembedded/meta-oe/recipes-core/libnfc/libnfc_git.bb
index 64c5f5c..2851ecf 100644
--- a/meta-openembedded/meta-oe/recipes-core/libnfc/libnfc_git.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libnfc/libnfc_git.bb
@@ -7,6 +7,8 @@
 
 inherit autotools pkgconfig
 
+PV = "1.7.1+git${SRCPV}"
+
 S = "${WORKDIR}/git"
 SRCREV = "2d4543673e9b76c02679ca8b89259659f1afd932"
 SRC_URI = "git://github.com/nfc-tools/libnfc.git \
diff --git a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.2.bb b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.3.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.2.bb
rename to meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.3.bb
index 0e5b9ce..e6129e2 100644
--- a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.2.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.3.bb
@@ -6,8 +6,8 @@
 DEPENDS = "mm-common"
 
 SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.10/libsigc++-${PV}.tar.xz"
-SRC_URI[md5sum] = "1b067bfae0b502e6a5127336cb09d2dd"
-SRC_URI[sha256sum] = "b1ca0253379596f9c19f070c83d362b12dfd39c0a3ea1dd813e8e21c1a097a98"
+SRC_URI[md5sum] = "ea68c7afc23a4b89a2dfa78344460785"
+SRC_URI[sha256sum] = "0b68dfc6313c6cc90ac989c6d722a1bf0585ad13846e79746aa87cb265904786"
 
 S = "${WORKDIR}/libsigc++-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.0.2.bb b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.0.3.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.0.2.bb
rename to meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.0.3.bb
index 26bd02c..fc4f5d6 100644
--- a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.0.3.bb
@@ -6,8 +6,8 @@
 DEPENDS = "mm-common"
 
 SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/3.0/libsigc++-${PV}.tar.xz"
-SRC_URI[md5sum] = "1f93f8ed4ead38e876157834b2c57c21"
-SRC_URI[sha256sum] = "4b77676de1e74774ec456bcc6ac6f04a2791a12cc1fe07f8305d4c3c86e2f339"
+SRC_URI[md5sum] = "8dca4559e732f47710370baa8bc2e66f"
+SRC_URI[sha256sum] = "e4f4866a894bdbe053e4fb22ccc6bc4b6851fd31a4746fdd20b2cf6e87c6edb6"
 
 S = "${WORKDIR}/libsigc++-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
index 59f1703..8358e93 100644
--- a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
+++ b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
@@ -46,7 +46,7 @@
 "
 
 RDEPENDS_packagegroup-meta-oe-benchmarks = "\
-    analyze-suspend dhrystone iperf2 linpack phoronix-test-suite \
+    dhrystone iperf2 linpack phoronix-test-suite \
     tiobench bonnie++ fio iperf2 iperf3 lmbench s-suite whetstone \
     libc-bench memtester sysbench dbench iozone3 libhugetlbfs \
     nbench-byte tinymembench \
@@ -62,14 +62,15 @@
 RDEPENDS_packagegroup-meta-oe-connectivity ="\
     gammu hostapd irssi krb5 libev libimobiledevice \
     libmbim libmtp libndp libqmi libtorrent \
-    libuv libwebsockets linuxptp lirc loudmouth \
+    libuv libwebsockets linuxptp loudmouth \
     modemmanager mosh  \
     paho-mqtt-c phonet-utils rabbitmq-c rfkill rtorrent \
-    ser2net smstools3 telepathy-glib telepathy-idle thrift \
+    ser2net smstools3 telepathy-glib thrift \
     usbmuxd zabbix zeromq \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "obex-data-server", "", d)} \
     libmikmod \
     obexftp openobex libnet \
+    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "telepathy-idle", "", d)} \
     "
 RDEPENDS_packagegroup-meta-oe-connectivity_append_libc-glibc = " wvstreams wvdial"
 
@@ -100,24 +101,25 @@
 
 RDEPENDS_packagegroup-meta-oe-dbs ="\
     leveldb libdbi mariadb mariadb-native \
-    mysql-python postgresql psqlodbc rocksdb soci \
+    postgresql psqlodbc rocksdb soci \
     sqlite \
+    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "mysql-python", "", d)} \
     "
 
 RDEPENDS_packagegroup-meta-oe-devtools ="\
     android-tools android-tools-conf bootchart breakpad \
     capnproto cgdb cscope ctags \
     debootstrap dmalloc flatbuffers \
-    giflib icon-slicer iptraf-ng jq jsoncpp jsonrpc json-spirit \
+    giflib grpc icon-slicer iptraf-ng jq jsoncpp jsonrpc json-spirit \
     kconfig-frontends lemon libedit libgee libsombok3 \
     libubox log4cplus lshw ltrace lua mcpp memstat mercurial \
-    mpich msgpack-c nlohmann-json nodejs openocd pax-utils \
+    mpich msgpack-c nlohmann-json openocd pax-utils \
     ipc-run libdbd-mysql-perl libdbi-perl libio-pty-perl php \
-    protobuf protobuf-c python3-distutils-extra \
-    python-cpuset python-distutils-extra python-futures python-pygobject \
-    rapidjson serialcheck sip3 sip tclap uftrace uw-imap valijson \
+    protobuf protobuf-c \
+    rapidjson serialcheck sip3 tclap uftrace uw-imap valijson \
     xmlrpc-c yajl yasm \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "geany geany-plugins glade tk", "", d)} \
+    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "nodejs", "", d)} \
     "
 
 RDEPENDS_packagegroup-meta-oe-devtools_remove_armv5 = "uftrace nodejs"
@@ -127,19 +129,19 @@
 RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc = "android-tools breakpad uftrace lshw"
 RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc64 = "android-tools uftrace lshw"
 RDEPENDS_packagegroup-meta-oe-devtools_remove_powerpc64le = "android-tools uftrace lshw"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv64 = "nodejs uftrace lshw"
-RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv32 = "nodejs uftrace lshw"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv64 = "breakpad ltrace nodejs uftrace lshw"
+RDEPENDS_packagegroup-meta-oe-devtools_remove_riscv32 = "breakpad ltrace nodejs uftrace lshw"
 
 RDEPENDS_packagegroup-meta-oe-extended ="\
     byacc cfengine cfengine-masterfiles cmpi-bindings \
     ddrescue dialog dumb-init enscript fluentbit \
     haveged hexedit hiredis hplip hwloc indent iotop isomd5sum \
-    jansson konkretcmpi lcdproc libblockdev libcec libconfig \
+    jansson konkretcmpi libblockdev libcec libconfig \
     libdivecomputer libplist libusbmuxd \
     liblockfile liblogging liblognorm libmodbus libmodbus \
     libpwquality libqb libuio \
     lockfile-progs logwatch lprng mailx md5deep \
-    mozjs mraa nana nicstat \
+    mraa nana nicstat \
     p7zip p8platform libfile-fnmatch-perl \
     rarpd redis rrdtool libfastjson librelp rsyslog sanlock \
     sblim-cmpi-devel sblim-sfc-common sblim-sfcc \
@@ -153,7 +155,7 @@
     ${@bb.utils.contains("DISTRO_FEATURES", "pam", "pam-ssh-agent-auth openwsman sblim-sfcb ", "", d)} \
     ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "polkit polkit-group-rule-datetime ", "", d)} \
     ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "polkit-group-rule-network ", "", d)} \
-    ${@bb.utils.contains("BBPATH", "meta-python", "openlmi-tools", "", d)} \
+    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "openlmi-tools", "", d)} \
     "
 RDEPENDS_packagegroup-meta-oe-extended_remove_mipsarch = "upm mraa tiptop"
 RDEPENDS_packagegroup-meta-oe-extended_remove_powerpc = "upm mraa"
@@ -161,7 +163,6 @@
 RDEPENDS_packagegroup-meta-oe-extended_remove_powerpc64le = "upm mraa"
 RDEPENDS_packagegroup-meta-oe-extended_remove_riscv64 = "upm mraa tiptop"
 RDEPENDS_packagegroup-meta-oe-extended_remove_riscv32 = "upm mraa tiptop"
-RDEPENDS_packagegroup-meta-oe-extended_remove_libc-musl = "lcdproc"
 
 RDEPENDS_packagegroup-meta-oe-gnome ="\
     atkmm gnome-common gnome-doc-utils-stub gtkmm \
@@ -169,8 +170,9 @@
     "
 
 RDEPENDS_packagegroup-meta-oe-graphics ="\
-    babl cairomm dietsplash directfb directfb-examples dnfdragora \
-    fbgrab fbida fontforge fvwm gegl gimp glm gphoto2 libgphoto2 \
+    cairomm dietsplash directfb directfb-examples \
+    ${@bb.utils.contains("PACKAGE_CLASSES", "package_rpm", "dnfdragora dnf-plugin-tui", "", d)} \
+    fbgrab fbida fontforge fvwm glm gphoto2 libgphoto2 \
     gtkperf jasper leptonica libmng libsdl2-image libsdl2-mixer libsdl2-net \
     libsdl-gfx libsdl-image libsdl-mixer libsdl-net libsdl-ttf \
     libvncserver libyui libyui-ncurses lxdm numlockx openbox openjpeg \
@@ -187,15 +189,23 @@
     ${@bb.utils.contains("DISTRO_FEATURES", "opengl", "freeglut libsdl2-ttf", "", d)} \
     "
 
+
+
 RDEPENDS_packagegroup-meta-oe-kernel ="\
     agent-proxy broadcom-bt-firmware cpupower \
     crash ipmitool minicoredumper oprofile \
     "
+RDEPENDS_packagegroup-meta-oe-kernel_append_x86 = " pm-graph "
+RDEPENDS_packagegroup-meta-oe-kernel_append_x86-64 = " pm-graph "
+
 RDEPENDS_packagegroup-meta-oe-kernel_remove_libc-musl = "crash minicoredumper"
 
 RDEPENDS_packagegroup-meta-oe-kernel_remove_mips64 = "crash"
 RDEPENDS_packagegroup-meta-oe-kernel_remove_mips64el = "crash"
 
+RDEPENDS_packagegroup-meta-oe-kernel_remove_riscv64 = "crash oprofile"
+RDEPENDS_packagegroup-meta-oe-kernel_remove_riscv32 = "crash oprofile"
+
 RDEPENDS_packagegroup-meta-oe-multimedia ="\
     alsa-oss audiofile cdrkit id3lib \
     a2jmidid jack libass libburn libcdio libcdio-paranoia \
@@ -230,9 +240,9 @@
 NE10_armv7ve = "ne10"
 
 RDEPENDS_packagegroup-meta-oe-support ="\
-    anthy asio atop augeas avro-c bdwgc frame grail \
+    anthy asio atop augeas avro-c bdwgc frame grail c-ares \
     ccid ceres-solver ckermit cpprest ctapi-common daemonize \
-    daemontools debsums devmem2 dfu-util dfu-util-native digitemp \
+    daemontools devmem2 dfu-util dfu-util-native digitemp \
     dstat eject enca epeg espeak fbset fbset-modes \
     fftw fltk-native gd gflags glog gnulib gperftools \
     gpm gradm gsl gsoap hddtemp hidapi htop hunspell hwdata iksemel \
@@ -241,18 +251,18 @@
     libgpiod libiio libjs-jquery libjs-sizzle liblinebreak libmicrohttpd \
     libmxml liboauth libol liboop libp11 libraw1394 libsmi libsoc libssh2 \
     libssh libtar libteam libtinyxml2 libtinyxml libusbg libusb-compat libutempter \
-    links lio-utils lockdev log4c log4cpp logwarn libdevmapper lvm2 \
+    links lockdev log4c log4cpp logwarn libdevmapper lvm2 \
     mailcap mbuffer mg minini \
     multipath-tools nano neon nmon numactl onig openct openldap \
     opensc wbxml2 p910nd pcsc-lite picocom libotr pidgin \
     pngcheck poco poppler poppler-data portaudio-v19 pps-tools \
-    pv pxaregs raptor2 rdfind read-edid rsnapshot s3c24xx-gpio s3c64xx-gpio \
-    sjf2410-linux-native satyr sdparm pty-forward-native serial-forward \
-    sg3-utils sharutils smem spitools srecord ssiapi stm32flash \
+    pv pxaregs raptor2 rdfind read-edid rsnapshot \
+    satyr sdparm pty-forward-native serial-forward \
+    sg3-utils sharutils spitools srecord ssiapi stm32flash \
     syslog-ng system-config-keyboard tbb thin-provisioning-tools tokyocabinet \
     tree uhubctl unixodbc uriparser usb-modeswitch \
-    usb-modeswitch-data usbpath uthash utouch-evemu utouch-frame \
-    vim vim-tiny websocketpp wmiconfig xdelta3 xdg-user-dirs xmlstarlet \
+    usb-modeswitch-data uthash utouch-evemu utouch-frame \
+    vim vim-tiny websocketpp xdelta3 xdg-user-dirs xmlstarlet \
     zbar zile \
     ${@bb.utils.contains("DISTRO_FEATURES", "x11", "geis toscoterm uim synergy utouch-mtview links-x11 fltk pidgin-otr", "", d)} \
     libcanberra \
@@ -260,12 +270,13 @@
     procmail \
     ${@bb.utils.contains("DISTRO_FEATURES", "polkit", "udisks2 upower", "", d)} \
     ${NE10} \
+    ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "lio-utils", "", d)} \
     "
 
 RDEPENDS_packagegroup-meta-oe-support_remove_arm ="numactl"
 RDEPENDS_packagegroup-meta-oe-support_remove_mipsarch = "gperftools"
-RDEPENDS_packagegroup-meta-oe-support_remove_riscv64 = "uim"
-RDEPENDS_packagegroup-meta-oe-support_remove_riscv32 = "uim"
+RDEPENDS_packagegroup-meta-oe-support_remove_riscv64 = "gperftools uim"
+RDEPENDS_packagegroup-meta-oe-support_remove_riscv32 = "gperftools uim"
 RDEPENDS_packagegroup-meta-oe-support_remove_powerpc = "ssiapi"
 
 RDEPENDS_packagegroup-meta-oe-support-egl ="\
@@ -296,6 +307,9 @@
     libee-ptest \
     poco-ptest \
     "
+RDEPENDS_packagegroup-meta-oe-ptest-packages_remove_riscv64 = "oprofile-ptest"
+RDEPENDS_packagegroup-meta-oe-ptest-packages_remove_riscv32 = "oprofile-ptest"
+
 RDEPENDS_packagegroup-meta-oe-ptest-packages_append_x86 = "\
     mcelog-ptest \
 "
diff --git a/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.4.bb b/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.4.bb
index 305977e..8b71c2b 100644
--- a/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.4.bb
+++ b/meta-openembedded/meta-oe/recipes-core/plymouth/plymouth_0.9.4.bb
@@ -26,7 +26,8 @@
 
 EXTRA_OECONF += " --enable-shared --disable-static --disable-gtk --disable-documentation \
     --with-logo=${LOGO} \
-    ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-systemd-integration --with-system-root-install --with-systemd-tty-ask-password-agent=${base_bindir}/systemd-tty-ask-password-agent', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-systemd-integration --with-systemd-tty-ask-password-agent=${base_bindir}/systemd-tty-ask-password-agent', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge','--without-system-root-install','--with-system-root-install',d)} \
 "
 
 PACKAGECONFIG ??= "pango initrd"
diff --git a/meta-openembedded/meta-oe/recipes-core/safec/safec_3.5.bb b/meta-openembedded/meta-oe/recipes-core/safec/safec_3.5.bb
index c9ace3b..94cdb3a 100644
--- a/meta-openembedded/meta-oe/recipes-core/safec/safec_3.5.bb
+++ b/meta-openembedded/meta-oe/recipes-core/safec/safec_3.5.bb
@@ -14,6 +14,10 @@
 
 CPPFLAGS_append_libc-musl = " -D_GNU_SOURCE"
 
-COMPATIBLE_HOST = '(x86_64|i.86|powerpc|powerpc64|arm).*-linux'
+COMPATIBLE_HOST = '(x86_64|i.86|powerpc|powerpc64|arm|aarch64).*-linux'
 
-RDEPENDS_${PN} = "perl"
+PACKAGES =+ "${PN}-check"
+
+FILES_${PN}-check += "${bindir}/check_for_unsafe_apis"
+
+RDEPENDS_${PN}-check += "perl"
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.7.6/run-ptest b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.1/run-ptest
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.7.6/run-ptest
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.1/run-ptest
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools-native_0.7.6.bb b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.1.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools-native_0.7.6.bb
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.1.bb
index 6492c23..9eaec0f 100644
--- a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools-native_0.7.6.bb
+++ b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-tools_0.8.1.bb
@@ -4,11 +4,13 @@
 LICENSE = "LGPLv2.1"
 LIC_FILES_CHKSUM = "file://${S}/COPYING;md5=1803fa9c2c3ce8cb06b4861d75310742"
 
-inherit cmake native
+inherit cmake
 
 DEPENDS += "expat"
 
-SRCREV = "5121d46eed42231285c18d317a9f48e0b2849d5e"
+SRCREV = "3a4f343fb924650e7639660efa5f143961162044"
 SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master;subpath=tools"
 
 S = "${WORKDIR}/tools"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.7.6.bb b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.1.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.7.6.bb
rename to meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.1.bb
index 57774cb..c4d63fd 100644
--- a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.7.6.bb
+++ b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.1.bb
@@ -16,7 +16,7 @@
 
 DEPENDS += "expat"
 
-SRCREV = "5121d46eed42231285c18d317a9f48e0b2849d5e"
+SRCREV = "3a4f343fb924650e7639660efa5f143961162044"
 SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master"
 SRC_URI += "file://run-ptest"
 
diff --git a/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.13.0.bb b/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.14.0.bb
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.13.0.bb
rename to meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.14.0.bb
index 0854bd6..42e89f6 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.13.0.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.14.0.bb
@@ -5,8 +5,8 @@
 SECTION = "libs"
 
 SRC_URI = "https://botan.randombit.net/releases/Botan-${PV}.tar.xz"
-SRC_URI[md5sum] = "9f90c7d523778be5f23f3ce79046ba35"
-SRC_URI[sha256sum] = "f57ae42a41e1091bca58f44f41addebd9a390b651603952c881ec89d50187e90"
+SRC_URI[md5sum] = "ebc68c08b99bbc4b4fc9bdbfad398b02"
+SRC_URI[sha256sum] = "0c10f12b424a40ee19bde00292098e201d7498535c062d8d5b586d07861a54b5"
 
 S = "${WORKDIR}/Botan-${PV}"
 
@@ -19,14 +19,15 @@
 
 do_configure() {
 	python3 ${S}/configure.py \
-	--prefix="${D}${prefix}" \
+	--prefix="${D}${exec_prefix}" \
+	--libdir="${D}${libdir}" \
 	--cpu="${CPU}" \
 	--cc-bin="${CXX}" \
 	--cxxflags="${CXXFLAGS}" \
 	--ldflags="${LDFLAGS}" \
 	--with-endian=${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', 'little', 'big', d)} \
 	${@bb.utils.contains("TUNE_FEATURES","neon","","--disable-neon",d)} \
-	--with-sysroot-dir=${STAGING_DIR_TARGET} \
+	--with-sysroot-dir=${STAGING_DIR_HOST} \
 	--with-build-dir="${B}" \
 	--optimize-for-size \
 	--with-stack-protector \
diff --git a/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.2.2.bb b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.1.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.2.2.bb
rename to meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.1.bb
index 479b9eb..ec375fe 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.2.2.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/cryptsetup/cryptsetup_2.3.1.bb
@@ -21,8 +21,8 @@
 "
 
 SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/v${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}/${BP}.tar.xz"
-SRC_URI[md5sum] = "2b64ca9ea16e823df359eacf9c02414b"
-SRC_URI[sha256sum] = "2af0ec9551ab9c870074cae9d3f68d82cab004f4095fa89db0e4413713424a46"
+SRC_URI[md5sum] = "cef482c0579f34d9524311ac70c0875f"
+SRC_URI[sha256sum] = "92aba4d559a2cf7043faed92e0f22c5addea36bd63f8c039ba5a8f3a159fe7d2"
 
 inherit autotools gettext pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.25.1.bb b/meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.26.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.25.1.bb
rename to meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.26.bb
index 271f2ea..9b6e7cc 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.25.1.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/pkcs11-helper/pkcs11-helper_1.26.bb
@@ -18,8 +18,10 @@
 SRC_URI = "git://github.com/OpenSC/${BPN}.git"
 
 S = "${WORKDIR}/git"
-# v1.25.1
-SRCREV = "2713cb09dcd90104cb7bceb5f14cd6f90834f7b1"
+# v1.26
+SRCREV = "c7a0cfa08ddc75d963a835d3588170af0e5f1115"
+
+UPSTREAM_CHECK_GITTAGREGEX = "pkcs11-helper-(?P<pver>\d+(\.\d+)+)"
 
 DEPENDS = "zlib nettle gnutls gmp openssl nss nspr"
 
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_10.4.11.bb b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_10.4.12.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_10.4.11.bb
rename to meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb-native_10.4.12.bb
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
index 23de69d..95f5acb 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb.inc
@@ -21,8 +21,8 @@
            file://0001-Fix-build-breakage-from-lock_guard-error-6161.patch \
            file://0001-Fix-library-LZ4-lookup.patch \
           "
-SRC_URI[md5sum] = "d0de881ab8ead46928cafb7d558535c1"
-SRC_URI[sha256sum] = "4c076232b99433b09eb3c6d62f607192b3474d022703699b8f6aef4e79de3fb9"
+SRC_URI[md5sum] = "97d7c0f508c04a31c138fdb24e95dbc4"
+SRC_URI[sha256sum] = "fef1e1d38aa253dd8a51006bd15aad184912fce31c446bb69434fcde735aa208"
 
 UPSTREAM_CHECK_URI = "https://github.com/MariaDB/server/releases"
 
@@ -168,6 +168,10 @@
     if [ -f ${D}${datadir}/doc/README ]; then
         mv ${D}${datadir}/doc/README ${D}${datadir}/doc/${PN}/
     fi
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
+        mv ${D}/lib/security ${D}/${libdir}
+        rmdir --ignore-fail-on-non-empty ${D}/lib
+    fi
 }
 
 PACKAGES = "${PN}-dbg ${PN} \
@@ -299,11 +303,14 @@
     ${sbindir}/ndbd \
     ${sbindir}/ndb_mgmd \
     ${libdir}/plugin/*.so \
+    ${libdir}/security/*.so \
+    ${libdir}/plugin/auth_pam_tool_dir/auth_pam_tool \
     ${datadir}/mysql/ \
     ${localstatedir}/mysql/ \
     ${sysconfdir}/init.d/mysqld \
     ${sysconfdir}/my.cnf \
     ${sysconfdir}/my.cnf.d/server.cnf \
+    ${sysconfdir}/security/user_map.conf \
     ${sysconfdir}/tmpfiles.d"
 
 DESCRIPTION_${PN}-leftovers = "unpackaged and probably unneeded files for ${PN}"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-arm-atomic.patch b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-arm-atomic.patch
index 185b7b7..05b0cf8 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-arm-atomic.patch
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/fix-arm-atomic.patch
@@ -1,6 +1,6 @@
-From ffaaf4d43ebf2ef6d0229a60f407c1f5a06e5c53 Mon Sep 17 00:00:00 2001
+From f447aca534d1a12809eeb146e8220d305cc3884d Mon Sep 17 00:00:00 2001
 From: Mingli Yu <mingli.yu@windriver.com>
-Date: Fri, 15 Mar 2019 01:46:05 -0700
+Date: Thu, 9 Apr 2020 14:07:19 +0800
 Subject: [PATCH] build_rocksdb.cmake: fix atomic support on arm
 
 Check to link with libatomic to enable C11 atomics support
@@ -10,14 +10,16 @@
 
 Upstream-Status: Pending
 
-Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
 ---
  storage/rocksdb/build_rocksdb.cmake | 3 +++
  1 file changed, 3 insertions(+)
 
+diff --git a/storage/rocksdb/build_rocksdb.cmake b/storage/rocksdb/build_rocksdb.cmake
+index d7895b0..3bcd52a 100644
 --- a/storage/rocksdb/build_rocksdb.cmake
 +++ b/storage/rocksdb/build_rocksdb.cmake
-@@ -470,6 +470,9 @@ list(APPEND SOURCES ${CMAKE_CURRENT_BINA
+@@ -470,6 +470,9 @@ list(APPEND SOURCES ${CMAKE_CURRENT_BINARY_DIR}/build_version.cc)
  
  ADD_CONVENIENCE_LIBRARY(rocksdblib ${SOURCES})
  target_link_libraries(rocksdblib ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
@@ -25,5 +27,8 @@
 +  TARGET_LINK_LIBRARIES(rocksdblib atomic)
 +ENDIF()
  IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
-   set_target_properties(rocksdblib PROPERTIES COMPILE_FLAGS "-fPIC -fno-builtin-memcmp")
+   set_target_properties(rocksdblib PROPERTIES COMPILE_FLAGS "-fPIC -fno-builtin-memcmp -Wno-error")
  endif()
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.4.11.bb b/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.4.12.bb
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.4.11.bb
rename to meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb_10.4.12.bb
diff --git a/meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb b/meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb
index f2faec1..4617da8 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/mysql/mysql-python_1.2.5.bb
@@ -16,4 +16,9 @@
 
 S = "${WORKDIR}/${SRCNAME}-${PV}"
 
-inherit setuptools
+inherit ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "setuptools", "", d)}
+
+python() {
+    if 'meta-python2' not in d.getVar('BBFILE_COLLECTIONS').split():
+        raise bb.parse.SkipRecipe('Requires meta-python2 to be present.')
+}
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
index 91d0275..d35711c 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql.inc
@@ -37,7 +37,7 @@
 # LDFLAGS for shared libraries
 export LDFLAGS_SL = "${LDFLAGS}"
 
-inherit autotools pkgconfig perlnative pythonnative useradd update-rc.d systemd gettext cpan-base
+inherit autotools pkgconfig perlnative python3native useradd update-rc.d systemd gettext cpan-base
 
 CFLAGS += "-I${STAGING_INCDIR}/${PYTHON_DIR} -I${STAGING_INCDIR}/tcl8.6"
 
@@ -58,7 +58,7 @@
 PACKAGECONFIG ??= "${enable_pam} openssl python uuid libxml tcl nls libxml perl"
 PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,"
 PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,"
-PACKAGECONFIG[python] = "--with-python,--without-python,python,python"
+PACKAGECONFIG[python] = "--with-python,--without-python,python3,python3"
 PACKAGECONFIG[uuid] = "--with-uuid=e2fs,--without-uuid,util-linux,"
 PACKAGECONFIG[tcl] = "--with-tcl --with-tclconfig=${STAGING_BINDIR_CROSS},--without-tcl,tcl tcl-native,"
 PACKAGECONFIG[nls] = "--enable-nls,--disable-nls,,"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.1.bb b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.1.bb
deleted file mode 100644
index 4868519..0000000
--- a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.1.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require postgresql.inc
-
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=87da2b84884860b71f5f24ab37e7da78"
-
-SRC_URI += "\
-   file://not-check-libperl.patch \
-   file://0001-Add-support-for-RISC-V.patch \
-   file://0001-Improve-reproducibility.patch \
-"
-
-SRC_URI[md5sum] = "2ee1bd4ec5f49363a3f456f07e599b41"
-SRC_URI[sha256sum] = "a09bf3abbaf6763980d0f8acbb943b7629a8b20073de18d867aecdb7988483ed"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.2.bb b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.2.bb
new file mode 100644
index 0000000..0613e50
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_12.2.bb
@@ -0,0 +1,12 @@
+require postgresql.inc
+
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=fc4ce21960f0c561460d750bc270d11f"
+
+SRC_URI += "\
+   file://not-check-libperl.patch \
+   file://0001-Add-support-for-RISC-V.patch \
+   file://0001-Improve-reproducibility.patch \
+"
+
+SRC_URI[md5sum] = "a88ceea8ecf2741307f663e4539b58b7"
+SRC_URI[sha256sum] = "ad1dcc4c4fc500786b745635a9e1eba950195ce20b8913f50345bb7d5369b5de"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-Fix-build-breakage-from-lock_guard-error-6161.patch b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-Fix-build-breakage-from-lock_guard-error-6161.patch
deleted file mode 100644
index ac87d0c..0000000
--- a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-Fix-build-breakage-from-lock_guard-error-6161.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From b626703de7ece507f360507e49d3ecb448b12e07 Mon Sep 17 00:00:00 2001
-From: Maysam Yabandeh <myabandeh@fb.com>
-Date: Thu, 12 Dec 2019 13:48:50 -0800
-Subject: [PATCH] Fix build breakage from lock_guard error (#6161)
-
-Summary:
-This change fixes a source issue that caused compile time error which breaks build for many fbcode services in that setup. The size() member function of channel is a const member, so member variables accessed within it are implicitly const as well. This caused error when clang fails to resolve to a constructor that takes std::mutex because the suitable constructor got rejected due to loss of constness for its argument. The fix is to add mutable modifier to the lock_ member of channel.
-Pull Request resolved: https://github.com/facebook/rocksdb/pull/6161
-
-Differential Revision: D18967685
-
-Pulled By: maysamyabandeh
-
-Upstream-Status: Backport
-
-fbshipit-source-id: 698b6a5153c3c92eeacb842c467aa28cc350d432
----
- util/channel.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/util/channel.h b/util/channel.h
-index 0225482c0..a8a47680a 100644
---- a/util/channel.h
-+++ b/util/channel.h
-@@ -60,7 +60,7 @@ class channel {
- 
-  private:
-   std::condition_variable cv_;
--  std::mutex lock_;
-+  mutable std::mutex lock_;
-   std::queue<T> buffer_;
-   bool eof_;
- };
--- 
-2.24.1
-
diff --git a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-cmake-Add-check-for-atomic-support.patch b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-cmake-Add-check-for-atomic-support.patch
new file mode 100644
index 0000000..9bfb1f3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-cmake-Add-check-for-atomic-support.patch
@@ -0,0 +1,115 @@
+From ba0a0e54d9544babbd3963891f4e3200dd5583f5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 18 Mar 2020 15:10:37 -0700
+Subject: [PATCH] cmake: Add check for atomic support
+
+Detect if libatomic should be linked in or compiler and platform can
+provide the needed atomic instrinsics, this helps build on certain
+platforms like mips or clang/i386
+
+Fixes
+
+| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_exchange_8'
+| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_fetch_or_8'
+| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_compare_exchange_8'
+| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_fetch_sub_8'
+| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_load_8'
+| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_store_8'
+| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_fetch_add_8'
+
+Upstream-Status: Submitted [https://github.com/facebook/rocksdb/pull/6555]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt                  |  6 +++
+ cmake/modules/CheckAtomic.cmake | 69 +++++++++++++++++++++++++++++++++
+ 2 files changed, 75 insertions(+)
+ create mode 100644 cmake/modules/CheckAtomic.cmake
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -780,7 +780,13 @@ if(WIN32)
+   set(SYSTEM_LIBS ${SYSTEM_LIBS} shlwapi.lib rpcrt4.lib)
+   set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
+ else()
++  # check if linking against libatomic is necessary
++  include(CheckAtomic)
++
+   set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT})
++  if(HAVE_CXX_ATOMIC_WITH_LIB OR HAVE_CXX_ATOMICS64_WITH_LIB)
++    set(SYSTEM_LIBS ${SYSTEM_LIBS} atomic)
++  endif()
+   set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})
+ 
+   add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES})
+--- /dev/null
++++ b/cmake/modules/CheckAtomic.cmake
+@@ -0,0 +1,69 @@
++# Checks if atomic operations are supported natively or if linking against
++# libatomic is needed.
++
++# Check inspired by LLVMs cmake/modules/CheckAtomic.cmake
++
++INCLUDE(CheckCXXSourceCompiles)
++INCLUDE(CheckLibraryExists)
++
++function(check_working_cxx_atomics varname)
++  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
++  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
++  CHECK_CXX_SOURCE_COMPILES("
++#include <atomic>
++std::atomic<int> x;
++int main() {
++  return x;
++}
++" ${varname})
++  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++endfunction(check_working_cxx_atomics)
++
++function(check_working_cxx_atomics64 varname)
++  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
++  set(CMAKE_REQUIRED_FLAGS "-std=c++11 ${CMAKE_REQUIRED_FLAGS}")
++  CHECK_CXX_SOURCE_COMPILES("
++#include <atomic>
++#include <cstdint>
++std::atomic<uint64_t> x (0);
++std::atomic<double> y (0);
++int main() {
++  uint64_t i = x.load(std::memory_order_relaxed);
++  return int(y);
++}
++" ${varname})
++  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++endfunction(check_working_cxx_atomics64)
++
++# Check if atomics work without libatomic
++check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
++
++if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
++  check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
++  if( HAVE_LIBATOMIC )
++    list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
++    check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)
++    if (NOT HAVE_CXX_ATOMICS_WITH_LIB)
++      message(FATAL_ERROR "Host compiler must support std::atomic!")
++    endif()
++  else()
++    message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")
++  endif()
++endif()
++
++# Check if 64bit atomics work without libatomic
++check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++
++if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++  check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64)
++  if(HAVE_CXX_LIBATOMICS64)
++    list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
++    check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB)
++    if (NOT HAVE_CXX_ATOMICS64_WITH_LIB)
++      message(FATAL_ERROR "Host compiler must support std::atomic!")
++    endif()
++  else()
++    message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")
++  endif()
++endif()
++
diff --git a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
index 713d5bb..b9038df 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
@@ -6,13 +6,13 @@
                     file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://LICENSE.leveldb;md5=fb04ff57a14f308f2eed4a9b87d45837"
 
-SRCREV = "4cfbd87afd08a16df28436fb990ef6b154ee6114"
-SRCBRANCH = "6.5.fb"
-PV = "6.5.2"
+SRCREV = "551a110918493a19d11243f53408b97485de1411"
+SRCBRANCH = "6.6.fb"
+PV = "6.6.4"
 
 SRC_URI = "git://github.com/facebook/${BPN}.git;branch=${SRCBRANCH} \
-           file://0001-Fix-build-breakage-from-lock_guard-error-6161.patch \
            file://0001-db-write_thread.cc-Initialize-state.patch \
+           file://0001-cmake-Add-check-for-atomic-support.patch \
           "
 
 S = "${WORKDIR}/git"
@@ -39,3 +39,5 @@
     # fix for qa check buildpaths
     sed -i "s#${RECIPE_SYSROOT}##g" ${D}${libdir}/cmake/rocksdb/RocksDBTargets.cmake
 }
+
+LDFLAGS_append_riscv64 = " -pthread"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-Add-RISCV-support-to-GetProgramCounter.patch b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-Add-RISCV-support-to-GetProgramCounter.patch
new file mode 100644
index 0000000..95ec070
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-Add-RISCV-support-to-GetProgramCounter.patch
@@ -0,0 +1,29 @@
+From 983eeae0792946fe5c090f95164c892ec6db5cc4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 16 Feb 2020 16:22:53 -0800
+Subject: [PATCH] Add RISCV support to GetProgramCounter()
+
+Identify PC register from signal context
+
+Upstream-Status: Submitted [https://github.com/abseil/abseil-cpp/pull/621]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ absl/debugging/internal/examine_stack.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/absl/debugging/internal/examine_stack.cc b/absl/debugging/internal/examine_stack.cc
+index 4739fbc..fb77450 100644
+--- a/absl/debugging/internal/examine_stack.cc
++++ b/absl/debugging/internal/examine_stack.cc
+@@ -53,6 +53,8 @@ void* GetProgramCounter(void* vuc) {
+     return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]);
+ #elif defined(__powerpc__)
+     return reinterpret_cast<void*>(context->uc_mcontext.regs->nip);
++#elif defined(__riscv)
++    return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]);
+ #elif defined(__s390__) && !defined(__s390x__)
+     return reinterpret_cast<void*>(context->uc_mcontext.psw.addr & 0x7fffffff);
+ #elif defined(__s390__) && defined(__s390x__)
+-- 
+2.25.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-Remove-maes-option-from-cross-compilation.patch b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-Remove-maes-option-from-cross-compilation.patch
new file mode 100644
index 0000000..4c41cd8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-Remove-maes-option-from-cross-compilation.patch
@@ -0,0 +1,53 @@
+From 70926666f7c5c35add363e3bcade6eaabace7206 Mon Sep 17 00:00:00 2001
+From: Sinan Kaya <sinan.kaya@microsoft.com>
+Date: Mon, 3 Feb 2020 03:25:57 +0000
+Subject: [PATCH] Remove maes option from cross-compilation
+
+---
+ absl/copts/GENERATED_AbseilCopts.cmake | 4 ----
+ absl/copts/GENERATED_copts.bzl         | 4 ----
+ absl/copts/copts.py                    | 4 ----
+ 3 files changed, 12 deletions(-)
+
+diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake
+index 01bd40b..af99694 100644
+--- a/absl/copts/GENERATED_AbseilCopts.cmake
++++ b/absl/copts/GENERATED_AbseilCopts.cmake
+@@ -230,7 +230,3 @@ list(APPEND ABSL_RANDOM_HWAES_MSVC_X64_FLAGS
+     "/Ob2"
+ )
+ 
+-list(APPEND ABSL_RANDOM_HWAES_X64_FLAGS
+-    "-maes"
+-    "-msse4.1"
+-)
+diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl
+index 82f332f..9a548d1 100644
+--- a/absl/copts/GENERATED_copts.bzl
++++ b/absl/copts/GENERATED_copts.bzl
+@@ -231,7 +231,3 @@ ABSL_RANDOM_HWAES_MSVC_X64_FLAGS = [
+     "/Ob2",
+ ]
+ 
+-ABSL_RANDOM_HWAES_X64_FLAGS = [
+-    "-maes",
+-    "-msse4.1",
+-]
+diff --git a/absl/copts/copts.py b/absl/copts/copts.py
+index 068abce..c2f70fb 100644
+--- a/absl/copts/copts.py
++++ b/absl/copts/copts.py
+@@ -203,10 +203,6 @@ COPT_VARS = {
+     # to improve performance of some random bit generators.
+     "ABSL_RANDOM_HWAES_ARM64_FLAGS": ["-march=armv8-a+crypto"],
+     "ABSL_RANDOM_HWAES_ARM32_FLAGS": ["-mfpu=neon"],
+-    "ABSL_RANDOM_HWAES_X64_FLAGS": [
+-        "-maes",
+-        "-msse4.1",
+-    ],
+     "ABSL_RANDOM_HWAES_MSVC_X64_FLAGS": [
+         "/O2",  # Maximize speed
+         "/Ob2",  # Aggressive inlining
+-- 
+2.23.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch
new file mode 100644
index 0000000..6bb59d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch
@@ -0,0 +1,38 @@
+From 14229e8c6f42a96e4d725124193ceefa54e5e1a4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 9 Apr 2020 13:06:27 -0700
+Subject: [PATCH] absl: always use <asm/sgidefs.h>
+
+Fixes mips/musl build, since sgidefs.h is not present on all C libraries
+but on linux asm/sgidefs.h is there and contains same definitions, using
+that makes it portable.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ absl/base/internal/direct_mmap.h | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/absl/base/internal/direct_mmap.h b/absl/base/internal/direct_mmap.h
+index 2e5e422..c515325 100644
+--- a/absl/base/internal/direct_mmap.h
++++ b/absl/base/internal/direct_mmap.h
+@@ -41,13 +41,9 @@
+ 
+ #ifdef __mips__
+ // Include definitions of the ABI currently in use.
+-#ifdef __BIONIC__
+-// Android doesn't have sgidefs.h, but does have asm/sgidefs.h, which has the
++// bionic/musl C libs don't have sgidefs.h, but do have asm/sgidefs.h, which has the
+ // definitions we need.
+ #include <asm/sgidefs.h>
+-#else
+-#include <sgidefs.h>
+-#endif  // __BIONIC__
+ #endif  // __mips__
+ 
+ // SYS_mmap and SYS_munmap are not defined in Android.
+-- 
+2.26.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0002-Add-forgotten-ABSL_HAVE_VDSO_SUPPORT-conditional.patch b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0002-Add-forgotten-ABSL_HAVE_VDSO_SUPPORT-conditional.patch
new file mode 100644
index 0000000..fab4a73
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0002-Add-forgotten-ABSL_HAVE_VDSO_SUPPORT-conditional.patch
@@ -0,0 +1,35 @@
+From 9384735383a0b8688e3f05ed23a53f18863eae20 Mon Sep 17 00:00:00 2001
+From: Sinan Kaya <sinan.kaya@microsoft.com>
+Date: Tue, 11 Feb 2020 11:36:00 -0500
+Subject: [PATCH] Add forgotten ABSL_HAVE_VDSO_SUPPORT conditional
+
+Signed-off-by: Sinan Kaya <sinan.kaya@microsoft.com>
+---
+ absl/debugging/internal/stacktrace_x86-inl.inc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/absl/debugging/internal/stacktrace_x86-inl.inc b/absl/debugging/internal/stacktrace_x86-inl.inc
+index ff0fd31..28607c3 100644
+--- a/absl/debugging/internal/stacktrace_x86-inl.inc
++++ b/absl/debugging/internal/stacktrace_x86-inl.inc
+@@ -171,6 +171,7 @@ static void **NextStackFrame(void **old_fp, const void *uc) {
+     static const unsigned char *kernel_rt_sigreturn_address = nullptr;
+     static const unsigned char *kernel_vsyscall_address = nullptr;
+     if (num_push_instructions == -1) {
++#ifdef ABSL_HAVE_VDSO_SUPPORT
+       absl::debugging_internal::VDSOSupport vdso;
+       if (vdso.IsPresent()) {
+         absl::debugging_internal::VDSOSupport::SymbolInfo
+@@ -199,6 +200,9 @@ static void **NextStackFrame(void **old_fp, const void *uc) {
+       } else {
+         num_push_instructions = 0;
+       }
++#else
++      num_push_instructions = 0;
++#endif
+     }
+     if (num_push_instructions != 0 && kernel_rt_sigreturn_address != nullptr &&
+         old_fp[1] == kernel_rt_sigreturn_address) {
+-- 
+2.20.1.windows.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0003-Add-fPIC-option.patch b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0003-Add-fPIC-option.patch
new file mode 100644
index 0000000..bb78813
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0003-Add-fPIC-option.patch
@@ -0,0 +1,27 @@
+From d7160d647c8f8847f3ea8d7b0eb222936962c1af Mon Sep 17 00:00:00 2001
+From: Sinan Kaya <sinan.kaya@microsoft.com>
+Date: Tue, 11 Feb 2020 11:58:02 -0500
+Subject: [PATCH] Add fPIC option
+
+Signed-off-by: Sinan Kaya <sinan.kaya@microsoft.com>
+---
+ CMakeLists.txt | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 74a3a4c..4f837b3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -79,6 +79,9 @@ option(ABSL_USE_GOOGLETEST_HEAD
+ 
+ option(ABSL_RUN_TESTS "If ON, Abseil tests will be run." OFF)
+ 
++# link fails on arm64 and x86-64 without this
++add_compile_options(-fPIC)
++
+ if(${ABSL_RUN_TESTS})
+   # enable CTest.  This will set BUILD_TESTING to ON unless otherwise specified
+   # on the command line
+-- 
+2.20.1.windows.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
new file mode 100644
index 0000000..9a44133
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
@@ -0,0 +1,57 @@
+SUMMARY = "Abseil is a cpp library like STL"
+DESCRIPTION = "Abseil provides pieces missing from the C++ standard. Contains \
+additional useful libraries like algorithm, container, debugging, hash, memory, \
+meta, numeric, strings, synchronization, time, types and utility"
+HOMEPAGE = "https://abseil.io/"
+SECTION = "libs"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=df52c6edb7adc22e533b2bacc3bd3915"
+
+PV = "20190808+git${SRCPV}"
+SRCREV = "aa844899c937bde5d2b24f276b59997e5b668bde"
+BRANCH = "lts_2019_08_08"
+SRC_URI = "git://github.com/abseil/abseil-cpp;branch=${BRANCH}                \
+           file://0001-Remove-maes-option-from-cross-compilation.patch        \
+           file://0002-Add-forgotten-ABSL_HAVE_VDSO_SUPPORT-conditional.patch \
+           file://0003-Add-fPIC-option.patch                                  \
+           file://0001-Add-RISCV-support-to-GetProgramCounter.patch \
+           file://0001-absl-always-use-asm-sgidefs.h.patch \
+          "
+
+S = "${WORKDIR}/git"
+
+DEPENDS_append_libc-musl = " libexecinfo "
+
+ASNEEDED_class-native = ""
+ASNEEDED_class-nativesdk = ""
+
+inherit cmake
+
+BBCLASSEXTEND = "native nativesdk"
+ALLOW_EMPTY_${PN} = "1"
+
+python () {
+    arch = d.getVar("TARGET_ARCH")
+
+    if arch == "aarch64":
+        tunes = d.getVar("TUNE_FEATURES")
+        if not tunes:
+            raise bb.parse.SkipPackage("%s-%s Needs support for crypto on armv8" % (pkgn, pkgv))
+            return
+        pkgn = d.getVar("PN")
+        pkgv = d.getVar("PV")
+        if "crypto" not in tunes:
+            raise bb.parse.SkipPackage("%s-%s Needs support for crypto on armv8" % (pkgn, pkgv))
+
+    if arch == "x86_64":
+        tunes = d.getVar("TUNE_FEATURES")
+        if not tunes:
+           raise bb.parse.SkipPackage("%s-%s Needs support for corei7 on x86_64" % (pkgn, pkgv))
+           return
+        pkgn = d.getVar("PN")
+        pkgv = d.getVar("PV")
+        if "corei7" not in tunes:
+            raise bb.parse.SkipPackage("%s-%s Needs support for corei7 on x86_64" % (pkgn, pkgv))
+
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/build/0001-Riscv-Add-risc-v-Android-config-header.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/build/0001-Riscv-Add-risc-v-Android-config-header.patch
new file mode 100644
index 0000000..57c443b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/build/0001-Riscv-Add-risc-v-Android-config-header.patch
@@ -0,0 +1,359 @@
+From 82dce13ea7b5b31c63851bd67f66072413917e73 Mon Sep 17 00:00:00 2001
+From: Chenxi Mao <maochenxi@eswin.com>
+Date: Mon, 20 Apr 2020 15:32:40 +0800
+Subject: [PATCH 1/1] Riscv: Add risc-v Android config header
+
+---
+ .../arch/linux-riscv64/AndroidConfig.h        | 340 ++++++++++++++++++
+ 1 file changed, 340 insertions(+)
+ create mode 100644 core/combo/include/arch/linux-riscv64/AndroidConfig.h
+
+diff --git a/core/combo/include/arch/linux-riscv64/AndroidConfig.h b/core/combo/include/arch/linux-riscv64/AndroidConfig.h
+new file mode 100644
+index 0000000000..bcbda8f87f
+--- /dev/null
++++ b/core/combo/include/arch/linux-riscv64/AndroidConfig.h
+@@ -0,0 +1,340 @@
++/*
++ * Copyright (C) 2013 The Android Open Source Project
++ *
++ * 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.
++ */
++
++/*
++ * Android config -- "android-aarch64".  Used for ARM aarch64 device builds.
++ */
++#ifndef _ANDROID_CONFIG_H
++#define _ANDROID_CONFIG_H
++
++/*
++ * ===========================================================================
++ *                              !!! IMPORTANT !!!
++ * ===========================================================================
++ *
++ * This file is included by ALL C/C++ source files.  Don't put anything in
++ * here unless you are absolutely certain it can't go anywhere else.
++ *
++ * Any C++ stuff must be wrapped with "#ifdef __cplusplus".  Do not use "//"
++ * comments.
++ */
++
++/*
++ * Threading model.  Choose one:
++ *
++ * HAVE_PTHREADS - use the pthreads library.
++ * HAVE_WIN32_THREADS - use Win32 thread primitives.
++ *  -- combine HAVE_CREATETHREAD, HAVE_CREATEMUTEX, and HAVE__BEGINTHREADEX
++ */
++#define HAVE_PTHREADS
++
++/*
++ * Do we have pthread_setname_np()?
++ *
++ * (HAVE_PTHREAD_SETNAME_NP is used by WebKit to enable a function with
++ * the same name but different parameters, so we can't use that here.)
++ */
++#define HAVE_ANDROID_PTHREAD_SETNAME_NP
++
++/*
++ * Do we have the futex syscall?
++ */
++#define HAVE_FUTEX
++
++/*
++ * Process creation model.  Choose one:
++ *
++ * HAVE_FORKEXEC - use fork() and exec()
++ * HAVE_WIN32_PROC - use CreateProcess()
++ */
++#define HAVE_FORKEXEC
++
++/*
++ * Process out-of-memory adjustment.  Set if running on Linux,
++ * where we can write to /proc/<pid>/oom_adj to modify the out-of-memory
++ * badness adjustment.
++ */
++#define HAVE_OOM_ADJ
++
++/*
++ * IPC model.  Choose one:
++ *
++ * HAVE_SYSV_IPC - use the classic SysV IPC mechanisms (semget, shmget).
++ * HAVE_MACOSX_IPC - use Macintosh IPC mechanisms (sem_open, mmap).
++ * HAVE_WIN32_IPC - use Win32 IPC (CreateSemaphore, CreateFileMapping).
++ * HAVE_ANDROID_IPC - use Android versions (?, mmap).
++ */
++#define HAVE_ANDROID_IPC
++
++/*
++ * Memory-mapping model. Choose one:
++ *
++ * HAVE_POSIX_FILEMAP - use the Posix sys/mmap.h
++ * HAVE_WIN32_FILEMAP - use Win32 filemaps
++ */
++#define  HAVE_POSIX_FILEMAP
++
++/*
++ * Define this if you have <termio.h>
++ */
++#define  HAVE_TERMIO_H 1
++
++/*
++ * Define this if you have <sys/sendfile.h>
++ */
++#define  HAVE_SYS_SENDFILE_H 1
++
++/*
++ * Define this if you build against MSVCRT.DLL
++ */
++/* #define HAVE_MS_C_RUNTIME */
++
++/*
++ * Define this if you have sys/uio.h
++ */
++#define  HAVE_SYS_UIO_H 1
++
++/*
++ * Define this if your platforms implements symbolic links
++ * in its filesystems
++ */
++#define HAVE_SYMLINKS
++
++/*
++ * Define this if we have localtime_r().
++ */
++/* #define HAVE_LOCALTIME_R 1 */
++
++/*
++ * Define this if we have gethostbyname_r().
++ */
++/* #define HAVE_GETHOSTBYNAME_R */
++
++/*
++ * Define this if we have ioctl().
++ */
++#define HAVE_IOCTL
++
++/*
++ * Define this if we want to use WinSock.
++ */
++/* #define HAVE_WINSOCK */
++
++/*
++ * Define this if have clock_gettime() and friends
++ */
++#define HAVE_POSIX_CLOCKS
++
++/*
++ * Define this if we have linux style epoll()
++ */
++#define HAVE_EPOLL
++
++/*
++ * Endianness of the target machine.  Choose one:
++ *
++ * HAVE_ENDIAN_H -- have endian.h header we can include.
++ * HAVE_LITTLE_ENDIAN -- we are little endian.
++ * HAVE_BIG_ENDIAN -- we are big endian.
++ */
++#define HAVE_ENDIAN_H
++#define HAVE_LITTLE_ENDIAN
++
++#define _FILE_OFFSET_BITS 64
++/* #define _LARGEFILE_SOURCE 1 */
++
++/*
++ * Define if platform has off64_t (and lseek64 and other xxx64 functions)
++ */
++#define HAVE_OFF64_T
++
++/*
++ * Defined if we have the backtrace() call for retrieving a stack trace.
++ * Needed for CallStack to operate; if not defined, CallStack is
++ * non-functional.
++ */
++#define HAVE_BACKTRACE 0
++
++/*
++ * Defined if we have the cxxabi.h header for demangling C++ symbols.  If
++ * not defined, stack crawls will be displayed with raw mangled symbols
++ */
++#define HAVE_CXXABI 0
++
++/*
++ * Defined if we have the gettid() system call.
++ */
++#define HAVE_GETTID
++
++/*
++ * Defined if we have the sched_setscheduler() call
++ */
++#define HAVE_SCHED_SETSCHEDULER
++
++/*
++ * Add any extra platform-specific defines here.
++ */
++#ifndef __linux__
++#define __linux__
++#endif
++
++/*
++ * Define if we have <malloc.h> header
++ */
++#define HAVE_MALLOC_H
++
++/*
++ * Define if we're running on *our* linux on device or emulator.
++ */
++#define HAVE_ANDROID_OS 1
++
++/*
++ * Define if we have Linux-style non-filesystem Unix Domain Sockets
++ */
++#define HAVE_LINUX_LOCAL_SOCKET_NAMESPACE 1
++
++/*
++ * Define if we have Linux's inotify in <sys/inotify.h>.
++ */
++#define HAVE_INOTIFY 1
++
++/*
++ * Define if we have madvise() in <sys/mman.h>
++ */
++#define HAVE_MADVISE 1
++
++/*
++ * Define if tm struct has tm_gmtoff field
++ */
++#define HAVE_TM_GMTOFF 1
++
++/*
++ * Define if dirent struct has d_type field
++ */
++#define HAVE_DIRENT_D_TYPE 1
++
++/*
++ * Define if libc includes Android system properties implementation.
++ */
++#define HAVE_LIBC_SYSTEM_PROPERTIES 1
++
++/*
++ * Define if system provides a system property server (should be
++ * mutually exclusive with HAVE_LIBC_SYSTEM_PROPERTIES).
++ */
++/* #define HAVE_SYSTEM_PROPERTY_SERVER */
++
++/*
++ * What CPU architecture does this platform use?
++ */
++#define ARCH_AARCH64
++
++/*
++ * Define if the size of enums is as short as possible,
++ */
++/* #define HAVE_SHORT_ENUMS */
++
++/*
++ * sprintf() format string for shared library naming.
++ */
++#define OS_SHARED_LIB_FORMAT_STR    "lib%s.so"
++
++/*
++ * type for the third argument to mincore().
++ */
++#define MINCORE_POINTER_TYPE unsigned char *
++
++/*
++ * The default path separator for the platform
++ */
++#define OS_PATH_SEPARATOR '/'
++
++/*
++ * Is the filesystem case sensitive?
++ */
++#define OS_CASE_SENSITIVE
++
++/*
++ * Define if <sys/socket.h> exists.
++ */
++#define HAVE_SYS_SOCKET_H 1
++
++/*
++ * Define if the strlcpy() function exists on the system.
++ */
++#define HAVE_STRLCPY 1
++
++/*
++ * Define if the open_memstream() function exists on the system.
++ */
++/* #define HAVE_OPEN_MEMSTREAM 1 */
++
++/*
++ * Define if the BSD funopen() function exists on the system.
++ */
++#define HAVE_FUNOPEN 1
++
++/*
++ * Define if prctl() exists
++ */
++#define HAVE_PRCTL 1
++
++/*
++ * Define if writev() exists
++ */
++#define HAVE_WRITEV 1
++
++/*
++ * Define if <stdint.h> exists.
++ */
++#define HAVE_STDINT_H 1
++
++/*
++ * Define if <stdbool.h> exists.
++ */
++#define HAVE_STDBOOL_H 1
++
++/*
++ * Define if <sched.h> exists.
++ */
++#define HAVE_SCHED_H 1
++
++/*
++ * Define if pread() exists
++ */
++#define HAVE_PREAD 1
++
++/*
++ * Define if we have st_mtim in struct stat
++ */
++#define HAVE_STAT_ST_MTIM 1
++
++/*
++ * Define if printf() supports %zd for size_t arguments
++ */
++#define HAVE_PRINTF_ZD 1
++
++/*
++ * Define to 1 if <stdlib.h> provides qsort_r() with a BSD style function prototype.
++ */
++#define HAVE_BSD_QSORT_R 0
++
++/*
++ * Define to 1 if <stdlib.h> provides qsort_r() with a GNU style function prototype.
++ */
++#define HAVE_GNU_QSORT_R 0
++
++#endif /* _ANDROID_CONFIG_H */
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/core/0013-adb-Support-riscv64.patch b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/core/0013-adb-Support-riscv64.patch
new file mode 100644
index 0000000..a8434af
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools/core/0013-adb-Support-riscv64.patch
@@ -0,0 +1,189 @@
+From 48ddf4fb999931942c359350fb31cd557514e1c6 Mon Sep 17 00:00:00 2001
+From: Chenxi Mao <maochenxi@eswin.com>
+Date: Mon, 20 Apr 2020 15:27:22 +0800
+Subject: [PATCH 1/1] adb: Support riscv64
+
+---
+ include/cutils/atomic-inline.h  |   2 +
+ include/cutils/atomic-riscv64.h | 156 ++++++++++++++++++++++++++++++++
+ 2 files changed, 158 insertions(+)
+ create mode 100644 include/cutils/atomic-riscv64.h
+
+diff --git a/include/cutils/atomic-inline.h b/include/cutils/atomic-inline.h
+index a31e913579..b5dc38209c 100644
+--- a/include/cutils/atomic-inline.h
++++ b/include/cutils/atomic-inline.h
+@@ -55,6 +55,8 @@ extern "C" {
+ #include <cutils/atomic-mips64.h>
+ #elif defined(__mips__)
+ #include <cutils/atomic-mips.h>
++#elif defined(__riscv) && __riscv_xlen == 64
++#include <cutils/atomic-riscv64.h>
+ #else
+ #error atomic operations are unsupported
+ #endif
+diff --git a/include/cutils/atomic-riscv64.h b/include/cutils/atomic-riscv64.h
+new file mode 100644
+index 0000000000..2664db5a86
+--- /dev/null
++++ b/include/cutils/atomic-riscv64.h
+@@ -0,0 +1,156 @@
++/*
++ * Copyright (C) 2014 The Android Open Source Project
++ * 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.
++ *
++ * 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.
++ */
++
++#ifndef ANDROID_CUTILS_ATOMIC_RISCV64_H
++#define ANDROID_CUTILS_ATOMIC_RISCV64_H
++
++#include <stdint.h>
++
++#ifndef ANDROID_ATOMIC_INLINE
++#define ANDROID_ATOMIC_INLINE inline __attribute__((always_inline))
++#endif
++
++/*
++   TODOAArch64: Revisit the below functions and check for potential
++   optimizations using assembly code or otherwise.
++*/
++
++extern ANDROID_ATOMIC_INLINE
++void android_compiler_barrier(void)
++{
++    __asm__ __volatile__ ("" : : : "memory");
++}
++
++extern ANDROID_ATOMIC_INLINE
++void android_memory_barrier(void)
++{
++    __asm__ __volatile__ ("fence rw,rw" : : : "memory");
++}
++
++extern ANDROID_ATOMIC_INLINE
++int32_t android_atomic_acquire_load(volatile const int32_t *ptr)
++{
++    int32_t value = *ptr;
++    android_memory_barrier();
++    return value;
++}
++
++extern ANDROID_ATOMIC_INLINE
++int32_t android_atomic_release_load(volatile const int32_t *ptr)
++{
++    android_memory_barrier();
++    return *ptr;
++}
++
++extern ANDROID_ATOMIC_INLINE
++void android_atomic_acquire_store(int32_t value, volatile int32_t *ptr)
++{
++    *ptr = value;
++    android_memory_barrier();
++}
++
++extern ANDROID_ATOMIC_INLINE
++void android_atomic_release_store(int32_t value, volatile int32_t *ptr)
++{
++    android_memory_barrier();
++    *ptr = value;
++}
++
++extern ANDROID_ATOMIC_INLINE
++int android_atomic_cas(int32_t old_value, int32_t new_value,
++                       volatile int32_t *ptr)
++{
++    return __sync_val_compare_and_swap(ptr, old_value, new_value) != old_value;
++}
++
++extern ANDROID_ATOMIC_INLINE
++int android_atomic_acquire_cas(int32_t old_value, int32_t new_value,
++                               volatile int32_t *ptr)
++{
++    int status = android_atomic_cas(old_value, new_value, ptr);
++    android_memory_barrier();
++    return status;
++}
++
++extern ANDROID_ATOMIC_INLINE
++int android_atomic_release_cas(int32_t old_value, int32_t new_value,
++                               volatile int32_t *ptr)
++{
++    android_memory_barrier();
++    return android_atomic_cas(old_value, new_value, ptr);
++}
++
++extern ANDROID_ATOMIC_INLINE
++int32_t android_atomic_add(int32_t increment, volatile int32_t *ptr)
++{
++    int32_t prev, status;
++    android_memory_barrier();
++    do {
++        prev = *ptr;
++        status = android_atomic_cas(prev, prev + increment, ptr);
++    } while (__builtin_expect(status != 0, 0));
++    return prev;
++}
++
++extern ANDROID_ATOMIC_INLINE
++int32_t android_atomic_inc(volatile int32_t *addr)
++{
++    return android_atomic_add(1, addr);
++}
++
++extern ANDROID_ATOMIC_INLINE
++int32_t android_atomic_dec(volatile int32_t *addr)
++{
++    return android_atomic_add(-1, addr);
++}
++
++extern ANDROID_ATOMIC_INLINE
++int32_t android_atomic_and(int32_t value, volatile int32_t *ptr)
++{
++    int32_t prev, status;
++    android_memory_barrier();
++    do {
++        prev = *ptr;
++        status = android_atomic_cas(prev, prev & value, ptr);
++    } while (__builtin_expect(status != 0, 0));
++    return prev;
++}
++
++extern ANDROID_ATOMIC_INLINE
++int32_t android_atomic_or(int32_t value, volatile int32_t *ptr)
++{
++    int32_t prev, status;
++    android_memory_barrier();
++    do {
++        prev = *ptr;
++        status = android_atomic_cas(prev, prev | value, ptr);
++    } while (__builtin_expect(status != 0, 0));
++    return prev;
++}
++
++#endif /* ANDROID_CUTILS_ATOMIC_RISCV_H */
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
index c0d08db..fb6125e 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
@@ -38,11 +38,13 @@
     file://core/0011-Remove-bionic-specific-calls.patch;patchdir=system/core \
     file://core/0012-Fix-implicit-declaration-of-stlcat-strlcopy-function.patch;patchdir=system/core \
     file://core/adb_libssl_11.diff;patchdir=system/core \
+    file://core/0013-adb-Support-riscv64.patch;patchdir=system/core \
     file://extras/0001-ext4_utils-remove-selinux-extensions.patch;patchdir=system/extras \
     file://extras/0002-ext4_utils-add-o-argument-to-preserve-ownership.patch;patchdir=system/extras \
     file://libselinux/0001-Remove-bionic-specific-calls.patch;patchdir=external/libselinux \
     file://libselinux/0001-libselinux-Do-not-define-gettid-if-glibc-2.30-is-use.patch;patchdir=external/libselinux \
     file://android-tools-adbd.service \
+    file://build/0001-Riscv-Add-risc-v-Android-config-header.patch;patchdir=build \
     file://gitignore \
     file://adb.mk;subdir=${BPN} \
     file://adbd.mk;subdir=${BPN} \
@@ -61,6 +63,7 @@
 
 COMPATIBLE_HOST_powerpc = "(null)"
 COMPATIBLE_HOST_powerpc64 = "(null)"
+COMPATIBLE_HOST_powerpc64le = "(null)"
 
 inherit systemd
 
@@ -93,6 +96,9 @@
       aarch64)
         export android_arch=linux-arm64
       ;;
+      riscv64)
+        export android_arch=linux-riscv64
+      ;;
       mips|mipsel)
         export android_arch=linux-mips
       ;;
diff --git a/meta-openembedded/meta-oe/recipes-devtools/autoconf-2.13/autoconf-2.13-native_2.13.bb b/meta-openembedded/meta-oe/recipes-devtools/autoconf-2.13/autoconf-2.13-native_2.13.bb
new file mode 100644
index 0000000..a54a733
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/autoconf-2.13/autoconf-2.13-native_2.13.bb
@@ -0,0 +1,67 @@
+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."
+SECTION = "devel"
+
+HOMEPAGE = "http://www.gnu.org/software/autoconf/"
+
+LICENSE = "GPLv3"
+LICENSE = "GPLv2 & GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=361b6b837cad26c6900a926b62aada5f"
+
+SRC_URI = " \
+    ${GNU_MIRROR}/autoconf/autoconf-${PV}.tar.gz \
+    file://0001-Add-config.guess-config.sub-install-to-destdir.patch \
+"
+
+S = "${WORKDIR}/${BPN}"
+SRC_URI[md5sum] = "9de56d4a161a723228220b0f425dc711"
+SRC_URI[sha256sum] = "f0611136bee505811e9ca11ca7ac188ef5323a8e2ef19cffd3edb3cf08fd791e"
+
+inherit native texinfo
+
+DEPENDS += "m4-native gnu-config-native"
+RDEPENDS_${PN} = "m4-native gnu-config-native"
+
+PERL = "${USRBINPATH}/perl"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='${PERL}'"
+
+CONFIGUREOPTS = " \
+    --build=${BUILD_SYS} \
+    --host=${HOST_SYS} \
+    --target=${TARGET_SYS} \
+    --prefix=${prefix} \
+    --exec_prefix=${exec_prefix} \
+    --bindir=${bindir} \
+    --sbindir=${sbindir} \
+    --libexecdir=${libexecdir} \
+    --datadir=${datadir} \
+    --sysconfdir=${sysconfdir} \
+    --sharedstatedir=${sharedstatedir} \
+    --localstatedir=${localstatedir} \
+    --libdir=${libdir} \
+    --includedir=${includedir} \
+    --oldincludedir=${oldincludedir} \
+    --infodir=${infodir} \
+    --mandir=${mandir} \
+    --disable-silent-rules \
+"
+
+EXTRA_OECONF += "ac_cv_path_M4=m4 ac_cv_prog_TEST_EMACS=no"
+
+do_configure() {
+    ./configure ${CONFIGUREOPTS}
+}
+
+do_install() {
+	oe_runmake 'DESTDIR=${D}' install
+
+    # avoid conflicts with standard autotools
+    ver="213"
+    for file in `find ${D}${bindir} -type f`; do
+        mv $file $file$ver
+    done
+	mv ${D}${datadir}/autoconf ${D}${datadir}/autoconf213
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/autoconf-2.13/autoconf-2.13/0001-Add-config.guess-config.sub-install-to-destdir.patch b/meta-openembedded/meta-oe/recipes-devtools/autoconf-2.13/autoconf-2.13/0001-Add-config.guess-config.sub-install-to-destdir.patch
new file mode 100644
index 0000000..f6e9ecb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/autoconf-2.13/autoconf-2.13/0001-Add-config.guess-config.sub-install-to-destdir.patch
@@ -0,0 +1,67 @@
+From 3d3e23f7b14e87849405a4e109a69b76696615fc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Wed, 11 Dec 2019 23:18:19 +0100
+Subject: [PATCH] Add config.guess config.sub / install to destdir
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [Configuration]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ Makefile.in | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index a6c94d4..4b1b708 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -137,23 +137,23 @@ installcheck: all install
+ 	cd testsuite && ${MAKE} AUTOCONF=${bindir}/autoconf $@
+ 
+ installdirs:
+-	$(SHELL) ${srcdir}/mkinstalldirs $(bindir) $(infodir) $(acdatadir)
++	$(SHELL) ${srcdir}/mkinstalldirs ${DESTDIR}$(bindir) ${DESTDIR}$(infodir) ${DESTDIR}$(acdatadir)
+ 
+ install: all $(M4FILES) acconfig.h installdirs install-info
+ 	for p in $(ASCRIPTS); do \
+-	  $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
++	  $(INSTALL_PROGRAM) $$p ${DESTDIR}$(bindir)/`echo $$p|sed '$(transform)'`; \
+ 	done
+ 	for i in $(M4FROZEN); do \
+-	  $(INSTALL_DATA) $$i $(acdatadir)/$$i; \
++	  $(INSTALL_DATA) $$i ${DESTDIR}$(acdatadir)/$$i; \
+ 	done
+ 	for i in $(M4FILES) acconfig.h; do \
+-	  $(INSTALL_DATA) $(srcdir)/$$i $(acdatadir)/$$i; \
++	  $(INSTALL_DATA) $(srcdir)/$$i ${DESTDIR}$(acdatadir)/$$i; \
+ 	done
+ 	-if test -f autoscan; then \
+-	$(INSTALL_PROGRAM) autoscan $(bindir)/`echo autoscan|sed '$(transform)'`; \
++	$(INSTALL_PROGRAM) autoscan ${DESTDIR}$(bindir)/`echo autoscan|sed '$(transform)'`; \
+ 	for i in acfunctions acheaders acidentifiers acprograms \
+-	  acmakevars; do \
+-	$(INSTALL_DATA) $(srcdir)/$$i $(acdatadir)/$$i; \
++	  acmakevars config.guess config.sub; do \
++	$(INSTALL_DATA) $(srcdir)/$$i ${DESTDIR}$(acdatadir)/$$i; \
+ 	done; \
+ 	else :; fi
+ 
+@@ -161,11 +161,11 @@ install: all $(M4FILES) acconfig.h installdirs install-info
+ install-info: info installdirs
+ 	if test -f autoconf.info; then \
+ 	  for i in *.info*; do \
+-	    $(INSTALL_DATA) $$i $(infodir)/$$i; \
++	    $(INSTALL_DATA) $$i ${DESTDIR}$(infodir)/$$i; \
+ 	  done; \
+ 	else \
+ 	  for i in $(srcdir)/*.info*; do \
+-	    $(INSTALL_DATA) $$i $(infodir)/`echo $$i | sed 's|^$(srcdir)/||'`; \
++	    $(INSTALL_DATA) $$i ${DESTDIR}$(infodir)/`echo $$i | sed 's|^$(srcdir)/||'`; \
+ 	  done; \
+ 	fi
+ 
+-- 
+2.21.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
index ff5acbe..daf262e 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/breakpad/breakpad_git.bb
@@ -49,6 +49,8 @@
 CXXFLAGS += "-D_GNU_SOURCE"
 
 COMPATIBLE_HOST_powerpc = "null"
+COMPATIBLE_HOST_riscv64 = "null"
+COMPATIBLE_HOST_riscv32 = "null"
 
 do_install_append() {
         install -d ${D}${includedir}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.7.1.bb b/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.7.1.bb
index 57e364e..9d373fc 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.7.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/cgdb/cgdb_0.7.1.bb
@@ -7,7 +7,7 @@
 
 DEPENDS = "flex-native readline ncurses"
 
-inherit autotools
+inherit autotools texinfo
 
 SRC_URI = "http://cgdb.me/files/${BP}.tar.gz \
            file://0001-Avoid-use-of-mips-which-is-reserved-on-mips.patch \
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.13.bb b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.13.bb
new file mode 100644
index 0000000..e617482
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.13.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Ultralightweight JSON parser in ANSI C"
+AUTHOR = "Dave Gamble"
+HOMEPAGE = "https://github.com/DaveGamble/cJSON"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=218947f77e8cb8e2fa02918dc41c50d0"
+
+SRC_URI = "git://github.com/DaveGamble/cJSON.git"
+SRCREV = "39853e5148dad8dc5d32ea2b00943cf4a0c6f120"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+EXTRA_OECMAKE += "\
+    -DENABLE_CJSON_UTILS=On \
+    -DENABLE_CUSTOM_COMPILER_FLAGS=OFF \
+    -DBUILD_SHARED_AND_STATIC_LIBS=On \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.84.bb b/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.84.bb
index f9ecd0e..3e46c72 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.84.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.84.bb
@@ -9,6 +9,8 @@
 SRC_URI[md5sum] = "a52f3843825377cfa4e4b3b30a567ab4"
 SRC_URI[sha256sum] = "c3f0a6bd2319110418ccb3e55a7a1b6d0edfd7528bfd2ae5d530938abe90f254"
 
+UPSTREAM_CHECK_URI = "https://github.com/AlDanial/${BPN}/releases"
+
 do_configure[noexec] = "1"
 do_compile[noexec] = "1"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb b/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb
index 19767c3..8c6cf7d 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/concurrencykit/concurrencykit_git.bb
@@ -21,6 +21,7 @@
 inherit autotools-brokensep
 
 PLAT_powerpc64 = "ppc64"
+PLAT_powerpc64le = "ppc64"
 PLAT ?= "${HOST_ARCH}"
 
 do_configure () {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20180519.bb b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20200211.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20180519.bb
rename to meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20200211.bb
index 533a000..56462a9 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20180519.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20200211.bb
@@ -8,11 +8,13 @@
 
 SRC_URI = "http://www.etallen.com/${BPN}/${BP}.src.tar.gz \
            "
-SRC_URI[md5sum] = "b3b4e44ef49575043a91def0207dcc76"
-SRC_URI[sha256sum] = "967823be36f23cbc972eb0aa882d069c1d155a5978990ac3bcf425e6a2e7ff9a"
+SRC_URI[md5sum] = "c3dda40aee78bd187929f454a3c75f35"
+SRC_URI[sha256sum] = "a570ca23ce5543fb6974abcbbde0261ea7dbfea40f4e7335b4870274315e521b"
 
 COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
 
+inherit perlnative
+
 # The install rule from the Makefile has hardcoded paths, so we duplicate
 # the actions to accommodate different paths.
 do_install () {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb b/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
index a8367b5..406494e 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
@@ -4,8 +4,8 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
 SRC_URI = "git://github.com/ubinux/dnf-plugin-tui.git;branch=master "
-SRCREV = "31d6866d5eda02be9a6bfb1fca9e9095b12eecd1"
-PV = "1.0"
+SRCREV = "c5416adeb210154dc4ccc4c3e1c5297d83ebd41e"
+PV = "1.1"
 
 SRC_URI_append_class-target = "file://oe-remote.repo.sample"
 
@@ -37,3 +37,4 @@
 "
 
 BBCLASSEXTEND = "nativesdk"
+PNBLACKLIST[dnf-plugin-tui] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build correctly without package_rpm in PACKAGE_CLASSES', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen/doxygen-native-only-check-python3.patch b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen/doxygen-native-only-check-python3.patch
new file mode 100644
index 0000000..a9650c2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen/doxygen-native-only-check-python3.patch
@@ -0,0 +1,433 @@
+It fails to compile doxygen-native when /usr/bin/python is a link to python3 on
+build host:
+
+| Failed to import the site module
+| Traceback (most recent call last):
+|   File "/usr/lib64/python3.6/site.py", line 564, in <module>
+|     main()
+|   File "/usr/lib64/python3.6/site.py", line 550, in main
+|     known_paths = addusersitepackages(known_paths)
+|   File "/usr/lib64/python3.6/site.py", line 282, in addusersitepackages
+|     user_site = getusersitepackages()
+|   File "/usr/lib64/python3.6/site.py", line 258, in getusersitepackages
+|     user_base = getuserbase() # this will also set USER_BASE
+|   File "/usr/lib64/python3.6/site.py", line 248, in getuserbase
+|     USER_BASE = get_config_var('userbase')
+|   File "/usr/lib64/python3.6/sysconfig.py", line 604, in get_config_var
+|     return get_config_vars().get(name)
+|   File "/usr/lib64/python3.6/sysconfig.py", line 553, in get_config_vars
+|     _init_posix(_CONFIG_VARS)
+|   File "/usr/lib64/python3.6/sysconfig.py", line 424, in _init_posix
+|     _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
+| ModuleNotFoundError: No module named '_sysconfigdata'
+
+Replace find_package PythonInterp with Python3 to fix this issue that
+it uses python3 from python3-native. And it also replaces the result
+variable PYTHON_EXECUTABLE with Python3_EXECUTABLE.
+
+This patch is only needded by doxygen-native.
+
+Upstream-Status: Inappropriate[oe specific]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 969ae58..604400f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -93,7 +93,7 @@ else ()
+ endif ()
+ 
+ find_program(DOT NAMES dot)
+-find_package(PythonInterp REQUIRED)
++find_package(Python3 REQUIRED)
+ find_package(FLEX REQUIRED)
+ find_package(BISON REQUIRED)
+ if (BISON_VERSION VERSION_LESS 2.7)
+diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt
+index 6aacd8b..fa197e9 100644
+--- a/addon/doxywizard/CMakeLists.txt
++++ b/addon/doxywizard/CMakeLists.txt
+@@ -58,7 +58,7 @@ set_source_files_properties(${GENERATED_SRC_WIZARD}/settings.h PROPERTIES GENERA
+ 
+ # generate version.cpp
+ add_custom_command(
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/version.py ${VERSION} > ${GENERATED_SRC_WIZARD}/version.cpp
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/version.py ${VERSION} > ${GENERATED_SRC_WIZARD}/version.cpp
+     DEPENDS ${CMAKE_SOURCE_DIR}/VERSION ${CMAKE_SOURCE_DIR}/src/version.py
+     OUTPUT ${GENERATED_SRC_WIZARD}/version.cpp
+ )
+@@ -66,7 +66,7 @@ set_source_files_properties(${GENERATED_SRC_WIZARD}/version.cpp PROPERTIES GENER
+ 
+ # generate configdoc.cpp
+ add_custom_command(
+-COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -wiz ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC_WIZARD}/configdoc.cpp
++COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -wiz ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC_WIZARD}/configdoc.cpp
+ OUTPUT ${GENERATED_SRC_WIZARD}/configdoc.cpp
+ )
+ set_source_files_properties(${GENERATED_SRC_WIZARD}/configdoc.cpp PROPERTIES GENERATED 1)
+@@ -74,7 +74,7 @@ set_source_files_properties(${GENERATED_SRC_WIZARD}/configdoc.cpp PROPERTIES GEN
+ set(LEX_FILES config_doxyw) 
+ foreach(lex_file ${LEX_FILES})
+     add_custom_command(
+-	    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/addon/doxywizard/${lex_file}.l > ${GENERATED_SRC_WIZARD}/${lex_file}.l.h
++	    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/addon/doxywizard/${lex_file}.l > ${GENERATED_SRC_WIZARD}/${lex_file}.l.h
+         DEPENDS ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/addon/doxywizard/${lex_file}.l
+ 	OUTPUT  ${GENERATED_SRC_WIZARD}/${lex_file}.l.h
+     )
+diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
+index 032c16a..332f1b2 100644
+--- a/doc/CMakeLists.txt
++++ b/doc/CMakeLists.txt
+@@ -132,7 +132,7 @@ configure_file(${CMAKE_SOURCE_DIR}/doc/doxyindexer.1      ${PROJECT_BINARY_DIR}/
+ 
+ # doc/language.doc (see tag Doxyfile:INPUT)
+ add_custom_command(
+-        COMMAND ${PYTHON_EXECUTABLE} translator.py ${CMAKE_SOURCE_DIR}
++        COMMAND ${Python3_EXECUTABLE} translator.py ${CMAKE_SOURCE_DIR}
+         DEPENDS ${PROJECT_BINARY_DIR}/doc/maintainers.txt ${PROJECT_BINARY_DIR}/doc/language.tpl ${PROJECT_BINARY_DIR}/doc/translator.py
+         OUTPUT language.doc
+         WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc
+@@ -141,7 +141,7 @@ set_source_files_properties(language.doc PROPERTIES GENERATED 1)
+ 
+ # doc/config.doc (see tag Doxyfile:INPUT)
+ add_custom_command(
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/src/configgen.py -doc ${TOP}/src/config.xml > config.doc
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/src/configgen.py -doc ${TOP}/src/config.xml > config.doc
+         DEPENDS ${TOP}/src/config.xml ${TOP}/src/configgen.py
+         OUTPUT config.doc
+         WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/doc/
+@@ -192,7 +192,7 @@ add_custom_target(docs_chm
+     COMMAND ${CMAKE_COMMAND} -E echo "    for file in files:" >> ${PROJECT_BINARY_DIR}/chm/doxygen_manual_examples_chm.py
+     COMMAND ${CMAKE_COMMAND} -E echo "        if file.endswith('.html') or file.endswith('.png') or file.endswith('.css') or file.endswith('.gif'):" >> ${PROJECT_BINARY_DIR}/chm/doxygen_manual_examples_chm.py
+     COMMAND ${CMAKE_COMMAND} -E echo "            print(os.path.join(root, file))" >> ${PROJECT_BINARY_DIR}/chm/doxygen_manual_examples_chm.py
+-    COMMAND ${CMAKE_COMMAND} -E chdir  ${PROJECT_BINARY_DIR}/chm ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/chm/doxygen_manual_examples_chm.py >> ${PROJECT_BINARY_DIR}/chm/doxygen_manual.hhp
++    COMMAND ${CMAKE_COMMAND} -E chdir  ${PROJECT_BINARY_DIR}/chm ${Python3_EXECUTABLE} ${PROJECT_BINARY_DIR}/chm/doxygen_manual_examples_chm.py >> ${PROJECT_BINARY_DIR}/chm/doxygen_manual.hhp
+     COMMAND ${CMAKE_COMMAND} -E chdir ${PROJECT_BINARY_DIR}/chm "${HTML_HELP_COMPILER}" doxygen_manual.hhp || echo > nul
+     COMMAND ${CMAKE_COMMAND} -E rename ${PROJECT_BINARY_DIR}/chm/index.chm ${PROJECT_BINARY_DIR}/chm/doxygen_manual.chm
+         DEPENDS ${PROJECT_BINARY_DIR}/doc/language.doc ${PROJECT_BINARY_DIR}/doc/config.doc
+diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
+index 967f3d4..a8d1aad 100644
+--- a/examples/CMakeLists.txt
++++ b/examples/CMakeLists.txt
+@@ -52,196 +52,196 @@ add_custom_target(examples
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen class.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman_doc.tex
+ 	DEPENDS doxygen class.h class.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/class/html/index.html ${PROJECT_BINARY_DIR}/html/examples/class/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen define.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman_doc.tex
+ 	DEPENDS doxygen define.h define.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/define/html/index.html ${PROJECT_BINARY_DIR}/html/examples/define/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen enum.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman_doc.tex
+ 	DEPENDS doxygen enum.h enum.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/enum/html/index.html ${PROJECT_BINARY_DIR}/html/examples/enum/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen file.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman_doc.tex
+ 	DEPENDS doxygen file.h file.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/file/html/index.html ${PROJECT_BINARY_DIR}/html/examples/file/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen func.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman_doc.tex
+ 	DEPENDS doxygen func.h func.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/func/html/index.html ${PROJECT_BINARY_DIR}/html/examples/func/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen javadoc-banner.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman_doc.tex
+ 	DEPENDS doxygen javadoc-banner.h javadoc-banner.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/html/index.html ${PROJECT_BINARY_DIR}/html/examples/javadoc-banner/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen page.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman_doc.tex
+ 	DEPENDS doxygen page.doc page.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/page/html/index.html ${PROJECT_BINARY_DIR}/html/examples/page/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen relates.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman_doc.tex
+ 	DEPENDS doxygen relates.cpp relates.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/relates/html/index.html ${PROJECT_BINARY_DIR}/html/examples/relates/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen author.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman_doc.tex
+ 	DEPENDS doxygen author.cpp author.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/author/html/index.html ${PROJECT_BINARY_DIR}/html/examples/author/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen par.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman_doc.tex
+ 	DEPENDS doxygen par.cpp par.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/par/html/index.html ${PROJECT_BINARY_DIR}/html/examples/par/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen overload.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman_doc.tex
+ 	DEPENDS doxygen overload.cpp overload.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/overload/html/index.html ${PROJECT_BINARY_DIR}/html/examples/overload/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen example.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman_doc.tex
+ 	DEPENDS doxygen example.cpp example_test.cpp example.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/example/html/index.html ${PROJECT_BINARY_DIR}/html/examples/example/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen include.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman_doc.tex
+ 	DEPENDS doxygen include.cpp include_test.cpp include.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/include/html/index.html ${PROJECT_BINARY_DIR}/html/examples/include/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen qtstyle.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman_doc.tex
+ 	DEPENDS doxygen qtstyle.cpp qtstyle.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/qtstyle/html/index.html ${PROJECT_BINARY_DIR}/html/examples/qtstyle/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen jdstyle.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman_doc.tex
+ 	DEPENDS doxygen jdstyle.cpp jdstyle.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/jdstyle/html/index.html ${PROJECT_BINARY_DIR}/html/examples/jdstyle/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen structcmd.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman_doc.tex
+ 	DEPENDS doxygen structcmd.h structcmd.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/structcmd/html/index.html ${PROJECT_BINARY_DIR}/html/examples/structcmd/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen autolink.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman_doc.tex
+ 	DEPENDS doxygen autolink.cpp autolink.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/autolink/html/index.html ${PROJECT_BINARY_DIR}/html/examples/autolink/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen tag.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
+ 	DEPENDS doxygen tag.cpp tag.cfg ${PROJECT_BINARY_DIR}/html/examples/example/html/index.html ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/tag/html/index.html ${PROJECT_BINARY_DIR}/html/examples/tag/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen restypedef.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman_doc.tex
+ 	DEPENDS doxygen restypedef.cpp restypedef.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/restypedef/html/index.html ${PROJECT_BINARY_DIR}/html/examples/restypedef/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen afterdoc.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman_doc.tex
+ 	DEPENDS doxygen afterdoc.h afterdoc.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/afterdoc/html/index.html ${PROJECT_BINARY_DIR}/html/examples/afterdoc/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen templ.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
+ 	DEPENDS doxygen templ.cpp templ.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/template/html/index.html ${PROJECT_BINARY_DIR}/html/examples/template/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen group.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman_doc.tex
+ 	DEPENDS doxygen group.cpp group.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/group/html/index.html ${PROJECT_BINARY_DIR}/html/examples/group/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen memgrp.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman_doc.tex
+ 	DEPENDS doxygen memgrp.cpp memgrp.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/memgrp/html/index.html ${PROJECT_BINARY_DIR}/html/examples/memgrp/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen pyexample.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman_doc.tex
+ 	DEPENDS doxygen pyexample.py pyexample.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/pyexample/html/index.html ${PROJECT_BINARY_DIR}/html/examples/pyexample/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen tclexample.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman_doc.tex
+ 	DEPENDS doxygen tclexample.tcl tclexample.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/tclexample/html/index.html ${PROJECT_BINARY_DIR}/html/examples/tclexample/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen mux.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman_doc.tex
+ 	DEPENDS doxygen mux.vhdl mux.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/mux/html/index.html ${PROJECT_BINARY_DIR}/html/examples/mux/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen manual.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman_doc.tex
+ 	DEPENDS doxygen manual.c manual.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/manual/html/index.html ${PROJECT_BINARY_DIR}/html/examples/manual/latex/refman_doc.tex
+ )
+ 
+ add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen docstring.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman_doc.tex
+ 	DEPENDS doxygen docstring.py docstring.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/docstring/html/index.html ${PROJECT_BINARY_DIR}/html/examples/docstring/latex/refman_doc.tex
+ )
+@@ -249,7 +249,7 @@ add_custom_command(
+ if (DOT)
+   add_custom_command(
+ 	COMMAND ${EXECUTABLE_OUTPUT_PATH}/doxygen diagrams.cfg
+-        COMMAND ${PYTHON_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/diagrams/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/diagrams/latex/refman_doc.tex
++        COMMAND ${Python3_EXECUTABLE}  ${TOP}/examples/strip_example.py  < ${PROJECT_BINARY_DIR}/html/examples/diagrams/latex/refman.tex > ${PROJECT_BINARY_DIR}/html/examples/diagrams/latex/refman_doc.tex
+ 	DEPENDS doxygen diagrams_a.h diagrams_b.h diagrams_c.h diagrams_d.h diagrams_e.h diagrams.cfg ${TOP}/examples/strip_example.py
+ 	OUTPUT ${PROJECT_BINARY_DIR}/html/examples/diagrams/html/index.html ${PROJECT_BINARY_DIR}/html/examples/diagrams/latex/refman_doc.tex
+   )
+diff --git a/libmscgen/CMakeLists.txt b/libmscgen/CMakeLists.txt
+index 079fcfc..e6d86f6 100644
+--- a/libmscgen/CMakeLists.txt
++++ b/libmscgen/CMakeLists.txt
+@@ -7,7 +7,7 @@ include_directories(
+ set(LEX_FILES mscgen_lexer) 
+ foreach(lex_file ${LEX_FILES})
+     add_custom_command(
+-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/libmscgen/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
++        COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/libmscgen/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
+         DEPENDS ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/libmscgen/${lex_file}.l
+         OUTPUT  ${GENERATED_SRC}/${lex_file}.l.h
+     )
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 23460d0..58f679a 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -35,7 +35,7 @@ set_source_files_properties(${GENERATED_SRC}/settings.h PROPERTIES GENERATED 1)
+ 
+ # configvalues.h
+ add_custom_command(
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h
+     DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py
+     OUTPUT ${GENERATED_SRC}/configvalues.h
+ )
+@@ -47,7 +47,7 @@ add_custom_target(
+ 
+ # configvalues.cpp
+ add_custom_command(
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maps ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.cpp
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maps ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.cpp
+     DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py
+     OUTPUT ${GENERATED_SRC}/configvalues.cpp
+ )
+@@ -55,7 +55,7 @@ set_source_files_properties(${GENERATED_SRC}/configvalues.cpp PROPERTIES GENERAT
+ 
+ # configoptions.cpp
+ add_custom_command(
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -cpp ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configoptions.cpp
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -cpp ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configoptions.cpp
+     DEPENDS ${CMAKE_SOURCE_DIR}/src/config.xml ${CMAKE_SOURCE_DIR}/src/configgen.py
+     OUTPUT ${GENERATED_SRC}/configoptions.cpp
+ )
+@@ -86,7 +86,7 @@ file(GLOB RESOURCES ${CMAKE_SOURCE_DIR}/templates/*/*)
+ # resources.cpp
+ add_custom_command(
+     COMMENT  "Generating ${GENERATED_SRC}/resources.cpp"
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/res2cc_cmd.py ${CMAKE_SOURCE_DIR}/templates ${GENERATED_SRC}/resources.cpp
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/res2cc_cmd.py ${CMAKE_SOURCE_DIR}/templates ${GENERATED_SRC}/resources.cpp
+     DEPENDS ${RESOURCES}
+     OUTPUT ${GENERATED_SRC}/resources.cpp
+ )
+@@ -94,7 +94,7 @@ set_source_files_properties(${GENERATED_SRC}/resources.cpp PROPERTIES GENERATED
+ 
+ # layout_default.xml
+ add_custom_command(
+-    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/to_c_cmd.py < ${CMAKE_SOURCE_DIR}/src/layout_default.xml > ${GENERATED_SRC}/layout_default.xml.h
++    COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/to_c_cmd.py < ${CMAKE_SOURCE_DIR}/src/layout_default.xml > ${GENERATED_SRC}/layout_default.xml.h
+     DEPENDS ${CMAKE_SOURCE_DIR}/src/layout_default.xml
+     OUTPUT  ${GENERATED_SRC}/layout_default.xml.h
+ )
+@@ -124,7 +124,7 @@ foreach(lex_file ${LEX_FILES})
+     set(LEX_FILES_H ${LEX_FILES_H} " " ${GENERATED_SRC}/${lex_file}.l.h CACHE INTERNAL "Stores generated files")
+     set(LEX_FILES_CPP ${LEX_FILES_CPP} " " ${GENERATED_SRC}/${lex_file}.cpp CACHE INTERNAL "Stores generated files")
+     add_custom_command(
+-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/src/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
++        COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/src/${lex_file}.l > ${GENERATED_SRC}/${lex_file}.l.h
+         DEPENDS ${CMAKE_SOURCE_DIR}/src/scan_states.py ${CMAKE_SOURCE_DIR}/src/${lex_file}.l
+         OUTPUT  ${GENERATED_SRC}/${lex_file}.l.h
+     )
+diff --git a/testing/CMakeLists.txt b/testing/CMakeLists.txt
+index 40cb40b..a301acd 100644
+--- a/testing/CMakeLists.txt
++++ b/testing/CMakeLists.txt
+@@ -1,9 +1,9 @@
+ add_custom_target(tests
+          COMMENT "Running doxygen tests..."
+-	 COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen ${PROJECT_BINARY_DIR}/bin/doxygen --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
++	 COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen ${PROJECT_BINARY_DIR}/bin/doxygen --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
+          DEPENDS doxygen
+ )
+ add_test(NAME suite
+-	COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen $<TARGET_FILE:doxygen> --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
++	COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/testing/runtests.py --doxygen $<TARGET_FILE:doxygen> --inputdir ${CMAKE_SOURCE_DIR}/testing --outputdir ${PROJECT_BINARY_DIR}/testing
+ )
+ 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.17.bb b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.17.bb
index 7a4eee3..45de718 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.17.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/doxygen/doxygen_1.8.17.bb
@@ -9,6 +9,7 @@
 SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.src.tar.gz \
            file://0001-build-don-t-look-for-Iconv.patch \
 "
+SRC_URI_append_class-native = " file://doxygen-native-only-check-python3.patch"
 SRC_URI[md5sum] = "7997a15c73a8bd6d003eaba5c2ee2b47"
 SRC_URI[sha256sum] = "2cba988af2d495541cbbe5541b3bee0ee11144dcb23a81eada19f5501fd8b599"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers/0001-Add-detection-of-strtoull_l-function.patch b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers/0001-Add-detection-of-strtoull_l-function.patch
deleted file mode 100644
index f3e8210..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers/0001-Add-detection-of-strtoull_l-function.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From bff7ffbc5130cd46caf33b76b4bb0593fcd15066 Mon Sep 17 00:00:00 2001
-From: Vladimir Glavnyy <31897320+vglavnyy@users.noreply.github.com>
-Date: Fri, 10 May 2019 00:15:29 +0700
-Subject: [PATCH] Add detection of strtoull_l function (#5333) (#5337)
-
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-[Retrieved from:
-https://github.com/google/flatbuffers/commit/bff7ffbc5130cd46caf33b76b4bb0593fcd15066]
----
- CMakeLists.txt | 12 +++++++++---
- 1 file changed, 9 insertions(+), 3 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 0640c37b5..30be238fe 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -42,12 +42,18 @@ if(DEFINED FLATBUFFERS_MAX_PARSING_DEPTH)
-   message(STATUS "FLATBUFFERS_MAX_PARSING_DEPTH: ${FLATBUFFERS_MAX_PARSING_DEPTH}")
- endif()
- 
--# Auto-detect locale-narrow 'strtod_l' function.
-+# Auto-detect locale-narrow 'strtod_l' and  'strtoull_l' functions.
- if(NOT DEFINED FLATBUFFERS_LOCALE_INDEPENDENT)
-+  set(FLATBUFFERS_LOCALE_INDEPENDENT 0)
-   if(MSVC)
--    check_cxx_symbol_exists(_strtof_l stdlib.h FLATBUFFERS_LOCALE_INDEPENDENT)
-+    check_cxx_symbol_exists(_strtof_l stdlib.h FLATBUFFERS_HAS_STRTOF_L)
-+    check_cxx_symbol_exists(_strtoui64_l stdlib.h FLATBUFFERS_HAS_STRTOULL_L)
-   else()
--    check_cxx_symbol_exists(strtof_l stdlib.h FLATBUFFERS_LOCALE_INDEPENDENT)
-+    check_cxx_symbol_exists(strtof_l stdlib.h FLATBUFFERS_HAS_STRTOF_L)
-+    check_cxx_symbol_exists(strtoull_l stdlib.h FLATBUFFERS_HAS_STRTOULL_L)
-+  endif()
-+  if(FLATBUFFERS_HAS_STRTOF_L AND FLATBUFFERS_HAS_STRTOULL_L)
-+    set(FLATBUFFERS_LOCALE_INDEPENDENT 1)
-   endif()
- endif()
- add_definitions(-DFLATBUFFERS_LOCALE_INDEPENDENT=$<BOOL:${FLATBUFFERS_LOCALE_INDEPENDENT}>)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.11.0.bb b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bb
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.11.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bb
index 529441d..c31cef6 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.11.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bb
@@ -8,13 +8,11 @@
 RDEPENDS_${PN}-compiler = "${PN}"
 RDEPENDS_${PN}-dev += "${PN}-compiler"
 
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a873c5645c184d51e0f9b34e1d7cf559"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-SRCREV = "9e7e8cbe9f675123dd41b7c62868acad39188cae"
+SRCREV = "6df40a2471737b27271bdd9b900ab5f3aec746c7"
 
-SRC_URI = "git://github.com/google/flatbuffers.git \
-           file://0001-Add-detection-of-strtoull_l-function.patch \
-          "
+SRC_URI = "git://github.com/google/flatbuffers.git"
 
 # Make sure C++11 is used, required for example for GCC 4.9
 CXXFLAGS += "-std=c++11 -fPIC"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb b/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb
index 17e16bf..8282091 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/geany/geany_1.36.bb
@@ -5,7 +5,7 @@
 
 DEPENDS = "gtk+3 libxml-parser-perl-native python3-docutils-native intltool-native"
 
-inherit features_check autotools pkgconfig perlnative gettext
+inherit features_check autotools pkgconfig perlnative gettext mime-xdg
 
 REQUIRED_DISTRO_FEATURES = "x11"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.1.bb b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.1.bb
rename to meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
index cdd7057..3d539b2 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
@@ -9,15 +9,15 @@
 "
 
 
-inherit features_check autotools pkgconfig gnomebase gobject-introspection
+inherit features_check autotools pkgconfig gnomebase gobject-introspection mime-xdg
 
 REQUIRED_DISTRO_FEATURES = "x11"
 
 SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glade/3.22/glade-${PV}.tar.xz \
            file://remove-yelp-help-rules-var.patch \
           "
-SRC_URI[md5sum] = "226802cf3b06861240524805aa6fe6ff"
-SRC_URI[sha256sum] = "dff89a2ef2eaf000ff2a46979978d03cb9202cb04668e01d0ea5c5bb5547e39a"
+SRC_URI[md5sum] = "c074fa378c8f1ad80d20133c4ae6f42d"
+SRC_URI[sha256sum] = "edefa6eb24b4d15bd52589121dc109bc08c286157c41288deb74dd9cc3f26a21"
 
 EXTRA_OECONF += "--disable-man-pages"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch
new file mode 100644
index 0000000..6cad533
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch
@@ -0,0 +1,45 @@
+From 6d606f1101c1a172fb6d738d6f1865aa61849e68 Mon Sep 17 00:00:00 2001
+From: Alexey Firago <alexey_firago@mentor.com>
+Date: Fri, 20 Oct 2017 00:04:19 +0300
+Subject: [PATCH] CMakeLists.txt: Fix grpc_cpp_plugin path during cross-compiling or native build
+
+Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
+Signed-off-by: Hiram Lew <lew@avast.com>
+Signed-off-by: Jan Kaisrlik <jan.kaisrlik@avast.com>
+---
+ CMakeLists.txt                    | 9 ++++++++-
+ templates/CMakeLists.txt.template | 9 ++++++++-
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -193,6 +193,13 @@ function(protobuf_generate_grpc_cpp)
+     return()
+   endif()
+ 
++  #if cross-compiling or nativesdk, find host plugin
++  if(CMAKE_CROSSCOMPILING)
++      find_program(gRPC_CPP_PLUGIN grpc_cpp_plugin)
++  else()
++      set(gRPC_CPP_PLUGIN $<TARGET_FILE:grpc_cpp_plugin>)
++  endif()
++
+   set(_protobuf_include_path -I . -I ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR})
+   foreach(FIL ${ARGN})
+     get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
+--- a/templates/CMakeLists.txt.template
++++ b/templates/CMakeLists.txt.template
+@@ -233,6 +233,13 @@
+       return()
+     endif()
+ 
++    #if cross-compiling or nativesdk, find host plugin
++    if(CMAKE_CROSSCOMPILING)
++        find_program(gRPC_CPP_PLUGIN grpc_cpp_plugin)
++    else()
++        set(gRPC_CPP_PLUGIN $<TARGET_FILE:grpc_cpp_plugin>)
++    endif()
++
+     set(_protobuf_include_path -I . -I <%text>${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}</%text>)
+     foreach(FIL <%text>${ARGN}</%text>)
+       get_filename_component(ABS_FIL <%text>${FIL}</%text> ABSOLUTE)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch
new file mode 100644
index 0000000..e517355
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch
@@ -0,0 +1,177 @@
+From 2279e30be5796e9b185545543ea54fe68633cbdd Mon Sep 17 00:00:00 2001
+From: Alexey Firago <alexey_firago@mentor.com>
+Date: Mon, 30 Oct 2017 23:24:49 +0300
+Subject: [PATCH] CMakeLists.txt: Fix libraries installation for Linux
+
+* Set libs versions as in Makefile
+
+Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
+
+---
+ CMakeLists.txt | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 59 insertions(+)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -30,6 +30,15 @@ set(PACKAGE_TARNAME   "${PACKAGE_NAME}-$
+ set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
+ project(${PACKAGE_NAME} C CXX)
+ 
++set (CORE_VERSION_MAJOR "6")
++set (CORE_VERSION "6.0.0")
++
++set (CPP_VERSION_MAJOR "1")
++set (CPP_VERSION "${PACKAGE_VERSION}")
++
++set (CSHARP_VERSION_MAJOR "1")
++set (CSHARP_VERSION "${PACKAGE_VERSION}")
++
+ set(gRPC_INSTALL_BINDIR "bin" CACHE STRING "Installation directory for executables")
+ set(gRPC_INSTALL_LIBDIR "lib" CACHE STRING "Installation directory for libraries")
+ set(gRPC_INSTALL_INCLUDEDIR "include" CACHE STRING "Installation directory for headers")
+@@ -777,6 +786,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET address_sorting PROPERTY VERSION ${CORE_VERSION})
++  set_property(TARGET address_sorting PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(address_sorting
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -903,6 +916,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET gpr PROPERTY VERSION ${CORE_VERSION})
++  set_property(TARGET gpr PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(gpr
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -1367,6 +1384,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc PROPERTY VERSION ${CORE_VERSION})
++  set_property(TARGET grpc PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(grpc
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -1782,6 +1803,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc_cronet PROPERTY VERSION ${CORE_VERSION})
++  set_property(TARGET grpc_cronet PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(grpc_cronet
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -2869,6 +2894,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc_unsecure PROPERTY VERSION ${CORE_VERSION})
++  set_property(TARGET grpc_unsecure PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(grpc_unsecure
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -3206,6 +3235,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc++ PROPERTY VERSION ${CPP_VERSION})
++  set_property(TARGET grpc++ PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(grpc++
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -3589,6 +3622,11 @@ protobuf_generate_grpc_cpp(
+   src/proto/grpc/status/status.proto
+ )
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc++_error_details PROPERTY VERSION ${CPP_VERSION})
++  set_property(TARGET grpc++_error_details PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
++
+ target_include_directories(grpc++_error_details
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+@@ -3727,6 +3765,11 @@ protobuf_generate_grpc_cpp(
+   src/proto/grpc/reflection/v1alpha/reflection.proto
+ )
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc++_reflection PROPERTY VERSION ${CPP_VERSION})
++  set_property(TARGET grpc++_reflection PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
++
+ target_include_directories(grpc++_reflection
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+@@ -3816,6 +3859,10 @@ target_link_libraries(grpc++_test_config
+   ${_gRPC_GFLAGS_LIBRARIES}
+ )
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc++_cronet PROPERTY VERSION ${CPP_VERSION})
++  set_property(TARGET grpc++_cronet PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
+ 
+ endif (gRPC_BUILD_TESTS)
+ if (gRPC_BUILD_TESTS)
+@@ -4307,6 +4354,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc++_unsecure PROPERTY VERSION ${CPP_VERSION})
++  set_property(TARGET grpc++_unsecure PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(grpc++_unsecure
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -4745,6 +4796,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc_plugin_support PROPERTY VERSION ${CORE_VERSION})
++  set_property(TARGET grpc_plugin_support PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(grpc_plugin_support
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+@@ -4813,6 +4868,11 @@ protobuf_generate_grpc_cpp(
+   src/proto/grpc/channelz/channelz.proto
+ )
+ 
++if(_gRPC_PLATFORM_LINUX)
++	set_property(TARGET grpcpp_channelz PROPERTY VERSION ${CPP_VERSION})
++  set_property(TARGET grpcpp_channelz PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
++endif()
++
+ target_include_directories(grpcpp_channelz
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+@@ -5367,6 +5427,10 @@ if(WIN32 AND MSVC)
+   endif()
+ endif()
+ 
++if(_gRPC_PLATFORM_LINUX)
++  set_property(TARGET grpc_csharp_ext PROPERTY VERSION ${CSHARP_VERSION})
++  set_property(TARGET grpc_csharp_ext PROPERTY SOVERSION ${CSHARP_VERSION_MAJOR})
++endif()
+ 
+ target_include_directories(grpc_csharp_ext
+   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.24.3.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.24.3.bb
new file mode 100644
index 0000000..752562e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.24.3.bb
@@ -0,0 +1,67 @@
+DESCRIPTION = "A high performance, open source, general-purpose RPC framework. \
+Provides gRPC libraries for multiple languages written on top of shared C core library \
+(C++, Node.js, Python, Ruby, Objective-C, PHP, C#)"
+HOMEPAGE = "https://github.com/grpc/grpc"
+SECTION = "libs"
+LICENSE = "Apache-2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS = "gflags c-ares protobuf protobuf-native protobuf-c protobuf-c-native openssl libnsl2"
+DEPENDS_append_class-target = " googletest grpc-native "
+DEPENDS_append_class-nativesdk = " grpc-native "
+
+S = "${WORKDIR}/git"
+SRCREV_grpc = "2de2e8dd8921e1f7d043e01faf7fe8a291fbb072"
+SRCREV_upb = "9effcbcb27f0a665f9f345030188c0b291e32482"
+BRANCH = "v1.24.x"
+SRC_URI = "git://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH} \
+           git://github.com/protocolbuffers/upb;name=upb;destsuffix=git/third_party/upb \
+           file://0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch \
+           "
+SRC_URI_append_class-target = " file://0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch \
+                               "
+SRC_URI_append_class-nativesdk = " file://0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch"
+
+# Fixes build with older compilers 4.8 especially on ubuntu 14.04
+CXXFLAGS_append_class-native = " -Wl,--no-as-needed"
+
+inherit cmake pkgconfig
+
+EXTRA_OECMAKE = " \
+    -DgRPC_CARES_PROVIDER=package \
+    -DgRPC_ZLIB_PROVIDER=package \
+    -DgRPC_SSL_PROVIDER=package \
+    -DgRPC_PROTOBUF_PROVIDER=package \
+    -DgRPC_GFLAGS_PROVIDER=package \
+    -DgRPC_INSTALL=ON \
+    -DCMAKE_CROSSCOMPILING=ON \
+    -DBUILD_SHARED_LIBS=ON \
+    -DgRPC_INSTALL_LIBDIR=${baselib} \
+    -DgRPC_INSTALL_CMAKEDIR=${baselib}/cmake/${BPN} \
+    "
+
+do_configure_prepend_mipsarch() {
+    sed -i -e "s/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} rt m pthread)/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} atomic rt m pthread)/g" ${S}/CMakeLists.txt
+}
+
+do_configure_prepend_powerpc() {
+    sed -i -e "s/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} rt m pthread)/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} atomic rt m pthread)/g" ${S}/CMakeLists.txt
+}
+
+do_configure_prepend_riscv64() {
+    sed -i -e "s/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} rt m pthread)/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} atomic rt m pthread)/g" ${S}/CMakeLists.txt
+}
+
+do_configure_prepend_riscv32() {
+    sed -i -e "s/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} rt m pthread)/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} atomic rt m pthread)/g" ${S}/CMakeLists.txt
+}
+
+do_configure_prepend_toolchain-clang_x86() {
+    sed -i -e "s/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} rt m pthread)/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} atomic rt m pthread)/g" ${S}/CMakeLists.txt
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+SYSROOT_DIRS_BLACKLIST_append_class-target = "${baselib}/cmake/grpc"
+
+FILES_${PN}-dev += "${bindir}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/guider/guider_3.9.6.bb b/meta-openembedded/meta-oe/recipes-devtools/guider/guider_3.9.6.bb
index 0057db6..f059002 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/guider/guider_3.9.6.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/guider/guider_3.9.6.bb
@@ -16,7 +16,7 @@
 S = "${WORKDIR}/git"
 R = "${RECIPE_SYSROOT}"
 
-inherit distutils
+inherit ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "distutils", "", d)}
 
 GUIDER_OBJ = "guider.pyc"
 GUIDER_SCRIPT = "guider"
@@ -33,3 +33,7 @@
 
 RDEPENDS_${PN} = "python-ctypes python-shell \
                   python-json python-subprocess"
+python() {
+    if 'meta-python2' not in d.getVar('BBFILE_COLLECTIONS').split():
+        raise bb.parse.SkipRecipe('Requires meta-python2 to be present.')
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.6.bb b/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.6.bb
index 0086eae..bfaeed5 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.6.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/jq/jq_1.6.bb
@@ -8,8 +8,10 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://COPYING;md5=15d03e360fa7399f76d5a4359fc72cbf"
 
-SRC_URI = "https://github.com/stedolan/${BPN}/releases/download/${BP}/${BP}.tar.gz \
-"
+SRC_URI = "https://github.com/stedolan/${BPN}/releases/download/${BP}/${BP}.tar.gz"
+
+UPSTREAM_CHECK_URI = "https://github.com/stedolan/${BPN}/releases"
+UPSTREAM_CHECK_REGEX = "jq\-(?P<pver>(\d+\.\d+))(?!_\d+).tar.gz"
 
 SRC_URI[md5sum] = "e68fbd6a992e36f1ac48c99bbf825d6b"
 SRC_URI[sha256sum] = "5de8c8e29aaa3fb9cc6b47bb27299f271354ebb72514e3accadc7d38b5bbaa72"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_1.2.0.bb b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_1.3.0.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_1.2.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_1.3.0.bb
index dbf44d7..ca9675e 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_1.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/jsonrpc/jsonrpc_1.3.0.bb
@@ -10,7 +10,7 @@
 DEPENDS = "curl jsoncpp libmicrohttpd hiredis"
 
 SRC_URI = "git://github.com/cinemast/libjson-rpc-cpp"
-SRCREV = "4ed5b00dcc409405a19e6d8c6478f703153430e1"
+SRCREV = "c696f6932113b81cd20cd4a34fdb1808e773f23e"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lapack/lapack_3.8.0.bb b/meta-openembedded/meta-oe/recipes-devtools/lapack/lapack_3.9.0.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-devtools/lapack/lapack_3.8.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/lapack/lapack_3.9.0.bb
index 7544744..62d4df5 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/lapack/lapack_3.8.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/lapack/lapack_3.9.0.bb
@@ -13,9 +13,9 @@
 
 DEPENDS = "libgfortran"
 
-SRC_URI = "http://www.netlib.org/lapack/lapack-${PV}.tar.gz"
-SRC_URI[md5sum] = "96591affdbf58c450d45c1daa540dbd2"
-SRC_URI[sha256sum] = "deb22cc4a6120bff72621155a9917f485f96ef8319ac074a7afbc68aab88bcf6"
+SRCREV = "6acc99d5f39130be7cec00fb835606042101a970"
+SRC_URI = "git://github.com/Reference-LAPACK/lapack.git;protocol=https"
+S = "${WORKDIR}/git"
 
 EXTRA_OECMAKE = " -DBUILD_SHARED_LIBS=ON "
 OECMAKE_GENERATOR = "Unix Makefiles"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.2.bb b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.3.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.2.bb
rename to meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.3.bb
index a048e48..576eff6 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.3.bb
@@ -18,5 +18,5 @@
     done
 }
 
-SRC_URI[archive.md5sum] = "45db478f2b300ada8e039ebc6c9458de"
-SRC_URI[archive.sha256sum] = "9e035c4b755f46bfae70ba81cdcf8328b03f554373cec8c816e8b5680f85353c"
+SRC_URI[archive.md5sum] = "e574b3952b93d219b5ec7c74c5892c33"
+SRC_URI[archive.sha256sum] = "d0b5edefc88cbca5f1709d19fa62aef490922c6577a14ac4e7b085507911a5de"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb
index 6b66c25..5710943 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/ltrace/ltrace_git.bb
@@ -38,6 +38,9 @@
 PACKAGECONFIG[unwind] = "--with-libunwind,--without-libunwind,libunwind"
 PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux,libselinux"
 
+COMPATIBLE_HOST_riscv64 = "null"
+COMPATIBLE_HOST_riscv32 = "null"
+
 do_configure_prepend () {
     ( cd ${S}; ./autogen.sh )
 }
diff --git a/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb b/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb
index ae41e62..a23a4a5 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/lua/lua_5.3.5.bb
@@ -35,6 +35,7 @@
 
 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 () {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch
index c39ef6f..807cc44 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/clang.patch
@@ -8,8 +8,8 @@
 ===================================================================
 --- LuaJIT-2.0.5.orig/src/lj_arch.h
 +++ LuaJIT-2.0.5/src/lj_arch.h
-@@ -313,7 +313,7 @@
- #error "Need at least GCC 4.2 or newer"
+@@ -436,7 +436,7 @@
+ #endif
  #endif
  #elif !LJ_TARGET_PS3
 -#if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_2.0.5.bb b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_2.0.5.bb
rename to meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
index 08a0470..c4f8216 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_2.0.5.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
@@ -1,14 +1,14 @@
 SUMMARY = "Just-In-Time Compiler for Lua"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=10a96c93403affcc34765f4c2612bc22"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=d739bb9250a55c124a545b588fd76771"
 HOMEPAGE = "http://luajit.org"
 
-PV .= "+git${SRCPV}"
-SRCREV = "02b521981a1ab919ff2cd4d9bcaee80baf77dce2"
-SRC_URI = "git://luajit.org/git/luajit-2.0.git;protocol=http \
+PV = "2.1.0~beta3"
+SRCREV = "0ad60ccbc3768fa8e3e726858adf261950edbc22"
+SRC_URI = "git://luajit.org/git/luajit-2.0.git;protocol=http;branch=v2.1 \
            file://0001-Do-not-strip-automatically-this-leaves-the-stripping.patch \
            file://clang.patch \
-"
+           "
 
 S = "${WORKDIR}/git"
 
@@ -90,9 +90,10 @@
 "
 FILES_luajit-common = "${datadir}/${BPN}-${PV}"
 
-# Aarch64/mips64/ppc/ppc64 is not supported in this release
-COMPATIBLE_HOST_aarch64 = "null"
+# mips64/ppc/ppc64/riscv64 is not supported in this release
 COMPATIBLE_HOST_mipsarchn32 = "null"
 COMPATIBLE_HOST_mipsarchn64 = "null"
 COMPATIBLE_HOST_powerpc = "null"
 COMPATIBLE_HOST_powerpc64 = "null"
+COMPATIBLE_HOST_powerpc64le = "null"
+COMPATIBLE_HOST_riscv64 = "null"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix/0001-fix-avoid-race-condition-between-test-and-mkdir.patch b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix/0001-fix-avoid-race-condition-between-test-and-mkdir.patch
new file mode 100644
index 0000000..d8a9e3d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix/0001-fix-avoid-race-condition-between-test-and-mkdir.patch
@@ -0,0 +1,75 @@
+From 4dfca036c96071bd2a2c80ff84719c6d37858373 Mon Sep 17 00:00:00 2001
+From: Haseeb Ashraf <Haseeb_Ashraf@mentor.com>
+Date: Fri, 17 Apr 2020 14:36:50 +0500
+Subject: [PATCH 1/1] fix: avoid race condition between test and mkdir
+
+when building in parallel the race condition, when the directory
+is tested for existence and it is created, can break the build
+
+Signed-off-by: Haseeb Ashraf <Haseeb_Ashraf@mentor.com>
+---
+ Makefile.in            | 6 +++---
+ build-aux/rockspecs.mk | 2 +-
+ local.mk               | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 9b51ef3..4722525 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -1637,7 +1637,7 @@ distclean-tags:
+ 
+ distdir: $(DISTFILES)
+ 	$(am__remove_distdir)
+-	test -d "$(distdir)" || mkdir "$(distdir)"
++	$(MKDIR_P) "$(distdir)"
+ 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ 	list='$(DISTFILES)'; \
+@@ -1975,7 +1975,7 @@ clean-local:
+ 	rm -f $(posix_submodules)
+ 
+ $(allhtml): $(EXTRA_ext_posix_posix_la_SOURCES) $(ext_posix_posix_la_SOURCES)
+-	test -d $(builddir)/doc || mkdir $(builddir)/doc
++	$(MKDIR_P) $(builddir)/doc
+ @HAVE_LDOC_TRUE@	$(LDOC) -c build-aux/config.ld -d $(abs_srcdir)/doc .
+ @HAVE_LDOC_FALSE@	$(MKDIR_P) doc
+ @HAVE_LDOC_FALSE@	touch doc/index.html doc/ldoc.css
+@@ -1983,7 +1983,7 @@ $(allhtml): $(EXTRA_ext_posix_posix_la_SOURCES) $(ext_posix_posix_la_SOURCES)
+ doc: $(allhtml)
+ 
+ $(luarocks_config): Makefile.am
+-	@test -d build-aux || mkdir build-aux
++	@$(MKDIR_P) build-aux
+ 	$(AM_V_GEN){						\
+ 	  $(set_LUA_BINDIR);					\
+ 	  echo 'rocks_trees = { "$(abs_srcdir)/luarocks" }';	\
+diff --git a/build-aux/rockspecs.mk b/build-aux/rockspecs.mk
+index ebd1dbf..c8fbdbc 100644
+--- a/build-aux/rockspecs.mk
++++ b/build-aux/rockspecs.mk
+@@ -62,7 +62,7 @@ LUA_INCDIR = `cd $$LUA_BINDIR/../include && pwd`
+ LUA_LIBDIR = `cd $$LUA_BINDIR/../lib && pwd`
+ 
+ $(luarocks_config): Makefile.am
+-	@test -d build-aux || mkdir build-aux
++	@$(MKDIR_P) build-aux
+ 	$(AM_V_GEN){						\
+ 	  $(set_LUA_BINDIR);					\
+ 	  echo 'rocks_trees = { "$(abs_srcdir)/luarocks" }';	\
+diff --git a/local.mk b/local.mk
+index d391ef7..80b22ce 100644
+--- a/local.mk
++++ b/local.mk
+@@ -255,7 +255,7 @@ dist_examples_DATA +=				\
+ allhtml = $(dist_doc_DATA) $(dist_examples_DATA) $(dist_modules_DATA) $(dist_classes_DATA)
+ 
+ $(allhtml): $(EXTRA_ext_posix_posix_la_SOURCES) $(ext_posix_posix_la_SOURCES)
+-	test -d $(builddir)/doc || mkdir $(builddir)/doc
++	$(MKDIR_P) $(builddir)/doc
+ if HAVE_LDOC
+ 	$(LDOC) -c build-aux/config.ld -d $(abs_srcdir)/doc .
+ else
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_33.4.0.bb b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_33.4.0.bb
new file mode 100644
index 0000000..1bee9fe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_33.4.0.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "luaposix is a POSIX binding for Lua."
+LICENSE = "MIT"
+HOMEPAGE = "https://github.com/luaposix/luaposix"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7dd2aad04bb7ca212e69127ba8d58f9f"
+
+DEPENDS += "lua-native lua"
+
+SRC_URI = "git://github.com/luaposix/luaposix.git;branch=release \
+           file://0001-fix-avoid-race-condition-between-test-and-mkdir.patch \
+"
+SRCREV = "8e4902ed81c922ed8f76a7ed85be1eaa3fd7e66d"
+S = "${WORKDIR}/git"
+LUA_VERSION = "5.3"
+
+inherit autotools pkgconfig
+
+do_install() {
+    oe_runmake 'DESTDIR=${D}' 'luadir=${datadir}/lua/${LUA_VERSION}' 'luaexecdir=${libdir}/lua/${LUA_VERSION}' install
+}
+
+FILES_${PN} = "${datadir}/lua/${LUA_VERSION} ${libdir}/lua/${LUA_VERSION}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nanopb/nanopb_0.4.0.bb b/meta-openembedded/meta-oe/recipes-devtools/nanopb/nanopb_0.4.0.bb
index aedd53a..21d110a 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nanopb/nanopb_0.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nanopb/nanopb_0.4.0.bb
@@ -9,7 +9,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit cmake pythonnative
+inherit cmake python3native
 
 do_install_append() {
     install -Dm 0755 ${S}/generator/nanopb_generator.py ${D}${bindir}/nanopb_generator.py
@@ -26,3 +26,5 @@
 "
 
 BBCLASSEXTEND = "native nativesdk"
+
+PNBLACKLIST[nanopb] = "Needs forward porting to use python3"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-fifo/nlohmann-fifo_git.bb b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-fifo/nlohmann-fifo_git.bb
index 326a4ab..a97eb53 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-fifo/nlohmann-fifo_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-fifo/nlohmann-fifo_git.bb
@@ -10,6 +10,8 @@
 
 SRCREV = "0dfbf5dacbb15a32c43f912a7e66a54aae39d0f9"
 
+UPSTREAM_CHECK_COMMITS = "1"
+
 S = "${WORKDIR}/git"
 
 # nlohmann-fifo is a header only C++ library, so the main package will be empty.
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch
index 5d0dc03..4dd121f 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Disable-running-gyp-files-for-bundled-deps.patch
@@ -4,23 +4,22 @@
 Subject: [PATCH] Disable running gyp on shared deps
 
 ---
- Makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Makefile b/Makefile
-index a98772f..f5663e2 100644
+index 0947300f24..6c98691984 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -123,8 +123,8 @@ with-code-cache:
- test-code-cache: with-code-cache
- 	$(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) code-cache
+@@ -141,7 +141,7 @@ test-code-cache: with-code-cache
+ 	echo "'test-code-cache' target is a noop"
  
--out/Makefile: common.gypi deps/uv/uv.gyp deps/http_parser/http_parser.gyp \
--              deps/zlib/zlib.gyp deps/v8/gypfiles/toolchain.gypi \
-+out/Makefile: common.gypi deps/http_parser/http_parser.gyp \
-+              deps/v8/gypfiles/toolchain.gypi \
-               deps/v8/gypfiles/features.gypi deps/v8/gypfiles/v8.gyp node.gyp \
-               config.gypi
+ out/Makefile: config.gypi common.gypi node.gyp \
+-	deps/uv/uv.gyp deps/http_parser/http_parser.gyp deps/zlib/zlib.gyp \
++	deps/http_parser/http_parser.gyp \
+ 	tools/v8_gypfiles/toolchain.gypi tools/v8_gypfiles/features.gypi \
+ 	tools/v8_gypfiles/inspector.gypi tools/v8_gypfiles/v8.gyp
  	$(PYTHON) tools/gyp_node.py -f make
 -- 
-2.19.2
+2.20.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-build-allow-passing-multiple-libs-to-pkg_config.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-build-allow-passing-multiple-libs-to-pkg_config.patch
new file mode 100644
index 0000000..13edf22
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-build-allow-passing-multiple-libs-to-pkg_config.patch
@@ -0,0 +1,41 @@
+From fdaa0e3bef93c5c72a7258b5f1e30718e7d81f9b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Mon, 2 Mar 2020 12:17:09 +0000
+Subject: [PATCH 1/2] build: allow passing multiple libs to pkg_config
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Sometimes it's necessary to pass multiple library names to pkg-config,
+e.g. the brotli shared libraries can be pulled in with
+    pkg-config libbrotlienc libbrotlidec
+
+Update the code to handle both, strings (as used so far), and lists
+of strings.
+
+Signed-off-by: André Draszik <git@andred.net>
+---
+Upstream-Status: Submitted [https://github.com/nodejs/node/pull/32046]
+ configure.py | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/configure.py b/configure.py
+index beb08df088..e3f78f2fed 100755
+--- a/configure.py
++++ b/configure.py
+@@ -680,7 +680,11 @@ def pkg_config(pkg):
+   retval = ()
+   for flag in ['--libs-only-l', '--cflags-only-I',
+                '--libs-only-L', '--modversion']:
+-    args += [flag, pkg]
++    args += [flag]
++    if isinstance(pkg, list):
++      args += pkg
++    else:
++      args += [pkg]
+     try:
+       proc = subprocess.Popen(shlex.split(pkg_config) + args,
+                               stdout=subprocess.PIPE)
+-- 
+2.25.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch
new file mode 100644
index 0000000..b5142dc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-binaries.patch
@@ -0,0 +1,71 @@
+From 6c3ac20477a4bac643088f24df3c042e627fafa9 Mon Sep 17 00:00:00 2001
+From: Guillaume Burel <guillaume.burel@stormshield.eu>
+Date: Fri, 3 Jan 2020 11:25:54 +0100
+Subject: [PATCH] Using native binaries
+
+---
+ node.gyp                 |  4 ++--
+ tools/v8_gypfiles/v8.gyp | 11 ++++-------
+ 2 files changed, 6 insertions(+), 9 deletions(-)
+
+diff --git a/node.gyp b/node.gyp
+index 8f4dc518..d9389190 100644
+--- a/node.gyp
++++ b/node.gyp
+@@ -446,7 +446,7 @@
+                 '<(SHARED_INTERMEDIATE_DIR)/node_code_cache.cc',
+               ],
+               'action': [
+-                '<@(_inputs)',
++                'mkcodecache',
+                 '<@(_outputs)',
+               ],
+             },
+@@ -471,7 +471,7 @@
+                 '<(SHARED_INTERMEDIATE_DIR)/node_snapshot.cc',
+               ],
+               'action': [
+-                '<@(_inputs)',
++                'node_mksnapshot',
+                 '<@(_outputs)',
+               ],
+             },
+diff --git a/tools/v8_gypfiles/v8.gyp b/tools/v8_gypfiles/v8.gyp
+index a506a67d..c91f7dde 100644
+--- a/tools/v8_gypfiles/v8.gyp
++++ b/tools/v8_gypfiles/v8.gyp
+@@ -140,7 +140,8 @@
+             '<@(torque_outputs)',
+           ],
+           'action': [
+-            '<@(_inputs)',
++            'torque',
++            '<@(torque_files)',
+             '-o', '<(torque_output_root)/torque-generated',
+             '-v8-root', '<(V8_ROOT)'
+           ],
+@@ -247,9 +248,7 @@
+             '<(generate_bytecode_builtins_list_output)',
+           ],
+           'action': [
+-            'python',
+-            '<(V8_ROOT)/tools/run.py',
+-            '<@(_inputs)',
++            'bytecode_builtins_list_generator',
+             '<@(_outputs)',
+           ],
+         },
+@@ -1396,9 +1395,7 @@
+             '<(SHARED_INTERMEDIATE_DIR)/src/regexp/special-case.cc',
+           ],
+           'action': [
+-            'python',
+-            '<(V8_ROOT)/tools/run.py',
+-            '<@(_inputs)',
++            'gen-regexp-special-case',
+             '<@(_outputs)',
+           ],
+         },
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-torque.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-torque.patch
deleted file mode 100644
index e9035f9..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Using-native-torque.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 4bbee5e3d58bc4911999f3ec2cc5aab8ded6717b Mon Sep 17 00:00:00 2001
-From: "Winker Matthias (TT-CA/ENG1)" <Matthias.Winker@de.bosch.com>
-Date: Tue, 11 Dec 2018 10:44:29 +0100
-Subject: [PATCH] Using native torque
-
----
- deps/v8/gypfiles/v8.gyp | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/deps/v8/gypfiles/v8.gyp b/deps/v8/gypfiles/v8.gyp
-index 8c78f02255..434168844e 100644
---- a/deps/v8/gypfiles/v8.gyp
-+++ b/deps/v8/gypfiles/v8.gyp
-@@ -2831,7 +2831,6 @@
-         {
-           'action_name': 'run_torque',
-           'inputs': [  # Order matters.
--            '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)torque<(EXECUTABLE_SUFFIX)',
-             '../src/builtins/base.tq',
-             '../src/builtins/array.tq',
-             '../src/builtins/typed-array.tq',
-@@ -2845,7 +2844,10 @@
-             '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.cc',
-             '<(SHARED_INTERMEDIATE_DIR)/torque-generated/builtins-typed-array-from-dsl-gen.h',
-           ],
--          'action': ['<@(_inputs)', '-o', '<(SHARED_INTERMEDIATE_DIR)/torque-generated'],
-+          'action': [
-+            'torque',
-+            '<@(_inputs)',
-+            '-o', '<(SHARED_INTERMEDIATE_DIR)/torque-generated'],
-         },
-       ],
-     }, # torque
--- 
-2.19.2
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-build-allow-use-of-system-installed-brotli.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-build-allow-use-of-system-installed-brotli.patch
new file mode 100644
index 0000000..fc038f3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-build-allow-use-of-system-installed-brotli.patch
@@ -0,0 +1,66 @@
+From f0f927feee8cb1fb173835d5c3f6beb6bf7d5e54 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Mon, 2 Mar 2020 12:17:35 +0000
+Subject: [PATCH 2/2] build: allow use of system-installed brotli
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+brotli is available as a shared library since 2016, so it makes sense
+to allow its use as a system-installed version.
+
+Some of the infrastructure was in place already (node.gyp and
+node.gypi), but some bits in the configure script here were missing.
+
+Add them, keeping the default as before, to use the bundled version.
+
+Refs: https://github.com/google/brotli/pull/421
+Signed-off-by: André Draszik <git@andred.net>
+---
+Upstream-Status: Submitted [https://github.com/nodejs/node/pull/32046]
+ configure.py | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+diff --git a/configure.py b/configure.py
+index e3f78f2fed..0190e31b41 100755
+--- a/configure.py
++++ b/configure.py
+@@ -301,6 +301,27 @@ shared_optgroup.add_option('--shared-zlib-libpath',
+     dest='shared_zlib_libpath',
+     help='a directory to search for the shared zlib DLL')
+ 
++shared_optgroup.add_option('--shared-brotli',
++    action='store_true',
++    dest='shared_brotli',
++    help='link to a shared brotli DLL instead of static linking')
++
++shared_optgroup.add_option('--shared-brotli-includes',
++    action='store',
++    dest='shared_brotli_includes',
++    help='directory containing brotli header files')
++
++shared_optgroup.add_option('--shared-brotli-libname',
++    action='store',
++    dest='shared_brotli_libname',
++    default='brotlidec,brotlienc',
++    help='alternative lib name to link to [default: %default]')
++
++shared_optgroup.add_option('--shared-brotli-libpath',
++    action='store',
++    dest='shared_brotli_libpath',
++    help='a directory to search for the shared brotli DLL')
++
+ shared_optgroup.add_option('--shared-cares',
+     action='store_true',
+     dest='shared_cares',
+@@ -1692,6 +1713,7 @@ configure_napi(output)
+ configure_library('zlib', output)
+ configure_library('http_parser', output)
+ configure_library('libuv', output)
++configure_library('brotli', output, pkgname=['libbrotlidec', 'libbrotlienc'])
+ configure_library('cares', output, pkgname='libcares')
+ configure_library('nghttp2', output, pkgname='libnghttp2')
+ configure_v8(output)
+-- 
+2.25.0
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch
index 7aa70fe..599f742 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0003-Install-both-binaries-and-use-libdir.patch
@@ -15,17 +15,16 @@
 Upstream-Status: Pending
 
 Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
-
 ---
  configure.py     |  7 +++++++
  tools/install.py | 31 ++++++++++++++-----------------
  2 files changed, 21 insertions(+), 17 deletions(-)
 
 diff --git a/configure.py b/configure.py
-index cfd4207..eb26f7d 100755
+index 20cce214db..e2d78a2a51 100755
 --- a/configure.py
 +++ b/configure.py
-@@ -552,6 +552,12 @@ parser.add_option('--shared',
+@@ -559,6 +559,12 @@ parser.add_option('--shared',
      help='compile shared library for embedding node in another project. ' +
           '(This mode is not officially supported for regular applications)')
  
@@ -38,19 +37,19 @@
  parser.add_option('--without-v8-platform',
      action='store_true',
      dest='without_v8_platform',
-@@ -1095,6 +1101,7 @@ def configure_node(o):
-   if options.code_cache_path:
-     o['variables']['node_code_cache_path'] = options.code_cache_path
+@@ -1103,6 +1109,7 @@ def configure_node(o):
+   if o['variables']['want_separate_host_toolset'] == 0:
+     o['variables']['node_code_cache'] = 'yes' # For testing
    o['variables']['node_shared'] = b(options.shared)
 +  o['variables']['libdir'] = options.libdir
    node_module_version = getmoduleversion.get_version()
  
    if sys.platform == 'darwin':
 diff --git a/tools/install.py b/tools/install.py
-index 028c32e..bf443c4 100755
+index 655802980a..fe4723bf15 100755
 --- a/tools/install.py
 +++ b/tools/install.py
-@@ -117,26 +117,23 @@ def subdir_files(path, dest, action):
+@@ -121,26 +121,23 @@ def subdir_files(path, dest, action):
  
  def files(action):
    is_windows = sys.platform == 'win32'
@@ -92,5 +91,5 @@
    if 'true' == variables.get('node_use_dtrace'):
      action(['out/Release/node.d'], 'lib/dtrace/node.d')
 -- 
-2.23.0
+2.20.1
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0004-Make-compatibility-with-gcc-4.8.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0004-Make-compatibility-with-gcc-4.8.patch
deleted file mode 100644
index 925c085..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0004-Make-compatibility-with-gcc-4.8.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-Implement function as wrapper for std::make_unique
-method to be compatible with gcc < 4.9 .
-"error::make_unique is not a member of 'std'"
-
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
-
-diff -Naur node-v10.15.1/src/cares_wrap.cc node-v10.15.1/src/cares_wrap.cc
---- node-v10.15.1/src/cares_wrap.cc	2019-01-29 08:20:50.000000000 +0100
-+++ node-v10.15.1/src/cares_wrap.cc	2019-02-21 16:22:25.489131665 +0100
-@@ -52,6 +52,16 @@
- # define AI_V4MAPPED 0
- #endif
- 
-+#ifndef __cpp_lib_make_unique
-+namespace std {
-+  /// make_unique implementation
-+  template<typename T, typename... Args>
-+  std::unique_ptr<T> make_unique(Args&&... args) {
-+    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
-+  }
-+}
-+#endif
-+
- namespace node {
- namespace cares_wrap {
- 
-diff -Naur node-v10.15.1/src/inspector_agent.cc node-v10.15.1/src/inspector_agent.cc
---- node-v10.15.1/src/inspector_agent.cc	2019-01-29 08:20:50.000000000 +0100
-+++ node-v10.15.1/src/inspector_agent.cc	2019-02-21 16:22:09.000185992 +0100
-@@ -24,6 +24,16 @@
- #include <pthread.h>
- #endif  // __POSIX__
- 
-+#ifndef __cpp_lib_make_unique
-+namespace std {
-+  /// make_unique implementation
-+  template<typename T, typename... Args>
-+  std::unique_ptr<T> make_unique(Args&&... args) {
-+    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
-+  }
-+}
-+#endif
-+
- namespace node {
- namespace inspector {
- namespace {
-
-diff --git a/src/inspector/main_thread_interface.cc b/src/inspector/main_thread_interface.cc
-index e374c0fd70..05d7d8c60f 100644
---- a/src/inspector/main_thread_interface.cc
-+++ b/src/inspector/main_thread_interface.cc
-@@ -6,6 +6,16 @@
- #include <functional>
- #include <unicode/unistr.h>
-
-+#ifndef __cpp_lib_make_unique
-+namespace std {
-+  /// make_unique implementation
-+  template<typename T, typename... Args>
-+  std::unique_ptr<T> make_unique(Args&&... args) {
-+    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
-+  }
-+}
-+#endif
-+
- namespace node {
- namespace inspector {
- namespace {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0007-v8-don-t-override-ARM-CFLAGS.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0004-v8-don-t-override-ARM-CFLAGS.patch
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0007-v8-don-t-override-ARM-CFLAGS.patch
rename to meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0004-v8-don-t-override-ARM-CFLAGS.patch
index eb2cbfb..97ed972 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0007-v8-don-t-override-ARM-CFLAGS.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0004-v8-don-t-override-ARM-CFLAGS.patch
@@ -24,14 +24,14 @@
 Upstream-Status: Inappropriate [oe-specific]
 Signed-off-by: André Draszik <git@andred.net>
 ---
- deps/v8/gypfiles/toolchain.gypi | 52 ++-------------------------------
+ tools/v8_gypfiles/toolchain.gypi | 52 ++------------------------------
  1 file changed, 2 insertions(+), 50 deletions(-)
 
-diff --git a/deps/v8/gypfiles/toolchain.gypi b/deps/v8/gypfiles/toolchain.gypi
-index 910a212..1390b15 100644
---- a/deps/v8/gypfiles/toolchain.gypi
-+++ b/deps/v8/gypfiles/toolchain.gypi
-@@ -199,31 +199,7 @@
+diff --git a/tools/v8_gypfiles/toolchain.gypi b/tools/v8_gypfiles/toolchain.gypi
+index 264b3e478e..0b41848145 100644
+--- a/tools/v8_gypfiles/toolchain.gypi
++++ b/tools/v8_gypfiles/toolchain.gypi
+@@ -211,31 +211,7 @@
          'target_conditions': [
            ['_toolset=="host"', {
              'conditions': [
@@ -64,7 +64,7 @@
                  # Host not built with an Arm CXX compiler (simulator build).
                  'conditions': [
                    [ 'arm_float_abi=="hard"', {
-@@ -242,31 +218,7 @@
+@@ -254,31 +230,7 @@
            }],  # _toolset=="host"
            ['_toolset=="target"', {
              'conditions': [
@@ -98,5 +98,5 @@
                  'conditions': [
                    [ 'arm_float_abi=="hard"', {
 -- 
-2.23.0.rc1
+2.20.1
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0005-Link-atomic-library.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0005-Link-atomic-library.patch
deleted file mode 100644
index 66ff18b..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0005-Link-atomic-library.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-Link atomic library to fix missing undefined referrences
-like "undefined reference to `__atomic_fetch_add_8'"
-
-Signed-off-by: Andrej Valek <andrej.valek@siemens.com>
-
-diff -Naur node-v10.15.1/deps/v8/gypfiles/v8.gyp node-v10.15.1/deps/v8/gypfiles/v8.gyp
---- node-v10.15.1/deps/v8/gypfiles/v8.gyp	2019-02-13 09:02:21.000000000 +0100
-+++ node-v10.15.1/deps/v8/gypfiles/v8.gyp	2019-02-15 21:27:11.755679660 +0100
-@@ -452,6 +452,11 @@
-         '<(DEPTH)',
-         '<(SHARED_INTERMEDIATE_DIR)'
-       ],
-+      'link_settings': {
-+        'libraries': [
-+          '-latomic'
-+        ],
-+      },
-       'sources': [
-         '<@(inspector_all_sources)',
-         '../include//v8-inspector-protocol.h',
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/big-endian.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/big-endian.patch
new file mode 100644
index 0000000..5293818
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/big-endian.patch
@@ -0,0 +1,18 @@
+
+https://github.com/v8/v8/commit/878ccb33bd3cf0e6dc018ff8d15843f585ac07be
+
+did some automated cleanups but it missed big-endian code.
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/deps/v8/src/runtime/runtime-utils.h
++++ b/deps/v8/src/runtime/runtime-utils.h
+@@ -126,7 +126,7 @@ static inline ObjectPair MakePair(Object
+ #if defined(V8_TARGET_LITTLE_ENDIAN)
+   return x.ptr() | (static_cast<ObjectPair>(y.ptr()) << 32);
+ #elif defined(V8_TARGET_BIG_ENDIAN)
+-  return y->ptr() | (static_cast<ObjectPair>(x->ptr()) << 32);
++  return y.ptr() | (static_cast<ObjectPair>(x.ptr()) << 32);
+ #else
+ #error Unknown endianness
+ #endif
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-warnings.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-warnings.patch
new file mode 100644
index 0000000..1a773f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/mips-warnings.patch
@@ -0,0 +1,19 @@
+Add explicit static cast to fix narrowing warning
+
+Fixes
+deps/v8/src/codegen/mips/assembler-mips.cc:3556:44: error: non-constant-expression cannot be narrowed from type 'int' to 'size_t' (aka 'unsigned int') in initializer list [-Wc++11-narrowing]
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/deps/v8/src/codegen/mips/assembler-mips.cc
++++ b/deps/v8/src/codegen/mips/assembler-mips.cc
+@@ -3553,7 +3553,7 @@ void Assembler::GrowBuffer() {
+                                reloc_info_writer.last_pc() + pc_delta);
+ 
+   // Relocate runtime entries.
+-  Vector<byte> instructions{buffer_start_, pc_offset()};
++  Vector<byte> instructions{buffer_start_, static_cast<size_t>(pc_offset())};
+   Vector<const byte> reloc_info{reloc_info_writer.pos(), reloc_size};
+   for (RelocIterator it(instructions, reloc_info, 0); !it.done(); it.next()) {
+     RelocInfo::Mode rmode = it.rinfo()->rmode();
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_10.17.0.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.14.1.bb
similarity index 71%
rename from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_10.17.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.14.1.bb
index 71a4763..d468fb3 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_10.17.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.14.1.bb
@@ -1,12 +1,12 @@
 DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
 HOMEPAGE = "http://nodejs.org"
 LICENSE = "MIT & BSD & Artistic-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=be980eb7ccafe287cb438076a65e888c"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=be4d5107c64dc3d7c57e3797e1a0674b"
 
 DEPENDS = "openssl"
 DEPENDS_append_class-target = " nodejs-native"
 
-inherit pkgconfig pythonnative
+inherit pkgconfig python3native
 
 COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*"
 COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*"
@@ -18,16 +18,18 @@
 SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
            file://0001-Disable-running-gyp-files-for-bundled-deps.patch \
            file://0003-Install-both-binaries-and-use-libdir.patch \
-           file://0004-Make-compatibility-with-gcc-4.8.patch \
-           file://0007-v8-don-t-override-ARM-CFLAGS.patch \
+           file://0004-v8-don-t-override-ARM-CFLAGS.patch \
+           file://big-endian.patch \
+           file://0001-build-allow-passing-multiple-libs-to-pkg_config.patch \
+           file://0002-build-allow-use-of-system-installed-brotli.patch \
+           file://mips-warnings.patch \
            "
 SRC_URI_append_class-target = " \
-           file://0002-Using-native-torque.patch \
-           file://0005-Link-atomic-library.patch \
+           file://0002-Using-native-binaries.patch \
            "
 
-SRC_URI[md5sum] = "d5a56d0abf764a91f627f0690cd4b9f3"
-SRC_URI[sha256sum] = "412667d76bd5273c07cb69c215998109fd5bb35c874654f93e6a0132d666c58e"
+SRC_URI[md5sum] = "1c78a75f5c95321f533ecccca695e814"
+SRC_URI[sha256sum] = "877b4b842318b0e09bc754faf7343f2f097f0fc4f88ab9ae57cf9944e88e7adb"
 
 S = "${WORKDIR}/node-v${PV}"
 
@@ -52,9 +54,9 @@
 GYP_DEFINES_append_mipsel = " mips_arch_variant='r1' "
 ARCHFLAGS ?= ""
 
-PACKAGECONFIG ??= "ares icu libuv zlib"
+PACKAGECONFIG ??= "ares brotli icu libuv zlib"
 PACKAGECONFIG[ares] = "--shared-cares,,c-ares"
-PACKAGECONFIG[gyp] = ",,gyp-py2-native"
+PACKAGECONFIG[brotli] = "--shared-brotli,,brotli"
 PACKAGECONFIG[icu] = "--with-intl=system-icu,--without-intl,icu"
 PACKAGECONFIG[libuv] = "--shared-libuv,,libuv"
 PACKAGECONFIG[nghttp2] = "--shared-nghttp2,,nghttp2"
@@ -83,8 +85,8 @@
     shutil.rmtree(d.getVar('S') + '/deps/openssl', True)
     if 'ares' in d.getVar('PACKAGECONFIG'):
         shutil.rmtree(d.getVar('S') + '/deps/cares', True)
-    if 'gyp' in d.getVar('PACKAGECONFIG'):
-        shutil.rmtree(d.getVar('S') + '/tools/gyp', True)
+    if 'brotli' in d.getVar('PACKAGECONFIG'):
+        shutil.rmtree(d.getVar('S') + '/deps/brotli', True)
     if 'libuv' in d.getVar('PACKAGECONFIG'):
         shutil.rmtree(d.getVar('S') + '/deps/uv', True)
     if 'nghttp2' in d.getVar('PACKAGECONFIG'):
@@ -98,7 +100,9 @@
     export LD="${CXX}"
     GYP_DEFINES="${GYP_DEFINES}" export GYP_DEFINES
     # $TARGET_ARCH settings don't match --dest-cpu settings
-   ./configure --prefix=${prefix} --without-snapshot --shared-openssl \
+    python3 configure.py --prefix=${prefix} --cross-compiling --without-snapshot --shared-openssl \
+               --without-dtrace \
+               --without-etw \
                --dest-cpu="${@map_nodejs_arch(d.getVar('TARGET_ARCH'), d)}" \
                --dest-os=linux \
                --libdir=${D}${libdir} \
@@ -113,6 +117,10 @@
 
 do_install () {
     oe_runmake install DESTDIR=${D}
+
+    # wasn't updated since 2009 and is the only thing requiring python2 in runtime
+    # ERROR: nodejs-12.14.1-r0 do_package_qa: QA Issue: /usr/lib/node_modules/npm/node_modules/node-gyp/gyp/samples/samples contained in package nodejs-npm requires /usr/bin/python, but no providers found in RDEPENDS_nodejs-npm? [file-rdeps]
+    rm -f ${D}${exec_prefix}/lib/node_modules/npm/node_modules/node-gyp/gyp/samples/samples
 }
 
 do_install_append_class-native() {
@@ -129,9 +137,15 @@
     # npm-cli.js continues to use old shebang
     sed "1s^.*^#\!/usr/bin/env node^g" -i ${D}${exec_prefix}/lib/node_modules/npm/bin/npm-cli.js
 
-    # Install the native torque to provide it within sysroot for the target compilation
+    # Install the native binaries to provide it within sysroot for the target compilation
     install -d ${D}${bindir}
     install -m 0755 ${S}/out/Release/torque ${D}${bindir}/torque
+    install -m 0755 ${S}/out/Release/bytecode_builtins_list_generator ${D}${bindir}/bytecode_builtins_list_generator
+    if ${@bb.utils.contains('PACKAGECONFIG','icu','true','false',d)}; then
+        install -m 0755 ${S}/out/Release/gen-regexp-special-case ${D}${bindir}/gen-regexp-special-case
+    fi
+    install -m 0755 ${S}/out/Release/mkcodecache ${D}${bindir}/mkcodecache
+    install -m 0755 ${S}/out/Release/node_mksnapshot ${D}${bindir}/node_mksnapshot
 }
 
 do_install_append_class-target() {
@@ -140,11 +154,10 @@
 
 PACKAGES =+ "${PN}-npm"
 FILES_${PN}-npm = "${exec_prefix}/lib/node_modules ${bindir}/npm ${bindir}/npx"
-RDEPENDS_${PN}-npm = "bash python-core python-shell python-datetime python-subprocess python-textutils \
-    python-compiler python-misc python-multiprocessing"
+RDEPENDS_${PN}-npm = "bash python3-core python3-shell python3-datetime \
+    python3-misc python3-multiprocessing"
 
 PACKAGES =+ "${PN}-systemtap"
 FILES_${PN}-systemtap = "${datadir}/systemtap"
 
-
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/octave/octave_4.4.1.bb b/meta-openembedded/meta-oe/recipes-devtools/octave/octave_4.4.1.bb
index 71d2450..ec3e825 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/octave/octave_4.4.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/octave/octave_4.4.1.bb
@@ -7,11 +7,11 @@
 
 DEPENDS = "gperf-native texinfo lapack pcre readline"
 
-inherit autotools pkgconfig texinfo gettext
+inherit autotools pkgconfig texinfo gettext mime-xdg
 
 EXTRA_OECONF = "--disable-java --disable-docs"
 
-SRC_URI = "${GNU_MIRROR}/octave/${PN}-${PV}.tar.gz \
+SRC_URI = "${GNU_MIRROR}/octave/${BPN}-${PV}.tar.gz \
            file://fix-blas-library-integer-size.patch \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/pcimem/pcimem_2.0.bb b/meta-openembedded/meta-oe/recipes-devtools/pcimem/pcimem_2.0.bb
new file mode 100644
index 0000000..107d5a8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/pcimem/pcimem_2.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Simple program to read & write to a pci device from userspace"
+HOMEPAGE = "https://github.com/billfarrow/pcimem"
+BUGTRACKER = "https://github.com/billfarrow/pcimem/issues"
+SECTION = "devel"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+COMPATIBLE_HOST = "(x86_64|aarch64|arm)"
+
+SRCREV = "09724edb1783a98da2b7ae53c5aaa87493aabc9b"
+SRC_URI = "git://github.com/billfarrow/pcimem.git "
+
+S = "${WORKDIR}/git"
+
+do_install() {
+    install -D -m 0755 ${B}/pcimem ${D}${bindir}/pcimem
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.642.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.643.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.642.bb
rename to meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.643.bb
index 7532b3f..75fad46 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.642.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/libdbi-perl_1.643.bb
@@ -10,8 +10,8 @@
 LIC_FILES_CHKSUM = "file://LICENSE;md5=10982c7148e0a012c0fd80534522f5c5"
 
 SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-${PV}.tar.gz"
-SRC_URI[md5sum] = "f2ba18b5cea1c8cb322a62be0a847f3d"
-SRC_URI[sha256sum] = "3f2025023a56286cebd15cb495e36ccd9b456c3cc229bf2ce1f69e9ebfc27f5d"
+SRC_URI[md5sum] = "352f80b1e23769c116082a90905d7398"
+SRC_URI[sha256sum] = "8a2b993db560a2c373c174ee976a51027dd780ec766ae17620c20393d2e836fa"
 
 S = "${WORKDIR}/DBI-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.12.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.14.bb
similarity index 73%
rename from meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.12.bb
rename to meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.14.bb
index b1a95e5..1ab21d1 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.12.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/libio-pty-perl_1.14.bb
@@ -5,8 +5,8 @@
 
 SRC_URI = "http://www.cpan.org/modules/by-module/IO/IO-Tty-${PV}.tar.gz"
 
-SRC_URI[md5sum] = "11695a1a516b3bd1b90ce75ff0ce3e6d"
-SRC_URI[sha256sum] = "a2ef8770d3309178203f8c8ac25e623e63cf76e97830fd3be280ade1a555290d"
+SRC_URI[md5sum] = "70bcec4b1b19838ed209fb96a13f3e89"
+SRC_URI[sha256sum] = "51f3e4e311128bdb2c6a15f02c51376cb852ccf9df9bebe8dfbb5f9561eb95b5"
 
 S = "${WORKDIR}/IO-Tty-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/libjson-perl_4.02000.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/libjson-perl_4.02000.bb
new file mode 100644
index 0000000..4e5a8a6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/libjson-perl_4.02000.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Perl module to decode/encode json files"
+DESCRIPTION = "This package contains the JSON.pm module with friends. \
+The module implements JSON encode/decode."
+
+HOMEPAGE = "https://metacpan.org/pod/JSON"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=1171;endline=1176;md5=3be2cb8159d094768e67386c453e8bbe"
+
+DEPENDS += "perl"
+
+SRC_URI = "git://github.com/makamaka/JSON.git;protocol=https"
+
+SRCREV = "42a6324df654e92419512cee80c0b49155d9e56d"
+
+S = "${WORKDIR}/git"
+
+inherit cpan
+
+RDEPENDS_${PN} += "perl"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/libperlio-gzip-perl_0.20.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/libperlio-gzip-perl_0.20.bb
new file mode 100644
index 0000000..ffe7a7d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/libperlio-gzip-perl_0.20.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Perl module to manipulate and access gzip files"
+DESCRIPTION = "This package contains the gzip.pm module with friends. \
+The module implements perlio layer for gzip."
+
+HOMEPAGE = "https://metacpan.org/pod/PerlIO::gzip"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=55;endline=61;md5=bc3da2dec1fbea59ac91172c5e0eb837"
+
+DEPENDS += "perl"
+
+SRC_URI = "https://cpan.metacpan.org/authors/id/N/NW/NWCLARK/PerlIO-gzip-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "0393eae5d0b23df6cf40ed44af7d711c"
+SRC_URI[sha256sum] = "4848679a3f201e3f3b0c5f6f9526e602af52923ffa471a2a3657db786bd3bdc5"
+
+S = "${WORKDIR}/PerlIO-gzip-${PV}"
+
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
+
+inherit cpan
+
+do_compile() {
+	export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+	cpan_do_compile
+}
+
+RDEPENDS_${PN} += "perl perl-module-perlio"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-Use-pkg-config-for-libxml2-detection.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-Use-pkg-config-for-libxml2-detection.patch
deleted file mode 100644
index ccc6d4e..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-Use-pkg-config-for-libxml2-detection.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-Use pkg-config for libxml2 detection.
-
-xml2-config does not work. Use pkgconfig to set CPPFLAGS and LIBS.
-
-Upstream-Status: Inappropriate [configuration]
-
-Signed-off-by:  Khem Raj <raj.khem@gmail.com>
----
- configure.in | 15 ++-------------
- 1 file changed, 2 insertions(+), 13 deletions(-)
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -2481,8 +2481,8 @@ AC_DEFUN([PHP_SETUP_LIBXML], [
-     LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
-     if test "$LIBXML_VERSION" -ge "2006011"; then
-       found_libxml=yes
--      LIBXML_LIBS=`$XML2_CONFIG --libs`
--      LIBXML_INCS=`$XML2_CONFIG --cflags`
-+      LIBXML_LIBS=`pkg-config --libs libxml-2.0`
-+      LIBXML_INCS=`pkg-config --cflags libxml-2.0`
-     else
-       AC_MSG_ERROR([libxml2 version 2.6.11 or greater required.])
-     fi
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-don-t-unset-cache-variables.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-don-t-unset-cache-variables.patch
deleted file mode 100644
index 51dbe26..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-don-t-unset-cache-variables.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From d2679c89c0b15b90e5360b4863258a7955e5f4e5 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Tue, 12 Feb 2019 15:59:19 +0800
-Subject: [PATCH] acinclude.m4: don't unset cache variables
-
-Unsetting prevents cache variable from being passed to configure.
-
-Upstream-Status: Inappropriate [OE-specific]
-
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
-
-update patch to version 7.3.2
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- acinclude.m4 | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index 25f900d..2641969 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -1921,8 +1921,6 @@ define([phpshift],[ifelse(index([$@],[,]),-1,,[substr([$@],incr(index([$@],[,]))
- dnl
- AC_DEFUN([PHP_CHECK_FUNC_LIB],[
-   ifelse($2,,:,[
--  unset ac_cv_lib_$2[]_$1
--  unset ac_cv_lib_$2[]___$1
-   unset found
-   AC_CHECK_LIB($2, $1, [found=yes], [
-     AC_CHECK_LIB($2, __$1, [found=yes], [found=no])
-@@ -1954,8 +1952,6 @@ dnl in the default libraries and as a fall back in the specified library.
- dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS.
- dnl
- AC_DEFUN([PHP_CHECK_FUNC],[
--  unset ac_cv_func_$1
--  unset ac_cv_func___$1
-   unset found
- 
-   AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ])
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-skip-binconfig-check-for-libxml.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-skip-binconfig-check-for-libxml.patch
deleted file mode 100644
index 1532926..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-acinclude.m4-skip-binconfig-check-for-libxml.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From a2d146b8dd9d02f523d1e205d79792626a71dec3 Mon Sep 17 00:00:00 2001
-From: Anuj Mittal <anuj.mittal@intel.com>
-Date: Mon, 2 Apr 2018 15:27:09 +0800
-Subject: [PATCH] acinclude.m4: skip binconfig check for libxml
-
-We want libxml flags to be picked up using pkg-config instead of the
-xml2-config file.
-
-Upstream-Status: Inappropriate [OE-specific]
-
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
-
----
- acinclude.m4 | 29 -----------------------------
- 1 file changed, 29 deletions(-)
-
-diff --git a/acinclude.m4 b/acinclude.m4
-index d42d708..d32766a 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -2525,35 +2525,6 @@ dnl
- AC_DEFUN([PHP_SETUP_LIBXML], [
-   found_libxml=no
- 
--  dnl First try to find xml2-config
--  AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
--  [
--    for i in $PHP_LIBXML_DIR /usr/local /usr; do
--      if test -x "$i/bin/xml2-config"; then
--        ac_cv_php_xml2_config_path="$i/bin/xml2-config"
--        break
--      fi
--    done
--  ])
--
--  if test -x "$ac_cv_php_xml2_config_path"; then
--    XML2_CONFIG="$ac_cv_php_xml2_config_path"
--    libxml_full_version=`$XML2_CONFIG --version`
--    ac_IFS=$IFS
--    IFS="."
--    set $libxml_full_version
--    IFS=$ac_IFS
--    LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3`
--    if test "$LIBXML_VERSION" -ge "2006011"; then
--      found_libxml=yes
--      LIBXML_LIBS=`$XML2_CONFIG --libs`
--      LIBXML_INCS=`$XML2_CONFIG --cflags`
--    else
--      AC_MSG_ERROR([libxml2 version 2.6.11 or greater required.])
--    fi
--  fi
--
--  dnl If xml2-config fails, try pkg-config
-   if test "$found_libxml" = "no"; then
-     if test -z "$PKG_CONFIG"; then
-       AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-configure.ac-don-t-include-build-libtool.m4.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-configure.ac-don-t-include-build-libtool.m4.patch
new file mode 100644
index 0000000..2861366
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-configure.ac-don-t-include-build-libtool.m4.patch
@@ -0,0 +1,30 @@
+From f5a34e771532b8433f307b679500c26af328ba35 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Fri, 17 Apr 2020 15:01:57 +0800
+Subject: [PATCH] configure.ac: don't include build/libtool.m4
+
+we delete build/libtool.m4 before do_configure,
+we will use libtool.m4 under ACLOCALDIR
+
+Upstream-Status: Inappropriate [oe-specific]
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 06c6a27..f85144e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -6,7 +6,6 @@ dnl ----------------------------------------------------------------------------
+ m4_include([build/ax_check_compile_flag.m4])
+ m4_include([build/ax_func_which_gethostbyname_r.m4])
+ m4_include([build/ax_gcc_func_attribute.m4])
+-m4_include([build/libtool.m4])
+ m4_include([build/php_cxx_compile_stdcxx.m4])
+ m4_include([build/php.m4])
+ m4_include([build/pkg.m4])
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch
deleted file mode 100644
index fce9738..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-main-php_ini.c-build-empty-php_load_zend_extension_c.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 2842aa2a078eb1cad55540b61e7edf111395150d Mon Sep 17 00:00:00 2001
-From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
-Date: Mon, 26 Feb 2018 19:30:55 +0100
-Subject: [PATCH] main/php_ini.c: build empty php_load_zend_extension_cb() when
- !HAVE_LIBDL
-
-Commit 0782a7fc6314c8bd3cbfd57f12d0479bf9cc8dc7 ("Fixed bug #74866
-extension_dir = "./ext" now use current directory for base") modified
-the php_load_zend_extension_cb() function to use php_load_shlib(), and
-pass a handle to the newly introduced zend_load_extension_handle()
-function instead of passing the extension path to
-zend_load_extension().
-
-While doing so, it introduced a call to php_load_shlib() from code
-that is built even when HAVE_LIBDL is not defined. However,
-php_load_shlib() is not implemented when HAVE_LIBDL is not defined,
-for obvious reasons.
-
-It turns out that zend_load_extension_handle() anyway doesn't do
-anything when ZEND_EXTENSIONS_SUPPORT is defined to 0, and
-ZEND_EXTENSIONS_SUPPORT is not defined when HAVE_LIBDL is not defined
-(Zend/zend_portability.h).
-
-Fixes the following build failure when building on a system that
-doesn't have libdl:
-
-main/php_ini.o: In function `php_load_zend_extension_cb':
-php_ini.c:(.text+0x478): undefined reference to `php_load_shlib'
-php_ini.c:(.text+0x4b0): undefined reference to `php_load_shlib'
-collect2: error: ld returned 1 exit status
-
-Upstream-Status: Backport [http://git.php.net/?p=php-src.git;a=commit;h=2842aa2a078eb1cad55540b61e7edf111395150d]
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
-Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
----
- main/php_ini.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/main/php_ini.c b/main/php_ini.c
-index ba58eb1..fca263e 100644
---- a/main/php_ini.c
-+++ b/main/php_ini.c
-@@ -350,6 +350,7 @@ static void php_load_php_extension_cb(void *arg)
- 
- /* {{{ php_load_zend_extension_cb
-  */
-+#ifdef HAVE_LIBDL
- static void php_load_zend_extension_cb(void *arg)
- {
- 	char *filename = *((char **) arg);
-@@ -409,6 +410,9 @@ static void php_load_zend_extension_cb(void *arg)
- 		efree(libpath);
- 	}
- }
-+#else
-+static void php_load_zend_extension_cb(void *arg) { }
-+#endif
- /* }}} */
- 
- /* {{{ php_init_config
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch
index 34f433f..ee0d5ed 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-opcache-config.m4-enable-opcache.patch
@@ -1,30 +1,27 @@
-From 8de5ba69d20d049b8ca983a9470c7303142ec0b3 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Sun, 28 Apr 2019 16:55:13 +0800
-Subject: [PATCH] From fb139d9707dabe1684b472a08a6eb5761ede4a3a Mon Sep 17
- 00:00:00 2001 From: Changqing Li <changqing.li@windriver.com> Date: Tue, 12
- Feb 2019 14:56:16 +0800 Subject: [PATCH] opcache/config.m4: enable opcache
+opcache/config.m4: enable opcache
 
-We can't use AC_TRY_RUN to run programs in a cross compile environment. Set
-the variables directly instead since we know that we'd be running on latest
+We can't use AC_TRY_RUN to run programs in a cross compile environment.
+Set
+the variables directly instead since we know that we'd be running on
+latest
 enough linux kernel.
 
 Upstream-Status: Inappropriate [Configuration]
 
 Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
 
-update patch to version 7.3.4
+update patch to version 7.4.4
 Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- ext/opcache/config.m4 | 312 +-------------------------------------------------
- 1 file changed, 6 insertions(+), 306 deletions(-)
+ ext/opcache/config.m4 | 194 +-------------------------------------------------
+ 1 file changed, 3 insertions(+), 191 deletions(-)
 
 diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4
-index 4810217..22c3d61 100644
+index 6c40caf..84ddf1e 100644
 --- a/ext/opcache/config.m4
 +++ b/ext/opcache/config.m4
-@@ -27,319 +27,19 @@ if test "$PHP_OPCACHE" != "no"; then
-   AC_CHECK_HEADERS([unistd.h sys/uio.h])
+@@ -23,201 +23,13 @@ if test "$PHP_OPCACHE" != "no"; then
+   AC_CHECK_FUNCS([mprotect])
  
    AC_MSG_CHECKING(for sysvipc shared memory support)
 -  AC_RUN_IFELSE([AC_LANG_SOURCE([[
@@ -95,9 +92,8 @@
 -    AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
 -    msg=yes],[msg=no],[msg=no])
 -  AC_MSG_RESULT([$msg])
--
 +  AC_DEFINE(HAVE_SHM_IPC, 1, [Define if you have SysV IPC SHM support])
-+  
+ 
    AC_MSG_CHECKING(for mmap() using MAP_ANON shared memory support)
 -  AC_RUN_IFELSE([AC_LANG_SOURCE([[
 -#include <sys/types.h>
@@ -114,7 +110,8 @@
 -#ifndef MAP_FAILED
 -# define MAP_FAILED ((void*)-1)
 -#endif
--
++  AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
+ 
 -int main() {
 -  pid_t pid;
 -  int status;
@@ -149,64 +146,8 @@
 -    AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
 -    msg=yes],[msg=no],[msg=no])
 -  AC_MSG_RESULT([$msg])
-+  AC_DEFINE(HAVE_SHM_MMAP_ANON, 1, [Define if you have mmap(MAP_ANON) SHM support])
- 
-   AC_MSG_CHECKING(for mmap() using /dev/zero shared memory support)
--  AC_RUN_IFELSE([AC_LANG_SOURCE([[
--#include <sys/types.h>
--#include <sys/wait.h>
--#include <sys/mman.h>
--#include <sys/stat.h>
--#include <fcntl.h>
--#include <unistd.h>
--#include <string.h>
 -
--#ifndef MAP_FAILED
--# define MAP_FAILED ((void*)-1)
--#endif
--
--int main() {
--  pid_t pid;
--  int status;
--  int fd;
--  char *shm;
--
--  fd = open("/dev/zero", O_RDWR, S_IRUSR | S_IWUSR);
--  if (fd == -1) {
--    return 1;
--  }
--
--  shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
--  if (shm == MAP_FAILED) {
--    return 2;
--  }
--
--  strcpy(shm, "hello");
--
--  pid = fork();
--  if (pid < 0) {
--    return 5;
--  } else if (pid == 0) {
--    strcpy(shm, "bye");
--    return 6;
--  }
--  if (wait(&status) != pid) {
--    return 7;
--  }
--  if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
--    return 8;
--  }
--  if (strcmp(shm, "bye") != 0) {
--    return 9;
--  }
--  return 0;
--}
--]])],[dnl
--    AC_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
--    msg=yes],[msg=no],[msg=no])
--  AC_MSG_RESULT([$msg])
-+  AC_DEFINE(HAVE_SHM_MMAP_ZERO, 1, [Define if you have mmap("/dev/zero") SHM support])
- 
+-  PHP_CHECK_FUNC_LIB(shm_open, rt)
    AC_MSG_CHECKING(for mmap() using shm_open() shared memory support)
 -  AC_RUN_IFELSE([AC_LANG_SOURCE([[
 -#include <sys/types.h>
@@ -230,7 +171,7 @@
 -  char *shm;
 -  char tmpname[4096];
 -
--  sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
+-  sprintf(tmpname,"/opcache.test.shm.%dXXXXXX", getpid());
 -  if (mktemp(tmpname) == NULL) {
 -    return 1;
 -  }
@@ -273,80 +214,15 @@
 -}
 -]])],[dnl
 -    AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
--    msg=yes],[msg=no],[msg=no])
--  AC_MSG_RESULT([$msg])
+-    AC_MSG_RESULT([yes])
+-    PHP_CHECK_LIBRARY(rt, shm_unlink, [PHP_ADD_LIBRARY(rt,1,OPCACHE_SHARED_LIBADD)])
+-  ],[
+-    AC_MSG_RESULT([no])
+-  ],[
+-    AC_MSG_RESULT([no])
+-  ])
 +  AC_DEFINE(HAVE_SHM_MMAP_POSIX, 1, [Define if you have POSIX mmap() SHM support])
  
-   AC_MSG_CHECKING(for mmap() using regular file shared memory support)
--  AC_RUN_IFELSE([AC_LANG_SOURCE([[
--#include <sys/types.h>
--#include <sys/wait.h>
--#include <sys/mman.h>
--#include <sys/stat.h>
--#include <fcntl.h>
--#include <unistd.h>
--#include <string.h>
--#include <stdlib.h>
--#include <stdio.h>
--
--#ifndef MAP_FAILED
--# define MAP_FAILED ((void*)-1)
--#endif
--
--int main() {
--  pid_t pid;
--  int status;
--  int fd;
--  char *shm;
--  char tmpname[4096];
--
--  sprintf(tmpname,"test.shm.%dXXXXXX", getpid());
--  if (mktemp(tmpname) == NULL) {
--    return 1;
--  }
--  fd = open(tmpname, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
--  if (fd == -1) {
--    return 2;
--  }
--  if (ftruncate(fd, 4096) < 0) {
--    close(fd);
--    unlink(tmpname);
--    return 3;
--  }
--
--  shm = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
--  if (shm == MAP_FAILED) {
--    return 4;
--  }
--  unlink(tmpname);
--  close(fd);
--
--  strcpy(shm, "hello");
--
--  pid = fork();
--  if (pid < 0) {
--    return 5;
--  } else if (pid == 0) {
--    strcpy(shm, "bye");
--    return 6;
--  }
--  if (wait(&status) != pid) {
--    return 7;
--  }
--  if (!WIFEXITED(status) || WEXITSTATUS(status) != 6) {
--    return 8;
--  }
--  if (strcmp(shm, "bye") != 0) {
--    return 9;
--  }
--  return 0;
--}
--]])],[dnl
--    AC_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
--    msg=yes],[msg=no],[msg=no])
--  AC_MSG_RESULT([$msg])
-+  AC_DEFINE(HAVE_SHM_MMAP_FILE, 1, [Define if you have mmap() SHM support])
- 
    PHP_NEW_EXTENSION(opcache,
  	ZendAccelerator.c \
 -- 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch
index 2f7d581..d687373 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php-don-t-use-broken-wrapper-for-mkdir.patch
@@ -4,17 +4,20 @@
 Subject: [PATCH 2/8] php: don't use broken wrapper for mkdir
 
 Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+
+update patch to version 7.4.4
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
 
 Upstream-Status: Inappropriate
 
- Makefile.global | 2 +-
+ build/Makefile.global | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/Makefile.global b/Makefile.global
+diff --git a/build/Makefile.global b/build/Makefile.global
 index ff858c2..ae554b4 100644
---- a/Makefile.global
-+++ b/Makefile.global
+--- a/build/Makefile.global
++++ b/build/Makefile.global
 @@ -1,4 +1,4 @@
 -mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p
 +mkinstalldirs = mkdir -p
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php.m4-don-t-unset-cache-variables.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php.m4-don-t-unset-cache-variables.patch
new file mode 100644
index 0000000..0d721ec
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/0001-php.m4-don-t-unset-cache-variables.patch
@@ -0,0 +1,39 @@
+php.m4: don't unset cache variables
+
+Unsetting prevents cache variable from being passed to configure.
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+
+update this patch to 7.4.4, acinclude.m4 move to build/php.m4
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ build/php.m4 | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/build/php.m4 b/build/php.m4
+index 5c45d13..218ec47 100644
+--- a/build/php.m4
++++ b/build/php.m4
+@@ -1587,8 +1587,6 @@ dnl PHP_CHECK_FUNC_LIB
+ dnl
+ AC_DEFUN([PHP_CHECK_FUNC_LIB],[
+   ifelse($2,,:,[
+-  unset ac_cv_lib_$2[]_$1
+-  unset ac_cv_lib_$2[]___$1
+   unset found
+   AC_CHECK_LIB($2, $1, [found=yes], [
+     AC_CHECK_LIB($2, __$1, [found=yes], [found=no])
+@@ -1620,8 +1618,6 @@ dnl and as a fall back in the specified library. Defines HAVE_func and
+ dnl HAVE_library if found and adds the library to LIBS.
+ dnl
+ AC_DEFUN([PHP_CHECK_FUNC],[
+-  unset ac_cv_func_$1
+-  unset ac_cv_func___$1
+   unset found
+ 
+   AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ])
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/0048-Use-pkg-config-for-FreeType2-detection.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/0048-Use-pkg-config-for-FreeType2-detection.patch
deleted file mode 100644
index f36ddac..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/0048-Use-pkg-config-for-FreeType2-detection.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From: =?utf-8?b?T25kxZllaiBTdXLDvQ==?= <ondrej@sury.org>
-Date: Mon, 22 Oct 2018 06:54:31 +0000
-Subject: Use pkg-config for FreeType2 detection
-
----
- ext/gd/config.m4 | 30 +++++++++++++++++++-----------
- 1 file changed, 19 insertions(+), 11 deletions(-)
-
-diff --git a/ext/gd/config.m4 b/ext/gd/config.m4
-index 498d870..d28c6ae 100644
---- a/ext/gd/config.m4
-+++ b/ext/gd/config.m4
-@@ -184,21 +184,29 @@ AC_DEFUN([PHP_GD_XPM],[
- AC_DEFUN([PHP_GD_FREETYPE2],[
-   if test "$PHP_FREETYPE_DIR" != "no"; then
- 
--    for i in $PHP_FREETYPE_DIR /usr/local /usr; do
--      if test -f "$i/bin/freetype-config"; then
--        FREETYPE2_DIR=$i
--        FREETYPE2_CONFIG="$i/bin/freetype-config"
--        break
-+    if test -z "$PKG_CONFIG"; then
-+      AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-+    fi
-+    if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists freetype2 ; then
-+      FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags freetype2`
-+      FREETYPE2_LIBS=`$PKG_CONFIG --libs freetype2`
-+    else
-+      for i in $PHP_FREETYPE_DIR /usr/local /usr; do
-+        if test -f "$i/bin/freetype-config"; then
-+          FREETYPE2_DIR=$i
-+          FREETYPE2_CONFIG="$i/bin/freetype-config"
-+          break
-+        fi
-+      done
-+
-+      if test -z "$FREETYPE2_DIR"; then
-+        AC_MSG_ERROR([freetype-config not found.])
-       fi
--    done
- 
--    if test -z "$FREETYPE2_DIR"; then
--      AC_MSG_ERROR([freetype-config not found.])
-+      FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags`
-+      FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs`
-     fi
- 
--    FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags`
--    FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs`
--
-     PHP_EVAL_INCLINE($FREETYPE2_CFLAGS)
-     PHP_EVAL_LIBLINE($FREETYPE2_LIBS, GD_SHARED_LIBADD)
-     AC_DEFINE(HAVE_LIBFREETYPE,1,[ ])
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php5.conf b/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php5.conf
deleted file mode 100644
index 1de6fb1..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/70_mod_php5.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-# vim: ft=apache sw=4 ts=4
-<IfDefine PHP5>
-	# Load the module first
-	<IfModule !sapi_apache2.c>
-		LoadModule php5_module    lib/apache2/modules/libphp5.so
-	</IfModule>
-
-	# Set it to handle the files
-	AddHandler php5-script .php .phtml .php3 .php4 .php5
-	AddType application/x-httpd-php-source .phps
-	DirectoryIndex index.html index.html.var index.php index.phtml
-</IfDefine>
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/CVE-2019-6978.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/CVE-2019-6978.patch
deleted file mode 100644
index b7cdfd9..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/CVE-2019-6978.patch
+++ /dev/null
@@ -1,192 +0,0 @@
-From 089f7c0bc28d399b0420aa6ef058e4c1c120b2ae Mon Sep 17 00:00:00 2001
-From: "Christoph M. Becker" <cmbecker69@gmx.de>
-Date: Sat, 19 Jan 2019 10:35:39 +0100
-Subject: [PATCH] Sync with upstream
-
-Even though libgd/libgd#492 is not a relevant bug fix for PHP, since
-the binding doesn't use the `gdImage*Ptr()` functions at all, we're
-porting the fix to stay in sync here.
----
- ext/gd/libgd/gd_gif_out.c | 20 +++++++++++++++++---
- ext/gd/libgd/gd_jpeg.c    | 17 ++++++++++++++---
- ext/gd/libgd/gd_wbmp.c    | 18 +++++++++++++++---
- 3 files changed, 46 insertions(+), 9 deletions(-)
-
-Upstream-Status: Backport [http://git.php.net/?p=php-src.git;a=commit;h=089f7c0bc28d399b0420aa6ef058e4c1c120b2ae]
-CVE: CVE-2019-6978
-
-Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
-
-diff --git a/ext/gd/libgd/gd_gif_out.c b/ext/gd/libgd/gd_gif_out.c
-index 1f2a6b936a..2e1f38af70 100644
---- a/ext/gd/libgd/gd_gif_out.c
-+++ b/ext/gd/libgd/gd_gif_out.c
-@@ -97,12 +97,18 @@ static void cl_hash (register count_int chsize, GifCtx *ctx);
- static void char_init (GifCtx *ctx);
- static void char_out (int c, GifCtx *ctx);
- static void flush_char (GifCtx *ctx);
-+
-+static int _gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
-+
- void * gdImageGifPtr (gdImagePtr im, int *size)
- {
-   void *rv;
-   gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
--  gdImageGifCtx (im, out);
--  rv = gdDPExtractData (out, size);
-+	if (!_gdImageGifCtx(im, out)) {
-+		rv = gdDPExtractData(out, size);
-+	} else {
-+		rv = NULL;
-+	}
-   out->gd_free (out);
-   return rv;
- }
-@@ -115,6 +121,12 @@ void gdImageGif (gdImagePtr im, FILE * outFile)
- }
- 
- void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
-+{
-+	_gdImageGifCtx(im, out);
-+}
-+
-+/* returns 0 on success, 1 on failure */
-+static int _gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
- {
- 	gdImagePtr pim = 0, tim = im;
- 	int interlace, BitsPerPixel;
-@@ -125,7 +137,7 @@ void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
- 			based temporary image. */
- 		pim = gdImageCreatePaletteFromTrueColor(im, 1, 256);
- 		if (!pim) {
--			return;
-+			return 1;
- 		}
- 		tim = pim;
- 	}
-@@ -138,6 +150,8 @@ void gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
- 		/* Destroy palette based temporary image. */
- 		gdImageDestroy(	pim);
- 	}
-+
-+    return 0;
- }
- 
- static int
-diff --git a/ext/gd/libgd/gd_jpeg.c b/ext/gd/libgd/gd_jpeg.c
-index 8cf71fcbc9..ef46c4a22c 100644
---- a/ext/gd/libgd/gd_jpeg.c
-+++ b/ext/gd/libgd/gd_jpeg.c
-@@ -132,6 +132,7 @@ const char * gdJpegGetVersionString()
- 	}
- }
- 
-+static int _gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality);
- 
- /*
-  * Write IM to OUTFILE as a JFIF-formatted JPEG image, using quality
-@@ -153,8 +154,11 @@ void *gdImageJpegPtr (gdImagePtr im, int *size, int quality)
- {
- 	void *rv;
- 	gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
--	gdImageJpegCtx (im, out, quality);
--	rv = gdDPExtractData (out, size);
-+	if (!_gdImageJpegCtx(im, out, quality)) {
-+		rv = gdDPExtractData(out, size);
-+	} else {
-+		rv = NULL;
-+	}
- 	out->gd_free (out);
- 
- 	return rv;
-@@ -163,6 +167,12 @@ void *gdImageJpegPtr (gdImagePtr im, int *size, int quality)
- void jpeg_gdIOCtx_dest (j_compress_ptr cinfo, gdIOCtx * outfile);
- 
- void gdImageJpegCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
-+{
-+	_gdImageJpegCtx(im, outfile, quality);
-+}
-+
-+/* returns 0 on success, 1 on failure */
-+static int _gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
- {
- 	struct jpeg_compress_struct cinfo;
- 	struct jpeg_error_mgr jerr;
-@@ -184,7 +194,7 @@ void gdImageJpegCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
- 		if (row) {
- 			gdFree (row);
- 		}
--		return;
-+		return 1;
- 	}
- 
- 	cinfo.err->error_exit = fatal_jpeg_error;
-@@ -277,6 +287,7 @@ void gdImageJpegCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
- 	jpeg_finish_compress (&cinfo);
- 	jpeg_destroy_compress (&cinfo);
- 	gdFree (row);
-+	return 0;
- }
- 
- gdImagePtr gdImageCreateFromJpeg (FILE * inFile)
-diff --git a/ext/gd/libgd/gd_wbmp.c b/ext/gd/libgd/gd_wbmp.c
-index 55ced3443d..fd9edad2ca 100644
---- a/ext/gd/libgd/gd_wbmp.c
-+++ b/ext/gd/libgd/gd_wbmp.c
-@@ -82,6 +82,7 @@ int gd_getin (void *in)
- 	return (gdGetC((gdIOCtx *) in));
- }
- 
-+static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out);
- 
- /*      gdImageWBMPCtx
-    **  --------------
-@@ -93,6 +94,12 @@ int gd_getin (void *in)
-    **  out:    the stream where to write
-  */
- void gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out)
-+{
-+	_gdImageWBMPCtx(image, fg, out);
-+}
-+
-+/* returns 0 on success, 1 on failure */
-+static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out)
- {
- 	int x, y, pos;
- 	Wbmp *wbmp;
-@@ -100,7 +107,7 @@ void gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out)
- 	/* create the WBMP */
- 	if ((wbmp = createwbmp (gdImageSX (image), gdImageSY (image), WBMP_WHITE)) == NULL) {
- 		gd_error("Could not create WBMP");
--		return;
-+		return 1;
- 	}
- 
- 	/* fill up the WBMP structure */
-@@ -116,7 +123,9 @@ void gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out)
- 
- 	/* write the WBMP to a gd file descriptor */
- 	if (writewbmp (wbmp, &gd_putout, out)) {
-+		freewbmp(wbmp);
- 		gd_error("Could not save WBMP");
-+		return 1;
- 	}
- 	/* des submitted this bugfix: gdFree the memory. */
- 	freewbmp(wbmp);
-@@ -204,8 +213,11 @@ void * gdImageWBMPPtr (gdImagePtr im, int *size, int fg)
- {
- 	void *rv;
- 	gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
--	gdImageWBMPCtx(im, fg, out);
--	rv = gdDPExtractData(out, size);
-+	if (!_gdImageWBMPCtx(im, fg, out)) {
-+		rv = gdDPExtractData(out, size);
-+	} else {
-+		rv = NULL;
-+	}
- 	out->gd_free(out);
- 
- 	return rv;
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch
index ecf7d87..9ec8a89 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/iconv.patch
@@ -1,32 +1,33 @@
-From 17cc5645f3acf943a5a06465d09d0ebcfea987bd Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 2 Nov 2011 16:54:57 +0100
-Subject: [PATCH] Upstream-Status: Pending
+Subject: [PATCH] From 17cc5645f3acf943a5a06465d09d0ebcfea987bd Mon Sep 17
+ 00:00:00 2001 From: Koen Kooi <koen@dominion.thruhere.net> Date: Wed, 2 Nov
+ 2011 16:54:57 +0100 Subject: [PATCH] Upstream-Status: Pending
 
+update patch to version 7.4.4
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- acinclude.m4        | 3 ++-
+ build/php.m4        | 3 ++-
  ext/iconv/config.m4 | 2 +-
  2 files changed, 3 insertions(+), 2 deletions(-)
 
-diff --git a/acinclude.m4 b/acinclude.m4
-index d32766a..ad5166e 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -2445,7 +2445,8 @@ AC_DEFUN([PHP_SETUP_ICONV], [
-   dnl Check libc first if no path is provided in --with-iconv
-   dnl
+diff --git a/build/php.m4 b/build/php.m4
+index 7392876..5c45d13 100644
+--- a/build/php.m4
++++ b/build/php.m4
+@@ -1950,7 +1950,8 @@ AC_DEFUN([PHP_SETUP_ICONV], [
+   echo > ext/iconv/php_iconv_supports_errno.h
  
+   dnl Check libc first if no path is provided in --with-iconv.
 -  if test "$PHP_ICONV" = "yes"; then
 +  dnl must check against no, not against yes as PHP_ICONV can also include a path, which implies yes
 +  if test "$PHP_ICONV" != "no"; then
-     dnl Reset LIBS temporarily as it may have already been included
-     dnl -liconv in.
+     dnl Reset LIBS temporarily as it may have already been included -liconv in.
      LIBS_save="$LIBS"
+     LIBS=
 diff --git a/ext/iconv/config.m4 b/ext/iconv/config.m4
-index 6a05697..973e750 100644
+index fe9b47a..b6b632f 100644
 --- a/ext/iconv/config.m4
 +++ b/ext/iconv/config.m4
-@@ -15,7 +15,7 @@ if test "$PHP_ICONV" != "no"; then
+@@ -14,7 +14,7 @@ if test "$PHP_ICONV" != "no"; then
  
    if test "$iconv_avail" != "no"; then
      if test -z "$ICONV_DIR"; then
@@ -35,3 +36,6 @@
          if test -f "$i/include/iconv.h" || test -f "$i/include/giconv.h"; then
            PHP_ICONV_PREFIX="$i"
            break
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch
index 16359af..ebe5f6a 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/imap-fix-autofoo.patch
@@ -1,32 +1,19 @@
-From c084c8349d1780980e232cb28b60a109e3d89438 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 2 Nov 2011 16:54:57 +0100
-Subject: [PATCH] Upstream-Status: Pending
+Subject: [PATCH] From c084c8349d1780980e232cb28b60a109e3d89438 Mon Sep 17
+ 00:00:00 2001 From: Koen Kooi <koen@dominion.thruhere.net> Date: Wed, 2 Nov
+ 2011 16:54:57 +0100 Subject: [PATCH] Upstream-Status: Pending
 
+update patch to version 7.4.4
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- acinclude.m4       |  2 +-
  ext/imap/config.m4 | 10 ++--------
- 2 files changed, 3 insertions(+), 9 deletions(-)
+ 1 file changed, 2 insertions(+), 8 deletions(-)
 
-diff --git a/acinclude.m4 b/acinclude.m4
-index ad5166e..f6a55ec 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -2350,7 +2350,7 @@ AC_DEFUN([PHP_SETUP_OPENSSL],[
-       PHP_OPENSSL_DIR="/usr/local/ssl /usr/local /usr /usr/local/openssl"
-     fi
- 
--    for i in $PHP_OPENSSL_DIR; do
-+    for i in $PHP_OPENSSL_DIR $PHP_OPENSSL_DIR/usr; do
-       if test -r $i/include/openssl/evp.h; then
-         OPENSSL_INCDIR=$i/include
-       fi
 diff --git a/ext/imap/config.m4 b/ext/imap/config.m4
-index badb6e2..8ff803c 100644
+index 5086a31..0e938bd 100644
 --- a/ext/imap/config.m4
 +++ b/ext/imap/config.m4
-@@ -109,7 +109,7 @@ if test "$PHP_IMAP" != "no"; then
-     PHP_NEW_EXTENSION(imap, php_imap.c, $ext_shared)
+@@ -110,7 +110,7 @@ if test "$PHP_IMAP" != "no"; then
+     PHP_NEW_EXTENSION(imap, php_imap.c, $ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
      AC_DEFINE(HAVE_IMAP,1,[ ])
  
 -    for i in $PHP_IMAP /usr/local /usr; do
@@ -34,7 +21,7 @@
        IMAP_INC_CHK()
        el[]IMAP_INC_CHK(/include/c-client)
        el[]IMAP_INC_CHK(/include/imap)
-@@ -198,13 +198,7 @@ if test "$PHP_IMAP" != "no"; then
+@@ -199,13 +199,7 @@ if test "$PHP_IMAP" != "no"; then
        AC_MSG_ERROR(Cannot find rfc822.h. Please check your c-client installation.)
      fi
  
@@ -49,3 +36,6 @@
        IMAP_LIB=$lib
        IMAP_LIB_CHK($PHP_LIBDIR)
        IMAP_LIB_CHK(c-client)
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch
index 336cf0d..eb73bc4 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/phar-makefile.patch
@@ -1,24 +1,25 @@
-From 08962a56f69963e01892d98ca5b75de8354bd3f5 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 2 Nov 2011 16:54:57 +0100
-Subject: [PATCH] Fix phar packaging
+Subject: [PATCH] From 08962a56f69963e01892d98ca5b75de8354bd3f5 Mon Sep 17
+ 00:00:00 2001 From: Koen Kooi <koen@dominion.thruhere.net> Date: Wed, 2 Nov
+ 2011 16:54:57 +0100 Subject: [PATCH] Fix phar packaging
 
 Inherited from OE-Classic, with some additions to fix host paths leaking
 into the target package.
 
 Upstream-Status: Inappropriate [config]
 
+update patch to version 7.4.4
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  ext/phar/Makefile.frag | 17 +++--------------
  1 file changed, 3 insertions(+), 14 deletions(-)
 
 diff --git a/ext/phar/Makefile.frag b/ext/phar/Makefile.frag
-index 0e3713f..22f7898 100644
+index 6442f33..6145412 100644
 --- a/ext/phar/Makefile.frag
 +++ b/ext/phar/Makefile.frag
 @@ -10,20 +10,9 @@ pharcmd: $(builddir)/phar.php $(builddir)/phar.phar
  
- PHP_PHARCMD_SETTINGS = -n -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1' -d phar.readonly=0 -d 'safe_mode=0'
+ PHP_PHARCMD_SETTINGS = -n -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1' -d phar.readonly=0
  PHP_PHARCMD_EXECUTABLE = ` \
 -	if test -x "$(top_builddir)/$(SAPI_CLI_PATH)"; then \
 -		$(top_srcdir)/build/shtool echo -n -- "$(top_builddir)/$(SAPI_CLI_PATH) -n"; \
@@ -34,9 +35,12 @@
 -		$(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; \
 -	fi;`
 -PHP_PHARCMD_BANG = `$(top_srcdir)/build/shtool echo -n -- "$(INSTALL_ROOT)$(bindir)/$(program_prefix)php$(program_suffix)$(EXEEXT)";`
-+		$(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; `
++               $(top_srcdir)/build/shtool echo -n -- "$(PHP_EXECUTABLE)"; `
 +
 +PHP_PHARCMD_BANG = `$(top_srcdir)/build/shtool echo -n -- "$(bindir)/$(program_prefix)php$(program_suffix)$(EXEEXT)";`
  
  $(builddir)/phar/phar.inc: $(srcdir)/phar/phar.inc
  	-@test -d $(builddir)/phar || mkdir $(builddir)/phar
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch b/meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch
index 8040900..4aec481 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php/php_exec_native.patch
@@ -1,22 +1,26 @@
-From d251b5aa3d23803d016ca16818e2e1d2f2b70a02 Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed, 2 Nov 2011 16:54:57 +0100
-Subject: [PATCH] Upstream-Status: Inappriate
+Subject: [PATCH] rom d251b5aa3d23803d016ca16818e2e1d2f2b70a02 Mon Sep 17
+ 00:00:00 2001 From: Koen Kooi <koen@dominion.thruhere.net> Date: Wed, 2 Nov
+ 2011 16:54:57 +0100 Subject: [PATCH] Upstream-Status: Inappriate
 
+update patch to version 7.4.4
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  sapi/cli/config.m4 | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/sapi/cli/config.m4 b/sapi/cli/config.m4
-index 2168151..20a81db 100644
+index 917d45f..aaf1e27 100644
 --- a/sapi/cli/config.m4
 +++ b/sapi/cli/config.m4
-@@ -50,7 +50,7 @@ if test "$PHP_CLI" != "no"; then
+@@ -47,7 +47,7 @@ if test "$PHP_CLI" != "no"; then
    esac
  
-   dnl Set executable for tests
+   dnl Set executable for tests.
 -  PHP_EXECUTABLE="\$(top_builddir)/\$(SAPI_CLI_PATH)"
 +  PHP_EXECUTABLE="${PHP_NATIVE_DIR}/php"
    PHP_SUBST(PHP_EXECUTABLE)
  
-   dnl Expose to Makefile
+   dnl Expose to Makefile.
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php_7.3.11.bb b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.4.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-devtools/php/php_7.3.11.bb
rename to meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.4.bb
index e7fb847..ff4c28e 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php_7.3.11.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.4.bb
@@ -3,7 +3,7 @@
 SECTION = "console/network"
 
 LICENSE = "PHP-3.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=fb07bfc51f6d5e0c30b65d9701233b2e"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7e571b888d585b31f9ef5edcc647fa30"
 
 BBCLASSEXTEND = "native"
 DEPENDS = "zlib bzip2 libxml2 virtual/libiconv php-native lemon-native"
@@ -13,11 +13,9 @@
 
 SRC_URI = "http://php.net/distributions/php-${PV}.tar.bz2 \
            file://0001-php-don-t-use-broken-wrapper-for-mkdir.patch \
-           file://0001-acinclude.m4-don-t-unset-cache-variables.patch \
-           file://0048-Use-pkg-config-for-FreeType2-detection.patch \
-           file://0001-Use-pkg-config-for-libxml2-detection.patch \
            file://debian-php-fixheader.patch \
-           file://CVE-2019-6978.patch \
+           file://0001-configure.ac-don-t-include-build-libtool.m4.patch \
+           file://0001-php.m4-don-t-unset-cache-variables.patch \
           "
 
 SRC_URI_append_class-target = " \
@@ -34,10 +32,10 @@
             file://xfail_two_bug_tests.patch \
           "
 S = "${WORKDIR}/php-${PV}"
-SRC_URI[md5sum] = "21b710b4126d4d54714de9693a6c7b0d"
-SRC_URI[sha256sum] = "92d1ff4b13c7093635f1ec338a5e6891ca99b10e65fbcadd527e5bb84d11b5e7"
+SRC_URI[md5sum] = "262c258a3b8b5699fcca89a64e58758c"
+SRC_URI[sha256sum] = "308e8f4182ec8a2767b0b1b8e1e7c69fb149b37cfb98ee4a37475e082fa9829f"
 
-inherit autotools pkgconfig pythonnative gettext
+inherit autotools pkgconfig python3native gettext
 
 # phpize is not scanned for absolute paths by default (but php-config is).
 #
@@ -55,7 +53,6 @@
                        --libdir=${PHP_LIBDIR} \
 "
 EXTRA_OECONF = "--enable-mbstring \
-                --enable-wddx \
                 --enable-fpm \
                 --with-libdir=${baselib} \
                 --with-gettext=${STAGING_LIBDIR}/.. \
@@ -107,6 +104,7 @@
 PACKAGECONFIG[opcache] = "--enable-opcache,--disable-opcache"
 PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl"
 PACKAGECONFIG[valgrind] = "--with-valgrind=${STAGING_DIR_TARGET}/usr,--with-valgrind=no,valgrind"
+PACKAGECONFIG[mbregex] = "--enable-mbregex, --disable-mbregex, oniguruma"
 
 export PHP_NATIVE_DIR = "${STAGING_BINDIR_NATIVE}"
 export PHP_PEAR_PHP_BIN = "${STAGING_BINDIR_NATIVE}/php"
@@ -149,16 +147,12 @@
 # fixme
 do_install_append_class-target() {
     install -d ${D}${sysconfdir}/
-    if [ -d ${RECIPE_SYSROOT_NATIVE}${sysconfdir} ];then
-         install -m 0644 ${RECIPE_SYSROOT_NATIVE}${sysconfdir}/pear.conf ${D}${sysconfdir}/
-    fi
     rm -rf ${D}/${TMPDIR}
     rm -rf ${D}/.registry
     rm -rf ${D}/.channels
     rm -rf ${D}/.[a-z]*
     rm -rf ${D}/var
     rm -f  ${D}/${sysconfdir}/php-fpm.conf.default
-    sed -i 's:${STAGING_DIR_NATIVE}::g' ${D}${sysconfdir}/pear.conf
     install -m 0644 ${WORKDIR}/php-fpm.conf ${D}/${sysconfdir}/php-fpm.conf
     install -d ${D}/${sysconfdir}/apache2/conf.d
     install -m 0644 ${WORKDIR}/php-fpm-apache.conf ${D}/${sysconfdir}/apache2/conf.d/php-fpm.conf
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ply/ply_git.bb b/meta-openembedded/meta-oe/recipes-devtools/ply/ply_git.bb
new file mode 100644
index 0000000..7d693b3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/ply/ply_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Ply: A light-weight dynamic tracer for eBPF"
+HOMEPAGE = "https://github.com/iovisor/ply"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS += "bison-native"
+
+SRC_URI = "git://github.com/iovisor/ply"
+SRCREV = "aa5b9ac31307ec1acece818be334ef801c802a12"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep
+
+COMPATIBLE_HOST = "(x86_64.*|aarch64.*|arm.*|powerpc.*)-linux"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.2.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.3.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.2.bb
rename to meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.3.bb
index b92f82d..94c3893 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.3.bb
@@ -12,7 +12,7 @@
 
 DEPENDS = "protobuf-native protobuf"
 
-SRCREV = "1390409f4ee4e26d0635310995b516eb702c3f9e"
+SRCREV = "f20a3fa131c275a0e795d99a28f94b4dbbb5af26"
 
 SRC_URI = "git://github.com/protobuf-c/protobuf-c.git \
            file://0001-avoid-race-condition.patch \
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.10.1.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.11.4.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.10.1.bb
rename to meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.11.4.bb
index 58526f1..4d6c5b2 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.10.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.11.4.bb
@@ -10,9 +10,9 @@
 DEPENDS = "zlib"
 DEPENDS_append_class-target = " protobuf-native"
 
-SRCREV = "d09d649aea36f02c03f8396ba39a8d4db8a607e4"
+SRCREV = "d0bfd5221182da1a7cc280f3337b5e41a89539cf"
 
-SRC_URI = "git://github.com/google/protobuf.git;branch=3.10.x \
+SRC_URI = "git://github.com/google/protobuf.git;branch=3.11.x \
            file://run-ptest \
            file://0001-protobuf-fix-configure-error.patch \
            file://0001-Makefile.am-include-descriptor.cc-when-building-libp.patch \
diff --git a/meta-openembedded/meta-oe/recipes-devtools/pugixml/pugixml_1.10.bb b/meta-openembedded/meta-oe/recipes-devtools/pugixml/pugixml_1.10.bb
index d48ad37..69e6628 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/pugixml/pugixml_1.10.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/pugixml/pugixml_1.10.bb
@@ -13,6 +13,8 @@
 SRC_URI[md5sum] = "f97237e9908201c6d8536210747b66af"
 SRC_URI[sha256sum] = "55f399fbb470942410d348584dc953bcaec926415d3462f471ef350f29b5870a"
 
+UPSTREAM_CHECK_URI = "https://github.com/zeux/${BPN}/releases"
+
 inherit cmake
 
 EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON \
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-cpuset_1.6.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-cpuset_1.6.bb
deleted file mode 100644
index 1255a51..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-cpuset_1.6.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Cpuset is a Python application to make using the cpusets facilities in the Linux kernel easier"
-SECTION = "devel/python"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-
-S = "${WORKDIR}/git"
-SRCREV = "6c46d71a1c6ee711063153b9f7787280128f7252"
-SRC_URI = "git://github.com/lpechacek/cpuset.git;protocol=https;"
-
-inherit distutils
-
-RDEPENDS_${PN} = "\
-    python-core \
-    python-re \
-    python-logging \
-    python-textutils \
-    python-unixadmin \
-    "
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.bb
deleted file mode 100644
index eb84f74..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-distutils-extra.bb
+++ /dev/null
@@ -1,7 +0,0 @@
-require python-distutils-extra.inc
-
-inherit setuptools
-
-RDEPENDS_${PN} = "\
-    python-distutils \
-"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-futures_3.3.0.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-futures_3.3.0.bb
deleted file mode 100644
index 1636f73..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-futures_3.3.0.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-DESCRIPTION = "The concurrent.futures module provides a high-level interface for asynchronously executing callables."
-SECTION = "devel/python"
-LICENSE = "PSF"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=834d982f973c48b6d662b5944c5ab567"
-HOMEPAGE = "https://github.com/agronholm/pythonfutures"
-DEPENDS = "python"
-
-SRC_URI[md5sum] = "b43a39ae1475e3fd6940f2b4f7214675"
-SRC_URI[sha256sum] = "7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794"
-
-inherit pypi setuptools
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-jsmin_2.2.2.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-jsmin_2.2.2.bb
deleted file mode 100644
index d00d1e2..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-jsmin_2.2.2.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "JavaScript minifier."
-HOMEPAGE = "https://github.com/tikitu/jsmin/"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3a3301ce2ad647e172f4a1016c67324d"
-
-inherit setuptools pypi
-SRC_URI[md5sum] = "00e7a3179a4591aab2ee707b3214e2fd"
-SRC_URI[sha256sum] = "b6df99b2cd1c75d9d342e4335b535789b8da9107ec748212706ef7bbe5c2553b"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject/0001-python-pyobject-fix-install-dir.patch b/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject/0001-python-pyobject-fix-install-dir.patch
deleted file mode 100644
index 848cda5..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject/0001-python-pyobject-fix-install-dir.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 8b4648d5bc50cb1c14961ed38bf97d5a693f5237 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 24 Jun 2019 14:51:52 +0800
-Subject: [PATCH] python-pyobject: fix the wrong install dir for python2
-
-* after upgrade to 3.32.1, pygobject switch to build with meson, and
-  default python option is python3, switch to python2
-
-* default install dir get by python.install_sources and 
-python.get_install_dir is get from python's sysconfig info,
-not like python3, for python2, the install dir include the basedir of
-recipe-sysroot-native, add stagedir option for user to config
-correct install dir.
-
-Upstream-Status: Inappropriate [oe-specific]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- gi/meson.build            | 7 +++----
- gi/overrides/meson.build  | 4 ++--
- gi/repository/meson.build | 4 ++--
- meson.build               | 4 +++-
- meson_options.txt         | 1 +
- pygtkcompat/meson.build   | 4 ++--
- 6 files changed, 13 insertions(+), 11 deletions(-)
-
-diff --git a/gi/meson.build b/gi/meson.build
-index c1afd68..249c23d 100644
---- a/gi/meson.build
-+++ b/gi/meson.build
-@@ -60,9 +60,8 @@ python_sources = [
-   'types.py',
- ]
- 
--python.install_sources(python_sources,
--  pure : false,
--  subdir : 'gi'
-+install_data(python_sources,
-+  install_dir: join_paths(stagedir, 'gi')
- )
- 
- # https://github.com/mesonbuild/meson/issues/4117
-@@ -76,7 +75,7 @@ giext = python.extension_module('_gi', sources,
-   dependencies : [python_ext_dep, glib_dep, gi_dep, ffi_dep],
-   include_directories: include_directories('..'),
-   install: true,
--  subdir : 'gi',
-+  install_dir: join_paths(stagedir, 'gi'),
-   c_args: pyext_c_args + main_c_args
- )
-
-diff --git a/gi/overrides/meson.build b/gi/overrides/meson.build
-index 6ff073f..964fef1 100644
---- a/gi/overrides/meson.build
-+++ b/gi/overrides/meson.build
-@@ -10,6 +10,6 @@ python_sources = [
-   'keysyms.py',
-   '__init__.py']
- 
--python.install_sources(python_sources,
--  subdir : join_paths('gi', 'overrides')
-+install_data(python_sources,
-+  install_dir: join_paths(stagedir, 'gi', 'overrides')
- )
-diff --git a/gi/repository/meson.build b/gi/repository/meson.build
-index fdc136b..fc88adf 100644
---- a/gi/repository/meson.build
-+++ b/gi/repository/meson.build
-@@ -1,5 +1,5 @@
- python_sources = ['__init__.py']
- 
--python.install_sources(python_sources,
--  subdir : join_paths('gi', 'repository')
-+install_data(python_sources,
-+  install_dir: join_paths(stagedir, 'gi', 'repository')
- )
-diff --git a/meson.build b/meson.build
-index d27a005..ecd55d5 100644
---- a/meson.build
-+++ b/meson.build
-@@ -165,12 +165,14 @@ else
-   py_version = pygobject_version
- endif
- 
-+stagedir = get_option('stagedir')
-+
- pkginfo_conf = configuration_data()
- pkginfo_conf.set('VERSION', py_version)
- configure_file(input : 'PKG-INFO.in',
-   output : 'PyGObject-@0@.egg-info'.format(py_version),
-   configuration : pkginfo_conf,
--  install_dir : python.get_install_dir(pure : false))
-+  install_dir : stagedir)
- 
- subdir('gi')
- subdir('pygtkcompat')
-diff --git a/meson_options.txt b/meson_options.txt
-index 5dd4cbc..21def16 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -1,3 +1,4 @@
- option('python', type : 'string', value : 'python3')
- option('pycairo', type : 'boolean', value : true, description : 'build with pycairo integration')
- option('tests', type : 'boolean', value : true, description : 'build unit tests')
-+option('stagedir', type : 'string', value : '')
-diff --git a/pygtkcompat/meson.build b/pygtkcompat/meson.build
-index 9e43c44..ef3322d 100644
---- a/pygtkcompat/meson.build
-+++ b/pygtkcompat/meson.build
-@@ -3,6 +3,6 @@ python_sources = [
-   'generictreemodel.py',
-   'pygtkcompat.py']
- 
--python.install_sources(python_sources,
--  subdir : 'pygtkcompat'
-+install_data(python_sources,
-+  install_dir: join_paths(stagedir, 'pygtkcompat')
- )
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject_3.34.0.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject_3.34.0.bb
deleted file mode 100644
index 0cbd07f..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-pygobject_3.34.0.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "Python GObject bindings"
-HOMEPAGE = "http://www.pygtk.org/"
-SECTION = "devel/python"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
-
-GNOMEBASEBUILDCLASS = "meson"
-inherit gnomebase gobject-introspection distutils-base upstream-version-is-even
-
-DEPENDS += "python glib-2.0"
-
-SRCNAME = "pygobject"
-SRC_URI = " \
-    http://ftp.gnome.org/pub/GNOME/sources/${SRCNAME}/${@gnome_verdir("${PV}")}/${SRCNAME}-${PV}.tar.xz \
-    file://0001-python-pyobject-fix-install-dir.patch \
-"
-
-SRC_URI[md5sum] = "ca1dc4f31c1d6d283758e8f315a88ab6"
-SRC_URI[sha256sum] = "87e2c9aa785f352ef111dcc5f63df9b85cf6e05e52ff04f803ffbebdacf5271a"
-
-S = "${WORKDIR}/${SRCNAME}-${PV}"
-
-UNKNOWN_CONFIGURE_WHITELIST = "introspection"
-
-PACKAGECONFIG ??= "stagedir"
-
-PACKAGECONFIG[cairo] = "-Dpycairo=true,-Dpycairo=false, cairo python-pycairo, python-pycairo"
-PACKAGECONFIG[tests] = "-Dtests=true, -Dtests=false, , "
-PACKAGECONFIG[python] = "-Dpython=python3, -Dpython=python2, , "
-PACKAGECONFIG[stagedir] = "-Dstagedir=${PYTHON_SITEPACKAGES_DIR}, -Dstagedir="", , "
-
-BBCLASSEXTEND = "native"
-RDEPENDS_${PN} = "python-pkgutil"
-RDEPENDS_${PN}_class-native = ""
-
-do_install_append() {
-    # Remove files that clash with python3-pygobject; their content is same
-    rm -r ${D}${includedir}/pygobject-3.0/pygobject.h ${D}${libdir}/pkgconfig
-}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-pytoml.inc b/meta-openembedded/meta-oe/recipes-devtools/python/python-pytoml.inc
deleted file mode 100644
index 180531d..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-pytoml.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-SUMMARY = "A TOML-0.4.0 parser/writer for Python"
-HOMEPAGE = "https://pypi.python.org/pypi/pytoml/"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=cfff423699bdaef24331933ac4f56078"
-
-SRC_URI[md5sum] = "e59dd36a559dd2a876e4c149c69e947b"
-SRC_URI[sha256sum] = "8eecf7c8d0adcff3b375b09fe403407aa9b645c499e5ab8cac670ac4a35f61e7"
-
-inherit pypi
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-pytoml_0.1.21.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-pytoml_0.1.21.bb
deleted file mode 100644
index 88fa953..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-pytoml_0.1.21.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit pypi setuptools
-require python-pytoml.inc
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-six_1.13.0.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-six_1.13.0.bb
deleted file mode 100644
index af26e83..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-six_1.13.0.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-inherit pypi setuptools
-require recipes-devtools/python/python-six.inc
diff --git a/meta-openembedded/meta-oe/recipes-devtools/python/python-which_1.1.0.bb b/meta-openembedded/meta-oe/recipes-devtools/python/python-which_1.1.0.bb
deleted file mode 100644
index 901fdc7..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/python/python-which_1.1.0.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-DESCRIPTION = "which.py -- a portable GNU which replacement"
-HOMEPAGE = "http://code.google.com/p/which/"
-SECTION = "devel/python"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=030b09798681482b9ad12ac47be496ea"
-
-inherit setuptools pypi python-dir
-
-SRCREV = "425bdeeb2d87c36e2313dc4b8d69ff2bb5a02ee9"
-PYPI_SRC_URI = "git://github.com/trentm/which"
-
-S = "${WORKDIR}/git"
-
-do_install_append() {
-    rmdir -p --ignore-fail-on-non-empty ${D}${STAGING_BINDIR_NATIVE}
-    rmdir -p --ignore-fail-on-non-empty ${D}${datadir}
-}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/sip/sip_4.19.19.bb b/meta-openembedded/meta-oe/recipes-devtools/sip/sip_4.19.19.bb
deleted file mode 100644
index 3da15b8..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/sip/sip_4.19.19.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-require sip.inc
-
-DEPENDS = "python"
-
-inherit python-dir pythonnative
-
-PACKAGES += "python-sip"
-
-FILES_python-sip = "${libdir}/${PYTHON_DIR}/site-packages/"
-FILES_${PN}-dbg += "${libdir}/${PYTHON_DIR}/site-packages/.debug"
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.9.3.bb b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.9.4.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.9.3.bb
rename to meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.9.4.bb
index dba607c..cfe461b 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.9.3.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.9.4.bb
@@ -10,8 +10,8 @@
 
 inherit autotools
 
-# v0.9.3
-SRCREV = "e77780e7524c0a97f25313b205837191bbe9712a"
+# v0.9.4
+SRCREV = "5e422c0ec87b41d14e9ce8527983406718ef64e0"
 SRC_URI = "git://github.com/namhyung/${BPN} \
            "
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yasm/yasm_git.bb b/meta-openembedded/meta-oe/recipes-devtools/yasm/yasm_git.bb
index dc4fbf7..5385626 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/yasm/yasm_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/yasm/yasm_git.bb
@@ -13,7 +13,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools gettext pythonnative
+inherit autotools gettext python3native
 
 CACHED_CONFIGUREVARS = "CCLD_FOR_BUILD='${CC_FOR_BUILD}'"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.16.bb b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.16.bb
index 1b0af55..db90f06 100644
--- a/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.16.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.16.bb
@@ -29,7 +29,7 @@
            ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk+ libnotify xcb-util libxscrnsaver', '', d)} \
            nettle \
 "
-SRCREV = "a432e1ccbf864f99c7b29a1645de38056915f944"
+SRCREV = "e0e033af9fca3cca84a3417ea6531ae25be73a7a"
 BRANCH = "client_release/7/${PV}"
 SRC_URI = "git://github.com/BOINC/boinc;protocol=https;branch=${BRANCH} \
            file://boinc-AM_CONDITIONAL.patch \
@@ -73,15 +73,16 @@
 	sed -i -e 's|^sys_lib_dlsearch_path_spec=.*|sys_lib_dlsearch_path_spec=""|g' ${B}/${TARGET_SYS}-libtool
 	sed -i -e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' ${B}/${TARGET_SYS}-libtool
 }
+
 do_install_append() {
 	if [ -e ${D}${nonarch_libdir}/systemd/system/boinc-client.service ]; then
-                install -d ${D}${systemd_system_unitdir}
+		install -d ${D}${systemd_system_unitdir}
 		mv \
 		${D}${nonarch_libdir}/systemd/system/boinc-client.service \
 		${D}${systemd_system_unitdir}/boinc-client.service
 		rmdir --ignore-fail-on-non-empty ${D}${nonarch_libdir}/systemd/system \
-                ${D}${nonarch_libdir}/systemd \
-                ${D}${nonarch_libdir}
+		${D}${nonarch_libdir}/systemd \
+		${D}${nonarch_libdir}
 	fi
 }
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.7.bb b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.7.bb
index e4e454b..70dbcaf 100644
--- a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.7.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.7.bb
@@ -18,3 +18,5 @@
 		mv -v "${lib}" "$(echo ${lib} | sed s/-static//)"
 	done
 }
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20191125.bb b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20191125.bb
deleted file mode 100644
index a4e57f5..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20191125.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-# Sigh. This is one of those places where everyone licenses it differently. Someone
-# even apply UCB to it (Free/Net/OpenBSD). The maintainer states that:
-# "I've found no reliable source which states that byacc must bear a UCB copyright."
-# Setting to PD as this is what the upstream has it as.
-
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://package/debian/copyright;md5=3eb7c635434fafe23ef30fc263e63b2f"
-require byacc.inc
-
-SRC_URI[md5sum] = "6745a4fbf0723c4c9280fc3e568b3d1b"
-SRC_URI[sha256sum] = "071c2ebe36afaa8448b80e893473a681e63a3b8a4ed636c0d675780a02411cde"
diff --git a/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20200330.bb b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20200330.bb
new file mode 100644
index 0000000..975311c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/byacc/byacc_20200330.bb
@@ -0,0 +1,11 @@
+# Sigh. This is one of those places where everyone licenses it differently. Someone
+# even apply UCB to it (Free/Net/OpenBSD). The maintainer states that:
+# "I've found no reliable source which states that byacc must bear a UCB copyright."
+# Setting to PD as this is what the upstream has it as.
+
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://package/debian/copyright;md5=262857ec5923f073fa06a1f1812225ea"
+require byacc.inc
+
+SRC_URI[md5sum] = "decf6e6b82ea2efae6bbad32d7777da8"
+SRC_URI[sha256sum] = "e099e2dd8a684d739ac6b9a0e43d468314a5bc34fd21466502d120b18df51fb0"
diff --git a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles/python3.patch b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles/python3.patch
new file mode 100644
index 0000000..a6f6701
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles/python3.patch
@@ -0,0 +1,16 @@
+--- a/modules/packages/apt_get
++++ b/modules/packages/apt_get
+@@ -1,4 +1,4 @@
+-#!/var/cfengine/bin/python
++#!/var/cfengine/bin/python3
+ 
+ import sys
+ import os
+--- a/modules/packages/apt_get.in
++++ b/modules/packages/apt_get.in
+@@ -1,4 +1,4 @@
+-#!@bindir@/python
++#!@bindir@/python3
+ 
+ import sys
+ import os
diff --git a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.12.0.bb b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.15.0.bb
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.12.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.15.0.bb
index dda6af9..35ac855 100644
--- a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.12.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine-masterfiles_3.15.0.bb
@@ -20,10 +20,11 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=9f76426f9ef8c6f6739fadd21d817a4f"
 
-SRC_URI = "https://cfengine-package-repos.s3.amazonaws.com/tarballs/${BP}.tar.gz"
-
-SRC_URI[md5sum] = "d59bd8c95620da816c382f749d425860"
-SRC_URI[sha256sum] = "1c50e3d8c702097e13a21258626d936d6ff2e6492e893dfe286ff0d6204d7a65"
+SRC_URI = "https://cfengine-package-repos.s3.amazonaws.com/tarballs/${BP}.tar.gz \
+           file://python3.patch \
+           "
+SRC_URI[md5sum] = "6d456fdd9bd24ff6617eeaa05efae602"
+SRC_URI[sha256sum] = "4a071c0c4ba7df9bad93144cff5fbc0566e5172afd66201072e3193b76c55a38"
 
 inherit autotools
 
@@ -31,6 +32,10 @@
 
 EXTRA_OECONF = "--prefix=${datadir}/cfengine"
 
+do_install_append() {
+    rm -rf ${D}${datadir}/cfengine/modules/packages/zypper ${D}${datadir}/cfengine/modules/packages/yum
+}
+
 FILES_${PN} = "${datadir}/cfengine"
 
-RDEPENDS_${PN} += "python-core"
+RDEPENDS_${PN} += "python3-core"
diff --git a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.12.0.bb b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.15.0.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.12.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.15.0.bb
index 9d0123d..2d146bf 100644
--- a/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.12.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/cfengine/cfengine_3.15.0.bb
@@ -11,18 +11,17 @@
 HOMEPAGE = "http://cfengine.com"
 
 LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f8b34828ab373d6b1bb4b0fc60a78494"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=233aa25e53983237cf0bd4c238af255f"
 
-DEPENDS = "attr tokyocabinet"
+DEPENDS = "attr tokyocabinet bison-native"
 
 SRC_URI = "https://cfengine-package-repos.s3.amazonaws.com/tarballs/${BP}.tar.gz \
            file://set-path-of-default-config-file.patch \
            "
+SRC_URI[md5sum] = "d4dabfa46d8afa151be5610f184354e7"
+SRC_URI[sha256sum] = "fa53e137f850eb268a8e7ae4578b5db5dc383656341f5053dc1a353ed0288265"
 
-SRC_URI[md5sum] = "33ef12260db4b430352229f37f7cb0e5"
-SRC_URI[sha256sum] = "d71ba98a272390c6fa8bc20e8ea27f0050a0a72a3e6b206a4762b4646be332ec"
-
-inherit autotools systemd
+inherit autotools-brokensep systemd
 
 export EXPLICIT_VERSION="${PV}"
 
@@ -67,6 +66,7 @@
         install -m 0755 -D ${D}${sysconfdir}/init.d/cfengine3 ${D}${datadir}/${BPN}/cfengine3
         sed -i -e 's#/etc/init.d#${datadir}/${BPN}#' ${D}${systemd_system_unitdir}/*.service
     fi
+    rm -rf ${D}${datadir}/cfengine/modules/packages/zypper
 }
 
 RDEPENDS_${PN} += "${BPN}-masterfiles"
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-Remove-including-sys-sysctl.h-on-glibc-based-systems.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-Remove-including-sys-sysctl.h-on-glibc-based-systems.patch
index 3dee34c..7948788 100644
--- a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-Remove-including-sys-sysctl.h-on-glibc-based-systems.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-Remove-including-sys-sysctl.h-on-glibc-based-systems.patch
@@ -3,80 +3,29 @@
 Date: Sat, 27 Jul 2019 14:20:14 -0700
 Subject: [PATCH] Remove including sys/sysctl.h on glibc based systems
 
-Glibc 2.30 has added deprecation notice and collectd detects it as warning [1]
+Glibc 2.30 has added deprecation notice and collectd detects it as
+warning [1]
 
 Fixes
-sys/sysctl.h:21:2: error: "The <sys/sysctl.h> header is deprecated and will be removed." [-Werror,-W#warnings]
+sys/sysctl.h:21:2: error: "The <sys/sysctl.h> header is deprecated and
+will be removed." [-Werror,-W#warnings]
 
-[1] https://sourceware.org/git/?p=glibc.git;a=commit;h=744e829637162bb7d5029632aacf341c64b86990
+[1]
+https://sourceware.org/git/?p=glibc.git;a=commit;h=744e829637162bb7d5029632aacf341c64b86990
 
-Upstream-Status: Submitted [https://github.com/collectd/collectd/pull/3234]
+Upstream-Status: Submitted
+[https://github.com/collectd/collectd/pull/3234]
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
- src/contextswitch.c | 2 +-
- src/memory.c        | 2 +-
- src/swap.c          | 2 +-
- src/uuid.c          | 2 +-
- 4 files changed, 4 insertions(+), 4 deletions(-)
+ src/processes.c | 2 +-
+ src/uptime.c    | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
 
---- a/src/contextswitch.c
-+++ b/src/contextswitch.c
-@@ -26,7 +26,7 @@
- #include "common.h"
- #include "plugin.h"
- 
--#ifdef HAVE_SYS_SYSCTL_H
-+#if defined(HAVE_SYS_SYSCTL_H) && !defined(__GLIBC__)
- #include <sys/sysctl.h>
- #endif
- 
---- a/src/memory.c
-+++ b/src/memory.c
-@@ -28,7 +28,7 @@
- #include "common.h"
- #include "plugin.h"
- 
--#ifdef HAVE_SYS_SYSCTL_H
-+#if defined(HAVE_SYS_SYSCTL_H) && !defined(__GLIBC__)
- #include <sys/sysctl.h>
- #endif
- #ifdef HAVE_SYS_VMMETER_H
---- a/src/swap.c
-+++ b/src/swap.c
-@@ -49,7 +49,7 @@
- #if HAVE_SYS_PARAM_H
- #include <sys/param.h>
- #endif
--#if HAVE_SYS_SYSCTL_H
-+#if defined(HAVE_SYS_SYSCTL_H) && !defined(__GLIBC__)
- #include <sys/sysctl.h>
- #endif
- #if HAVE_SYS_DKSTAT_H
---- a/src/uuid.c
-+++ b/src/uuid.c
-@@ -29,7 +29,7 @@
- #include "common.h"
- #include "plugin.h"
- 
--#if HAVE_SYS_SYSCTL_H
-+#if defined(HAVE_SYS_SYSCTL_H) && !defined(__GLIBC__)
- #include <sys/sysctl.h>
- #endif
- 
---- a/src/cpu.c
-+++ b/src/cpu.c
-@@ -60,7 +60,7 @@
- 
- #if (defined(HAVE_SYSCTL) && HAVE_SYSCTL) ||                                   \
-     (defined(HAVE_SYSCTLBYNAME) && HAVE_SYSCTLBYNAME)
--#ifdef HAVE_SYS_SYSCTL_H
-+#if defined(HAVE_SYS_SYSCTL_H) && !defined(__GLIBC__)
- #include <sys/sysctl.h>
- #endif
- 
+diff --git a/src/processes.c b/src/processes.c
+index f83913a..9f71511 100644
 --- a/src/processes.c
 +++ b/src/processes.c
-@@ -82,7 +82,7 @@
+@@ -87,7 +87,7 @@
  #if HAVE_MACH_VM_PROT_H
  #include <mach/vm_prot.h>
  #endif
@@ -85,6 +34,8 @@
  #include <sys/sysctl.h>
  #endif
  /* #endif HAVE_THREAD_INFO */
+diff --git a/src/uptime.c b/src/uptime.c
+index 0892bda..4b15150 100644
 --- a/src/uptime.c
 +++ b/src/uptime.c
 @@ -33,7 +33,7 @@
@@ -96,3 +47,7 @@
  #include <sys/sysctl.h>
  /* Using sysctl interface to retrieve the boot time on *BSD / Darwin / OS X
   * systems */
+ 
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-conditionally-check-libvirt.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-conditionally-check-libvirt.patch
deleted file mode 100644
index 5ee75cb..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-conditionally-check-libvirt.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 385bf1c2ec57942e17ee529e57eef0dcd99904e6 Mon Sep 17 00:00:00 2001
-From: Roy Li <rongqing.li@windriver.com>
-Date: Tue, 1 Sep 2015 17:00:33 +0800
-Subject: [PATCH] [PATCH] conditionally check libvirt
-
-Upstream-Statue: Pending
-
-check if libvirt is available only when a user wants to use libvirt
-
-Signed-off-by: Roy Li <rongqing.li@windriver.com>
-
----
- configure.ac | 13 ++++++++-----
- 1 file changed, 8 insertions(+), 5 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 101d6f9f..a7eca97d 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -5758,11 +5758,14 @@ else
-   with_libxml2="no (pkg-config doesn't know libxml-2.0)"
- fi
- 
--$PKG_CONFIG --exists libvirt 2>/dev/null
--if test $? = 0; then
--  with_libvirt="yes"
--else
--  with_libvirt="no (pkg-config doesn't know libvirt)"
-+if test "x$enable_libvirt" = "xyes"; then
-+	$PKG_CONFIG --exists libvirt 2>/dev/null
-+	if test "$?" = "0"
-+	then
-+		with_libvirt="yes"
-+	else
-+		with_libvirt="no (pkg-config doesn't know libvirt)"
-+	fi
- fi
- 
- if test "x$with_libxml2" = "xyes"; then
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch
index d2c7268..8d31e12 100644
--- a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-configure-Check-for-Wno-error-format-truncation-comp.patch
@@ -23,9 +23,9 @@
 index a7eca97d..560eb988 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -6794,6 +6794,7 @@ if test "x$enable_werror" != "xno"; then
-   AM_CFLAGS="$AM_CFLAGS -Werror"
-   AM_CXXFLAGS="$AM_CXXFLAGS -Werror"
+@@ -7101,6 +7101,7 @@ if test "x$GCC" = "xyes"; then
+     AM_CXXFLAGS="$AM_CXXFLAGS -Werror"
+   fi
  fi
 +AX_CHECK_COMPILE_FLAG([-Werror -Werror=format-truncation],[AM_CFLAGS="$AM_CFLAGS -Wno-error=format-truncation" AM_CXXFLAGS="$AM_CXXFLAGS -Wno-error=format-truncation"])
  
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch
index be942e5..1e140f9 100644
--- a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd/0001-fix-to-build-with-glibc-2.25.patch
@@ -11,8 +11,8 @@
 index 3725f9a..202225b 100644
 --- a/src/md.c
 +++ b/src/md.c
-@@ -25,6 +25,7 @@
- #include "utils_ignorelist.h"
+@@ -26,6 +26,7 @@
+ #include "utils/ignorelist/ignorelist.h"
  
  #include <sys/ioctl.h>
 +#include <sys/sysmacros.h>
diff --git a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.8.1.bb b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.11.0.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.8.1.bb
rename to meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.11.0.bb
index 0951ac0..a70e82e 100644
--- a/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.8.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/collectd/collectd_5.11.0.bb
@@ -9,17 +9,16 @@
            file://collectd.init \
            file://collectd.service \
            file://no-gcrypt-badpath.patch \
-           file://0001-conditionally-check-libvirt.patch \
            file://0001-fix-to-build-with-glibc-2.25.patch \
            file://0001-configure-Check-for-Wno-error-format-truncation-comp.patch \
            file://0005-Disable-new-gcc8-warnings.patch \
            file://0006-libcollectdclient-Fix-string-overflow-errors.patch \
            file://0001-Remove-including-sys-sysctl.h-on-glibc-based-systems.patch \
            "
-SRC_URI[md5sum] = "bfce96c42cede5243028510bcc57c1e6"
-SRC_URI[sha256sum] = "e796fda27ce06377f491ad91aa286962a68c2b54076aa77a29673d53204453da"
+SRC_URI[md5sum] = "13b1c946f6684abe453e24b5cd80ec45"
+SRC_URI[sha256sum] = "37b10a806e34aa8570c1cafa6006c604796fae13cc2e1b3e630d33dcba9e5db2"
 
-inherit autotools pythonnative update-rc.d pkgconfig systemd
+inherit autotools python3native update-rc.d pkgconfig systemd
 
 SYSTEMD_SERVICE_${PN} = "collectd.service"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.24.bb b/meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.25.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.24.bb
rename to meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.25.bb
index 52bd11b..cf24354 100644
--- a/meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.24.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/ddrescue/ddrescue_1.25.bb
@@ -10,8 +10,8 @@
                     file://main_common.cc;beginline=5;endline=16;md5=3ec288b2676528cd2b069364e313016f"
 
 SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.lz"
-SRC_URI[md5sum] = "8ac89f833c0df221723e33b447e230fe"
-SRC_URI[sha256sum] = "4b5d3feede70e3657ca6b3c7844f23131851cbb6af0cecc9721500f7d7021087"
+SRC_URI[md5sum] = "99fd7a28bf9953d88534c7ee9ab5bd2a"
+SRC_URI[sha256sum] = "ce538ebd26a09f45da67d3ad3f7431932428231ceec7a2d255f716fa231a1063"
 
 # This isn't already added by base.bbclass
 do_unpack[depends] += "lzip-native:do_populate_sysroot"
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/0002-Don-t-execute-processes-as-a-specific-user.patch b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/0002-Don-t-execute-processes-as-a-specific-user.patch
new file mode 100644
index 0000000..181be25
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/0002-Don-t-execute-processes-as-a-specific-user.patch
@@ -0,0 +1,94 @@
+From bcca4c99394ba422d03a5e76f2a0023ef248824a Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei.gherzan@windriver.com>
+Date: Tue, 18 Nov 2014 15:47:22 +0100
+Subject: [PATCH 2/4] Don't execute processes as a specific user.
+
+Upstream-Status: Inappropriate [Configuration Specific]
+Signed-off-by: Andrei Gherzan <andrei.gherzan@windriver.com>
+---
+ systemd/dlt-adaptor-udp.service.cmake  | 1 -
+ systemd/dlt-dbus.service.cmake         | 1 -
+ systemd/dlt-example-user.service.cmake | 1 -
+ systemd/dlt-receive.service.cmake      | 1 -
+ systemd/dlt-system.service.cmake       | 1 -
+ systemd/dlt.service.cmake              | 1 -
+ 6 files changed, 6 deletions(-)
+
+diff --git a/systemd/dlt-adaptor-udp.service.cmake b/systemd/dlt-adaptor-udp.service.cmake
+index 8dac1f2..ecf9f9e 100644
+--- a/systemd/dlt-adaptor-udp.service.cmake
++++ b/systemd/dlt-adaptor-udp.service.cmake
+@@ -21,9 +21,8 @@ Wants=dlt.service
+ 
+ [Service]
+ Type=simple
+-User=@DLT_USER@
+ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-adaptor-udp -a @DLT_ADAPTOR_UDP_APPID@ -c @DLT_ADAPTOR_UDP_CTID@ -p @DLT_ADAPTOR_UDP_PORT@
+ LimitCORE=infinity
+ 
+ [Install]
+-WantedBy=multi-user.target
+\ No newline at end of file
++WantedBy=multi-user.target
+diff --git a/systemd/dlt-dbus.service.cmake b/systemd/dlt-dbus.service.cmake
+index 9baf3e9..74a7eac 100644
+--- a/systemd/dlt-dbus.service.cmake
++++ b/systemd/dlt-dbus.service.cmake
+@@ -20,7 +20,6 @@ Wants=dlt.service
+ 
+ [Service]
+ Type=simple
+-User=@DLT_USER@
+ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-dbus
+ WatchdogSec=@DLT_WatchdogSec@
+ NotifyAccess=main
+diff --git a/systemd/dlt-example-user.service.cmake b/systemd/dlt-example-user.service.cmake
+index b665742..35009b0 100644
+--- a/systemd/dlt-example-user.service.cmake
++++ b/systemd/dlt-example-user.service.cmake
+@@ -21,6 +21,5 @@ Wants=dlt.service
+ 
+ [Service]
+ Type=simple
+-User=@DLT_USER@
+ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-example-user "Hallo from GENIVI DLT example user application"
+-LimitCORE=infinity
+\ No newline at end of file
++LimitCORE=infinity
+diff --git a/systemd/dlt-receive.service.cmake b/systemd/dlt-receive.service.cmake
+index c07d447..8f88f00 100644
+--- a/systemd/dlt-receive.service.cmake
++++ b/systemd/dlt-receive.service.cmake
+@@ -22,6 +22,5 @@ Wants=dlt.service
+ 
+ [Service]
+ Type=simple
+-User=@DLT_USER@
+ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-receive -o /tmp/dlt_receive_log.dlt localhost
+-LimitCORE=infinity
+\ No newline at end of file
++LimitCORE=infinity
+diff --git a/systemd/dlt-system.service.cmake b/systemd/dlt-system.service.cmake
+index 0e91f42..1a5b913 100755
+--- a/systemd/dlt-system.service.cmake
++++ b/systemd/dlt-system.service.cmake
+@@ -22,7 +22,6 @@ Wants=dlt.service
+ 
+ [Service]
+ Type=simple
+-User=@DLT_USER@
+ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-system
+ WatchdogSec=@DLT_WatchdogSec@
+ NotifyAccess=main
+diff --git a/systemd/dlt.service.cmake b/systemd/dlt.service.cmake
+index 0b3ee2c..e4753a2 100755
+--- a/systemd/dlt.service.cmake
++++ b/systemd/dlt.service.cmake
+@@ -21,7 +21,6 @@ Documentation=man:dlt-daemon(1) man:dlt.conf(5)
+ 
+ [Service]
+ Type=simple
+-User=@DLT_USER@
+ ExecStart=@CMAKE_INSTALL_PREFIX@/bin/dlt-daemon
+ WatchdogSec=@DLT_WatchdogSec@
+ NotifyAccess=main
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/0004-Modify-systemd-config-directory.patch b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/0004-Modify-systemd-config-directory.patch
new file mode 100644
index 0000000..ce028c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/0004-Modify-systemd-config-directory.patch
@@ -0,0 +1,24 @@
+From 9a5e655cf57301008cd61d53c8a410a7f397e650 Mon Sep 17 00:00:00 2001
+From: Andrei Gherzan <andrei.gherzan@windriver.com>
+Date: Tue, 18 Nov 2014 15:51:30 +0100
+Subject: [PATCH 4/4] Modify systemd config directory
+
+Upstream-Status: Inappropriate [Configuration Specific]
+Signed-off-by: Andrei Gherzan <andrei.gherzan@windriver.com>
+---
+ systemd/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e6b44a2..0e885bf 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -201,7 +201,7 @@ if(WITH_SYSTEMD OR WITH_SYSTEMD_WATCHDOG OR WITH_SYSTEMD_JOURNAL)
+ 
+     set(systemd_SRCS ${PROJECT_SOURCE_DIR}/systemd/3rdparty/sd-daemon.c)
+ 
+-    set(SYSTEMD_UNITDIR "${CMAKE_INSTALL_PREFIX}/lib/systemd/system" CACHE PATH
++    set(SYSTEMD_UNITDIR "/lib/systemd/system" CACHE PATH
+         "Set directory to install systemd unit files")
+ 
+     add_subdirectory(systemd)
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/204.patch b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/204.patch
new file mode 100644
index 0000000..f0fc0bc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/204.patch
@@ -0,0 +1,148 @@
+Upstream-Status: Submitted [https://github.com/GENIVI/dlt-daemon/pull/204]
+From 92830aff6e91041f574753d78da758c62981d9a4 Mon Sep 17 00:00:00 2001
+From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Date: Sat, 25 Jan 2020 09:08:07 +0100
+Subject: [PATCH 1/3] dlt_user.h: fix build when musl is the libc
+ implementation, by adding a missing include for pthread_t reference:
+
+see https://errors.yoctoproject.org/Errors/Details/308000/ for details
+
+Thanks Khem Raj <raj.khem@gmail.com> for the report
+
+Signed-off-by: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Signed-off-by: Gianfranco Costamagna <locutusofborg@debian.org>
+---
+ include/dlt/dlt_user.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/dlt/dlt_user.h b/include/dlt/dlt_user.h
+index 69cb854..766d349 100644
+--- a/include/dlt/dlt_user.h
++++ b/include/dlt/dlt_user.h
+@@ -74,6 +74,7 @@
+  \{
+  */
+ #   include <mqueue.h>
++#   include <pthread.h>
+ 
+ #   if !defined (__WIN32__)
+ #      include <semaphore.h>
+
+From 5f67aba02c12b7446e63ccc86285c13bc5c7a432 Mon Sep 17 00:00:00 2001
+From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Date: Sat, 25 Jan 2020 09:16:14 +0100
+Subject: [PATCH 2/3] dlt-test-init-free: fix build failure with strict
+ compiler flags, due to uint being undefined. This is actually an "int" type,
+ looking at the test implementation
+
+Signed-off-by: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Signed-off-by: Gianfranco Costamagna <locutusofborg@debian.org>
+---
+ src/tests/dlt-test-init-free.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/tests/dlt-test-init-free.c b/src/tests/dlt-test-init-free.c
+index 96b5245..35b8803 100644
+--- a/src/tests/dlt-test-init-free.c
++++ b/src/tests/dlt-test-init-free.c
+@@ -32,7 +32,7 @@
+ 
+ void exec(const char *cmd, char *buffer, size_t length);
+ void printMemoryUsage();
+-char *occupyMemory(uint size);
++char *occupyMemory(int size);
+ void do_example_test();
+ void do_dlt_test();
+ 
+@@ -131,7 +131,7 @@ void printMemoryUsage()
+     printf("%s", result);
+ }
+ 
+-char *occupyMemory(uint size)
++char *occupyMemory(int size)
+ {
+     char *buf = (char *)malloc(size * sizeof(char));
+ 
+
+From c790d61fad382e5d3e648ee99904087eb9bc4a77 Mon Sep 17 00:00:00 2001
+From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Date: Sat, 25 Jan 2020 09:20:48 +0100
+Subject: [PATCH 3/3] sys/poll.h: deprecate old sys/poll.h include header, now
+ glibc/musl wants poll.h being included directly. This fixes a build failure
+ on musl systems with strict c hardening flags
+
+Signed-off-by: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Signed-off-by: Gianfranco Costamagna <locutusofborg@debian.org>
+---
+ src/console/logstorage/dlt-logstorage-ctrl.c | 2 +-
+ src/daemon/dlt_daemon_event_handler.c        | 2 +-
+ src/daemon/dlt_daemon_event_handler.h        | 2 +-
+ src/daemon/dlt_daemon_event_handler_types.h  | 2 +-
+ src/lib/dlt_user.c                           | 2 +-
+ 5 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/console/logstorage/dlt-logstorage-ctrl.c b/src/console/logstorage/dlt-logstorage-ctrl.c
+index 525c137..6614f44 100644
+--- a/src/console/logstorage/dlt-logstorage-ctrl.c
++++ b/src/console/logstorage/dlt-logstorage-ctrl.c
+@@ -61,7 +61,7 @@
+ #include <string.h>
+ #include <getopt.h>
+ 
+-#include <sys/poll.h>
++#include <poll.h>
+ 
+ #if defined(__linux__)
+ #   include "sd-daemon.h"
+diff --git a/src/daemon/dlt_daemon_event_handler.c b/src/daemon/dlt_daemon_event_handler.c
+index 1611f7b..0d463da 100644
+--- a/src/daemon/dlt_daemon_event_handler.c
++++ b/src/daemon/dlt_daemon_event_handler.c
+@@ -30,7 +30,7 @@
+ #include <string.h>
+ #include <errno.h>
+ 
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <syslog.h>
+ 
+ #include "dlt_common.h"
+diff --git a/src/daemon/dlt_daemon_event_handler.h b/src/daemon/dlt_daemon_event_handler.h
+index eb96101..bd550d3 100644
+--- a/src/daemon/dlt_daemon_event_handler.h
++++ b/src/daemon/dlt_daemon_event_handler.h
+@@ -25,7 +25,7 @@
+  * \file dlt_daemon_event_handler.h
+  */
+ 
+-#include <sys/poll.h>
++#include <poll.h>
+ 
+ #include "dlt_daemon_connection_types.h"
+ #include "dlt_daemon_event_handler_types.h"
+diff --git a/src/daemon/dlt_daemon_event_handler_types.h b/src/daemon/dlt_daemon_event_handler_types.h
+index 370e503..0b16d08 100644
+--- a/src/daemon/dlt_daemon_event_handler_types.h
++++ b/src/daemon/dlt_daemon_event_handler_types.h
+@@ -25,7 +25,7 @@
+  * \file dlt_daemon_event_handler_types.h
+  */
+ 
+-#include <sys/poll.h>
++#include <poll.h>
+ 
+ #include "dlt_daemon_connection_types.h"
+ 
+#diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
+#index ffa9b09..511f991 100644
+#--- a/src/lib/dlt_user.c
+#+++ b/src/lib/dlt_user.c
+#@@ -43,7 +43,7 @@
+# #include <errno.h>
+# 
+# #include <sys/uio.h> /* writev() */
+#-#include <sys/poll.h>
+#+#include <poll.h>
+# 
+# #include <limits.h>
+# #ifdef linux
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.4.bb b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.4.bb
new file mode 100644
index 0000000..35c638b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.4.bb
@@ -0,0 +1,62 @@
+SUMMARY = "Diagnostic Log and Trace"
+DESCRIPTION = "This component provides a standardised log and trace interface, \
+based on the standardised protocol specified in the AUTOSAR standard 4.0 DLT. \
+This component can be used by GENIVI components and other applications as \
+logging facility providing: \
+- the DLT shared library \
+- the DLT daemon, including startup scripts \
+- the DLT daemon adaptors- the DLT client console utilities \
+- the DLT test applications"
+HOMEPAGE = "https://www.genivi.org/"
+SECTION = "console/utils"
+LICENSE = "MPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8184208060df880fe3137b93eb88aeea"
+
+DEPENDS = "zlib gzip-native"
+
+SRC_URI = "git://github.com/GENIVI/${BPN}.git;protocol=https \
+    file://0002-Don-t-execute-processes-as-a-specific-user.patch \
+    file://0004-Modify-systemd-config-directory.patch \
+    file://204.patch \
+"
+SRCREV = "14ea971be7e808b9c5099c7f404ed3cf341873c4"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES','systemd', d)}"
+# General options
+PACKAGECONFIG[dlt-examples] = "-DWITH_DLT_EXAMPLES=ON,-DWITH_DLT_EXAMPLES=OFF,,dlt-daemon-systemd"
+
+# Linux options
+PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=ON,-DWITH_SYSTEMD=OFF,systemd"
+PACKAGECONFIG[systemd-watchdog] = "-DWITH_SYSTEMD_WATCHDOG=ON,-DWITH_SYSTEMD_WATCHDOG=OFF,systemd,libsystemd"
+PACKAGECONFIG[systemd-journal] = "-DWITH_SYSTEMD_JOURNAL=ON,-DWITH_SYSTEMD_JOURNAL=OFF,systemd,libsystemd"
+PACKAGECONFIG[dlt-dbus] = "-DWITH_DLT_DBUS=ON,-DWITH_DLT_DBUS=OFF,dbus,dbus-lib"
+PACKAGECONFIG[udp-connection] = "-DWITH_UDP_CONNECTION=ON,-DWITH_UDP_CONNECTION=OFF"
+
+# Command line options
+PACKAGECONFIG[dlt-system] = "-DWITH_DLT_SYSTEM=ON,-DWITH_DLT_SYSTEM=OFF"
+PACKAGECONFIG[dlt-adaptor] = "-DWITH_DLT_ADAPTOR=ON,-DWITH_DLT_ADAPTOR=OFF,,dlt-daemon-systemd"
+PACKAGECONFIG[dlt-console] = "-DWITH_DLT_CONSOLE=ON,-DWITH_DLT_CONSOLE=OFF,,dlt-daemon-systemd"
+
+inherit autotools gettext cmake systemd
+
+EXTRA_OECMAKE += "-DSYSTEMD_UNITDIR=${systemd_system_unitdir}"
+
+PACKAGES += "${PN}-systemd"
+SYSTEMD_PACKAGES = "${PN} ${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = " ${@bb.utils.contains('PACKAGECONFIG', 'systemd', 'dlt.service', '', d)} \
+                          ${@bb.utils.contains('PACKAGECONFIG', 'dlt-system', 'dlt-system.service', '', d)}"
+SYSTEMD_AUTO_ENABLE_${PN} = "enable"
+SYSTEMD_SERVICE_${PN}-systemd = " \
+    ${@bb.utils.contains('PACKAGECONFIG', 'dlt-adaptor', 'dlt-adaptor-udp.service', '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'dlt-examples', 'dlt-example-user.service', '', d)} \
+    ${@bb.utils.contains('PACKAGECONFIG', 'dlt-examples dlt-console', 'dlt-receive.service', '', d)} \
+"
+SYSTEMD_AUTO_ENABLE_${PN}-systemd = "disable"
+
+FILES_${PN}-doc += "${datadir}/dlt-filetransfer"
+
+do_install_append() {
+    rm -f ${D}${bindir}/dlt-test-*
+}
diff --git a/meta-openembedded/meta-oe/recipes-extended/figlet/figlet/0001-build-add-autotools-support-to-allow-easy-cross-comp.patch b/meta-openembedded/meta-oe/recipes-extended/figlet/figlet/0001-build-add-autotools-support-to-allow-easy-cross-comp.patch
new file mode 100644
index 0000000..4429a47
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/figlet/figlet/0001-build-add-autotools-support-to-allow-easy-cross-comp.patch
@@ -0,0 +1,252 @@
+From 902b022c03ad6769abe4d7e6fde1df7a883857ef Mon Sep 17 00:00:00 2001
+From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
+Date: Tue, 24 Mar 2020 14:44:54 +0100
+Subject: [PATCH] build: add autotools support to allow easy cross-compilation
+
+Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
+Upstream-Status: Inappropriate [upstream uses a custom Makefile and builds on
+                                linux as well as Windows. I'm not sure autotools
+                                would be preferred as a general solution but it
+                                works well enough for yocto.]
+---
+ Makefile     | 122 ---------------------------------------------------
+ Makefile.am  |  67 ++++++++++++++++++++++++++++
+ configure.ac |  23 ++++++++++
+ 3 files changed, 90 insertions(+), 122 deletions(-)
+ delete mode 100644 Makefile
+ create mode 100644 Makefile.am
+ create mode 100644 configure.ac
+
+diff --git a/Makefile b/Makefile
+deleted file mode 100644
+index e92bcaf..0000000
+--- a/Makefile
++++ /dev/null
+@@ -1,122 +0,0 @@
+-# Makefile for figlet version 2.2.4 (26 Jan 2011)
+-# adapted from Makefile for figlet version 2.2.2 (05 July 2005)
+-# adapted from Makefile for figlet version 2.2 (15 Oct 1996)
+-# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai
+-# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan
+-# Copyright 2002 Christiaan Keet
+-# Copyright 2011 Claudio Matsuoka
+-
+-# Please notice that to follow modern standards and ease third-party
+-# package creation, binaries are now installed under BINDIR, and DESTDIR
+-# is reserved for the installation pathname prefix.
+-#
+-# Please make sure BINDIR, MANDIR, DEFAULTFONTDIR and
+-#   DEFAULTFONTFILE are defined to reflect the situation
+-#   on your computer.  See README for details.
+-
+-# Don't change this even if your shell is different. The only reason
+-# for changing this is if sh is not in the same place.
+-SHELL = /bin/sh
+-
+-# The C compiler and linker to use
+-CC	= gcc
+-CFLAGS	= -g -O2 -Wall -Wno-unused-value
+-LD	= gcc
+-LDFLAGS =
+-
+-# Feature flags:
+-#   define TLF_FONTS to use TOIlet TLF fonts
+-XCFLAGS	= -DTLF_FONTS
+-
+-# Where to install files
+-prefix	= /usr/local
+-
+-# Where the executables should be put
+-BINDIR	= $(prefix)/bin
+-
+-# Where the man page should be put
+-MANDIR	= $(prefix)/man
+-
+-# Where figlet will search first for fonts (the ".flf" files).
+-DEFAULTFONTDIR = $(prefix)/share/figlet
+-# Use this definition if you can't put things in $(prefix)/share/figlet
+-#DEFAULTFONTDIR = fonts
+-
+-# The filename of the font to be used if no other is specified,
+-#   without suffix.(standard is recommended, but any other can be
+-#   used). This font file should reside in the directory specified
+-#   by DEFAULTFONTDIR.
+-DEFAULTFONTFILE = standard
+-
+-##
+-##  END OF CONFIGURATION SECTION
+-##
+-
+-VERSION	= 2.2.5
+-DIST	= figlet-$(VERSION)
+-OBJS	= figlet.o zipio.o crc.o inflate.o utf8.o
+-BINS	= figlet chkfont figlist showfigfonts
+-MANUAL	= figlet.6 chkfont.6 figlist.6 showfigfonts.6
+-DFILES	= Makefile Makefile.tc $(MANUAL) $(OBJS:.o=.c) chkfont.c getopt.c \
+-	  figlist showfigfonts CHANGES FAQ README LICENSE figfont.txt \
+-	  crc.h inflate.h zipio.h utf8.h run-tests.sh figmagic
+-
+-.c.o:
+-	$(CC) -c $(CFLAGS) $(XCFLAGS) -DDEFAULTFONTDIR=\"$(DEFAULTFONTDIR)\" \
+-		-DDEFAULTFONTFILE=\"$(DEFAULTFONTFILE)\" -o $*.o $<
+-
+-all: $(BINS)
+-
+-figlet: $(OBJS)
+-	$(LD) $(LDFLAGS) -o $@ $(OBJS)
+-
+-chkfont: chkfont.o
+-	$(LD) $(LDFLAGS) -o $@ chkfont.o
+-
+-clean:
+-	rm -f *.o *~ core figlet chkfont
+-
+-install: all
+-	mkdir -p $(DESTDIR)$(BINDIR)
+-	mkdir -p $(DESTDIR)$(MANDIR)/man6
+-	mkdir -p $(DESTDIR)$(DEFAULTFONTDIR)
+-	cp $(BINS) $(DESTDIR)$(BINDIR)
+-	cp $(MANUAL) $(DESTDIR)$(MANDIR)/man6
+-	cp fonts/*.flf $(DESTDIR)$(DEFAULTFONTDIR)
+-	cp fonts/*.flc $(DESTDIR)$(DEFAULTFONTDIR)
+-
+-dist:
+-	rm -Rf $(DIST) $(DIST).tar.gz
+-	mkdir $(DIST)/
+-	cp $(DFILES) $(DIST)/
+-	mkdir $(DIST)/fonts
+-	cp fonts/*.fl[fc] $(DIST)/fonts
+-	mkdir $(DIST)/tests
+-	cp tests/*txt tests/emboss.tlf $(DIST)/tests
+-	tar cvf - $(DIST) | gzip -9c > $(DIST).tar.gz
+-	rm -Rf $(DIST)
+-	tar xf $(DIST).tar.gz
+-	(cd $(DIST); make all check vercheck)
+-	@rm -Rf $(DIST)
+-	@echo
+-	@ls -l $(DIST).tar.gz
+-
+-check:
+-	@echo "Run tests in `pwd`"
+-	@./run-tests.sh fonts
+-	@echo
+-
+-vercheck:
+-	@printf "Infocode: "; ./figlet -I1
+-	@./figlet -v|sed -n '/Version/s/.*\(Version\)/\1/p'
+-	@printf "README: "; head -1 < README|sed 's/.*) //'
+-	@printf "FAQ: "; grep latest FAQ|sed 's/ and can.*//'
+-	@grep -h "^\.TH" *.6
+-
+-$(OBJS) chkfont.o getopt.o: Makefile
+-chkfont.o: chkfont.c
+-crc.o: crc.c crc.h
+-figlet.o: figlet.c zipio.h
+-getopt.o: getopt.c
+-inflate.o: inflate.c inflate.h
+-zipio.o: zipio.c zipio.h inflate.h crc.h
+diff --git a/Makefile.am b/Makefile.am
+new file mode 100644
+index 0000000..7feb42c
+--- /dev/null
++++ b/Makefile.am
+@@ -0,0 +1,67 @@
++AM_CFLAGS = -include $(top_builddir)/config.h -Wall -Wextra -g
++
++bin_PROGRAMS = figlet chkfont
++dist_bin_SCRIPTS = figlist showfigfonts
++
++figlet_SOURCES = figlet.c zipio.c crc.c inflate.c utf8.c
++chkfont_SOURCES = chkfont.c
++
++fontdir = $(prefix)/share/figlet
++dist_font_DATA = \
++	fonts/646-ca2.flc \
++	fonts/646-fr.flc \
++	fonts/646-no.flc \
++	fonts/8859-4.flc \
++	fonts/bubble.flf \
++	fonts/lean.flf \
++	fonts/smscript.flf \
++	fonts/utf8.flc \
++	fonts/646-ca.flc \
++	fonts/646-gb.flc \
++	fonts/646-pt2.flc \
++	fonts/8859-5.flc \
++	fonts/digital.flf \
++	fonts/mini.flf \
++	fonts/smshadow.flf \
++	fonts/646-cn.flc \
++	fonts/646-hu.flc \
++	fonts/646-pt.flc \
++	fonts/8859-7.flc \
++	fonts/frango.flc \
++	fonts/mnemonic.flf \
++	fonts/smslant.flf \
++	fonts/646-cu.flc \
++	fonts/646-irv.flc \
++	fonts/646-se2.flc \
++	fonts/8859-8.flc \
++	fonts/hz.flc \
++	fonts/moscow.flc \
++	fonts/standard.flf \
++	fonts/646-de.flc \
++	fonts/646-it.flc \
++	fonts/646-se.flc \
++	fonts/8859-9.flc \
++	fonts/ilhebrew.flc \
++	fonts/script.flf \
++	fonts/term.flf \
++	fonts/646-dk.flc \
++	fonts/646-jp.flc \
++	fonts/646-yu.flc \
++	fonts/banner.flf \
++	fonts/ivrit.flf \
++	fonts/shadow.flf \
++	fonts/upper.flc \
++	fonts/646-es2.flc \
++	fonts/646-kr.flc \
++	fonts/8859-2.flc \
++	fonts/big.flf \
++	fonts/jis0201.flc \
++	fonts/slant.flf \
++	fonts/ushebrew.flc \
++	fonts/646-es.flc \
++	fonts/646-no2.flc \
++	fonts/8859-3.flc \
++	fonts/block.flf \
++	fonts/koi8r.flc \
++	fonts/small.flf \
++	fonts/uskata.flc
+diff --git a/configure.ac b/configure.ac
+new file mode 100644
+index 0000000..72154e2
+--- /dev/null
++++ b/configure.ac
+@@ -0,0 +1,23 @@
++AC_PREREQ(2.61)
++
++AC_INIT([figlet], 2.2.5)
++
++AC_CONFIG_AUX_DIR([autostuff])
++AC_CONFIG_MACRO_DIRS([m4])
++AM_INIT_AUTOMAKE([foreign subdir-objects])
++m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
++
++AC_CONFIG_SRCDIR([figlet.c])
++AC_CONFIG_HEADER([config.h])
++
++AC_DEFINE([DEFAULTFONTDIR], ["/usr/share/figlet"], [Default font directory])
++AC_DEFINE([DEFAULTFONTFILE], ["standard"], [Default font])
++
++AM_PROG_AR
++AC_PROG_CC
++AC_PROG_INSTALL
++AC_HEADER_STDC
++
++AC_CONFIG_FILES([Makefile])
++
++AC_OUTPUT
+-- 
+2.25.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/figlet/figlet_git.bb b/meta-openembedded/meta-oe/recipes-extended/figlet/figlet_git.bb
new file mode 100644
index 0000000..4611646
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/figlet/figlet_git.bb
@@ -0,0 +1,15 @@
+SUMMARY = "FIGlet is a program that creates large characters out of ordinary screen characters"
+HOMEPAGE = "http://www.figlet.org/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1688bcd97b27704f1afcac7336409857"
+
+SRC_URI = "git://github.com/cmatsuoka/figlet.git \
+           file://0001-build-add-autotools-support-to-allow-easy-cross-comp.patch"
+SRCREV = "5bbcd7383a8c3a531299b216b0c734e1495c6db3"
+S = "${WORKDIR}/git"
+PV = "2.2.5+git${SRCPV}"
+
+inherit autotools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.3.5.bb b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.3.5.bb
index d8cb8b5..06895a0 100644
--- a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.3.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.3.5.bb
@@ -43,6 +43,8 @@
 
 EXTRA_OECMAKE += "${@bb.utils.contains('DISTRO_FEATURES','systemd','-DFLB_SYSTEMD=On','',d)}"
 
+EXTRA_OECMAKE_append_riscv64 = " -DFLB_DEPS='atomic'"
+
 # Kafka Output plugin (disabled by default): note that when
 # enabling Kafka output plugin, the backend library librdkafka
 # requires 'openssl' as a dependency.
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/0001-include-cups-ppd.h-for-missing-ppd-definitions.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/0001-include-cups-ppd.h-for-missing-ppd-definitions.patch
deleted file mode 100644
index f259b5f..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/0001-include-cups-ppd.h-for-missing-ppd-definitions.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 7ef9c040dd959105c16d4dc67e14f3bbea25e77f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 16 Dec 2016 19:51:19 +0000
-Subject: [PATCH] include cups/ppd.h for missing ppd definitions
-
-Fixes errors spotted by clang
-
-| prnt/hpcups/HPCupsFilter.cpp:365:18: error: use of undeclared identifier 'ppdFindAttr'
-|     if (((attr = ppdFindAttr(m_ppd, "hpPrinterLanguage", NULL)) == NULL) ||
-|                  ^
-| prnt/hpcups/HPCupsFilter.cpp:368:13: error: use of undeclared identifier 'ppdClose'
-|             ppdClose(m_ppd);
-|             ^
-| prnt/hpcups/HPCupsFilter.cpp:444:9: error: use of undeclared identifier 'ppdClose'
-|         ppdClose(m_ppd);
-|         ^
-| prnt/hpcups/HPCupsFilter.cpp:497:13: error: use of undeclared identifier 'ppdOpenFile'
-|     m_ppd = ppdOpenFile(getenv("PPD"));
-|             ^
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- prnt/hpcups/HPCupsFilter.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/prnt/hpcups/HPCupsFilter.h b/prnt/hpcups/HPCupsFilter.h
-index 0431a7a..eb0cad6 100644
---- a/prnt/hpcups/HPCupsFilter.h
-+++ b/prnt/hpcups/HPCupsFilter.h
-@@ -37,6 +37,7 @@
- #include "Job.h"

- 

- #include "dbuscomm.h"

-+#include <cups/ppd.h>

- 

- #define		DBITMAPFILEHEADER		14

- #define		DBITMAPINFOHEADER		40

--- 
-1.9.1
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/configure.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/configure.patch
deleted file mode 100644
index 31c005c..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/configure.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-Index: hplip-3.12.6/configure.in
-===================================================================
---- hplip-3.12.6.orig/configure.in	2014-07-16 20:03:51.310044196 +0000
-+++ hplip-3.12.6/configure.in	2014-07-18 07:53:31.589559192 +0000
-@@ -27,8 +27,7 @@
- 
- #AC_PREREQ(2.59)
- AC_INIT([HP Linux Imaging and Printing], [3.12.6], [3.12.6], [hplip])
--#AM_INIT_AUTOMAKE([1.9 foreign])
--AM_INIT_AUTOMAKE
-+AM_INIT_AUTOMAKE([1.9 foreign])
- AC_DISABLE_STATIC
- 
- # Checks for programs.
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/cups-1.6.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/cups-1.6.patch
deleted file mode 100644
index 7df01aa..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/cups-1.6.patch
+++ /dev/null
@@ -1,395 +0,0 @@
-Imported from gentoo:
-https://bugs.gentoo.org/show_bug.cgi?id=428672
-
-diff -Naur hplip-3.12.6_old/prnt/cupsext/cupsext.c hplip-3.12.6/prnt/cupsext/cupsext.c
---- hplip-3.12.6_old/prnt/cupsext/cupsext.c	2012-08-04 09:18:18.388330038 +0200
-+++ hplip-3.12.6/prnt/cupsext/cupsext.c	2012-08-04 09:18:27.855181327 +0200
-@@ -87,6 +87,46 @@
- #define PY_SSIZE_T_MIN INT_MIN

- #endif

- 

-+#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)

-+#define HAVE_CUPS_1_6 1

-+#endif

-+

-+#ifndef HAVE_CUPS_1_6

-+#define ippGetCount(attr)     attr->num_values

-+#define ippGetGroupTag(attr)  attr->group_tag

-+#define ippGetValueTag(attr)  attr->value_tag

-+#define ippGetName(attr)      attr->name

-+#define ippGetBoolean(attr, element) attr->values[element].boolean

-+#define ippGetInteger(attr, element) attr->values[element].integer

-+#define ippGetStatusCode(ipp) ipp->request.status.status_code

-+#define ippGetString(attr, element, language) attr->values[element].string.text

-+

-+static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp )

-+{

-+    if (!ipp)

-+        return (NULL);

-+    return (ipp->current = ipp->attrs);

-+}

-+

-+static ipp_attribute_t * ippNextAttribute( ipp_t *ipp )

-+{

-+    if (!ipp || !ipp->current)

-+        return (NULL);

-+    return (ipp->current = ipp->current->next);

-+}

-+

-+static int ippSetOperation( ipp_t *ipp, ipp_op_t op )

-+{

-+    ipp->request.op.operation_id = op;

-+    return (1);

-+}

-+

-+static int ippSetRequestId( ipp_t *ipp, int request_id )

-+{

-+    ipp->request.any.request_id = request_id;

-+    return (1);

-+}

-+#endif

- 

- int g_num_options = 0;

- cups_option_t * g_options;

-@@ -333,8 +373,8 @@
-     request = ippNew();

-     language = cupsLangDefault();

- 

--    request->request.op.operation_id = CUPS_GET_PRINTERS;

--    request->request.any.request_id = 1;

-+    ippSetOperation( request, CUPS_GET_PRINTERS );

-+    ippSetRequestId ( request, 1);

- 

-     ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,

-                   "attributes-charset", NULL, cupsLangEncoding( language ) );

-@@ -378,10 +418,10 @@
-         ipp_pstate_t state;

-         int i = 0;

- 

--        for ( attr = response->attrs; attr != NULL; attr = attr->next )

-+        for ( attr = ippFirstAttribute( response ); attr != NULL; attr = ippNextAttribute( response ) )

-         {

--            while ( attr != NULL && attr->group_tag != IPP_TAG_PRINTER )

--                attr = attr->next;

-+            while ( attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER )

-+                attr = ippNextAttribute( response );

- 

-             if ( attr == NULL )

-                 break;

-@@ -390,41 +430,41 @@
-             state = IPP_PRINTER_IDLE;

-             accepting = 0;

- 

--            while ( attr != NULL && attr->group_tag == IPP_TAG_PRINTER )

-+            while ( attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER )

-             {

--                if ( strcmp( attr->name, "printer-name" ) == 0 &&

--                        attr->value_tag == IPP_TAG_NAME )

--                    name = attr->values[ 0 ].string.text;

--

--                else if ( strcmp( attr->name, "device-uri" ) == 0 &&

--                        attr->value_tag == IPP_TAG_URI )

--                    device_uri = attr->values[ 0 ].string.text;

--

--                else if ( strcmp( attr->name, "printer-uri-supported" ) == 0 &&

--                        attr->value_tag == IPP_TAG_URI )

--                    printer_uri = attr->values[ 0 ].string.text;

--

--                else if ( strcmp( attr->name, "printer-info" ) == 0 &&

--                        attr->value_tag == IPP_TAG_TEXT )

--                    info = attr->values[ 0 ].string.text;

--

--                else if ( strcmp( attr->name, "printer-location" ) == 0 &&

--                        attr->value_tag == IPP_TAG_TEXT )

--                    location = attr->values[ 0 ].string.text;

--

--                else if ( strcmp( attr->name, "printer-make-and-model" ) == 0 &&

--                        attr->value_tag == IPP_TAG_TEXT )

--                    make_model = attr->values[ 0 ].string.text;

--

--                else if ( strcmp( attr->name, "printer-state" ) == 0 &&

--                        attr->value_tag == IPP_TAG_ENUM )

--                    state = ( ipp_pstate_t ) attr->values[ 0 ].integer;

--

--                else if (!strcmp(attr->name, "printer-is-accepting-jobs") &&

--                        attr->value_tag == IPP_TAG_BOOLEAN)

--                    accepting = attr->values[ 0 ].boolean;

-+                if ( strcmp( ippGetName( attr ), "printer-name" ) == 0 &&

-+                        ippGetValueTag( attr ) == IPP_TAG_NAME )

-+                    name = ippGetString( attr, 0, NULL );

-+

-+                else if ( strcmp( ippGetName( attr ), "device-uri" ) == 0 &&

-+                        ippGetValueTag( attr ) == IPP_TAG_URI )

-+                    device_uri = ippGetString( attr, 0, NULL );

-+

-+                else if ( strcmp( ippGetName( attr ), "printer-uri-supported" ) == 0 &&

-+                        ippGetValueTag( attr ) == IPP_TAG_URI )

-+                    printer_uri = ippGetString( attr, 0, NULL );

-+

-+                else if ( strcmp( ippGetName( attr ), "printer-info" ) == 0 &&

-+                        ippGetValueTag( attr ) == IPP_TAG_TEXT )

-+                    info = ippGetString( attr, 0, NULL );

-+

-+                else if ( strcmp( ippGetName( attr ), "printer-location" ) == 0 &&

-+                        ippGetValueTag( attr ) == IPP_TAG_TEXT )

-+                    location = ippGetString( attr, 0, NULL );

-+

-+                else if ( strcmp( ippGetName( attr ), "printer-make-and-model" ) == 0 &&

-+                        ippGetValueTag( attr ) == IPP_TAG_TEXT )

-+                    make_model = ippGetString( attr, 0, NULL );

-+

-+                else if ( strcmp( ippGetName( attr ), "printer-state" ) == 0 &&

-+                        ippGetValueTag( attr ) == IPP_TAG_ENUM )

-+                    state = ( ipp_pstate_t ) ippGetInteger( attr, 0 );

-+

-+                else if (!strcmp(ippGetName( attr ), "printer-is-accepting-jobs") &&

-+                        ippGetValueTag( attr ) == IPP_TAG_BOOLEAN)

-+                    accepting = ippGetBoolean( attr, 0 );

- 

--                attr = attr->next;

-+                attr = ippNextAttribute( response );

-             }

- 

-             if ( device_uri == NULL )

-@@ -522,8 +562,8 @@
-     request = ippNew();

-     language = cupsLangDefault();

- 

--    request->request.op.operation_id = CUPS_ADD_PRINTER;

--    request->request.any.request_id = 1;

-+    ippSetOperation( request, CUPS_ADD_PRINTER );

-+    ippSetRequestId ( request, 1 );

- 

-     ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,

-                   "attributes-charset", NULL, cupsLangEncoding( language ) );

-@@ -568,7 +608,7 @@
-     }

-     else

-     {

--        status = response->request.status.status_code;

-+        status = ippGetStatusCode( response );

-         //ippDelete( response );

-         r = 1;

-     }

-@@ -631,8 +671,8 @@
-        */

-     request = ippNew();

- 

--    request->request.op.operation_id = CUPS_DELETE_PRINTER;

--    request->request.op.request_id = 1;

-+    ippSetOperation( request, CUPS_DELETE_PRINTER );

-+    ippSetRequestId ( request, 1 );

- 

-     language = cupsLangDefault();

- 

-@@ -650,7 +690,7 @@
-      */

-     response = cupsDoRequest( http, request, "/admin/" );

- 

--    if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) )

-+    if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) )

-     {

-         r = 1;

-     }

-@@ -721,8 +761,8 @@
- 

-     request = ippNew();

- 

--    request->request.op.operation_id = CUPS_SET_DEFAULT;

--    request->request.op.request_id = 1;

-+    ippSetOperation( request, CUPS_SET_DEFAULT );

-+    ippSetRequestId ( request, 1 );

- 

-     language = cupsLangDefault();

- 

-@@ -743,7 +783,7 @@
- 

-     response = cupsDoRequest( http, request, "/admin/" );

- 

--    if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) )

-+    if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) )

-     {

-         r = 1;

-     }

-@@ -797,8 +837,8 @@
- 

-     request = ippNew();

- 

--    request->request.op.operation_id = op;

--    request->request.op.request_id = 1;

-+    ippSetOperation( request, op );

-+    ippSetRequestId ( request, 1 );

- 

-     language = cupsLangDefault();

- 

-@@ -822,7 +862,7 @@
- 

-     response = cupsDoRequest(http, request, "/admin/");

- 

--    if (( response != NULL ) && (response->request.status.status_code <= IPP_OK_CONFLICT))

-+    if (( response != NULL ) && (ippGetStatusCode( response ) <= IPP_OK_CONFLICT))

-     {

-         r = 1;

-     }

-@@ -837,7 +877,7 @@
-     if ( response != NULL )

-         ippDelete( response );

- 

--    return Py_BuildValue( "i", r );;

-+    return Py_BuildValue( "i", r );

- }

- 

- 

-@@ -1116,8 +1156,8 @@
- 

-     request = ippNew();

- 

--    request->request.op.operation_id = CUPS_GET_PPDS;

--    request->request.op.request_id   = 1;

-+    ippSetOperation( request, CUPS_GET_PPDS );

-+    ippSetRequestId ( request, 1 );

- 

-     language = cupsLangDefault();

- 

-@@ -1143,43 +1183,43 @@
-     if ((response = cupsDoRequest(http, request, "/")) != NULL)

-     {

- 

--        for (attr = response->attrs; attr; attr = attr->next)

-+        for (attr = ippFirstAttribute( response ); attr; attr = ippNextAttribute( response ))

-         {

-             PyObject *dict;

-             char *ppdname = NULL;

- 

--            while (attr && attr->group_tag != IPP_TAG_PRINTER)

--                attr = attr->next;

-+            while (attr && ippGetGroupTag( attr ) != IPP_TAG_PRINTER)

-+                attr = ippNextAttribute( response );

- 

-             if (!attr)

-                 break;

- 

-             dict = PyDict_New ();

- 

--            for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next)

-+            for (; attr && ippGetGroupTag( attr ) == IPP_TAG_PRINTER; attr = ippNextAttribute( response ))

-             {

-                 PyObject *val = NULL;

- 

--                if (!strcmp (attr->name, "ppd-name") && attr->value_tag == IPP_TAG_NAME)

-+                if (!strcmp (ippGetName( attr ), "ppd-name") && ippGetValueTag( attr ) == IPP_TAG_NAME)

-                 {

--                    ppdname = attr->values[0].string.text;

-+                    ppdname = ippGetString( attr, 0, NULL );

- 

-                     //sprintf( buf, "print '%s'", ppdname);

-                     //PyRun_SimpleString( buf );

-                 }

- 

--                else if (attr->value_tag == IPP_TAG_TEXT || attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_KEYWORD)

--                //else if ((!strcmp (attr->name, "ppd-natural-language") && attr->value_tag == IPP_TAG_LANGUAGE) ||

--                //    (!strcmp (attr->name, "ppd-make-and-model") && attr->value_tag == IPP_TAG_TEXT) ||

--                //    (!strcmp (attr->name, "ppd-make") && attr->value_tag == IPP_TAG_TEXT) ||

--                //    (!strcmp (attr->name, "ppd-device-id") && attr->value_tag == IPP_TAG_TEXT))

-+                else if (ippGetValueTag( attr ) == IPP_TAG_TEXT || ippGetValueTag( attr ) == IPP_TAG_NAME || ippGetValueTag( attr ) == IPP_TAG_KEYWORD)

-+                //else if ((!strcmp (ippGetName( attr ), "ppd-natural-language") && ippGetValueTag( attr ) == IPP_TAG_LANGUAGE) ||

-+                //    (!strcmp (ippGetName( attr ), "ppd-make-and-model") && ippGetValueTag( attr ) == IPP_TAG_TEXT) ||

-+                //    (!strcmp (ippGetName( attr ), "ppd-make") && ippGetValueTag( attr ) == IPP_TAG_TEXT) ||

-+                //    (!strcmp (ippGetName( attr ), "ppd-device-id") && ippGetValueTag( attr ) == IPP_TAG_TEXT))

-                 {

--                    val = PyObj_from_UTF8(attr->values[0].string.text);

-+                    val = PyObj_from_UTF8(ippGetString( attr, 0, NULL ));

-                 }

- 

-                 if (val)

-                 {

--                    PyDict_SetItemString (dict, attr->name, val);

-+                    PyDict_SetItemString (dict, ippGetName( attr ), val);

-                     Py_DECREF (val);

-                 }

-             }

-diff -Naur hplip-3.12.6_old/scan/sane/hpaio.c hplip-3.12.6/scan/sane/hpaio.c
---- hplip-3.12.6_old/scan/sane/hpaio.c	2012-08-04 09:18:21.458389913 +0200
-+++ hplip-3.12.6/scan/sane/hpaio.c	2012-08-04 09:18:27.875181720 +0200
-@@ -47,6 +47,43 @@
- #define DEBUG_DECLARE_ONLY
- #include "sanei_debug.h"
- 
-+#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
-+#define HAVE_CUPS_1_6 1
-+#endif
-+
-+#ifndef HAVE_CUPS_1_6
-+#define ippGetGroupTag(attr)  attr->group_tag
-+#define ippGetValueTag(attr)  attr->value_tag
-+#define ippGetName(attr)      attr->name
-+#define ippGetString(attr, element, language) attr->values[element].string.text
-+
-+static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp )
-+{
-+    if (!ipp)
-+        return (NULL);
-+    return (ipp->current = ipp->attrs);
-+}
-+
-+static ipp_attribute_t * ippNextAttribute( ipp_t *ipp )
-+{
-+    if (!ipp || !ipp->current)
-+        return (NULL);
-+    return (ipp->current = ipp->current->next);
-+}
-+
-+static int ippSetOperation( ipp_t *ipp, ipp_op_t op )
-+{
-+    ipp->request.op.operation_id = op;
-+    return (1);
-+}
-+
-+static int ippSetRequestId( ipp_t *ipp, int request_id )
-+{
-+    ipp->request.any.request_id = request_id;
-+    return (1);
-+}
-+#endif
-+
- static SANE_Device **DeviceList = NULL;
- 
- static int AddDeviceList(char *uri, char *model, SANE_Device ***pd)
-@@ -186,8 +223,8 @@
-    /* Assemble the IPP request */
-    request = ippNew();
- 
--   request->request.op.operation_id = CUPS_GET_PRINTERS;
--   request->request.any.request_id  = 1;
-+   ippSetOperation( request, CUPS_GET_PRINTERS );
-+   ippSetRequestId( request, 1 );
- 
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8");
-    ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en");
-@@ -197,20 +234,20 @@
-    if ((response = cupsDoRequest(http, request, "/")) == NULL)
-       goto bugout;
- 
--   for (attr = response->attrs; attr != NULL; attr = attr->next)
-+   for (attr = ippFirstAttribute ( response ); attr != NULL; attr = ippNextAttribute( response ))
-    {
-       /* Skip leading attributes until we hit a printer. */
--      while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
--         attr = attr->next;
-+      while (attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER)
-+         attr = ippNextAttribute( response );
- 
-       if (attr == NULL)
-          break;
- 
--      while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
-+      while (attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER)
-       {
--         if (strcmp(attr->name, "device-uri") == 0 && attr->value_tag == IPP_TAG_URI && AddCupsList(attr->values[0].string.text, printer) == 0)
-+         if (strcmp(ippGetName( attr ), "device-uri") == 0 && ippGetValueTag( attr ) == IPP_TAG_URI && AddCupsList(ippGetString( attr, 0, NULL ), printer) == 0)
-             cnt++;
--         attr = attr->next;
-+         attr = ippNextAttribute( response );
-       }
- 
-       if (attr == NULL)
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/fix-libusb-paths.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/fix-libusb-paths.patch
deleted file mode 100644
index b347f83..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/fix-libusb-paths.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Upstream-Status: Inappropriate [configuration]
-
-diff -rupN hplip-3.12.6_orig/configure.in hplip-3.12.6/configure.in
---- hplip-3.12.6_orig/configure.in	2012-06-18 20:44:24.000000000 +1000
-+++ hplip-3.12.6/configure.in	2012-08-16 13:40:07.259927650 +1000
-@@ -524,6 +524,8 @@ if test "$hpijs_only_build" = "no"; then
-       AC_CHECK_HEADERS(usb.h, ,[AC_MSG_ERROR([cannot find libusb-devel support], 11)])
-    else
-       AC_CHECK_LIB([usb-1.0], [libusb_init], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libusb 1.0 support], 2)])
-+      LIBUSBINCLUDEROOT?="/usr/include/"
-+      AC_ARG_VAR(LIBUSBINCLUDEROOT, [path to libusb-1.0 folder])
-       AC_CHECK_HEADERS(libusb-1.0/libusb.h, ,[AC_MSG_ERROR([cannot find libusb-1.0-devel support], 11)])
-    fi
- fi
-diff -rupN hplip-3.12.6_orig/Makefile.am hplip-3.12.6/Makefile.am
---- hplip-3.12.6_orig/Makefile.am	2012-06-18 20:44:13.000000000 +1000
-+++ hplip-3.12.6/Makefile.am	2012-08-16 13:41:12.307932822 +1000
-@@ -72,7 +72,7 @@ libhpmud_la_SOURCES = io/hpmud/hpmud.c i
- 	  io/hpmud/hpmud.h io/hpmud/hpmudi.h io/hpmud/list.h io/hpmud/mlc.h io/hpmud/pml.h io/hpmud/dot4.c \
- 	  io/hpmud/dot4.h io/hpmud/jd.c io/hpmud/jd.h io/hpmud/pp.c io/hpmud/pp.h io/hpmud/musb.h io/hpmud/musb_libusb01.c
- else
--libhpmud_la_CFLAGS = -I/usr/include/libusb-1.0 -DMUDNAME=\"$(MUDNAME)\" -DCONFDIR=\"$(hplip_confdir)\"
-+libhpmud_la_CFLAGS = -I/$(LIBUSBINCLUDEROOT)/libusb-1.0 -DMUDNAME=\"$(MUDNAME)\" -DCONFDIR=\"$(hplip_confdir)\"
- libhpmud_la_SOURCES = io/hpmud/hpmud.c io/hpmud/mlc.c io/hpmud/model.c io/hpmud/pml.c \
- 	  io/hpmud/hpmud.h io/hpmud/hpmudi.h io/hpmud/list.h io/hpmud/mlc.h io/hpmud/pml.h io/hpmud/dot4.c \
- 	  io/hpmud/dot4.h io/hpmud/jd.c io/hpmud/jd.h io/hpmud/pp.c io/hpmud/pp.h io/hpmud/musb.h io/hpmud/musb.c
-@@ -286,7 +286,7 @@ hpmudext_la_LIBADD = libhpmud.la
- if LIBUSB01_BUILD
- hpmudext_la_CFLAGS = -I$(PYTHONINCLUDEDIR)
- else
--hpmudext_la_CFLAGS =-I/usr/include/libusb-1.0 -I$(PYTHONINCLUDEDIR)
-+hpmudext_la_CFLAGS =-I$(LIBUSBINCLUDEROOT)/libusb-1.0 -I$(PYTHONINCLUDEDIR)
- endif
- 
- # ui (qt3)
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/setup-add-sleep-after-cups-reset.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/setup-add-sleep-after-cups-reset.patch
deleted file mode 100644
index 0e1b6c4..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip-3.12.6/setup-add-sleep-after-cups-reset.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
---- hplip-3.11.10/setup.py.orig	2011-10-02 14:06:19.000000000 +1100
-+++ hplip-3.11.10/setup.py	2012-02-29 08:21:39.167999938 +1100
-@@ -573,6 +573,7 @@
- 
-             log.debug("Restarting CUPS...")
-             status, output = utils.run(restart_cups())
-+            time.sleep(3)
-             log.debug("Restart CUPS returned: exit=%d output=%s" % (status, output))
- 
-             cups.setPasswordPrompt("You do not have permission to add a printer.")
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/030-replace_unsafe_memcpy_with_memmove.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/030-replace_unsafe_memcpy_with_memmove.patch
new file mode 100644
index 0000000..2babb2b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/030-replace_unsafe_memcpy_with_memmove.patch
@@ -0,0 +1,15 @@
+https://bugs.launchpad.net/hplip/+bug/1672256
+
+memcpy should never be used with overlapping memory regions
+
+--- a/io/hpmud/musb.c
++++ b/io/hpmud/musb.c
+@@ -775,7 +775,7 @@ static int device_id(int fd, unsigned ch
+         len = size-1;   /* leave byte for zero termination */
+     if (len > 2)
+         len -= 2;
+-    memcpy(buffer, buffer+2, len);    /* remove length */
++    memmove(buffer, buffer+2, len);    /* remove length */
+     buffer[len]=0;
+     DBG("read actual device_id successfully fd=%d len=%d\n", fd, len);
+ 
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/050-fix-glibcisms.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/050-fix-glibcisms.patch
new file mode 100644
index 0000000..e020bd4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/050-fix-glibcisms.patch
@@ -0,0 +1,17 @@
+diff --git a/scan/sane/OrbliteScan/LinuxCommon.h b/scan/sane/OrbliteScan/LinuxCommon.h
+index 6605dd9..55c7110 100644
+--- a/scan/sane/OrbliteScan/LinuxCommon.h
++++ b/scan/sane/OrbliteScan/LinuxCommon.h
+@@ -18,10 +18,8 @@ typedef u_int32_t			UInt32;
+ typedef int32_t				SInt32;

+ //typedef unsigned long			UInt32;

+ //typedef signed long			SInt32;

+-typedef __S64_TYPE			SInt64;

+-typedef __U64_TYPE			UInt64;

+-typedef __S64_TYPE			int64_t;

+-typedef __U64_TYPE			uint64_t;

++typedef int64_t 			SInt64;

++typedef uint64_t			UInt64;

+ 

+ //typedef unsigned long	ULONG;

+ //typedef void*			LPVOID;

diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/600-fix.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/600-fix.patch
new file mode 100644
index 0000000..91a5035
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/600-fix.patch
@@ -0,0 +1,10 @@
+--- a/configure.in
++++ b/configure.in
+@@ -254,7 +254,6 @@ if test "$class_driver" = "yes"; then
+    test `sh ./createPPD.sh -f` == 0
+ else
+    AC_MSG_RESULT(no)
+-   test `sh ./createPPD.sh -q` == 0
+ fi
+ AM_CONDITIONAL(HPLIP_CLASS_DRIVER, test x$class_driver = xyes)
+ 
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/999-remove-lImageProcessor.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/999-remove-lImageProcessor.patch
new file mode 100644
index 0000000..aee4ac5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/999-remove-lImageProcessor.patch
@@ -0,0 +1,69 @@
+# ../bin/ld: cannot find -lImageProcessor
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -590,11 +590,10 @@ hpcups_SOURCES = prnt/hpcups/HPCupsFilte
+ 	prnt/hpcups/flate_colorspace.h prnt/hpcups/RunLenEncoding.h prnt/hpcups/common_defines.h \
+ 	prnt/hpcups/genPCLm.h \
+ 	common/utils.c common/utils.h prnt/hpcups/Hbpl1_Wrapper.cpp prnt/hpcups/genPCLm.cpp \
+-	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp \
+-	prnt/hpcups/ImageProcessor.h
++	prnt/hpcups/genJPEGStrips.cpp prnt/hpcups/RunLenEncoding.cpp
+ 
+ hpcups_CXXFLAGS = $(APDK_ENDIAN_FLAG) $(DBUS_CFLAGS)
+-hpcups_LDADD = -L./prnt/hpcups/ -ljpeg -ldl -lImageProcessor -lcups -lcupsimage -lz $(DBUS_LIBS)
++hpcups_LDADD = -L./prnt/hpcups/ -ljpeg -ldl -lcups -lcupsimage -lz $(DBUS_LIBS)
+ #else
+ #hpcupsdir = $(cupsfilterdir)
+ #hpcups_PROGRAMS = hpcups
+--- a/prnt/hpcups/HPCupsFilter.cpp
++++ b/prnt/hpcups/HPCupsFilter.cpp
+@@ -637,16 +637,10 @@ int HPCupsFilter::processRasterData(cups
+ 
+ 
+     sprintf(hpPreProcessedRasterFile, "%s/hp_%s_cups_SwapedPagesXXXXXX",CUPS_TMP_DIR, m_JA.user_name);
+-    image_processor_t* imageProcessor = imageProcessorCreate();
+ 
+     while (cupsRasterReadHeader2(cups_raster, &cups_header))
+     {
+ 
+-        IMAGE_PROCESSOR_ERROR result = imageProcessorStartPage(imageProcessor, &cups_header);
+-        if (result != IPE_SUCCESS){
+-            dbglog("DEBUG: imageProcessorStartPage failed result = %d\n", result);
+-        }
+-
+         current_page_number++;
+ 
+         if (current_page_number == 1) {
+@@ -745,11 +739,6 @@ int HPCupsFilter::processRasterData(cups
+             color_raster = rgbRaster;
+             black_raster = kRaster;
+ 
+-            result = imageProcessorProcessLine(imageProcessor, m_pPrinterBuffer, cups_header.cupsBytesPerLine);
+-            if (result != IPE_SUCCESS){
+-                dbglog("DEBUG: imageProcessorProcessLine failed result = %d\n", result);
+-            }
+-
+ 
+             if ((y == 0) && !is_ljmono) {
+                 //For ljmono, make sure that first line is not a blankRaster line.Otherwise printer
+@@ -780,11 +769,6 @@ int HPCupsFilter::processRasterData(cups
+             }
+         }  // for() loop end
+ 
+-        result = imageProcessorEndPage(imageProcessor);
+-        if (result != IPE_SUCCESS){
+-                dbglog("DEBUG: imageProcessorEndPage failed result = %d\n", result);
+-        }
+-
+ 
+         m_Job.NewPage();
+         if (err != NO_ERROR) {
+@@ -800,8 +784,6 @@ int HPCupsFilter::processRasterData(cups
+         rgbRaster = NULL;
+     }
+ 
+-    imageProcessorDestroy(imageProcessor);
+-
+     unlink(hpPreProcessedRasterFile);
+     return ret_status;
+ }
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/configure.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/configure.patch
new file mode 100644
index 0000000..8fe77c5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/configure.patch
@@ -0,0 +1,12 @@
+--- a/configure.in
++++ b/configure.in
+@@ -27,8 +27,7 @@
+ 
+ #AC_PREREQ(2.59)
+ AC_INIT([HP Linux Imaging and Printing], [3.19.12], [3.19.12], [hplip])
+-#AM_INIT_AUTOMAKE([1.9 foreign])
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+ AC_DISABLE_STATIC
+ 
+ # Checks for programs.
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/fix-libusb-paths.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/fix-libusb-paths.patch
new file mode 100644
index 0000000..6aa1de0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/fix-libusb-paths.patch
@@ -0,0 +1,33 @@
+Upstream-Status: Inappropriate [configuration]
+
+--- a/configure.in
++++ b/configure.in
+@@ -599,6 +599,8 @@ if test "$class_driver" = "no" && test "
+       AC_CHECK_HEADERS(usb.h, ,[AC_MSG_ERROR([cannot find libusb-devel support], 11)])
+    else
+       AC_CHECK_LIB([usb-1.0], [libusb_init], [LIBS="$LIBS"], [AC_MSG_ERROR([cannot find libusb 1.0 support], 2)])
++      LIBUSBINCLUDEROOT?="/usr/include/"
++      AC_ARG_VAR(LIBUSBINCLUDEROOT, [path to libusb-1.0 folder])
+       AC_CHECK_HEADERS(libusb-1.0/libusb.h, ,[AC_MSG_ERROR([cannot find libusb-1.0-devel support], 11)])
+    fi
+ fi
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -109,7 +109,7 @@ libhpmud_la_SOURCES += io/hpmud/musb_lib
+ libhpmud_la_LDFLAGS += -lusb
+ else
+ libhpmud_la_SOURCES += io/hpmud/musb.c 
+-libhpmud_la_CFLAGS  += -I/usr/include/libusb-1.0
++libhpmud_la_CFLAGS  += -I$(LIBUSBINCLUDEROOT)/libusb-1.0
+ libhpmud_la_LDFLAGS += -lusb-1.0
+ endif
+ 
+@@ -362,7 +362,7 @@ hpmudext_la_CFLAGS += -Iprotocol/discove
+ endif
+ 
+ if !LIBUSB01_BUILD
+-hpmudext_la_CFLAGS +=-I/usr/include/libusb-1.0 
++hpmudext_la_CFLAGS +=-I$(LIBUSBINCLUDEROOT)/libusb-1.0 
+ endif
+ endif #!HPLIP_CLASS_DRIVER
+ # ui (qt3)
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/hplip-3.19.6-fix-return.patch b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/hplip-3.19.6-fix-return.patch
new file mode 100644
index 0000000..67546b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip/hplip-3.19.6-fix-return.patch
@@ -0,0 +1,20 @@
+From 2fcd0e79b21ec6dbf975ad7d1b5697a78993e2f1 Mon Sep 17 00:00:00 2001
+From: David Valleau <valleau@chromium.org>
+Date: Wed, 14 Aug 2019 15:47:38 -0700
+Subject: [PATCH] Fixing invalid return in void function
+
+---
+ prnt/hpps/hppsfilter.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/prnt/hpps/hppsfilter.c
++++ b/prnt/hpps/hppsfilter.c
+@@ -104,7 +104,7 @@ static void open_tempbookletfile(char *m
+     if(ptempbooklet_file == NULL)
+     {
+             fprintf(stderr, "ERROR: Unable to open temp file %s\n", temp_filename);
+-            return 1;
++            return;
+     }  
+     chmod(temp_filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ 
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.12.6.bb b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.12.6.bb
deleted file mode 100644
index 77c995b..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.12.6.bb
+++ /dev/null
@@ -1,75 +0,0 @@
-SUMMARY = "HP Linux Imaging and Printing"
-LICENSE="GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=442bb3cbbeeb60643a87325718b8a8ee"
-
-PR = "r1"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
-           file://setup-add-sleep-after-cups-reset.patch \
-           file://fix-libusb-paths.patch \
-           file://cups-1.6.patch \
-           file://configure.patch \
-           file://0001-include-cups-ppd.h-for-missing-ppd-definitions.patch \
-"
-
-DEPENDS += "cups python libusb"
-
-inherit autotools-brokensep python-dir pythonnative pkgconfig
-
-export STAGING_INCDIR
-export STAGING_LIBDIR
-
-EXTRA_OECONF += "\
-        LIBUSBINCLUDEROOT=${STAGING_INCDIR} \
-        --disable-network-build \
-        --disable-doc-build \
-        --disable-pp-build \
-        --disable-scan-build \
-        --disable-gui-build \
-        --disable-fax-build \
-        --disable-policykit  \
-        --disable-qt4 \
-        --disable-qt3 \
-        --disable-dbus-build \
-        --disable-foomatic-drv-install \
-        --enable-foomatic-ppd-install  \
-        --enable-foomatic-rip-hplip-install \
-        --with-cupsbackenddir=${libdir}/cups/backend \
-        --with-cupsfilterdir=${libdir}/cups/filter \
-"
-
-PACKAGES += "${PN}-ppd ${PN}-cups ${PN}-backend ${PN}-filter ${PN}-hal"
-
-RDEPENDS_${PN} += " \
-        python \
-        python-syslog \
-        python-pprint \
-        python-compression \
-        python-shell \
-        python-xml \
-        python-unixadmin \
-        python-html \
-        python-resource \
-        python-terminal \
-        python-subprocess\
-"
-RDEPENDS_${PN}-filter += "perl"
-
-# need to snag the debug file or OE will fail on backend package
-FILES_${PN}-dbg += "\
-        ${libdir}/cups/backend/.debug \
-        ${PYTHON_SITEPACKAGES_DIR}/.debug \
-        ${libdir}/cups/filter/.debug "
-
-FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
-FILES_${PN}-ppd = "${datadir}/ppd"
-FILES_${PN}-cups = "${datadir}/cups"
-FILES_${PN}-backend = "${libdir}/cups/backend"
-FILES_${PN}-filter = "${libdir}/cups/filter"
-FILES_${PN}-hal = "${datadir}/hal"
-
-FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}/*.so"
-
-SRC_URI[md5sum] = "5303938e8630775ea6fb383af85775e5"
-SRC_URI[sha256sum] = "54578000792969adb583e75efeacb9c46ab69659ec7e9424de390613f3595775"
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.19.12.bb b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.19.12.bb
new file mode 100644
index 0000000..883a6ff
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/hplip/hplip_3.19.12.bb
@@ -0,0 +1,88 @@
+SUMMARY = "HP Linux Imaging and Printing"
+LICENSE="GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=20f2c819499cc2063e9a7b07b408815c"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
+           file://configure.patch \
+           file://fix-libusb-paths.patch \
+           file://999-remove-lImageProcessor.patch \
+           file://600-fix.patch \
+           file://030-replace_unsafe_memcpy_with_memmove.patch \
+           file://050-fix-glibcisms.patch \
+           file://hplip-3.19.6-fix-return.patch \
+"
+SRC_URI[md5sum] = "d72bc77d791c150c2c22b84e9553bab3"
+SRC_URI[sha256sum] = "b7f398502fb659e0de8e54976237e3c6a64fec0b3c36054a515876f7b006b255"
+
+DEPENDS += "cups python3 libusb"
+
+inherit autotools-brokensep python3-dir python3native pkgconfig systemd
+
+export STAGING_INCDIR
+export STAGING_LIBDIR
+
+CFLAGS += "-I${STAGING_INCDIR}/python${PYTHON_BASEVERSION}${PYTHON_ABI}"
+
+EXTRA_OECONF += "\
+        LIBUSBINCLUDEROOT=${STAGING_INCDIR} \
+        --enable-cups-ppd-install \
+        --disable-network-build \
+        --disable-doc-build \
+        --disable-pp-build \
+        --disable-scan-build \
+        --disable-gui-build \
+        --disable-fax-build \
+        --disable-policykit  \
+        --disable-qt4 \
+        --disable-qt3 \
+        --disable-dbus-build \
+        --enable-foomatic-drv-install \
+        --disable-foomatic-ppd-install \
+        --disable-foomatic-rip-hplip-install \
+        --with-cupsbackenddir=${libdir}/cups/backend \
+        --with-cupsfilterdir=${libdir}/cups/filter \
+"
+
+EXTRA_OEMAKE = "rulessystemdir=${systemd_unitdir}/system/"
+
+do_install_append() {
+    rm -rf ${D}${datadir}/hplip/upgrade.py
+    rm -rf ${D}${datadir}/hplip/uninstall.py
+    sed -i -e "s|/usr/bin/env python|/usr/bin/env python3|g" ${D}${datadir}/hplip/*.py
+    sed -i -e "s|/usr/bin/python|/usr/bin/env python3|g" ${D}${datadir}/hplip/*.py
+}
+
+PACKAGES += "${PN}-ppd ${PN}-cups ${PN}-backend ${PN}-filter ${PN}-hal"
+
+RDEPENDS_${PN} += " \
+        python3\
+        python3-syslog \
+        python3-pprint \
+        python3-compression \
+        python3-shell \
+        python3-xml \
+        python3-unixadmin \
+        python3-html \
+        python3-resource \
+        python3-terminal \
+"
+RDEPENDS_${PN}-filter += "perl"
+
+# need to snag the debug file or OE will fail on backend package
+FILES_${PN}-dbg += "\
+        ${libdir}/cups/backend/.debug \
+        ${PYTHON_SITEPACKAGES_DIR}/.debug \
+        ${libdir}/cups/filter/.debug "
+
+FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la"
+FILES_${PN}-ppd = "${datadir}/ppd"
+FILES_${PN}-cups = "${datadir}/cups"
+FILES_${PN}-backend = "${libdir}/cups/backend"
+FILES_${PN}-filter = "${libdir}/cups/filter"
+FILES_${PN}-hal = "${datadir}/hal"
+
+FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR}/*.so"
+
+SYSTEMD_SERVICE_${PN} = "hplip-printer@.service"
+
+CLEANBROKEN = "1"
diff --git a/meta-openembedded/meta-oe/recipes-extended/icewm/icewm_1.5.5.bb b/meta-openembedded/meta-oe/recipes-extended/icewm/icewm_1.6.5.bb
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-extended/icewm/icewm_1.5.5.bb
rename to meta-openembedded/meta-oe/recipes-extended/icewm/icewm_1.6.5.bb
index fe6de00..241a2b3 100644
--- a/meta-openembedded/meta-oe/recipes-extended/icewm/icewm_1.5.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/icewm/icewm_1.6.5.bb
@@ -2,13 +2,14 @@
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=4a26952467ef79a7efca4a9cf52d417b"
 
-SRC_URI = "https://github.com/ice-wm/${BPN}/releases/download/${PV}/${BPN}-${PV}.tar.xz \
+SRC_URI = "https://github.com/ice-wm/${BPN}/releases/download/${PV}/${BPN}-${PV}.tar.lz \
            file://0001-configure.ac-skip-running-test-program-when-cross-co.patch \
            "
-SRC_URI[md5sum] = "6eba94a7935a0531d2c14eeb1426aeef"
-SRC_URI[sha256sum] = "f1c1344b20a9e8635143f70ee27930b55f813c15ca61f84d77584d311b6ac027"
+SRC_URI[sha256sum] = "d41e6abf842ff3f8705a81d352be7c5b181c587549c183de0641c3820234a7b2"
 
-inherit autotools pkgconfig gettext perlnative features_check qemu
+UPSTREAM_CHECK_URI = "https://github.com/ice-wm/${BPN}/releases"
+
+inherit autotools pkgconfig gettext perlnative features_check qemu update-alternatives
 REQUIRED_DISTRO_FEATURES = "x11"
 
 EXTRA_OECONF += "--with-libdir=${datadir}/icewm \
@@ -18,7 +19,9 @@
                 --enable-xinerama \
                 --enable-shape"
 
-DEPENDS = "asciidoc-native fontconfig gdk-pixbuf libxft libxpm libxrandr libxinerama libice libsm libx11 libxext libxrender"
+DEPENDS = "asciidoc-native fontconfig gdk-pixbuf libxft libxpm libxrandr \
+    libxinerama libice libsm libx11 libxext libxrender libxcomposite libxdamage \
+    libxfixes"
 DEPENDS_append = " qemu-native"
 RDEPENDS_${PN} = "perl fribidi"
 
@@ -36,4 +39,8 @@
     ./qemuwrapper > src/preferences
 }
 
+ALTERNATIVE_${PN} = "x-session-manager"
+ALTERNATIVE_TARGET[x-session-manager] = "${bindir}/icewm-session"
+ALTERNATIVE_PRIORITY_${PN} = "100"
+
 FILES_${PN} += "${datadir}/xsessions"
diff --git a/meta-openembedded/meta-oe/recipes-extended/indent/indent/0001-Fix-builds-with-recent-gettext.patch b/meta-openembedded/meta-oe/recipes-extended/indent/indent/0001-Fix-builds-with-recent-gettext.patch
index e48dfb3..e9dadac 100644
--- a/meta-openembedded/meta-oe/recipes-extended/indent/indent/0001-Fix-builds-with-recent-gettext.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/indent/indent/0001-Fix-builds-with-recent-gettext.patch
@@ -9,8 +9,6 @@
  Makefile.am | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/Makefile.am b/Makefile.am
-index 548fea7..cf01c5e 100644
 --- a/Makefile.am
 +++ b/Makefile.am
 @@ -1,7 +1,7 @@
@@ -18,7 +16,17 @@
  AUTOMAKE_OPTIONS = no-texinfo.tex
  
 -SUBDIRS = intl src doc po man
-+SUBDIRS = src doc po man
++SUBDIRS = src po man
  
  BUILT_SOURCES = 
  
+--- a/configure.ac
++++ b/configure.ac
+@@ -58,7 +58,6 @@ fi
+ AC_HEADER_DIRENT
+ 
+ AC_OUTPUT([ 
+-   intl/Makefile
+    po/Makefile.in
+    Makefile
+    src/Makefile
diff --git a/meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.12.bb b/meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.12.bb
index f8d63d4..90ba8a2 100644
--- a/meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.12.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/indent/indent_2.2.12.bb
@@ -9,6 +9,7 @@
 you want a program to format your code."
 LICENSE = "GPLv3"
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
 DEPENDS = "virtual/gettext"
 
 SRC_URI = "${GNU_MIRROR}/${BPN}/${BP}.tar.gz \
@@ -19,10 +20,8 @@
 SRC_URI[md5sum] = "4764b6ac98f6654a35da117b8e5e8e14"
 SRC_URI[sha256sum] = "e77d68c0211515459b8812118d606812e300097cfac0b4e9fb3472664263bb8b"
 
-inherit autotools gettext
+inherit autotools gettext texinfo
 
-CFLAGS_class-native += " -Wno-error=unused-value"
-
-FILES_${PN}-doc += "/usr/doc/indent/indent.html"
+CFLAGS_append_class-native = " -Wno-error=unused-value"
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb b/meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb
index b01d7f6..3a59721 100644
--- a/meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/iotop/iotop_0.6.bb
@@ -4,24 +4,26 @@
     a table of current I/O usage by processes on the system."
 HOMEPAGE = "http://guichaz.free.fr/iotop/"
 
-
 LICENSE = "GPLv2+"
 LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4"
 
-SRC_URI = "http://guichaz.free.fr/iotop/files/${BP}.tar.bz2"
-SRC_URI[md5sum] = "5ef9456b26d7694abf3101a72e1e0d1d"
-SRC_URI[sha256sum] = "3adea2a24eda49bbbaeb4e6ed2042355b441dbd7161e883067a02bfc8dcef75b"
+PV .= "+git${SRCPV}"
+
+SRCREV = "1bfb3bc70febb1ffb95146b6dcd65257228099a3"
+SRC_URI = "git://repo.or.cz/iotop.git"
+
+S = "${WORKDIR}/git"
 
 UPSTREAM_CHECK_URI = "http://repo.or.cz/iotop.git/tags"
 UPSTREAM_CHECK_REGEX = "iotop-(?P<pver>\d+(\.\d+)+)"
 
-inherit distutils
+inherit distutils3
 
 do_install_append() {
     rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/site.pyo || true
     rm -f ${D}${PYTHON_SITEPACKAGES_DIR}/site.py  || true
 }
 
-RDEPENDS_${PN} = "python-curses python-textutils \
-                  python-codecs python-ctypes python-pprint \
-                  python-shell python-subprocess python-core"
+RDEPENDS_${PN} = "python3-curses \
+                  python3-codecs python3-ctypes python3-pprint \
+                  python3-shell python3-core"
diff --git a/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb
index f62cf6b..e6d5663 100644
--- a/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/konkretcmpi/konkretcmpi_0.9.2.bb
@@ -6,7 +6,7 @@
 HOMEPAGE = "https://github.com/rnovacek/konkretcmpi"
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://COPYING;md5=f673270bfc350d9ce1efc8724c6c1873"
-DEPENDS_append_class-target = " swig-native sblim-cmpi-devel python"
+DEPENDS_append_class-target = " swig-native sblim-cmpi-devel python3"
 DEPENDS_append_class-native = " cmpi-bindings-native"
 
 SRC_URI = "git://github.com/rnovacek/konkretcmpi.git \
@@ -34,6 +34,6 @@
 
 RPROVIDES_${PN}-dbg += "${PN}-python-dbg"
 
-FILES_${PN}-python = "${libdir}/python2.7/site-packages/konkretmof.py* ${libdir}/python2.7/site-packages/_konkretmof.so"
+FILES_${PN}-python = "${libdir}/python*/site-packages/konkretmof.py* ${libdir}/python*/site-packages/_konkretmof.so"
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libcec/libcec/0001-Enhance-reproducibility.patch b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec/0001-Enhance-reproducibility.patch
new file mode 100644
index 0000000..f08887b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec/0001-Enhance-reproducibility.patch
@@ -0,0 +1,33 @@
+From 240727d3142700af779ca6f5c4677419787bca28 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Apr 2020 16:15:20 -0700
+Subject: [PATCH] Enhance reproducibility
+
+SetBuildInfo.cmake groks information from build system and emits that
+into sourcecode ( header file ) which is then compiled into binary, this
+string is build system dependent, therefore can cause reproducibility
+issues, here we set static string for LIB_INFO
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/libcec/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libcec/CMakeLists.txt b/src/libcec/CMakeLists.txt
+index 19a070b..4b3c827 100644
+--- a/src/libcec/CMakeLists.txt
++++ b/src/libcec/CMakeLists.txt
+@@ -133,7 +133,7 @@ set(CEC_HEADERS devices/CECRecordingDevice.h
+ source_group("Header Files" FILES ${CEC_HEADERS})
+ 
+ # platform and device specific
+-include(cmake/SetBuildInfo.cmake)
++set(LIB_INFO "compiled on ${CMAKE_SYSTEM} ... ")
+ include(cmake/CheckPlatformSupport.cmake)
+ 
+ ## create project groups
+-- 
+2.26.2
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb
index 8d5a824..39ceb48 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libcec/libcec_git.bb
@@ -2,18 +2,19 @@
 HOMEPAGE = "http://libcec.pulse-eight.com/"
 
 LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=e61fd86f9c947b430126181da2c6c715"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b3a719e97f49e4841e90573f9b1a98ac"
 
 DEPENDS = "p8platform udev ncurses swig-native python3"
 
 DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libx11 libxrandr', '', d)}"
 DEPENDS_append_rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}"
 
-PV = "4.0.4"
+PV = "5.0.0"
 
-SRCREV = "3bbd4321618503d14008387a72fabb6743878831"
-SRC_URI = "git://github.com/Pulse-Eight/libcec.git \
+SRCREV = "43bc27fe7be491149e6f57d14110e02abdac2f24"
+SRC_URI = "git://github.com/Pulse-Eight/libcec.git;branch=release \
            file://0001-CheckPlatformSupport.cmake-Do-not-hardcode-lib-path.patch \
+           file://0001-Enhance-reproducibility.patch \
           "
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/0001-idn-format-security-warnings.patch b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/0001-idn-format-security-warnings.patch
new file mode 100644
index 0000000..5adc7d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/0001-idn-format-security-warnings.patch
@@ -0,0 +1,181 @@
+From 82f98dcbc429bbe89a9837c533cbcbc02e77c790 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <adraszik@tycoint.com>
+Date: Tue, 28 Jun 2016 12:43:31 +0100
+Subject: [PATCH] idn: fix printf() format security warnings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+| ../../libidn-1.32/src/idn.c: In function 'main':
+| ../../libidn-1.32/src/idn.c:172:7: error: format not a string literal and no format arguments [-Werror=format-security]
+|        error (0, 0, _("only one of -s, -e, -d, -a, -u or -n can be specified"));
+|        ^~~~~
+| ../../libidn-1.32/src/idn.c:187:5: error: format not a string literal and no format arguments [-Werror=format-security]
+|      fprintf (stderr, _("Type each input string on a line by itself, "
+|      ^~~~~~~
+| ../../libidn-1.32/src/idn.c:202:4: error: format not a string literal and no format arguments [-Werror=format-security]
+|     error (EXIT_FAILURE, errno, _("input error"));
+|     ^~~~~
+| ../../libidn-1.32/src/idn.c:220:8: error: format not a string literal and no format arguments [-Werror=format-security]
+|         _("could not convert from UTF-8 to UCS-4"));
+|         ^
+| ../../libidn-1.32/src/idn.c:245:8: error: format not a string literal and no format arguments [-Werror=format-security]
+|         _("could not convert from UTF-8 to UCS-4"));
+|         ^
+| ../../libidn-1.32/src/idn.c:281:6: error: format not a string literal and no format arguments [-Werror=format-security]
+|       _("could not convert from UTF-8 to UCS-4"));
+|       ^
+| ../../libidn-1.32/src/idn.c:340:6: error: format not a string literal and no format arguments [-Werror=format-security]
+|       _("could not convert from UCS-4 to UTF-8"));
+|       ^
+| ../../libidn-1.32/src/idn.c:364:6: error: format not a string literal and no format arguments [-Werror=format-security]
+|       _("could not convert from UCS-4 to UTF-8"));
+|       ^
+| ../../libidn-1.32/src/idn.c:442:8: error: format not a string literal and no format arguments [-Werror=format-security]
+|         _("could not convert from UCS-4 to UTF-8"));
+|         ^
+| ../../libidn-1.32/src/idn.c:498:6: error: format not a string literal and no format arguments [-Werror=format-security]
+|       _("could not convert from UTF-8 to UCS-4"));
+|       ^
+| ../../libidn-1.32/src/idn.c:527:5: error: format not a string literal and no format arguments [-Werror=format-security]
+|      _("could not convert from UTF-8 to UCS-4"));
+|      ^
+| ../../libidn-1.32/src/idn.c:540:6: error: format not a string literal and no format arguments [-Werror=format-security]
+|       error (EXIT_FAILURE, 0, _("could not do NFKC normalization"));
+|       ^~~~~
+| ../../libidn-1.32/src/idn.c:551:5: error: format not a string literal and no format arguments [-Werror=format-security]
+|      _("could not convert from UTF-8 to UCS-4"));
+|      ^
+
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+---
+Upstream-Status: Pending
+
+ src/idn.c | 27 ++++++++++++++-------------
+ 1 file changed, 14 insertions(+), 13 deletions(-)
+
+diff --git a/src/idn.c b/src/idn.c
+index be1c7d1..68e4291 100644
+--- a/src/idn.c
++++ b/src/idn.c
+@@ -170,7 +170,7 @@ main (int argc, char *argv[])
+       (args_info.idna_to_unicode_given ? 1 : 0) +
+       (args_info.nfkc_given ? 1 : 0) != 1)
+     {
+-      error (0, 0, _("only one of -s, -e, -d, -a, -u or -n can be specified"));
++      error (0, 0, "%s", _("only one of -s, -e, -d, -a, -u or -n can be specified"));
+       usage (EXIT_FAILURE);
+     }
+ 
+@@ -185,7 +185,7 @@ main (int argc, char *argv[])
+   if (!args_info.quiet_given
+       && args_info.inputs_num == 0
+       && isatty (fileno (stdin)))
+-    fprintf (stderr, _("Type each input string on a line by itself, "
++    fprintf (stderr, "%s", _("Type each input string on a line by itself, "
+ 		       "terminated by a newline character.\n"));
+ 
+   do
+@@ -197,7 +197,7 @@ main (int argc, char *argv[])
+ 	  if (feof (stdin))
+ 	    break;
+ 
+-	  error (EXIT_FAILURE, errno, _("input error"));
++	  error (EXIT_FAILURE, errno, "%s", _("input error"));
+ 	}
+ 
+       if (strlen (line) > 0)
+@@ -215,7 +215,7 @@ main (int argc, char *argv[])
+ 	  if (!q)
+ 	    {
+ 	      free (p);
+-	      error (EXIT_FAILURE, 0,
++	      error (EXIT_FAILURE, 0, "%s",
+ 		     _("could not convert from UTF-8 to UCS-4"));
+ 	    }
+ 
+@@ -240,7 +240,7 @@ main (int argc, char *argv[])
+ 	  if (!q)
+ 	    {
+ 	      free (r);
+-	      error (EXIT_FAILURE, 0,
++	      error (EXIT_FAILURE, 0, "%s",
+ 		     _("could not convert from UTF-8 to UCS-4"));
+ 	    }
+ 
+@@ -277,7 +277,7 @@ main (int argc, char *argv[])
+ 	  q = stringprep_utf8_to_ucs4 (p, -1, &len);
+ 	  free (p);
+ 	  if (!q)
+-	    error (EXIT_FAILURE, 0,
++	    error (EXIT_FAILURE, 0, "%s",
+ 		   _("could not convert from UTF-8 to UCS-4"));
+ 
+ 	  if (args_info.debug_given)
+@@ -336,7 +336,7 @@ main (int argc, char *argv[])
+ 	  r = stringprep_ucs4_to_utf8 (q, -1, NULL, NULL);
+ 	  free (q);
+ 	  if (!r)
+-	    error (EXIT_FAILURE, 0,
++	    error (EXIT_FAILURE, 0, "%s",
+ 		   _("could not convert from UCS-4 to UTF-8"));
+ 
+ 	  p = stringprep_utf8_to_locale (r);
+@@ -360,7 +360,7 @@ main (int argc, char *argv[])
+ 	  q = stringprep_utf8_to_ucs4 (p, -1, NULL);
+ 	  free (p);
+ 	  if (!q)
+-	    error (EXIT_FAILURE, 0,
++	    error (EXIT_FAILURE, 0, "%s",
+ 		   _("could not convert from UCS-4 to UTF-8"));
+ 
+ 	  if (args_info.debug_given)
+@@ -438,7 +438,7 @@ main (int argc, char *argv[])
+ 	  if (!q)
+ 	    {
+ 	      free (p);
+-	      error (EXIT_FAILURE, 0,
++	      error (EXIT_FAILURE, 0, "%s",
+ 		     _("could not convert from UCS-4 to UTF-8"));
+ 	    }
+ 
+@@ -494,7 +494,7 @@ main (int argc, char *argv[])
+ 	  r = stringprep_ucs4_to_utf8 (q, -1, NULL, NULL);
+ 	  free (q);
+ 	  if (!r)
+-	    error (EXIT_FAILURE, 0,
++	    error (EXIT_FAILURE, 0, "%s",
+ 		   _("could not convert from UTF-8 to UCS-4"));
+ 
+ 	  p = stringprep_utf8_to_locale (r);
+@@ -523,7 +523,7 @@ main (int argc, char *argv[])
+ 	      if (!q)
+ 		{
+ 		  free (p);
+-		  error (EXIT_FAILURE, 0,
++		  error (EXIT_FAILURE, 0, "%s",
+ 			 _("could not convert from UTF-8 to UCS-4"));
+ 		}
+ 
+@@ -537,7 +537,8 @@ main (int argc, char *argv[])
+ 	  r = stringprep_utf8_nfkc_normalize (p, -1);
+ 	  free (p);
+ 	  if (!r)
+-	    error (EXIT_FAILURE, 0, _("could not do NFKC normalization"));
++	    error (EXIT_FAILURE, 0, "%s",
++		   _("could not do NFKC normalization"));
+ 
+ 	  if (args_info.debug_given)
+ 	    {
+@@ -547,7 +548,7 @@ main (int argc, char *argv[])
+ 	      if (!q)
+ 		{
+ 		  free (r);
+-		  error (EXIT_FAILURE, 0,
++		  error (EXIT_FAILURE, 0, "%s",
+ 			 _("could not convert from UTF-8 to UCS-4"));
+ 		}
+ 
+-- 
+2.8.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/dont-depend-on-help2man.patch b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/dont-depend-on-help2man.patch
new file mode 100644
index 0000000..0863530
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn/dont-depend-on-help2man.patch
@@ -0,0 +1,23 @@
+Upstream-Status: Inappropriate [disable feature]
+
+Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
+diff -Nurdd libidn-1.26/doc/Makefile.am libidn-1.26/doc/Makefile.am
+--- libidn-1.26/doc/Makefile.am	2012-09-18 11:25:45.000000000 +0300
++++ libidn-1.26/doc/Makefile.am	2013-02-08 07:41:24.591431462 +0200
+@@ -49,15 +49,9 @@
+
+ # Man pages.
+
+-dist_man_MANS = idn.1 $(gdoc_MANS)
++dist_man_MANS = $(gdoc_MANS)
+ MAINTAINERCLEANFILES = $(dist_man_MANS)
+
+-idn.1: $(top_srcdir)/src/idn.c $(top_srcdir)/src/idn.ggo \
+-		$(top_srcdir)/configure.ac
+-	$(HELP2MAN) \
+-		--name="Internationalized Domain Names command line tool" \
+-		--output=$@ $(top_builddir)/src/idn$(EXEEXT)
+-
+ # GDOC
+
+ GDOC_BIN = $(srcdir)/gdoc
diff --git a/meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.35.bb b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.35.bb
new file mode 100644
index 0000000..1057403
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libidn/libidn_1.35.bb
@@ -0,0 +1,40 @@
+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 = "(LGPLv2.1+ | LGPLv3) & GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=df4be47940a91ee69556f5f71eed4aec \
+                    file://COPYING.LESSERv2;md5=4fbd65380cdd255951079008b364516c \
+                    file://COPYING.LESSERv3;md5=e6a600fd5e1d9cbde2d983680233ad02 \
+                    file://COPYINGv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://COPYINGv3;md5=d32239bcb673463ab874e80d47fae504 \
+                    file://lib/idna.h;endline=21;md5=37cffad24807f446a24de3e7371f20b9 \
+                    file://src/idn.c;endline=20;md5=09e97034a8877b3451cb65065fc2c06e"
+DEPENDS = "virtual/libiconv autoconf-archive"
+
+inherit pkgconfig autotools gettext texinfo gtk-doc
+
+SRC_URI = "${GNU_MIRROR}/libidn/${BPN}-${PV}.tar.gz \
+           file://dont-depend-on-help2man.patch \
+           file://0001-idn-format-security-warnings.patch \
+           "
+
+SRC_URI[md5sum] = "bef634141fe39326cb354b75e891fead"
+SRC_URI[sha256sum] = "f11af1005b46b7b15d057d7f107315a1ad46935c7fcdf243c16e46ec14f0fe1e"
+
+# command tool is under GPLv3+, while libidn itself is under LGPLv2.1+ or LGPLv3
+# so package command into a separate package
+PACKAGES =+ "idn"
+FILES_idn = "${bindir}/*"
+
+LICENSE_${PN} = "LGPLv2.1+ | LGPLv3"
+LICENSE_idn = "GPLv3+"
+
+EXTRA_OECONF = "--disable-csharp"
+
+do_install_append() {
+	rm -rf ${D}${datadir}/emacs
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_2.1.0.bb b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_2.1.0.bb
index 48dec47..36659e7 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_2.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_2.1.0.bb
@@ -4,9 +4,9 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=ebb5c50ab7cab4baeffba14977030c07 \
                     file://COPYING.LESSER;md5=6ab17b41640564434dda85c06b7124f7"
 
-DEPENDS = "libxml2 glib-2.0 swig python"
+DEPENDS = "libxml2 glib-2.0 swig python3"
 
-inherit autotools pkgconfig pythonnative
+inherit autotools pkgconfig python3native
 
 SRCREV = "3df02d4d0e9008771e8622fdc10de8333b3f0d85"
 SRC_URI = "git://github.com/libimobiledevice/libplist;protocol=https \
diff --git a/meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch b/meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch
index d12492f..ec86721 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/libpwquality/files/add-missing-python-include-dir-for-cross.patch
@@ -13,28 +13,23 @@
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/python/Makefile.am b/python/Makefile.am
-index abc5cd3..e35ba71 100644
+index 1d00c0c..52816b2 100644
 --- a/python/Makefile.am
 +++ b/python/Makefile.am
-@@ -14,4 +14,4 @@ all-local:
- 	CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py build --build-lib=.
+@@ -14,7 +14,7 @@ all-local:
+ 	CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py build --build-base py$(PYTHONREV)
  
  install-exec-local:
--	CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py install --prefix=${DESTDIR}${prefix}
-+	CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py install --prefix=${DESTDIR}${prefix} --install-lib=${DESTDIR}/${PYTHONSITEDIR}
+-	CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py build --build-base py$(PYTHONREV) install --prefix=${DESTDIR}${prefix}
++	CFLAGS="${CFLAGS} -fno-strict-aliasing" @PYTHONBINARY@ setup.py build --build-base py$(PYTHONREV) install --prefix=${DESTDIR}${prefix} --install-lib=${DESTDIR}/${PYTHONSITEDIR}
+ 
+ clean-local:
+ 	rm -rf py$(PYTHONREV)
 diff --git a/python/setup.py.in b/python/setup.py.in
-index 6457595..d3db0e5 100755
+index a741b91..6759a95 100755
 --- a/python/setup.py.in
 +++ b/python/setup.py.in
-@@ -6,6 +6,7 @@
- 
- from distutils.core import setup, Extension
- from distutils.command.build_ext import build_ext as _build_ext
-+import os
- 
- class build_ext(_build_ext):
-     def genconstants(self, headerfile, outputfile):
-@@ -23,7 +24,7 @@ class build_ext(_build_ext):
+@@ -33,7 +33,7 @@ class sdist(_sdist):
  
  pwqmodule = Extension('pwquality',
              sources = ['pwquality.c'],
@@ -44,5 +39,5 @@
              libraries = ['pwquality'])
  
 -- 
-1.9.1
+2.17.1
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.0.bb b/meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.2.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.2.bb
index 9fb25cd..24d2f7e 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libpwquality/libpwquality_1.4.2.bb
@@ -9,8 +9,8 @@
            file://add-missing-python-include-dir-for-cross.patch \
 "
 
-SRC_URI[md5sum] = "b8defcc7280a90e9400d6689c93a279c"
-SRC_URI[sha256sum] = "1de6ff046cf2172d265a2cb6f8da439d894f3e4e8157b056c515515232fade6b"
+SRC_URI[md5sum] = "ae6e61fc33f5dac0de5e847eb7520d71"
+SRC_URI[sha256sum] = "5263e09ee62269c092f790ac159112aed3e66826a795e3afec85fdeac4281c8e"
 
 UPSTREAM_CHECK_URI = "https://github.com/libpwquality/libpwquality/releases"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.5.bb b/meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.5.bb
index 82503a1..cd40196 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libqb/libqb_1.0.5.bb
@@ -33,3 +33,5 @@
     ( cd ${S}
     ${S}/autogen.sh )
 }
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libstatgrab/libstatgrab_0.92.bb b/meta-openembedded/meta-oe/recipes-extended/libstatgrab/libstatgrab_0.92.bb
index c61d7c9..a081cb1 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libstatgrab/libstatgrab_0.92.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libstatgrab/libstatgrab_0.92.bb
@@ -14,6 +14,8 @@
 SRC_URI[md5sum] = "5362b2ddbec54b3901e7d70c22cda249"
 SRC_URI[sha256sum] = "5bf1906aff9ffc3eeacf32567270f4d819055d8386d98b9c8c05519012d5a196"
 
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
+
 # Perl5 is for tests only
 EXTRA_OECONF = "--without-perl5 --with-mnttab=/proc/mounts"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/libzip/libzip_1.5.2.bb b/meta-openembedded/meta-oe/recipes-extended/libzip/libzip_1.5.2.bb
deleted file mode 100644
index 5d725bf..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/libzip/libzip_1.5.2.bb
+++ /dev/null
@@ -1,18 +0,0 @@
-DESCRIPTION = "libzip is a C library for reading, creating, and modifying zip archives."
-HOMEPAGE = "https://libzip.org/"
-
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=01f8b1b8da6403739094396e15b1e722"
-
-DEPENDS = "zlib bzip2"
-
-PACKAGECONFIG[ssl] = "-DENABLE_OPENSSL=ON,-DENABLE_OPENSSL=OFF,openssl"
-
-PACKAGECONFIG ?= "ssl"
-
-inherit cmake
-
-SRC_URI = "https://libzip.org/download/libzip-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "f9dd38d273bcdec5d3d1498fe6684f42"
-SRC_URI[sha256sum] = "b3de4d4bd49a01e0cab3507fc163f88e1651695b6b9cb25ad174dbe319d4a3b4"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libzip/libzip_1.6.1.bb b/meta-openembedded/meta-oe/recipes-extended/libzip/libzip_1.6.1.bb
new file mode 100644
index 0000000..41ad552
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/libzip/libzip_1.6.1.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "libzip is a C library for reading, creating, and modifying zip archives."
+HOMEPAGE = "https://libzip.org/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e33bb117aa55f9aad3d28e29256f9919"
+
+DEPENDS = "zlib bzip2"
+
+PACKAGECONFIG[ssl] = "-DENABLE_OPENSSL=ON,-DENABLE_OPENSSL=OFF,openssl"
+PACKAGECONFIG[lzma] = "-DENABLE_LZMA=ON,-DENABLE_LZMA=OFF,xz"
+
+PACKAGECONFIG ?= "ssl lzma"
+
+inherit cmake
+
+SRC_URI = "https://libzip.org/download/libzip-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "f9a228619aab2446addc9c9e0e2de149"
+SRC_URI[sha256sum] = "705dac7a671b3f440181481e607b0908129a9cf1ddfcba75d66436c0e7d33641"
diff --git a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0004-do-not-use-autoconf-2.13-to-refresh-old.configure.patch b/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0004-do-not-use-autoconf-2.13-to-refresh-old.configure.patch
deleted file mode 100644
index 4cba79c..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/mozjs/mozjs/0004-do-not-use-autoconf-2.13-to-refresh-old.configure.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From a46adb74b5ba5e17d676d31d70faca76c1381d15 Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 12 Jul 2018 21:25:46 +0800
-Subject: [PATCH 4/5] do not use autoconf 2.13 to refresh old.configure
-
-Upstream-Status: Inappropriate [oe specific]
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- build/moz.configure/old.configure | 2 +-
- js/src/old-configure              | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure
-index ece47f4..a73900f 100644
---- a/build/moz.configure/old.configure
-+++ b/build/moz.configure/old.configure
-@@ -83,7 +83,7 @@ def prepare_configure(old_configure, mozconfig, autoconf, build_env, shell,
-             old_configure = os.path.join(old_configure_dir, 'js', 'src',
-                                          os.path.basename(old_configure))
- 
--    refresh = True
-+    refresh = False
-     if exists(old_configure):
-         mtime = getmtime(old_configure)
-         aclocal = os.path.join(build_env.topsrcdir, 'build', 'autoconf',
-diff --git a/js/src/old-configure b/js/src/old-configure
-index 75b00e1..8a8ef52 100644
---- a/js/src/old-configure
-+++ b/js/src/old-configure
-@@ -619,7 +619,7 @@ if test -z "$srcdir"; then
-   ac_prog=$0
-   ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
-   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
--  srcdir=$ac_confdir
-+  srcdir="$ac_confdir/../../"
-   if test ! -r $srcdir/$ac_unique_file; then
-     srcdir=..
-   fi
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/mraa/mraa/0001-cmake-Use-a-regular-expression-to-match-x86-architec.patch b/meta-openembedded/meta-oe/recipes-extended/mraa/mraa/0001-cmake-Use-a-regular-expression-to-match-x86-architec.patch
new file mode 100644
index 0000000..0cae02f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/mraa/mraa/0001-cmake-Use-a-regular-expression-to-match-x86-architec.patch
@@ -0,0 +1,35 @@
+From 5de183dc436bb647361ab641d891c113e6a7dadd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 8 Mar 2020 16:30:48 -0700
+Subject: [PATCH] cmake: Use a regular expression to match x86 architectures
+
+in OE we use i686 for qemux86 and this results in
+
+-- INFO - Target arch is i686
+CMake Error at CMakeLists.txt:191 (message):
+  Only x86, arm, mips, PERIPHERALMAN and mock platforms currently supported
+
+So using a wildcard helps in using any x86 arch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 250d9106..fb642722 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -176,8 +176,7 @@ else ()
+   message (STATUS "INFO - Override arch is ${DETECTED_ARCH}")
+ endif()
+ 
+-if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
+-    OR DETECTED_ARCH STREQUAL "i386")
++if (DETECTED_ARCH MATCHES "i?86" OR DETECTED_ARCH STREQUAL "x86_64")
+   set (X86PLAT ON)
+ elseif (DETECTED_ARCH MATCHES "arm.*" OR DETECTED_ARCH MATCHES "aarch64")
+   set (ARMPLAT ON)
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb b/meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb
index 6d42c67..403d641 100644
--- a/meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/mraa/mraa_git.bb
@@ -3,12 +3,13 @@
 SECTION = "libs"
 
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4b92a3b497d7943042a6db40c088c3f2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=91e7de50a8d3cf01057f318d72460acd"
 
-SRCREV = "967585c9ea0e1a8818d2172d2395d8502f6180a2"
-PV = "2.0.0+git${SRCPV}"
+SRCREV = "e15ce6fbc76148ba8835adc92196b0d0a3f245e7"
+PV = "2.1.0+git${SRCPV}"
 
-SRC_URI = "git://github.com/intel-iot-devkit/${BPN}.git;protocol=http \
+SRC_URI = "git://github.com/eclipse/${BPN}.git;protocol=http \
+           file://0001-cmake-Use-a-regular-expression-to-match-x86-architec.patch \
            "
 
 S = "${WORKDIR}/git"
@@ -26,6 +27,8 @@
                          -DPYTHON_INCLUDE_DIR=${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI} \
                        "
 
+CFLAGS += "-fcommon"
+
 # Prepend mraa-utils to make sure bindir ends up in there
 PACKAGES =+ "${PN}-utils"
 
@@ -60,3 +63,5 @@
 ### Include desired language bindings ###
 PACKAGES =+ "${@bb.utils.contains('BINDINGS', 'nodejs', 'node-${PN}', '', d)}"
 PACKAGES =+ "${@bb.utils.contains('BINDINGS', 'python', '${PYTHON_PN}-${PN}', '', d)}"
+
+TOOLCHAIN = "gcc"
diff --git a/meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb b/meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb
index 595852a..4235006 100644
--- a/meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/nana/nana_2.5.bb
@@ -15,7 +15,7 @@
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=16aa57f3b7fdda870cee597275bd5d11"
 
-inherit autotools-brokensep pkgconfig
+inherit autotools-brokensep pkgconfig texinfo
 
 EXTRA_OEMAKE = "DESTDIR=${D}"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb b/meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb
index 419b3ee..04f82d2 100644
--- a/meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/openlmi/openlmi-tools_0.10.5.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://../COPYING;md5=75859989545e37968a99b631ef42722e"
 SECTION = "System/Management"
 
-inherit setuptools
+inherit ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "setuptools", "", d)}
 
 DEPENDS = "python-native python-pywbem-native python-m2crypto python-pywbem"
 
@@ -17,10 +17,10 @@
 S = "${WORKDIR}/${BP}/cli"
 
 do_configure_prepend() {
-    sed 's/@@VERSION@@/$(VERSION)/g' setup.py.skel >setup.py
+    sed 's/@@VERSION@@/$(VERSION)/g' ${S}/setup.py.skel > ${S}/setup.py
 }
 
 python() {
-    if 'meta-python' not in d.getVar('BBFILE_COLLECTIONS').split():
-        raise bb.parse.SkipRecipe('Requires meta-python to be present.')
+    if 'meta-python2' not in d.getVar('BBFILE_COLLECTIONS').split():
+        raise bb.parse.SkipRecipe('Requires meta-python2 to be present.')
 }
diff --git a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2019.6.bb b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2019.6.bb
rename to meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb
index bcf511b..43021c5 100644
--- a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2019.6.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2020.3.bb
@@ -10,7 +10,6 @@
 
 DEPENDS = " \
     glib-2.0 \
-    gpgme \
     e2fsprogs \
     libcap \
     zlib \
@@ -26,7 +25,7 @@
     gitsm://github.com/ostreedev/ostree \
     file://run-ptest \
 "
-SRCREV = "43706202f7de2ce0c829a46caab350ae1656f6ad"
+SRCREV = "6ed48234ba579ff73eb128af237212b0a00f2057"
 
 UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+\.\d+)"
 
@@ -36,11 +35,11 @@
 
 # Package configuration - match ostree defaults, but without rofiles-fuse
 # otherwise we introduce a dependendency on meta-filesystems
-#
-# If running with ptest, both soup (for trivial-httpd) and xattr are required
 PACKAGECONFIG ??= " \
     ${@bb.utils.filter('DISTRO_FEATURES', 'selinux smack', d)} \
     ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd libmount', '', d)} \
+    glib \
+    gpgme \
     soup \
 "
 
@@ -49,6 +48,7 @@
 PACKAGECONFIG_class-native ??= " \
     ${@bb.utils.filter('DISTRO_FEATURES', 'selinux smack', d)} \
     builtin-grub2-mkconfig \
+    gpgme \
     soup \
 "
 
@@ -56,8 +56,10 @@
 PACKAGECONFIG[builtin-grub2-mkconfig] = "--with-builtin-grub2-mkconfig, --without-builtin-grub2-mkconfig"
 PACKAGECONFIG[curl] = "--with-curl, --without-curl, curl"
 PACKAGECONFIG[dracut] = "--with-dracut, --without-dracut"
+PACKAGECONFIG[glib] = "--with-crypto=glib"
 PACKAGECONFIG[gjs] = "ac_cv_path_GJS=${bindir}/gjs"
 PACKAGECONFIG[gnutls] = "--with-crypto=gnutls, , gnutls"
+PACKAGECONFIG[gpgme] = "--with-gpgme, --without-gpgme, gpgme"
 PACKAGECONFIG[libarchive] = "--with-libarchive, --without-libarchive, libarchive"
 PACKAGECONFIG[libmount] = "--with-libmount, --without-libmount, util-linux"
 PACKAGECONFIG[manpages] = "--enable-man, --disable-man, libxslt-native docbook-xsl-stylesheets-native"
@@ -144,9 +146,21 @@
 RDEPENDS_${PN}-dracut = "bash"
 RDEPENDS_${PN}-mkinitcpio = "bash"
 RDEPENDS_${PN}_class-target = " \
-    gnupg \
+    ${@bb.utils.contains('PACKAGECONFIG', 'gpgme', 'gnupg', '', d)} \
     ${PN}-switchroot \
 "
+
+#
+# Note that to get ptest to pass you also need:
+#
+#   xattr in DISTRO_FEATURES
+#   static ostree-prepare-root (PACKAGECONFIG_append_pn-ostree = " static")
+#   meta-python in your layers
+#   overlayfs in your kernel (KERNEL_EXTRA_FEATURES += "features/overlayfs/overlayfs.scc")
+#   busybox built statically
+#   /var/tmp as a real filesystem (not a tmpfs)
+#   Sufficient disk space (IMAGE_ROOTFS_SIZE = "524288") and RAM (QB_MEM = "-m 1024")
+#
 RDEPENDS_${PN}-ptest += " \
     attr \
     bash \
@@ -157,7 +171,10 @@
     grep \
     python3-core \
     python3-multiprocessing \
+    strace \
     tar \
+    util-linux \
+    xz \
     ${PN}-trivial-httpd \
     ${@bb.utils.contains('BBFILE_COLLECTIONS', 'meta-python', 'python3-pyyaml', '', d)} \
     ${@bb.utils.contains('PACKAGECONFIG', 'gjs', 'gjs', '', d)} \
@@ -165,7 +182,6 @@
 RDEPENDS_${PN}-ptest_append_libc-glibc = " glibc-utils glibc-localedata-en-us"
 
 RRECOMMENDS_${PN} += "kernel-module-overlay"
-RRECOMMENDS_${PN}-ptest += "strace"
 
 SYSTEMD_SERVICE_${PN} = "ostree-remount.service ostree-finalize-staged.path"
 SYSTEMD_SERVICE_${PN}-switchroot = "ostree-prepare-root.service"
diff --git a/meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb b/meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb
index 41b4d0d..7871801 100644
--- a/meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/pam/pam-ssh-agent-auth_0.10.3.bb
@@ -27,7 +27,7 @@
 #
 S = "${WORKDIR}/pam_ssh_agent_auth-${PV}"
 
-inherit autotools-brokensep
+inherit autotools-brokensep perlnative
 
 # Avoid autoreconf.  Override the --libexec oe_runconf specifies so that
 # the module is put with the other pam modules.  Because it cannot, in general,
diff --git a/meta-openembedded/meta-oe/recipes-extended/pegtl/pegtl_2.8.1.bb b/meta-openembedded/meta-oe/recipes-extended/pegtl/pegtl_2.8.3.bb
similarity index 68%
rename from meta-openembedded/meta-oe/recipes-extended/pegtl/pegtl_2.8.1.bb
rename to meta-openembedded/meta-oe/recipes-extended/pegtl/pegtl_2.8.3.bb
index 7333363..92741d8 100644
--- a/meta-openembedded/meta-oe/recipes-extended/pegtl/pegtl_2.8.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/pegtl/pegtl_2.8.3.bb
@@ -1,9 +1,9 @@
 DESCRIPTION="header-only library for creating parsers according to Parsing Expression Grammar"
 HOMEPAGE="https://github.com/taocpp/PEGTL"
 LICENSE="MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae77b0d903a788cb48f4f0926ffc468b"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6a5195f720a8d436a4148e0cb8660400"
 
-SRCREV = "7aff80da2ca4fcb0b47f32ba684ff2e1cd48c579"
+SRCREV = "47e878ad4fd72c91253c9d47b6f17e001ca2dfcf"
 SRC_URI = "git://github.com/taocpp/PEGTL.git;protocol=https;branch=2.x \
           "
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/0001-src-Do-not-reset-FINAL_LIBS.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis/0001-src-Do-not-reset-FINAL_LIBS.patch
index 04af15d..b5c4133 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis/0001-src-Do-not-reset-FINAL_LIBS.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis/0001-src-Do-not-reset-FINAL_LIBS.patch
@@ -18,7 +18,7 @@
 index 7f7c625..c71dd3b 100644
 --- a/src/Makefile
 +++ b/src/Makefile
-@@ -66,7 +66,7 @@ endif
+@@ -75,7 +75,7 @@ endif
  
  FINAL_CFLAGS=$(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) $(REDIS_CFLAGS)
  FINAL_LDFLAGS=$(LDFLAGS) $(REDIS_LDFLAGS) $(DEBUG)
@@ -26,7 +26,7 @@
 +FINAL_LIBS+=-lm
  DEBUG=-g -ggdb
  
- ifeq ($(uname_S),SunOS)
+ # Linux ARM needs -latomic at linking time
 -- 
 2.23.0
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis/0005-Mark-extern-definition-of-SDS_NOINIT-in-sds.h.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis/0005-Mark-extern-definition-of-SDS_NOINIT-in-sds.h.patch
deleted file mode 100644
index 4675687..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis/0005-Mark-extern-definition-of-SDS_NOINIT-in-sds.h.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 7f7f710c8821b7254baeaf945ca3ca263b9845e2 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 21 Dec 2019 11:17:50 -0800
-Subject: [PATCH] Mark extern definition of SDS_NOINIT in sds.h
-
-This helps avoiding multiple definition of this variable, its also
-defined globally in sds.c
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/sds.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/sds.h b/src/sds.h
-index 1bdb60d..adcc12c 100644
---- a/src/sds.h
-+++ b/src/sds.h
-@@ -34,7 +34,7 @@
- #define __SDS_H
- 
- #define SDS_MAX_PREALLOC (1024*1024)
--const char *SDS_NOINIT;
-+extern const char *SDS_NOINIT;
- 
- #include <sys/types.h>
- #include <stdarg.h>
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis_5.0.7.bb b/meta-openembedded/meta-oe/recipes-extended/redis/redis_5.0.9.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-extended/redis/redis_5.0.7.bb
rename to meta-openembedded/meta-oe/recipes-extended/redis/redis_5.0.9.bb
index b915755..d042933 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis_5.0.7.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis_5.0.9.bb
@@ -14,12 +14,11 @@
            file://lua-update-Makefile-to-use-environment-build-setting.patch \
            file://oe-use-libc-malloc.patch \
            file://0001-src-Do-not-reset-FINAL_LIBS.patch \
-           file://0005-Mark-extern-definition-of-SDS_NOINIT-in-sds.h.patch \
            file://GNU_SOURCE.patch \
            "
 
-SRC_URI[md5sum] = "612ec43075a888bc8b8a7dd8ccb2e0f7"
-SRC_URI[sha256sum] = "61db74eabf6801f057fd24b590232f2f337d422280fd19486eca03be87d3a82b"
+SRC_URI[md5sum] = "c94523c9f4ee662027ddf90575d0e058"
+SRC_URI[sha256sum] = "53d0ae164cd33536c3d4b720ae9a128ea6166ebf04ff1add3b85f1242090cb85"
 
 inherit autotools-brokensep update-rc.d systemd useradd
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.7.2.bb b/meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.7.2.bb
index b39ceda..5662e63 100644
--- a/meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.7.2.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/rrdtool/rrdtool_1.7.2.bb
@@ -4,7 +4,7 @@
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=39df84cfd8a5e18bf988f277f7946676"
 
-DEPENDS = "libpng zlib cairo pango glib-2.0 libxml2 groff-native python-setuptools-native"
+DEPENDS = "libpng zlib cairo pango glib-2.0 libxml2 groff-native python3-setuptools-native"
 
 SRCREV = "56a83f4f52e6745cd4352f9ee008be3183a6dedf"
 PV = "1.7.2"
@@ -15,7 +15,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit cpan autotools-brokensep gettext pythonnative python-dir systemd
+inherit cpan autotools-brokensep gettext python3native python3-dir systemd
 
 BBCLASSEXTEND = "native"
 
@@ -24,7 +24,7 @@
 
 EXTRA_AUTORECONF = "-I m4 --exclude=autopoint"
 
-PACKAGECONFIG ??= "python perl ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG ??= "perl ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
 
 PACKAGECONFIG[python] = "--enable-python=yes \
 am_cv_python_pythondir=${STAGING_LIBDIR}/python${PYTHON_BASEVERSION}/site-packages \
@@ -123,7 +123,7 @@
 DESCRIPTION_${PN}-python = \
 "The ${PN}-python package includes RRDtool bindings for python."
 FILES_${PN}-python = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/*"
-RDEPENDS_${PN}-python = "python"
+RDEPENDS_${PN}-python = "python3"
 
 FILES_${PN}-dbg += "${libdir}/perl/vendor_perl/*/auto/RRDs/.debug \
     ${libdir}/python${PYTHON_BASEVERSION}/site-packages/.debug"
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.4.0.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.5.0.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.4.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.5.0.bb
index 16c63a7..a466314 100644
--- a/meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/librelp_1.5.0.bb
@@ -9,7 +9,7 @@
 SRC_URI = "git://github.com/rsyslog/librelp.git;protocol=https \
 "
 
-SRCREV = "e96443dda3c080fa991decec26bc4ac98d24b9a2"
+SRCREV = "0beb2258e12e4131dc31e261078ea53d18f787d7"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest
index 3770a75..aa698d8 100644
--- a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog/run-ptest
@@ -1,3 +1,8 @@
 #!/bin/sh
 #
+set -e
+set -o pipefail
+
+SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
+cd ${SCRIPTPATH}
 make -C tests -k check-TESTS
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.1911.0.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.2002.0.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.1911.0.bb
rename to meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.2002.0.bb
index 02ac03e..8605145 100644
--- a/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.1911.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/rsyslog_8.2002.0.bb
@@ -29,8 +29,8 @@
     file://0001-Include-sys-time-h.patch \
 "
 
-SRC_URI[md5sum] = "154e33feb587216f2955050a8301104c"
-SRC_URI[sha256sum] = "e1f4776b1c62ad7220f4d624a89a96b0c3d4738006899356eaaef0f1f91ee104"
+SRC_URI[md5sum] = "fbe6d18205170e22bad470954d0dc874"
+SRC_URI[sha256sum] = "fe86c14d860da1202c76616feac0539ea5a40a4ad182d74b7d6d2419cc2381f8"
 
 UPSTREAM_CHECK_URI = "https://github.com/rsyslog/rsyslog/releases"
 UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)"
@@ -77,6 +77,12 @@
 PACKAGECONFIG[mail] = "--enable-mail,--disable-mail,,"
 PACKAGECONFIG[valgrind] = "--enable-valgrind,--disable-valgrind,valgrind,"
 
+do_configure_prepend() {
+    sed -i -e 's|python |python3 |g' ${S}/tests/*.sh
+    sed -i -e 's|/usr/bin/env python|/usr/bin/env python3|g' ${S}/tests/*.py
+    sed -i -e 's|/usr/bin/env python|/usr/bin/env python3|g' ${S}/tests/testsuites/*.py
+}
+
 TESTDIR = "tests"
 do_compile_ptest() {
     echo 'buildtest-TESTS: $(check_PROGRAMS)' >> ${TESTDIR}/Makefile
@@ -125,6 +131,8 @@
     # fix the module load path with runtime/.libs
     find ${D}${PTEST_PATH}/${TESTDIR} -name "*.conf" -o -name "*.sh" -o -name "*.c" | xargs \
         sed -i -e 's:../plugins/.*/.libs/:../runtime/.libs/:g'
+    # fix the python3 path for tests/set-envar
+    sed -i -e s:${HOSTTOOLS_DIR}:${bindir}:g ${D}${PTEST_PATH}/tests/set-envvars
 }
 
 do_install_append() {
@@ -179,12 +187,14 @@
 
 # Disable for powerpc64 with musl
 VALGRIND_libc-musl_powerpc64 = ''
+VALGRIND_libc-musl_powerpc64le = ''
 
 # RISC-V support for valgrind is not there yet
 VALGRIND_riscv64 = ""
+VALGRIND_riscv32 = ""
 
 RDEPENDS_${PN}-ptest += "\
   make diffutils gzip bash gawk coreutils procps \
-  libgcc python-core python-io \
+  libgcc python3-core python3-io \
   "
 RRECOMMENDS_${PN}-ptest += "${TCLIBC}-dbg ${VALGRIND}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/sigrok/libsigrok_0.5.2.bb b/meta-openembedded/meta-oe/recipes-extended/sigrok/libsigrok_0.5.2.bb
index 35e59d6..e8c36a8 100644
--- a/meta-openembedded/meta-oe/recipes-extended/sigrok/libsigrok_0.5.2.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/sigrok/libsigrok_0.5.2.bb
@@ -15,7 +15,7 @@
 
 PACKAGECONFIG ??= "serialport ftdi usb"
 
-inherit autotools pkgconfig
+inherit autotools pkgconfig mime
 
 SRC_URI = "http://sigrok.org/download/source/libsigrok/libsigrok-${PV}.tar.gz"
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/sigrok/sigrok-cli_0.7.1.bb b/meta-openembedded/meta-oe/recipes-extended/sigrok/sigrok-cli_0.7.1.bb
index 2293f14..369e2f6 100644
--- a/meta-openembedded/meta-oe/recipes-extended/sigrok/sigrok-cli_0.7.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/sigrok/sigrok-cli_0.7.1.bb
@@ -10,7 +10,7 @@
 
 PACKAGECONFIG ??= "decode"
 
-inherit autotools pkgconfig
+inherit autotools pkgconfig mime-xdg
 
 SRC_URI = "http://sigrok.org/download/source/sigrok-cli/sigrok-cli-${PV}.tar.gz"
 SRC_URI[md5sum] = "3f45ce664bad529d8b3f78a61b017d75"
diff --git a/meta-openembedded/meta-oe/recipes-extended/snappy/snappy_1.1.7.bb b/meta-openembedded/meta-oe/recipes-extended/snappy/snappy_1.1.8.bb
similarity index 69%
rename from meta-openembedded/meta-oe/recipes-extended/snappy/snappy_1.1.7.bb
rename to meta-openembedded/meta-oe/recipes-extended/snappy/snappy_1.1.8.bb
index 9f37c5f..d6d1e41 100644
--- a/meta-openembedded/meta-oe/recipes-extended/snappy/snappy_1.1.7.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/snappy/snappy_1.1.8.bb
@@ -10,10 +10,10 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://COPYING;md5=f62f3080324a97b3159a7a7e61812d0c"
 
-SRC_URI = "https://src.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.7.tar.gz/sha512/32046f532606ba545a4e4825c0c66a19be449f2ca2ff760a6fa170a3603731479a7deadb683546e5f8b5033414c50f4a9a29f6d23b7a41f047e566e69eca7caf/snappy-1.1.7.tar.gz"
+SRC_URI = "https://src.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.8.tar.gz/sha512/efe18ff1b3edda1b4b6cefcbc6da8119c05d63afdbf7a784f3490353c74dced76baed7b5f1aa34b99899729192b9d657c33c76de4b507a51553fa8001ae75c1c/snappy-1.1.8.tar.gz"
 
-SRC_URI[md5sum] = "ee9086291c9ae8deb4dac5e0b85bf54a"
-SRC_URI[sha256sum] = "3dfa02e873ff51a11ee02b9ca391807f0c8ea0529a4924afa645fbf97163f9d4"
+SRC_URI[md5sum] = "70e48cba7fecf289153d009791c9977f"
+SRC_URI[sha256sum] = "16b677f07832a612b0836178db7f374e414f94657c138e6993cbfc5dcc58651f"
 
 inherit cmake pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils/0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils/0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch
deleted file mode 100644
index cbf3aee..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils/0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-From 20981c8a328747f823b7eef68d0c2812b3eaed30 Mon Sep 17 00:00:00 2001
-From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
-Date: Sun, 14 Jul 2019 21:50:43 +0200
-Subject: [PATCH] fix include to find SIOCGSTAMP with latest kernel
-
-In linux kernel commit 0768e17073dc527ccd18ed5f96ce85f9985e9115
-the asm-generic/sockios.h header no longer defines SIOCGSTAMP.
-Instead it provides only SIOCGSTAMP_OLD.
-
-The linux/sockios.h header now defines SIOCGSTAMP using either
-SIOCGSTAMP_OLD or SIOCGSTAMP_NEW as appropriate. This linux only
-header file is not pulled so we get a build failure.
-
-canlogserver.c: In function 'main':
-canlogserver.c:404:21: error: 'SIOCGSTAMP' undeclared (first use in this function); did you mean 'SIOCGRARP'?
-     if (ioctl(s[i], SIOCGSTAMP, &tv) < 0)
-                     ^~~~~~~~~~
-                     SIOCGRARP
-canlogserver.c:404:21: note: each undeclared identifier is reported only once for each function it appears in
-
-Fixes:
- - http://autobuild.buildroot.org/results/363de7d9bf433be8bc47ba4ee52ae0bb80fa9021
-
-Upstream-Status: Backport [https://github.com/linux-can/can-utils/commit/e9590b1ca75d360eaf3211bebd86058214d48064]
-Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
----
- canlogserver.c | 1 +
- cansniffer.c   | 1 +
- isotpdump.c    | 1 +
- isotpperf.c    | 1 +
- isotpsniffer.c | 1 +
- slcanpty.c     | 1 +
- 6 files changed, 6 insertions(+)
-
-diff --git a/canlogserver.c b/canlogserver.c
-index e3350b7..f53165c 100644
---- a/canlogserver.c
-+++ b/canlogserver.c
-@@ -61,6 +61,7 @@
- 
- #include <linux/can.h>
- #include <linux/can/raw.h>
-+#include <linux/sockios.h>
- #include <signal.h>
- #include <errno.h>
- 
-diff --git a/cansniffer.c b/cansniffer.c
-index 7b0a3fa..bf7d72e 100644
---- a/cansniffer.c
-+++ b/cansniffer.c
-@@ -61,6 +61,7 @@
- 
- #include <linux/can.h>
- #include <linux/can/bcm.h>
-+#include <linux/sockios.h>
- 
- #include "terminal.h"
- 
-diff --git a/isotpdump.c b/isotpdump.c
-index b2b650a..36d8af3 100644
---- a/isotpdump.c
-+++ b/isotpdump.c
-@@ -55,6 +55,7 @@
- 
- #include <linux/can.h>
- #include <linux/can/raw.h>
-+#include <linux/sockios.h>
- #include "terminal.h"
- 
- #define NO_CAN_ID 0xFFFFFFFFU
-diff --git a/isotpperf.c b/isotpperf.c
-index db3a2b7..5852a57 100644
---- a/isotpperf.c
-+++ b/isotpperf.c
-@@ -56,6 +56,7 @@
- 
- #include <linux/can.h>
- #include <linux/can/raw.h>
-+#include <linux/sockios.h>
- 
- #define NO_CAN_ID 0xFFFFFFFFU
- #define PERCENTRES 2 /* resolution in percent for bargraph */
-diff --git a/isotpsniffer.c b/isotpsniffer.c
-index f42e18b..d7a4c66 100644
---- a/isotpsniffer.c
-+++ b/isotpsniffer.c
-@@ -55,6 +55,7 @@
- 
- #include <linux/can.h>
- #include <linux/can/isotp.h>
-+#include <linux/sockios.h>
- #include "terminal.h"
- 
- #define NO_CAN_ID 0xFFFFFFFFU
-diff --git a/slcanpty.c b/slcanpty.c
-index 431ca68..7dfaf5c 100644
---- a/slcanpty.c
-+++ b/slcanpty.c
-@@ -40,6 +40,7 @@
- 
- #include <linux/can.h>
- #include <linux/can/raw.h>
-+#include <linux/sockios.h>
- 
- /* maximum rx buffer len: extended CAN frame with timestamp */
- #define SLC_MTU (sizeof("T1111222281122334455667788EA5F\r")+1)
diff --git a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
index db5055f..5193688 100644
--- a/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/socketcan/can-utils_git.bb
@@ -1,18 +1,15 @@
 SUMMARY = "Linux CAN network development utilities"
-DESCRIPTION = "Linux CAN network development"
 LICENSE = "GPLv2 & BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://include/linux/can.h;endline=43;md5=390a2c9a3c5e3595a069ac1436553ee7"
+LIC_FILES_CHKSUM = "file://include/linux/can.h;endline=44;md5=a9e1169c6c9a114a61329e99f86fdd31"
 
 DEPENDS = "libsocketcan"
 
-SRC_URI = "git://github.com/linux-can/${BPN}.git;protocol=git;branch=master \
-           file://0001-fix-include-to-find-SIOCGSTAMP-with-latest-kernel.patch \
-           "
-SRCREV = "4c8fb05cb4d6ddcd67299008db54af423f86fd05"
+SRC_URI = "git://github.com/linux-can/${BPN}.git;protocol=git"
 
-PV = "0.0+gitr${SRCPV}"
+SRCREV = "da65fdfe0d1986625ee00af0b56ae17ec132e700"
+
+PV = "2020.02.04"
 
 S = "${WORKDIR}/git"
 
 inherit autotools pkgconfig
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch
index 7d3f8a1..cb80611 100644
--- a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch
@@ -9,42 +9,41 @@
  userspace/libsinsp/utils.h   | 2 +-
  2 files changed, 4 insertions(+), 2 deletions(-)
 
-diff --git a/userspace/libsinsp/utils.cpp b/userspace/libsinsp/utils.cpp
-index 8f23f9c..c496a57 100644
 --- a/userspace/libsinsp/utils.cpp
 +++ b/userspace/libsinsp/utils.cpp
-@@ -21,7 +21,9 @@ along with sysdig.  If not, see <http://www.gnu.org/licenses/>.
+@@ -22,7 +22,7 @@ limitations under the License.
  #include <limits.h>
  #include <stdlib.h>
  #include <sys/time.h>
-+#ifdef __GLIBC__
+-#ifndef CYGWING_AGENT
++#if !defined(CYGWING_AGENT) || defined(__GLIBC__)
  #include <execinfo.h>
-+#endif
+ #endif
  #include <unistd.h>
- #include <sys/time.h>
- #include <netdb.h>
-@@ -741,7 +743,7 @@ uint64_t sinsp_utils::get_current_time_ns()
-     return tv.tv_sec * (uint64_t) 1000000000 + tv.tv_usec * 1000;
- }
+@@ -780,6 +780,7 @@ bool sinsp_utils::glob_match(const char
  
--#ifndef _WIN32
-+#if defined(_WIN32) && defined(__GLIBC__)
+ #ifndef CYGWING_AGENT
+ #ifndef _WIN32
++#ifdef __GLIBC__
  void sinsp_utils::bt(void)
  {
  	static const char start[] = "BACKTRACE ------------";
-diff --git a/userspace/libsinsp/utils.h b/userspace/libsinsp/utils.h
-index 600d00b..4ab4650 100644
+@@ -801,6 +802,7 @@ void sinsp_utils::bt(void)
+ 
+ 	free(bt_syms);
+ }
++#endif // Glibc
+ #endif // _WIN32
+ #endif // CYGWING_AGENT
+ 
 --- a/userspace/libsinsp/utils.h
 +++ b/userspace/libsinsp/utils.h
-@@ -79,7 +79,7 @@ public:
+@@ -104,7 +104,7 @@ public:
  
- 	static uint64_t get_current_time_ns();
+ 	static bool glob_match(const char *pattern, const char *string);
  
 -#ifndef _WIN32
 +#if not defined(_WIN32) && defined(__GLIBC__)
  	//
  	// Print the call stack
  	//
--- 
-2.6.2
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-fix-build-with-LuaJIT-2.1-betas.patch b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-fix-build-with-LuaJIT-2.1-betas.patch
new file mode 100644
index 0000000..71b0b8c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-fix-build-with-LuaJIT-2.1-betas.patch
@@ -0,0 +1,96 @@
+From ae82de664a6ba6ab2654adf9bed81f22b6fdc19d Mon Sep 17 00:00:00 2001
+From: Evgeni Golov <evgeni@golov.de>
+Date: Sun, 27 Aug 2017 13:51:19 +0200
+Subject: [PATCH] fix build with LuaJIT 2.1 betas
+
+LuaJIT 2.1 drops some compat symbols [1]. And while I think that this is
+wrong, as it breaks compatibility with Lua 5.1 [2], it is quite easy to
+adopt the code to work with both versions (2.0 and 2.1) of LuaJIT and
+remain Lua 5.1 compatible.
+
+[1] https://github.com/LuaJIT/LuaJIT/commit/dc320ca70f2c5bb3977b82853bcee6dad2523d01
+[2] https://github.com/LuaJIT/LuaJIT/issues/325
+
+Upstream-Status: Submitted [https://github.com/LuaJIT/LuaJIT/issues/325]
+Signed-off-by: Evgeni Golov <evgeni@golov.de>
+sysdig-CLA-1.0-signed-off-by: Evgeni Golov <evgeni@golov.de>
+---
+ CMakeLists.txt                        | 2 +-
+ userspace/libsinsp/chisel.cpp         | 6 +++---
+ userspace/libsinsp/lua_parser.cpp     | 2 +-
+ userspace/libsinsp/lua_parser_api.cpp | 2 +-
+ 4 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d7020493..33e524f5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -140,7 +140,7 @@ option(USE_BUNDLED_DEPS "Enable bundled dependencies instead of using the system
+ option(USE_BUNDLED_LUAJIT "Enable building of the bundled LuaJIT" ${USE_BUNDLED_DEPS})
+ 
+ if(NOT USE_BUNDLED_LUAJIT)
+-	find_path(LUAJIT_INCLUDE luajit.h PATH_SUFFIXES luajit-2.0 luajit)
++	find_path(LUAJIT_INCLUDE luajit.h PATH_SUFFIXES luajit-2.1 luajit-2.0 luajit)
+ 	find_library(LUAJIT_LIB NAMES luajit luajit-5.1)
+ 	if(LUAJIT_INCLUDE AND LUAJIT_LIB)
+ 		message(STATUS "Found LuaJIT: include: ${LUAJIT_INCLUDE}, lib: ${LUAJIT_LIB}")
+diff --git a/userspace/libsinsp/chisel.cpp b/userspace/libsinsp/chisel.cpp
+index 0a6e3cf8..0c2e255a 100644
+--- a/userspace/libsinsp/chisel.cpp
++++ b/userspace/libsinsp/chisel.cpp
+@@ -98,7 +98,7 @@ void lua_stackdump(lua_State *L)
+ // Lua callbacks
+ ///////////////////////////////////////////////////////////////////////////////
+ #ifdef HAS_LUA_CHISELS
+-const static struct luaL_reg ll_sysdig [] =
++const static struct luaL_Reg ll_sysdig [] =
+ {
+ 	{"set_filter", &lua_cbacks::set_global_filter},
+ 	{"set_snaplen", &lua_cbacks::set_snaplen},
+@@ -134,7 +134,7 @@ const static struct luaL_reg ll_sysdig [] =
+ 	{NULL,NULL}
+ };
+ 
+-const static struct luaL_reg ll_chisel [] =
++const static struct luaL_Reg ll_chisel [] =
+ {
+ 	{"request_field", &lua_cbacks::request_field},
+ 	{"set_filter", &lua_cbacks::set_filter},
+@@ -146,7 +146,7 @@ const static struct luaL_reg ll_chisel [] =
+ 	{NULL,NULL}
+ };
+ 
+-const static struct luaL_reg ll_evt [] =
++const static struct luaL_Reg ll_evt [] =
+ {
+ 	{"field", &lua_cbacks::field},
+ 	{"get_num", &lua_cbacks::get_num},
+diff --git a/userspace/libsinsp/lua_parser.cpp b/userspace/libsinsp/lua_parser.cpp
+index 0e26617d..78810d96 100644
+--- a/userspace/libsinsp/lua_parser.cpp
++++ b/userspace/libsinsp/lua_parser.cpp
+@@ -32,7 +32,7 @@ extern "C" {
+ #include "lauxlib.h"
+ }
+ 
+-const static struct luaL_reg ll_filter [] =
++const static struct luaL_Reg ll_filter [] =
+ {
+ 	{"rel_expr", &lua_parser_cbacks::rel_expr},
+ 	{"bool_op", &lua_parser_cbacks::bool_op},
+diff --git a/userspace/libsinsp/lua_parser_api.cpp b/userspace/libsinsp/lua_parser_api.cpp
+index c89e9126..e0169fe1 100644
+--- a/userspace/libsinsp/lua_parser_api.cpp
++++ b/userspace/libsinsp/lua_parser_api.cpp
+@@ -266,7 +266,7 @@ int lua_parser_cbacks::rel_expr(lua_State *ls)
+ 					string err = "Got non-table as in-expression operand\n";
+ 					throw sinsp_exception("parser API error");
+ 				}
+-				int n = luaL_getn(ls, 4);  /* get size of table */
++				int n = (int)lua_objlen(ls, 4);  /* get size of table */
+ 				for (i=1; i<=n; i++)
+ 				{
+ 					lua_rawgeti(ls, 4, i);
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-libsinsp-Port-to-build-with-lua-5.2.patch b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-libsinsp-Port-to-build-with-lua-5.2.patch
deleted file mode 100644
index 8fec0ca..0000000
--- a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/0001-libsinsp-Port-to-build-with-lua-5.2.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From c2782a6ca968190e221c25b0890600ba8cd43798 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 23 Oct 2015 00:23:15 -0700
-Subject: [PATCH] libsinsp: Port to build with lua >= 5.2
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- userspace/libsinsp/chisel.cpp | 40 +++++++++++++++++++++++++++++-----------
- 1 file changed, 29 insertions(+), 11 deletions(-)
-
-diff --git a/userspace/libsinsp/chisel.cpp b/userspace/libsinsp/chisel.cpp
-index 3cfbd8d..2db9348 100644
---- a/userspace/libsinsp/chisel.cpp
-+++ b/userspace/libsinsp/chisel.cpp
-@@ -94,7 +94,7 @@ void lua_stackdump(lua_State *L)
- // Lua callbacks
- ///////////////////////////////////////////////////////////////////////////////
- #ifdef HAS_LUA_CHISELS
--const static struct luaL_reg ll_sysdig [] = 
-+const static struct luaL_Reg ll_sysdig [] =
- {
- 	{"set_filter", &lua_cbacks::set_global_filter},
- 	{"set_snaplen", &lua_cbacks::set_snaplen},
-@@ -120,7 +120,7 @@ const static struct luaL_reg ll_sysdig [] =
- 	{NULL,NULL}
- };
- 
--const static struct luaL_reg ll_chisel [] = 
-+const static struct luaL_Reg ll_chisel [] =
- {
- 	{"request_field", &lua_cbacks::request_field},
- 	{"set_filter", &lua_cbacks::set_filter},
-@@ -131,7 +131,7 @@ const static struct luaL_reg ll_chisel [] =
- 	{NULL,NULL}
- };
- 
--const static struct luaL_reg ll_evt [] = 
-+const static struct luaL_Reg ll_evt [] =
- {
- 	{"field", &lua_cbacks::field},
- 	{"get_num", &lua_cbacks::get_num},
-@@ -853,10 +853,28 @@ bool sinsp_chisel::parse_view_info(lua_State *ls, OUT chisel_desc* cd)
- 
- 
- #ifdef HAS_LUA_CHISELS
-+static void chisel_lua_registerlib(lua_State *L, const char *libname,
-+				const luaL_Reg *l, int ind)
-+{
-+#if LUA_VERSION_NUM >= 502
-+	if (libname)
-+	{
-+		lua_newtable(L);
-+		luaL_setfuncs(L, l, ind);
-+		lua_pushvalue(L, -1);
-+		lua_setglobal(L, libname);
-+	}
-+	else
-+		luaL_setfuncs(L, l, ind);
-+#else
-+	luaL_register(L, libname, l);
-+#endif
-+}
-+
- // Initializes a lua chisel
- bool sinsp_chisel::init_lua_chisel(chisel_desc &cd, string const &fpath)
- {
--	lua_State* ls = lua_open();
-+	lua_State* ls = luaL_newstate();
- 	if(ls == NULL)
- 	{
- 		return false;
-@@ -867,9 +885,9 @@ bool sinsp_chisel::init_lua_chisel(chisel_desc &cd, string const &fpath)
- 	//
- 	// Load our own lua libs
- 	//
--	luaL_openlib(ls, "sysdig", ll_sysdig, 0);
--	luaL_openlib(ls, "chisel", ll_chisel, 0);
--	luaL_openlib(ls, "evt", ll_evt, 0);
-+	chisel_lua_registerlib(ls, "sysdig", ll_sysdig, 0);
-+	chisel_lua_registerlib(ls, "chisel", ll_chisel, 0);
-+	chisel_lua_registerlib(ls, "evt", ll_evt, 0);
- 
- 	//
- 	// Add our chisel paths to package.path
-@@ -1111,16 +1129,16 @@ void sinsp_chisel::load(string cmdstr)
- 	//
- 	// Open the script
- 	//
--	m_ls = lua_open();
-+	m_ls = luaL_newstate();
-  
- 	luaL_openlibs(m_ls);
- 
- 	//
- 	// Load our own lua libs
- 	//
--	luaL_openlib(m_ls, "sysdig", ll_sysdig, 0);
--	luaL_openlib(m_ls, "chisel", ll_chisel, 0);
--	luaL_openlib(m_ls, "evt", ll_evt, 0);
-+	chisel_lua_registerlib(m_ls, "sysdig", ll_sysdig, 0);
-+	chisel_lua_registerlib(m_ls, "chisel", ll_chisel, 0);
-+	chisel_lua_registerlib(m_ls, "evt", ll_evt, 0);
- 
- 	//
- 	// Add our chisel paths to package.path
--- 
-2.6.2
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/aarch64.patch b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/aarch64.patch
new file mode 100644
index 0000000..f16b0ec
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/aarch64.patch
@@ -0,0 +1,359 @@
+Check if legacy syscalls exist
+
+A lot of legacy syscalls are replaced with *at and are not implemented in newer
+architectures like aarch64
+
+Upstream-Status: Submitted [https://github.com/draios/sysdig/pull/1601]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/driver/syscall_table.c
++++ b/driver/syscall_table.c
+@@ -42,26 +42,46 @@ or GPL2.txt for full copies of the licen
+  * SYSCALL TABLE
+  */
+ const struct syscall_evt_pair g_syscall_table[SYSCALL_TABLE_SIZE] = {
++#ifdef __NR_open
+ 	[__NR_open - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_OPEN_E, PPME_SYSCALL_OPEN_X},
++#endif
++#ifdef __NR_creat
+ 	[__NR_creat - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_CREAT_E, PPME_SYSCALL_CREAT_X},
++#endif
+ 	[__NR_close - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_CLOSE_E, PPME_SYSCALL_CLOSE_X},
+ 	[__NR_brk - SYSCALL_TABLE_ID0] =                        {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_BRK_4_E, PPME_SYSCALL_BRK_4_X},
+ 	[__NR_read - SYSCALL_TABLE_ID0] =                       {UF_USED, PPME_SYSCALL_READ_E, PPME_SYSCALL_READ_X},
+ 	[__NR_write - SYSCALL_TABLE_ID0] =                      {UF_USED, PPME_SYSCALL_WRITE_E, PPME_SYSCALL_WRITE_X},
+ 	[__NR_execve - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_EXECVE_19_E, PPME_SYSCALL_EXECVE_19_X},
+ 	[__NR_clone - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_CLONE_20_E, PPME_SYSCALL_CLONE_20_X},
++#ifdef __NR_fork
+ 	[__NR_fork - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_FORK_20_E, PPME_SYSCALL_FORK_20_X},
++#endif
++#ifdef __NR_vfork
+ 	[__NR_vfork - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_VFORK_20_E, PPME_SYSCALL_VFORK_20_X},
++#endif
++#ifdef __NR_pipe
+ 	[__NR_pipe - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_PIPE_E, PPME_SYSCALL_PIPE_X},
++#endif
+ 	[__NR_pipe2 - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_PIPE_E, PPME_SYSCALL_PIPE_X},
++#ifdef __NR_eventfd
+ 	[__NR_eventfd - SYSCALL_TABLE_ID0] =                    {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_EVENTFD_E, PPME_SYSCALL_EVENTFD_X},
++#endif
+ 	[__NR_eventfd2 - SYSCALL_TABLE_ID0] =                   {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_EVENTFD_E, PPME_SYSCALL_EVENTFD_X},
+ 	[__NR_futex - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_FUTEX_E, PPME_SYSCALL_FUTEX_X},
++#ifdef __NR_stat
+ 	[__NR_stat - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_STAT_E, PPME_SYSCALL_STAT_X},
++#endif
++#ifdef __NR_lstat
+ 	[__NR_lstat - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_LSTAT_E, PPME_SYSCALL_LSTAT_X},
++#endif
+ 	[__NR_fstat - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_FSTAT_E, PPME_SYSCALL_FSTAT_X},
++#ifdef __NR_epoll_wait
+ 	[__NR_epoll_wait - SYSCALL_TABLE_ID0] =                 {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_EPOLLWAIT_E, PPME_SYSCALL_EPOLLWAIT_X},
++#endif
++#ifdef __NR_poll
+ 	[__NR_poll - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_POLL_E, PPME_SYSCALL_POLL_X},
++#endif
+ #ifdef __NR_select
+ 	[__NR_select - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_SELECT_E, PPME_SYSCALL_SELECT_X},
+ #endif
+@@ -70,13 +90,21 @@ const struct syscall_evt_pair g_syscall_
+ 	[__NR_getcwd - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_GETCWD_E, PPME_SYSCALL_GETCWD_X},
+ 	[__NR_chdir - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_CHDIR_E, PPME_SYSCALL_CHDIR_X},
+ 	[__NR_fchdir - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_FCHDIR_E, PPME_SYSCALL_FCHDIR_X},
++#ifdef __NR_mkdir
+ 	[__NR_mkdir - SYSCALL_TABLE_ID0] =                      {UF_USED, PPME_SYSCALL_MKDIR_2_E, PPME_SYSCALL_MKDIR_2_X},
++#endif
++#ifdef __NR_rmdir
+ 	[__NR_rmdir - SYSCALL_TABLE_ID0] =                      {UF_USED, PPME_SYSCALL_RMDIR_2_E, PPME_SYSCALL_RMDIR_2_X},
++#endif
+ 	[__NR_openat - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_OPENAT_2_E, PPME_SYSCALL_OPENAT_2_X},
+ 	[__NR_mkdirat - SYSCALL_TABLE_ID0] =                    {UF_USED, PPME_SYSCALL_MKDIRAT_E, PPME_SYSCALL_MKDIRAT_X},
++#ifdef __NR_link
+ 	[__NR_link - SYSCALL_TABLE_ID0] =                       {UF_USED, PPME_SYSCALL_LINK_2_E, PPME_SYSCALL_LINK_2_X},
++#endif
+ 	[__NR_linkat - SYSCALL_TABLE_ID0] =                     {UF_USED, PPME_SYSCALL_LINKAT_2_E, PPME_SYSCALL_LINKAT_2_X},
++#ifdef __NR_unlink
+ 	[__NR_unlink - SYSCALL_TABLE_ID0] =                     {UF_USED, PPME_SYSCALL_UNLINK_2_E, PPME_SYSCALL_UNLINK_2_X},
++#endif
+ 	[__NR_unlinkat - SYSCALL_TABLE_ID0] =                   {UF_USED, PPME_SYSCALL_UNLINKAT_2_E, PPME_SYSCALL_UNLINKAT_2_X},
+ 	[__NR_pread64 - SYSCALL_TABLE_ID0] =                    {UF_USED, PPME_SYSCALL_PREAD_E, PPME_SYSCALL_PREAD_X},
+ 	[__NR_pwrite64 - SYSCALL_TABLE_ID0] =                   {UF_USED, PPME_SYSCALL_PWRITE_E, PPME_SYSCALL_PWRITE_X},
+@@ -85,16 +113,22 @@ const struct syscall_evt_pair g_syscall_
+ 	[__NR_preadv - SYSCALL_TABLE_ID0] =                     {UF_USED, PPME_SYSCALL_PREADV_E, PPME_SYSCALL_PREADV_X},
+ 	[__NR_pwritev - SYSCALL_TABLE_ID0] =                    {UF_USED, PPME_SYSCALL_PWRITEV_E, PPME_SYSCALL_PWRITEV_X},
+ 	[__NR_dup - SYSCALL_TABLE_ID0] =                        {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_DUP_E, PPME_SYSCALL_DUP_X},
++#ifdef __NR_dup2
+ 	[__NR_dup2 - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_DUP_E, PPME_SYSCALL_DUP_X},
++#endif
+ 	[__NR_dup3 - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SYSCALL_DUP_E, PPME_SYSCALL_DUP_X},
++#ifdef __NR_signalfd
+ 	[__NR_signalfd - SYSCALL_TABLE_ID0] =                   {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_SIGNALFD_E, PPME_SYSCALL_SIGNALFD_X},
++#endif
+ 	[__NR_signalfd4 - SYSCALL_TABLE_ID0] =                  {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_SIGNALFD_E, PPME_SYSCALL_SIGNALFD_X},
+ 	[__NR_kill - SYSCALL_TABLE_ID0] =                       {UF_USED, PPME_SYSCALL_KILL_E, PPME_SYSCALL_KILL_X},
+ 	[__NR_tkill - SYSCALL_TABLE_ID0] =                      {UF_USED, PPME_SYSCALL_TKILL_E, PPME_SYSCALL_TKILL_X},
+ 	[__NR_tgkill - SYSCALL_TABLE_ID0] =                     {UF_USED, PPME_SYSCALL_TGKILL_E, PPME_SYSCALL_TGKILL_X},
+ 	[__NR_nanosleep - SYSCALL_TABLE_ID0] =                  {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_NANOSLEEP_E, PPME_SYSCALL_NANOSLEEP_X},
+ 	[__NR_timerfd_create - SYSCALL_TABLE_ID0] =             {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_TIMERFD_CREATE_E, PPME_SYSCALL_TIMERFD_CREATE_X},
++#ifdef __NR_inotify_init
+ 	[__NR_inotify_init - SYSCALL_TABLE_ID0] =               {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_INOTIFY_INIT_E, PPME_SYSCALL_INOTIFY_INIT_X},
++#endif
+ 	[__NR_inotify_init1 - SYSCALL_TABLE_ID0] =              {UF_USED | UF_NEVER_DROP, PPME_SYSCALL_INOTIFY_INIT_E, PPME_SYSCALL_INOTIFY_INIT_X},
+ 	[__NR_fchmodat - SYSCALL_TABLE_ID0] =                   {UF_USED, PPME_SYSCALL_FCHMODAT_E, PPME_SYSCALL_FCHMODAT_X},
+ 	[__NR_fchmod - SYSCALL_TABLE_ID0] =                     {UF_USED, PPME_SYSCALL_FCHMOD_E, PPME_SYSCALL_FCHMOD_X},
+@@ -114,14 +148,22 @@ const struct syscall_evt_pair g_syscall_
+ #endif
+ /* [__NR_old_select - SYSCALL_TABLE_ID0] =	{UF_USED, PPME_GENERIC_E, PPME_GENERIC_X}, */
+ 	[__NR_pselect6 - SYSCALL_TABLE_ID0] =                   {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
++#ifdef __NR_epoll_create
+ 	[__NR_epoll_create - SYSCALL_TABLE_ID0] =               {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
++#endif
+ 	[__NR_epoll_ctl - SYSCALL_TABLE_ID0] =                  {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
++#ifdef __NR_uselib
+ 	[__NR_uselib - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
++#endif
+ 	[__NR_sched_setparam - SYSCALL_TABLE_ID0] =             {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
+ 	[__NR_sched_getparam - SYSCALL_TABLE_ID0] =             {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
+ 	[__NR_syslog - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
++#ifdef __NR_chmod
+ 	[__NR_chmod - SYSCALL_TABLE_ID0] =                      {UF_USED, PPME_SYSCALL_CHMOD_E, PPME_SYSCALL_CHMOD_X},
++#endif
++#ifdef __NR_lchown
+ 	[__NR_lchown - SYSCALL_TABLE_ID0] =                     {UF_USED, PPME_GENERIC_E, PPME_GENERIC_X},
++#endif
+ #ifdef __NR_utime
+ 	[__NR_utime - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
+ #endif
+@@ -131,8 +173,9 @@ const struct syscall_evt_pair g_syscall_
+ #ifdef __NR_alarm
+ 	[__NR_alarm - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
+ #endif
++#ifdef __NR_pause
+ 	[__NR_pause - SYSCALL_TABLE_ID0] =                      {UF_USED | UF_ALWAYS_DROP, PPME_GENERIC_E, PPME_GENERIC_X},
+-
++#endif
+ #ifndef __NR_socketcall
+ 	[__NR_socket - SYSCALL_TABLE_ID0] =                     {UF_USED | UF_NEVER_DROP | UF_SIMPLEDRIVER_KEEP, PPME_SOCKET_SOCKET_E, PPME_SOCKET_SOCKET_X},
+ 	[__NR_bind - SYSCALL_TABLE_ID0] =                       {UF_USED | UF_NEVER_DROP, PPME_SOCKET_BIND_E,  PPME_SOCKET_BIND_X},
+@@ -184,9 +227,13 @@ const struct syscall_evt_pair g_syscall_
+ 	[__NR_process_vm_writev - SYSCALL_TABLE_ID0] =          {UF_USED, PPME_GENERIC_E, PPME_GENERIC_X},
+ #endif
+ 
++#ifdef __NR_rename
+ 	[__NR_rename - SYSCALL_TABLE_ID0] =                     {UF_USED, PPME_SYSCALL_RENAME_E, PPME_SYSCALL_RENAME_X},
++#endif
+ 	[__NR_renameat - SYSCALL_TABLE_ID0] =                   {UF_USED, PPME_SYSCALL_RENAMEAT_E, PPME_SYSCALL_RENAMEAT_X},
++#ifdef __NR_symlink
+ 	[__NR_symlink - SYSCALL_TABLE_ID0] =                    {UF_USED, PPME_SYSCALL_SYMLINK_E, PPME_SYSCALL_SYMLINK_X},
++#endif
+ 	[__NR_symlinkat - SYSCALL_TABLE_ID0] =                  {UF_USED, PPME_SYSCALL_SYMLINKAT_E, PPME_SYSCALL_SYMLINKAT_X},
+ 	[__NR_sendfile - SYSCALL_TABLE_ID0] =                   {UF_USED, PPME_SYSCALL_SENDFILE_E, PPME_SYSCALL_SENDFILE_X},
+ #ifdef __NR_sendfile64
+@@ -255,7 +302,9 @@ const struct syscall_evt_pair g_syscall_
+ #ifdef __NR_getresgid32
+ 	[__NR_getresgid32 - SYSCALL_TABLE_ID0] =                {UF_USED, PPME_SYSCALL_GETRESGID_E, PPME_SYSCALL_GETRESGID_X },
+ #endif
++#ifdef __NR_getdents
+ 	[__NR_getdents - SYSCALL_TABLE_ID0] =                   {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_GETDENTS_E, PPME_SYSCALL_GETDENTS_X},
++#endif
+ 	[__NR_getdents64 - SYSCALL_TABLE_ID0] =                 {UF_USED | UF_ALWAYS_DROP, PPME_SYSCALL_GETDENTS64_E, PPME_SYSCALL_GETDENTS64_X},
+ #ifdef __NR_setns
+ 	[__NR_setns - SYSCALL_TABLE_ID0] =                      {UF_USED, PPME_SYSCALL_SETNS_E, PPME_SYSCALL_SETNS_X},
+@@ -298,19 +347,33 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_exit - SYSCALL_TABLE_ID0] = PPM_SC_EXIT,
+ 	[__NR_read - SYSCALL_TABLE_ID0] = PPM_SC_READ,
+ 	[__NR_write - SYSCALL_TABLE_ID0] = PPM_SC_WRITE,
++#ifdef __NR_open
+ 	[__NR_open - SYSCALL_TABLE_ID0] = PPM_SC_OPEN,
++#endif
+ 	[__NR_close - SYSCALL_TABLE_ID0] = PPM_SC_CLOSE,
++#ifdef __NR_creat
+ 	[__NR_creat - SYSCALL_TABLE_ID0] = PPM_SC_CREAT,
++#endif
++#ifdef __NR_link
+ 	[__NR_link - SYSCALL_TABLE_ID0] = PPM_SC_LINK,
++#endif
++#ifdef __NR_unlink
+ 	[__NR_unlink - SYSCALL_TABLE_ID0] = PPM_SC_UNLINK,
++#endif
+ 	[__NR_chdir - SYSCALL_TABLE_ID0] = PPM_SC_CHDIR,
+ #ifdef __NR_time
+ 	[__NR_time - SYSCALL_TABLE_ID0] = PPM_SC_TIME,
+ #endif
++#ifdef __NR_mknod
+ 	[__NR_mknod - SYSCALL_TABLE_ID0] = PPM_SC_MKNOD,
++#endif
++#ifdef __NR_chmod
+ 	[__NR_chmod - SYSCALL_TABLE_ID0] = PPM_SC_CHMOD,
++#endif
+ /* [__NR_lchown16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_LCHOWN16, */
++#ifdef __NR_stat
+ 	[__NR_stat - SYSCALL_TABLE_ID0] = PPM_SC_STAT,
++#endif
+ 	[__NR_lseek - SYSCALL_TABLE_ID0] = PPM_SC_LSEEK,
+ 	[__NR_getpid - SYSCALL_TABLE_ID0] = PPM_SC_GETPID,
+ 	[__NR_mount - SYSCALL_TABLE_ID0] = PPM_SC_MOUNT,
+@@ -322,17 +385,27 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_alarm - SYSCALL_TABLE_ID0] = PPM_SC_ALARM,
+ #endif
+ 	[__NR_fstat - SYSCALL_TABLE_ID0] = PPM_SC_FSTAT,
++#ifdef __NR_pause
+ 	[__NR_pause - SYSCALL_TABLE_ID0] = PPM_SC_PAUSE,
++#endif
+ #ifdef __NR_utime
+ 	[__NR_utime - SYSCALL_TABLE_ID0] = PPM_SC_UTIME,
+ #endif
+ 	[__NR_sync - SYSCALL_TABLE_ID0] = PPM_SC_SYNC,
+ 	[__NR_kill - SYSCALL_TABLE_ID0] = PPM_SC_KILL,
++#ifdef __NR_rename
+ 	[__NR_rename - SYSCALL_TABLE_ID0] = PPM_SC_RENAME,
++#endif
++#ifdef __NR_mkdir
+ 	[__NR_mkdir - SYSCALL_TABLE_ID0] = PPM_SC_MKDIR,
++#endif
++#ifdef __NR_rmdir
+ 	[__NR_rmdir - SYSCALL_TABLE_ID0] = PPM_SC_RMDIR,
++#endif
+ 	[__NR_dup - SYSCALL_TABLE_ID0] = PPM_SC_DUP,
++#ifdef __NR_pipe
+ 	[__NR_pipe - SYSCALL_TABLE_ID0] = PPM_SC_PIPE,
++#endif
+ 	[__NR_times - SYSCALL_TABLE_ID0] = PPM_SC_TIMES,
+ 	[__NR_brk - SYSCALL_TABLE_ID0] = PPM_SC_BRK,
+ /* [__NR_setgid16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_SETGID16, */
+@@ -345,10 +418,16 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_setpgid - SYSCALL_TABLE_ID0] = PPM_SC_SETPGID,
+ 	[__NR_umask - SYSCALL_TABLE_ID0] = PPM_SC_UMASK,
+ 	[__NR_chroot - SYSCALL_TABLE_ID0] = PPM_SC_CHROOT,
++#ifdef __NR_ustat
+ 	[__NR_ustat - SYSCALL_TABLE_ID0] = PPM_SC_USTAT,
++#endif
++#ifdef __NR_dup2
+ 	[__NR_dup2 - SYSCALL_TABLE_ID0] = PPM_SC_DUP2,
++#endif
+ 	[__NR_getppid - SYSCALL_TABLE_ID0] = PPM_SC_GETPPID,
++#ifdef __NR_getpgrp
+ 	[__NR_getpgrp - SYSCALL_TABLE_ID0] = PPM_SC_GETPGRP,
++#endif
+ 	[__NR_setsid - SYSCALL_TABLE_ID0] = PPM_SC_SETSID,
+ 	[__NR_sethostname - SYSCALL_TABLE_ID0] = PPM_SC_SETHOSTNAME,
+ 	[__NR_setrlimit - SYSCALL_TABLE_ID0] = PPM_SC_SETRLIMIT,
+@@ -359,10 +438,18 @@ const enum ppm_syscall_code g_syscall_co
+ /* [__NR_getgroups16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_GETGROUPS16, */
+ /* [__NR_setgroups16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_SETGROUPS16, */
+ /* [__NR_old_select - SYSCALL_TABLE_ID0] = PPM_SC_NR_OLD_SELECT, */
++#ifdef __NR_symlink
+ 	[__NR_symlink - SYSCALL_TABLE_ID0] = PPM_SC_SYMLINK,
++#endif
++#ifdef __NR_lstat
+ 	[__NR_lstat - SYSCALL_TABLE_ID0] = PPM_SC_LSTAT,
++#endif
++#ifdef __NR_readlink
+ 	[__NR_readlink - SYSCALL_TABLE_ID0] = PPM_SC_READLINK,
++#endif
++#ifdef __NR_uselib
+ 	[__NR_uselib - SYSCALL_TABLE_ID0] = PPM_SC_USELIB,
++#endif
+ 	[__NR_swapon - SYSCALL_TABLE_ID0] = PPM_SC_SWAPON,
+ 	[__NR_reboot - SYSCALL_TABLE_ID0] = PPM_SC_REBOOT,
+ /* [__NR_old_readdir - SYSCALL_TABLE_ID0] = PPM_SC_NR_OLD_READDIR, */
+@@ -399,12 +486,16 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_delete_module - SYSCALL_TABLE_ID0] = PPM_SC_DELETE_MODULE,
+ 	[__NR_getpgid - SYSCALL_TABLE_ID0] = PPM_SC_GETPGID,
+ 	[__NR_fchdir - SYSCALL_TABLE_ID0] = PPM_SC_FCHDIR,
++#ifdef __NR_sysfs
+ 	[__NR_sysfs - SYSCALL_TABLE_ID0] = PPM_SC_SYSFS,
++#endif
+ 	[__NR_personality - SYSCALL_TABLE_ID0] = PPM_SC_PERSONALITY,
+ /* [__NR_setfsuid16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_SETFSUID16, */
+ /* [__NR_setfsgid16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_SETFSGID16, */
+ /* [__NR_llseek - SYSCALL_TABLE_ID0] = PPM_SC_NR_LLSEEK, */
++#ifdef __NR_getdents
+ 	[__NR_getdents - SYSCALL_TABLE_ID0] = PPM_SC_GETDENTS,
++#endif
+ #ifdef __NR_select
+ 	[__NR_select - SYSCALL_TABLE_ID0] = PPM_SC_SELECT,
+ #endif
+@@ -431,7 +522,9 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_mremap - SYSCALL_TABLE_ID0] = PPM_SC_MREMAP,
+ /* [__NR_setresuid16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_SETRESUID16, */
+ /* [__NR_getresuid16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_GETRESUID16, */
++#ifdef __NR_poll
+ 	[__NR_poll - SYSCALL_TABLE_ID0] = PPM_SC_POLL,
++#endif
+ /* [__NR_setresgid16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_SETRESGID16, */
+ /* [__NR_getresgid16 - SYSCALL_TABLE_ID0] = PPM_SC_NR_GETRESGID16, */
+ 	[__NR_prctl - SYSCALL_TABLE_ID0] = PPM_SC_PRCTL,
+@@ -453,13 +546,17 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_getrlimit - SYSCALL_TABLE_ID0] = PPM_SC_GETRLIMIT,
+ #endif
+ /* [__NR_mmap_pgoff - SYSCALL_TABLE_ID0] = PPM_SC_NR_MMAP_PGOFF, */
++#ifdef __NR_lchown
+ 	[__NR_lchown - SYSCALL_TABLE_ID0] = PPM_SC_LCHOWN,
++#endif
+ 	[__NR_setreuid - SYSCALL_TABLE_ID0] = PPM_SC_SETREUID,
+ 	[__NR_setregid - SYSCALL_TABLE_ID0] = PPM_SC_SETREGID,
+ 	[__NR_getgroups - SYSCALL_TABLE_ID0] = PPM_SC_GETGROUPS,
+ 	[__NR_setgroups - SYSCALL_TABLE_ID0] = PPM_SC_SETGROUPS,
+ 	[__NR_fchown - SYSCALL_TABLE_ID0] = PPM_SC_FCHOWN,
++#ifdef __NR_chown
+ 	[__NR_chown - SYSCALL_TABLE_ID0] = PPM_SC_CHOWN,
++#endif
+ 	[__NR_setfsuid - SYSCALL_TABLE_ID0] = PPM_SC_SETFSUID,
+ 	[__NR_setfsgid - SYSCALL_TABLE_ID0] = PPM_SC_SETFSGID,
+ 	[__NR_pivot_root - SYSCALL_TABLE_ID0] = PPM_SC_PIVOT_ROOT,
+@@ -494,9 +591,13 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_io_submit - SYSCALL_TABLE_ID0] = PPM_SC_IO_SUBMIT,
+ 	[__NR_io_cancel - SYSCALL_TABLE_ID0] = PPM_SC_IO_CANCEL,
+ 	[__NR_exit_group - SYSCALL_TABLE_ID0] = PPM_SC_EXIT_GROUP,
++#ifdef __NR_epoll_create
+ 	[__NR_epoll_create - SYSCALL_TABLE_ID0] = PPM_SC_EPOLL_CREATE,
++#endif
+ 	[__NR_epoll_ctl - SYSCALL_TABLE_ID0] = PPM_SC_EPOLL_CTL,
++#ifdef __NR_epoll_wait
+ 	[__NR_epoll_wait - SYSCALL_TABLE_ID0] = PPM_SC_EPOLL_WAIT,
++#endif
+ 	[__NR_remap_file_pages - SYSCALL_TABLE_ID0] = PPM_SC_REMAP_FILE_PAGES,
+ 	[__NR_set_tid_address - SYSCALL_TABLE_ID0] = PPM_SC_SET_TID_ADDRESS,
+ 	[__NR_timer_create - SYSCALL_TABLE_ID0] = PPM_SC_TIMER_CREATE,
+@@ -509,7 +610,9 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_clock_getres - SYSCALL_TABLE_ID0] = PPM_SC_CLOCK_GETRES,
+ 	[__NR_clock_nanosleep - SYSCALL_TABLE_ID0] = PPM_SC_CLOCK_NANOSLEEP,
+ 	[__NR_tgkill - SYSCALL_TABLE_ID0] = PPM_SC_TGKILL,
++#ifdef __NR_utimes
+ 	[__NR_utimes - SYSCALL_TABLE_ID0] = PPM_SC_UTIMES,
++#endif
+ 	[__NR_mq_open - SYSCALL_TABLE_ID0] = PPM_SC_MQ_OPEN,
+ 	[__NR_mq_unlink - SYSCALL_TABLE_ID0] = PPM_SC_MQ_UNLINK,
+ 	[__NR_mq_timedsend - SYSCALL_TABLE_ID0] = PPM_SC_MQ_TIMEDSEND,
+@@ -523,14 +626,18 @@ const enum ppm_syscall_code g_syscall_co
+ 	[__NR_keyctl - SYSCALL_TABLE_ID0] = PPM_SC_KEYCTL,
+ 	[__NR_ioprio_set - SYSCALL_TABLE_ID0] = PPM_SC_IOPRIO_SET,
+ 	[__NR_ioprio_get - SYSCALL_TABLE_ID0] = PPM_SC_IOPRIO_GET,
++#ifdef __NR_inotify_init
+ 	[__NR_inotify_init - SYSCALL_TABLE_ID0] = PPM_SC_INOTIFY_INIT,
++#endif
+ 	[__NR_inotify_add_watch - SYSCALL_TABLE_ID0] = PPM_SC_INOTIFY_ADD_WATCH,
+ 	[__NR_inotify_rm_watch - SYSCALL_TABLE_ID0] = PPM_SC_INOTIFY_RM_WATCH,
+ 	[__NR_openat - SYSCALL_TABLE_ID0] = PPM_SC_OPENAT,
+ 	[__NR_mkdirat - SYSCALL_TABLE_ID0] = PPM_SC_MKDIRAT,
+ 	[__NR_mknodat - SYSCALL_TABLE_ID0] = PPM_SC_MKNODAT,
+ 	[__NR_fchownat - SYSCALL_TABLE_ID0] = PPM_SC_FCHOWNAT,
++#ifdef __NR_futimesat
+ 	[__NR_futimesat - SYSCALL_TABLE_ID0] = PPM_SC_FUTIMESAT,
++#endif
+ 	[__NR_unlinkat - SYSCALL_TABLE_ID0] = PPM_SC_UNLINKAT,
+ 	[__NR_renameat - SYSCALL_TABLE_ID0] = PPM_SC_RENAMEAT,
+ 	[__NR_linkat - SYSCALL_TABLE_ID0] = PPM_SC_LINKAT,
+@@ -551,9 +658,13 @@ const enum ppm_syscall_code g_syscall_co
+ #endif
+ 	[__NR_epoll_pwait - SYSCALL_TABLE_ID0] = PPM_SC_EPOLL_PWAIT,
+ 	[__NR_utimensat - SYSCALL_TABLE_ID0] = PPM_SC_UTIMENSAT,
++#ifdef __NR_signalfd
+ 	[__NR_signalfd - SYSCALL_TABLE_ID0] = PPM_SC_SIGNALFD,
++#endif
+ 	[__NR_timerfd_create - SYSCALL_TABLE_ID0] = PPM_SC_TIMERFD_CREATE,
++#ifdef __NR_eventfd
+ 	[__NR_eventfd - SYSCALL_TABLE_ID0] = PPM_SC_EVENTFD,
++#endif
+ 	[__NR_timerfd_settime - SYSCALL_TABLE_ID0] = PPM_SC_TIMERFD_SETTIME,
+ 	[__NR_timerfd_gettime - SYSCALL_TABLE_ID0] = PPM_SC_TIMERFD_GETTIME,
+ 	[__NR_signalfd4 - SYSCALL_TABLE_ID0] = PPM_SC_SIGNALFD4,
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/fix-uint64-const.patch b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/fix-uint64-const.patch
new file mode 100644
index 0000000..5c75629
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig/fix-uint64-const.patch
@@ -0,0 +1,16 @@
+Fix x86 build
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- a/userspace/libsinsp/cgroup_limits.cpp
++++ b/userspace/libsinsp/cgroup_limits.cpp
+@@ -9,7 +9,7 @@ namespace {
+ // This reports extremely large values (e.g. almost-but-not-quite 9EiB as set by k8s) as unlimited.
+ // Note: we use the same maximum value for cpu shares/quotas as well; the typical values are much lower
+ // and so should never exceed CGROUP_VAL_MAX either
+-constexpr const int64_t CGROUP_VAL_MAX = (1UL << 42u) - 1;
++constexpr const int64_t CGROUP_VAL_MAX = (1ULL << 42u) - 1;
+ 
+ /**
+  * \brief Read a single int64_t value from cgroupfs
diff --git a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb
index 4f58281..04a022a 100644
--- a/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/sysdig/sysdig_git.bb
@@ -3,39 +3,52 @@
 system state and activity from a running Linux instance, then save, \
 filter and analyze."
 HOMEPAGE = "http://www.sysdig.org/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+LICENSE = "Apache-2.0 & (MIT | GPL-2.0)"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f8fee3d59797546cffab04f3b88b2d44"
 
 inherit cmake pkgconfig
 
-OECMAKE_GENERATOR = "Unix Makefiles"
+#OECMAKE_GENERATOR = "Unix Makefiles"
+JIT ?= "jit"
+JIT_mipsarchn32 = ""
+JIT_mipsarchn64 = ""
+JIT_riscv64 = ""
+JIT_riscv32 = ""
 
-DEPENDS = "luajit zlib ncurses"
+DEPENDS += "lua${JIT} zlib c-ares grpc-native grpc curl ncurses jsoncpp tbb jq openssl elfutils protobuf protobuf-native jq-native"
 RDEPENDS_${PN} = "bash"
 
-SRC_URI = "git://github.com/draios/sysdig.git;branch=master \
-           file://0001-libsinsp-Port-to-build-with-lua-5.2.patch \
+SRC_URI = "git://github.com/draios/sysdig.git;branch=dev \
+           file://0001-fix-build-with-LuaJIT-2.1-betas.patch \
            file://0001-Fix-build-with-musl-backtrace-APIs-are-glibc-specifi.patch \
+           file://fix-uint64-const.patch \
+           file://aarch64.patch \
           "
-SRCREV = "85d16f33a82a17f87ccdbc088749271c71d87013"
-PV = "0.1.102+git${SRCPV}"
+SRCREV = "8daeef8da752c5f07f439391bc20c5948eb11470"
+PV = "0.26.6"
 
 S = "${WORKDIR}/git"
 
-DIR_ETC="/etc"
-EXTRA_OECMAKE = ' -DUSE_BUNDLED_LUAJIT="OFF" \
-                  -DUSE_BUNDLED_ZLIB="OFF" \
-                  -DBUILD_DRIVER="OFF" \
-                  -DUSE_BUNDLED_NCURSES="OFF" \
-                  -DDIR_ETC="${DIR_ETC}" \
-                '
+EXTRA_OECMAKE = "\
+                -DBUILD_DRIVER=OFF \
+                -DUSE_BUNDLED_DEPS=OFF \
+                -DUSE_BUNDLED_B64=ON \
+                -DCREATE_TEST_TARGETS=OFF \
+                -DDIR_ETC=${sysconfdir} \
+                -DLUA_INCLUDE_DIR=${STAGING_INCDIR}/luajit-2.1 \
+                -DLUA_LIBRARY=libluajit-5.1.so \
+"
 
 FILES_${PN} += " \
     ${DIR_ETC}/* \
     ${datadir}/zsh/* \
     ${prefix}/src/*  \
 "
-
-# luajit not supported on Aarch64
-COMPATIBLE_HOST = "^(?!aarch64).*"
-
+# 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"
diff --git a/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb b/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb
index fba5156..17c2fba 100644
--- a/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/tmux/tmux_2.6.bb
@@ -11,6 +11,8 @@
 SRC_URI[md5sum] = "d541ff392249f94c4f3635793556f827"
 SRC_URI[sha256sum] = "b17cd170a94d7b58c0698752e1f4f263ab6dc47425230df7e53a6435cc7cd7e8"
 
+UPSTREAM_CHECK_URI = "https://github.com/tmux/tmux/releases"
+
 inherit autotools pkgconfig
 
 PACKAGECONFIG ??= ""
diff --git a/meta-openembedded/meta-oe/recipes-extended/triggerhappy/triggerhappy_git.bb b/meta-openembedded/meta-oe/recipes-extended/triggerhappy/triggerhappy_git.bb
index 24df750..38ce4f5 100644
--- a/meta-openembedded/meta-oe/recipes-extended/triggerhappy/triggerhappy_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/triggerhappy/triggerhappy_git.bb
@@ -11,7 +11,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools-brokensep pkgconfig update-rc.d systemd
+inherit autotools-brokensep pkgconfig perlnative update-rc.d systemd
 
 PACKAGECONFIG = "${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd','',d)}"
 PACKAGECONFIG[systemd] = ",,systemd"
diff --git a/meta-openembedded/meta-oe/recipes-extended/upm/upm/0001-cmake-Disable-using-Wno-maybe-uninitialized.patch b/meta-openembedded/meta-oe/recipes-extended/upm/upm/0001-cmake-Disable-using-Wno-maybe-uninitialized.patch
new file mode 100644
index 0000000..2f58185
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/upm/upm/0001-cmake-Disable-using-Wno-maybe-uninitialized.patch
@@ -0,0 +1,37 @@
+From 169f62770f63a43b15d4d4c82336fd57c8467cfe Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 4 Apr 2020 21:43:51 -0700
+Subject: [PATCH] cmake: Disable using -Wno-maybe-uninitialized
+
+This warning causes clang builds to fail because this is not a
+recognised warning with clang
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/CMakeLists.txt | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -6,7 +6,6 @@
+ set (SWIG_CXX_DISABLE_WARNINGS -Wno-error
+                                -Wno-delete-non-virtual-dtor
+                                -Wno-unused-function
+-                               -Wno-maybe-uninitialized
+                                -Wno-strict-aliasing)
+ 
+ # If building under android, make sure swig gets an ANDROID flag
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -115,8 +115,7 @@ endif (WERROR)
+ upm_add_compile_flags(C ${C_CXX_WARNING_FLAGS}
+   -Winit-self
+   -Wimplicit
+-  -Wsign-compare
+-  -Wmissing-parameter-type)
++  -Wsign-compare)
+ 
+ # Set CXX compiler warning flags at top-level scope and emit a warning about
+ # unsupported flags
diff --git a/meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb b/meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb
index 6db8f88..5b3585c 100644
--- a/meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/upm/upm_git.bb
@@ -10,11 +10,12 @@
 SRCREV = "5cf20df96c6b35c19d5b871ba4e319e96b4df72d"
 PV = "2.0.0+git${SRCPV}"
 
-SRC_URI = "git://github.com/intel-iot-devkit/${BPN}.git;protocol=http \
+SRC_URI = "git://github.com/eclipse/${BPN}.git;protocol=http \
            file://0001-CMakeLists.txt-Use-SWIG_SUPPORT_FILES-to-find-the-li.patch \
            file://0001-Use-stdint-types.patch \
            file://0001-initialize-local-variables-before-use.patch \
            file://0001-cmake-Disable-Wno-misleading-indentation-with-clang-.patch \
+           file://0001-cmake-Disable-using-Wno-maybe-uninitialized.patch \
            "
 
 SRC_URI_append_toolchain-clang_x86 = " file://0001-nmea_gps-Link-with-latomic.patch "
@@ -26,6 +27,8 @@
 
 inherit distutils3-base cmake pkgconfig
 
+EXTRA_OECMAKE += "-UPYTHON_EXECUTABLE -DWERROR=off"
+
 # override this in local.conf to get needed bindings.
 # BINDINGS_pn-upm="python"
 # will result in only the python bindings being built/packaged.
diff --git a/meta-openembedded/meta-oe/recipes-extended/wxwidgets/wxwidgets_git.bb b/meta-openembedded/meta-oe/recipes-extended/wxwidgets/wxwidgets_git.bb
new file mode 100644
index 0000000..06337b7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/wxwidgets/wxwidgets_git.bb
@@ -0,0 +1,82 @@
+SUMMARY = "Cross-Plattform GUI Library"
+DESCRIPTIOM = "wxWidgets is a free and open source cross-platform C++ framework for writing advanced GUI applications using native controls."
+HOMEPAGE = "https://www.wxwidgets.org/"
+BUGTRACKER = "https://trac.wxwidgets.org/"
+
+# wxWidgets licence is a modified version of LGPL explicitly allowing not
+# distributing the sources of an application using the library even in the
+# case of static linking.
+LICENSE = "wxWidgets"
+LIC_FILES_CHKSUM = "file://docs/licence.txt;md5=981f50a934828620b08f44d75db557c6"
+
+inherit ${@bb.utils.contains('PACKAGECONFIG', 'qt', 'cmake_qt5', 'cmake', d)}
+inherit features_check lib_package
+
+# All toolkit-configs except 'no_gui' require x11 explicitly (see toolkit.cmake)
+REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('PACKAGECONFIG', 'no_gui', '', 'x11', d)}"
+
+DEPENDS += " \
+    jpeg \
+    libpng \
+    tiff \
+"
+
+SRC_URI = "git://github.com/wxWidgets/wxWidgets.git"
+PV = "3.1.3"
+SRCREV= "8a40d23b27ed1c80b5a2ca9f7e8461df4fbc1a31"
+S = "${WORKDIR}/git"
+
+# These can be either 'builtin' or 'sys' and builtin means cloned soures are
+# build. So these cannot be PACKAGECONFIGs and let's use libs where we can (see
+# DEPENDS)
+EXTRA_OECMAKE += " \
+    -DwxUSE_LIBJPEG=sys \
+    -DwxUSE_LIBPNG=sys \
+    -DwxUSE_LIBTIFF=sys \
+    -DwxUSE_REGEX=builtin \
+"
+EXTRA_OECMAKE_append_libc-musl = " \
+    -DHAVE_LOCALE_T=OFF \
+"
+
+PACKAGECONFIG ?= "gtk"
+
+# Note on toolkit-PACKAGECONFIGs: select exactly one of 'no_gui' / 'gtk' / 'qt'
+PACKAGECONFIG[no_gui] = "-DwxUSE_GUI=OFF,,,,,qt gtk"
+PACKAGECONFIG[gtk] = "-DwxBUILD_TOOLKIT=gtk3 -DwxUSE_GUI=ON,,gtk+3,,,no_gui qt"
+PACKAGECONFIG[qt] = "-DwxBUILD_TOOLKIT=qt  -DwxUSE_GUI=ON,,qtbase,,,no_gui gtk"
+python () {
+    pkgconfig = d.getVar('PACKAGECONFIG')
+    if (not 'no_gui' in pkgconfig) and (not 'gtk' in pkgconfig) and (not 'qt' in pkgconfig):
+        bb.error("PACKAGECONFIG must select a toolkit. Add one of no_gui / gtk / qt!")
+}
+
+# Notes on other PACKAGECONFIGs:
+# * 'no_gui' overrides some configs below so they are marked as conflicting
+#   with 'no_gui' to avoid surprises
+# * qt+gstreamer is broken due to incorrect references on glib-2.0 -> mark
+#   as conflicting
+# * wxUSE_LIBGNOMEVFS is for gtk2 (see init.cmake) which we don't support
+#   -> no gvfs PACKAGECONFIG
+# * libmspack is in meta-security
+PACKAGECONFIG[gstreamer] = "-DwxUSE_MEDIACTRL=ON,-DwxUSE_MEDIACTRL=OFF,gstreamer1.0-plugins-base,,,no_gui qt"
+PACKAGECONFIG[libsecret] = "-DwxUSE_SECRETSTORE=ON,-DwxUSE_SECRETSTORE=OFF,libsecret,,,no_gui"
+PACKAGECONFIG[lzma] = "-DwxUSE_LIBLZMA=ON,-DwxUSE_LIBLZMA=OFF,xz"
+PACKAGECONFIG[mspack] = "-DwxUSE_LIBMSPACK=ON,-DwxUSE_LIBMSPACK=OFF,libmspack"
+PACKAGECONFIG[sdl_audio] = "-DwxUSE_LIBSDL=ON,-DwxUSE_LIBSDL=OFF,libsdl2"
+PACKAGECONFIG[webkit] = "-DwxUSE_WEBVIEW_WEBKIT=ON,-DwxUSE_WEBVIEW_WEBKIT=OFF,webkitgtk,,,no_gui"
+
+do_install_append() {
+    # do not ship bindir if empty
+    rmdir --ignore-fail-on-non-empty ${D}${bindir}
+}
+
+# lib names are not canonical
+FILES_SOLIBSDEV = ""
+
+FILES_${PN} += " \
+    ${libdir}/libwx_*.so \
+    ${libdir}/wx/ \
+"
+
+FILES_${PN}-dev += "${libdir}/wx/include/"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.5.bb b/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.6.bb
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.5.bb
rename to meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.6.bb
index 568083b..9d1bb7d 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.5.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.6.bb
@@ -9,8 +9,8 @@
 SRC_URI += "file://iconv-detect.h \
             file://nodolt.patch"
 
-SRC_URI[archive.md5sum] = "98970e3995e67ac3f23827ff52308f9e"
-SRC_URI[archive.sha256sum] = "fb7556501f85c3bf3e65fdd82697cbc4fa4b55dccd33ad14239ce0197e78ba59"
+SRC_URI[archive.md5sum] = "656548dc431004d1ebf95e5d0bb4b9c8"
+SRC_URI[archive.sha256sum] = "abff194c7c4802fba2e233890d09dde8bf7170c3ad5e13000601c8d5b3c44717"
 
 export ac_cv_have_iconv_detect_h="yes"
 do_configure_append = "cp ${WORKDIR}/iconv-detect.h ${S}"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.24.1.bb b/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.25.3.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.24.1.bb
rename to meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.25.3.bb
index 6c8e0e0..57419a4 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.24.1.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.25.3.bb
@@ -10,8 +10,8 @@
 
 inherit gnomebase gobject-introspection gtk-doc gtk-icon-cache
 
-SRC_URI[archive.md5sum] = "bbecf334a7333d0a5d4d655ba38be9b4"
-SRC_URI[archive.sha256sum] = "9c3acf7a567cbb4f8bf62b096e013f12c3911cc850c3fa9900cbd5aa4f6ec284"
+SRC_URI[archive.md5sum] = "08bfff8f9688cf630dcb0f950617661f"
+SRC_URI[archive.sha256sum] = "1c9bbb29740c29cd6e1dd0c9964722ff08cd5e6f68f1b5c135bc391a6ce97639"
 
 PACKAGECONFIG[python3] = "-Dpython3=true,-Dpython3=false,python3-pygobject"
 
diff --git a/meta-openembedded/meta-oe/recipes-gnome/pyxdg/pyxdg_0.26.bb b/meta-openembedded/meta-oe/recipes-gnome/pyxdg/pyxdg_0.26.bb
index 0128a7c..a957c1d 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/pyxdg/pyxdg_0.26.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/pyxdg/pyxdg_0.26.bb
@@ -7,6 +7,6 @@
 SRCREV = "7db14dcf4c4305c3859a2d9fcf9f5da2db328330"
 SRC_URI = "git://anongit.freedesktop.org/xdg/pyxdg"
 
-inherit distutils
+inherit distutils3
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/babl/babl_0.1.62.bb b/meta-openembedded/meta-oe/recipes-graphics/babl/babl_0.1.62.bb
deleted file mode 100644
index 4a7dbca..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/babl/babl_0.1.62.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "Babl is a dynamic, any to any, pixel format conversion library"
-LICENSE = "LGPL-3.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6a6a8e020838b23406c81b19c1d46df6"
-
-inherit gnomebase
-
-SRC_URI = "http://ftp.gimp.org/pub/${BPN}/0.1/${BP}.tar.bz2"
-SRC_URI[md5sum] = "28fa9d43549378ceebe2871d7721dd46"
-SRC_URI[sha256sum] = "dc279f174edbcb08821cf37e4ab0bc02e6949369b00b150c759a6c24bfd3f510"
-
-FILES_${PN} += "${libdir}/babl-*/*.so"
-FILES_${PN}-dev += "${libdir}/babl-*/*.la"
-FILES_${PN}-dbg += "${libdir}/babl-*/.debug/"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
index 46d4dbd..6a7b1bf 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch
@@ -9,12 +9,12 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 7c66b39..1489ef6 100644
+index 230c87b..e699e83 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -19,7 +19,7 @@ else(NOT SPHINX_EXECUTABLE-NOTFOUND)
- 	message(STATUS "Could NOT find sphinx-build.")
- endif(NOT SPHINX_EXECUTABLE-NOTFOUND)
+@@ -19,7 +19,7 @@ else(SPHINX_EXECUTABLE STREQUAL "SPHINX_EXECUTABLE-NOTFOUND")
+ 	message(STATUS "Found sphinx-build: ${SPHINX_EXECUTABLE}")
+ endif(SPHINX_EXECUTABLE STREQUAL "SPHINX_EXECUTABLE-NOTFOUND")
  
 -execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(), end='')" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
 +#execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(), end='')" OUTPUT_VARIABLE PYTHON_INSTALL_DIR)
@@ -22,5 +22,5 @@
  execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sys; sys.stdout.write('%s.%s' % (sys.version_info.major, sys.version_info.minor))" OUTPUT_VARIABLE PYTHON_MAJOR_DOT_MINOR_VERSION)
  message(STATUS "Python install dir is ${PYTHON_INSTALL_DIR}")
 -- 
-2.7.4
+2.17.1
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Run-python-scripts-using-env.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Run-python-scripts-using-env.patch
deleted file mode 100644
index 75b6b8f..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-Run-python-scripts-using-env.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 15d0afcfa4868b7b072b3434bac0064617d61f99 Mon Sep 17 00:00:00 2001
-From: Lei Maohui <leimaohui@cn.fujitsu.com>
-Date: Tue, 19 Dec 2017 14:53:14 +0900
-Subject: [PATCH] Run python scripts using env
-
-Otherwise the build tools hardcode the python path into them.
-
-Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
----
- bin/dnfdragora | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/bin/dnfdragora b/bin/dnfdragora
-index b8e0550..cd80f7f 100755
---- a/bin/dnfdragora
-+++ b/bin/dnfdragora
-@@ -1,4 +1,4 @@
--#!/usr/bin/python3
-+#!/usr/bin/env python3
- # vim: set et ts=4 sw=4:
- #    Copyright 2016-2017 Angelo Naselli <anaselli@linux.it>
- #
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch
index 90ce1d0..bef4711 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-To-fix-error-when-do_package.patch
@@ -3,7 +3,8 @@
 Date: Tue, 19 Dec 2017 11:15:29 +0900
 Subject: [PATCH] To fix error when do_package
 
-QA Issue: nativesdk-dnfdragora: Files/directories were installed but not shipped in any package:
+QA Issue: nativesdk-dnfdragora: Files/directories were installed but not
+shipped in any package:
   /etc
   /etc/dnfdragora
   /etc/dnfdragora/dnfdragora.yaml
@@ -14,18 +15,18 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 7c66b39..a5659f7 100644
+index 230c87b..1b8d800 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -52,7 +52,7 @@ endif(ENABLE_COMPS)
+@@ -68,7 +68,7 @@ endif(ENABLE_COMPS)
  set(CMAKE_INSTALL_BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
  set(CMAKE_INSTALL_DATAROOTDIR "${CMAKE_INSTALL_PREFIX}/share")
  set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")
--set(CMAKE_INSTALL_FULL_SYSCONFDIR "/etc")
-+set(CMAKE_INSTALL_FULL_SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/../etc")
+-set(CMAKE_INSTALL_FULL_SYSCONFDIR "/etc" CACHE PATH "sysconfig directory (default /etc)")
++set(CMAKE_INSTALL_FULL_SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/../etc" CACHE PATH "sysconfig directory (default /etc)")
  
  # Configure files
  configure_file(${CMAKE_SOURCE_DIR}/etc/dnfdragora.yaml.in ${CMAKE_BINARY_DIR}/etc/dnfdragora.yaml @ONLY)
 -- 
-2.7.4
+2.17.1
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch
index 88bb634..c8b105e 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora/0001-disable-build-manpages.patch
@@ -9,17 +9,17 @@
  1 file changed, 1 deletion(-)
 
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 7c66b39..fc32750 100644
+index 230c87b..1624998 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -65,7 +65,6 @@ endif(GETTEXT_FOUND)
+@@ -81,7 +81,6 @@ endif(GETTEXT_FOUND)
  
  # Build and install the man-pages
- if(NOT SPHINX_EXECUTABLE-NOTFOUND)
+ if(NOT SPHINX_EXECUTABLE STREQUAL "SPHINX_EXECUTABLE-NOTFOUND")
 -	add_subdirectory(man)
- endif(NOT SPHINX_EXECUTABLE-NOTFOUND)
+ endif(NOT SPHINX_EXECUTABLE STREQUAL "SPHINX_EXECUTABLE-NOTFOUND")
  
  # Installing application code
 -- 
-2.7.4
+2.17.1
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb
index 9cd1efb..0073851 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/dnfdragora/dnfdragora_git.bb
@@ -7,15 +7,14 @@
            file://0001-disable-build-manpages.patch \
            file://0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
            file://0001-To-fix-error-when-do_package.patch \
-           file://0001-Run-python-scripts-using-env.patch \
            "
 
-PV = "1.0.1+git${SRCPV}"
-SRCREV = "4fef4ce889b8e4fa03191d414f63bfd50796152a"
+PV = "1.1.2+git${SRCPV}"
+SRCREV = "19e123132cfd4efd860e5204261c3c228bfe80a8"
 
 S = "${WORKDIR}/git"
 
-inherit cmake gettext pkgconfig python3-dir python3native distutils3-base
+inherit cmake gettext pkgconfig python3-dir python3native distutils3-base mime-xdg
 
 DEPENDS += "dnf python3 "
 #DEPENDS_class-nativesdk += "nativesdk-python3"
@@ -27,4 +26,7 @@
 
 BBCLASSEXTEND = "nativesdk"
 
-FILES_${PN} = "${PYTHON_SITEPACKAGES_DIR}/ ${datadir}/ ${bindir}/ ${sysconfdir}/dnfdragora "
+FILES_${PN} = "${PYTHON_SITEPACKAGES_DIR}/ ${datadir}/ ${bindir}/ ${sysconfdir}/dnfdragora ${sysconfdir}/xdg"
+
+PNBLACKLIST[dnfdragora] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build correctly without package_rpm in PACKAGE_CLASSES', d)}"
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.3.bb b/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.3.bb
new file mode 100644
index 0000000..e3dff91
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.3.bb
@@ -0,0 +1,16 @@
+SUMMARY = "FBGrab is a framebuffer screenshot program"
+HOMEPAGE = "https://github.com/GunnarMonell/fbgrab"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a"
+SECTION = "console/utils"
+DEPENDS = "libpng zlib"
+SRC_URI = "git://github.com/GunnarMonell/fbgrab.git;protocol=https"
+
+SRCREV = "b179e2a42b8a5d72516b9c8d91713c9025cf6044"
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep
+
+do_configure_prepend() {
+    sed -i 's|$(DESTDIR)/usr/man/|$(DESTDIR)${mandir}/|g' ${S}/Makefile
+}
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.bb b/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.bb
deleted file mode 100644
index e12bc09..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/fbgrab/fbgrab_1.3.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "FBGrab is a framebuffer screenshot program"
-HOMEPAGE = "http://fbgrab.monells.se/"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a"
-SECTION = "console/utils"
-DEPENDS = "libpng zlib"
-SRC_URI = "http://fbgrab.monells.se/${BP}.tar.gz"
-
-inherit autotools-brokensep
-
-SRC_URI[md5sum] = "7d8c24081c681dfbba21f2934c1ac656"
-SRC_URI[sha256sum] = "5fab478cbf8731fbacefaa76236a8f8b38ccff920c53b3a8253bc35509fba8ed"
-
-do_configure_prepend() {
-    sed -i 's|$(DESTDIR)/usr/man/|$(DESTDIR)${mandir}/|g' ${S}/Makefile
-}
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20190801.bb b/meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20190801.bb
index b84806f..1863f95 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20190801.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/fontforge/fontforge_20190801.bb
@@ -6,10 +6,10 @@
     file://LICENSE;md5=d042f3d2a8fd7208b704a499168e3c89 \
 "
 
-DEPENDS = "glib-2.0 pango giflib tiff libxml2 jpeg libtool uthash gettext-native"
+DEPENDS = "python3 glib-2.0 pango giflib tiff libxml2 jpeg libtool uthash gettext-native"
 DEPENDS_append_class-target = " libxi"
 
-inherit autotools pkgconfig python3native features_check gettext gtk-icon-cache mime
+inherit autotools pkgconfig python3native features_check gettext gtk-icon-cache mime mime-xdg
 
 REQUIRED_DISTRO_FEATURES_append_class-target = " x11"
 
@@ -20,9 +20,12 @@
 "
 S = "${WORKDIR}/git"
 
-EXTRA_OECONF += "--without-libuninameslist"
+EXTRA_OECONF += "--without-libuninameslist  --enable-python-scripting --enable-python-extension"
 EXTRA_OECONF_append_class-native = " with_x=no"
 
+LDFLAGS += "-lpython${PYTHON_BASEVERSION}${PYTHON_ABI}"
+BUILD_LDFLAGS += "-lpython${PYTHON_BASEVERSION}${PYTHON_ABI}"
+
 #do_configure_prepend() {
 # uthash sources are expected in uthash/src
 #    mkdir -p ${S}/uthash/src
diff --git a/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.0.0.bb b/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.2.1.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.0.0.bb
rename to meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.2.1.bb
index 3b540bb..851641c 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.0.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/freeglut/freeglut_3.2.1.bb
@@ -4,8 +4,8 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=89c0b58a3e01ce3d8254c9f59e78adfb"
 
 SRC_URI = "https://sourceforge.net/projects/${BPN}/files/${BPN}/${PV}/${BPN}-${PV}.tar.gz"
-SRC_URI[md5sum] = "90c3ca4dd9d51cf32276bc5344ec9754"
-SRC_URI[sha256sum] = "2a43be8515b01ea82bcfa17d29ae0d40bd128342f0930cd1f375f1ff999f76a2"
+SRC_URI[md5sum] = "cd5c670c1086358598a6d4a9d166949d"
+SRC_URI[sha256sum] = "d4000e02102acaf259998c870e25214739d1f16f67f99cb35e4f46841399da68"
 
 inherit cmake features_check
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.9.bb b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.9.bb
index d1ba482..51f5a4e 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.9.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/fvwm/fvwm_2.6.9.bb
@@ -40,7 +40,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools gettext update-alternatives pkgconfig pythonnative perlnative features_check
+inherit autotools gettext update-alternatives pkgconfig python3native perlnative features_check
 # depends on virtual/libx11
 REQUIRED_DISTRO_FEATURES = "x11"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl/pkgconfig.patch b/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl/pkgconfig.patch
deleted file mode 100644
index d145b62..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl/pkgconfig.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Index: gegl-0.2.0/configure.ac
-===================================================================
---- gegl-0.2.0.orig/configure.ac	2012-04-02 21:56:49.000000000 +0000
-+++ gegl-0.2.0/configure.ac	2014-07-17 21:34:15.312546602 +0000
-@@ -765,15 +765,7 @@
- 
- have_sdl="no"
- if test "x$with_sdl" != "xno"; then
--  AC_PATH_PROG(SDL_CONFIG, sdl-config, no)
--  if test "$SDL_CONFIG" = "no"; then
--    have_sdl="no  (SDL library not found)"
--    AC_MSG_RESULT([*** Check for SDL library failed.])
--  else
--    have_sdl="yes"
--    SDL_CFLAGS=`$SDL_CONFIG --cflags`
--    SDL_LIBS=`$SDL_CONFIG --libs`
--  fi
-+  PKG_CHECK_MODULES([SDL], [sdl], [have_sdl="yes"], [have_sdl="no  (SDL library not found)"])
- fi
- 
- AM_CONDITIONAL(HAVE_SDL, test "$have_sdl" = "yes")
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl_0.3.18.bb b/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl_0.3.18.bb
deleted file mode 100644
index 0db0f79..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/gegl/gegl_0.3.18.bb
+++ /dev/null
@@ -1,34 +0,0 @@
-SUMMARY = "GEGL (Generic Graphics Library) is a graph based image processing framework"
-LICENSE = "LGPL-3.0"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-DEPENDS = "babl librsvg glib-2.0 gtk+ pango cairo expat zlib libpng jpeg virtual/libsdl json-glib intltool-native"
-
-EXTRA_OECONF = "--disable-docs"
-
-inherit features_check gnomebase vala gobject-introspection
-
-REQUIRED_DISTRO_FEATURES = "x11"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG[jasper] = "--with-jasper,--without-jasper,jasper"
-PACKAGECONFIG[avformat] = "--with-libavformat,--without-libavformat,libav"
-PACKAGECONFIG[lcms] = "--with-lcms,--without-lcms,lcms"
-PACKAGECONFIG[tiff] = "--with-libtiff,--without-libtiff,tiff"
-PACKAGECONFIG[webp] = "--with-webp,--without-webp,webp"
-
-SRC_URI = "http://ftp.gimp.org/pub/${BPN}/0.3/${BP}.tar.bz2 \
-           file://pkgconfig.patch "
-SRC_URI[md5sum] = "6e5c6f229261478dc436a38c84405b2a"
-SRC_URI[sha256sum] = "d7858ef26ede136d14e3de188a9e9c0de7707061a9fb96d7d615fab4958491fb"
-
-LDFLAGS += "-lm"
-
-# There are a couple of non-symlink .so files installed into libdir, which need to go into main package
-FILES_${PN}_append = " ${libdir}/gegl-0.3/*.so ${libdir}/gegl-0.3/*.json ${libdir}/libgegl-npd-0.3.so ${libdir}/libgegl-sc-0.3.so"
-FILES_${PN}-dev_append = " ${libdir}/gegl-0.3/*.la ${libdir}/libgegl-0.3.so"
-FILES_${PN}-dev_remove = "${libdir}/lib*.so"
-
-# Fails to build with thumb-1 (qemuarm)
-# gegl-0.2.0/operations/common/matting-global.c: In function 'matting_process':
-# gegl-0.2.0/operations/common/matting-global.c:463:1: internal compiler error: in patch_jump_insn, at cfgrtl.c:1275
-ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0001-configure-ac-do-not-check-for-freetype-config.patch b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0001-configure-ac-do-not-check-for-freetype-config.patch
deleted file mode 100644
index fecd012..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0001-configure-ac-do-not-check-for-freetype-config.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 72ad76841d87e857428693d812a961935284ac62 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
-Date: Thu, 12 Feb 2015 15:57:47 +0100
-Subject: [PATCH] configure-ac: do not check for freetype-config
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-freetype-config is not allowed in our environment - see also binconfig-disabled
-
-Upstream-Status: inappropriate [OE specific]
-
-Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
----
- configure.ac | 7 -------
- 1 file changed, 7 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 26812b6..abec714 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -647,13 +647,6 @@ if test "x$fontconfig_ok" = xno; then
- fi
- 
- 
--AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
--if test "x$FREETYPE_CONFIG" != "xno" ; then
--  AC_MSG_CHECKING([for freetype libraries])
--  FREETYPE_LIBS=`$FREETYPE_CONFIG --libs`
--  AC_MSG_RESULT($FREETYPE_LIBS)
--fi
--AC_SUBST(FREETYPE_LIBS)
- 
- 
- ##########################################
--- 
-1.9.3
-
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0003-Fix-use-of-gegl-API.patch b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0003-Fix-use-of-gegl-API.patch
deleted file mode 100644
index 7da78e2..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/0003-Fix-use-of-gegl-API.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From e1c8f4b8323e3965271a93529eab5774c1a7083c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 29 Jun 2017 10:32:14 -0700
-Subject: [PATCH 3/3] Fix use of gegl API
-
-newer version of gegl does not define GEGL_IS_PARAM_SPEC_MULTILINE
-
-| core/libappcore.a(gimpparamspecs-duplicate.o): In function `gimp_param_spec_duplicate':
-| /usr/src/debug/gimp/2.8.22-r0/gimp-2.8.22/app/core/../../../../../../../../../workspace/sources/gimp/app/core/gimpparamspecs-duplicate.c:70: undefined reference to `GEGL_IS_PARAM_SPEC_MULTILINE'
-| collect2: error: ld returned 1 exit status
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- app/core/gimpparamspecs-duplicate.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/app/core/gimpparamspecs-duplicate.c b/app/core/gimpparamspecs-duplicate.c
-index c0b7426..2efaf23 100644
---- a/app/core/gimpparamspecs-duplicate.c
-+++ b/app/core/gimpparamspecs-duplicate.c
-@@ -67,7 +67,7 @@ gimp_param_spec_duplicate (GParamSpec *pspec)
-                                      spec->default_value,
-                                      pspec->flags);
- 
--          if (GEGL_IS_PARAM_SPEC_MULTILINE (pspec))
-+          if (gegl_param_spec_get_property_key(pspec, "multiline"))
-             {
-               g_param_spec_set_qdata (new, multiline_quark,
-                                       GINT_TO_POINTER (TRUE));
--- 
-2.13.2
-
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/bump_Babl-GEGL_versions.patch b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/bump_Babl-GEGL_versions.patch
deleted file mode 100644
index b71bf32..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp/bump_Babl-GEGL_versions.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-Bump acceptable versions of babl and gegl.
-
-Patch is taken from debian:
-https://packages.debian.org/stretch/gimp
-
-Upstream-Status: Inappropriate [OE specific]
-Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
-diff --git a/app/sanity.c b/app/sanity.c
-index febddfb..85fea55 100644
---- a/app/sanity.c
-+++ b/app/sanity.c
-@@ -351,7 +351,7 @@ sanity_check_babl (void)
- 
- #define BABL_REQUIRED_MAJOR 0
- #define BABL_REQUIRED_MINOR 1
--#define BABL_REQUIRED_MICRO 10
-+#define BABL_REQUIRED_MICRO 12
- 
-   babl_get_version (&babl_major_version,
-                     &babl_minor_version,
-@@ -388,7 +388,7 @@ sanity_check_gegl (void)
-   gint gegl_micro_version;
- 
- #define GEGL_REQUIRED_MAJOR 0
--#define GEGL_REQUIRED_MINOR 2
-+#define GEGL_REQUIRED_MINOR 3
- #define GEGL_REQUIRED_MICRO 0
- 
-   gegl_get_version (&gegl_major_version,
-diff --git a/configure.ac b/configure.ac
-index 26812b6..4252fe9 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -40,8 +40,8 @@ m4_define([gimp_stable],
- m4_define([gimp_full_name], [GNU Image Manipulation Program])
- 
- # required versions of other packages
--m4_define([babl_required_version], [0.1.10])
--m4_define([gegl_required_version], [0.2.0])
-+m4_define([babl_required_version], [0.1.12])
-+m4_define([gegl_required_version], [0.3.0])
- m4_define([glib_required_version], [2.30.2])
- m4_define([atk_required_version], [2.2.0])
- m4_define([gtk_required_version], [2.24.10])
-@@ -519,7 +519,7 @@ AC_SUBST(ISO_CODES_LOCALEDIR)
- ###############################
- 
- PKG_CHECK_MODULES(BABL, babl >= babl_required_version)
--PKG_CHECK_MODULES(GEGL, gegl-0.2 >= gegl_required_version)
-+PKG_CHECK_MODULES(GEGL, gegl-0.3 >= gegl_required_version)
- PKG_CHECK_MODULES(ATK, atk >= atk_required_version)
- 
- AM_PATH_GLIB_2_0(glib_required_version, :,
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp_2.8.22.bb b/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp_2.8.22.bb
deleted file mode 100644
index 0245345..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/gimp/gimp_2.8.22.bb
+++ /dev/null
@@ -1,52 +0,0 @@
-SUMMARY = "The GIMP is the GNU Image Manipulation Program"
-HOMEPAGE = "http://www.gimp.org"
-SECTION = "x11/graphics"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
-
-DEPENDS = " \
-    gdk-pixbuf-native \
-    intltool-native \
-    libxslt-native \
-    dbus-glib \
-    gtk+ \
-    babl \
-    gegl \
-    jpeg \
-    libpng \
-    libexif \
-    tiff \
-    lcms \
-    poppler \
-    jasper \
-    bzip2 \
-    libgudev \
-    libmng \
-"
-DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxmu libxpm', '', d)}"
-
-inherit features_check gnomebase gtk-icon-cache gtk-doc
-
-REQUIRED_DISTRO_FEATURES = "x11"
-
-SRC_URI = "http://ftp.gimp.org/pub/gimp/v2.8/gimp-${PV}.tar.bz2 \
-           file://0001-configure-ac-do-not-check-for-freetype-config.patch \
-           file://bump_Babl-GEGL_versions.patch \
-           file://0003-Fix-use-of-gegl-API.patch \
-           "
-SRC_URI[md5sum] = "7e4fd7a53b1d3c32dff642ab1a94b44d"
-SRC_URI[sha256sum] = "9187a35cc52b110d78124d7b27b68a68ade14a794c2721314bac6134d2a5638a"
-
-EXTRA_OECONF = "--disable-python \
-                --without-webkit \
-                --without-wmf"
-
-do_configure_append() {
-    find ${B} -name Makefile | xargs sed -i s:'-I$(includedir)':'-I.':g
-    find ${B} -name Makefile | xargs sed -i s:'-I/usr/include':'-I${STAGING_INCDIR}':g
-}
-
-CFLAGS += "-fPIC"
-
-FILES_${PN}-dbg += "${libdir}/gimp/2.0/*/.debug"
-FILES_${PN}  += "${datadir}/appdata"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.23.bb b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.24.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.23.bb
rename to meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.24.bb
index a3bdf9c..9d9b0c7 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.23.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/gphoto2/libgphoto2_2.5.24.bb
@@ -14,8 +14,8 @@
            file://0001-configure.ac-remove-AM_PO_SUBDIRS.patch \
 "
 
-SRC_URI[libgphoto2.md5sum] = "bf052ce815e607dc781c5b0f3c5ca5c0"
-SRC_URI[libgphoto2.sha256sum] = "d8af23364aa40fd8607f7e073df74e7ace05582f4ba13f1724d12d3c97e8852d"
+SRC_URI[libgphoto2.md5sum] = "063632d839b71698e99da0ccd19bc9f6"
+SRC_URI[libgphoto2.sha256sum] = "fd3c578769f0fa389c1e68120f224bd98477aa3d82d16b82746c1266c0d4fb31"
 
 inherit autotools pkgconfig gettext lib_package
 
@@ -34,7 +34,7 @@
 
 do_install_append() {
     install -d ${D}${sysconfdir}/udev/rules.d/
-    install -m 0755 ${WORKDIR}/*.rules ${D}${sysconfdir}/udev/rules.d/
+    install -m 0644 ${WORKDIR}/*.rules ${D}${sysconfdir}/udev/rules.d/
 }
 
 PACKAGES =+ "libgphotoport libgphoto2-camlibs"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.40.1.bb b/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.40.1.bb
index 176cf44..12ecb99 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.40.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.40.1.bb
@@ -66,8 +66,8 @@
 FILES_${PN}-demo += "${datadir}/graphviz/demo/"
 
 RDEPENDS_${PN}-perl += "perl"
-RDEPENDS_${PN}-python += "python"
-RDEPENDS_${PN}-demo += "python perl"
+RDEPENDS_${PN}-python += "python3"
+RDEPENDS_${PN}-demo += "python3 perl"
 
 INSANE_SKIP_${PN}-perl = "dev-so"
 INSANE_SKIP_${PN}-python = "dev-so"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/gtkwave/gtkwave_3.3.103.bb b/meta-openembedded/meta-oe/recipes-graphics/gtkwave/gtkwave_3.3.104.bb
similarity index 69%
rename from meta-openembedded/meta-oe/recipes-graphics/gtkwave/gtkwave_3.3.103.bb
rename to meta-openembedded/meta-oe/recipes-graphics/gtkwave/gtkwave_3.3.104.bb
index 286d9aa..6c06c30 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/gtkwave/gtkwave_3.3.103.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/gtkwave/gtkwave_3.3.104.bb
@@ -7,12 +7,12 @@
 
 SRC_URI = "http://gtkwave.sourceforge.net/${BP}.tar.gz"
 
-SRC_URI[md5sum] = "5a9a5913f9a02a333b2b23626f153fd7"
-SRC_URI[sha256sum] = "c325abf7cf26c53309a67c0ecaaf196774fa982a717a102c599ac8a516eeeaf7"
+SRC_URI[md5sum] = "23879689ecf7e2cdd2cd5a91c5c601da"
+SRC_URI[sha256sum] = "d20dd1a9307b908439c68122a9f81d3ff434a6bfa5439f0cb01398fec650894f"
 
-inherit pkgconfig autotools gettext texinfo
-DEPENDS = "tcl tk gperf-native bzip2 xz pango zlib gtk+ gdk-pixbuf glib-2.0"
-RDEPENDS_${PN} = "tk-lib"
+inherit pkgconfig autotools gettext texinfo mime mime-xdg
+DEPENDS += "tcl tk gperf-native bzip2 xz pango zlib gtk+ gdk-pixbuf glib-2.0"
+RDEPENDS_${PN} += "tk-lib"
 
 # depends on gtk+ which has this restriction
 inherit features_check
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.12.bb b/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.12.bb
index 22fc83a..dfdf824 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.12.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/libvncserver/libvncserver_0.9.12.bb
@@ -17,7 +17,6 @@
     pthread \
     ${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd','',d)} \
     ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ipv6', '',d)} \
-    sasl \
     sdl \
     websockets \
     zlib \
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_2.52.0.bb b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_2.52.0.bb
index dae5c34..1a376a4 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_2.52.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/libyui/libyui-ncurses_2.52.0.bb
@@ -25,8 +25,10 @@
     git checkout bootstrap.sh
     sed -i "s#/usr#${PKG_CONFIG_SYSROOT_DIR}${base_prefix}&#" bootstrap.sh
     ./bootstrap.sh
-    mkdir -p ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib64/
-    cp ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib/libyui.so* ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib64/
+    if [ -e ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib/libyui.so ]; then
+        mkdir -p ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib64/
+        cp ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib/libyui.so* ${PKG_CONFIG_SYSROOT_DIR}${base_prefix}/usr/lib64/
+    fi
     cd -
     sed -i -e "s#\${YPREFIX}#\${PKG_CONFIG_SYSROOT_DIR}${base_prefix}&#" ${S}/CMakeLists.txt
     sed -i -e "s#/usr#${PKG_CONFIG_SYSROOT_DIR}${base_prefix}&#" ${PKG_CONFIG_SYSROOT_DIR}${libdir}/cmake/libyui/LibyuiLibraryDepends-release.cmake
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openbox/files/0001-openbox-xdg-autostart-convert-to-python3.patch b/meta-openembedded/meta-oe/recipes-graphics/openbox/files/0001-openbox-xdg-autostart-convert-to-python3.patch
new file mode 100644
index 0000000..5ebeb01
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openbox/files/0001-openbox-xdg-autostart-convert-to-python3.patch
@@ -0,0 +1,138 @@
+From b7de9cff2a9578dd92d191241c28437cd6bbb595 Mon Sep 17 00:00:00 2001
+From: Max Krummenacher <max.krummenacher@toradex.com>
+Date: Sun, 2 Feb 2020 14:39:21 +0000
+Subject: [PATCH] openbox-xdg-autostart: convert to python3
+
+Upstream-Status: Pending
+
+Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
+---
+ data/autostart/openbox-xdg-autostart | 72 ++++++++++++++--------------
+ 1 file changed, 36 insertions(+), 36 deletions(-)
+
+diff --git a/data/autostart/openbox-xdg-autostart b/data/autostart/openbox-xdg-autostart
+index 04a17a1..52d763f 100755
+--- a/data/autostart/openbox-xdg-autostart
++++ b/data/autostart/openbox-xdg-autostart
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ 
+ # openbox-xdg-autostart runs things based on the XDG autostart specification
+ # Copyright (C) 2008       Dana Jansens
+@@ -28,9 +28,9 @@ try:
+     from xdg.DesktopEntry import DesktopEntry
+     from xdg.Exceptions import ParsingError
+ except ImportError:
+-    print
+-    print >>sys.stderr, "ERROR:", ME, "requires PyXDG to be installed"
+-    print
++    print()
++    print("ERROR:", ME, "requires PyXDG to be installed", file=sys.stderr)
++    print()
+     sys.exit(1)
+ 
+ def main(argv=sys.argv):
+@@ -51,7 +51,7 @@ def main(argv=sys.argv):
+             try:
+                 autofile = AutostartFile(path)
+             except ParsingError:
+-                print "Invalid .desktop file: " + path
++                print("Invalid .desktop file: " + path)
+             else:
+                 if not autofile in files:
+                     files.append(autofile)
+@@ -99,9 +99,9 @@ class AutostartFile:
+ 
+     def _alert(self, str, info=False):
+         if info:
+-            print "\t ", str
++            print("\t ", str)
+         else:
+-            print "\t*", str
++            print("\t*", str)
+ 
+     def _showInEnvironment(self, envs, verbose=False):
+         default = not self.de.getOnlyShowIn()
+@@ -146,14 +146,14 @@ class AutostartFile:
+ 
+     def display(self, envs):
+         if self._shouldRun(envs):
+-            print "[*] " + self.de.getName()
++            print("[*] " + self.de.getName())
+         else:
+-            print "[ ] " + self.de.getName()
++            print("[ ] " + self.de.getName())
+         self._alert("File: " + self.path, info=True)
+         if self.de.getExec():
+             self._alert("Executes: " + self.de.getExec(), info=True)
+         self._shouldRun(envs, True)
+-        print
++        print()
+ 
+     def run(self, envs):
+         here = os.getcwd()
+@@ -165,34 +165,34 @@ class AutostartFile:
+         os.chdir(here)
+ 
+ def show_help():
+-    print "Usage:", ME, "[OPTION]... [ENVIRONMENT]..."
+-    print
+-    print "This tool will run xdg autostart .desktop files"
+-    print
+-    print "OPTIONS"
+-    print "  --list        Show a list of the files which would be run"
+-    print "                Files which would be run are marked with an asterix"
+-    print "                symbol [*].  For files which would not be run,"
+-    print "                information is given for why they are excluded"
+-    print "  --help        Show this help and exit"
+-    print "  --version     Show version and copyright information"
+-    print
+-    print "ENVIRONMENT specifies a list of environments for which to run autostart"
+-    print "applications.  If none are specified, only applications which do not "
+-    print "limit themselves to certain environments will be run."
+-    print
+-    print "ENVIRONMENT can be one or more of:"
+-    print "  GNOME         Gnome Desktop"
+-    print "  KDE           KDE Desktop"
+-    print "  ROX           ROX Desktop"
+-    print "  XFCE          XFCE Desktop"
+-    print "  Old           Legacy systems"
+-    print
++    print("Usage:", ME, "[OPTION]... [ENVIRONMENT]...")
++    print()
++    print("This tool will run xdg autostart .desktop files")
++    print()
++    print("OPTIONS")
++    print("  --list        Show a list of the files which would be run")
++    print("                Files which would be run are marked with an asterix")
++    print("                symbol [*].  For files which would not be run,")
++    print("                information is given for why they are excluded")
++    print("  --help        Show this help and exit")
++    print("  --version     Show version and copyright information")
++    print()
++    print("ENVIRONMENT specifies a list of environments for which to run autostart")
++    print("applications.  If none are specified, only applications which do not ")
++    print("limit themselves to certain environments will be run.")
++    print()
++    print("ENVIRONMENT can be one or more of:")
++    print("  GNOME         Gnome Desktop")
++    print("  KDE           KDE Desktop")
++    print("  ROX           ROX Desktop")
++    print("  XFCE          XFCE Desktop")
++    print("  Old           Legacy systems")
++    print()
+ 
+ def show_version():
+-    print ME, VERSION
+-    print "Copyright (c) 2008        Dana Jansens"
+-    print
++    print(ME, VERSION)
++    print("Copyright (c) 2008        Dana Jansens")
++    print()
+ 
+ if __name__ == "__main__":
+         sys.exit(main())
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
index 33f34e4..e269a26 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
@@ -7,6 +7,7 @@
 SRC_URI = " \
     http://icculus.org/openbox/releases/openbox-${PV}.tar.gz \
     file://0001-Makefile.am-avoid-race-when-creating-autostart-direc.patch \
+    file://0001-openbox-xdg-autostart-convert-to-python3.patch \
 "
 
 SRC_URI[md5sum] = "b72794996c6a3ad94634727b95f9d204"
@@ -54,4 +55,4 @@
 
 FILES_${PN}-config += "${sysconfdir}"
 
-RDEPENDS_${PN} += "${PN}-core ${PN}-config ${PN}-theme-clearlooks python python-shell pyxdg"
+RDEPENDS_${PN} += "${PN}-core ${PN}-config ${PN}-theme-clearlooks python3 python3-shell pyxdg"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-6851.patch b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-6851.patch
new file mode 100644
index 0000000..9f2fc90
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-6851.patch
@@ -0,0 +1,32 @@
+From 024b8407392cb0b82b04b58ed256094ed5799e04 Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Sat, 11 Jan 2020 01:51:19 +0100
+Subject: [PATCH] opj_j2k_update_image_dimensions(): reject images whose
+ coordinates are beyond INT_MAX (fixes #1228)
+
+---
+ src/lib/openjp2/j2k.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/lib/openjp2/j2k.c b/src/lib/openjp2/j2k.c
+index 14f6ff41..922550eb 100644
+--- a/src/lib/openjp2/j2k.c
++++ b/src/lib/openjp2/j2k.c
+@@ -9236,6 +9236,14 @@ static OPJ_BOOL opj_j2k_update_image_dim
+     l_img_comp = p_image->comps;
+     for (it_comp = 0; it_comp < p_image->numcomps; ++it_comp) {
+         OPJ_INT32 l_h, l_w;
++        if (p_image->x0 > (OPJ_UINT32)INT_MAX ||
++                p_image->y0 > (OPJ_UINT32)INT_MAX ||
++                p_image->x1 > (OPJ_UINT32)INT_MAX ||
++                p_image->y1 > (OPJ_UINT32)INT_MAX) {
++            opj_event_msg(p_manager, EVT_ERROR,
++                          "Image coordinates above INT_MAX are not supported\n");
++            return OPJ_FALSE;
++        }
+ 
+         l_img_comp->x0 = (OPJ_UINT32)opj_int_ceildiv((OPJ_INT32)p_image->x0,
+                          (OPJ_INT32)l_img_comp->dx);
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-8112.patch b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-8112.patch
new file mode 100644
index 0000000..cb25053
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg/CVE-2020-8112.patch
@@ -0,0 +1,46 @@
+From 05f9b91e60debda0e83977e5e63b2e66486f7074 Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Thu, 30 Jan 2020 00:59:57 +0100
+Subject: [PATCH] opj_tcd_init_tile(): avoid integer overflow
+
+That could lead to later assertion failures.
+
+Fixes #1231 / CVE-2020-8112
+---
+ src/lib/openjp2/tcd.c | 20 ++++++++++++++++++--
+ 1 file changed, 18 insertions(+), 2 deletions(-)
+
+diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c
+index deecc4df..aa419030 100644
+--- a/src/lib/openjp2/tcd.c
++++ b/src/lib/openjp2/tcd.c
+@@ -905,8 +905,24 @@ static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
+             /* p. 64, B.6, ISO/IEC FDIS15444-1 : 2000 (18 august 2000)  */
+             l_tl_prc_x_start = opj_int_floordivpow2(l_res->x0, (OPJ_INT32)l_pdx) << l_pdx;
+             l_tl_prc_y_start = opj_int_floordivpow2(l_res->y0, (OPJ_INT32)l_pdy) << l_pdy;
+-            l_br_prc_x_end = opj_int_ceildivpow2(l_res->x1, (OPJ_INT32)l_pdx) << l_pdx;
+-            l_br_prc_y_end = opj_int_ceildivpow2(l_res->y1, (OPJ_INT32)l_pdy) << l_pdy;
++            {
++                OPJ_UINT32 tmp = ((OPJ_UINT32)opj_int_ceildivpow2(l_res->x1,
++                                  (OPJ_INT32)l_pdx)) << l_pdx;
++                if (tmp > (OPJ_UINT32)INT_MAX) {
++                    opj_event_msg(manager, EVT_ERROR, "Integer overflow\n");
++                    return OPJ_FALSE;
++                }
++                l_br_prc_x_end = (OPJ_INT32)tmp;
++            }
++            {
++                OPJ_UINT32 tmp = ((OPJ_UINT32)opj_int_ceildivpow2(l_res->y1,
++                                  (OPJ_INT32)l_pdy)) << l_pdy;
++                if (tmp > (OPJ_UINT32)INT_MAX) {
++                    opj_event_msg(manager, EVT_ERROR, "Integer overflow\n");
++                    return OPJ_FALSE;
++                }
++                l_br_prc_y_end = (OPJ_INT32)tmp;
++            }
+             /*fprintf(stderr, "\t\t\tprc_x_start=%d, prc_y_start=%d, br_prc_x_end=%d, br_prc_y_end=%d \n", l_tl_prc_x_start, l_tl_prc_y_start, l_br_prc_x_end ,l_br_prc_y_end );*/
+ 
+             l_res->pw = (l_res->x0 == l_res->x1) ? 0U : (OPJ_UINT32)((
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb
index ffd4099..42011ef 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.3.1.bb
@@ -8,6 +8,8 @@
 SRC_URI = " \
     git://github.com/uclouvain/openjpeg.git \
     file://0002-Do-not-ask-cmake-to-export-binaries-they-don-t-make-.patch \
+    file://CVE-2020-6851.patch \
+    file://CVE-2020-8112.patch \
 "
 SRCREV = "57096325457f96d8cd07bd3af04fe81d7a2ba788"
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.42.0.bb b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.42.1.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.42.0.bb
rename to meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.42.1.bb
index 35e71ab..57d9ff9 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.42.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.42.1.bb
@@ -9,8 +9,8 @@
 SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
 
 SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/pangomm/${SHRT_VER}/pangomm-${PV}.tar.xz"
-SRC_URI[md5sum] = "6cffedf2225c4e72645a7d757fb5b832"
-SRC_URI[sha256sum] = "ca6da067ff93a6445780c0b4b226eb84f484ab104b8391fb744a45cbc7edbf56"
+SRC_URI[md5sum] = "339c48dd92ebd3a9911b231708f7a819"
+SRC_URI[sha256sum] = "14bf04939930870d5cfa96860ed953ad2ce07c3fd8713add4a1bfe585589f40f"
 
 inherit features_check autotools pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/renderdoc/renderdoc_1.5.bb b/meta-openembedded/meta-oe/recipes-graphics/renderdoc/renderdoc_1.7.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-graphics/renderdoc/renderdoc_1.5.bb
rename to meta-openembedded/meta-oe/recipes-graphics/renderdoc/renderdoc_1.7.bb
index 5f81e84..6ea632d 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/renderdoc/renderdoc_1.5.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/renderdoc/renderdoc_1.7.bb
@@ -2,9 +2,9 @@
 DESCRIPTION = "RenderDoc is a frame-capture based graphics debugger"
 HOMEPAGE = "https://github.com/baldurk/renderdoc"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=9753b1b4fba3261c27d1ce5c1acef667"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=df7ea9e196efc7014c124747a0ef9772"
 
-SRCREV = "a94f238e37cfe2f142093eb8e5da7775abaa88c6"
+SRCREV = "a56af589d94dc851809fd5344d0ae441da70c1f2"
 SRC_URI = "git://github.com/baldurk/${BPN}.git;protocol=http;branch=v1.x \
 	   file://0001-renderdoc-use-xxd-instead-of-cross-compiling-shim-bi.patch \
 	   file://0001-Remove-glslang-pool_allocator-setAllocator.patch \
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.10.1.bb b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.10.1.bb
index 1693779..f97c2b2 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.10.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/tigervnc/tigervnc_1.10.1.bb
@@ -3,7 +3,7 @@
 LICENSE = "GPLv2+"
 SECTION = "x11/utils"
 DEPENDS = "xserver-xorg gnutls jpeg libxtst gettext-native fltk"
-RDEPENDS_${PN} = "chkconfig coreutils hicolor-icon-theme perl"
+RDEPENDS_${PN} = "coreutils hicolor-icon-theme perl"
 
 LIC_FILES_CHKSUM = "file://LICENCE.TXT;md5=75b02c2872421380bbd47781d2bd75d3"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/0001-Fix-build-error-with-input_event_sec-for-old-kernel.patch b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/0001-Fix-build-error-with-input_event_sec-for-old-kernel.patch
new file mode 100644
index 0000000..ea8a9e5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib/0001-Fix-build-error-with-input_event_sec-for-old-kernel.patch
@@ -0,0 +1,30 @@
+From 050bf24c16e95f63a76e13156346a072035d45b4 Mon Sep 17 00:00:00 2001
+From: Evan Harvey <evanwork1234@gmail.com>
+Date: Thu, 19 Mar 2020 01:32:03 -0700
+Subject: [PATCH] Fix build error with input_event_sec for old kernel
+
+Upstream-Status: Backport [https://github.com/libts/tslib/commit/050bf24c16e95f63a76e13156346a072035d45b4]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/ts_uinput.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/tools/ts_uinput.c b/tools/ts_uinput.c
+index 1832a07..9c40bb3 100644
+--- a/tools/ts_uinput.c
++++ b/tools/ts_uinput.c
+@@ -51,6 +51,11 @@
+ #include <linux/fb.h>
+ #endif
+ 
++#ifndef input_event_sec
++#define input_event_sec time.tv_sec
++#define input_event_usec time.tv_usec
++#endif
++
+ #define RESET   "\033[0m"
+ #define RED     "\033[31m"
+ #define GREEN   "\033[32m"
+-- 
+2.26.2
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.21.bb b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.21.bb
index bb28ee4..76c4231 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.21.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/tslib/tslib_1.21.bb
@@ -15,6 +15,7 @@
 
 SRC_URI = "https://github.com/kergoth/tslib/releases/download/${PV}/tslib-${PV}.tar.xz;downloadfilename=tslib-${PV}.tar.xz \
            file://0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch \
+           file://0001-Fix-build-error-with-input_event_sec-for-old-kernel.patch \
            file://ts.conf \
            file://tslib.sh \
 "
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.0.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.1.bb
similarity index 68%
rename from meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.0.bb
rename to meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.1.bb
index bd552c0..4df0c3a 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-hunkyfonts_0.3.1.bb
@@ -3,7 +3,7 @@
 SUMMARY = "Hunky fonts - TTF Version"
 HOMEPAGE = "http://sourceforge.net/projects/hunkyfonts"
 LICENSE = "LGPL-2.1+"
-LIC_FILES_CHKSUM = "file://../LICENSE;md5=7fbc338309ac38fefcd64b04bb903e34"
+LIC_FILES_CHKSUM = "file://../COPYRIGHT.TXT;md5=70d34478e38b1ad9995079f9921f9ef7"
 PR = "r7"
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/hunkyfonts/hunkyfonts-${PV}.tar.bz2"
@@ -16,5 +16,5 @@
 FILES_ttf-hunky-sans = "${datadir}/fonts/truetype/HunkySans*.ttf"
 FILES_ttf-hunky-serif = "${datadir}/fonts/truetype/HunkySerif*.ttf"
 
-SRC_URI[md5sum] = "36444795a356fb8a56c63b2840729bab"
-SRC_URI[sha256sum] = "e0b1849c545b6af276407d93025c73094dd74fc259b07c1d91594fdbb9a0b829"
+SRC_URI[md5sum] = "b933312967842e5737b5415fa22d682a"
+SRC_URI[sha256sum] = "3fc528737ccd12ec3c09c4a91447d241d3c5bceeeb4d24b7f2c29b15c9735328"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb
index 20041bb..bf32fed 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-inconsolata_20100526.bb
@@ -14,7 +14,7 @@
     ${datadir}/doc/ttf-inconsolata/*"
 
 do_configure() {
-    mv ${WORKDIR}/Inconsolata.otf ${S}/Inconsolata.ttf
+    cp -fr ${WORKDIR}/Inconsolata.otf ${S}/Inconsolata.ttf
 }
 
 do_install_append() {
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb
index f9679d6..0af0e91 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-lohit_2.bb
@@ -15,7 +15,7 @@
 FONT_PACKAGES = "${PN}"
 FILES_${PN} = "${datadir}"
 
-inherit pythonnative
+inherit python3native
 
 do_compile() {
     cd ${S}; make ttf;
diff --git a/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-noto-emoji_20190815.bb b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-noto-emoji_20190815.bb
new file mode 100644
index 0000000..e74f7a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-noto-emoji_20190815.bb
@@ -0,0 +1,19 @@
+require ttf.inc
+
+SUMMARY = "Google noto emoji font pack"
+HOMEPAGE = "https://github.com/googlefonts/noto-emoji"
+LICENSE = "OFL-1.1"
+LIC_FILES_CHKSUM = "file://fonts/LICENSE;md5=55719faa0112708e946b820b24b14097"
+
+SRC_URI = "git://github.com/googlefonts/noto-emoji;protocol=https"
+SRCREV = "833a43d03246a9325e748a2d783006454d76ff66"
+
+PACKAGES = "${PN}-color ${PN}-regular"
+FONT_PACKAGES = "${PN}-color ${PN}-regular"
+
+S = "${WORKDIR}/git"
+
+FILES_${PN}-color = "${datadir}/fonts/truetype/NotoColorEmoji.ttf"
+FILES_${PN}-regular = "${datadir}/fonts/truetype/NotoEmoji-Regular.ttf"
+
+do_compile[noexec] = "1"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb b/meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb
index aeae071..259c640 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xdotool/xdotool_1.20100416.2809.bb
@@ -7,7 +7,7 @@
 
 PR = "r1"
 
-inherit features_check pkgconfig
+inherit features_check pkgconfig perlnative
 # depends on virtual/libx11
 REQUIRED_DISTRO_FEATURES = "x11"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_351.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_353.bb
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_351.bb
rename to meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_353.bb
index 40ee555..6de704d 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_351.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_353.bb
@@ -2,14 +2,14 @@
 SUMMARY = "xterm is the standard terminal emulator for the X Window System"
 DEPENDS = "libxaw xorgproto libxext libxau libxinerama libxpm ncurses"
 
-LIC_FILES_CHKSUM = "file://xterm.h;beginline=3;endline=31;md5=c7faceb872d90115e7c0ad90e90c390d"
+LIC_FILES_CHKSUM = "file://xterm.h;beginline=3;endline=31;md5=996b1ce0584c0747b17b57654cc81e8e"
 
 SRC_URI = "http://invisible-mirror.net/archives/${BPN}/${BP}.tgz \
            file://0001-Add-configure-time-check-for-setsid.patch \
           "
 
-SRC_URI[md5sum] = "a07edfbee2e2f4c6a9ddbf834fa4bbec"
-SRC_URI[sha256sum] = "760a8a10221c9c9744afd86db87c7ad95bbf9be4f5f525fecf39125f0d2a6e16"
+SRC_URI[md5sum] = "247c30ebfa44623f3a2d100e0cae5c7f"
+SRC_URI[sha256sum] = "e521d3ee9def61f5d5c911afc74dd5c3a56ce147c7071c74023ea24cac9bb768"
 PACKAGECONFIG ?= ""
 PACKAGECONFIG[xft] = "--enable-freetype,--disable-freetype,libxft fontconfig freetype-native"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/xcb-util-cursor_0.1.3.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/xcb-util-cursor_0.1.3.bb
new file mode 100644
index 0000000..f935edd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-lib/xcb-util-cursor_0.1.3.bb
@@ -0,0 +1,11 @@
+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[md5sum] = "6ac3b17cba51aaaa36ba035a53527214"
+SRC_URI[sha256sum] = "05a10a0706a1a789a078be297b5fb663f66a71fb7f7f1b99658264c35926394f"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/yad/yad_5.0.bb b/meta-openembedded/meta-oe/recipes-graphics/yad/yad_6.0.bb
similarity index 76%
rename from meta-openembedded/meta-oe/recipes-graphics/yad/yad_5.0.bb
rename to meta-openembedded/meta-oe/recipes-graphics/yad/yad_6.0.bb
index e53c04b..3760a37 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/yad/yad_5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/yad/yad_6.0.bb
@@ -6,9 +6,11 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
 
 SRC_URI = "git://github.com/v1cont/yad.git"
-SRCREV = "c8eac89cc20d915cb5ed185f423091a291c8af24"
+SRCREV = "a5b1a7a3867bc7dffbbc539f586f301687b6ec02"
 
-inherit autotools gsettings
+inherit autotools gsettings features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
 
 DEPENDS = "gtk+3 glib-2.0-native intltool-native"
 
diff --git a/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.7.bb b/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.8.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.7.bb
rename to meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.8.bb
index 8098d09..834c92c 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.7.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/crash/crash_7.2.8.bb
@@ -10,7 +10,7 @@
 LICENSE = "GPLv3"
 LIC_FILES_CHKSUM = "file://COPYING3;md5=d32239bcb673463ab874e80d47fae504"
 
-DEPENDS = "zlib readline coreutils-native"
+DEPENDS = "zlib readline coreutils-native ncurses-native"
 
 S = "${WORKDIR}/git"
 SRC_URI = "git://github.com/crash-utility/${BPN}.git \
@@ -26,7 +26,7 @@
            file://0002-crash-fix-build-error-unknown-type-name-gdb_fpregset.patch \
            file://0003-crash-detect-the-sysroot-s-glibc-header-file.patch \
            "
-SRCREV = "5b0e3777ccbb571678791903e93446ccd0aba03a"
+SRCREV = "24f4801f8c8871a2e3e660fe9fa8fdd86bb29876"
 
 SRC_URI[gdb.md5sum] = "a9836707337e5f7bf76a009a8904f470"
 SRC_URI[gdb.sha256sum] = "8070389a5dcc104eb0be483d582729f98ed4d761ad19cedd3f17b5d2502faa36"
@@ -38,8 +38,12 @@
 BBCLASSEXTEND = "native cross"
 TARGET_CC_ARCH_append = " ${SELECTED_OPTIMIZATION}"
 
-# crash 7.1.3 and before don't support mips64
-COMPATIBLE_HOST = "^(?!mips64).*"
+# crash 7.1.3 and before don't support mips64/riscv64
+COMPATIBLE_HOST_riscv64 = "null"
+COMPATIBLE_HOST_riscv32 = "null"
+COMPATIBLE_HOST_mipsarchn64 = "null"
+COMPATIBLE_HOST_mipsarchn32 = "null"
+
 
 EXTRA_OEMAKE = 'RPMPKG="${PV}" \
                 GDB_TARGET="${TARGET_SYS}" \
@@ -49,9 +53,7 @@
                 '
 
 EXTRA_OEMAKE_class-cross = 'RPMPKG="${PV}" \
-                            GDB_TARGET="${BUILD_SYS} \
-                                        \${GDB_CONF_FLAGS} \
-                                        --target=${TARGET_SYS}" \
+                            GDB_TARGET="${BUILD_SYS} --target=${TARGET_SYS}" \
                             GDB_HOST="${BUILD_SYS}" \
                             GDB_MAKE_JOBS="${PARALLEL_MAKE}" \
                             '
@@ -59,10 +61,6 @@
 EXTRA_OEMAKE_append_class-native = " LDFLAGS='${BUILD_LDFLAGS}'"
 EXTRA_OEMAKE_append_class-cross = " LDFLAGS='${BUILD_LDFLAGS}'"
 
-REMOVE_M32 = "sed -i -e 's/#define TARGET_CFLAGS_ARM_ON_X86_64.*/#define TARGET_CFLAGS_ARM_ON_X86_64\t\"TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64\"/g' ${S}/configure.c"
-
-REMOVE_M32_class-cross = ""
-
 do_configure() {
     :
 }
@@ -79,7 +77,7 @@
     esac
 
     sed -i s/FORCE_DEFINE_ARCH/"${ARCH}"/g ${S}/configure.c
-    ${REMOVE_M32}
+    sed -i -e 's/#define TARGET_CFLAGS_ARM_ON_X86_64.*/#define TARGET_CFLAGS_ARM_ON_X86_64\t\"TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64\"/g' ${S}/configure.c
     sed -i 's/&gt;/>/g' ${S}/Makefile
 }
 
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch
new file mode 100644
index 0000000..eadfb7e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch
@@ -0,0 +1,53 @@
+From 24aed93efb30a8f557aedc2f03b6ccec758ccbf4 Mon Sep 17 00:00:00 2001
+From: Chrostoper Ertl <chertl@microsoft.com>
+Date: Thu, 28 Nov 2019 16:44:18 +0000
+Subject: [PATCH 1/5] fru: Fix buffer overflow in ipmi_spd_print_fru
+
+Partial fix for CVE-2020-5208, see
+https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp
+
+The `ipmi_spd_print_fru` function has a similar issue as the one fixed
+by the previous commit in `read_fru_area_section`. An initial request is
+made to get the `fru.size`, which is used as the size for the allocation
+of `spd_data`. Inside a loop, further requests are performed to get the
+copy sizes which are not checked before being used as the size for a
+copy into the buffer.
+
+Upstream-Status: Backport[https://github.com/ipmitool/ipmitool/commit/840fb1cbb4fb365cb9797300e3374d4faefcdb10]
+CVE: CVE-2020-5208
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ lib/dimm_spd.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/lib/dimm_spd.c b/lib/dimm_spd.c
+index 91ae117..4c9c21d 100644
+--- a/lib/dimm_spd.c
++++ b/lib/dimm_spd.c
+@@ -1014,7 +1014,7 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id)
+ 	struct ipmi_rq req;
+ 	struct fru_info fru;
+ 	uint8_t *spd_data, msg_data[4];
+-	int len, offset;
++	uint32_t len, offset;
+ 
+ 	msg_data[0] = id;
+ 
+@@ -1091,6 +1091,13 @@ ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id)
+ 		}
+ 
+ 		len = rsp->data[0];
++		if(rsp->data_len < 1
++		   || len > rsp->data_len - 1
++		   || len > fru.size - offset)
++		{
++			printf(" Not enough buffer size");
++			return -1;
++		}
+ 		memcpy(&spd_data[offset], rsp->data + 1, len);
+ 		offset += len;
+ 	} while (offset < fru.size);
+-- 
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-fru-Fix-buffer-overflow-vulnerabilities.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-fru-Fix-buffer-overflow-vulnerabilities.patch
new file mode 100644
index 0000000..b65e3ef
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-fru-Fix-buffer-overflow-vulnerabilities.patch
@@ -0,0 +1,133 @@
+From e824c23316ae50beb7f7488f2055ac65e8b341f2 Mon Sep 17 00:00:00 2001
+From: Chrostoper Ertl <chertl@microsoft.com>
+Date: Thu, 28 Nov 2019 16:33:59 +0000
+Subject: [PATCH] fru: Fix buffer overflow vulnerabilities
+
+Partial fix for CVE-2020-5208, see
+https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp
+
+The `read_fru_area_section` function only performs size validation of
+requested read size, and falsely assumes that the IPMI message will not
+respond with more than the requested amount of data; it uses the
+unvalidated response size to copy into `frubuf`. If the response is
+larger than the request, this can result in overflowing the buffer.
+
+The same issue affects the `read_fru_area` function.
+
+Upstream-Status: Backport[https://github.com/ipmitool/ipmitool/commit/e824c23316ae50beb7f7488f2055ac65e8b341f2]
+CVE: CVE-2020-5208
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ lib/ipmi_fru.c | 33 +++++++++++++++++++++++++++++++--
+ 1 file changed, 31 insertions(+), 2 deletions(-)
+
+diff --git a/lib/ipmi_fru.c b/lib/ipmi_fru.c
+index c2a139d..2e323ff 100644
+--- a/lib/ipmi_fru.c
++++ b/lib/ipmi_fru.c
+@@ -663,7 +663,10 @@ int
+ read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 			uint32_t offset, uint32_t length, uint8_t *frubuf)
+ {
+-	uint32_t off = offset, tmp, finish;
++	uint32_t off = offset;
++	uint32_t tmp;
++	uint32_t finish;
++	uint32_t size_left_in_buffer;
+ 	struct ipmi_rs * rsp;
+ 	struct ipmi_rq req;
+ 	uint8_t msg_data[4];
+@@ -676,10 +679,12 @@ read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 
+ 	finish = offset + length;
+ 	if (finish > fru->size) {
++		memset(frubuf + fru->size, 0, length - fru->size);
+ 		finish = fru->size;
+ 		lprintf(LOG_NOTICE, "Read FRU Area length %d too large, "
+ 			"Adjusting to %d",
+ 			offset + length, finish - offset);
++		length = finish - offset;
+ 	}
+ 
+ 	memset(&req, 0, sizeof(req));
+@@ -715,6 +720,7 @@ read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 		}
+ 	}
+ 
++	size_left_in_buffer = length;
+ 	do {
+ 		tmp = fru->access ? off >> 1 : off;
+ 		msg_data[0] = id;
+@@ -756,9 +762,18 @@ read_fru_area(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 		}
+ 
+ 		tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0];
++		if(rsp->data_len < 1
++		   || tmp > rsp->data_len - 1
++		   || tmp > size_left_in_buffer)
++		{
++			printf(" Not enough buffer size");
++			return -1;
++		}
++
+ 		memcpy(frubuf, rsp->data + 1, tmp);
+ 		off += tmp;
+ 		frubuf += tmp;
++		size_left_in_buffer -= tmp;
+ 		/* sometimes the size returned in the Info command
+ 		* is too large.  return 0 so higher level function
+ 		* still attempts to parse what was returned */
+@@ -791,7 +806,9 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 			uint32_t offset, uint32_t length, uint8_t *frubuf)
+ {
+ 	static uint32_t fru_data_rqst_size = 20;
+-	uint32_t off = offset, tmp, finish;
++	uint32_t off = offset;
++	uint32_t tmp, finish;
++	uint32_t size_left_in_buffer;
+ 	struct ipmi_rs * rsp;
+ 	struct ipmi_rq req;
+ 	uint8_t msg_data[4];
+@@ -804,10 +821,12 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 
+ 	finish = offset + length;
+ 	if (finish > fru->size) {
++		memset(frubuf + fru->size, 0, length - fru->size);
+ 		finish = fru->size;
+ 		lprintf(LOG_NOTICE, "Read FRU Area length %d too large, "
+ 			"Adjusting to %d",
+ 			offset + length, finish - offset);
++		length = finish - offset;
+ 	}
+ 
+ 	memset(&req, 0, sizeof(req));
+@@ -822,6 +841,8 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 	if (fru->access && fru_data_rqst_size > 16)
+ #endif
+ 		fru_data_rqst_size = 16;
++
++	size_left_in_buffer = length;
+ 	do {
+ 		tmp = fru->access ? off >> 1 : off;
+ 		msg_data[0] = id;
+@@ -853,8 +874,16 @@ read_fru_area_section(struct ipmi_intf * intf, struct fru_info *fru, uint8_t id,
+ 		}
+ 
+ 		tmp = fru->access ? rsp->data[0] << 1 : rsp->data[0];
++		if(rsp->data_len < 1
++		   || tmp > rsp->data_len - 1
++		   || tmp > size_left_in_buffer)
++		{
++			printf(" Not enough buffer size");
++			return -1;
++		}
+ 		memcpy((frubuf + off)-offset, rsp->data + 1, tmp);
+ 		off += tmp;
++		size_left_in_buffer -= tmp;
+ 
+ 		/* sometimes the size returned in the Info command
+ 		* is too large.  return 0 so higher level function
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0002-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0002-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch
new file mode 100644
index 0000000..b8742b1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0002-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch
@@ -0,0 +1,53 @@
+From 81144cfba131b4ddbfcf9c530274b23bfc7e0ea8 Mon Sep 17 00:00:00 2001
+From: Chrostoper Ertl <chertl@microsoft.com>
+Date: Thu, 28 Nov 2019 16:51:49 +0000
+Subject: [PATCH 2/5] session: Fix buffer overflow in ipmi_get_session_info
+
+Partial fix for CVE-2020-5208, see
+https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp
+
+The `ipmi_get_session_info` function does not properly check the
+response `data_len`, which is used as a copy size, allowing stack buffer
+overflow.
+
+Upstream-Status: Backport[https://github.com/ipmitool/ipmitool/commit/41d7026946fafbd4d1ec0bcaca3ea30a6e8eed22]
+CVE: CVE-2020-5208
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ lib/ipmi_session.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/lib/ipmi_session.c b/lib/ipmi_session.c
+index 4855bc4..71bef4c 100644
+--- a/lib/ipmi_session.c
++++ b/lib/ipmi_session.c
+@@ -319,8 +319,10 @@ ipmi_get_session_info(struct ipmi_intf         * intf,
+ 		}
+ 		else
+ 		{
+-			memcpy(&session_info,  rsp->data, rsp->data_len);
+-			print_session_info(&session_info, rsp->data_len);
++			memcpy(&session_info,  rsp->data,
++			       __min(rsp->data_len, sizeof(session_info)));
++			print_session_info(&session_info,
++			                   __min(rsp->data_len, sizeof(session_info)));
+ 		}
+ 		break;
+ 		
+@@ -351,8 +353,10 @@ ipmi_get_session_info(struct ipmi_intf         * intf,
+ 				break;
+ 			}
+ 
+-			memcpy(&session_info,  rsp->data, rsp->data_len);
+-			print_session_info(&session_info, rsp->data_len);
++			memcpy(&session_info,  rsp->data,
++			       __min(rsp->data_len, sizeof(session_info)));
++			print_session_info(&session_info,
++			                   __min(rsp->data_len, sizeof(session_info)));
+ 			
+ 		} while (i <= session_info.session_slot_count);
+ 		break;
+-- 
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0003-channel-Fix-buffer-overflow.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0003-channel-Fix-buffer-overflow.patch
new file mode 100644
index 0000000..deebd35
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0003-channel-Fix-buffer-overflow.patch
@@ -0,0 +1,69 @@
+From 5057761e30e3a7682edab60f98f631616392ddc6 Mon Sep 17 00:00:00 2001
+From: Chrostoper Ertl <chertl@microsoft.com>
+Date: Thu, 28 Nov 2019 16:56:38 +0000
+Subject: [PATCH 3/3] channel: Fix buffer overflow
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Partial fix for CVE-2020-5208, see
+https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp
+
+The `ipmi_get_channel_cipher_suites` function does not properly check
+the final response’s `data_len`, which can lead to stack buffer overflow
+on the final copy.
+
+Upstream-Status: Backport[https://github.com/ipmitool/ipmitool/commit/9452be87181a6e83cfcc768b3ed8321763db50e4]
+CVE: CVE-2020-5208
+
+[Make some changes to apply it]
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ include/ipmitool/ipmi_channel.h |  2 ++
+ lib/ipmi_channel.c              | 10 ++++++++--
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/include/ipmitool/ipmi_channel.h b/include/ipmitool/ipmi_channel.h
+index b138c26..d7cce5e 100644
+--- a/include/ipmitool/ipmi_channel.h
++++ b/include/ipmitool/ipmi_channel.h
+@@ -77,6 +77,8 @@ struct channel_access_t {
+ 	uint8_t user_level_auth;
+ };
+ 
++#define MAX_CIPHER_SUITE_DATA_LEN 0x10
++
+ /*
+  * The Get Authentication Capabilities response structure
+  * From table 22-15 of the IPMI v2.0 spec
+diff --git a/lib/ipmi_channel.c b/lib/ipmi_channel.c
+index fab2e54..76ecdcd 100644
+--- a/lib/ipmi_channel.c
++++ b/lib/ipmi_channel.c
+@@ -378,7 +378,10 @@ ipmi_get_channel_cipher_suites(struct ipmi_intf *intf, const char *payload_type,
+ 		lprintf(LOG_ERR, "Unable to Get Channel Cipher Suites");
+ 		return -1;
+ 	}
+-	if (rsp->ccode > 0) {
++	if (rsp->ccode
++	    || rsp->data_len < 1
++	    || rsp->data_len > sizeof(uint8_t) + MAX_CIPHER_SUITE_DATA_LEN)
++	{
+ 		lprintf(LOG_ERR, "Get Channel Cipher Suites failed: %s",
+ 			val2str(rsp->ccode, completion_code_vals));
+ 		return -1;
+@@ -413,7 +416,10 @@ ipmi_get_channel_cipher_suites(struct ipmi_intf *intf, const char *payload_type,
+ 			lprintf(LOG_ERR, "Unable to Get Channel Cipher Suites");
+ 			return -1;
+ 		}
+-		if (rsp->ccode > 0) {
++		if (rsp->ccode
++		    || rsp->data_len < 1
++		    || rsp->data_len > sizeof(uint8_t) + MAX_CIPHER_SUITE_DATA_LEN)
++		{
+ 			lprintf(LOG_ERR, "Get Channel Cipher Suites failed: %s",
+ 					val2str(rsp->ccode, completion_code_vals));
+ 			return -1;
+-- 
+2.18.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0004-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0004-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch
new file mode 100644
index 0000000..b5ce9e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0004-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch
@@ -0,0 +1,94 @@
+From e6aa6076f65e71544bd6450d20d943d7baaccb9f Mon Sep 17 00:00:00 2001
+From: Chrostoper Ertl <chertl@microsoft.com>
+Date: Thu, 28 Nov 2019 17:06:39 +0000
+Subject: [PATCH 4/5] lanp: Fix buffer overflows in get_lan_param_select
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Partial fix for CVE-2020-5208, see
+https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp
+
+The `get_lan_param_select` function is missing a validation check on the
+response’s `data_len`, which it then returns to caller functions, where
+stack buffer overflow can occur.
+
+Upstream-Status: Backport[https://github.com/ipmitool/ipmitool/commit/d45572d71e70840e0d4c50bf48218492b79c1a10]
+CVE: CVE-2020-5208
+
+[Make some changes to apply it]
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ lib/ipmi_lanp.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/lib/ipmi_lanp.c b/lib/ipmi_lanp.c
+index 060e753..dee21ee 100644
+--- a/lib/ipmi_lanp.c
++++ b/lib/ipmi_lanp.c
+@@ -1917,7 +1917,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
+ 		if (p == NULL) {
+ 			return (-1);
+ 		}
+-		memcpy(data, p->data, p->data_len);
++		memcpy(data, p->data, __min(p->data_len, sizeof(data)));
+ 		/* set new ipaddr */
+ 		memcpy(data+3, temp, 4);
+ 		printf("Setting LAN Alert %d IP Address to %d.%d.%d.%d\n", alert,
+@@ -1932,7 +1932,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
+ 		if (p == NULL) {
+ 			return (-1);
+ 		}
+-		memcpy(data, p->data, p->data_len);
++		memcpy(data, p->data, __min(p->data_len, sizeof(data)));
+ 		/* set new macaddr */
+ 		memcpy(data+7, temp, 6);
+ 		printf("Setting LAN Alert %d MAC Address to "
+@@ -1947,7 +1947,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
+ 		if (p == NULL) {
+ 			return (-1);
+ 		}
+-		memcpy(data, p->data, p->data_len);
++		memcpy(data, p->data, __min(p->data_len, sizeof(data)));
+ 
+ 		if (strncasecmp(argv[1], "def", 3) == 0 ||
+ 		    strncasecmp(argv[1], "default", 7) == 0) {
+@@ -1973,7 +1973,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
+ 		if (p == NULL) {
+ 			return (-1);
+ 		}
+-		memcpy(data, p->data, p->data_len);
++		memcpy(data, p->data, __min(p->data_len, sizeof(data)));
+ 
+ 		if (strncasecmp(argv[1], "on", 2) == 0 ||
+ 		    strncasecmp(argv[1], "yes", 3) == 0) {
+@@ -1998,7 +1998,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
+ 		if (p == NULL) {
+ 			return (-1);
+ 		}
+-		memcpy(data, p->data, p->data_len);
++		memcpy(data, p->data, __min(p->data_len, sizeof(data)));
+ 
+ 		if (strncasecmp(argv[1], "pet", 3) == 0) {
+ 			printf("Setting LAN Alert %d destination to PET Trap\n", alert);
+@@ -2026,7 +2026,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
+ 		if (p == NULL) {
+ 			return (-1);
+ 		}
+-		memcpy(data, p->data, p->data_len);
++		memcpy(data, p->data, __min(p->data_len, sizeof(data)));
+ 
+ 		if (str2uchar(argv[1], &data[2]) != 0) {
+ 			lprintf(LOG_ERR, "Invalid time: %s", argv[1]);
+@@ -2042,7 +2042,7 @@ ipmi_lan_alert_set(struct ipmi_intf * intf, uint8_t chan, uint8_t alert,
+ 		if (p == NULL) {
+ 			return (-1);
+ 		}
+-		memcpy(data, p->data, p->data_len);
++		memcpy(data, p->data, __min(p->data_len, sizeof(data)));
+ 
+ 		if (str2uchar(argv[1], &data[3]) != 0) {
+ 			lprintf(LOG_ERR, "Invalid retry: %s", argv[1]);
+-- 
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0005-fru-sdr-Fix-id_string-buffer-overflows.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0005-fru-sdr-Fix-id_string-buffer-overflows.patch
new file mode 100644
index 0000000..cf8b925
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0005-fru-sdr-Fix-id_string-buffer-overflows.patch
@@ -0,0 +1,142 @@
+From 26e64ca78ae844c5ceedde89531e2924d7d4594c Mon Sep 17 00:00:00 2001
+From: Chrostoper Ertl <chertl@microsoft.com>
+Date: Thu, 28 Nov 2019 17:13:45 +0000
+Subject: [PATCH 5/5] fru, sdr: Fix id_string buffer overflows
+
+Final part of the fixes for CVE-2020-5208, see
+https://github.com/ipmitool/ipmitool/security/advisories/GHSA-g659-9qxw-p7cp
+
+9 variants of stack buffer overflow when parsing `id_string` field of
+SDR records returned from `CMD_GET_SDR` command.
+
+SDR record structs have an `id_code` field, and an `id_string` `char`
+array.
+
+The length of `id_string` is calculated as `(id_code & 0x1f) + 1`,
+which can be larger than expected 16 characters (if `id_code = 0xff`,
+then length will be `(0xff & 0x1f) + 1 = 32`).
+
+In numerous places, this can cause stack buffer overflow when copying
+into fixed buffer of size `17` bytes from this calculated length.
+
+Upstream-Status: Backport[https://github.com/ipmitool/ipmitool/commit/7ccea283dd62a05a320c1921e3d8d71a87772637]
+CVE: CVE-2020-5208
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ lib/ipmi_fru.c |  2 +-
+ lib/ipmi_sdr.c | 40 ++++++++++++++++++++++++----------------
+ 2 files changed, 25 insertions(+), 17 deletions(-)
+
+diff --git a/lib/ipmi_fru.c b/lib/ipmi_fru.c
+index b71ea23..1decea2 100644
+--- a/lib/ipmi_fru.c
++++ b/lib/ipmi_fru.c
+@@ -3038,7 +3038,7 @@ ipmi_fru_print(struct ipmi_intf * intf, struct sdr_record_fru_locator * fru)
+ 		return 0;
+ 
+ 	memset(desc, 0, sizeof(desc));
+-	memcpy(desc, fru->id_string, fru->id_code & 0x01f);
++	memcpy(desc, fru->id_string, __min(fru->id_code & 0x01f, sizeof(desc)));
+ 	desc[fru->id_code & 0x01f] = 0;
+ 	printf("FRU Device Description : %s (ID %d)\n", desc, fru->device_id);
+ 
+diff --git a/lib/ipmi_sdr.c b/lib/ipmi_sdr.c
+index fa7b082..175a86f 100644
+--- a/lib/ipmi_sdr.c
++++ b/lib/ipmi_sdr.c
+@@ -2113,7 +2113,7 @@ ipmi_sdr_print_sensor_eventonly(struct ipmi_intf *intf,
+ 		return -1;
+ 
+ 	memset(desc, 0, sizeof (desc));
+-	snprintf(desc, (sensor->id_code & 0x1f) + 1, "%s", sensor->id_string);
++	snprintf(desc, sizeof(desc), "%.*s", (sensor->id_code & 0x1f) + 1, sensor->id_string);
+ 
+ 	if (verbose) {
+ 		printf("Sensor ID              : %s (0x%x)\n",
+@@ -2164,7 +2164,7 @@ ipmi_sdr_print_sensor_mc_locator(struct ipmi_intf *intf,
+ 		return -1;
+ 
+ 	memset(desc, 0, sizeof (desc));
+-	snprintf(desc, (mc->id_code & 0x1f) + 1, "%s", mc->id_string);
++	snprintf(desc, sizeof(desc), "%.*s", (mc->id_code & 0x1f) + 1, mc->id_string);
+ 
+ 	if (verbose == 0) {
+ 		if (csv_output)
+@@ -2257,7 +2257,7 @@ ipmi_sdr_print_sensor_generic_locator(struct ipmi_intf *intf,
+ 	char desc[17];
+ 
+ 	memset(desc, 0, sizeof (desc));
+-	snprintf(desc, (dev->id_code & 0x1f) + 1, "%s", dev->id_string);
++	snprintf(desc, sizeof(desc), "%.*s", (dev->id_code & 0x1f) + 1, dev->id_string);
+ 
+ 	if (!verbose) {
+ 		if (csv_output)
+@@ -2314,7 +2314,7 @@ ipmi_sdr_print_sensor_fru_locator(struct ipmi_intf *intf,
+ 	char desc[17];
+ 
+ 	memset(desc, 0, sizeof (desc));
+-	snprintf(desc, (fru->id_code & 0x1f) + 1, "%s", fru->id_string);
++	snprintf(desc, sizeof(desc), "%.*s", (fru->id_code & 0x1f) + 1, fru->id_string);
+ 
+ 	if (!verbose) {
+ 		if (csv_output)
+@@ -2518,35 +2518,43 @@ ipmi_sdr_print_name_from_rawentry(struct ipmi_intf *intf,uint16_t id,
+ 
+    int rc =0;
+    char desc[17];
++   const char *id_string;
++   uint8_t id_code;
+    memset(desc, ' ', sizeof (desc));
+ 
+    switch ( type) {
+       case SDR_RECORD_TYPE_FULL_SENSOR:
+       record.full = (struct sdr_record_full_sensor *) raw;
+-      snprintf(desc, (record.full->id_code & 0x1f) +1, "%s",
+-               (const char *)record.full->id_string);
++      id_code = record.full->id_code;
++      id_string = record.full->id_string;
+       break;
++
+       case SDR_RECORD_TYPE_COMPACT_SENSOR:
+       record.compact = (struct sdr_record_compact_sensor *) raw	;
+-      snprintf(desc, (record.compact->id_code & 0x1f)  +1, "%s",
+-               (const char *)record.compact->id_string);
++      id_code = record.compact->id_code;
++      id_string = record.compact->id_string;
+       break;
++
+       case SDR_RECORD_TYPE_EVENTONLY_SENSOR:
+       record.eventonly  = (struct sdr_record_eventonly_sensor *) raw ;
+-      snprintf(desc, (record.eventonly->id_code & 0x1f)  +1, "%s",
+-               (const char *)record.eventonly->id_string);
+-      break;            
++      id_code = record.eventonly->id_code;
++      id_string = record.eventonly->id_string;
++      break;
++
+       case SDR_RECORD_TYPE_MC_DEVICE_LOCATOR:
+       record.mcloc  = (struct sdr_record_mc_locator *) raw ;
+-      snprintf(desc, (record.mcloc->id_code & 0x1f)  +1, "%s",
+-               (const char *)record.mcloc->id_string);		
++      id_code = record.mcloc->id_code;
++      id_string = record.mcloc->id_string;
+       break;
++
+       default:
+       rc = -1;
+-      break;
+-   }   
++   }
++   if (!rc) {
++       snprintf(desc, sizeof(desc), "%.*s", (id_code & 0x1f) + 1, id_string);
++   }
+ 
+-      lprintf(LOG_INFO, "ID: 0x%04x , NAME: %-16s", id, desc);
++   lprintf(LOG_INFO, "ID: 0x%04x , NAME: %-16s", id, desc);
+    return rc;
+ }
+ 
+-- 
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb
index b7f1aa9..3de9a92 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.18.bb
@@ -24,6 +24,12 @@
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/ipmitool/ipmitool-${PV}.tar.bz2 \
            file://0001-Migrate-to-openssl-1.1.patch \
+           file://0001-fru-Fix-buffer-overflow-vulnerabilities.patch \
+           file://0001-fru-Fix-buffer-overflow-in-ipmi_spd_print_fru.patch \
+           file://0002-session-Fix-buffer-overflow-in-ipmi_get_session_info.patch \
+           file://0003-channel-Fix-buffer-overflow.patch \
+           file://0004-lanp-Fix-buffer-overflows-in-get_lan_param_select.patch \
+           file://0005-fru-sdr-Fix-id_string-buffer-overflows.patch \
            "
 SRC_URI[md5sum] = "bab7ea104c7b85529c3ef65c54427aa3"
 SRC_URI[sha256sum] = "0c1ba3b1555edefb7c32ae8cd6a3e04322056bc087918f07189eeedfc8b81e01"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil/0001-Prevent-access-times-from-changing-resulting-gzip-md.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil/0001-Prevent-access-times-from-changing-resulting-gzip-md.patch
new file mode 100644
index 0000000..78c05ef
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil/0001-Prevent-access-times-from-changing-resulting-gzip-md.patch
@@ -0,0 +1,25 @@
+From da668e5bf1a721797361ab866d09913ee8e157c4 Mon Sep 17 00:00:00 2001
+From: Jeremy Puhlman <jpuhlman@mvista.com>
+Date: Sat, 22 Feb 2020 04:37:04 +0000
+Subject: [PATCH] Prevent access times from changing resulting gzip md5sum
+
+Upstream-Status: Pending
+https://github.com/ipmitool/ipmitool/pull/186
+---
+ doc/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index b792762..2c52ce6 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -59,5 +59,5 @@ install:
+ 	${INSTALL_DATA_SH} iuser.8 	 ${manto}
+ 	${INSTALL_DATA_SH} iseltime.8 	 ${manto}
+ 	${INSTALL_DATA_SH} bmclanpet.mib ${datato}
+-	cd ${manto}; gzip -f *.8
++	cd ${manto}; gzip -nf *.8
+ 	
+-- 
+2.13.3
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.1.5.bb b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.1.5.bb
index 3e26340..d0f3688 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.1.5.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmiutil/ipmiutil_3.1.5.bb
@@ -21,6 +21,7 @@
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/ipmiutil/ipmiutil-${PV}.tar.gz \
            file://fix_systemd_path.patch \
+           file://0001-Prevent-access-times-from-changing-resulting-gzip-md.patch \
           "
 SRC_URI[md5sum] = "292d6df25cad678bb27e5c8cdc6748f9"
 SRC_URI[sha256sum] = "58ccdbd5755d7dd72478756715af09e9c73330dfad2b91dbf03d2ac504b301a3"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb b/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
index 02c56be..3687c26 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/kernel-selftest/kernel-selftest.bb
@@ -18,11 +18,16 @@
 # we will append other kernel selftest in the future
 # bpf was added in 4.10 with: https://github.com/torvalds/linux/commit/5aa5bd14c5f8660c64ceedf14a549781be47e53d
 # if you have older kernel than that you need to remove it from PACKAGECONFIG
-PACKAGECONFIG ??= "bpf vm"
+PACKAGECONFIG ??= "bpf firmware vm"
 PACKAGECONFIG_remove_x86 = "bpf"
 PACKAGECONFIG_remove_arm = "bpf"
+# host ptrace.h is used to compile BPF target but mips ptrace.h is needed
+# progs/loop1.c:21:9: error: incomplete definition of type 'struct user_pt_regs'
+# m = PT_REGS_RC(ctx);
+PACKAGECONFIG_remove_qemumips = "bpf"
 
 PACKAGECONFIG[bpf] = ",,elfutils libcap libcap-ng rsync-native,"
+PACKAGECONFIG[firmware] = ",,libcap, bash"
 PACKAGECONFIG[vm] = ",,libcap,libgcc bash"
 
 do_patch[depends] += "virtual/kernel:do_shared_workdir"
@@ -32,7 +37,7 @@
 S = "${WORKDIR}/${BP}"
 
 TEST_LIST = "\
-    ${@bb.utils.filter('PACKAGECONFIG', 'bpf vm', d)} \
+    ${@bb.utils.filter('PACKAGECONFIG', 'bpf firmware vm', d)} \
     rtc \
 "
 
@@ -40,7 +45,7 @@
     CROSS_COMPILE=${TARGET_PREFIX} \
     ARCH=${ARCH} \
     CC="${CC}" \
-    CLANG="clang -fno-stack-protector" \
+    CLANG="clang -fno-stack-protector -target ${TARGET_ARCH} ${TOOLCHAIN_OPTIONS}" \
     AR="${AR}" \
     LD="${LD}" \
     DESTDIR="${D}" \
@@ -55,10 +60,13 @@
 "
 
 do_compile() {
+    if [ ${@bb.utils.contains('PACKAGECONFIG', 'bpf', 'True', 'False', d)} = 'True' ]; then
     if [ ${@bb.utils.contains('DEPENDS', 'clang-native', 'True', 'False', d)} = 'False' ]; then
         bbwarn "clang >= 6.0 with bpf support is needed with kernel 4.18+ so
 either install it and add it to HOSTTOOLS, or add clang-native from meta-clang to dependency"
     fi
+    fi
+
     for i in ${TEST_LIST}
     do
         oe_runmake -C ${S}/tools/testing/selftests/${i}
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch
index 603a147..0cc3684 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch
+++ b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch/0002-kpatch-build-allow-overriding-of-distro-name.patch
@@ -48,10 +48,10 @@
  	--skip-cleanup)
  		echo "Skipping cleanup"
  		SKIPCLEANUP=1
-@@ -571,7 +576,7 @@ fi
+@@ -613,7 +613,7 @@ fi
  # Don't check external file.
- # shellcheck disable=SC1091
- source /etc/os-release
+ # shellcheck disable=SC1090
+ [[ -f "$RELEASE_FILE" ]] && source "$RELEASE_FILE"
 -DISTRO="$ID"
 +DISTRO="${DISTRO:-${ID}}"
  if [[ "$DISTRO" = fedora ]] || [[ "$DISTRO" = rhel ]] || [[ "$DISTRO" = ol ]] || [[ "$DISTRO" = centos ]]; then
diff --git a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb
index 6326a25..ba3983e 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/kpatch/kpatch_git.bb
@@ -2,9 +2,9 @@
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
 
-SRCREV = "2a29bc7dea9a7da12705c7b50315eee1acdd9156"
+SRCREV = "0c3c21930895f6582a5c9d9d797f7e11ff41ffb2"
 
-PV = "0.8.0"
+PV = "0.9.1"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-kernel/libpfm/libpfm4_4.10.1.bb b/meta-openembedded/meta-oe/recipes-kernel/libpfm/libpfm4_4.10.1.bb
index 9b43b4a..ff56d48 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/libpfm/libpfm4_4.10.1.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/libpfm/libpfm4_4.10.1.bb
@@ -23,6 +23,7 @@
 EXTRA_OEMAKE = "DESTDIR=\"${D}\" PREFIX=\"${prefix}\" LIBDIR=\"${libdir}\" LDCONFIG=\"true\""
 EXTRA_OEMAKE_append_powerpc = " ARCH=\"powerpc\""
 EXTRA_OEMAKE_append_powerpc64 = " ARCH=\"powerpc\" BITMODE=\"64\""
+EXTRA_OEMAKE_append_powerpc64le = " ARCH=\"powerpc\" BITMODE=\"64\""
 
 S = "${WORKDIR}/libpfm-${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch
index c0f82f3..ff093a7 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch
+++ b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0001-makedumpfile-replace-hardcode-CFLAGS.patch
@@ -83,7 +83,7 @@
  OBJ_PART=$(patsubst %.c,%.o,$(SRC_PART))
 @@ -52,17 +53,17 @@ OBJ_ARCH=$(patsubst %.c,%.o,$(SRC_ARCH))
  
- LIBS = -ldw -lbz2 -lebl -ldl -lelf -lz
+ LIBS = -ldw -lbz2 -ldl -lelf -lz
  ifneq ($(LINKTYPE), dynamic)
 -LIBS := -static $(LIBS)
 +LIBS := $(LIBS)
@@ -102,7 +102,7 @@
  endif
  
  LIBS := -lpthread $(LIBS)
-@@ -82,14 +83,14 @@ LIBS := $(LIBS) $(call try-run,\
+@@ -87,14 +88,14 @@ LIBS := $(LIBS) $(call try-run,\
  all: makedumpfile
  
  $(OBJ_PART): $(SRC_PART)
@@ -119,7 +119,7 @@
  	echo .TH MAKEDUMPFILE 8 \"$(DATE)\" \"makedumpfile v$(VERSION)\" \"Linux System Administrator\'s Manual\" > temp.8
  	grep -v "^.TH MAKEDUMPFILE 8" $(VPATH)makedumpfile.8 >> temp.8
  	mv temp.8 makedumpfile.8
-@@ -100,7 +101,7 @@ makedumpfile: $(SRC_BASE) $(OBJ_PART) $(OBJ_ARCH)
+@@ -105,7 +106,7 @@ makedumpfile: $(SRC_BASE) $(OBJ_PART) $(OBJ_ARCH)
  	gzip -c ./makedumpfile.conf.5 > ./makedumpfile.conf.5.gz
  
  eppic_makedumpfile.so: extension_eppic.c
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0003-build-Delete-libebl-from-required-libraries-during-l.patch b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0003-build-Delete-libebl-from-required-libraries-during-l.patch
deleted file mode 100644
index 4095643..0000000
--- a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile/0003-build-Delete-libebl-from-required-libraries-during-l.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 460851c15e807d1a2515dfb985423f8a6624f4aa Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 8 Jan 2020 19:14:19 -0800
-Subject: [PATCH 3/3] build: Delete libebl from required libraries during link
-
-This is a static library from elfutils, which is not made available when
-static archives are disabled, this can result in link failures e.g.
-
-aarch64-yoe-linux-musl/9.2.0/ld: cannot find -lebl
-collect2: error: ld returned 1 exit status
-Makefile:93: recipe for target 'makedumpfile' failed
-
-Upstream-Status: Pending
-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 5dce589..c3a4054 100644
---- a/Makefile
-+++ b/Makefile
-@@ -51,7 +51,7 @@ OBJ_PART=$(patsubst %.c,%.o,$(SRC_PART))
- SRC_ARCH = arch/arm.c arch/arm64.c arch/x86.c arch/x86_64.c arch/ia64.c arch/ppc64.c arch/s390x.c arch/ppc.c arch/sparc64.c
- OBJ_ARCH=$(patsubst %.c,%.o,$(SRC_ARCH))
- 
--LIBS = -ldw -lbz2 -lebl -ldl -lelf -lz
-+LIBS = -ldw -lbz2 -ldl -lelf -lz
- ifneq ($(LINKTYPE), dynamic)
- LIBS := $(LIBS)
- endif
--- 
-2.24.1
-
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.6.bb b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.7.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.6.bb
rename to meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.7.bb
index 6924e39..8d1676a 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.6.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.6.7.bb
@@ -24,10 +24,9 @@
     ${SOURCEFORGE_MIRROR}/makedumpfile/${BPN}-${PV}.tar.gz \
     file://0001-makedumpfile-replace-hardcode-CFLAGS.patch \
     file://0002-mem_section-Support-only-46-bit-for-MAX_PHYSMEM_BITS.patch \
-    file://0003-build-Delete-libebl-from-required-libraries-during-l.patch \
 "
-SRC_URI[md5sum] = "6fd632b97ad78d9a0a3b0f0989094064"
-SRC_URI[sha256sum] = "d007eec05cb14f0155f2d06a0d4dc70d321dbb2aec65fccdce953145c8230324"
+SRC_URI[md5sum] = "808ef840ca49ca6bfde77c097cf429f5"
+SRC_URI[sha256sum] = "e702fbdf62b4cd829a76e46f3e24eb3fc7501918b85ebdcd8baef4f53d6ee2c8"
 
 UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/makedumpfile/files/makedumpfile/"
 UPSTREAM_CHECK_REGEX = "makedumpfile/(?P<pver>\d+(\.\d+)+)/"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc
index a9ee775..0e1e2ed 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile.inc
@@ -25,6 +25,7 @@
            file://root-home-dir.patch \
            file://0001-Add-rmb-definition-for-NIOS2-architecture.patch \
            file://0001-replace-sym_iterator-0-with-sym_iterator.patch \
+           file://0001-Use-new-bfd-APIs-from-2.34.patch \
 "
 UPSTREAM_CHECK_REGEX = "oprofile-(?P<pver>\d+(\.\d+)+)/"
 UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/oprofile/files/oprofile/"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Use-new-bfd-APIs-from-2.34.patch b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Use-new-bfd-APIs-from-2.34.patch
new file mode 100644
index 0000000..faf56d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile/0001-Use-new-bfd-APIs-from-2.34.patch
@@ -0,0 +1,79 @@
+From 34745fb066a266ae6bbb15d08466d4d2cb6a2110 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Feb 2020 08:11:04 -0800
+Subject: [PATCH] Use new bfd APIs from 2.34+
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libutil++/bfd_support.cpp | 10 +++++-----
+ opjitconv/create_bfd.c    |  6 +++---
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/libutil++/bfd_support.cpp b/libutil++/bfd_support.cpp
+index fa904839..e53a1530 100644
+--- a/libutil++/bfd_support.cpp
++++ b/libutil++/bfd_support.cpp
+@@ -137,7 +137,7 @@ static bool get_build_id(bfd * ibfd, unsigned char * build_id)
+ 		}
+ 	}
+ 
+-	bfd_size_type buildid_sect_size = bfd_section_size(ibfd, sect);
++	bfd_size_type buildid_sect_size = bfd_section_size(sect);
+ 	char * contents = (char *) xmalloc(buildid_sect_size);
+ 	errno = 0;
+ 	if (!bfd_get_section_contents(ibfd, sect,
+@@ -188,7 +188,7 @@ bool get_debug_link_info(bfd * ibfd, string & filename, unsigned long & crc32)
+ 	if (sect == NULL)
+ 		return false;
+ 	
+-	bfd_size_type debuglink_size = bfd_section_size(ibfd, sect);  
++	bfd_size_type debuglink_size = bfd_section_size(sect);  
+ 	char * contents = (char *) xmalloc(debuglink_size);
+ 	cverb << vbfd
+ 	      << ".gnu_debuglink section has size " << debuglink_size << endl;
+@@ -346,7 +346,7 @@ void fixup_linenr(bfd * abfd, asection * section, asymbol ** syms,
+ 	// first restrict the search on a sensible range of vma, 16 is
+ 	// an intuitive value based on epilog code look
+ 	size_t max_search = 16;
+-	size_t section_size = bfd_section_size(abfd, section);
++	size_t section_size = bfd_section_size(section);
+ 	if (pc + max_search > section_size)
+ 		max_search = section_size - pc;
+ 
+@@ -819,10 +819,10 @@ find_nearest_line(bfd_info const & b, op_bfd_symbol const & sym,
+ 	else
+ 		pc = (sym.value() + offset) - sym.filepos();
+ 
+-	if ((bfd_get_section_flags(abfd, section) & SEC_ALLOC) == 0)
++	if ((bfd_section_flags(section) & SEC_ALLOC) == 0)
+ 		goto fail;
+ 
+-	if (pc >= bfd_section_size(abfd, section))
++	if (pc >= bfd_section_size(section))
+ 		goto fail;
+ 
+ 	ret = bfd_find_nearest_line(abfd, section, syms, pc, &cfilename,
+diff --git a/opjitconv/create_bfd.c b/opjitconv/create_bfd.c
+index 48db143b..5c0e9152 100644
+--- a/opjitconv/create_bfd.c
++++ b/opjitconv/create_bfd.c
+@@ -86,12 +86,12 @@ asection * create_section(bfd * abfd, char const * section_name,
+ 		bfd_perror("bfd_make_section");
+ 		goto error;
+ 	}
+-	bfd_set_section_vma(abfd, section, vma);
+-	if (bfd_set_section_size(abfd, section, size) == FALSE) {
++	bfd_set_section_vma(section, vma);
++	if (bfd_set_section_size(section, size) == FALSE) {
+ 		bfd_perror("bfd_set_section_size");
+ 		goto error;
+ 	}
+-	if (bfd_set_section_flags(abfd, section, flags) == FALSE) {
++	if (bfd_set_section_flags(section, flags) == FALSE) {
+ 		bfd_perror("bfd_set_section_flags");
+ 		goto error;
+ 	}
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.3.0.bb b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.3.0.bb
index 4e5b6ca..8242a83 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/oprofile/oprofile_1.3.0.bb
@@ -1,6 +1,10 @@
 require oprofile.inc
 
+COMPATIBLE_HOST_riscv64 = "null"
+COMPATIBLE_HOST_riscv32 = "null"
+
 DEPENDS_append_powerpc64 = " libpfm4"
+DEPENDS_append_powerpc64le = " libpfm4"
 
 SRC_URI[md5sum] = "bd998df5521ebedae31e71cd3fb6200b"
 SRC_URI[sha256sum] = "95ded8bde1ec39922f0af015981a67aec63e025a501e4dc04cd65d38f73647e6"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/pm-graph/pm-graph_5.5.bb b/meta-openembedded/meta-oe/recipes-kernel/pm-graph/pm-graph_5.5.bb
index 63a9fa8..a137886 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/pm-graph/pm-graph_5.5.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/pm-graph/pm-graph_5.5.bb
@@ -12,11 +12,22 @@
 "
 S = "${WORKDIR}/git"
 
+# Apart from the listed RDEPENDS, analyze-suspend depends on some features
+# provided by the kernel. These options are:
+#   - CONFIG_PM_DEBUG=y
+#   - CONFIG_PM_SLEEP_DEBUG=y
+#   - CONFIG_FTRACE=y
+#   - CONFIG_FUNCTION_TRACER=y
+#   - CONFIG_FUNCTION_GRAPH_TRACER=y
+
 COMPATIBLE_HOST='(i.86|x86_64).*'
 EXTRA_OEMAKE = "PREFIX=${prefix} DESTDIR=${D} BASELIB=${baselib}"
 
 do_install() {
         oe_runmake install
+        install -Dm 0755 ${S}/analyze_suspend.py ${D}${bindir}/analyze_suspend.py
 }
 
 RDEPENDS_${PN} += "python3-core python3-threading python3-datetime python3-compression"
+RPROVIDES_${PN} = "analyze-suspend"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/spidev-test/spidev-test.bb b/meta-openembedded/meta-oe/recipes-kernel/spidev-test/spidev-test.bb
new file mode 100644
index 0000000..6626302
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-kernel/spidev-test/spidev-test.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Test SPI devices"
+DESCRIPTION = "SPI testing utility using the spidev driver"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+PROVIDES = "virtual/spidev-test"
+
+inherit bash-completion kernelsrc kernel-arch
+
+do_populate_lic[depends] += "virtual/kernel:do_patch"
+
+EXTRA_OEMAKE = "-C ${S}/tools/spi O=${B} CROSS=${TARGET_PREFIX} CC="${CC}" LD="${LD}" AR=${AR} ARCH=${ARCH}"
+
+do_configure[depends] += "virtual/kernel:do_shared_workdir"
+
+do_compile() {
+    oe_runmake
+}
+
+do_install() {
+    oe_runmake DESTDIR=${D} install
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+python do_package_prepend() {
+    d.setVar('PKGV', d.getVar("KERNEL_VERSION", True).split("-")[0])
+}
+
+B = "${WORKDIR}/${BPN}-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/turbostat/turbostat_3.4.bb b/meta-openembedded/meta-oe/recipes-kernel/turbostat/turbostat_3.4.bb
index 5f6588d..60040a4 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/turbostat/turbostat_3.4.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/turbostat/turbostat_3.4.bb
@@ -21,7 +21,7 @@
             "
 
 PACKAGE_ARCH = "${MACHINE_ARCH}"
-DEPENDS = "virtual/kernel"
+DEPENDS = "libcap"
 
 # This looks in S, so we better make sure there's
 # something in the directory.
@@ -30,25 +30,28 @@
 
 
 EXTRA_OEMAKE = '\
-                CC="${CC}" \
-		'CFLAGS=-Wall -I${STAGING_KERNEL_DIR}/arch/x86/include/uapi ${LDFLAGS}' \
+                CC="${CC}" 'CFLAGS=-Wall ${LDFLAGS}' \
                '
 
 # If we build under STAGING_KERNEL_DIR, source will not be put
 # into the dbg rpm.  STAGING_KERNEL_DIR will exist by the time
 # do_configure() is invoked so we can safely copy from it.
 #
+do_configure[depends] += "virtual/kernel:do_shared_workdir"
 do_configure_prepend() {
 	mkdir -p ${S}
 	cp -r ${STAGING_KERNEL_DIR}/arch/x86/include/asm/msr-index.h ${S}
 	cp -r ${STAGING_KERNEL_DIR}/arch/x86/include/asm/intel-family.h ${S}
 	cp -r ${STAGING_KERNEL_DIR}/include/linux/bits.h ${S}
+	cp -r ${STAGING_KERNEL_DIR}/include/linux/const.h ${S}
 	cp -r ${STAGING_KERNEL_DIR}/tools/power/x86/turbostat/* ${S}
 	cp -r ${WORKDIR}/COPYING ${S}
 }
 
 do_compile() {
 	sed -i 's#<linux/bits.h>#"bits.h"#' msr-index.h
+	sed -i 's#<linux/const.h>#"const.h"#' bits.h
+	sed -i -e 's#<uapi/linux/const.h>#<linux/const.h>#' -e 's#_LINUX_CONST_H#_LINUX_CONST_H_KERNEL#' const.h
 	sed -i 's#MSRHEADER#"msr-index.h"#' turbostat.c
 	sed -i 's#INTEL_FAMILY_HEADER#"intel-family.h"#' turbostat.c
 	sed -i 's#\$(CC) \$(CFLAGS) \$< -o \$(BUILD_OUTPUT)/\$@#\$(CC) \$(CFLAGS) \$(LDFLAGS) \$< -o \$(BUILD_OUTPUT)/\$@#' Makefile
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb b/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb
index 9d31160..21fa0bd 100644
--- a/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb
+++ b/meta-openembedded/meta-oe/recipes-multimedia/id3lib/id3lib_3.8.3.bb
@@ -21,6 +21,7 @@
 # patches maintained by quilt. So manually apply them before applying other local
 # patches. Also remove all temp files before leaving, because do_patch() will pop
 # up all previously applied patches in the start
+do_patch[depends] += "quilt-native:do_populate_sysroot"
 id3lib_do_patch() {
     cd ${S}
     # it's important that we only pop the existing patches when they've
@@ -33,14 +34,14 @@
         # the test inside which we operate
         QUILT_PATCHES=${S}/patches quilt pop -a
     fi
-    if [ -d ${S}/.pc-id3lib ]; then
+    if [ -d ${S}/.pc-${BPN} ]; then
         rm -rf ${S}/.pc
-        mv ${S}/.pc-id3lib ${S}/.pc
+        mv ${S}/.pc-${BPN} ${S}/.pc
         QUILT_PATCHES=${S}/debian/patches quilt pop -a
         rm -rf ${S}/.pc ${S}/debian
     fi
     QUILT_PATCHES=${S}/debian/patches quilt push -a
-    mv ${S}/.pc ${S}/.pc-id3lib
+    mv ${S}/.pc ${S}/.pc-${BPN}
 }
 
 do_unpack[cleandirs] += "${S}"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_6.0.2.bb b/meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_6.1.1.bb
similarity index 71%
rename from meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_6.0.2.bb
rename to meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_6.1.1.bb
index 2ca74f6..65f5b6a 100644
--- a/meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_6.0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-multimedia/libdvdread/libdvdread_6.1.1.bb
@@ -4,8 +4,8 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=64e753fa7d1ca31632bc383da3b57c27"
 
 SRC_URI = "http://download.videolan.org/pub/videolan/libdvdread/${PV}/libdvdread-${PV}.tar.bz2"
-SRC_URI[md5sum] = "49990935174bf6b2fa501e789c578135"
-SRC_URI[sha256sum] = "f91401af213b219cdde24b46c50a57f29301feb7f965678f1d7ed4632cc6feb0"
+SRC_URI[md5sum] = "09c7423568fb679279fd2a2bc6b10b6e"
+SRC_URI[sha256sum] = "3e357309a17c5be3731385b9eabda6b7e3fa010f46022a06f104553bf8e21796"
 
 inherit autotools lib_package binconfig pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.26.0.bb b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.26.0.bb
deleted file mode 100644
index c327c45..0000000
--- a/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.26.0.bb
+++ /dev/null
@@ -1,82 +0,0 @@
-SUMMARY = "Open Source multimedia player"
-DESCRIPTION = "mpv is a fork of mplayer2 and MPlayer. It shares some features with the former projects while introducing many more."
-SECTION = "multimedia"
-HOMEPAGE = "http://www.mpv.io/"
-DEPENDS = "zlib ffmpeg jpeg virtual/libx11 xsp libxv \
-           libxscrnsaver libv4l libxinerama \
-"
-
-REQUIRED_DISTRO_FEATURES = "x11"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=91f1cb870c1cc2d31351a4d2595441cb"
-
-# While this item does not require it, it depends on ffmpeg which does
-LICENSE_FLAGS = "commercial"
-
-SRCREV_mpv = "4db82f04502cbcd20d9a975df9dfde91d8c389e3"
-SRC_URI = " \
-    git://github.com/mpv-player/mpv;name=mpv \
-    http://www.freehackers.org/~tnagy/release/waf-1.8.12;name=waf;downloadfilename=waf;subdir=git \
-"
-SRC_URI[waf.md5sum] = "cef4ee82206b1843db082d0b0506bf71"
-SRC_URI[waf.sha256sum] = "01bf2beab2106d1558800c8709bc2c8e496d3da4a2ca343fe091f22fca60c98b"
-
-S = "${WORKDIR}/git"
-
-inherit waf pkgconfig pythonnative features_check
-
-LUA ?= "lua"
-LUA_mips64  = ""
-LUA_aarch64  = ""
-LUA_powerpc64  = ""
-LUA_powerpc  = ""
-
-# Note: both lua and libass are required to get on-screen-display (controls)
-PACKAGECONFIG ??= " \
-    ${LUA} \
-    libass \
-    ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)} \
-"
-
-PACKAGECONFIG_remove_aarch64 = "lua"
-PACKAGECONFIG[drm] = "--enable-drm,--disable-drm,libdrm"
-PACKAGECONFIG[gbm] = "--enable-gbm,--disable-gbm,virtual/mesa"
-PACKAGECONFIG[lua] = "--enable-lua,--disable-lua,lua luajit"
-PACKAGECONFIG[libass] = "--enable-libass,--disable-libass,libass"
-PACKAGECONFIG[libarchive] = "--enable-libarchive,--disable-libarchive,libarchive"
-PACKAGECONFIG[jack] = "--enable-jack, --disable-jack, jack"
-PACKAGECONFIG[vaapi] = "--enable-vaapi, --disable-vaapi,libva"
-PACKAGECONFIG[vdpau] = "--enable-vdpau, --disable-vdpau,libvdpau"
-PACKAGECONFIG[wayland] = "--enable-wayland, --disable-wayland,wayland libxkbcommon"
-
-SIMPLE_TARGET_SYS = "${@'${TARGET_SYS}'.replace('${TARGET_VENDOR}', '')}"
-
-EXTRA_OECONF = " \
-    --prefix=${prefix} \
-    --target=${SIMPLE_TARGET_SYS} \
-    --confdir=${sysconfdir} \
-    --datadir=${datadir} \
-    --disable-manpage-build \
-    --disable-gl \
-    --disable-libsmbclient \
-    --disable-encoding \
-    --disable-libbluray \
-    --disable-dvdread \
-    --disable-dvdnav \
-    --disable-cdda \
-    --disable-uchardet \
-    --disable-rubberband \
-    --disable-lcms2 \
-    --disable-vapoursynth \
-    --disable-vapoursynth-lazy \
-    ${PACKAGECONFIG_CONFARGS} \
-"
-
-adjust_waf_perms() {
-    chmod +x ${S}/waf
-}
-
-do_patch[postfuncs] += "adjust_waf_perms"
-
-FILES_${PN} += "${datadir}/icons"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.32.0.bb b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.32.0.bb
new file mode 100644
index 0000000..f7b0f30
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/mplayer/mpv_0.32.0.bb
@@ -0,0 +1,117 @@
+SUMMARY = "Open Source multimedia player"
+DESCRIPTION = "mpv is a fork of mplayer2 and MPlayer. It shares some features with the former projects while introducing many more."
+SECTION = "multimedia"
+HOMEPAGE = "http://www.mpv.io/"
+
+DEPENDS = "zlib ffmpeg jpeg libv4l"
+
+DEPENDS += " \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', ' virtual/libx11 xsp libxv libxscrnsaver libxinerama', '', d)} \
+"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=91f1cb870c1cc2d31351a4d2595441cb"
+
+# While this item does not require it, it depends on ffmpeg which does
+LICENSE_FLAGS = "commercial"
+
+SRCREV_mpv = "70b991749df389bcc0a4e145b5687233a03b4ed7"
+SRC_URI = " \
+    git://github.com/mpv-player/mpv;name=mpv \
+"
+
+S = "${WORKDIR}/git"
+
+inherit waf pkgconfig features_check mime-xdg
+
+LUA ?= "lua"
+LUA_mips64  = ""
+LUA_aarch64  = ""
+LUA_powerpc64  = ""
+LUA_powerpc64le  = ""
+LUA_riscv64  = ""
+LUA_riscv32  = ""
+LUA_powerpc  = ""
+
+# Note: both lua and libass are required to get on-screen-display (controls)
+PACKAGECONFIG ??= " \
+    ${LUA} \
+    libass \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'opengl', d)} \
+"
+
+PACKAGECONFIG_remove_aarch64 = "lua"
+PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11"
+PACKAGECONFIG[xv] = "--enable-xv,--disable-xv,libxv"
+PACKAGECONFIG[opengl] = "--enable-gl,--disable-gl,virtual/libgl"
+PACKAGECONFIG[egl] = "--enable-egl,--disable-egl,"
+PACKAGECONFIG[drm] = "--enable-drm,--disable-drm,libdrm"
+PACKAGECONFIG[gbm] = "--enable-gbm,--disable-gbm,virtual/libgbm"
+PACKAGECONFIG[lua] = "--enable-lua,--disable-lua,lua luajit"
+PACKAGECONFIG[libass] = "--enable-libass,--disable-libass,libass"
+PACKAGECONFIG[libarchive] = "--enable-libarchive,--disable-libarchive,libarchive"
+PACKAGECONFIG[jack] = "--enable-jack, --disable-jack, jack"
+PACKAGECONFIG[vaapi] = "--enable-vaapi,--disable-vaapi,libva"
+PACKAGECONFIG[vdpau] = "--enable-vdpau,--disable-vdpau,libvdpau"
+PACKAGECONFIG[wayland] = "--enable-wayland,--disable-wayland,wayland wayland-native libxkbcommon"
+
+python __anonymous() {
+    packageconfig = (d.getVar("PACKAGECONFIG") or "").split()
+    extras = []
+    if "x11" in packageconfig and "opengl" in packageconfig:
+        extras.append(" --enable-gl-x11")
+    if "x11" in packageconfig and "egl" in packageconfig:
+        extras.append(" --enable-egl-x11")
+    if "egl" in packageconfig and "drm" in packageconfig:
+        extras.append(" --enable-egl-drm")
+    if "vaapi" in packageconfig and "x11" in packageconfig:
+        extras.append(" --enable-vaapi-x11")
+    if "vaapi" in packageconfig and "drm" in packageconfig:
+        extras.append(" --enable-vaapi-drm")
+    if "vaapi" in packageconfig and "x11" in packageconfig and "egl" in packageconfig:
+        extras.append(" --enable-vaapi-x-egl")
+    if "vdpau" in packageconfig and "opengl" in packageconfig and "x11" in packageconfig:
+        extras.append(" --enable-vdpau-gl-x11")
+    if "wayland" in packageconfig and "opengl" in packageconfig:
+        extras.append(" --enable-gl-wayland")
+    if "wayland" in packageconfig and "vaapi" in packageconfig:
+        extras.append(" --enable-vaapi-wayland")
+    if extras:
+        d.appendVar("EXTRA_OECONF", "".join(extras))
+}
+
+SIMPLE_TARGET_SYS = "${@'${TARGET_SYS}'.replace('${TARGET_VENDOR}', '')}"
+
+EXTRA_OECONF = " \
+    --prefix=${prefix} \
+    --target=${SIMPLE_TARGET_SYS} \
+    --confdir=${sysconfdir} \
+    --datadir=${datadir} \
+    --disable-manpage-build \
+    --disable-libsmbclient \
+    --disable-libbluray \
+    --disable-dvdnav \
+    --disable-cdda \
+    --disable-uchardet \
+    --disable-rubberband \
+    --disable-lcms2 \
+    --disable-vapoursynth \
+    ${PACKAGECONFIG_CONFARGS} \
+"
+
+do_patch[postfuncs] += "get_waf"
+
+get_waf() {
+    cd ${S}
+    ./bootstrap.py
+    sed -i -e 's|/usr/bin/env python|/usr/bin/env python3|g' ${S}/waf
+    cd -
+}
+
+FILES_${PN} += " \
+    ${datadir}/icons \
+    ${datadir}/zsh \
+    ${datadir}/bash-completion \
+    "
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire-0.2_git.bb b/meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire-0.2_git.bb
new file mode 100644
index 0000000..bcb3015
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire-0.2_git.bb
@@ -0,0 +1,65 @@
+SUMMARY = "Multimedia processing server for Linux"
+AUTHOR = "Wim Taymans <wtaymans@redhat.com>"
+HOMEPAGE = "https://pipewire.org"
+SECTION = "multimedia"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = " \
+    file://LICENSE;md5=d8153c6e65986f862a0550ca74a3ed73 \
+    file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+"
+DEPENDS = "alsa-lib dbus udev"
+SRCREV = "14c11c0fe4d366bad4cfecdee97b6652ff9ed63d"
+PV = "0.2.7"
+
+SRC_URI = "git://github.com/PipeWire/pipewire"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig systemd manpages
+
+PACKAGECONFIG ??= "\
+    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+    gstreamer \
+"
+
+PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
+PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base"
+PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxml-parser-perl-native"
+
+PACKAGES =+ "\
+    ${PN}-spa-plugins \
+    ${PN}-alsa \
+    ${PN}-config \
+    gstreamer1.0-${PN} \
+    lib${PN} \
+    lib${PN}-modules \
+"
+
+RDEPENDS_lib${PN} += "lib${PN}-modules ${PN}-spa-plugins"
+
+FILES_${PN} = "\
+    ${sysconfdir}/pipewire/pipewire.conf \
+    ${bindir}/pipewire* \
+    ${systemd_user_unitdir}/* \
+"
+FILES_lib${PN} = "\
+    ${libdir}/libpipewire-*.so.* \
+"
+FILES_lib${PN}-modules = "\
+    ${libdir}/pipewire-*/* \
+"
+FILES_${PN}-spa-plugins = "\
+    ${bindir}/spa-* \
+    ${libdir}/spa/* \
+"
+FILES_${PN}-alsa = "\
+    ${libdir}/alsa-lib/* \
+    ${datadir}/alsa/alsa.conf.d/50-pipewire.conf \
+"
+FILES_gstreamer1.0-${PN} = "\
+    ${libdir}/gstreamer-1.0/* \
+"
+
+CONFFILES_${PN} = "\
+    ${sysconfdir}/pipewire/pipewire.conf \
+"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire_git.bb b/meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire_git.bb
index bcb3015..1a415c1 100644
--- a/meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire_git.bb
+++ b/meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire_git.bb
@@ -2,14 +2,14 @@
 AUTHOR = "Wim Taymans <wtaymans@redhat.com>"
 HOMEPAGE = "https://pipewire.org"
 SECTION = "multimedia"
-LICENSE = "LGPL-2.1"
+LICENSE = "MIT"
 LIC_FILES_CHKSUM = " \
-    file://LICENSE;md5=d8153c6e65986f862a0550ca74a3ed73 \
-    file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+    file://LICENSE;md5=e2c0b7d86d04e716a3c4c9ab34260e69 \
+    file://COPYING;md5=97be96ca4fab23e9657ffa590b931c1a \
 "
 DEPENDS = "alsa-lib dbus udev"
-SRCREV = "14c11c0fe4d366bad4cfecdee97b6652ff9ed63d"
-PV = "0.2.7"
+SRCREV = "74a1632f0720886d5b3b6c23ee8fcd6c03ca7aac"
+PV = "0.3.1"
 
 SRC_URI = "git://github.com/PipeWire/pipewire"
 
@@ -18,13 +18,21 @@
 inherit meson pkgconfig systemd manpages
 
 PACKAGECONFIG ??= "\
-    ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
-    gstreamer \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \
+    ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio systemd vulkan', d)} \
+    jack gstreamer \
 "
 
-PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
-PACKAGECONFIG[gstreamer] = "-Dgstreamer=enabled,-Dgstreamer=disabled,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base"
+PACKAGECONFIG[bluez] = "-Dbluez5=true,-Dbluez5=false,bluez5 sbc"
+PACKAGECONFIG[jack] = "-Djack=true,-Djack=false,jack"
+PACKAGECONFIG[gstreamer] = "-Dgstreamer=true,-Dgstreamer=false,glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base"
 PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxml-parser-perl-native"
+PACKAGECONFIG[pulseaudio] = "-Dpipewire-pulseaudio=true,-Dpipewire-pulseaudio=false,pulseaudio"
+PACKAGECONFIG[systemd] = "-Dsystemd=true,-Dsystemd=false,systemd"
+PACKAGECONFIG[vulkan] = "-Dvulkan=true,-Dvulkan=false,vulkan-loader"
+
+LDFLAGS_append_mipsarch = " -latomic"
+LDFLAGS_append_x86 = " -latomic"
 
 PACKAGES =+ "\
     ${PN}-spa-plugins \
@@ -33,28 +41,31 @@
     gstreamer1.0-${PN} \
     lib${PN} \
     lib${PN}-modules \
+    lib${PN}-jack \
 "
 
 RDEPENDS_lib${PN} += "lib${PN}-modules ${PN}-spa-plugins"
 
 FILES_${PN} = "\
     ${sysconfdir}/pipewire/pipewire.conf \
+    ${bindir}/pw-* \
     ${bindir}/pipewire* \
     ${systemd_user_unitdir}/* \
 "
 FILES_lib${PN} = "\
     ${libdir}/libpipewire-*.so.* \
+    ${libdir}/libjack-*.so.* \
+    ${libdir}/libpulse-*.so.* \
 "
 FILES_lib${PN}-modules = "\
     ${libdir}/pipewire-*/* \
 "
 FILES_${PN}-spa-plugins = "\
     ${bindir}/spa-* \
-    ${libdir}/spa/* \
+    ${libdir}/spa-*/* \
 "
 FILES_${PN}-alsa = "\
     ${libdir}/alsa-lib/* \
-    ${datadir}/alsa/alsa.conf.d/50-pipewire.conf \
 "
 FILES_gstreamer1.0-${PN} = "\
     ${libdir}/gstreamer-1.0/* \
diff --git a/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.19.bb b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.19.bb
index 9fdbbf2..f74ebda 100644
--- a/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.19.bb
+++ b/meta-openembedded/meta-oe/recipes-navigation/gpsd/gpsd_3.19.bb
@@ -2,7 +2,7 @@
 SECTION = "console/network"
 LICENSE = "BSD-2-Clause"
 LIC_FILES_CHKSUM = "file://COPYING;md5=01764c35ae34d9521944bb6ab312af53"
-DEPENDS = "dbus ncurses python python3 pps-tools"
+DEPENDS = "dbus ncurses python3 pps-tools"
 PROVIDES = "virtual/gpsd"
 
 SRC_URI = "${SAVANNAH_GNU_MIRROR}/${BPN}/${BP}.tar.gz \
@@ -12,7 +12,7 @@
 SRC_URI[md5sum] = "b3bf88706794eb8e5f2c2543bf7ba87b"
 SRC_URI[sha256sum] = "27dd24d45b2ac69baab7933da2bf6ae5fb0be90130f67e753c110a3477155f39"
 
-inherit scons update-rc.d python-dir pythonnative systemd update-alternatives
+inherit scons update-rc.d python3-dir python3native systemd update-alternatives
 
 INITSCRIPT_PACKAGES = "gpsd-conf"
 INITSCRIPT_NAME = "gpsd"
@@ -84,7 +84,7 @@
     install -m 0644 ${S}/systemd/${BPN}.socket ${D}${systemd_unitdir}/system/${BPN}.socket
 }
 
-PACKAGES =+ "libgps libgpsd python-pygps gpsd-udev gpsd-conf gpsd-gpsctl gps-utils"
+PACKAGES =+ "libgps libgpsd python3-pygps gpsd-udev gpsd-conf gpsd-gpsctl gps-utils"
 
 RPROVIDES_${PN}-dbg += "python-pygps-dbg"
 
@@ -114,17 +114,17 @@
 SUMMARY_gps-utils = "Utils used for simulating, monitoring,... a GPS"
 # Python files are required for gps/fake, required for gpsfake.
 FILES_gps-utils = "${bindir}/* ${libdir}/gps/*.py ${libdir}/gps/*.so"
-RDEPENDS_gps-utils = "python-pygps"
+RDEPENDS_gps-utils = "python3-pygps"
 
-SUMMARY_python-pygps = "Python bindings to gpsd"
-FILES_python-pygps = "${PYTHON_SITEPACKAGES_DIR}/* ${libdir}/gps/*.py ${libdir}/*.egg-info"
-RDEPENDS_python-pygps = " \
-    python-core \
-    python-io \
-    python-threading \
-    python-terminal \
+SUMMARY_python3-pygps = "Python bindings to gpsd"
+FILES_python3-pygps = "${PYTHON_SITEPACKAGES_DIR}/* ${libdir}/gps/*.py ${libdir}/*.egg-info"
+RDEPENDS_python3-pygps = " \
+    python3-core \
+    python3-io \
+    python3-threading \
+    python3-terminal \
     gpsd \
-    python-json"
+    python3-json"
 
 RPROVIDES_${PN} += "${PN}-systemd"
 RREPLACES_${PN} += "${PN}-systemd"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/proj/proj_6.2.0.bb b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_7.0.0.bb
similarity index 62%
rename from meta-openembedded/meta-oe/recipes-navigation/proj/proj_6.2.0.bb
rename to meta-openembedded/meta-oe/recipes-navigation/proj/proj_7.0.0.bb
index fa269d0..4467424 100644
--- a/meta-openembedded/meta-oe/recipes-navigation/proj/proj_6.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_7.0.0.bb
@@ -6,11 +6,14 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=74d9aaec5fa0cd734341e8c4dc91b608"
 
 SRC_URI = "http://download.osgeo.org/${BPN}/${BP}.tar.gz"
-SRC_URI[md5sum] = "5cde556545828beaffbe50b1bb038480"
-SRC_URI[sha256sum] = "b300c0f872f632ad7f8eb60725edbf14f0f8f52db740a3ab23e7b94f1cd22a50"
+SRC_URI[sha256sum] = "ee0e14c1bd2f9429b1a28999240304c0342ed739ebaea3d4ff44c585b1097be8"
 
-DEPENDS = "sqlite3 sqlite3-native"
+DEPENDS = "sqlite3 sqlite3-native tiff"
 
 inherit autotools pkgconfig lib_package
 
+PACKAGECONFIG ?= "curl"
+
+PACKAGECONFIG[curl] = ",--without-curl,curl"
+
 FILES_${PN} += "${datadir}/proj"
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.26.2.bb b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.26.2.bb
deleted file mode 100644
index d76ef09..0000000
--- a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.26.2.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-include cups-filters.inc
-
-SRC_URI[md5sum] = "970095596bf2b8cfe91ac91c0b51297a"
-SRC_URI[sha256sum] = "0069aef1358522f1901a64749ec753d28a2d6a832758bce58ffcd722b28c0e66"
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.27.2.bb b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.27.2.bb
new file mode 100644
index 0000000..35c4a92
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.27.2.bb
@@ -0,0 +1,4 @@
+include cups-filters.inc
+
+SRC_URI[md5sum] = "90ebcae31f2eabd802236408646b1dd9"
+SRC_URI[sha256sum] = "174a2a5c919bf88c63ced692a2170add6c2cd70ff06c49bcea32e9cf56960492"
diff --git a/meta-openembedded/meta-oe/recipes-security/nmap/files/0001-Make-ndiff-support-python3.patch b/meta-openembedded/meta-oe/recipes-security/nmap/files/0001-Make-ndiff-support-python3.patch
new file mode 100644
index 0000000..2ca18b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/nmap/files/0001-Make-ndiff-support-python3.patch
@@ -0,0 +1,1720 @@
+From bbbf474b2ebdbdac4d557e3351210f3fe2175c33 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 14 Feb 2020 10:09:55 +0000
+Subject: [PATCH] Make ndiff support python3
+
+Backport a patch from debian to make ndiff support
+python3.
+
+Refer to https://sources.debian.org/data/main/n/nmap/7.80+dfsg1-2/debian/patches/0004-Python3-port-of-ndiff.patch
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ Makefile.in                   |  12 +-
+ ndiff/ndiff.py                | 495 +++++++++++++++++-----------------
+ ndiff/ndifftest.py            |  94 +++----
+ ndiff/scripts/ndiff           |  14 +-
+ ndiff/setup.py                |  34 +--
+ ndiff/test-scans/anonymize.py |  18 +-
+ 6 files changed, 333 insertions(+), 334 deletions(-)
+ mode change 100644 => 100755 ndiff/setup.py
+
+diff --git a/Makefile.in b/Makefile.in
+index eee8863..32f86ba 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -35,6 +35,7 @@ ZENMAPDIR = @ZENMAPDIR@
+ NDIFFDIR = @NDIFFDIR@
+ NPINGDIR = @NPINGDIR@
+ PYTHON = @PYTHON@
++PYTHON3 = /usr/bin/env python3
+ DEFS = @DEFS@ -DNMAP_PLATFORM=\"$(NMAP_PLATFORM)\" -DNMAPDATADIR=\"$(nmapdatadir)\"
+ # With GCC, add extra security checks to source code.
+ # http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html
+@@ -260,7 +261,7 @@ clean-zenmap:
+ 	rm -f $(ZENMAPDIR)/zenmapCore/Name.pyc
+ 
+ clean-ndiff:
+-	-cd $(NDIFFDIR) && $(PYTHON) setup.py clean --all
++	-cd $(NDIFFDIR) && $(PYTHON3) setup.py clean --all
+ 
+ clean-nping:
+ 	-cd $(NPINGDIR) && $(MAKE) clean
+@@ -368,6 +369,7 @@ tests/check_dns: $(OBJS)
+ # this as the location of the interpreter whenever we're not doing a
+ # local installation.
+ DEFAULT_PYTHON_PATH = /usr/bin/env python
++DEFAULT_PYTHON3_PATH = /usr/bin/env python3
+ 
+ build-zenmap: $(ZENMAPDIR)/setup.py $(ZENMAPDIR)/zenmapCore/Version.py
+ # When DESTDIR is defined, assume we're building an executable
+@@ -388,13 +390,13 @@ install-zenmap: $(ZENMAPDIR)/setup.py
+ 	ln -sf zenmap $(DESTDIR)$(bindir)/xnmap
+ 
+ build-ndiff:
+-	cd $(NDIFFDIR) && $(PYTHON) setup.py build $(if $(DESTDIR),--executable "$(DEFAULT_PYTHON_PATH)")
++	cd $(NDIFFDIR) && $(PYTHON3) setup.py build $(if $(DESTDIR),--executable "$(DEFAULT_PYTHON3_PATH)")
+ 
+ build-nping: $(NPINGDIR)/Makefile build-nbase build-nsock build-netutil $(NPINGDIR)/nping.h @DNET_BUILD@ @PCAP_BUILD@
+ 	@cd $(NPINGDIR) && $(MAKE)
+ 
+ install-ndiff:
+-	cd $(NDIFFDIR) && $(PYTHON) setup.py install --prefix "$(prefix)" --install-lib="${PYTHON_SITEPACKAGES_DIR}" $(if $(DESTDIR),--root "$(DESTDIR)")
++	cd $(NDIFFDIR) && $(PYTHON3) setup.py install --prefix "$(prefix)" --install-lib="${PYTHON_SITEPACKAGES_DIR}" $(if $(DESTDIR),--root "$(DESTDIR)")
+ 
+ NSE_FILES = scripts/script.db scripts/*.nse
+ NSE_LIB_LUA_FILES = nselib/*.lua nselib/*.luadoc
+@@ -443,7 +445,7 @@ uninstall-zenmap:
+ 	rm -f $(DESTDIR)$(bindir)/xnmap
+ 
+ uninstall-ndiff:
+-	cd $(NDIFFDIR) && $(PYTHON) setup.py uninstall
++	cd $(NDIFFDIR) && $(PYTHON3) setup.py uninstall
+ 
+ uninstall-ncat:
+ 	@cd $(NCATDIR) && $(MAKE) uninstall
+@@ -458,7 +460,7 @@ check-ncat:
+ 	@cd $(NCATDIR) && $(MAKE) check
+ 
+ check-ndiff:
+-	@cd $(NDIFFDIR) && $(PYTHON) ndifftest.py
++	@cd $(NDIFFDIR) && $(PYTHON3) ndifftest.py
+ 
+ check-nsock:
+ 	@cd $(NSOCKDIR)/src && $(MAKE) check
+diff --git a/ndiff/ndiff.py b/ndiff/ndiff.py
+index 043273f..abbd1c5 100755
+--- a/ndiff/ndiff.py
++++ b/ndiff/ndiff.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ 
+ # Ndiff
+ #
+@@ -26,11 +26,11 @@ xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
+ import xml.sax
+ import xml.sax.saxutils
+ import xml.dom.minidom
+-from StringIO import StringIO
++from io import StringIO
+ 
+ verbose = False
+ 
+-NDIFF_XML_VERSION = u"1"
++NDIFF_XML_VERSION = "1"
+ 
+ 
+ class OverrideEntityResolver(xml.sax.handler.EntityResolver):
+@@ -78,35 +78,35 @@ class Scan(object):
+     def write_nmaprun_open(self, writer):
+         attrs = {}
+         if self.scanner is not None:
+-            attrs[u"scanner"] = self.scanner
++            attrs["scanner"] = self.scanner
+         if self.args is not None:
+-            attrs[u"args"] = self.args
++            attrs["args"] = self.args
+         if self.start_date is not None:
+-            attrs[u"start"] = "%d" % time.mktime(self.start_date.timetuple())
+-            attrs[u"startstr"] = self.start_date.strftime(
++            attrs["start"] = "%d" % time.mktime(self.start_date.timetuple())
++            attrs["startstr"] = self.start_date.strftime(
+                     "%a %b %d %H:%M:%S %Y")
+         if self.version is not None:
+-            attrs[u"version"] = self.version
+-        writer.startElement(u"nmaprun", attrs)
++            attrs["version"] = self.version
++        writer.startElement("nmaprun", attrs)
+ 
+     def write_nmaprun_close(self, writer):
+-        writer.endElement(u"nmaprun")
++        writer.endElement("nmaprun")
+ 
+     def nmaprun_to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"nmaprun")
++        elem = document.createElement("nmaprun")
+         if self.scanner is not None:
+-            elem.setAttribute(u"scanner", self.scanner)
++            elem.setAttribute("scanner", self.scanner)
+         if self.args is not None:
+-            elem.setAttribute(u"args", self.args)
++            elem.setAttribute("args", self.args)
+         if self.start_date is not None:
+             elem.setAttribute(
+-                    u"start", "%d" % time.mktime(self.start_date.timetuple()))
++                    "start", "%d" % time.mktime(self.start_date.timetuple()))
+             elem.setAttribute(
+-                    u"startstr",
++                    "startstr",
+                     self.start_date.strftime("%a %b %d %H:%M:%S %Y"))
+         if self.version is not None:
+-            elem.setAttribute(u"version", self.version)
++            elem.setAttribute("version", self.version)
+         frag.appendChild(elem)
+         return frag
+ 
+@@ -136,17 +136,17 @@ class Host(object):
+ 
+     def format_name(self):
+         """Return a human-readable identifier for this host."""
+-        address_s = u", ".join(a.s for a in sorted(self.addresses))
+-        hostname_s = u", ".join(sorted(self.hostnames))
++        address_s = ", ".join(a.s for a in sorted(self.addresses))
++        hostname_s = ", ".join(sorted(self.hostnames))
+         if len(hostname_s) > 0:
+             if len(address_s) > 0:
+-                return u"%s (%s)" % (hostname_s, address_s)
++                return "%s (%s)" % (hostname_s, address_s)
+             else:
+                 return hostname_s
+         elif len(address_s) > 0:
+             return address_s
+         else:
+-            return u"<no name>"
++            return "<no name>"
+ 
+     def add_port(self, port):
+         self.ports[port.spec] = port
+@@ -163,46 +163,46 @@ class Host(object):
+         return state is None or state in self.extraports
+ 
+     def extraports_string(self):
+-        list = [(count, state) for (state, count) in self.extraports.items()]
++        locallist = [(count, state) for (state, count) in list(self.extraports.items())]
+         # Reverse-sort by count.
+-        list.sort(reverse=True)
+-        return u", ".join(
+-                [u"%d %s ports" % (count, state) for (count, state) in list])
++        locallist.sort(reverse=True)
++        return ", ".join(
++                ["%d %s ports" % (count, state) for (count, state) in locallist])
+ 
+     def state_to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+         if self.state is not None:
+-            elem = document.createElement(u"status")
+-            elem.setAttribute(u"state", self.state)
++            elem = document.createElement("status")
++            elem.setAttribute("state", self.state)
+             frag.appendChild(elem)
+         return frag
+ 
+     def hostname_to_dom_fragment(self, document, hostname):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"hostname")
+-        elem.setAttribute(u"name", hostname)
++        elem = document.createElement("hostname")
++        elem.setAttribute("name", hostname)
+         frag.appendChild(elem)
+         return frag
+ 
+     def extraports_to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        for state, count in self.extraports.items():
+-            elem = document.createElement(u"extraports")
+-            elem.setAttribute(u"state", state)
+-            elem.setAttribute(u"count", unicode(count))
++        for state, count in list(self.extraports.items()):
++            elem = document.createElement("extraports")
++            elem.setAttribute("state", state)
++            elem.setAttribute("count", str(count))
+             frag.appendChild(elem)
+         return frag
+ 
+     def os_to_dom_fragment(self, document, os):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"osmatch")
+-        elem.setAttribute(u"name", os)
++        elem = document.createElement("osmatch")
++        elem.setAttribute("name", os)
+         frag.appendChild(elem)
+         return frag
+ 
+     def to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"host")
++        elem = document.createElement("host")
+ 
+         if self.state is not None:
+             elem.appendChild(self.state_to_dom_fragment(document))
+@@ -211,13 +211,13 @@ class Host(object):
+             elem.appendChild(addr.to_dom_fragment(document))
+ 
+         if len(self.hostnames) > 0:
+-            hostnames_elem = document.createElement(u"hostnames")
++            hostnames_elem = document.createElement("hostnames")
+             for hostname in self.hostnames:
+                 hostnames_elem.appendChild(
+                         self.hostname_to_dom_fragment(document, hostname))
+             elem.appendChild(hostnames_elem)
+ 
+-        ports_elem = document.createElement(u"ports")
++        ports_elem = document.createElement("ports")
+         ports_elem.appendChild(self.extraports_to_dom_fragment(document))
+         for port in sorted(self.ports.values()):
+             if not self.is_extraports(port.state):
+@@ -226,13 +226,13 @@ class Host(object):
+             elem.appendChild(ports_elem)
+ 
+         if len(self.os) > 0:
+-            os_elem = document.createElement(u"os")
++            os_elem = document.createElement("os")
+             for os in self.os:
+                 os_elem.appendChild(self.os_to_dom_fragment(document, os))
+             elem.appendChild(os_elem)
+ 
+         if len(self.script_results) > 0:
+-            hostscript_elem = document.createElement(u"hostscript")
++            hostscript_elem = document.createElement("hostscript")
+             for sr in self.script_results:
+                 hostscript_elem.appendChild(sr.to_dom_fragment(document))
+             elem.appendChild(hostscript_elem)
+@@ -246,7 +246,7 @@ class Address(object):
+         self.s = s
+ 
+     def __eq__(self, other):
+-        return self.__cmp__(other) == 0
++        return self.sort_key() == other.sort_key()
+ 
+     def __ne__(self, other):
+         return not self.__eq__(other)
+@@ -254,8 +254,8 @@ class Address(object):
+     def __hash__(self):
+         return hash(self.sort_key())
+ 
+-    def __cmp__(self, other):
+-        return cmp(self.sort_key(), other.sort_key())
++    def __lt__(self, other):
++        return self.sort_key() < other.sort_key()
+ 
+     def __str__(self):
+         return str(self.s)
+@@ -264,21 +264,21 @@ class Address(object):
+         return self.s
+ 
+     def new(type, s):
+-        if type == u"ipv4":
++        if type == "ipv4":
+             return IPv4Address(s)
+-        elif type == u"ipv6":
++        elif type == "ipv6":
+             return IPv6Address(s)
+-        elif type == u"mac":
++        elif type == "mac":
+             return MACAddress(s)
+         else:
+-            raise ValueError(u"Unknown address type %s." % type)
++            raise ValueError("Unknown address type %s." % type)
+     new = staticmethod(new)
+ 
+     def to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"address")
+-        elem.setAttribute(u"addr", self.s)
+-        elem.setAttribute(u"addrtype", self.type)
++        elem = document.createElement("address")
++        elem.setAttribute("addr", self.s)
++        elem.setAttribute("addrtype", self.type)
+         frag.appendChild(elem)
+         return frag
+ 
+@@ -287,21 +287,21 @@ class Address(object):
+ 
+ 
+ class IPv4Address(Address):
+-    type = property(lambda self: u"ipv4")
++    type = property(lambda self: "ipv4")
+ 
+     def sort_key(self):
+         return (0, self.s)
+ 
+ 
+ class IPv6Address(Address):
+-    type = property(lambda self: u"ipv6")
++    type = property(lambda self: "ipv6")
+ 
+     def sort_key(self):
+         return (1, self.s)
+ 
+ 
+ class MACAddress(Address):
+-    type = property(lambda self: u"mac")
++    type = property(lambda self: "mac")
+ 
+     def sort_key(self):
+         return (2, self.s)
+@@ -320,28 +320,25 @@ class Port(object):
+ 
+     def state_string(self):
+         if self.state is None:
+-            return u"unknown"
++            return "unknown"
+         else:
+-            return unicode(self.state)
++            return str(self.state)
+ 
+     def spec_string(self):
+-        return u"%d/%s" % self.spec
++        return "%d/%s" % self.spec
+ 
+-    def __cmp__(self, other):
+-        d = cmp(self.spec, other.spec)
+-        if d != 0:
+-            return d
+-        return cmp((self.spec, self.service, self.script_results),
+-            (other.spec, other.service, other.script_results))
++    def __lt__(self, other):
++        return (self.spec, self.service, self.script_results) < (
++            other.spec, other.service, other.script_results)
+ 
+     def to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"port")
+-        elem.setAttribute(u"portid", unicode(self.spec[0]))
+-        elem.setAttribute(u"protocol", self.spec[1])
++        elem = document.createElement("port")
++        elem.setAttribute("portid", str(self.spec[0]))
++        elem.setAttribute("protocol", self.spec[1])
+         if self.state is not None:
+-            state_elem = document.createElement(u"state")
+-            state_elem.setAttribute(u"state", self.state)
++            state_elem = document.createElement("state")
++            state_elem.setAttribute("state", self.state)
+             elem.appendChild(state_elem)
+         elem.appendChild(self.service.to_dom_fragment(document))
+         for sr in self.script_results:
+@@ -385,7 +382,7 @@ class Service(object):
+         if len(parts) == 0:
+             return None
+         else:
+-            return u"/".join(parts)
++            return "/".join(parts)
+ 
+     def version_string(self):
+         """Get a string like in the VERSION column of Nmap output."""
+@@ -395,17 +392,17 @@ class Service(object):
+         if self.version is not None:
+             parts.append(self.version)
+         if self.extrainfo is not None:
+-            parts.append(u"(%s)" % self.extrainfo)
++            parts.append("(%s)" % self.extrainfo)
+ 
+         if len(parts) == 0:
+             return None
+         else:
+-            return u" ".join(parts)
++            return " ".join(parts)
+ 
+     def to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"service")
+-        for attr in (u"name", u"product", u"version", u"extrainfo", u"tunnel"):
++        elem = document.createElement("service")
++        for attr in ("name", "product", "version", "extrainfo", "tunnel"):
+             v = getattr(self, attr)
+             if v is None:
+                 continue
+@@ -435,53 +432,53 @@ class ScriptResult(object):
+         result = []
+         lines = self.output.splitlines()
+         if len(lines) > 0:
+-            lines[0] = self.id + u": " + lines[0]
++            lines[0] = self.id + ": " + lines[0]
+         for line in lines[:-1]:
+-            result.append(u"|  " + line)
++            result.append("|  " + line)
+         if len(lines) > 0:
+-            result.append(u"|_ " + lines[-1])
++            result.append("|_ " + lines[-1])
+         return result
+ 
+     def to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        elem = document.createElement(u"script")
+-        elem.setAttribute(u"id", self.id)
+-        elem.setAttribute(u"output", self.output)
++        elem = document.createElement("script")
++        elem.setAttribute("id", self.id)
++        elem.setAttribute("output", self.output)
+         frag.appendChild(elem)
+         return frag
+ 
+ 
+ def format_banner(scan):
+     """Format a startup banner more or less like Nmap does."""
+-    scanner = u"Nmap"
+-    if scan.scanner is not None and scan.scanner != u"nmap":
++    scanner = "Nmap"
++    if scan.scanner is not None and scan.scanner != "nmap":
+         scanner = scan.scanner
+     parts = [scanner]
+     if scan.version is not None:
+         parts.append(scan.version)
+-    parts.append(u"scan")
++    parts.append("scan")
+     if scan.start_date is not None:
+-        parts.append(u"initiated %s" % scan.start_date.strftime(
++        parts.append("initiated %s" % scan.start_date.strftime(
+             "%a %b %d %H:%M:%S %Y"))
+     if scan.args is not None:
+-        parts.append(u"as: %s" % scan.args)
+-    return u" ".join(parts)
++        parts.append("as: %s" % scan.args)
++    return " ".join(parts)
+ 
+ 
+ def print_script_result_diffs_text(title, script_results_a, script_results_b,
+         script_result_diffs, f=sys.stdout):
+-    table = Table(u"*")
++    table = Table("*")
+     for sr_diff in script_result_diffs:
+         sr_diff.append_to_port_table(table)
+     if len(table) > 0:
+-        print >> f
++        print(file=f)
+         if len(script_results_b) == 0:
+-            print >> f, u"-%s:" % title
++            print("-%s:" % title, file=f)
+         elif len(script_results_a) == 0:
+-            print >> f, u"+%s:" % title
++            print("+%s:" % title, file=f)
+         else:
+-            print >> f, u" %s:" % title
+-        print >> f, table
++            print(" %s:" % title, file=f)
++        print(table, file=f)
+ 
+ 
+ def script_result_diffs_to_dom_fragment(elem, script_results_a,
+@@ -489,13 +486,13 @@ def script_result_diffs_to_dom_fragment(elem, script_results_a,
+     if len(script_results_a) == 0 and len(script_results_b) == 0:
+         return document.createDocumentFragment()
+     elif len(script_results_b) == 0:
+-        a_elem = document.createElement(u"a")
++        a_elem = document.createElement("a")
+         for sr in script_results_a:
+             elem.appendChild(sr.to_dom_fragment(document))
+         a_elem.appendChild(elem)
+         return a_elem
+     elif len(script_results_a) == 0:
+-        b_elem = document.createElement(u"b")
++        b_elem = document.createElement("b")
+         for sr in script_results_b:
+             elem.appendChild(sr.to_dom_fragment(document))
+         b_elem.appendChild(elem)
+@@ -581,10 +578,10 @@ class ScanDiffText(ScanDiff):
+         banner_a = format_banner(self.scan_a)
+         banner_b = format_banner(self.scan_b)
+         if banner_a != banner_b:
+-            print >> self.f, u"-%s" % banner_a
+-            print >> self.f, u"+%s" % banner_b
++            print("-%s" % banner_a, file=self.f)
++            print("+%s" % banner_b, file=self.f)
+         elif verbose:
+-            print >> self.f, u" %s" % banner_a
++            print(" %s" % banner_a, file=self.f)
+ 
+     def output_pre_scripts(self, pre_script_result_diffs):
+         print_script_result_diffs_text("Pre-scan script results",
+@@ -597,7 +594,7 @@ class ScanDiffText(ScanDiff):
+             post_script_result_diffs, self.f)
+ 
+     def output_host_diff(self, h_diff):
+-        print >> self.f
++        print(file=self.f)
+         h_diff.print_text(self.f)
+ 
+     def output_ending(self):
+@@ -622,8 +619,8 @@ class ScanDiffXML(ScanDiff):
+ 
+     def output_beginning(self):
+         self.writer.startDocument()
+-        self.writer.startElement(u"nmapdiff", {u"version": NDIFF_XML_VERSION})
+-        self.writer.startElement(u"scandiff", {})
++        self.writer.startElement("nmapdiff", {"version": NDIFF_XML_VERSION})
++        self.writer.startElement("scandiff", {})
+ 
+         if self.nmaprun_differs():
+             self.writer.frag_a(
+@@ -636,7 +633,7 @@ class ScanDiffXML(ScanDiff):
+ 
+     def output_pre_scripts(self, pre_script_result_diffs):
+         if len(pre_script_result_diffs) > 0 or verbose:
+-            prescript_elem = self.document.createElement(u"prescript")
++            prescript_elem = self.document.createElement("prescript")
+             frag = script_result_diffs_to_dom_fragment(
+                 prescript_elem, self.scan_a.pre_script_results,
+                 self.scan_b.pre_script_results, pre_script_result_diffs,
+@@ -646,7 +643,7 @@ class ScanDiffXML(ScanDiff):
+ 
+     def output_post_scripts(self, post_script_result_diffs):
+         if len(post_script_result_diffs) > 0 or verbose:
+-            postscript_elem = self.document.createElement(u"postscript")
++            postscript_elem = self.document.createElement("postscript")
+             frag = script_result_diffs_to_dom_fragment(
+                 postscript_elem, self.scan_a.post_script_results,
+                 self.scan_b.post_script_results, post_script_result_diffs,
+@@ -660,8 +657,8 @@ class ScanDiffXML(ScanDiff):
+         frag.unlink()
+ 
+     def output_ending(self):
+-        self.writer.endElement(u"scandiff")
+-        self.writer.endElement(u"nmapdiff")
++        self.writer.endElement("scandiff")
++        self.writer.endElement("nmapdiff")
+         self.writer.endDocument()
+ 
+ 
+@@ -719,9 +716,9 @@ class HostDiff(object):
+         self.cost += os_cost
+ 
+         extraports_a = tuple((count, state)
+-                for (state, count) in self.host_a.extraports.items())
++                for (state, count) in list(self.host_a.extraports.items()))
+         extraports_b = tuple((count, state)
+-                for (state, count) in self.host_b.extraports.items())
++                for (state, count) in list(self.host_b.extraports.items()))
+         if extraports_a != extraports_b:
+             self.extraports_changed = True
+             self.cost += 1
+@@ -747,69 +744,69 @@ class HostDiff(object):
+         # Names and addresses.
+         if self.id_changed:
+             if host_a.state is not None:
+-                print >> f, u"-%s:" % host_a.format_name()
++                print("-%s:" % host_a.format_name(), file=f)
+             if self.host_b.state is not None:
+-                print >> f, u"+%s:" % host_b.format_name()
++                print("+%s:" % host_b.format_name(), file=f)
+         else:
+-            print >> f, u" %s:" % host_a.format_name()
++            print(" %s:" % host_a.format_name(), file=f)
+ 
+         # State.
+         if self.state_changed:
+             if host_a.state is not None:
+-                print >> f, u"-Host is %s." % host_a.state
++                print("-Host is %s." % host_a.state, file=f)
+             if host_b.state is not None:
+-                print >> f, u"+Host is %s." % host_b.state
++                print("+Host is %s." % host_b.state, file=f)
+         elif verbose:
+-            print >> f, u" Host is %s." % host_b.state
++            print(" Host is %s." % host_b.state, file=f)
+ 
+         # Extraports.
+         if self.extraports_changed:
+             if len(host_a.extraports) > 0:
+-                print >> f, u"-Not shown: %s" % host_a.extraports_string()
++                print("-Not shown: %s" % host_a.extraports_string(), file=f)
+             if len(host_b.extraports) > 0:
+-                print >> f, u"+Not shown: %s" % host_b.extraports_string()
++                print("+Not shown: %s" % host_b.extraports_string(), file=f)
+         elif verbose:
+             if len(host_a.extraports) > 0:
+-                print >> f, u" Not shown: %s" % host_a.extraports_string()
++                print(" Not shown: %s" % host_a.extraports_string(), file=f)
+ 
+         # Port table.
+-        port_table = Table(u"** * * *")
++        port_table = Table("** * * *")
+         if host_a.state is None:
+-            mark = u"+"
++            mark = "+"
+         elif host_b.state is None:
+-            mark = u"-"
++            mark = "-"
+         else:
+-            mark = u" "
+-        port_table.append((mark, u"PORT", u"STATE", u"SERVICE", u"VERSION"))
++            mark = " "
++        port_table.append((mark, "PORT", "STATE", "SERVICE", "VERSION"))
+ 
+         for port in self.ports:
+             port_diff = self.port_diffs[port]
+             port_diff.append_to_port_table(port_table, host_a, host_b)
+ 
+         if len(port_table) > 1:
+-            print >> f, port_table
++            print(port_table, file=f)
+ 
+         # OS changes.
+         if self.os_changed or verbose:
+             if len(host_a.os) > 0:
+                 if len(host_b.os) > 0:
+-                    print >> f, u" OS details:"
++                    print(" OS details:", file=f)
+                 else:
+-                    print >> f, u"-OS details:"
++                    print("-OS details:", file=f)
+             elif len(host_b.os) > 0:
+-                print >> f, u"+OS details:"
++                print("+OS details:", file=f)
+             # os_diffs is a list of 5-tuples returned by
+             # difflib.SequenceMatcher.
+             for op, i1, i2, j1, j2 in self.os_diffs:
+                 if op == "replace" or op == "delete":
+                     for i in range(i1, i2):
+-                        print >> f, "-  %s" % host_a.os[i]
++                        print("-  %s" % host_a.os[i], file=f)
+                 if op == "replace" or op == "insert":
+                     for i in range(j1, j2):
+-                        print >> f, "+  %s" % host_b.os[i]
++                        print("+  %s" % host_b.os[i], file=f)
+                 if op == "equal":
+                     for i in range(i1, i2):
+-                        print >> f, "   %s" % host_a.os[i]
++                        print("   %s" % host_a.os[i], file=f)
+ 
+         print_script_result_diffs_text("Host script results",
+             host_a.script_results, host_b.script_results,
+@@ -820,32 +817,32 @@ class HostDiff(object):
+         host_b = self.host_b
+ 
+         frag = document.createDocumentFragment()
+-        hostdiff_elem = document.createElement(u"hostdiff")
++        hostdiff_elem = document.createElement("hostdiff")
+         frag.appendChild(hostdiff_elem)
+ 
+         if host_a.state is None or host_b.state is None:
+             # The host is missing in one scan. Output the whole thing.
+             if host_a.state is not None:
+-                a_elem = document.createElement(u"a")
++                a_elem = document.createElement("a")
+                 a_elem.appendChild(host_a.to_dom_fragment(document))
+                 hostdiff_elem.appendChild(a_elem)
+             elif host_b.state is not None:
+-                b_elem = document.createElement(u"b")
++                b_elem = document.createElement("b")
+                 b_elem.appendChild(host_b.to_dom_fragment(document))
+                 hostdiff_elem.appendChild(b_elem)
+             return frag
+ 
+-        host_elem = document.createElement(u"host")
++        host_elem = document.createElement("host")
+ 
+         # State.
+         if host_a.state == host_b.state:
+             if verbose:
+                 host_elem.appendChild(host_a.state_to_dom_fragment(document))
+         else:
+-            a_elem = document.createElement(u"a")
++            a_elem = document.createElement("a")
+             a_elem.appendChild(host_a.state_to_dom_fragment(document))
+             host_elem.appendChild(a_elem)
+-            b_elem = document.createElement(u"b")
++            b_elem = document.createElement("b")
+             b_elem.appendChild(host_b.state_to_dom_fragment(document))
+             host_elem.appendChild(b_elem)
+ 
+@@ -854,31 +851,31 @@ class HostDiff(object):
+         addrset_b = set(host_b.addresses)
+         for addr in sorted(addrset_a.intersection(addrset_b)):
+             host_elem.appendChild(addr.to_dom_fragment(document))
+-        a_elem = document.createElement(u"a")
++        a_elem = document.createElement("a")
+         for addr in sorted(addrset_a - addrset_b):
+             a_elem.appendChild(addr.to_dom_fragment(document))
+         if a_elem.hasChildNodes():
+             host_elem.appendChild(a_elem)
+-        b_elem = document.createElement(u"b")
++        b_elem = document.createElement("b")
+         for addr in sorted(addrset_b - addrset_a):
+             b_elem.appendChild(addr.to_dom_fragment(document))
+         if b_elem.hasChildNodes():
+             host_elem.appendChild(b_elem)
+ 
+         # Host names.
+-        hostnames_elem = document.createElement(u"hostnames")
++        hostnames_elem = document.createElement("hostnames")
+         hostnameset_a = set(host_a.hostnames)
+         hostnameset_b = set(host_b.hostnames)
+         for hostname in sorted(hostnameset_a.intersection(hostnameset_b)):
+             hostnames_elem.appendChild(
+                     host_a.hostname_to_dom_fragment(document, hostname))
+-        a_elem = document.createElement(u"a")
++        a_elem = document.createElement("a")
+         for hostname in sorted(hostnameset_a - hostnameset_b):
+             a_elem.appendChild(
+                     host_a.hostname_to_dom_fragment(document, hostname))
+         if a_elem.hasChildNodes():
+             hostnames_elem.appendChild(a_elem)
+-        b_elem = document.createElement(u"b")
++        b_elem = document.createElement("b")
+         for hostname in sorted(hostnameset_b - hostnameset_a):
+             b_elem.appendChild(
+                     host_b.hostname_to_dom_fragment(document, hostname))
+@@ -887,15 +884,15 @@ class HostDiff(object):
+         if hostnames_elem.hasChildNodes():
+             host_elem.appendChild(hostnames_elem)
+ 
+-        ports_elem = document.createElement(u"ports")
++        ports_elem = document.createElement("ports")
+         # Extraports.
+         if host_a.extraports == host_b.extraports:
+             ports_elem.appendChild(host_a.extraports_to_dom_fragment(document))
+         else:
+-            a_elem = document.createElement(u"a")
++            a_elem = document.createElement("a")
+             a_elem.appendChild(host_a.extraports_to_dom_fragment(document))
+             ports_elem.appendChild(a_elem)
+-            b_elem = document.createElement(u"b")
++            b_elem = document.createElement("b")
+             b_elem.appendChild(host_b.extraports_to_dom_fragment(document))
+             ports_elem.appendChild(b_elem)
+         # Port list.
+@@ -911,18 +908,18 @@ class HostDiff(object):
+ 
+         # OS changes.
+         if self.os_changed or verbose:
+-            os_elem = document.createElement(u"os")
++            os_elem = document.createElement("os")
+             # os_diffs is a list of 5-tuples returned by
+             # difflib.SequenceMatcher.
+             for op, i1, i2, j1, j2 in self.os_diffs:
+                 if op == "replace" or op == "delete":
+-                    a_elem = document.createElement(u"a")
++                    a_elem = document.createElement("a")
+                     for i in range(i1, i2):
+                         a_elem.appendChild(host_a.os_to_dom_fragment(
+                             document, host_a.os[i]))
+                     os_elem.appendChild(a_elem)
+                 if op == "replace" or op == "insert":
+-                    b_elem = document.createElement(u"b")
++                    b_elem = document.createElement("b")
+                     for i in range(j1, j2):
+                         b_elem.appendChild(host_b.os_to_dom_fragment(
+                             document, host_b.os[i]))
+@@ -936,7 +933,7 @@ class HostDiff(object):
+ 
+         # Host script changes.
+         if len(self.script_result_diffs) > 0 or verbose:
+-            hostscript_elem = document.createElement(u"hostscript")
++            hostscript_elem = document.createElement("hostscript")
+             host_elem.appendChild(script_result_diffs_to_dom_fragment(
+                 hostscript_elem, host_a.script_results,
+                 host_b.script_results, self.script_result_diffs,
+@@ -989,38 +986,38 @@ class PortDiff(object):
+             self.port_b.service.version_string()]
+         if a_columns == b_columns:
+             if verbose or self.script_result_diffs > 0:
+-                table.append([u" "] + a_columns)
++                table.append([" "] + a_columns)
+         else:
+             if not host_a.is_extraports(self.port_a.state):
+-                table.append([u"-"] + a_columns)
++                table.append(["-"] + a_columns)
+             if not host_b.is_extraports(self.port_b.state):
+-                table.append([u"+"] + b_columns)
++                table.append(["+"] + b_columns)
+ 
+         for sr_diff in self.script_result_diffs:
+             sr_diff.append_to_port_table(table)
+ 
+     def to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+-        portdiff_elem = document.createElement(u"portdiff")
++        portdiff_elem = document.createElement("portdiff")
+         frag.appendChild(portdiff_elem)
+         if (self.port_a.spec == self.port_b.spec and
+                 self.port_a.state == self.port_b.state):
+-            port_elem = document.createElement(u"port")
+-            port_elem.setAttribute(u"portid", unicode(self.port_a.spec[0]))
+-            port_elem.setAttribute(u"protocol", self.port_a.spec[1])
++            port_elem = document.createElement("port")
++            port_elem.setAttribute("portid", str(self.port_a.spec[0]))
++            port_elem.setAttribute("protocol", self.port_a.spec[1])
+             if self.port_a.state is not None:
+-                state_elem = document.createElement(u"state")
+-                state_elem.setAttribute(u"state", self.port_a.state)
++                state_elem = document.createElement("state")
++                state_elem.setAttribute("state", self.port_a.state)
+                 port_elem.appendChild(state_elem)
+             if self.port_a.service == self.port_b.service:
+                 port_elem.appendChild(
+                         self.port_a.service.to_dom_fragment(document))
+             else:
+-                a_elem = document.createElement(u"a")
++                a_elem = document.createElement("a")
+                 a_elem.appendChild(
+                         self.port_a.service.to_dom_fragment(document))
+                 port_elem.appendChild(a_elem)
+-                b_elem = document.createElement(u"b")
++                b_elem = document.createElement("b")
+                 b_elem.appendChild(
+                         self.port_b.service.to_dom_fragment(document))
+                 port_elem.appendChild(b_elem)
+@@ -1028,10 +1025,10 @@ class PortDiff(object):
+                 port_elem.appendChild(sr_diff.to_dom_fragment(document))
+             portdiff_elem.appendChild(port_elem)
+         else:
+-            a_elem = document.createElement(u"a")
++            a_elem = document.createElement("a")
+             a_elem.appendChild(self.port_a.to_dom_fragment(document))
+             portdiff_elem.appendChild(a_elem)
+-            b_elem = document.createElement(u"b")
++            b_elem = document.createElement("b")
+             b_elem.appendChild(self.port_b.to_dom_fragment(document))
+             portdiff_elem.appendChild(b_elem)
+ 
+@@ -1086,13 +1083,13 @@ class ScriptResultDiff(object):
+             for op, i1, i2, j1, j2 in diffs.get_opcodes():
+                 if op == "replace" or op == "delete":
+                     for k in range(i1, i2):
+-                        table.append_raw(u"-" + a_lines[k])
++                        table.append_raw("-" + a_lines[k])
+                 if op == "replace" or op == "insert":
+                     for k in range(j1, j2):
+-                        table.append_raw(u"+" + b_lines[k])
++                        table.append_raw("+" + b_lines[k])
+                 if op == "equal":
+                     for k in range(i1, i2):
+-                        table.append_raw(u" " + a_lines[k])
++                        table.append_raw(" " + a_lines[k])
+ 
+     def to_dom_fragment(self, document):
+         frag = document.createDocumentFragment()
+@@ -1102,11 +1099,11 @@ class ScriptResultDiff(object):
+             frag.appendChild(self.sr_a.to_dom_fragment(document))
+         else:
+             if self.sr_a is not None:
+-                a_elem = document.createElement(u"a")
++                a_elem = document.createElement("a")
+                 a_elem.appendChild(self.sr_a.to_dom_fragment(document))
+                 frag.appendChild(a_elem)
+             if self.sr_b is not None:
+-                b_elem = document.createElement(u"b")
++                b_elem = document.createElement("b")
+                 b_elem.appendChild(self.sr_b.to_dom_fragment(document))
+                 frag.appendChild(b_elem)
+         return frag
+@@ -1120,7 +1117,7 @@ class Table(object):
+         copied to the output."""
+         self.widths = []
+         self.rows = []
+-        self.prefix = u""
++        self.prefix = ""
+         self.padding = []
+         j = 0
+         while j < len(template) and template[j] != "*":
+@@ -1145,7 +1142,7 @@ class Table(object):
+ 
+         for i in range(len(row)):
+             if row[i] is None:
+-                s = u""
++                s = ""
+             else:
+                 s = str(row[i])
+             if i == len(self.widths):
+@@ -1167,7 +1164,7 @@ class Table(object):
+         for row in self.rows:
+             parts = [self.prefix]
+             i = 0
+-            if isinstance(row, basestring):
++            if isinstance(row, str):
+                 # A raw string.
+                 lines.append(row)
+             else:
+@@ -1176,13 +1173,13 @@ class Table(object):
+                     if i < len(self.padding):
+                         parts.append(self.padding[i])
+                     i += 1
+-                lines.append(u"".join(parts).rstrip())
+-        return u"\n".join(lines)
++                lines.append("".join(parts).rstrip())
++        return "\n".join(lines)
+ 
+ 
+ def warn(str):
+     """Print a warning to stderr."""
+-    print >> sys.stderr, str
++    print(str, file=sys.stderr)
+ 
+ 
+ class NmapContentHandler(xml.sax.handler.ContentHandler):
+@@ -1200,22 +1197,22 @@ class NmapContentHandler(xml.sax.handler.ContentHandler):
+         self.current_port = None
+ 
+         self._start_elem_handlers = {
+-            u"nmaprun": self._start_nmaprun,
+-            u"host": self._start_host,
+-            u"status": self._start_status,
+-            u"address": self._start_address,
+-            u"hostname": self._start_hostname,
+-            u"extraports": self._start_extraports,
+-            u"port": self._start_port,
+-            u"state": self._start_state,
+-            u"service": self._start_service,
+-            u"script": self._start_script,
+-            u"osmatch": self._start_osmatch,
+-            u"finished": self._start_finished,
++            "nmaprun": self._start_nmaprun,
++            "host": self._start_host,
++            "status": self._start_status,
++            "address": self._start_address,
++            "hostname": self._start_hostname,
++            "extraports": self._start_extraports,
++            "port": self._start_port,
++            "state": self._start_state,
++            "service": self._start_service,
++            "script": self._start_script,
++            "osmatch": self._start_osmatch,
++            "finished": self._start_finished,
+         }
+         self._end_elem_handlers = {
+-            u'host': self._end_host,
+-            u'port': self._end_port,
++            'host': self._end_host,
++            'port': self._end_port,
+         }
+ 
+     def parent_element(self):
+@@ -1245,68 +1242,68 @@ class NmapContentHandler(xml.sax.handler.ContentHandler):
+     def _start_nmaprun(self, name, attrs):
+         assert self.parent_element() is None
+         if "start" in attrs:
+-            start_timestamp = int(attrs.get(u"start"))
++            start_timestamp = int(attrs.get("start"))
+             self.scan.start_date = datetime.datetime.fromtimestamp(
+                     start_timestamp)
+-        self.scan.scanner = attrs.get(u"scanner")
+-        self.scan.args = attrs.get(u"args")
+-        self.scan.version = attrs.get(u"version")
++        self.scan.scanner = attrs.get("scanner")
++        self.scan.args = attrs.get("args")
++        self.scan.version = attrs.get("version")
+ 
+     def _start_host(self, name, attrs):
+-        assert self.parent_element() == u"nmaprun"
++        assert self.parent_element() == "nmaprun"
+         self.current_host = Host()
+         self.scan.hosts.append(self.current_host)
+ 
+     def _start_status(self, name, attrs):
+-        assert self.parent_element() == u"host"
++        assert self.parent_element() == "host"
+         assert self.current_host is not None
+-        state = attrs.get(u"state")
++        state = attrs.get("state")
+         if state is None:
+             warn(u'%s element of host %s is missing the "state" attribute; '
+-                    'assuming \unknown\.' % (
++                    r'assuming \unknown\.' % (
+                         name, self.current_host.format_name()))
+             return
+         self.current_host.state = state
+ 
+     def _start_address(self, name, attrs):
+-        assert self.parent_element() == u"host"
++        assert self.parent_element() == "host"
+         assert self.current_host is not None
+-        addr = attrs.get(u"addr")
++        addr = attrs.get("addr")
+         if addr is None:
+-            warn(u'%s element of host %s is missing the "addr" '
++            warn('%s element of host %s is missing the "addr" '
+                     'attribute; skipping.' % (
+                         name, self.current_host.format_name()))
+             return
+-        addrtype = attrs.get(u"addrtype", u"ipv4")
++        addrtype = attrs.get("addrtype", "ipv4")
+         self.current_host.add_address(Address.new(addrtype, addr))
+ 
+     def _start_hostname(self, name, attrs):
+-        assert self.parent_element() == u"hostnames"
++        assert self.parent_element() == "hostnames"
+         assert self.current_host is not None
+-        hostname = attrs.get(u"name")
++        hostname = attrs.get("name")
+         if hostname is None:
+-            warn(u'%s element of host %s is missing the "name" '
++            warn('%s element of host %s is missing the "name" '
+                     'attribute; skipping.' % (
+                         name, self.current_host.format_name()))
+             return
+         self.current_host.add_hostname(hostname)
+ 
+     def _start_extraports(self, name, attrs):
+-        assert self.parent_element() == u"ports"
++        assert self.parent_element() == "ports"
+         assert self.current_host is not None
+-        state = attrs.get(u"state")
++        state = attrs.get("state")
+         if state is None:
+-            warn(u'%s element of host %s is missing the "state" '
++            warn('%s element of host %s is missing the "state" '
+                     'attribute; assuming "unknown".' % (
+                         name, self.current_host.format_name()))
+             state = None
+         if state in self.current_host.extraports:
+-            warn(u'Duplicate extraports state "%s" in host %s.' % (
++            warn('Duplicate extraports state "%s" in host %s.' % (
+                 state, self.current_host.format_name()))
+ 
+-        count = attrs.get(u"count")
++        count = attrs.get("count")
+         if count is None:
+-            warn(u'%s element of host %s is missing the "count" '
++            warn('%s element of host %s is missing the "count" '
+                     'attribute; assuming 0.' % (
+                         name, self.current_host.format_name()))
+             count = 0
+@@ -1314,99 +1311,99 @@ class NmapContentHandler(xml.sax.handler.ContentHandler):
+             try:
+                 count = int(count)
+             except ValueError:
+-                warn(u"Can't convert extraports count \"%s\" "
++                warn("Can't convert extraports count \"%s\" "
+                         "to an integer in host %s; assuming 0." % (
+-                            attrs[u"count"], self.current_host.format_name()))
++                            attrs["count"], self.current_host.format_name()))
+                 count = 0
+         self.current_host.extraports[state] = count
+ 
+     def _start_port(self, name, attrs):
+-        assert self.parent_element() == u"ports"
++        assert self.parent_element() == "ports"
+         assert self.current_host is not None
+-        portid_str = attrs.get(u"portid")
++        portid_str = attrs.get("portid")
+         if portid_str is None:
+-            warn(u'%s element of host %s missing the "portid" '
++            warn('%s element of host %s missing the "portid" '
+                     'attribute; skipping.' % (
+                         name, self.current_host.format_name()))
+             return
+         try:
+             portid = int(portid_str)
+         except ValueError:
+-            warn(u"Can't convert portid \"%s\" to an integer "
++            warn("Can't convert portid \"%s\" to an integer "
+                     "in host %s; skipping port." % (
+                         portid_str, self.current_host.format_name()))
+             return
+-        protocol = attrs.get(u"protocol")
++        protocol = attrs.get("protocol")
+         if protocol is None:
+-            warn(u'%s element of host %s missing the "protocol" '
++            warn('%s element of host %s missing the "protocol" '
+                     'attribute; skipping.' % (
+                         name, self.current_host.format_name()))
+             return
+         self.current_port = Port((portid, protocol))
+ 
+     def _start_state(self, name, attrs):
+-        assert self.parent_element() == u"port"
++        assert self.parent_element() == "port"
+         assert self.current_host is not None
+         if self.current_port is None:
+             return
+         if "state" not in attrs:
+-            warn(u'%s element of port %s is missing the "state" '
++            warn('%s element of port %s is missing the "state" '
+                     'attribute; assuming "unknown".' % (
+                         name, self.current_port.spec_string()))
+             return
+-        self.current_port.state = attrs[u"state"]
++        self.current_port.state = attrs["state"]
+         self.current_host.add_port(self.current_port)
+ 
+     def _start_service(self, name, attrs):
+-        assert self.parent_element() == u"port"
++        assert self.parent_element() == "port"
+         assert self.current_host is not None
+         if self.current_port is None:
+             return
+-        self.current_port.service.name = attrs.get(u"name")
+-        self.current_port.service.product = attrs.get(u"product")
+-        self.current_port.service.version = attrs.get(u"version")
+-        self.current_port.service.extrainfo = attrs.get(u"extrainfo")
+-        self.current_port.service.tunnel = attrs.get(u"tunnel")
++        self.current_port.service.name = attrs.get("name")
++        self.current_port.service.product = attrs.get("product")
++        self.current_port.service.version = attrs.get("version")
++        self.current_port.service.extrainfo = attrs.get("extrainfo")
++        self.current_port.service.tunnel = attrs.get("tunnel")
+ 
+     def _start_script(self, name, attrs):
+         result = ScriptResult()
+-        result.id = attrs.get(u"id")
++        result.id = attrs.get("id")
+         if result.id is None:
+-            warn(u'%s element missing the "id" attribute; skipping.' % name)
++            warn('%s element missing the "id" attribute; skipping.' % name)
+             return
+ 
+-        result.output = attrs.get(u"output")
++        result.output = attrs.get("output")
+         if result.output is None:
+-            warn(u'%s element missing the "output" attribute; skipping.'
++            warn('%s element missing the "output" attribute; skipping.'
+                     % name)
+             return
+-        if self.parent_element() == u"prescript":
++        if self.parent_element() == "prescript":
+             self.scan.pre_script_results.append(result)
+-        elif self.parent_element() == u"postscript":
++        elif self.parent_element() == "postscript":
+             self.scan.post_script_results.append(result)
+-        elif self.parent_element() == u"hostscript":
++        elif self.parent_element() == "hostscript":
+             self.current_host.script_results.append(result)
+-        elif self.parent_element() == u"port":
++        elif self.parent_element() == "port":
+             self.current_port.script_results.append(result)
+         else:
+-            warn(u"%s element not inside prescript, postscript, hostscript, "
++            warn("%s element not inside prescript, postscript, hostscript, "
+                     "or port element; ignoring." % name)
+             return
+ 
+     def _start_osmatch(self, name, attrs):
+-        assert self.parent_element() == u"os"
++        assert self.parent_element() == "os"
+         assert self.current_host is not None
+         if "name" not in attrs:
+-            warn(u'%s element of host %s is missing the "name" '
++            warn('%s element of host %s is missing the "name" '
+                     'attribute; skipping.' % (
+                         name, self.current_host.format_name()))
+             return
+-        self.current_host.os.append(attrs[u"name"])
++        self.current_host.os.append(attrs["name"])
+ 
+     def _start_finished(self, name, attrs):
+-        assert self.parent_element() == u"runstats"
++        assert self.parent_element() == "runstats"
+         if "time" in attrs:
+-            end_timestamp = int(attrs.get(u"time"))
++            end_timestamp = int(attrs.get("time"))
+             self.scan.end_date = datetime.datetime.fromtimestamp(end_timestamp)
+ 
+     def _end_host(self, name):
+@@ -1425,23 +1422,23 @@ class XMLWriter (xml.sax.saxutils.XMLGenerator):
+ 
+     def frag(self, frag):
+         for node in frag.childNodes:
+-            node.writexml(self.f, newl=u"\n")
++            node.writexml(self.f, newl="\n")
+ 
+     def frag_a(self, frag):
+-        self.startElement(u"a", {})
++        self.startElement("a", {})
+         for node in frag.childNodes:
+-            node.writexml(self.f, newl=u"\n")
+-        self.endElement(u"a")
++            node.writexml(self.f, newl="\n")
++        self.endElement("a")
+ 
+     def frag_b(self, frag):
+-        self.startElement(u"b", {})
++        self.startElement("b", {})
+         for node in frag.childNodes:
+-            node.writexml(self.f, newl=u"\n")
+-        self.endElement(u"b")
++            node.writexml(self.f, newl="\n")
++        self.endElement("b")
+ 
+ 
+ def usage():
+-    print u"""\
++    print("""\
+ Usage: %s [option] FILE1 FILE2
+ Compare two Nmap XML files and display a list of their differences.
+ Differences include host state changes, port state changes, and changes to
+@@ -1451,7 +1448,7 @@ service and OS detection.
+   -v, --verbose  also show hosts and ports that haven't changed.
+   --text         display output in text format (default)
+   --xml          display output in XML format\
+-""" % sys.argv[0]
++""" % sys.argv[0])
+ 
+ EXIT_EQUAL = 0
+ EXIT_DIFFERENT = 1
+@@ -1459,8 +1456,8 @@ EXIT_ERROR = 2
+ 
+ 
+ def usage_error(msg):
+-    print >> sys.stderr, u"%s: %s" % (sys.argv[0], msg)
+-    print >> sys.stderr, u"Try '%s -h' for help." % sys.argv[0]
++    print("%s: %s" % (sys.argv[0], msg), file=sys.stderr)
++    print("Try '%s -h' for help." % sys.argv[0], file=sys.stderr)
+     sys.exit(EXIT_ERROR)
+ 
+ 
+@@ -1471,7 +1468,7 @@ def main():
+     try:
+         opts, input_filenames = getopt.gnu_getopt(
+                 sys.argv[1:], "hv", ["help", "text", "verbose", "xml"])
+-    except getopt.GetoptError, e:
++    except getopt.GetoptError as e:
+         usage_error(e.msg)
+     for o, a in opts:
+         if o == "-h" or o == "--help":
+@@ -1481,15 +1478,15 @@ def main():
+             verbose = True
+         elif o == "--text":
+             if output_format is not None and output_format != "text":
+-                usage_error(u"contradictory output format options.")
++                usage_error("contradictory output format options.")
+             output_format = "text"
+         elif o == "--xml":
+             if output_format is not None and output_format != "xml":
+-                usage_error(u"contradictory output format options.")
++                usage_error("contradictory output format options.")
+             output_format = "xml"
+ 
+     if len(input_filenames) != 2:
+-        usage_error(u"need exactly two input filenames.")
++        usage_error("need exactly two input filenames.")
+ 
+     if output_format is None:
+         output_format = "text"
+@@ -1502,8 +1499,8 @@ def main():
+         scan_a.load_from_file(filename_a)
+         scan_b = Scan()
+         scan_b.load_from_file(filename_b)
+-    except IOError, e:
+-        print >> sys.stderr, u"Can't open file: %s" % str(e)
++    except IOError as e:
++        print("Can't open file: %s" % str(e), file=sys.stderr)
+         sys.exit(EXIT_ERROR)
+ 
+     if output_format == "text":
+diff --git a/ndiff/ndifftest.py b/ndiff/ndifftest.py
+index 2fa4ae0..27fc525 100755
+--- a/ndiff/ndifftest.py
++++ b/ndiff/ndifftest.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ 
+ # Unit tests for Ndiff.
+ 
+@@ -22,7 +22,7 @@ for x in dir(ndiff):
+ sys.dont_write_bytecode = dont_write_bytecode
+ del dont_write_bytecode
+ 
+-import StringIO
++import io
+ 
+ 
+ class scan_test(unittest.TestCase):
+@@ -52,7 +52,7 @@ class scan_test(unittest.TestCase):
+         scan.load_from_file("test-scans/single.xml")
+         host = scan.hosts[0]
+         self.assertEqual(len(host.ports), 5)
+-        self.assertEqual(host.extraports.items(), [("filtered", 95)])
++        self.assertEqual(list(host.extraports.items()), [("filtered", 95)])
+ 
+     def test_extraports_multi(self):
+         """Test that the correct number of known ports is returned when there
+@@ -68,9 +68,9 @@ class scan_test(unittest.TestCase):
+         """Test that nmaprun information is recorded."""
+         scan = Scan()
+         scan.load_from_file("test-scans/empty.xml")
+-        self.assertEqual(scan.scanner, u"nmap")
+-        self.assertEqual(scan.version, u"4.90RC2")
+-        self.assertEqual(scan.args, u"nmap -oX empty.xml -p 1-100")
++        self.assertEqual(scan.scanner, "nmap")
++        self.assertEqual(scan.version, "4.90RC2")
++        self.assertEqual(scan.args, "nmap -oX empty.xml -p 1-100")
+ 
+     def test_addresses(self):
+         """Test that addresses are recorded."""
+@@ -84,7 +84,7 @@ class scan_test(unittest.TestCase):
+         scan = Scan()
+         scan.load_from_file("test-scans/simple.xml")
+         host = scan.hosts[0]
+-        self.assertEqual(host.hostnames, [u"scanme.nmap.org"])
++        self.assertEqual(host.hostnames, ["scanme.nmap.org"])
+ 
+     def test_os(self):
+         """Test that OS information is recorded."""
+@@ -99,7 +99,7 @@ class scan_test(unittest.TestCase):
+         scan.load_from_file("test-scans/complex.xml")
+         host = scan.hosts[0]
+         self.assertTrue(len(host.script_results) > 0)
+-        self.assertTrue(len(host.ports[(22, u"tcp")].script_results) > 0)
++        self.assertTrue(len(host.ports[(22, "tcp")].script_results) > 0)
+ 
+ # This test is commented out because Nmap XML doesn't store any information
+ # about down hosts, not even the fact that they are down. Recovering the list
+@@ -128,16 +128,16 @@ class host_test(unittest.TestCase):
+ 
+     def test_format_name(self):
+         h = Host()
+-        self.assertTrue(isinstance(h.format_name(), basestring))
+-        h.add_address(IPv4Address(u"127.0.0.1"))
+-        self.assertTrue(u"127.0.0.1" in h.format_name())
++        self.assertTrue(isinstance(h.format_name(), str))
++        h.add_address(IPv4Address("127.0.0.1"))
++        self.assertTrue("127.0.0.1" in h.format_name())
+         h.add_address(IPv6Address("::1"))
+-        self.assertTrue(u"127.0.0.1" in h.format_name())
+-        self.assertTrue(u"::1" in h.format_name())
+-        h.add_hostname(u"localhost")
+-        self.assertTrue(u"127.0.0.1" in h.format_name())
+-        self.assertTrue(u"::1" in h.format_name())
+-        self.assertTrue(u"localhost" in h.format_name())
++        self.assertTrue("127.0.0.1" in h.format_name())
++        self.assertTrue("::1" in h.format_name())
++        h.add_hostname("localhost")
++        self.assertTrue("127.0.0.1" in h.format_name())
++        self.assertTrue("::1" in h.format_name())
++        self.assertTrue("localhost" in h.format_name())
+ 
+     def test_empty_get_port(self):
+         h = Host()
+@@ -197,8 +197,8 @@ class host_test(unittest.TestCase):
+         h = s.hosts[0]
+         self.assertEqual(len(h.ports), 5)
+         self.assertEqual(len(h.extraports), 1)
+-        self.assertEqual(h.extraports.keys()[0], u"filtered")
+-        self.assertEqual(h.extraports.values()[0], 95)
++        self.assertEqual(list(h.extraports.keys())[0], "filtered")
++        self.assertEqual(list(h.extraports.values())[0], 95)
+         self.assertEqual(h.state, "up")
+ 
+ 
+@@ -241,13 +241,13 @@ class port_test(unittest.TestCase):
+     """Test the Port class."""
+     def test_spec_string(self):
+         p = Port((10, "tcp"))
+-        self.assertEqual(p.spec_string(), u"10/tcp")
++        self.assertEqual(p.spec_string(), "10/tcp")
+         p = Port((100, "ip"))
+-        self.assertEqual(p.spec_string(), u"100/ip")
++        self.assertEqual(p.spec_string(), "100/ip")
+ 
+     def test_state_string(self):
+         p = Port((10, "tcp"))
+-        self.assertEqual(p.state_string(), u"unknown")
++        self.assertEqual(p.state_string(), "unknown")
+ 
+ 
+ class service_test(unittest.TestCase):
+@@ -255,47 +255,47 @@ class service_test(unittest.TestCase):
+     def test_compare(self):
+         """Test that services with the same contents compare equal."""
+         a = Service()
+-        a.name = u"ftp"
+-        a.product = u"FooBar FTP"
+-        a.version = u"1.1.1"
+-        a.tunnel = u"ssl"
++        a.name = "ftp"
++        a.product = "FooBar FTP"
++        a.version = "1.1.1"
++        a.tunnel = "ssl"
+         self.assertEqual(a, a)
+         b = Service()
+-        b.name = u"ftp"
+-        b.product = u"FooBar FTP"
+-        b.version = u"1.1.1"
+-        b.tunnel = u"ssl"
++        b.name = "ftp"
++        b.product = "FooBar FTP"
++        b.version = "1.1.1"
++        b.tunnel = "ssl"
+         self.assertEqual(a, b)
+-        b.name = u"http"
++        b.name = "http"
+         self.assertNotEqual(a, b)
+         c = Service()
+         self.assertNotEqual(a, c)
+ 
+     def test_tunnel(self):
+         serv = Service()
+-        serv.name = u"http"
+-        serv.tunnel = u"ssl"
+-        self.assertEqual(serv.name_string(), u"ssl/http")
++        serv.name = "http"
++        serv.tunnel = "ssl"
++        self.assertEqual(serv.name_string(), "ssl/http")
+ 
+     def test_version_string(self):
+         serv = Service()
+-        serv.product = u"FooBar"
++        serv.product = "FooBar"
+         self.assertTrue(len(serv.version_string()) > 0)
+         serv = Service()
+-        serv.version = u"1.2.3"
++        serv.version = "1.2.3"
+         self.assertTrue(len(serv.version_string()) > 0)
+         serv = Service()
+-        serv.extrainfo = u"misconfigured"
++        serv.extrainfo = "misconfigured"
+         self.assertTrue(len(serv.version_string()) > 0)
+         serv = Service()
+-        serv.product = u"FooBar"
+-        serv.version = u"1.2.3"
++        serv.product = "FooBar"
++        serv.version = "1.2.3"
+         # Must match Nmap output.
+         self.assertEqual(serv.version_string(),
+-                u"%s %s" % (serv.product, serv.version))
+-        serv.extrainfo = u"misconfigured"
++                "%s %s" % (serv.product, serv.version))
++        serv.extrainfo = "misconfigured"
+         self.assertEqual(serv.version_string(),
+-                u"%s %s (%s)" % (serv.product, serv.version, serv.extrainfo))
++                "%s %s (%s)" % (serv.product, serv.version, serv.extrainfo))
+ 
+ 
+ class ScanDiffSub(ScanDiff):
+@@ -703,7 +703,7 @@ class scan_diff_xml_test(unittest.TestCase):
+         a.load_from_file("test-scans/empty.xml")
+         b = Scan()
+         b.load_from_file("test-scans/simple.xml")
+-        f = StringIO.StringIO()
++        f = io.StringIO()
+         self.scan_diff = ScanDiffXML(a, b, f)
+         self.scan_diff.output()
+         self.xml = f.getvalue()
+@@ -712,8 +712,8 @@ class scan_diff_xml_test(unittest.TestCase):
+     def test_well_formed(self):
+         try:
+             document = xml.dom.minidom.parseString(self.xml)
+-        except Exception, e:
+-            self.fail(u"Parsing XML diff output caused the exception: %s"
++        except Exception as e:
++            self.fail("Parsing XML diff output caused the exception: %s"
+                     % str(e))
+ 
+ 
+@@ -739,8 +739,8 @@ def host_apply_diff(host, diff):
+         host.os = diff.host_b.os[:]
+ 
+     if diff.extraports_changed:
+-        for state in host.extraports.keys():
+-            for port in host.ports.values():
++        for state in list(host.extraports.keys()):
++            for port in list(host.ports.values()):
+                 if port.state == state:
+                     del host.ports[port.spec]
+         host.extraports = diff.host_b.extraports.copy()
+diff --git a/ndiff/scripts/ndiff b/ndiff/scripts/ndiff
+index 8517c07..4671e73 100755
+--- a/ndiff/scripts/ndiff
++++ b/ndiff/scripts/ndiff
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ 
+ # Ndiff
+ #
+@@ -67,15 +67,15 @@ if INSTALL_LIB is not None and is_secure_dir(INSTALL_LIB):
+ 
+ try:
+     import ndiff
+-except ImportError, e:
+-    print >> sys.stderr, """\
++except ImportError as e:
++    print("""\
+ Could not import the ndiff module: %s.
+-I checked in these directories:""" % repr(e.message)
++I checked in these directories:""" % repr(e), file=sys.stderr)
+     for dir in sys.path:
+-        print >> sys.stderr, "    %s" % dir
+-    print >> sys.stderr, """\
++        print("    %s" % dir, file=sys.stderr)
++    print("""\
+ If you installed Ndiff in another directory, you may have to add the
+-modules directory to the PYTHONPATH environment variable."""
++modules directory to the PYTHONPATH environment variable.""", file=sys.stderr)
+     sys.exit(1)
+ 
+ import ndiff
+diff --git a/ndiff/setup.py b/ndiff/setup.py
+old mode 100644
+new mode 100755
+index b5e254c..c49bcf3
+--- a/ndiff/setup.py
++++ b/ndiff/setup.py
+@@ -94,7 +94,7 @@ class checked_install(distutils.command.install.install):
+         self.saved_prefix = sys.prefix
+         try:
+             distutils.command.install.install.finalize_options(self)
+-        except distutils.errors.DistutilsPlatformError, e:
++        except distutils.errors.DistutilsPlatformError as e:
+             raise distutils.errors.DistutilsPlatformError(str(e) + """
+ Installing your distribution's python-dev package may solve this problem.""")
+ 
+@@ -155,13 +155,13 @@ Installing your distribution's python-dev package may solve this problem.""")
+ #!/usr/bin/env python
+ import errno, os, os.path, sys
+ 
+-print 'Uninstall %(name)s'
++print('Uninstall %(name)s')
+ 
+ answer = raw_input('Are you sure that you want to uninstall '
+     '%(name)s (yes/no) ')
+ 
+ if answer != 'yes' and answer != 'y':
+-    print 'Not uninstalling.'
++    print('Not uninstalling.')
+     sys.exit(0)
+ 
+ """ % {'name': APP_NAME}
+@@ -177,8 +177,8 @@ if answer != 'yes' and answer != 'y':
+                     # This should never happen (everything gets installed
+                     # inside the root), but if it does, be safe and don't
+                     # delete anything.
+-                    uninstaller += ("print '%s was not installed inside "
+-                        "the root %s; skipping.'\n" % (output, self.root))
++                    uninstaller += ("print('%s was not installed inside "
++                        "the root %s; skipping.')\n" % (output, self.root))
+                     continue
+                 output = path_strip_prefix(output, self.root)
+                 assert os.path.isabs(output)
+@@ -202,24 +202,24 @@ for path in INSTALLED_FILES:
+         dirs.append(path)
+ # Delete the files.
+ for file in files:
+-    print "Removing '%s'." % file
++    print("Removing '%s'." % file)
+     try:
+         os.remove(file)
+-    except OSError, e:
+-        print >> sys.stderr, '  Error: %s.' % str(e)
++    except OSError as e:
++        print('  Error: %s.' % str(e), file=sys.stderr)
+ # Delete the directories. First reverse-sort the normalized paths by
+ # length so that child directories are deleted before their parents.
+ dirs = [os.path.normpath(dir) for dir in dirs]
+ dirs.sort(key = len, reverse = True)
+ for dir in dirs:
+     try:
+-        print "Removing the directory '%s'." % dir
++        print("Removing the directory '%s'." % dir)
+         os.rmdir(dir)
+-    except OSError, e:
++    except OSError as e:
+         if e.errno == errno.ENOTEMPTY:
+-            print "Directory '%s' not empty; not removing." % dir
++            print("Directory '%s' not empty; not removing." % dir)
+         else:
+-            print >> sys.stderr, str(e)
++            print(str(e), file=sys.stderr)
+ """
+ 
+         uninstaller_file = open(uninstaller_filename, 'w')
+@@ -227,7 +227,7 @@ for dir in dirs:
+         uninstaller_file.close()
+ 
+         # Set exec bit for uninstaller
+-        mode = ((os.stat(uninstaller_filename)[ST_MODE]) | 0555) & 07777
++        mode = ((os.stat(uninstaller_filename)[ST_MODE]) | 0o555) & 0o7777
+         os.chmod(uninstaller_filename, mode)
+ 
+     def write_installed_files(self):
+@@ -242,7 +242,7 @@ for dir in dirs:
+         try:
+             for output in self.get_installed_files():
+                 assert "\n" not in output
+-                print >> f, output
++                print(output, file=f)
+         finally:
+             f.close()
+ 
+@@ -266,7 +266,7 @@ class my_uninstall(distutils.cmd.Command):
+         # Read the list of installed files.
+         try:
+             f = open(INSTALLED_FILES_NAME, "r")
+-        except IOError, e:
++        except IOError as e:
+             if e.errno == errno.ENOENT:
+                 log.error("Couldn't open the installation record '%s'. "
+                         "Have you installed yet?" % INSTALLED_FILES_NAME)
+@@ -289,7 +289,7 @@ class my_uninstall(distutils.cmd.Command):
+             try:
+                 if not self.dry_run:
+                     os.remove(file)
+-            except OSError, e:
++            except OSError as e:
+                 log.error(str(e))
+         # Delete the directories. First reverse-sort the normalized paths by
+         # length so that child directories are deleted before their parents.
+@@ -300,7 +300,7 @@ class my_uninstall(distutils.cmd.Command):
+                 log.info("Removing the directory '%s'." % dir)
+                 if not self.dry_run:
+                     os.rmdir(dir)
+-            except OSError, e:
++            except OSError as e:
+                 if e.errno == errno.ENOTEMPTY:
+                     log.info("Directory '%s' not empty; not removing." % dir)
+                 else:
+diff --git a/ndiff/test-scans/anonymize.py b/ndiff/test-scans/anonymize.py
+index 9ba612a..fd251fe 100755
+--- a/ndiff/test-scans/anonymize.py
++++ b/ndiff/test-scans/anonymize.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ 
+ # Anonymize an Nmap XML file, replacing host name and IP addresses with random
+ # anonymous ones. Anonymized names will be consistent between runs of the
+@@ -20,20 +20,20 @@ r = random.Random()
+ 
+ 
+ def hash(s):
+-    digest = hashlib.sha512(s).hexdigest()
++    digest = hashlib.sha512(s.encode()).hexdigest()
+     return int(digest, 16)
+ 
+ 
+ def anonymize_mac_address(addr):
+     r.seed(hash(addr))
+     nums = (0, 0, 0) + tuple(r.randrange(256) for i in range(3))
+-    return u":".join(u"%02X" % x for x in nums)
++    return ":".join("%02X" % x for x in nums)
+ 
+ 
+ def anonymize_ipv4_address(addr):
+     r.seed(hash(addr))
+     nums = (10,) + tuple(r.randrange(256) for i in range(3))
+-    return u".".join(unicode(x) for x in nums)
++    return ".".join(str(x) for x in nums)
+ 
+ 
+ def anonymize_ipv6_address(addr):
+@@ -41,7 +41,7 @@ def anonymize_ipv6_address(addr):
+     # RFC 4193.
+     nums = (0xFD00 + r.randrange(256),)
+     nums = nums + tuple(r.randrange(65536) for i in range(7))
+-    return u":".join("%04X" % x for x in nums)
++    return ":".join("%04X" % x for x in nums)
+ 
+ # Maps to memoize address and host name conversions.
+ hostname_map = {}
+@@ -54,11 +54,11 @@ def anonymize_hostname(name):
+     LETTERS = "acbdefghijklmnopqrstuvwxyz"
+     r.seed(hash(name))
+     length = r.randrange(5, 10)
+-    prefix = u"".join(r.sample(LETTERS, length))
++    prefix = "".join(r.sample(LETTERS, length))
+     num = r.randrange(1000)
+-    hostname_map[name] = u"%s-%d.example.com" % (prefix, num)
++    hostname_map[name] = "%s-%d.example.com" % (prefix, num)
+     if VERBOSE:
+-        print >> sys.stderr, "Replace %s with %s" % (name, hostname_map[name])
++        print("Replace %s with %s" % (name, hostname_map[name]), file=sys.stderr)
+     return hostname_map[name]
+ 
+ mac_re = re.compile(r'\b([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}\b')
+@@ -78,7 +78,7 @@ def anonymize_address(addr):
+     else:
+         assert False
+     if VERBOSE:
+-        print >> sys.stderr, "Replace %s with %s" % (addr, address_map[addr])
++        print("Replace %s with %s" % (addr, address_map[addr]), file=sys.stderr)
+     return address_map[addr]
+ 
+ 
+-- 
+2.24.1
+
diff --git a/meta-openembedded/meta-oe/recipes-security/nmap/files/0001-configure.ac-make-ndiff-depend-on-python3.patch b/meta-openembedded/meta-oe/recipes-security/nmap/files/0001-configure.ac-make-ndiff-depend-on-python3.patch
new file mode 100644
index 0000000..c43ff9f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-security/nmap/files/0001-configure.ac-make-ndiff-depend-on-python3.patch
@@ -0,0 +1,48 @@
+From 562893e665a6c9e1b60c8b3242bab6fe78318b3b Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 14 Feb 2020 08:19:54 +0000
+Subject: [PATCH] configure.ac: make ndiff depend on python3
+
+Python 2 ceased being maintained on the 1st January 2020.
+We've already removed all users of it from oe-core, so
+let ndiff depend on python3.
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ .../nmap/7.80-r0/nmap-7.80/configure.ac               | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 9d2fff8..5ffdd55 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -237,16 +237,21 @@ if test $HAVE_PYTHON && test "x${PYTHON_VERSION%%.*}" = "x2"; then
+     HAVE_PYTHON2=true
+ fi
+ 
++HAVE_PYTHON3=false
++if test $HAVE_PYTHON && test "x${PYTHON_VERSION%%.*}" = "x3"; then
++    HAVE_PYTHON3=true
++fi
++
+ NDIFFDIR=ndiff
+ 
+ # Do they want Ndiff?
+ AC_ARG_WITH(ndiff, AC_HELP_STRING([--without-ndiff], [Skip installation of the Ndiff utility]), [], [with_ndiff=check])
+-if $HAVE_PYTHON2 ; then : ;
++if $HAVE_PYTHON3 ; then : ;
+ else
+   if test "$with_ndiff" = "check" ; then
+-    AC_MSG_WARN([Not building Ndiff because Python 2.x with x>=4 was not found])
++    AC_MSG_WARN([Not building Ndiff because Python3 was not found])
+   elif test "$with_ndiff" = "yes"; then
+-    AC_MSG_FAILURE([--with-ndiff requires Python 2.x with x>=4])
++    AC_MSG_FAILURE([--with-ndiff requires Python3])
+   fi
+   with_ndiff=no
+ fi
+-- 
+2.24.1
+
diff --git a/meta-openembedded/meta-oe/recipes-security/nmap/nmap_7.80.bb b/meta-openembedded/meta-oe/recipes-security/nmap/nmap_7.80.bb
index f24194d..c76d232 100644
--- a/meta-openembedded/meta-oe/recipes-security/nmap/nmap_7.80.bb
+++ b/meta-openembedded/meta-oe/recipes-security/nmap/nmap_7.80.bb
@@ -10,12 +10,14 @@
            file://nmap-replace-shtool-mkdir-with-coreutils-mkdir-command.patch \
            file://0001-Include-time.h-header-to-pass-clang-compilation.patch \
            file://0002-Fix-building-with-libc.patch \
+           file://0001-Make-ndiff-support-python3.patch \
+           file://0001-configure.ac-make-ndiff-depend-on-python3.patch \
            "
 
 SRC_URI[md5sum] = "d37b75b06d1d40f27b76d60db420a1f5"
 SRC_URI[sha256sum] = "fcfa5a0e42099e12e4bf7a68ebe6fde05553383a682e816a7ec9256ab4773faa"
 
-inherit autotools-brokensep pkgconfig pythonnative
+inherit autotools-brokensep pkgconfig python3native
 
 PACKAGECONFIG ?= "ncat nping ndiff pcap"
 
@@ -28,7 +30,7 @@
 #disable/enable packages
 PACKAGECONFIG[nping] = ",--without-nping,"
 PACKAGECONFIG[ncat] = ",--without-ncat,"
-PACKAGECONFIG[ndiff] = ",--without-ndiff,python"
+PACKAGECONFIG[ndiff] = "--with-ndiff=yes,--without-ndiff,python3"
 PACKAGECONFIG[update] = ",--without-nmap-update,"
 
 EXTRA_OECONF = "--with-libdnet=included --with-liblinear=included --without-subversion --with-liblua=included"
@@ -47,6 +49,12 @@
     oe_runconf
 }
 
+do_install_append() {
+    if [ -f "${D}${bindir}/ndiff" ]; then
+       sed -i 's@^#!.*$@#!/usr/bin/env python3@g'   ${D}${bindir}/ndiff
+    fi
+}
+
 FILES_${PN} += "${PYTHON_SITEPACKAGES_DIR} ${datadir}/ncat"
 
-RDEPENDS_${PN} = "python"
+RDEPENDS_${PN} += "python3-core"
diff --git a/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_57.bb b/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_58.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-shells/mksh/mksh_57.bb
rename to meta-openembedded/meta-oe/recipes-shells/mksh/mksh_58.bb
index 7e9c18e..a9940f8 100644
--- a/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_57.bb
+++ b/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_58.bb
@@ -7,10 +7,10 @@
                     file://strlcpy.c;beginline=1;endline=17;md5=d953f28f0c43ee29e238ec9bc15df2a0 \
                    "
 
-SRC_URI = "http://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R57.tgz"
+SRC_URI = "http://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R58.tgz"
 
-SRC_URI[md5sum] = "4d2686535252ea6a57bdec531498239a"
-SRC_URI[sha256sum] = "3d101154182d52ae54ef26e1360c95bc89c929d28859d378cc1c84f3439dbe75"
+SRC_URI[md5sum] = "6922a3e2228de2f0e78ff25398ccf8df"
+SRC_URI[sha256sum] = "608beb7b71870b23309ba1da8ca828da0e4540f2b9bd981eb39e04f8b7fc678c"
 
 inherit update-alternatives
 
diff --git a/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.21.00.bb b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.22.02.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.21.00.bb
rename to meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.22.02.bb
index 278ab04..b30c343 100644
--- a/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.21.00.bb
+++ b/meta-openembedded/meta-oe/recipes-shells/tcsh/tcsh_6.22.02.bb
@@ -9,12 +9,12 @@
 SECTION = "base"
 DEPENDS = "ncurses virtual/crypt gettext-native"
 SRC_URI = " \
-    http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/${BP}.tar.gz \
+    https://astron.com/pub/${BPN}/${BP}.tar.gz \
     file://0001-Enable-system-malloc-on-all-linux.patch \
     file://0002-Add-debian-csh-scripts.patch \
 "
-SRC_URI[md5sum] = "5bd5f11515cc5cca927777fa92f9d4b9"
-SRC_URI[sha256sum] = "c438325448371f59b12a4c93bfd3f6982e6f79f8c5aef4bc83aac8f62766e972"
+SRC_URI[md5sum] = "f34909eab33733aecc05d27adc82277b"
+SRC_URI[sha256sum] = "ed287158ca1b00ba477e8ea57bac53609838ebcfd05fcb05ca95021b7ebe885b"
 
 EXTRA_OEMAKE += "CC_FOR_GETHOST='${BUILD_CC}'"
 inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/avro/avro-c/0001-Allow-avro-C-to-be-built-on-musl-based-systems.patch b/meta-openembedded/meta-oe/recipes-support/avro/avro-c/0001-Allow-avro-C-to-be-built-on-musl-based-systems.patch
deleted file mode 100644
index 8964d6b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/avro/avro-c/0001-Allow-avro-C-to-be-built-on-musl-based-systems.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 9b39a985bcd6cd34f0820f3680f145d46c0e56bd Mon Sep 17 00:00:00 2001
-From: Titouan Christophe <titouan.christophe@railnova.eu>
-Date: Sun, 8 Dec 2019 01:55:59 +0100
-Subject: [PATCH] Allow avro C to be built on musl based systems.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The type `ssize_t` is defined in sys/types.h, and nowhere else
-in the musl standard C library, so it should be included for the
-compilation to succeed.
-
-This fixes several errors like:
-
-    In file included from src/generic.c:29:0:
-    src/generic.c: In function ‘avro_generic_value_new’:
-    src/avro_generic_internal.h:63:39:
-        error: ‘ssize_t’ undeclared (first use in this function);
-               did you mean ‘size_t’?
-
-Upstream-Status: Backport
-Signed-off-by: Titouan Christophe <titouan.christophe@railnova.eu>
----
- lang/c/src/avro_generic_internal.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/lang/c/src/avro_generic_internal.h b/lang/c/src/avro_generic_internal.h
-index 709403c03..9843ed652 100644
---- a/lang/c/src/avro_generic_internal.h
-+++ b/lang/c/src/avro_generic_internal.h
-@@ -24,6 +24,8 @@ extern "C" {
- #define CLOSE_EXTERN
- #endif
- 
-+#include <sys/types.h>
-+
- #include "avro/generic.h"
- #include "avro/schema.h"
- #include "avro/value.h"
--- 
-2.24.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.9.1.bb b/meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.9.2.bb
similarity index 76%
rename from meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.9.1.bb
rename to meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.9.2.bb
index 8954c98..0642179 100644
--- a/meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.9.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/avro/avro-c_1.9.2.bb
@@ -8,9 +8,8 @@
 DEPENDS = "jansson zlib xz"
 
 BRANCH = "branch-1.9"
-SRCREV = "89218262cde62e98fcb3778b86cd3f03056c54f3"
+SRCREV = "bf20128ca6138a830b2ea13e0490f3df6b035639"
 SRC_URI = "git://github.com/apache/avro;branch=${BRANCH} \
-           file://0001-Allow-avro-C-to-be-built-on-musl-based-systems.patch;patchdir=../../ \
            file://0001-cmake-Use-GNUInstallDirs-instead-of-hard-coded-paths.patch;patchdir=../../ \
           "
 
diff --git a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_8.0.4.bb b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_8.0.4.bb
index f4ea173..407de21 100644
--- a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_8.0.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_8.0.4.bb
@@ -28,8 +28,6 @@
 
 S = "${WORKDIR}/git"
 
-ARM_INSTRUCTION_SET = "arm"
-
 inherit autotools pkgconfig
 
 EXTRA_OECONF += "--enable-cpluscplus"
diff --git a/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares/0001-fix-configure-error-mv-libcares.pc.cmakein-to-libcar.patch b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares/0001-fix-configure-error-mv-libcares.pc.cmakein-to-libcar.patch
new file mode 100644
index 0000000..8f15f84
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares/0001-fix-configure-error-mv-libcares.pc.cmakein-to-libcar.patch
@@ -0,0 +1,27 @@
+From f2f1e134bf5d9d0789942848e03006af8d926cf8 Mon Sep 17 00:00:00 2001
+From: Wang Mingyu <wangmy@cn.fujitsu.com>
+Date: Tue, 17 Mar 2020 12:53:35 +0800
+Subject: [PATCH] fix configure error : mv libcares.pc.cmakein to
+ libcares.pc.cmake
+
+Signed-off-by: Wang Mingyu <wangmy@cn.fujitsu.com>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 3a5878d..c2e5740 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -563,7 +563,7 @@ IF (CARES_STATIC)
+ ENDIF()
+ 
+ # Write ares_config.h configuration file.  This is used only for the build.
+-CONFIGURE_FILE (libcares.pc.cmakein ${PROJECT_BINARY_DIR}/libcares.pc @ONLY)
++CONFIGURE_FILE (libcares.pc.cmake ${PROJECT_BINARY_DIR}/libcares.pc @ONLY)
+ 
+ 
+ 
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares/cmake-install-libcares.pc.patch b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares/cmake-install-libcares.pc.patch
new file mode 100644
index 0000000..0eb7e4b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares/cmake-install-libcares.pc.patch
@@ -0,0 +1,84 @@
+From 12414304245cce6ef0e8b9547949be5109845353 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Tue, 24 Jul 2018 13:33:33 +0800
+Subject: [PATCH] cmake: Install libcares.pc
+
+Prepare and install libcares.pc file during cmake build, so libraries
+using pkg-config to find libcares will not fail.
+
+Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
+
+update to 1.14.0, fix patch warning
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ CMakeLists.txt | 28 +++++++++++++++++++++++-----
+ 1 file changed, 23 insertions(+), 5 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fd123e1..3a5878d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -214,22 +214,25 @@ ADD_DEFINITIONS(${SYSFLAGS})
+ 
+ 
+ # Tell C-Ares about libraries to depend on
++# Also pass these libraries to pkg-config file
++SET(CARES_PRIVATE_LIBS_LIST)
+ IF (HAVE_LIBRESOLV)
+-	LIST (APPEND CARES_DEPENDENT_LIBS resolv)
++	LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lresolv")
+ ENDIF ()
+ IF (HAVE_LIBNSL)
+-	LIST (APPEND CARES_DEPENDENT_LIBS nsl)
++	LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lnsl")
+ ENDIF ()
+ IF (HAVE_LIBSOCKET)
+-	LIST (APPEND CARES_DEPENDENT_LIBS socket)
++	LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lsocket")
+ ENDIF ()
+ IF (HAVE_LIBRT)
+-	LIST (APPEND CARES_DEPENDENT_LIBS rt)
++	LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lrt")
+ ENDIF ()
+ IF (WIN32)
+-	LIST (APPEND CARES_DEPENDENT_LIBS ws2_32 Advapi32)
++	LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lws2_32")
+ ENDIF ()
+ 
++string (REPLACE ";" " " CARES_PRIVATE_LIBS "${CARES_PRIVATE_LIBS_LIST}")
+ 
+ # When checking for symbols, we need to make sure we set the proper
+ # headers, libraries, and definitions for the detection to work properly
+@@ -554,6 +557,15 @@ CONFIGURE_FILE (ares_build.h.cmake ${PROJECT_BINARY_DIR}/ares_build.h)
+ # Write ares_config.h configuration file.  This is used only for the build.
+ CONFIGURE_FILE (ares_config.h.cmake ${PROJECT_BINARY_DIR}/ares_config.h)
+ 
++# Pass required CFLAGS to pkg-config in case of static library
++IF (CARES_STATIC)
++       SET (CPPFLAG_CARES_STATICLIB "-DCARES_STATICLIB")
++ENDIF()
++
++# Write ares_config.h configuration file.  This is used only for the build.
++CONFIGURE_FILE (libcares.pc.cmakein ${PROJECT_BINARY_DIR}/libcares.pc @ONLY)
++
++
+ 
+ # TRANSFORM_MAKEFILE_INC
+ #
+@@ -728,6 +740,12 @@ IF (CARES_INSTALL)
+ 	INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcares.pc" COMPONENT Devel DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+ ENDIF ()
+ 
++# pkg-config file
++IF (CARES_INSTALL)
++       SET (PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
++       INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcares.pc" DESTINATION ${PKGCONFIG_INSTALL_DIR})
++ENDIF ()
++
+ # Legacy chain-building variables (provided for compatibility with old code).
+ # Don't use these, external code should be updated to refer to the aliases directly (e.g., Cares::cares).
+ SET (CARES_FOUND 1 CACHE INTERNAL "CARES LIBRARY FOUND")
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.16.0.bb b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.16.0.bb
new file mode 100644
index 0000000..e235b9b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.16.0.bb
@@ -0,0 +1,27 @@
+# Copyright (c) 2012-2014 LG Electronics, Inc.
+SUMMARY = "c-ares is a C library that resolves names asynchronously."
+HOMEPAGE = "http://daniel.haxx.se/projects/c-ares/"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=fb997454c8d62aa6a47f07a8cd48b006"
+
+PV = "1.16.0+gitr${SRCPV}"
+
+SRC_URI = "\
+    git://github.com/c-ares/c-ares.git \
+    file://cmake-install-libcares.pc.patch \
+    file://0001-fix-configure-error-mv-libcares.pc.cmakein-to-libcar.patch \
+"
+SRCREV = "077a587dccbe2f0d8a1987fbd3525333705c2249"
+
+UPSTREAM_CHECK_GITTAGREGEX = "cares-(?P<pver>\d+_(\d_?)+)"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+PACKAGES =+ "${PN}-utils"
+
+FILES_${PN}-utils = "${bindir}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb
index da1a2a3..22b9d0b 100644
--- a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/frame_2.5.0.bb
@@ -12,6 +12,9 @@
 
 SRC_URI = "https://launchpad.net/${BPN}/trunk/v${PV}/+download/${BPN}-${PV}.tar.gz \
            file://pessimizing-move.patch"
+
+UPSTREAM_CHECK_URI = "https://launchpad.net/frame/trunk"
+
 SRC_URI[md5sum] = "02baa941091c5d198cd1623b3ad36e68"
 SRC_URI[sha256sum] = "cfb9ab52cdccd926f1822a457264d0014c7eb9f4600a72626063dd073b26256f"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb
index 9362a5c..b9858d2 100644
--- a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/geis_2.2.17.bb
@@ -23,6 +23,9 @@
            file://fix-indentation-for-gcc6.patch \
            file://0001-libgeis-Compare-the-first-character-of-string-to-nul.patch \
            "
+
+UPSTREAM_CHECK_URI = "https://launchpad.net/geis/trunk"
+
 SRC_URI[md5sum] = "2ff9d76a3ea5794516bb02c9d1924faf"
 SRC_URI[sha256sum] = "8a60f5683852094038904e690d23cc5a90a980fc52da67f0f28890baa25c70eb"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb
index 22fd0f4..e1d3777 100644
--- a/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/canonical-multitouch/grail_3.1.1.bb
@@ -13,6 +13,9 @@
 DEPENDS = "frame"
 CXXFLAGS_append_toolchain-clang = " -Wno-pessimizing-move"
 SRC_URI = "https://launchpad.net/${BPN}/trunk/${PV}/+download/${BPN}-${PV}.tar.bz2"
+
+UPSTREAM_CHECK_URI = "https://launchpad.net/grail/trunk"
+
 SRC_URI[md5sum] = "0df1b3ec6167920f310e2effe6e2ad44"
 SRC_URI[sha256sum] = "5eed1f650f042481daa3a2de5e7d43261fe343b2a1b1e240f3b7fc26572c9df3"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-outside-tests.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-outside-tests.patch
index 5232e2a..e108e02 100644
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-outside-tests.patch
+++ b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-outside-tests.patch
@@ -54,7 +54,7 @@
 ===================================================================
 --- cpprest.orig/Release/tests/functional/websockets/client/authentication_tests.cpp
 +++ cpprest/Release/tests/functional/websockets/client/authentication_tests.cpp
-@@ -93,6 +93,7 @@
+@@ -93,6 +93,7 @@ SUITE(authentication_tests)
          return false;
      }
  
@@ -62,46 +62,15 @@
      TEST(ssl_test)
      {
          websocket_client client;
-@@ -127,6 +128,7 @@
+@@ -127,6 +128,7 @@ SUITE(authentication_tests)
              throw;
          }
      }
 +    */
  
- // These tests are specific to our websocketpp based implementation.
- #if !defined(__cplusplus_winrt)
-@@ -159,12 +161,14 @@
-         }
-     }
- 
-+    /*
-     // Test specifically for server SignalR team hit interesting cases with.
-     TEST(sni_with_older_server_test)
-     {
-         websocket_client client;
-         sni_test_impl(client);
-     }
-+    */
- 
-     // WinRT doesn't expose option for disabling.
-     // No stable server is available to reliably test this.
-@@ -194,6 +198,7 @@
-         }
-     }
- 
-+    /*
-     // Winrt doesn't allow explicitly setting server host for SNI.
-     TEST(sni_explicit_hostname)
-     {
-@@ -204,6 +209,7 @@
-         websocket_client client(config);
-         sni_test_impl(client);
-     }
-+    */
- 
      void handshake_error_test_impl(const ::utility::string_t& host)
      {
-@@ -225,11 +231,11 @@
+@@ -148,11 +150,11 @@ SUITE(authentication_tests)
          }
      }
  
@@ -114,13 +83,13 @@
 -    TEST(cert_expired) { handshake_error_test_impl(U("wss://expired.badssl.com/")); }
 +    //TEST(cert_expired) { handshake_error_test_impl(U("wss://expired.badssl.com/")); }
  
- #endif
+ } // SUITE(authentication_tests)
  
 Index: cpprest/Release/tests/functional/http/client/connections_and_errors.cpp
 ===================================================================
 --- cpprest.orig/Release/tests/functional/http/client/connections_and_errors.cpp
 +++ cpprest/Release/tests/functional/http/client/connections_and_errors.cpp
-@@ -406,6 +406,7 @@
+@@ -408,6 +408,7 @@
      }
  #endif
  
@@ -128,7 +97,7 @@
      // Try to connect to a server on a closed port and cancel the operation.
      TEST_FIXTURE(uri_address, cancel_bad_port)
      {
-@@ -437,6 +438,7 @@
+@@ -439,6 +440,7 @@
  
          VERIFY_THROWS_HTTP_ERROR_CODE(t.get(), std::errc::operation_canceled);
      }
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.14.bb b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.15.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.14.bb
rename to meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.15.bb
index 11c8eab..dee5ae2 100644
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.14.bb
+++ b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.15.bb
@@ -11,8 +11,8 @@
            file://disable-float-tests.patch \
            file://disable-outside-tests.patch "
 
-# tag 2.10.14
-SRCREV= "6f602bee67b088a299d7901534af3bce6334ab38"
+# tag 2.10.15
+SRCREV= "b94bc32ff84e815ba44c567f6fe4af5f5f6b3048"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-native-Fix-a-warning.patch b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-native-Fix-a-warning.patch
deleted file mode 100644
index 8d9577d..0000000
--- a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/0001-daemontools-native-Fix-a-warning.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From a43a3327ccd4b06a3bcf0c87d518a97c6b39ac02 Mon Sep 17 00:00:00 2001
-From: Lei Maohui <leimaohui@cn.fujitsu.com>
-Date: Sat, 6 Aug 2016 02:09:53 +0900
-Subject: [PATCH] daemontools: Fix a warning
-
-To fix the warning as following:
-
-WARNING: daemontools-native-0.76-r0 do_populate_sysroot: File '/build-poky/tmp/sysroots/x86_64-linux/usr/bin/chkshsgr' from daemontools-native was already stripped, this will prevent future debugging!
-
-Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com>
----
- src/conf-ld | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/conf-ld b/src/conf-ld
-index 59a0de7..1d0518a 100644
---- a/src/conf-ld
-+++ b/src/conf-ld
-@@ -1,3 +1,3 @@
--gcc -s
-+gcc
- 
- This will be used to link .o files into an executable.
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch
index f164c2d..9c07d75 100644
--- a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools/cross-compile.patch
@@ -30,7 +30,7 @@
  hasshsgr.h: chkshsgr choose compile hasshsgr.h1 hasshsgr.h2 load \
  tryshsgr.c warn-shsgr
 -	./chkshsgr || ( cat warn-shsgr; exit 1 )
-+	chkshsgr || ( cat warn-shsgr; exit 1 )
++	echo "Warning: We can not run test on cross target. - ignoring ./chkshsgr || ( cat warn-shsgr; exit 1 )"
  	./choose clr tryshsgr hasshsgr.h1 hasshsgr.h2 > hasshsgr.h
  
  haswaitp.h: choose compile haswaitp.h1 haswaitp.h2 load trywaitp.c
@@ -39,7 +39,7 @@
  readproctitle rts.tests setlock setuidgid softlimit supervise svc \
  svok svscan svscanboot svstat tai64n tai64nlocal
 -	env - /bin/sh rts.tests 2>&1 | cat -v > rts
-+	echo "Warning: We can not run test on cross target."
++	echo "Warning: We can not run test on cross target. - ignoring env - /bin/sh rts.tests 2>&1 | cat -v > rts"
  
  scan_ulong.o: compile scan.h scan_ulong.c
  	./compile scan_ulong.c
diff --git a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb
index 35251cb..f0c5f7d 100644
--- a/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb
+++ b/meta-openembedded/meta-oe/recipes-support/daemontools/daemontools_0.76.bb
@@ -16,21 +16,16 @@
 LICENSE = "PD"
 
 SRC_URI = "http://cr.yp.to/daemontools/${BPN}-${PV}.tar.gz \
-           file://0001-error.h-include-errno.h-instead-of-extern-int.diff \
-           file://0002-supervise.c-.-supervise-may-be-a-symlink-if-it-s-da.diff "
-
-SRC_URI_append_class-target = "file://cross-compile.patch \
-                               file://0001-daemontools-Fix-QA-Issue.patch "
-
-SRC_URI_append_class-native = "file://0001-daemontools-native-Fix-a-warning.patch "
+    file://0001-error.h-include-errno.h-instead-of-extern-int.diff \
+    file://0002-supervise.c-.-supervise-may-be-a-symlink-if-it-s-da.diff \
+    file://cross-compile.patch \
+    file://0001-daemontools-Fix-QA-Issue.patch \
+"
 
 SRC_URI[md5sum] = "1871af2453d6e464034968a0fbcb2bfc"
 SRC_URI[sha256sum] = "a55535012b2be7a52dcd9eccabb9a198b13be50d0384143bd3b32b8710df4c1f"
 
-S = "${WORKDIR}/admin/${BPN}-${PV}"
-
-DEPENDS += "daemontools-native"
-DEPENDS_class-native = ""
+S = "${WORKDIR}/admin/${BP}"
 
 do_compile() {
     ./package/compile
@@ -40,12 +35,10 @@
     install -d ${D}/${bindir}
 }
 
-do_install_append_class-native() {
-    install -m 755 ${S}/compile/chkshsgr ${D}/${bindir}
-}
-
 do_install_append_class-target() {
     install -m755 ${S}/command/* ${D}/${bindir}
 }
 
-BBCLASSEXTEND = "native"
+inherit update-alternatives
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE_${PN} = "svc svok"
diff --git a/meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.4.bb b/meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.4.bb
index 8eb7157..2e37dd7 100644
--- a/meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/dstat/dstat_0.7.4.bb
@@ -19,4 +19,4 @@
     oe_runmake 'DESTDIR=${D}' install
 }
 
-RDEPENDS_${PN} += "python-core python-misc python-resource python-shell python-unixadmin"
+RDEPENDS_${PN} += "python3-core python3-misc python3-resource python3-shell python3-unixadmin"
diff --git a/meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb b/meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb
index 6b23bbf..8ca5740 100644
--- a/meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/epeg/epeg_git.bb
@@ -6,7 +6,7 @@
 DEPENDS = "jpeg libexif"
 
 SRC_URI = "git://github.com/mattes/epeg.git"
-SRCREV = "337f55346425fbf2d283e794b702318ef2a74bcb"
+SRCREV = "9a175cd67eaa61fe45413d8da82da72936567047"
 S = "${WORKDIR}/git"
 
 inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb b/meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb
index 0d033f3..09344cf 100644
--- a/meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb
+++ b/meta-openembedded/meta-oe/recipes-support/fltk/fltk.bb
@@ -2,7 +2,7 @@
 
 DEPENDS = "alsa-lib zlib jpeg libpng libxext libxft"
 
-inherit features_check binconfig lib_package gtk-icon-cache mime
+inherit features_check binconfig lib_package gtk-icon-cache mime mime-xdg
 REQUIRED_DISTRO_FEATURES = "x11"
 
 SRC_URI += " \
diff --git a/meta-openembedded/meta-oe/recipes-support/fmt/fmt_6.0.0.bb b/meta-openembedded/meta-oe/recipes-support/fmt/fmt_6.2.0.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-support/fmt/fmt_6.0.0.bb
rename to meta-openembedded/meta-oe/recipes-support/fmt/fmt_6.2.0.bb
index c35c77b..05dc94a 100644
--- a/meta-openembedded/meta-oe/recipes-support/fmt/fmt_6.0.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/fmt/fmt_6.2.0.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=af88d758f75f3c5c48a967501f24384b"
 
 SRC_URI += "git://github.com/fmtlib/fmt"
-SRCREV = "7512a55aa3ae309587ca89668ef9ec4074a51a1f"
+SRCREV = "9bdd1596cef1b57b9556f8bef32dc4a32322ef3e"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb
index 373c497..7cafbb7 100644
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb
@@ -10,11 +10,12 @@
 
 inherit pkgconfig cmake gitpkgv
 
+PE = "1"
 PV = "2.0.0+gitr${SRCPV}"
 PKGV = "${GITPKGVTAG}"
 
-# 2.0.0-rc4
-SRCREV = "e21b72c95f857817b4b32b5ef5406355c005a9e8"
+# 2.0.0 release
+SRCREV = "5ab2bed8749747b8e4b2ed431fd102bc726be684"
 SRC_URI = "git://github.com/FreeRDP/FreeRDP.git \
     file://winpr-makecert-Build-with-install-RPATH.patch \
 "
@@ -39,7 +40,7 @@
 
 X11_DEPS = "virtual/libx11 libxinerama libxext libxcursor libxv libxi libxrender libxfixes libxdamage libxrandr libxkbfile"
 PACKAGECONFIG[x11] = "-DWITH_X11=ON -DWITH_XINERAMA=ON -DWITH_XEXT=ON -DWITH_XCURSOR=ON -DWITH_XV=ON -DWITH_XI=ON -DWITH_XRENDER=ON -DWITH_XFIXES=ON -DWITH_XDAMAGE=ON -DWITH_XRANDR=ON -DWITH_XKBFILE=ON,-DWITH_X11=OFF,${X11_DEPS}"
-PACKAGECONFIG[wayland] = "-DWITH_WAYLAND=ON,-DWITH_WAYLAND=OFF,wayland"
+PACKAGECONFIG[wayland] = "-DWITH_WAYLAND=ON,-DWITH_WAYLAND=OFF,wayland wayland-native"
 PACKAGECONFIG[directfb] = "-DWITH_DIRECTFB=ON,-DWITH_DIRECTFB=OFF,directfb"
 PACKAGECONFIG[pam] = "-DWITH_PAM=ON,-DWITH_PAM=OFF,libpam"
 PACKAGECONFIG[pulseaudio] = "-DWITH_PULSEAUDIO=ON,-DWITH_PULSEAUDIO=OFF,pulseaudio"
diff --git a/meta-openembedded/meta-oe/recipes-support/gd/gd/0001-annotate.c-gdft.c-Replace-strncpy-with-memccpy-to-fi.patch b/meta-openembedded/meta-oe/recipes-support/gd/gd/0001-annotate.c-gdft.c-Replace-strncpy-with-memccpy-to-fi.patch
deleted file mode 100644
index c377b37..0000000
--- a/meta-openembedded/meta-oe/recipes-support/gd/gd/0001-annotate.c-gdft.c-Replace-strncpy-with-memccpy-to-fi.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 85c7694a5cf34597909bdd1ca6931b0f99904c2e Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Tue, 19 Jun 2018 00:40:49 -0700
-Subject: [PATCH] annotate.c/gdft.c: Replace strncpy with memccpy to fix
- -Wstringop-truncation.
-
-Fixed for gcc8:
-git/src/gdft.c:1699:2: error: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation]
-
-Upstream-Status: Submitted [https://github.com/libgd/libgd/pull/442]
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- src/annotate.c | 2 +-
- src/gdft.c     | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/annotate.c b/src/annotate.c
-index 00aaf49..17df813 100644
---- a/src/annotate.c
-+++ b/src/annotate.c
-@@ -104,7 +104,7 @@ int main(int argc, char *argv[])
- 					fprintf(stderr, "Font maximum length is 1024, %d given\n", font_len);
- 					goto badLine;
- 				}
--				strncpy(font, st, font_len);
-+				memcpy(font, st, font_len);
- 			}
- 		} else if(!strcmp(st, "align")) {
- 			char *st = strtok(0, " \t\r\n");
-diff --git a/src/gdft.c b/src/gdft.c
-index 9fa8295..81dbe41 100644
---- a/src/gdft.c
-+++ b/src/gdft.c
-@@ -1696,7 +1696,7 @@ static char * font_path(char **fontpath, char *name_list)
- 		gdFree(path);
- 		return "could not alloc full list of fonts";
- 	}
--	strncpy(fontlist, name_list, name_list_len);
-+	memcpy(fontlist, name_list, name_list_len);
- 	fontlist[name_list_len] = 0;
- 
- 	/*
--- 
-2.10.2
-
diff --git a/meta-openembedded/meta-oe/recipes-support/gd/gd/CVE-2018-1000222.patch b/meta-openembedded/meta-oe/recipes-support/gd/gd/CVE-2018-1000222.patch
deleted file mode 100644
index 25924d1..0000000
--- a/meta-openembedded/meta-oe/recipes-support/gd/gd/CVE-2018-1000222.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 4b1e18a00ce7c4b7e6919c3b3109a034393b805a Mon Sep 17 00:00:00 2001
-From: Mike Frysinger <vapier@gentoo.org>
-Date: Sat, 14 Jul 2018 13:54:08 -0400
-Subject: [PATCH] bmp: check return value in gdImageBmpPtr
-
-Closes #447.
-
-(cherry picked from commit ac16bdf2d41724b5a65255d4c28fb0ec46bc42f5)
-
-Upstream-Status: Backport [https://github.com/libgd/libgd/commit/4b1e18a00ce7c4b7e6919c3b3109a034393b805a]
-CVE: CVE-2018-1000222
-Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
----
- src/gd_bmp.c | 17 ++++++++++++++---
- 1 file changed, 14 insertions(+), 3 deletions(-)
-
-diff --git a/src/gd_bmp.c b/src/gd_bmp.c
-index ccafdcd..d625da1 100644
---- a/src/gd_bmp.c
-+++ b/src/gd_bmp.c
-@@ -48,6 +48,8 @@ static int bmp_read_4bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp
- static int bmp_read_8bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header);
- static int bmp_read_rle(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info);
- 
-+static int _gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression);
-+
- #define BMP_DEBUG(s)
- 
- static int gdBMPPutWord(gdIOCtx *out, int w)
-@@ -88,8 +90,10 @@ BGD_DECLARE(void *) gdImageBmpPtr(gdImagePtr im, int *size, int compression)
- 	void *rv;
- 	gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- 	if (out == NULL) return NULL;
--	gdImageBmpCtx(im, out, compression);
--	rv = gdDPExtractData(out, size);
-+	if (!_gdImageBmpCtx(im, out, compression))
-+		rv = gdDPExtractData(out, size);
-+	else
-+		rv = NULL;
- 	out->gd_free(out);
- 	return rv;
- }
-@@ -142,6 +146,11 @@ BGD_DECLARE(void) gdImageBmp(gdImagePtr im, FILE *outFile, int compression)
- 		compression - whether to apply RLE or not.
- */
- BGD_DECLARE(void) gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression)
-+{
-+	_gdImageBmpCtx(im, out, compression);
-+}
-+
-+static int _gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression)
- {
- 	int bitmap_size = 0, info_size, total_size, padding;
- 	int i, row, xpos, pixel;
-@@ -149,6 +158,7 @@ BGD_DECLARE(void) gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression)
- 	unsigned char *uncompressed_row = NULL, *uncompressed_row_start = NULL;
- 	FILE *tmpfile_for_compression = NULL;
- 	gdIOCtxPtr out_original = NULL;
-+	int ret = 1;
- 
- 	/* No compression if its true colour or we don't support seek */
- 	if (im->trueColor) {
-@@ -326,6 +336,7 @@ BGD_DECLARE(void) gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression)
- 		out_original = NULL;
- 	}
- 
-+	ret = 0;
- cleanup:
- 	if (tmpfile_for_compression) {
- #ifdef _WIN32
-@@ -339,7 +350,7 @@ cleanup:
- 	if (out_original) {
- 		out_original->gd_free(out_original);
- 	}
--	return;
-+	return ret;
- }
- 
- static int compress_row(unsigned char *row, int length)
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/gd/gd/CVE-2019-6978.patch b/meta-openembedded/meta-oe/recipes-support/gd/gd/CVE-2019-6978.patch
deleted file mode 100644
index 9beb23e..0000000
--- a/meta-openembedded/meta-oe/recipes-support/gd/gd/CVE-2019-6978.patch
+++ /dev/null
@@ -1,299 +0,0 @@
-From 553702980ae89c83f2d6e254d62cf82e204956d0 Mon Sep 17 00:00:00 2001
-From: "Christoph M. Becker" <cmbecker69@gmx.de>
-Date: Thu, 17 Jan 2019 11:54:55 +0100
-Subject: [PATCH] Fix #492: Potential double-free in gdImage*Ptr()
-
-Whenever `gdImage*Ptr()` calls `gdImage*Ctx()` and the latter fails, we
-must not call `gdDPExtractData()`; otherwise a double-free would
-happen.  Since `gdImage*Ctx()` are void functions, and we can't change
-that for BC reasons, we're introducing static helpers which are used
-internally.
-
-We're adding a regression test for `gdImageJpegPtr()`, but not for
-`gdImageGifPtr()` and `gdImageWbmpPtr()` since we don't know how to
-trigger failure of the respective `gdImage*Ctx()` calls.
-
-This potential security issue has been reported by Solmaz Salimi (aka.
-Rooney).
----
- src/gd_gif_out.c                  | 18 +++++++++++++++---
- src/gd_jpeg.c                     | 20 ++++++++++++++++----
- src/gd_wbmp.c                     | 21 ++++++++++++++++++---
- tests/jpeg/.gitignore             |  1 +
- tests/jpeg/CMakeLists.txt         |  1 +
- tests/jpeg/Makemodule.am          |  3 ++-
- tests/jpeg/jpeg_ptr_double_free.c | 31 +++++++++++++++++++++++++++++++
- 7 files changed, 84 insertions(+), 11 deletions(-)
- create mode 100644 tests/jpeg/jpeg_ptr_double_free.c
-
-Upstream-Status: Backport [https://github.com/libgd/libgd/commit/553702980ae89c83f2d6e254d62cf82e204956d0]
-CVE: CVE-2019-6978
-
-Signed-off-by: Trevor Gamblin <trevor.gamblin@windriver.com>
-
-
-diff --git a/src/gd_gif_out.c b/src/gd_gif_out.c
-index 298a581..d5a9534 100644
---- a/src/gd_gif_out.c
-+++ b/src/gd_gif_out.c
-@@ -99,6 +99,7 @@ static void char_init(GifCtx *ctx);
- static void char_out(int c, GifCtx *ctx);
- static void flush_char(GifCtx *ctx);
- 
-+static int _gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
- 
- 
- 
-@@ -131,8 +132,11 @@ BGD_DECLARE(void *) gdImageGifPtr(gdImagePtr im, int *size)
- 	void *rv;
- 	gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- 	if (out == NULL) return NULL;
--	gdImageGifCtx(im, out);
--	rv = gdDPExtractData(out, size);
-+	if (!_gdImageGifCtx(im, out)) {
-+		rv = gdDPExtractData(out, size);
-+	} else {
-+		rv = NULL;
-+	}
- 	out->gd_free(out);
- 	return rv;
- }
-@@ -220,6 +224,12 @@ BGD_DECLARE(void) gdImageGif(gdImagePtr im, FILE *outFile)
- 
- */
- BGD_DECLARE(void) gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
-+{
-+	_gdImageGifCtx(im, out);
-+}
-+
-+/* returns 0 on success, 1 on failure */
-+static int _gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
- {
- 	gdImagePtr pim = 0, tim = im;
- 	int interlace, BitsPerPixel;
-@@ -231,7 +241,7 @@ BGD_DECLARE(void) gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
- 		based temporary image. */
- 		pim = gdImageCreatePaletteFromTrueColor(im, 1, 256);
- 		if(!pim) {
--			return;
-+			return 1;
- 		}
- 		tim = pim;
- 	}
-@@ -247,6 +257,8 @@ BGD_DECLARE(void) gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
- 		/* Destroy palette based temporary image. */
- 		gdImageDestroy(	pim);
- 	}
-+
-+	return 0;
- }
- 
- 
-diff --git a/src/gd_jpeg.c b/src/gd_jpeg.c
-index fc05842..96ef430 100644
---- a/src/gd_jpeg.c
-+++ b/src/gd_jpeg.c
-@@ -117,6 +117,8 @@ static void fatal_jpeg_error(j_common_ptr cinfo)
- 	exit(99);
- }
- 
-+static int _gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality);
-+
- /*
-  * Write IM to OUTFILE as a JFIF-formatted JPEG image, using quality
-  * QUALITY.  If QUALITY is in the range 0-100, increasing values
-@@ -231,8 +233,11 @@ BGD_DECLARE(void *) gdImageJpegPtr(gdImagePtr im, int *size, int quality)
- 	void *rv;
- 	gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- 	if (out == NULL) return NULL;
--	gdImageJpegCtx(im, out, quality);
--	rv = gdDPExtractData(out, size);
-+	if (!_gdImageJpegCtx(im, out, quality)) {
-+		rv = gdDPExtractData(out, size);
-+	} else {
-+		rv = NULL;
-+	}
- 	out->gd_free(out);
- 	return rv;
- }
-@@ -253,6 +258,12 @@ void jpeg_gdIOCtx_dest(j_compress_ptr cinfo, gdIOCtx *outfile);
- 
- */
- BGD_DECLARE(void) gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
-+{
-+	_gdImageJpegCtx(im, outfile, quality);
-+}
-+
-+/* returns 0 on success, 1 on failure */
-+static int _gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
- {
- 	struct jpeg_compress_struct cinfo;
- 	struct jpeg_error_mgr jerr;
-@@ -287,7 +298,7 @@ BGD_DECLARE(void) gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
- 		if(row) {
- 			gdFree(row);
- 		}
--		return;
-+		return 1;
- 	}
- 
- 	cinfo.err->emit_message = jpeg_emit_message;
-@@ -328,7 +339,7 @@ BGD_DECLARE(void) gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
- 	if(row == 0) {
- 		gd_error("gd-jpeg: error: unable to allocate JPEG row structure: gdCalloc returns NULL\n");
- 		jpeg_destroy_compress(&cinfo);
--		return;
-+		return 1;
- 	}
- 
- 	rowptr[0] = row;
-@@ -405,6 +416,7 @@ BGD_DECLARE(void) gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
- 	jpeg_finish_compress(&cinfo);
- 	jpeg_destroy_compress(&cinfo);
- 	gdFree(row);
-+	return 0;
- }
- 
- 
-diff --git a/src/gd_wbmp.c b/src/gd_wbmp.c
-index f19a1c9..a49bdbe 100644
---- a/src/gd_wbmp.c
-+++ b/src/gd_wbmp.c
-@@ -88,6 +88,8 @@ int gd_getin(void *in)
- 	return (gdGetC((gdIOCtx *)in));
- }
- 
-+static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out);
-+
- /*
- 	Function: gdImageWBMPCtx
- 
-@@ -100,6 +102,12 @@ int gd_getin(void *in)
- 		out   - the stream where to write
- */
- BGD_DECLARE(void) gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out)
-+{
-+	_gdImageWBMPCtx(image, fg, out);
-+}
-+
-+/* returns 0 on success, 1 on failure */
-+static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out)
- {
- 	int x, y, pos;
- 	Wbmp *wbmp;
-@@ -107,7 +115,7 @@ BGD_DECLARE(void) gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out)
- 	/* create the WBMP */
- 	if((wbmp = createwbmp(gdImageSX(image), gdImageSY(image), WBMP_WHITE)) == NULL) {
- 		gd_error("Could not create WBMP\n");
--		return;
-+		return 1;
- 	}
- 
- 	/* fill up the WBMP structure */
-@@ -123,11 +131,15 @@ BGD_DECLARE(void) gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out)
- 
- 	/* write the WBMP to a gd file descriptor */
- 	if(writewbmp(wbmp, &gd_putout, out)) {
-+		freewbmp(wbmp);
- 		gd_error("Could not save WBMP\n");
-+		return 1;
- 	}
- 
- 	/* des submitted this bugfix: gdFree the memory. */
- 	freewbmp(wbmp);
-+
-+	return 0;
- }
- 
- /*
-@@ -271,8 +283,11 @@ BGD_DECLARE(void *) gdImageWBMPPtr(gdImagePtr im, int *size, int fg)
- 	void *rv;
- 	gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- 	if (out == NULL) return NULL;
--	gdImageWBMPCtx(im, fg, out);
--	rv = gdDPExtractData(out, size);
-+	if (!_gdImageWBMPCtx(im, fg, out)) {
-+		rv = gdDPExtractData(out, size);
-+	} else {
-+		rv = NULL;
-+	}
- 	out->gd_free(out);
- 	return rv;
- }
-diff --git a/tests/jpeg/.gitignore b/tests/jpeg/.gitignore
-index c28aa87..13bcf04 100644
---- a/tests/jpeg/.gitignore
-+++ b/tests/jpeg/.gitignore
-@@ -3,5 +3,6 @@
- /jpeg_empty_file
- /jpeg_im2im
- /jpeg_null
-+/jpeg_ptr_double_free
- /jpeg_read
- /jpeg_resolution
-diff --git a/tests/jpeg/CMakeLists.txt b/tests/jpeg/CMakeLists.txt
-index 19964b0..a8d8162 100644
---- a/tests/jpeg/CMakeLists.txt
-+++ b/tests/jpeg/CMakeLists.txt
-@@ -2,6 +2,7 @@ IF(JPEG_FOUND)
- LIST(APPEND TESTS_FILES
- 	jpeg_empty_file
- 	jpeg_im2im
-+	jpeg_ptr_double_free
- 	jpeg_null
- )
- 
-diff --git a/tests/jpeg/Makemodule.am b/tests/jpeg/Makemodule.am
-index 7e5d317..b89e169 100644
---- a/tests/jpeg/Makemodule.am
-+++ b/tests/jpeg/Makemodule.am
-@@ -2,7 +2,8 @@ if HAVE_LIBJPEG
- libgd_test_programs += \
- 	jpeg/jpeg_empty_file \
- 	jpeg/jpeg_im2im \
--	jpeg/jpeg_null
-+	jpeg/jpeg_null \
-+	jpeg/jpeg_ptr_double_free
- 
- if HAVE_LIBPNG
- libgd_test_programs += \
-diff --git a/tests/jpeg/jpeg_ptr_double_free.c b/tests/jpeg/jpeg_ptr_double_free.c
-new file mode 100644
-index 0000000..df5a510
---- /dev/null
-+++ b/tests/jpeg/jpeg_ptr_double_free.c
-@@ -0,0 +1,31 @@
-+/**
-+ * Test that failure to convert to JPEG returns NULL
-+ *
-+ * We are creating an image, set its width to zero, and pass this image to
-+ * `gdImageJpegPtr()` which is supposed to fail, and as such should return NULL.
-+ *
-+ * See also <https://github.com/libgd/libgd/issues/381>
-+ */
-+
-+
-+#include "gd.h"
-+#include "gdtest.h"
-+
-+
-+int main()
-+{
-+    gdImagePtr src, dst;
-+    int size;
-+
-+    src = gdImageCreateTrueColor(1, 10);
-+    gdTestAssert(src != NULL);
-+
-+    src->sx = 0; /* this hack forces gdImageJpegPtr() to fail */
-+
-+    dst = gdImageJpegPtr(src, &size, 0);
-+    gdTestAssert(dst == NULL);
-+
-+    gdImageDestroy(src);
-+
-+    return gdNumFailures();
-+}
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/gd/gd_2.2.5.bb b/meta-openembedded/meta-oe/recipes-support/gd/gd_2.3.0.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-support/gd/gd_2.2.5.bb
rename to meta-openembedded/meta-oe/recipes-support/gd/gd_2.3.0.bb
index 35f9bb2..eec8a05 100644
--- a/meta-openembedded/meta-oe/recipes-support/gd/gd_2.2.5.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gd/gd_2.3.0.bb
@@ -5,21 +5,18 @@
 This is particularly useful in Web applications, where PNG and JPEG are two \
 of the formats accepted for inline images by most browsers. Note that gd is not \
 a paint program."
-HOMEPAGE = "http://libgd.bitbucket.org/"
+HOMEPAGE = "http://libgd.github.io/"
 
 SECTION = "libs"
 LICENSE = "GD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=07384b3aa2e0d39afca0d6c40286f545"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8e5bc8627b9494741c905d65238c66b7"
 
 DEPENDS = "freetype libpng jpeg zlib tiff"
 
-SRC_URI = "git://github.com/libgd/libgd.git;branch=GD-2.2 \
-           file://0001-annotate.c-gdft.c-Replace-strncpy-with-memccpy-to-fi.patch \
-           file://CVE-2018-1000222.patch \
-           file://CVE-2019-6978.patch \
+SRC_URI = "git://github.com/libgd/libgd.git;branch=master \
           "
 
-SRCREV = "8255231b68889597d04d451a72438ab92a405aba"
+SRCREV = "b079fa06223c3ab862c8f0eea58a968727971988"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/gengetopt/gengetopt_2.23.bb b/meta-openembedded/meta-oe/recipes-support/gengetopt/gengetopt_2.23.bb
new file mode 100644
index 0000000..118e3c5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/gengetopt/gengetopt_2.23.bb
@@ -0,0 +1,16 @@
+SUMMARY = "skeleton main.c generator"
+DESCRIPTION = "Gengetopt is a tool to write command line option parsing code for C programs."
+SECTION = "utils"
+HOMEPAGE = "https://www.gnu.org/software/gengetopt/gengetopt.html"
+
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ff95bfe019feaf92f524b73dd79e76eb"
+
+SRC_URI = "${GNU_MIRROR}/gengetopt/${BPN}-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "ea165d618640dbdecb42ae4491337965"
+SRC_URI[sha256sum] = "b941aec9011864978dd7fdeb052b1943535824169d2aa2b0e7eae9ab807584ac"
+
+inherit autotools texinfo
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.5.bb b/meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.5.bb
index 70eef72..9a83328 100644
--- a/meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.5.bb
+++ b/meta-openembedded/meta-oe/recipes-support/glog/glog_0.3.5.bb
@@ -6,8 +6,6 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://COPYING;md5=dc9db360e0bbd4e46672f3fd91dd6c4b"
 
-DEPENDS = "libunwind"
-
 SRC_URI = " \
     git://github.com/google/glog.git;nobranch=1 \
     file://0001-Rework-CMake-glog-VERSION-management.patch \
@@ -21,6 +19,9 @@
 
 inherit cmake
 
-RDEPENDS_${PN} += "libunwind"
+PACKAGECONFIG ?= "shared unwind"
+PACKAGECONFIG_remove_riscv64 = "unwind"
+PACKAGECONFIG_remove_riscv32 = "unwind"
 
-EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON"
+PACKAGECONFIG[unwind] = "-DWITH_UNWIND=ON,-DWITH_UNWIND=OFF,libunwind,libunwind"
+PACKAGECONFIG[shared] = "-DBUILD_SHARED_LIBS=ON,-DBUILD_SHARED_LIBS=OFF,,"
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch
index 49d5c21..cb4ead3 100644
--- a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools/0001-fix-build-with-musl-libc.patch
@@ -6,26 +6,12 @@
 Patch from https://github.com/gperftools/gperftools/pull/765/
 
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
-
 ---
- configure.ac                 | 1 +
- src/malloc_hook_mmap_linux.h | 8 ++++++--
- 2 files changed, 7 insertions(+), 2 deletions(-)
+ src/malloc_hook_mmap_linux.h | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
 
-diff --git a/configure.ac b/configure.ac
-index 497103e..f9efc3e 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -188,6 +188,7 @@ AC_HEADER_STDC
- AC_CHECK_TYPES([__int64])       # defined in some windows platforms
- AC_CHECK_TYPES([struct mallinfo],,, [#include <malloc.h>])
- AC_CHECK_TYPES([Elf32_Versym],,, [#include <elf.h>])   # for vdso_support.h
-+AC_CHECK_FUNCS(__sbrk)          # for intercepting glibc memory allocator
- AC_CHECK_FUNCS(sbrk)            # for tcmalloc to get memory
- AC_CHECK_FUNCS(geteuid)         # for turning off services when run as root
- AC_CHECK_FUNCS(fork)            # for the pthread_atfork setup
 diff --git a/src/malloc_hook_mmap_linux.h b/src/malloc_hook_mmap_linux.h
-index 2f6116f..0605855 100755
+index e2efb05..66b3110 100644
 --- a/src/malloc_hook_mmap_linux.h
 +++ b/src/malloc_hook_mmap_linux.h
 @@ -46,6 +46,10 @@
@@ -39,7 +25,7 @@
  // The x86-32 case and the x86-64 case differ:
  // 32b has a mmap2() syscall, 64b does not.
  // 64b and 32b have different calling conventions for mmap().
-@@ -168,7 +172,7 @@ extern "C" void* mmap64(void *start, size_t length, int prot, int flags,
+@@ -175,7 +179,7 @@ extern "C" void* mmap64(void *start, size_t length, int prot, int flags,
    return result;
  }
  
@@ -48,12 +34,6 @@
  
  extern "C" void* mmap(void *start, size_t length, int prot, int flags,
                        int fd, off_t offset) __THROW {
-@@ -206,7 +210,7 @@ extern "C" void* mremap(void* old_addr, size_t old_size, size_t new_size,
-   return result;
- }
- 
--#ifndef __UCLIBC__
-+#if HAVE___SBRK
- // libc's version:
- extern "C" void* __sbrk(intptr_t increment);
- 
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.bb b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.90.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.bb
rename to meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.90.bb
index ee34ace..b7b7839 100644
--- a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.90.bb
@@ -3,7 +3,7 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://COPYING;md5=762732742c73dc6c7fbe8632f06c059a"
 
-SRCREV = "9608fa3bcf8020d35f59fbf70cd3cbe4b015b972"
+SRCREV = "db7aa547abb5abdd558587a15502584cbc825438"
 SRC_URI = "git://github.com/gperftools/gperftools \
            file://0001-Support-Atomic-ops-on-clang.patch \
            file://0001-fix-build-with-musl-libc.patch \
@@ -20,6 +20,9 @@
 #   do_page_fault(): sending SIGSEGV to ls for invalid read access from 00000008
 #   Segmentation fault (core dumped)
 COMPATIBLE_HOST_mipsarch = "null"
+COMPATIBLE_HOST_riscv64 = "null"
+COMPATIBLE_HOST_riscv32 = "null"
+
 # Disable thumb1
 # {standard input}: Assembler messages:
 # {standard input}:434: Error: lo register required -- `ldr pc,[sp]'
@@ -29,6 +32,8 @@
 
 PACKAGECONFIG ?= "libunwind static"
 PACKAGECONFIG_remove_arm_libc-musl = "libunwind"
+PACKAGECONFIG_remove_riscv64 = "libunwind"
+PACKAGECONFIG_remove_riscv32 = "libunwind"
 
 PACKAGECONFIG[libunwind] = "--enable-libunwind,--disable-libunwind,libunwind"
 PACKAGECONFIG[static] = "--enable-static,--disable-static,"
diff --git a/meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb b/meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb
index 7034d33..3800d14 100644
--- a/meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gpm/gpm_git.bb
@@ -21,7 +21,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools-brokensep update-rc.d systemd
+inherit autotools-brokensep update-rc.d systemd texinfo
 
 INITSCRIPT_NAME = "gpm"
 INITSCRIPT_PARAMS = "defaults"
diff --git a/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.95.bb b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.100.bb
similarity index 89%
rename from meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.95.bb
rename to meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.100.bb
index 22a0498..0b4eac8 100644
--- a/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.95.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gsoap/gsoap_2.8.100.bb
@@ -7,8 +7,8 @@
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}2/${BPN}_${PV}.zip \
            "
-SRC_URI[md5sum] = "88031646018d60857f21246962d10011"
-SRC_URI[sha256sum] = "fe07aa152cd946ef8ebd3f87653f14c1d38efe7c6e6fce8c6f773c4814f79baf"
+SRC_URI[md5sum] = "f0fc5394286753eff657cf62b46d024b"
+SRC_URI[sha256sum] = "11b4f99d28392e3e1aeb29bfd006a4f1f40e7fdd7a3f3444ee69014d415f09f2"
 
 inherit autotools
 
diff --git a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
index e20bec5..5f3e3f6 100644
--- a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_git.bb
@@ -5,8 +5,8 @@
 LICENSE = "GPL-2.0+"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=1556547711e8246992b999edd9445a57"
 
-PV = "0.330"
-SRCREV = "335f72f8ed4ad0cf335526d3c6c4701f7e58f45b"
+PV = "0.333"
+SRCREV = "2de52be0d00015fa6cde70bb845fa9b86cf6f420"
 SRC_URI = "git://github.com/vcrhonek/${BPN}.git"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb
index 0903e90..986984d 100644
--- a/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb
+++ b/meta-openembedded/meta-oe/recipes-support/iksemel/iksemel_1.5.bb
@@ -13,7 +13,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools pkgconfig lib_package
+inherit autotools pkgconfig lib_package texinfo
 
 # TLS support requires either openssl or gnutls (if both are enabled openssl will be used).
 PACKAGECONFIG ?= "gnutls"
diff --git a/meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb b/meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb
index 87b1142..227e2a7 100644
--- a/meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/inih/libinih_git.bb
@@ -12,6 +12,8 @@
 SRC_URI = "git://github.com/OSSystems/inih.git \
           "
 
+UPSTREAM_CHECK_COMMITS = "1"
+
 S = "${WORKDIR}/git"
 
 inherit gitpkgv cmake
diff --git a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/0001-Makefile.am-add-build-rule-for-README.patch b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/0001-Makefile.am-add-build-rule-for-README.patch
new file mode 100644
index 0000000..2c7cd99
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/0001-Makefile.am-add-build-rule-for-README.patch
@@ -0,0 +1,46 @@
+From 22bff509e2a0e5640994bc92ded62c383d99bc37 Mon Sep 17 00:00:00 2001
+From: Pierre-Jean Texier <pjtexier@koncepto.io>
+Date: Mon, 24 Feb 2020 21:44:45 +0100
+Subject: [PATCH] Makefile.am: add build rule for README
+
+Fixes:
+
+| configure.ac:17: installing 'config/config.sub'
+| configure.ac:16: installing 'config/install-sh'
+| configure.ac:16: installing 'config/missing'
+| Makefile.am: error: required file './README' not found
+| libinotifytools/src/Makefile.am: installing 'config/depcomp'
+
+Upstream-Status: Submitted [https://github.com/inotify-tools/inotify-tools/pull/111]
+
+Signed-off-by: Pierre-Jean Texier <pjtexier@koncepto.io>
+---
+ Makefile.am | 2 ++
+ autogen.sh  | 1 -
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 56e4531..d08c8fe 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -2,6 +2,8 @@ ACLOCAL_AMFLAGS = -I m4
+ 
+ SUBDIRS = libinotifytools src man
+ 
++README: README.md
++
+ dist-hook:
+ # Automake official documentation states that dist-hook should assume files
+ # are not writable.
+diff --git a/autogen.sh b/autogen.sh
+index 48eb21d..31572c2 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -1,4 +1,3 @@
+ #!/bin/sh
+ 
+-cp README.md README
+ autoreconf --install "$@" || exit 1
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotify-nosys-fix-system-call-number.patch b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotify-nosys-fix-system-call-number.patch
deleted file mode 100644
index 89b890d..0000000
--- a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools/inotify-nosys-fix-system-call-number.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-inotify-tools: fix __NR_inotify_add_watch system call number on _MIPS_SIM_ABI64
-
-The correct value should be the same as defined in
-linux/arch/mips/include/uapi/asm/unistd.h
-
-Upstream-Status: Summitted [https://github.com/rvoicilas/inotify-tools/pull/71]
-
-Signed-off-by: Roy Li <rongqing.li@windriver.com>
-Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
----
- libinotifytools/src/inotifytools/inotify-nosys.h |    4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libinotifytools/src/inotifytools/inotify-nosys.h b/libinotifytools/src/inotifytools/inotify-nosys.h
-index db76b2c..5f7b11b 100644
---- a/libinotifytools/src/inotifytools/inotify-nosys.h
-+++ b/libinotifytools/src/inotifytools/inotify-nosys.h
-@@ -100,8 +100,8 @@ struct inotify_event {
- # endif
- # if _MIPS_SIM == _MIPS_SIM_ABI64
- #  define __NR_inotify_init (__NR_Linux + 243)
--#  define __NR_inotify_add_watch (__NR_Linux + 243)
--#  define __NR_inotify_rm_watch (__NR_Linux + 243)
-+#  define __NR_inotify_add_watch (__NR_Linux + 244)
-+#  define __NR_inotify_rm_watch (__NR_Linux + 245)
- # endif
- # if _MIPS_SIM == _MIPS_SIM_NABI32
- #  define __NR_inotify_init (__NR_Linux + 247)
--- 
-1.7.10.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb
index 05ca4b4..f42abeb 100644
--- a/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/inotify-tools/inotify-tools_git.bb
@@ -5,12 +5,12 @@
 LICENSE = "GPL-2.0"
 LIC_FILES_CHKSUM = "file://COPYING;md5=ac6c26e52aea428ee7f56dc2c56424c6"
 
-SRCREV = "e203934e46784bb34c213078423ba1678e0c4936"
-PV = "3.20.1"
+SRCREV = "cfa93aa19f81d85b63cd64da30c7499890d4c07d"
+PV = "3.20.2.2"
 
 SRC_URI = "git://github.com/rvoicilas/${BPN} \
-           file://inotify-nosys-fix-system-call-number.patch \
-          "
+           file://0001-Makefile.am-add-build-rule-for-README.patch \
+           "
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch b/meta-openembedded/meta-oe/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch
deleted file mode 100644
index 19a858b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/itstool/itstool/0001-Native-Don-t-use-build-time-hardcoded-python-binary-.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 335ef14fc801c9dfbe7e5692dc71cfbe72049d2b 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.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This is same patch as used for target build except that we do not use the
-'-S' and '-s' option because '-S' is relatively young [1] and elder build-host
-don't support it [2]
-
-[1] https://github.com/coreutils/coreutils/commit/668306ed86c8c79b0af0db8b9c882654ebb66db2#diff-83d9d52b1f12ac589739ab1334ae4f30
-[2] https://errors.yoctoproject.org/Errors/Details/274743/
-
-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
---- a/itstool.in
-+++ b/itstool.in
-@@ -1,4 +1,4 @@
--#!@PYTHON@ -s
-+#!/usr/bin/env python3
- #
- # Copyright (c) 2010-2018 Shaun McCance <shaunm@gnome.org>
- #
--- 
-2.21.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/itstool/itstool/0002-Don-t-use-build-time-hardcoded-python-binary-path.patch b/meta-openembedded/meta-oe/recipes-support/itstool/itstool/0002-Don-t-use-build-time-hardcoded-python-binary-path.patch
deleted file mode 100644
index b911053..0000000
--- a/meta-openembedded/meta-oe/recipes-support/itstool/itstool/0002-Don-t-use-build-time-hardcoded-python-binary-path.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From cd9b56224895576125e91cca317ace8a80f3eb77 Mon Sep 17 00:00:00 2001
-From: Piotr Tworek <tworaz@tworaz.net>
-Date: Sat, 27 Jul 2019 10:19:11 +0200
-Subject: [PATCH] Don't use build time hardcoded python binary path.
-
-This path obviously won't work on target since they refer to build
-machine directory structure. Native builds will also fail if local.conf
-has INHERIT+=rm_work. Instread of hardcoding path to python binary use
-whatever is found in PATH first. This should also allow the tool to use
-python3 binary provided in recipe-sysroot-native.
-
-Upstream-Status: Inappropriate [OE specific]
----
- itstool.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/itstool.in b/itstool.in
-index b3c0033..7df2476 100755
---- a/itstool.in
-+++ b/itstool.in
-@@ -1,4 +1,4 @@
--#!@PYTHON@ -s
-+#!/usr/bin/env -S python3 -s
- #
- # Copyright (c) 2010-2018 Shaun McCance <shaunm@gnome.org>
- #
---
-2.21.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/itstool/itstool_2.0.6.bb b/meta-openembedded/meta-oe/recipes-support/itstool/itstool_2.0.6.bb
deleted file mode 100644
index 8290c5e..0000000
--- a/meta-openembedded/meta-oe/recipes-support/itstool/itstool_2.0.6.bb
+++ /dev/null
@@ -1,20 +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-target = " file://0002-Don-t-use-build-time-hardcoded-python-binary-path.patch"
-
-SRC_URI[md5sum] = "4306eeba4f4aee6b393d14f9c3c57ca1"
-SRC_URI[sha256sum] = "6233cc22726a9a5a83664bf67d1af79549a298c23185d926c3677afa917b92a9"
-
-BBCLASSEXTEND = "native"
-
-RDEPENDS_${PN} += "libxml2-python"
-RDEPENDS_${PN}_class-native = ""
diff --git a/meta-openembedded/meta-oe/recipes-support/joe/joe_4.6.bb b/meta-openembedded/meta-oe/recipes-support/joe/joe_4.6.bb
index b79e028..674736a 100644
--- a/meta-openembedded/meta-oe/recipes-support/joe/joe_4.6.bb
+++ b/meta-openembedded/meta-oe/recipes-support/joe/joe_4.6.bb
@@ -9,7 +9,7 @@
 PACKAGECONFIG ??= "curses"
 PACKAGECONFIG[curses] = "--enable-curses,--disable-curses,ncurses,ncurses-terminfo"
 
-inherit autotools-brokensep
+inherit autotools-brokensep mime-xdg
 
 SRC_URI[md5sum] = "9017484e6116830d846678b625ea5c43"
 SRC_URI[sha256sum] = "495a0a61f26404070fe8a719d80406dc7f337623788e445b92a9f6de512ab9de"
diff --git a/meta-openembedded/meta-oe/recipes-support/lcov/files/0001-geninfo-Add-intermediate-text-format-support.patch b/meta-openembedded/meta-oe/recipes-support/lcov/files/0001-geninfo-Add-intermediate-text-format-support.patch
new file mode 100644
index 0000000..9ac0770
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lcov/files/0001-geninfo-Add-intermediate-text-format-support.patch
@@ -0,0 +1,898 @@
+From ec3e1f411c332cbc2f2bc7ab7e2175ebf918b37a Mon Sep 17 00:00:00 2001
+From: Peter Oberparleiter <oberpar@linux.ibm.com>
+Date: Fri, 24 May 2019 16:56:52 +0200
+Subject: [PATCH 1/2] geninfo: Add intermediate text format support
+
+This change adds support for parsing the output of gcov's intermediate
+text file format as implemented by GCC versions 5 to 8.  The use of the
+gcov intermediate format should increase processing speed. It also
+provides branch coverage data when using the --initial command line
+option.
+
+Users can control whether geninfo uses the intermediate format via the
+geninfo_intermediate configuration file option. Valid values are:
+
+     0: Use normal text format
+     1: Use intermediate format
+  auto: Use intermediate format if available. This is the default.
+
+Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
+---
+ bin/geninfo  | 567 ++++++++++++++++++++++++++++++++++++++++++++-------
+ lcovrc       |   3 +
+ man/lcovrc.5 |  24 +++
+ 3 files changed, 521 insertions(+), 73 deletions(-)
+
+Upstream-Status: Backport
+Download URL: https://github.com/linux-test-project/lcov/commit/ebfeb3e179e450c69c3532f98cd5ea1fbf6ccba7
+
+diff --git a/bin/geninfo b/bin/geninfo
+index f41eaec..0276666 100755
+--- a/bin/geninfo
++++ b/bin/geninfo
+@@ -54,6 +54,8 @@ use warnings;
+ use File::Basename; 
+ use File::Spec::Functions qw /abs2rel catdir file_name_is_absolute splitdir
+ 			      splitpath catpath/;
++use File::Temp qw(tempfile tempdir);
++use File::Copy qw(copy);
+ use Getopt::Long;
+ use Digest::MD5 qw(md5_base64);
+ use Cwd qw/abs_path/;
+@@ -163,13 +165,13 @@ sub solve_relative_path($$);
+ sub read_gcov_header($);
+ sub read_gcov_file($);
+ sub info(@);
++sub process_intermediate($$$);
+ sub map_llvm_version($);
+ sub version_to_str($);
+ sub get_gcov_version();
+ sub system_no_output($@);
+ sub read_config($);
+ sub apply_config($);
+-sub get_exclusion_data($);
+ sub apply_exclusion_data($$);
+ sub process_graphfile($$);
+ sub filter_fn_name($);
+@@ -264,6 +266,8 @@ our $gcno_split_crc;
+ our $func_coverage = 1;
+ our $br_coverage = 0;
+ our $rc_auto_base = 1;
++our $rc_intermediate = "auto";
++our $intermediate;
+ our $excl_line = "LCOV_EXCL_LINE";
+ our $excl_br_line = "LCOV_EXCL_BR_LINE";
+ 
+@@ -331,6 +335,7 @@ if ($config || %opt_rc)
+ 		"geninfo_compat"		=> \$opt_compat,
+ 		"geninfo_adjust_src_path"	=> \$rc_adjust_src_path,
+ 		"geninfo_auto_base"		=> \$rc_auto_base,
++		"geninfo_intermediate"		=> \$rc_intermediate,
+ 		"lcov_function_coverage"	=> \$func_coverage,
+ 		"lcov_branch_coverage"		=> \$br_coverage,
+ 		"lcov_excl_line"		=> \$excl_line,
+@@ -460,15 +465,38 @@ if (system_no_output(3, $gcov_tool, "--help") == -1)
+ }
+ 
+ ($gcov_version, $gcov_version_string) = get_gcov_version();
++$gcov_caps = get_gcov_capabilities();
++
++# Determine intermediate mode
++if ($rc_intermediate eq "0") {
++	$intermediate = 0;
++} elsif ($rc_intermediate eq "1") {
++	$intermediate = 1;
++} elsif (lc($rc_intermediate) eq "auto") {
++	# Use intermediate format if supported by gcov
++	$intermediate = $gcov_caps->{'intermediate-format'} ? 1 : 0;
++} else {
++	die("ERROR: invalid value for geninfo_intermediate: ".
++	    "'$rc_intermediate'\n");
++}
++
++if ($intermediate) {
++	info("Using intermediate gcov format\n");
++	if ($opt_derive_func_data) {
++		warn("WARNING: --derive-func-data is not compatible with ".
++		     "intermediate format - ignoring\n");
++		$opt_derive_func_data = 0;
++	}
++}
+ 
+ # Determine gcov options
+-$gcov_caps = get_gcov_capabilities();
+ push(@gcov_options, "-b") if ($gcov_caps->{'branch-probabilities'} &&
+ 			      ($br_coverage || $func_coverage));
+ push(@gcov_options, "-c") if ($gcov_caps->{'branch-counts'} &&
+ 			      $br_coverage);
+ push(@gcov_options, "-a") if ($gcov_caps->{'all-blocks'} &&
+-			      $opt_gcov_all_blocks && $br_coverage);
++			      $opt_gcov_all_blocks && $br_coverage &&
++			      !$intermediate);
+ if ($gcov_caps->{'hash-filenames'})
+ {
+ 	push(@gcov_options, "-x");
+@@ -599,7 +627,7 @@ foreach my $entry (@data_directory) {
+ 	gen_info($entry);
+ }
+ 
+-if ($initial && $br_coverage) {
++if ($initial && $br_coverage && !$intermediate) {
+ 	warn("Note: --initial does not generate branch coverage ".
+ 	     "data\n");
+ }
+@@ -768,6 +796,7 @@ sub gen_info($)
+ 	my $prefix;
+ 	my $type;
+ 	my $ext;
++	my $tempdir;
+ 
+ 	if ($initial) {
+ 		$type = "graph";
+@@ -798,16 +827,22 @@ sub gen_info($)
+ 		$prefix = "";
+ 	}
+ 
++	$tempdir = tempdir(CLEANUP => 1);
++
+ 	# Process all files in list
+ 	foreach $file (@file_list) {
+ 		# Process file
+-		if ($initial) {
++		if ($intermediate) {
++			process_intermediate($file, $prefix, $tempdir);
++		} elsif ($initial) {
+ 			process_graphfile($file, $prefix);
+ 		} else {
+ 			process_dafile($file, $prefix);
+ 		}
+ 	}
+ 
++	unlink($tempdir);
++
+ 	# Report whether files were excluded.
+ 	if (%excluded_files) {
+ 		info("Excluded data for %d files due to include/exclude options\n",
+@@ -1058,10 +1093,12 @@ sub process_dafile($$)
+ 
+ 	# Try to find base directory automatically if requested by user
+ 	if ($rc_auto_base) {
+-		$base_dir = find_base_from_graph($base_dir, $instr, $graph);
++		$base_dir = find_base_from_source($base_dir,
++			[ keys(%{$instr}), keys(%{$graph}) ]);
+ 	}
+ 
+-	($instr, $graph) = adjust_graph_filenames($base_dir, $instr, $graph);
++	adjust_source_filenames($instr, $base_dir);
++	adjust_source_filenames($graph, $base_dir);
+ 
+ 	# Set $object_dir to real location of object files. This may differ
+ 	# from $da_dir if the graph file is just a link to the "real" object
+@@ -2017,6 +2054,299 @@ sub read_gcov_file($)
+ }
+ 
+ 
++#
++# read_intermediate_text(gcov_filename, data)
++#
++# Read gcov intermediate text format in GCOV_FILENAME and add the resulting
++# data to DATA in the following format:
++#
++# data:      source_filename -> file_data
++# file_data: concatenated lines of intermediate text data
++#
++
++sub read_intermediate_text($$)
++{
++	my ($gcov_filename, $data) = @_;
++	my $fd;
++	my $filename;
++
++	open($fd, "<", $gcov_filename) or
++		die("ERROR: Could not read $gcov_filename: $!\n");
++	while (my $line = <$fd>) {
++		if ($line =~ /^file:(.*)$/) {
++			$filename = $1;
++			chomp($filename);
++		} elsif (defined($filename)) {
++			$data->{$filename} .= $line;
++		}
++	}
++	close($fd);
++}
++
++
++#
++# intermediate_text_to_info(fd, data, srcdata)
++#
++# Write DATA in info format to file descriptor FD.
++#
++# data:      filename -> file_data:
++# file_data: concatenated lines of intermediate text data
++#
++# srcdata:   filename -> [ excl, brexcl, checksums ]
++# excl:      lineno -> 1 for all lines for which to exclude all data
++# brexcl:    lineno -> 1 for all lines for which to exclude branch data
++# checksums: lineno -> source code checksum
++#
++# Note: To simplify processing, gcov data is not combined here, that is counts
++#       that appear multiple times for the same lines/branches are not added.
++#       This is done by lcov/genhtml when reading the data files.
++#
++
++sub intermediate_text_to_info($$$)
++{
++	my ($fd, $data, $srcdata) = @_;
++	my $branch_num = 0;
++	my $c;
++
++	return if (!%{$data});
++
++	print($fd "TN:$test_name\n");
++	for my $filename (keys(%{$data})) {
++		my ($excl, $brexcl, $checksums);
++
++		if (defined($srcdata->{$filename})) {
++			($excl, $brexcl, $checksums) = @{$srcdata->{$filename}};
++		}
++
++		print($fd "SF:$filename\n");
++		for my $line (split(/\n/, $data->{$filename})) {
++			if ($line =~ /^lcount:(\d+),(\d+),?/) {
++				# lcount:<line>,<count>
++				# lcount:<line>,<count>,<has_unexecuted_blocks>
++				if ($checksum && exists($checksums->{$1})) {
++					$c = ",".$checksums->{$1};
++				} else {
++					$c = "";
++				}
++				print($fd "DA:$1,$2$c\n") if (!$excl->{$1});
++
++				# Intermediate text format does not provide
++				# branch numbers, and the same branch may appear
++				# multiple times on the same line (e.g. in
++				# template instances). Synthesize a branch
++				# number based on the assumptions:
++				# a) the order of branches is fixed across
++				#    instances
++				# b) an instance starts with an lcount line
++				$branch_num = 0;
++			} elsif ($line =~ /^function:(\d+),(\d+),([^,]+)$/) {
++				next if (!$func_coverage || $excl->{$1});
++
++				# function:<line>,<count>,<name>
++				print($fd "FN:$1,$3\n");
++				print($fd "FNDA:$2,$3\n");
++			} elsif ($line =~ /^function:(\d+),\d+,(\d+),([^,]+)$/) {
++				next if (!$func_coverage || $excl->{$1});
++
++				# function:<start_line>,<end_line>,<count>,
++				#          <name>
++				print($fd "FN:$1,$3\n");
++				print($fd "FNDA:$2,$3\n");
++			} elsif ($line =~ /^branch:(\d+),(taken|nottaken|notexec)/) {
++				next if (!$br_coverage || $excl->{$1} ||
++					 $brexcl->{$1});
++
++				# branch:<line>,taken|nottaken|notexec
++				if ($2 eq "taken") {
++					$c = 1;
++				} elsif ($2 eq "nottaken") {
++					$c = 0;
++				} else {
++					$c = "-";
++				}
++				print($fd "BRDA:$1,0,$branch_num,$c\n");
++				$branch_num++;
++			}
++		}
++		print($fd "end_of_record\n");
++	}
++}
++
++
++sub get_output_fd($$)
++{
++	my ($outfile, $file) = @_;
++	my $fd;
++
++	if (!defined($outfile)) {
++		open($fd, ">", "$file.info") or
++			die("ERROR: Cannot create file $file.info: $!\n");
++	} elsif ($outfile eq "-") {
++		open($fd, ">&STDOUT") or
++			die("ERROR: Cannot duplicate stdout: $!\n");
++	} else {
++		open($fd, ">>", $outfile) or
++			die("ERROR: Cannot write to file $outfile: $!\n");
++	}
++
++	return $fd;
++}
++
++
++#
++# print_gcov_warnings(stderr_file, is_graph, map)
++#
++# Print GCOV warnings in file STDERR_FILE to STDERR. If IS_GRAPH is non-zero,
++# suppress warnings about missing as these are expected. Replace keys found
++# in MAP with their values.
++#
++
++sub print_gcov_warnings($$$)
++{
++	my ($stderr_file, $is_graph, $map) = @_;
++	my $fd;
++
++	if (!open($fd, "<", $stderr_file)) {
++		warn("WARNING: Could not open GCOV stderr file ".
++		     "$stderr_file: $!\n");
++		return;
++	}
++	while (my $line = <$fd>) {
++		next if ($is_graph && $line =~ /cannot open data file/);
++
++		for my $key (keys(%{$map})) {
++			$line =~ s/\Q$key\E/$map->{$key}/g;
++		}
++
++		print(STDERR $line);
++	}
++	close($fd);
++}
++
++
++#
++# process_intermediate(file, dir, tempdir)
++#
++# Create output for a single file (either a data file or a graph file) using
++# gcov's intermediate option.
++#
++
++sub process_intermediate($$$)
++{
++	my ($file, $dir, $tempdir) = @_;
++	my ($fdir, $fbase, $fext);
++	my $data_file;
++	my $errmsg;
++	my %data;
++	my $fd;
++	my $base;
++	my $srcdata;
++	my $is_graph = 0;
++	my ($out, $err, $rc);
++
++	info("Processing %s\n", abs2rel($file, $dir));
++
++	$file = solve_relative_path($cwd, $file);
++	($fdir, $fbase, $fext) = split_filename($file);
++
++	$is_graph = 1 if (".$fext" eq $graph_file_extension);
++
++	if ($is_graph) {
++		# Process graph file - copy to temp directory to prevent
++		# accidental processing of associated data file
++		$data_file = "$tempdir/$fbase$graph_file_extension";
++		if (!copy($file, $data_file)) {
++			$errmsg = "ERROR: Could not copy file $file";
++			goto err;
++		}
++	} else {
++		# Process data file in place
++		$data_file = $file;
++	}
++
++	# Change directory
++	if (!chdir($tempdir)) {
++		$errmsg = "Could not change to directory $tempdir: $!";
++		goto err;
++	}
++
++	# Run gcov on data file
++	($out, $err, $rc) = system_no_output(1 + 2 + 4, $gcov_tool,
++					     $data_file, @gcov_options, "-i");
++	defined($out) && unlink($out);
++	if (defined($err)) {
++		print_gcov_warnings($err, $is_graph, {
++			$data_file => $file,
++		});
++		unlink($err);
++	}
++	if ($rc) {
++		$errmsg = "GCOV failed for $file";
++		goto err;
++	}
++
++	if ($is_graph) {
++		# Remove graph file copy
++		unlink($data_file);
++	}
++
++	# Parse resulting file(s)
++	for my $gcov_filename (glob("*.gcov")) {
++		read_intermediate_text($gcov_filename, \%data);
++		unlink($gcov_filename);
++	}
++
++	if (!%data) {
++		warn("WARNING: GCOV did not produce any data for $file\n");
++		return;
++	}
++
++	# Determine base directory
++	if (defined($base_directory)) {
++		$base = $base_directory;
++	} else {
++		$base = $fdir;
++
++		if (is_compat($COMPAT_MODE_LIBTOOL)) {
++			# Avoid files from .libs dirs
++			$base =~ s/\.libs$//;
++		}
++
++		# Try to find base directory automatically if requested by user
++		if ($rc_auto_base) {
++			$base = find_base_from_source($base, [ keys(%data) ]);
++		}
++	}
++
++	# Apply base file name to relative source files
++	adjust_source_filenames(\%data, $base);
++
++	# Remove excluded source files
++	filter_source_files(\%data);
++
++	# Get data on exclusion markers and checksums if requested
++	if (!$no_markers || $checksum) {
++		$srcdata = get_all_source_data(keys(%data));
++	}
++
++	# Generate output
++	$fd = get_output_fd($output_filename, $file);
++	intermediate_text_to_info($fd, \%data, $srcdata);
++	close($fd);
++
++	chdir($cwd);
++
++	return;
++
++err:
++	if ($ignore[$ERROR_GCOV]) {
++		warn("WARNING: $errmsg!\n");
++	} else {
++		die("ERROR: $errmsg!\n")
++	}
++}
++
++
+ # Map LLVM versions to the version of GCC gcov which they emulate.
+ 
+ sub map_llvm_version($)
+@@ -2151,8 +2481,12 @@ sub int_handler()
+ #
+ #   MODE & 1: suppress STDOUT
+ #   MODE & 2: suppress STDERR
++#   MODE & 4: redirect to temporary files instead of suppressing
+ #
+-# Return 0 on success, non-zero otherwise.
++# Return (stdout, stderr, rc):
++#    stdout: path to tempfile containing stdout or undef
++#    stderr: path to tempfile containing stderr or undef
++#    0 on success, non-zero otherwise
+ #
+ 
+ sub system_no_output($@)
+@@ -2161,14 +2495,31 @@ sub system_no_output($@)
+ 	my $result;
+ 	local *OLD_STDERR;
+ 	local *OLD_STDOUT;
++	my $stdout_file;
++	my $stderr_file;
++	my $fd;
+ 
+ 	# Save old stdout and stderr handles
+ 	($mode & 1) && open(OLD_STDOUT, ">>&", "STDOUT");
+ 	($mode & 2) && open(OLD_STDERR, ">>&", "STDERR");
+ 
+-	# Redirect to /dev/null
+-	($mode & 1) && open(STDOUT, ">", "/dev/null");
+-	($mode & 2) && open(STDERR, ">", "/dev/null");
++	if ($mode & 4) {
++		# Redirect to temporary files
++		if ($mode & 1) {
++			($fd, $stdout_file) = tempfile(UNLINK => 1);
++			open(STDOUT, ">", $stdout_file) || warn("$!\n");
++			close($fd);
++		}
++		if ($mode & 2) {
++			($fd, $stderr_file) = tempfile(UNLINK => 1);
++			open(STDERR, ">", $stderr_file) || warn("$!\n");
++			close($fd);
++		}
++	} else {
++		# Redirect to /dev/null
++		($mode & 1) && open(STDOUT, ">", "/dev/null");
++		($mode & 2) && open(STDERR, ">", "/dev/null");
++	}
+  
+ 	debug("system(".join(' ', @_).")\n");
+ 	system(@_);
+@@ -2181,8 +2532,18 @@ sub system_no_output($@)
+ 	# Restore old handles
+ 	($mode & 1) && open(STDOUT, ">>&", "OLD_STDOUT");
+ 	($mode & 2) && open(STDERR, ">>&", "OLD_STDERR");
++
++	# Remove empty output files
++	if (defined($stdout_file) && -z $stdout_file) {
++		unlink($stdout_file);
++		$stdout_file = undef;
++	}
++	if (defined($stderr_file) && -z $stderr_file) {
++		unlink($stderr_file);
++		$stderr_file = undef;
++	}
+  
+-	return $result;
++	return ($stdout_file, $stderr_file, $result);
+ }
+ 
+ 
+@@ -2260,23 +2621,28 @@ sub apply_config($)
+ 
+ 
+ #
+-# get_exclusion_data(filename)
++# get_source_data(filename)
+ #
+-# Scan specified source code file for exclusion markers and return
+-#   linenumber -> 1
+-# for all lines which should be excluded.
++# Scan specified source code file for exclusion markers and checksums. Return
++#   ( excl, brexcl, checksums ) where
++#   excl:      lineno -> 1 for all lines for which to exclude all data
++#   brexcl:    lineno -> 1 for all lines for which to exclude branch data
++#   checksums: lineno -> source code checksum
+ #
+ 
+-sub get_exclusion_data($)
++sub get_source_data($)
+ {
+ 	my ($filename) = @_;
+ 	my %list;
+ 	my $flag = 0;
++	my %brdata;
++	my $brflag = 0;
++	my %checksums;
+ 	local *HANDLE;
+ 
+ 	if (!open(HANDLE, "<", $filename)) {
+ 		warn("WARNING: could not open $filename\n");
+-		return undef;
++		return;
+ 	}
+ 	while (<HANDLE>) {
+ 		if (/$EXCL_STOP/) {
+@@ -2287,14 +2653,62 @@ sub get_exclusion_data($)
+ 		if (/$excl_line/ || $flag) {
+ 			$list{$.} = 1;
+ 		}
++		if (/$EXCL_BR_STOP/) {
++			$brflag = 0;
++		} elsif (/$EXCL_BR_START/) {
++			$brflag = 1;
++		}
++		if (/$excl_br_line/ || $brflag) {
++			$brdata{$.} = 1;
++		}
++		if ($checksum) {
++			chomp();
++			$checksums{$.} = md5_base64($_);
++		}
+ 	}
+ 	close(HANDLE);
+ 
+-	if ($flag) {
++	if ($flag || $brflag) {
+ 		warn("WARNING: unterminated exclusion section in $filename\n");
+ 	}
+ 
+-	return \%list;
++	return (\%list, \%brdata, \%checksums);
++}
++
++
++#
++# get_all_source_data(filenames)
++#
++# Scan specified source code files for exclusion markers and return
++#   filename -> [ excl, brexcl, checksums ]
++#   excl:      lineno -> 1 for all lines for which to exclude all data
++#   brexcl:    lineno -> 1 for all lines for which to exclude branch data
++#   checksums: lineno -> source code checksum
++#
++
++sub get_all_source_data(@)
++{
++	my @filenames = @_;
++	my %data;
++	my $failed = 0;
++
++	for my $filename (@filenames) {
++		my @d;
++		next if (exists($data{$filename}));
++
++		@d = get_source_data($filename);
++		if (@d) {
++			$data{$filename} = [ @d ];
++		} else {
++			$failed = 1;
++		}
++	}
++
++	if ($failed) {
++		warn("WARNING: some exclusion markers may be ignored\n");
++	}
++
++	return \%data;
+ }
+ 
+ 
+@@ -2318,35 +2732,17 @@ sub apply_exclusion_data($$)
+ {
+ 	my ($instr, $graph) = @_;
+ 	my $filename;
+-	my %excl_data;
+-	my $excl_read_failed = 0;
++	my $excl_data;
+ 
+-	# Collect exclusion marker data
+-	foreach $filename (sort_uniq_lex(keys(%{$graph}), keys(%{$instr}))) {
+-		my $excl = get_exclusion_data($filename);
+-
+-		# Skip and note if file could not be read
+-		if (!defined($excl)) {
+-			$excl_read_failed = 1;
+-			next;
+-		}
+-
+-		# Add to collection if there are markers
+-		$excl_data{$filename} = $excl if (keys(%{$excl}) > 0);
+-	}
+-
+-	# Warn if not all source files could be read
+-	if ($excl_read_failed) {
+-		warn("WARNING: some exclusion markers may be ignored\n");
+-	}
++	($excl_data) = get_all_source_data(keys(%{$graph}), keys(%{$instr}));
+ 
+ 	# Skip if no markers were found
+-	return ($instr, $graph) if (keys(%excl_data) == 0);
++	return ($instr, $graph) if (!%$excl_data);
+ 
+ 	# Apply exclusion marker data to graph
+-	foreach $filename (keys(%excl_data)) {
++	foreach $filename (keys(%$excl_data)) {
+ 		my $function_data = $graph->{$filename};
+-		my $excl = $excl_data{$filename};
++		my $excl = $excl_data->{$filename}->[0];
+ 		my $function;
+ 
+ 		next if (!defined($function_data));
+@@ -2384,9 +2780,9 @@ sub apply_exclusion_data($$)
+ 	}
+ 
+ 	# Apply exclusion marker data to instr
+-	foreach $filename (keys(%excl_data)) {
++	foreach $filename (keys(%$excl_data)) {
+ 		my $line_data = $instr->{$filename};
+-		my $excl = $excl_data{$filename};
++		my $excl = $excl_data->{$filename}->[0];
+ 		my $line;
+ 		my @new_data;
+ 
+@@ -2468,10 +2864,12 @@ sub process_graphfile($$)
+ 
+ 	# Try to find base directory automatically if requested by user
+ 	if ($rc_auto_base) {
+-		$base_dir = find_base_from_graph($base_dir, $instr, $graph);
++		$base_dir = find_base_from_source($base_dir,
++			[ keys(%{$instr}), keys(%{$graph}) ]);
+ 	}
+ 
+-	($instr, $graph) = adjust_graph_filenames($base_dir, $instr, $graph);
++	adjust_source_filenames($instr, $base_dir);
++	adjust_source_filenames($graph, $base_dir);
+ 
+ 	if (!$no_markers) {
+ 		# Apply exclusion marker data to graph file data
+@@ -2767,11 +3165,11 @@ sub parent_dir($)
+ }
+ 
+ #
+-# find_base_from_graph(base_dir, instr, graph)
++# find_base_from_source(base_dir, source_files)
+ #
+-# Try to determine the base directory of the graph file specified by INSTR
+-# and GRAPH. The base directory is the base for all relative filenames in
+-# the graph file. It is defined by the current working directory at time
++# Try to determine the base directory of the object file built from
++# SOURCE_FILES. The base directory is the base for all relative filenames in
++# the gcov data. It is defined by the current working directory at time
+ # of compiling the source file.
+ #
+ # This function implements a heuristic which relies on the following
+@@ -2781,16 +3179,16 @@ sub parent_dir($)
+ # - files by the same name are not present in multiple parent directories
+ #
+ 
+-sub find_base_from_graph($$$)
++sub find_base_from_source($$)
+ {
+-	my ($base_dir, $instr, $graph) = @_;
++	my ($base_dir, $source_files) = @_;
+ 	my $old_base;
+ 	my $best_miss;
+ 	my $best_base;
+ 	my %rel_files;
+ 
+ 	# Determine list of relative paths
+-	foreach my $filename (keys(%{$instr}), keys(%{$graph})) {
++	foreach my $filename (@$source_files) {
+ 		next if (file_name_is_absolute($filename));
+ 
+ 		$rel_files{$filename} = 1;
+@@ -2829,17 +3227,17 @@ sub find_base_from_graph($$$)
+ }
+ 
+ #
+-# adjust_graph_filenames(base_dir, instr, graph)
++# adjust_source_filenames(hash, base_dir)
+ #
+-# Make relative paths in INSTR and GRAPH absolute and apply
+-# geninfo_adjust_src_path setting to graph file data.
++# Transform all keys of HASH to absolute form and apply requested
++# transformations.
+ #
+ 
+-sub adjust_graph_filenames($$$)
++sub adjust_source_filenames($$$)
+ {
+-	my ($base_dir, $instr, $graph) = @_;
++	my ($hash, $base_dir) = @_;
+ 
+-	foreach my $filename (keys(%{$instr})) {
++	foreach my $filename (keys(%{$hash})) {
+ 		my $old_filename = $filename;
+ 
+ 		# Convert to absolute canonical form
+@@ -2851,28 +3249,50 @@ sub adjust_graph_filenames($$$)
+ 		}
+ 
+ 		if ($filename ne $old_filename) {
+-			$instr->{$filename} = delete($instr->{$old_filename});
++			$hash->{$filename} = delete($hash->{$old_filename});
+ 		}
+ 	}
++}
+ 
+-	foreach my $filename (keys(%{$graph})) {
+-		my $old_filename = $filename;
+ 
+-		# Make absolute
+-		# Convert to absolute canonical form
+-		$filename = solve_relative_path($base_dir, $filename);
++#
++# filter_source_files(hash)
++#
++# Remove unwanted source file data from HASH.
++#
+ 
+-		# Apply adjustment
+-		if (defined($adjust_src_pattern)) {
+-			$filename =~ s/$adjust_src_pattern/$adjust_src_replace/g;
++sub filter_source_files($)
++{
++	my ($hash) = @_;
++
++	foreach my $filename (keys(%{$hash})) {
++		# Skip external files if requested
++		goto del if (!$opt_external && is_external($filename));
++
++		# Apply include patterns
++		if (@include_patterns) {
++			my $keep;
++
++			foreach my $pattern (@include_patterns) {
++				if ($filename =~ (/^$pattern$/)) {
++					$keep = 1;
++					last;
++				}
++			}
++			goto del if (!$keep);
+ 		}
+ 
+-		if ($filename ne $old_filename) {
+-			$graph->{$filename} = delete($graph->{$old_filename});
++		# Apply exclude patterns
++		foreach my $pattern (@exclude_patterns) {
++			goto del if ($filename =~ (/^$pattern$/));
+ 		}
+-	}
++		next;
+ 
+-	return ($instr, $graph);
++del:
++		# Remove file data
++		delete($hash->{$filename});
++		$excluded_files{$filename} = 1;
++	}
+ }
+ 
+ #
+@@ -3784,6 +4204,7 @@ sub get_gcov_capabilities()
+ 		'c' => 'branch-counts',
+ 		'f' => 'function-summaries',
+ 		'h' => 'help',
++		'i' => 'intermediate-format',
+ 		'l' => 'long-file-names',
+ 		'n' => 'no-output',
+ 		'o' => 'object-directory',
+diff --git a/lcovrc b/lcovrc
+index 40f364f..bd4bc3b 100644
+--- a/lcovrc
++++ b/lcovrc
+@@ -134,6 +134,9 @@ genhtml_desc_html=0
+ # when collecting coverage data.
+ geninfo_auto_base = 1
+ 
++# Use gcov intermediate format? Valid values are 0, 1, auto
++geninfo_intermediate = auto
++
+ # Directory containing gcov kernel files
+ # lcov_gcov_dir = /proc/gcov
+ 
+diff --git a/man/lcovrc.5 b/man/lcovrc.5
+index f20d273..bf0ce7a 100644
+--- a/man/lcovrc.5
++++ b/man/lcovrc.5
+@@ -223,6 +223,11 @@ geninfo_compat_libtool = 0
+ geninfo_auto_base = 1
+ .br
+ 
++# Use gcov intermediate format? Valid values are 0, 1, auto
++.br
++geninfo_intermediate = auto
++.br
++
+ # Directory containing gcov kernel files
+ .br
+ lcov_gcov_dir = /proc/gcov
+@@ -789,6 +794,25 @@ located, and in addition, is different between files of the same project.
+ Default is 1.
+ .PP
+ 
++.BR geninfo_intermediate " ="
++.IR 0 | 1 | auto
++.IP
++Specify whether to use gcov intermediate format
++.br
++
++Use this option to control whether geninfo should use the gcov intermediate
++format while collecting coverage data. The use of the gcov intermediate format
++should increase processing speed. It also provides branch coverage data when
++using the \-\-initial command line option.
++.br
++
++Valid values are 0 for off, 1 for on, and "auto" to let geninfo automatically
++use immediate format when supported by gcov.
++.br
++
++Default is "auto".
++.PP
++
+ .BR lcov_gcov_dir " ="
+ .I path_to_kernel_coverage_data
+ .IP
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lcov/files/0002-geninfo-Add-intermediate-JSON-format-support.patch b/meta-openembedded/meta-oe/recipes-support/lcov/files/0002-geninfo-Add-intermediate-JSON-format-support.patch
new file mode 100644
index 0000000..7b18063
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lcov/files/0002-geninfo-Add-intermediate-JSON-format-support.patch
@@ -0,0 +1,247 @@
+From e13b2b6f8443da660cafa0679c3b16240843ce9f Mon Sep 17 00:00:00 2001
+From: Peter Oberparleiter <oberpar@linux.ibm.com>
+Date: Fri, 24 May 2019 17:16:56 +0200
+Subject: [PATCH 2/2] geninfo: Add intermediate JSON format support
+
+This change adds support for parsing the output of gcov's intermediate
+JSON file format as implemented by GCC version 9.
+
+Note: The way that the intermediate file format support is implemented
+in geninfo removes the need to parse .gcno files directly. Since geninfo
+does not include support for parsing GCC 9 .gcno files, using the
+intermediate format is the only option for geninfo to collect coverage
+data generated by GCC version 9.
+
+Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
+---
+ bin/geninfo | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 160 insertions(+), 2 deletions(-)
+
+Upstream-Status: Backport
+Download URL: https://github.com/linux-test-project/lcov/commit/75fbae1cfc5027f818a0bb865bf6f96fab3202da
+
+diff --git a/bin/geninfo b/bin/geninfo
+index 0276666..cceb782 100755
+--- a/bin/geninfo
++++ b/bin/geninfo
+@@ -59,6 +59,9 @@ use File::Copy qw(copy);
+ use Getopt::Long;
+ use Digest::MD5 qw(md5_base64);
+ use Cwd qw/abs_path/;
++use PerlIO::gzip;
++use JSON qw(decode_json);
++
+ if( $^O eq "msys" )
+ {
+ 	require File::Spec::Win32;
+@@ -474,7 +477,8 @@ if ($rc_intermediate eq "0") {
+ 	$intermediate = 1;
+ } elsif (lc($rc_intermediate) eq "auto") {
+ 	# Use intermediate format if supported by gcov
+-	$intermediate = $gcov_caps->{'intermediate-format'} ? 1 : 0;
++	$intermediate = ($gcov_caps->{'intermediate-format'} ||
++			 $gcov_caps->{'json-format'}) ? 1 : 0;
+ } else {
+ 	die("ERROR: invalid value for geninfo_intermediate: ".
+ 	    "'$rc_intermediate'\n");
+@@ -2084,6 +2088,48 @@ sub read_intermediate_text($$)
+ }
+ 
+ 
++#
++# read_intermediate_json(gcov_filename, data, basedir_ref)
++#
++# Read gcov intermediate JSON format in GCOV_FILENAME and add the resulting
++# data to DATA in the following format:
++#
++# data:      source_filename -> file_data
++# file_data: GCOV JSON data for file
++#
++# Also store the value for current_working_directory to BASEDIR_REF.
++#
++
++sub read_intermediate_json($$$)
++{
++	my ($gcov_filename, $data, $basedir_ref) = @_;
++	my $fd;
++	my $text;
++	my $json;
++
++	open($fd, "<:gzip", $gcov_filename) or
++		die("ERROR: Could not read $gcov_filename: $!\n");
++	local $/;
++	$text = <$fd>;
++	close($fd);
++
++	$json = decode_json($text);
++	if (!defined($json) || !exists($json->{"files"}) ||
++	    ref($json->{"files"} ne "ARRAY")) {
++		die("ERROR: Unrecognized JSON output format in ".
++		    "$gcov_filename\n");
++	}
++
++	$$basedir_ref = $json->{"current_working_directory"};
++
++	for my $file (@{$json->{"files"}}) {
++		my $filename = $file->{"file"};
++
++		$data->{$filename} = $file;
++	}
++}
++
++
+ #
+ # intermediate_text_to_info(fd, data, srcdata)
+ #
+@@ -2173,6 +2219,104 @@ sub intermediate_text_to_info($$$)
+ }
+ 
+ 
++#
++# intermediate_json_to_info(fd, data, srcdata)
++#
++# Write DATA in info format to file descriptor FD.
++#
++# data:      filename -> file_data:
++# file_data: GCOV JSON data for file
++#
++# srcdata:   filename -> [ excl, brexcl, checksums ]
++# excl:      lineno -> 1 for all lines for which to exclude all data
++# brexcl:    lineno -> 1 for all lines for which to exclude branch data
++# checksums: lineno -> source code checksum
++#
++# Note: To simplify processing, gcov data is not combined here, that is counts
++#       that appear multiple times for the same lines/branches are not added.
++#       This is done by lcov/genhtml when reading the data files.
++#
++
++sub intermediate_json_to_info($$$)
++{
++	my ($fd, $data, $srcdata) = @_;
++	my $branch_num = 0;
++
++	return if (!%{$data});
++
++	print($fd "TN:$test_name\n");
++	for my $filename (keys(%{$data})) {
++		my ($excl, $brexcl, $checksums);
++		my $file_data = $data->{$filename};
++
++		if (defined($srcdata->{$filename})) {
++			($excl, $brexcl, $checksums) = @{$srcdata->{$filename}};
++		}
++
++		print($fd "SF:$filename\n");
++
++		# Function data
++		if ($func_coverage) {
++			for my $d (@{$file_data->{"functions"}}) {
++				my $line = $d->{"start_line"};
++				my $count = $d->{"execution_count"};
++				my $name = $d->{"name"};
++
++				next if (!defined($line) || !defined($count) ||
++					 !defined($name) || $excl->{$line});
++
++				print($fd "FN:$line,$name\n");
++				print($fd "FNDA:$count,$name\n");
++			}
++		}
++
++		# Line data
++		for my $d (@{$file_data->{"lines"}}) {
++			my $line = $d->{"line_number"};
++			my $count = $d->{"count"};
++			my $c;
++			my $branches = $d->{"branches"};
++			my $unexec = $d->{"unexecuted_block"};
++
++			next if (!defined($line) || !defined($count) ||
++				 $excl->{$line});
++
++			if (defined($unexec) && $unexec && $count == 0) {
++				$unexec = 1;
++			} else {
++				$unexec = 0;
++			}
++
++			if ($checksum && exists($checksums->{$line})) {
++				$c = ",".$checksums->{$line};
++			} else {
++				$c = "";
++			}
++			print($fd "DA:$line,$count$c\n");
++
++			$branch_num = 0;
++			# Branch data
++			if ($br_coverage && !$brexcl->{$line}) {
++				for my $b (@$branches) {
++					my $brcount = $b->{"count"};
++
++					if (!defined($brcount) || $unexec) {
++						$brcount = "-";
++					}
++					print($fd "BRDA:$line,0,$branch_num,".
++					      "$brcount\n");
++
++					$branch_num++;
++				}
++			}
++
++		}
++
++		print($fd "end_of_record\n");
++	}
++}
++
++
+ sub get_output_fd($$)
+ {
+ 	my ($outfile, $file) = @_;
+@@ -2243,6 +2387,8 @@ sub process_intermediate($$$)
+ 	my $srcdata;
+ 	my $is_graph = 0;
+ 	my ($out, $err, $rc);
++	my $json_basedir;
++	my $json_format;
+ 
+ 	info("Processing %s\n", abs2rel($file, $dir));
+ 
+@@ -2296,6 +2442,12 @@ sub process_intermediate($$$)
+ 		unlink($gcov_filename);
+ 	}
+ 
++	for my $gcov_filename (glob("*.gcov.json.gz")) {
++		read_intermediate_json($gcov_filename, \%data, \$json_basedir);
++		unlink($gcov_filename);
++		$json_format = 1;
++	}
++
+ 	if (!%data) {
+ 		warn("WARNING: GCOV did not produce any data for $file\n");
+ 		return;
+@@ -2304,6 +2456,8 @@ sub process_intermediate($$$)
+ 	# Determine base directory
+ 	if (defined($base_directory)) {
+ 		$base = $base_directory;
++	} elsif (defined($json_basedir)) {
++		$base = $json_basedir;
+ 	} else {
+ 		$base = $fdir;
+ 
+@@ -2331,7 +2485,11 @@ sub process_intermediate($$$)
+ 
+ 	# Generate output
+ 	$fd = get_output_fd($output_filename, $file);
+-	intermediate_text_to_info($fd, \%data, $srcdata);
++	if ($json_format) {
++		intermediate_json_to_info($fd, \%data, $srcdata);
++	} else {
++		intermediate_text_to_info($fd, \%data, $srcdata);
++	}
+ 	close($fd);
+ 
+ 	chdir($cwd);
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.14.bb b/meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.14.bb
index 26e797a..1471818 100755
--- a/meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.14.bb
+++ b/meta-openembedded/meta-oe/recipes-support/lcov/lcov_1.14.bb
@@ -10,6 +10,9 @@
 
 RDEPENDS_${PN} += " \
     gcov \
+    gcov-symlinks \
+    libjson-perl \
+    libperlio-gzip-perl \
     perl \
     perl-module-filehandle \
     perl-module-getopt-std \
@@ -19,6 +22,7 @@
     perl-module-cwd \
     perl-module-errno \
     perl-module-file-basename \
+    perl-module-file-copy \
     perl-module-file-find \
     perl-module-file-path \
     perl-module-file-spec \
@@ -42,7 +46,11 @@
     perl-module-tie-hash \
 "
 
-SRC_URI = "http://downloads.sourceforge.net/ltp/${BP}.tar.gz"
+SRC_URI = " \
+           http://downloads.sourceforge.net/ltp/${BP}.tar.gz \
+           file://0001-geninfo-Add-intermediate-text-format-support.patch \
+           file://0002-geninfo-Add-intermediate-JSON-format-support.patch \
+	   "
 
 SRC_URI[md5sum] = "0220d01753469f83921f8f41ae5054c1"
 SRC_URI[sha256sum] = "14995699187440e0ae4da57fe3a64adc0a3c5cf14feab971f8db38fb7d8f071a"
@@ -51,3 +59,4 @@
     oe_runmake install PREFIX=${D}${prefix} CFG_DIR=${D}${sysconfdir}
 }
 
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.1.bb b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.2.bb
similarity index 93%
rename from meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.1.bb
rename to meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.2.bb
index 1a5c184..a954499 100644
--- a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.2.bb
@@ -9,7 +9,7 @@
 S = "${WORKDIR}/git"
 B = "${S}"
 
-SRCREV = "9ecc1042109528051983261ffd491d45e7c471e1"
+SRCREV = "e64e752a28a4a41b0a43cba3bedf9571c22af807"
 SRC_URI = "git://github.com/rhinstaller/libbytesize;branch=master"
 
 inherit gettext autotools python3native
diff --git a/meta-openembedded/meta-oe/recipes-support/libcanberra/files/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch b/meta-openembedded/meta-oe/recipes-support/libcanberra/files/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch
new file mode 100644
index 0000000..ba6fa2c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libcanberra/files/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch
@@ -0,0 +1,63 @@
+From c0620e432650e81062c1967cc669829dbd29b310 Mon Sep 17 00:00:00 2001
+From: Michael Meeks <michael.meeks@suse.com>
+Date: Fri, 9 Nov 2012 16:16:40 +0000
+Subject: [PATCH] gtk: Don't assume all GdkDisplays are GdkX11Displays:
+ broadway/wayland
+
+---
+ src/canberra-gtk-module.c | 15 +++++++++++++++
+ src/canberra-gtk.c        |  5 +++++
+ 2 files changed, 20 insertions(+)
+
+--- a/src/canberra-gtk-module.c
++++ b/src/canberra-gtk-module.c
+@@ -307,6 +307,11 @@ static gint window_get_desktop(GdkDispla
+         guchar *data = NULL;
+         gint ret = -1;
+ 
++#ifdef GDK_IS_X11_DISPLAY
++        if (!GDK_IS_X11_DISPLAY(d))
++                return 0;
++#endif
++
+         if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w),
+                                gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_DESKTOP"),
+                                0, G_MAXLONG, False, XA_CARDINAL, &type_return,
+@@ -335,6 +340,11 @@ static gint display_get_desktop(GdkDispl
+         guchar *data = NULL;
+         gint ret = -1;
+ 
++#ifdef GDK_IS_X11_DISPLAY
++        if (!GDK_IS_X11_DISPLAY(d))
++                return 0;
++#endif
++
+         if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), DefaultRootWindow(GDK_DISPLAY_XDISPLAY(d)),
+                                gdk_x11_get_xatom_by_name_for_display(d, "_NET_CURRENT_DESKTOP"),
+                                0, G_MAXLONG, False, XA_CARDINAL, &type_return,
+@@ -365,6 +375,11 @@ static gboolean window_is_xembed(GdkDisp
+         gboolean ret = FALSE;
+         Atom xembed;
+ 
++#ifdef GDK_IS_X11_DISPLAY
++        if (!GDK_IS_X11_DISPLAY(d))
++                return FALSE;
++#endif
++
+         /* Gnome Panel applets are XEMBED windows. We need to make sure we
+          * ignore them */
+ 
+--- a/src/canberra-gtk.c
++++ b/src/canberra-gtk.c
+@@ -185,6 +185,11 @@ static gint window_get_desktop(GdkDispla
+         guchar *data = NULL;
+         gint ret = -1;
+ 
++#ifdef GDK_IS_X11_DISPLAY
++        if (!GDK_IS_X11_DISPLAY(d))
++                return 0;
++#endif
++
+         if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w),
+                                gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_DESKTOP"),
+                                0, G_MAXLONG, False, XA_CARDINAL, &type_return,
diff --git a/meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb b/meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb
index 72c93ab..1495051 100644
--- a/meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libcanberra/libcanberra_0.30.bb
@@ -11,6 +11,7 @@
 SRC_URI = " \
     http://0pointer.de/lennart/projects/${BPN}/${BPN}-${PV}.tar.xz \
     file://0001-build-gtk-and-gtk3-version-for-canberra_gtk_play.patch \
+    file://0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch \
 "
 SRC_URI[md5sum] = "34cb7e4430afaf6f447c4ebdb9b42072"
 SRC_URI[sha256sum] = "c2b671e67e0c288a69fc33dc1b6f1b534d07882c2aceed37004bf48c601afa72"
diff --git a/meta-openembedded/meta-oe/recipes-support/libcereal/libcereal_1.2.2.bb b/meta-openembedded/meta-oe/recipes-support/libcereal/libcereal_1.3.0.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-support/libcereal/libcereal_1.2.2.bb
rename to meta-openembedded/meta-oe/recipes-support/libcereal/libcereal_1.3.0.bb
index 365b40b..6fc5881 100644
--- a/meta-openembedded/meta-oe/recipes-support/libcereal/libcereal_1.2.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libcereal/libcereal_1.3.0.bb
@@ -6,7 +6,7 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=e612690af2f575dfd02e2e91443cea23"
 
-SRCREV = "51cbda5f30e56c801c07fe3d3aba5d7fb9e6cca4"
+SRCREV = "02eace19a99ce3cd564ca4e379753d69af08c2c8"
 SRC_URI = "git://github.com/USCiLab/cereal.git"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.1.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.3.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.1.bb
rename to meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.3.bb
index 0391deb..a6320da 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.4.3.bb
@@ -2,8 +2,8 @@
 
 DEPENDS += "autoconf-archive-native"
 
-SRC_URI[md5sum] = "585b4bb431f99c4ba9b3ee58b9d494c1"
-SRC_URI[sha256sum] = "21ae8fd1f8dafc2eb2ba50e652390cf533d21351419a7426255895cb52e21b1c"
+SRC_URI[md5sum] = "d4826720a8de13379436f9c207237bc0"
+SRC_URI[sha256sum] = "0ad080d1eb89c422cf13001293ffa72869ca13028e85dab5f6b3ba90f88da46d"
 
 # enable cxx bindings
 PACKAGECONFIG ?= "cxx"
diff --git a/meta-openembedded/meta-oe/recipes-support/libharu/libharu/libharu-RELEASE_2_3_0_cmake.patch b/meta-openembedded/meta-oe/recipes-support/libharu/libharu/libharu-RELEASE_2_3_0_cmake.patch
new file mode 100644
index 0000000..332be1b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libharu/libharu/libharu-RELEASE_2_3_0_cmake.patch
@@ -0,0 +1,52 @@
+Backport from Fedora Project.
+https://src.fedoraproject.org/rpms/libharu
+
+Fix the install destination of some files.
+
+Upstream-Status: inappropriate
+
+Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
+
+diff -urp libharu-RELEASE_2_3_0/CMakeLists.txt libharu-RELEASE_2_3_0_cmake/CMakeLists.txt
+--- libharu-RELEASE_2_3_0/CMakeLists.txt	2013-10-30 20:11:59.000000000 +0700
++++ libharu-RELEASE_2_3_0_cmake/CMakeLists.txt	2017-06-01 15:56:06.533552795 +0700
+@@ -25,7 +25,7 @@ endif(MSVC)
+ 
+ # information about libharu
+ set(LIBHPDF_MAJOR 2)
+-set(LIBHPDF_MINOR 2)
++set(LIBHPDF_MINOR 3)
+ set(LIBHPDF_PATCH 0)
+ set(LIBHPDF_VERSION ${LIBHPDF_MAJOR}.${LIBHPDF_MINOR}.${LIBHPDF_PATCH})
+ set(LIBHPDF_DESCRIPTION "libHaru is a free, cross platform, open source library for generating PDF files.")
+@@ -210,9 +210,9 @@ set(
+ install(FILES ${haru_HDRS} DESTINATION include)
+ 
+ # install various files
+-install(FILES README CHANGES INSTALL DESTINATION .)
++install(FILES README CHANGES INSTALL DESTINATION ${SHARE_INSTALL_PREFIX}/libharu)
+ if(NOT DEVPAK)
+-  install(DIRECTORY if DESTINATION .)
++  install(DIRECTORY if DESTINATION ${SHARE_INSTALL_PREFIX}/libharu)
+ endif(NOT DEVPAK)
+ if(DEVPAK)
+   install(FILES ${CMAKE_BINARY_DIR}/libharu.DevPackage DESTINATION .)
+diff -urp libharu-RELEASE_2_3_0/src/CMakeLists.txt libharu-RELEASE_2_3_0_cmake/src/CMakeLists.txt
+--- libharu-RELEASE_2_3_0/src/CMakeLists.txt	2013-10-30 20:11:59.000000000 +0700
++++ libharu-RELEASE_2_3_0_cmake/src/CMakeLists.txt	2017-06-01 16:08:45.425105746 +0700
+@@ -90,11 +90,13 @@ if(LIBHPDF_SHARED)
+   target_link_libraries(${LIBHPDF_NAME} ${ADDITIONAL_LIBRARIES})
+   if(WIN32 AND NOT CYGWIN)
+   	set_target_properties(${LIBHPDF_NAME} PROPERTIES DEFINE_SYMBOL HPDF_DLL_MAKE)
++  else(WIN32 AND NOT CYGWIN)
++  	set_target_properties(${LIBHPDF_NAME} PROPERTIES SOVERSION ${LIBHPDF_VERSION})
+   endif(WIN32 AND NOT CYGWIN)
+   install(
+     TARGETS ${LIBHPDF_NAME}
+-    ARCHIVE DESTINATION lib
+-    LIBRARY DESTINATION lib
++    ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
++    LIBRARY DESTINATION ${LIB_INSTALL_DIR}
+     RUNTIME DESTINATION bin
+   )
+ endif(LIBHPDF_SHARED)
diff --git a/meta-openembedded/meta-oe/recipes-support/libharu/libharu_2.3.0.bb b/meta-openembedded/meta-oe/recipes-support/libharu/libharu_2.3.0.bb
new file mode 100644
index 0000000..2d1a37c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libharu/libharu_2.3.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "free PDF library"
+HOMEPAGE = "http://libharu.org"
+DESCRIPTION = "libHaru is a library for generating PDF files. \
+               It is free, open source, written in ANSI C and cross platform. "
+
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://README;md5=3ee6bc1f64d9cc7907f44840c8e50cb1"
+
+SRC_URI = "git://github.com/libharu/libharu.git;branch=2_3 \
+           file://libharu-RELEASE_2_3_0_cmake.patch \
+	   "
+
+SRCREV = "4ae1d5f4c84459f130bf1b1ef4c5c330af8eca5d"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+DEPENDS += "libpng zlib"
+
+do_install_append() {
+     mkdir -p ${D}/${datadir}/libharu
+     mv ${D}/libharu ${D}/${datadir}
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb b/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb
index b53ba46..f83d9c9 100644
--- a/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb
@@ -4,11 +4,11 @@
 LICENSE = "LGPLv2.1+"
 LIC_FILES_CHKSUM = "file://COPYING.txt;md5=7c13b3376cea0ce68d2d2da0a1b3a72c"
 
-# v0.18 + a single commit fixing the build
-SRCREV = "5090603d01779bb1717fb0c50953330e8770550f"
-PV = "0.18+git${SRCPV}"
+SRCREV = "5f5af2e417129ad8f4e05fc5c1b730f0694dca12"
+PV = "0.19+git${SRCPV}"
 
 SRC_URI = "git://github.com/analogdevicesinc/libiio.git;protocol=https"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.69.bb b/meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.70.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.69.bb
rename to meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.70.bb
index 4daeaf7..94976d2 100644
--- a/meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.69.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libmicrohttpd/libmicrohttpd_0.9.70.bb
@@ -8,8 +8,8 @@
 
 SRC_URI = "${GNU_MIRROR}/libmicrohttpd/${BPN}-${PV}.tar.gz \
 "
-SRC_URI[md5sum] = "3ce03db1f10007517cecf05e040069af"
-SRC_URI[sha256sum] = "fb9b6b148b787493e637d3083588711e65cbcb726fa02cee2cd543c5de27e37e"
+SRC_URI[md5sum] = "dcd6045ecb4ea18c120afedccbd1da74"
+SRC_URI[sha256sum] = "90d0a3d396f96f9bc41eb0f7e8187796049285fabef82604acd4879590977307"
 
 inherit autotools lib_package pkgconfig gettext
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic/0001-libmimetic-Removing-test-directory-from-the-Makefile.patch b/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic/0001-libmimetic-Removing-test-directory-from-the-Makefile.patch
new file mode 100644
index 0000000..50cd4d4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic/0001-libmimetic-Removing-test-directory-from-the-Makefile.patch
@@ -0,0 +1,67 @@
+From 64fd25af5fea3a3c9c12122a2fd0fab3cd420f72 Mon Sep 17 00:00:00 2001
+From: asmitk01-in <asmitk01@in.ibm.com>
+Date: Wed, 5 Feb 2020 00:14:42 -0600
+Subject: [PATCH] libmimetic: Removing test directory from the Makefile
+
+The test directory is removed as there were errors (relocation errors)
+since the shared object files of libc++ and libc were not taken from the
+sysroot path but from the system's library path where the required
+version of the .so is not present.
+
+The files 'mimetic/codec/other_codecs.h' and 'mimetic/contenttype.cxx'
+contains changes that resolves errors when compiling on target system
+aarch64-yoe-linux-musl.
+
+Signed-off-by: asmitk01-in <asmitk01@in.ibm.com>
+Change-Id: I1822b36ad4a1fa5e7b165d8cac3a6e96aca11c35
+---
+ Makefile.am                  | 2 +-
+ mimetic/codec/other_codecs.h | 4 ++++
+ mimetic/contenttype.cxx      | 4 ++++
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 634bd4c..c7cbae7 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,6 +1,6 @@
+ MAINTAINERCLEANFILES = Makefile Makefile.in config.cache
+ EXTRA_DIST=LICENSE m4
+-SUBDIRS = mimetic doc examples test win32
++SUBDIRS = mimetic doc examples win32
+ INCLUDES=-I$(top_srcdir)
+ ACLOCAL_AMFLAGS=-I m4
+
+diff --git a/mimetic/codec/other_codecs.h b/mimetic/codec/other_codecs.h
+index c4ccf3f..0fc88fd 100644
+--- a/mimetic/codec/other_codecs.h
++++ b/mimetic/codec/other_codecs.h
+@@ -8,6 +8,10 @@
+ #define _MIMETIC_CODEC_OTHER_CODECS_H_
+ #include <mimetic/codec/codec_base.h>
+
++#ifndef __GLIBC__
++    typedef unsigned int uint;
++#endif
++
+ namespace mimetic
+ {
+
+diff --git a/mimetic/contenttype.cxx b/mimetic/contenttype.cxx
+index 522082d..0577d44 100644
+--- a/mimetic/contenttype.cxx
++++ b/mimetic/contenttype.cxx
+@@ -13,6 +13,10 @@
+ #include <mimetic/tokenizer.h>
+ #include <mimetic/utils.h>
+
++#ifndef __GLIBC__
++    typedef unsigned int uint;
++#endif
++
+ namespace mimetic
+ {
+ using namespace std;
+-- 
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic/0001-mimetic-Check-for-MMAP_FAILED-return-from-mmap.patch b/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic/0001-mimetic-Check-for-MMAP_FAILED-return-from-mmap.patch
new file mode 100644
index 0000000..c7c8d62
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic/0001-mimetic-Check-for-MMAP_FAILED-return-from-mmap.patch
@@ -0,0 +1,49 @@
+From f8ab2b1aaa37f6ba9d527a99cb37b6ac2171e122 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Feb 2020 17:03:12 -0800
+Subject: [PATCH] mimetic: Check for MMAP_FAILED return from mmap()
+
+Avoids using greater than zero comparision on pointers
+
+Fixes
+mimetic/os/mmfile.cxx:60:14: error: ordered comparison between pointer and zero ('char *' and 'int')
+
+if(m_beg > 0)
+~~~~ ^ ~
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ mimetic/os/mmfile.cxx | 16 +++++++---------
+ 1 file changed, 7 insertions(+), 9 deletions(-)
+
+diff --git a/mimetic/os/mmfile.cxx b/mimetic/os/mmfile.cxx
+index dfc95b7..ed4ff55 100644
+--- a/mimetic/os/mmfile.cxx
++++ b/mimetic/os/mmfile.cxx
+@@ -57,15 +57,13 @@ bool MMFile::open(int mode)
+ bool MMFile::map()
+ {
+     m_beg = (char*) mmap(0, m_st.st_size, PROT_READ, MAP_SHARED,m_fd,0);
+-    if(m_beg > 0)
+-    {
+-        m_end = m_beg + m_st.st_size;
+-        #if HAVE_MADVISE
+-        madvise(m_beg, m_st.st_size, MADV_SEQUENTIAL);
+-        #endif
+-        return true;
+-    }
+-    return false;
++    if(m_beg == MAP_FAILED)
++        return false;
++    m_end = m_beg + m_st.st_size;
++    #if HAVE_MADVISE
++    madvise(m_beg, m_st.st_size, MADV_SEQUENTIAL);
++    #endif
++    return true;
+ }
+ 
+ MMFile::~MMFile()
+-- 
+2.25.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic_0.9.8.bb b/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic_0.9.8.bb
new file mode 100644
index 0000000..590c4eb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libmimetic/libmimetic_0.9.8.bb
@@ -0,0 +1,24 @@
+# Released under the MIT license.
+
+SUMMARY = "Mimetic Library for multi-part parsing"
+DESCRIPTION = "Email library (MIME) written in C++ designed to be easy to use and integrate but yet fast and efficient."
+AUTHOR = "Stefano Barbato <stefano@codesink.org>"
+HOMEPAGE = "http://www.codesink.org/mimetic_mime_library.html"
+BUGTRACKER = "https://github.com/LadislavSopko/mimetic/issues"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b49da7df0ca479ef01ff7f2d799eabee"
+
+SRCREV = "50486af99b4f9b35522d7b3de40b6ce107505279"
+SRC_URI += "git://github.com/LadislavSopko/mimetic/ \
+            file://0001-libmimetic-Removing-test-directory-from-the-Makefile.patch \
+            file://0001-mimetic-Check-for-MMAP_FAILED-return-from-mmap.patch \
+           "
+
+UPSTREAM_CHECK_COMMITS = "1"
+
+S = "${WORKDIR}/git"
+
+CXXFLAGS += "-Wno-narrowing"
+
+inherit autotools
diff --git a/meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.10.bb b/meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.10.bb
index 655db49..7fe0640 100644
--- a/meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libp11/libp11_0.4.10.bb
@@ -12,6 +12,8 @@
 SRC_URI = "git://github.com/OpenSC/libp11.git"
 SRCREV = "973d31f3f58d5549ddd8b1f822ce8f72186f9d68"
 
+UPSTREAM_CHECK_GITTAGREGEX = "libp11-(?P<pver>\d+(\.\d+)+)"
+
 S = "${WORKDIR}/git"
 
 inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/librsync/librsync_2.2.1.bb b/meta-openembedded/meta-oe/recipes-support/librsync/librsync_2.3.0.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-support/librsync/librsync_2.2.1.bb
rename to meta-openembedded/meta-oe/recipes-support/librsync/librsync_2.3.0.bb
index c2f28fe..e9d34ee 100644
--- a/meta-openembedded/meta-oe/recipes-support/librsync/librsync_2.2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/librsync/librsync_2.3.0.bb
@@ -5,7 +5,7 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499"
 
 SRC_URI = "git://github.com/librsync/librsync.git"
-SRCREV = "5917692418657dc78c9cbde3a8db4c85f25b9c8d"
+SRCREV = "028d9432d05ba4b75239e0ba35bcb36fbfc17e35"
 S = "${WORKDIR}/git"
 
 DEPENDS = "popt"
diff --git a/meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.8.4.bb b/meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.8.9.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.8.4.bb
rename to meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.8.9.bb
index 6040ec9..39ed8a8 100644
--- a/meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.8.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libssh/libssh_0.8.9.bb
@@ -2,12 +2,12 @@
 HOMEPAGE = "http://www.libssh.org"
 SECTION = "libs"
 LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM = "file://COPYING;md5=388a4fb1dea8ceae0be78ba9b01fc139"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dabb4958b830e5df11d2b0ed8ea255a0"
 
 DEPENDS = "zlib openssl libgcrypt"
 
 SRC_URI = "git://git.libssh.org/projects/libssh.git;branch=stable-0.8"
-SRCREV = "789df0b7d0c7abd6b85db9fc5247e146e3d4ddba"
+SRCREV = "04685a74df9ce1db1bc116a83a0da78b4f4fa1f8"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-use-python3-interpreter.patch b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-use-python3-interpreter.patch
new file mode 100644
index 0000000..e27e4f3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-use-python3-interpreter.patch
@@ -0,0 +1,28 @@
+From 571c141b434dff13494c6a3afe621f63a8e610e9 Mon Sep 17 00:00:00 2001
+From: Andrey Zhizhikin <andrey.z@gmail.com>
+Date: Mon, 27 Jan 2020 14:29:34 +0000
+Subject: [PATCH] team_basic_test.py: use python3 interpreter
+
+Use python3 since python2 is EOL and has been removed from several
+distributions.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
+---
+ scripts/team_basic_test.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/team_basic_test.py b/scripts/team_basic_test.py
+index b05be9e..ad980e8 100755
+--- a/scripts/team_basic_test.py
++++ b/scripts/team_basic_test.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#! /usr/bin/env python3
+ """
+ Basic test.
+ 
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest
index 4ba5acf..b5c6f4e 100644
--- a/meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam/run-ptest
@@ -1,3 +1,3 @@
 #!/bin/sh
 
-python $(dirname $0)/team_basic_test.py
+python3 $(dirname $0)/team_basic_test.py
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.29.bb b/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.30.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.29.bb
rename to meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.30.bb
index 821ca19..9cd02b0 100644
--- a/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.29.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.30.bb
@@ -11,9 +11,10 @@
            file://0001-include-sys-select.h-for-fd_set-definition.patch \
            file://0002-teamd-Re-adjust-include-header-order.patch \
            file://0001-team_basic_test.py-disable-RedHat-specific-test.patch \
+           file://0001-team_basic_test.py-use-python3-interpreter.patch \
            file://run-ptest \
            "
-SRCREV = "e897f02bf2403d4859a99e090e34ea768b4c0540"
+SRCREV = "471fb50d206e5a3f2eef9e4247329b51edc5c493"
 
 S = "${WORKDIR}/git"
 
@@ -32,7 +33,7 @@
 "
 
 RDEPENDS_${PN}-utils = "bash"
-RDEPENDS_${PN}-ptest = "python"
+RDEPENDS_${PN}-ptest = "python3-core"
 
 do_install_ptest() {
 	install ${S}/scripts/team_basic_test.py ${D}${PTEST_PATH}/
diff --git a/meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_7.1.0.bb b/meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_8.0.0.bb
similarity index 88%
rename from meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_7.1.0.bb
rename to meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_8.0.0.bb
index 9e197a9..a2491cf 100644
--- a/meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_7.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libtinyxml2/libtinyxml2_8.0.0.bb
@@ -6,7 +6,7 @@
 
 SRC_URI = "git://github.com/leethomason/tinyxml2.git"
 
-SRCREV = "9c740e8d2341bd46dbe8e87053cdb4d931971967"
+SRCREV = "bf15233ad88390461f6ab0dbcf046cce643c5fcb"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb b/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb
index ea54e75..0fb4a6e 100644
--- a/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/lio-utils/lio-utils_4.1.bb
@@ -12,7 +12,7 @@
 SRCREV = "0ac9091c1ff7a52d5435a4f4449e82637142e06e"
 S = "${WORKDIR}/git"
 
-inherit distutils
+inherit ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "distutils", "", d)}
 
 EXTRA_OEMAKE += "DESTDIR=${D}"
 
@@ -64,3 +64,10 @@
 # http://errors.yoctoproject.org/Errors/Details/184712/
 # python-native/python: can't open file 'setup.py': [Errno 2] No such file or directory
 CLEANBROKEN = "1"
+
+python() {
+    if 'meta-python2' not in d.getVar('BBFILE_COLLECTIONS').split():
+        raise bb.parse.SkipRecipe('Requires meta-python2 to be present.')
+}
+
+
diff --git a/meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.2.bb b/meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.3.bb
similarity index 68%
rename from meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.2.bb
rename to meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.3.bb
index 19b9446..c6f9404 100644
--- a/meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/log4cpp/log4cpp_1.1.3.bb
@@ -3,12 +3,11 @@
 LICENSE = "LGPLv2.1"
 LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
 
-PRC = "rc5"
-SRC_URI = "http://downloads.sourceforge.net/${BPN}/${BP}${PRC}.tar.gz \
+SRC_URI = "http://downloads.sourceforge.net/${BPN}/${BP}.tar.gz \
            file://fix-pc.patch;striplevel=2 \
           "
-SRC_URI[md5sum] = "58b4591a2f3e7ef3d5e3e7cfb3a81a62"
-SRC_URI[sha256sum] = "a611d99a20af6676c60219762771c0bfac90f4879bbde70038ece75338b588ec"
+SRC_URI[md5sum] = "b9e2cee932da987212f2c74b767b4d8b"
+SRC_URI[sha256sum] = "2cbbea55a5d6895c9f0116a9a9ce3afb86df383cd05c9d6c1a4238e5e5c8f51d"
 
 S = "${WORKDIR}/${BPN}"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test/0001-gcov_merge.py-scov_merge.py-switch-to-python3.patch b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test/0001-gcov_merge.py-scov_merge.py-switch-to-python3.patch
new file mode 100644
index 0000000..969bfc1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test/0001-gcov_merge.py-scov_merge.py-switch-to-python3.patch
@@ -0,0 +1,110 @@
+From 430982376a544bbccaef5006fab94bbc2f1d1711 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Mon, 13 Apr 2020 07:12:44 +0000
+Subject: [PATCH] gcov_merge.py/scov_merge.py: switch to python3
+
+Make gcov_merge.py and scov_merge.py port to python3.
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ tools/scripts/gcov_merge.py | 12 ++++++------
+ tools/scripts/scov_merge.py | 12 ++++++------
+ 2 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/tools/scripts/gcov_merge.py b/tools/scripts/gcov_merge.py
+index 0ac9bed..9f1cb8c 100644
+--- a/tools/scripts/gcov_merge.py
++++ b/tools/scripts/gcov_merge.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ #
+ # Merge gcov graph from several test cases. This can be used to check
+ # the coverage of several test cases.
+@@ -11,7 +11,7 @@
+ import sys
+ 
+ def die(str):
+-    print str
++    print(str)
+     sys.exit(-1)
+ 
+ def die_on(cond, str):
+@@ -55,11 +55,11 @@ def merge(gcls1, gcls2):
+         gcl1.merge(gcl2)
+ 
+ def gcov_merge(fns, of):
+-    f = file(fns[0])
++    f = open(fns[0])
+     gcls_base = parse(f)
+ 
+     for fn in fns[1:]:
+-        f = file(fn)
++        f = open(fn)
+         gcls = parse(f)
+         merge(gcls_base, gcls)
+ 
+@@ -67,10 +67,10 @@ def gcov_merge(fns, of):
+         gcl.write(of)
+ 
+ def usage():
+-    print 'Usage: %s <gcov graph files>' % (sys.argv[0])
++    print('Usage: %s <gcov graph files>' % (sys.argv[0]))
+ 
+ if __name__ == '__main__':
+     if len(sys.argv) <= 1:
+         usage()
+-        exit -1
++        sys.exit(-1)
+     gcov_merge(sys.argv[1:], sys.stdout)
+diff --git a/tools/scripts/scov_merge.py b/tools/scripts/scov_merge.py
+index f83b922..bbcf760 100644
+--- a/tools/scripts/scov_merge.py
++++ b/tools/scripts/scov_merge.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/env python3
+ #
+ # Merge mce serverity coverage file from several test cases. This can
+ # be used to check the coverage of several test cases.
+@@ -11,7 +11,7 @@
+ import sys
+ 
+ def die(str):
+-    print str
++    print(str)
+     sys.exit(-1)
+ 
+ def die_on(cond, str):
+@@ -47,11 +47,11 @@ def merge(gcls1, gcls2):
+         gcl1.merge(gcl2)
+ 
+ def scov_merge(fns, of):
+-    f = file(fns[0])
++    f = open(fns[0])
+     gcls_base = parse(f)
+ 
+     for fn in fns[1:]:
+-        f = file(fn)
++        f = open(fn)
+         gcls = parse(f)
+         merge(gcls_base, gcls)
+ 
+@@ -59,10 +59,10 @@ def scov_merge(fns, of):
+         gcl.write(of)
+ 
+ def usage():
+-    print 'Usage: %s <severities coverage files>' % (sys.argv[0])
++    print('Usage: %s <severities coverage files>' % (sys.argv[0]))
+ 
+ if __name__ == '__main__':
+     if len(sys.argv) <= 1:
+         usage()
+-        exit -1
++        sys.exit(-1)
+     scov_merge(sys.argv[1:], sys.stdout)
+-- 
+2.24.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test_git.bb b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test_git.bb
index 007b394..35fb944 100644
--- a/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test_git.bb
@@ -12,6 +12,7 @@
 
 SRC_URI = "git://git.kernel.org/pub/scm/utils/cpu/mce/mce-test.git;protocol=git \
            file://makefile-remove-ldflags.patch \
+           file://0001-gcov_merge.py-scov_merge.py-switch-to-python3.patch \
           "
 SRCREV = "7643baf6c3919b3d727e6ba6c2e545dc6a653307"
 PV = "20190917+git${SRCPV}"
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_166.bb b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_168.bb
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_166.bb
rename to meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_168.bb
index 3b4ea1f..e2ef6ea 100644
--- a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_166.bb
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_168.bb
@@ -9,7 +9,7 @@
     file://run-ptest \
 "
 
-SRCREV = "ee90ff20ce6a4d5e016aa249ce8b37f359f9fda4"
+SRCREV = "078d593b8b0c7d44afdd439aacfad6682913038f"
 
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://README.md;md5=74bb47b9a68850cb398665cf78b31de6"
diff --git a/meta-openembedded/meta-oe/recipes-support/monit/monit/monit b/meta-openembedded/meta-oe/recipes-support/monit/monit/monit
new file mode 100644
index 0000000..394704e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/monit/monit/monit
@@ -0,0 +1,42 @@
+#! /bin/sh 
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/monit and type
+# > update-rc.d monit defaults 89
+#
+monit=/usr/bin/monit
+pidfile=/var/run/monit.pid
+monit_args="-c /etc/monitrc"
+
+test -x "$monit" || exit 0
+
+case "$1" in
+  start)
+    echo -n "Starting Monit"
+    start-stop-daemon --start --quiet --exec $monit -- $monit_args
+    RETVAL=$?
+    echo "."
+    ;;
+  stop)
+    echo -n "Stopping Monit"
+    start-stop-daemon --stop --quiet --pidfile $pidfile
+    RETVAL=$?
+    echo "."
+    ;;
+  restart)
+    $0 stop
+    $0 start
+    RETVAL=$?
+    ;;
+  status)
+    $monit $monit_args status
+    RETVAL=$?
+    echo "."
+    ;;
+  *)
+    echo "Usage: $0 {start|stop|restart|status}"
+    exit 1
+esac
+
+exit $RETVAL
+
diff --git a/meta-openembedded/meta-oe/recipes-support/monit/monit/monitrc b/meta-openembedded/meta-oe/recipes-support/monit/monit/monitrc
new file mode 100644
index 0000000..f8d6a43
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/monit/monit/monitrc
@@ -0,0 +1,44 @@
+###############################################################################
+## Monit control file
+###############################################################################
+##
+## Comments begin with a '#' and extend through the end of the line. Keywords
+## are case insensitive. All path's MUST BE FULLY QUALIFIED, starting with '/'.
+##
+## Below you will find examples of some frequently used statements. For
+## information about the control file and a complete list of statements and
+## options, please have a look in the Monit manual.
+##
+##
+###############################################################################
+## Global section
+###############################################################################
+##
+## Start Monit in the background (run as a daemon):
+#
+set daemon  30              # check services at 30 seconds intervals
+#   with start delay 240    # optional: delay the first check by 4-minutes (by
+#                           # default Monit check immediately after Monit start)
+#
+#
+## Set syslog logging. If you want to log to a standalone log file instead,
+## specify the full path to the log file
+#
+set log syslog
+
+set httpd port 2812
+    allow 0.0.0.0/0        # allow localhost to connect to the server and
+    allow admin:monit      # require user 'admin' with password 'monit'
+    #with ssl {            # enable SSL/TLS and set path to server certificate
+    #    pemfile: /etc/ssl/certs/monit.pem
+    #}
+
+###############################################################################
+## Includes
+###############################################################################
+##
+## It is possible to include additional configuration parts from other files or
+## directories.
+#
+include /etc/monit.d/*
+
diff --git a/meta-openembedded/meta-oe/recipes-support/monit/monit_5.26.0.bb b/meta-openembedded/meta-oe/recipes-support/monit/monit_5.26.0.bb
new file mode 100644
index 0000000..a954682
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/monit/monit_5.26.0.bb
@@ -0,0 +1,53 @@
+DESCRIPTION = "Monit is a free open source utility for managing and monitoring, \
+processes, programs, files, directories and filesystems on a UNIX system. \
+Monit conducts automatic maintenance and repair and can execute meaningful \
+causal actions in error situations."
+
+HOMEPAGE = "http://mmonit.com/monit/"
+
+LICENSE = "AGPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea116a7defaf0e93b3bb73b2a34a3f51 \
+                    file://libmonit/COPYING;md5=2405f1c59ed1bf3714cebdb40162ce92"
+
+SRC_URI = " \
+	https://mmonit.com/monit/dist/monit-${PV}.tar.gz \
+	file://monit \
+	file://monitrc \
+"
+
+SRC_URI[md5sum] = "9f7dc65e902c103e4c5891354994c3df"
+SRC_URI[sha256sum] = "87fc4568a3af9a2be89040efb169e3a2e47b262f99e78d5ddde99dd89f02f3c2"
+
+DEPENDS = "zlib bison-native libnsl2 flex-native openssl virtual/crypt"
+
+inherit autotools-brokensep systemd update-rc.d
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
+
+EXTRA_OECONF = "\
+    libmonit_cv_setjmp_available=no \
+    libmonit_cv_vsnprintf_c99_conformant=no \
+    --with-ssl-lib-dir=${STAGING_LIBDIR} \
+    --with-ssl-incl-dir=${STAGING_INCDIR} \
+"
+
+SYSTEMD_SERVICE_${PN} = "monit.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME_${PN} = "monit"
+INITSCRIPT_PARAMS_${PN} = "defaults 89"
+
+do_install_append() {
+
+    # Configuration file
+    install -Dm 0600 ${WORKDIR}/monitrc ${D}${sysconfdir}/monitrc
+
+    # SystemD
+    install -Dm 0644 ${S}/system/startup/monit.service.in ${D}${systemd_system_unitdir}/monit.service
+    sed -i -e 's,@prefix@,${exec_prefix},g' ${D}${systemd_unitdir}/system/monit.service
+
+    # SysV
+    install -Dm 0755 ${WORKDIR}/monit ${D}${sysconfdir}/init.d/monit
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/nano/nano_4.4.bb b/meta-openembedded/meta-oe/recipes-support/nano/nano_4.9.2.bb
similarity index 73%
rename from meta-openembedded/meta-oe/recipes-support/nano/nano_4.4.bb
rename to meta-openembedded/meta-oe/recipes-support/nano/nano_4.9.2.bb
index 18121be..2b236ba 100644
--- a/meta-openembedded/meta-oe/recipes-support/nano/nano_4.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/nano/nano_4.9.2.bb
@@ -12,8 +12,10 @@
 PV_MAJOR = "${@d.getVar('PV').split('.')[0]}"
 
 SRC_URI = "https://nano-editor.org/dist/v${PV_MAJOR}/nano-${PV}.tar.xz"
-SRC_URI[md5sum] = "9650dd3eb0adbab6aaa748a6f1398ccb"
-SRC_URI[sha256sum] = "2af222e0354848ffaa3af31b5cd0a77917e9cb7742cd073d762f3c32f0f582c7"
+SRC_URI[md5sum] = "10df0100ebf4aa7bb4806428c11751eb"
+SRC_URI[sha256sum] = "d8a25eea942ecee2d57b8e037eb4b28f030f818b78773b8fcb994ed5835d2ef6"
+
+UPSTREAM_CHECK_URI = "https://ftp.gnu.org/gnu/nano"
 
 inherit autotools gettext pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr/0001-md-Fix-build-with-musl.patch b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/0001-md-Fix-build-with-musl.patch
new file mode 100644
index 0000000..d2b9bf6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/0001-md-Fix-build-with-musl.patch
@@ -0,0 +1,35 @@
+From 147f3c2acbd96d44025cec11800ded0282327764 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 18 Sep 2017 17:22:43 -0700
+Subject: [PATCH] md: Fix build with musl
+
+The MIPS specific header <sgidefs.h> is not provided by musl
+linux kernel headers provide <asm/sgidefs.h> which has same definitions
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ pr/include/md/_linux.cfg | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/pr/include/md/_linux.cfg
++++ b/pr/include/md/_linux.cfg
+@@ -499,7 +499,7 @@
+ #elif defined(__mips__)
+ 
+ /* For _ABI64 */
+-#include <sgidefs.h>
++#include <asm/sgidefs.h>
+ 
+ #ifdef __MIPSEB__
+ #define IS_BIG_ENDIAN 1
+@@ -511,7 +511,7 @@
+ #error "Unknown MIPS endianness."
+ #endif
+ 
+-#if _MIPS_SIM == _ABI64
++#if _MIPS_SIM == _MIPS_SIM_ABI64
+ 
+ #define IS_64
+ 
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr/0002-Add-nios2-support.patch b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/0002-Add-nios2-support.patch
new file mode 100644
index 0000000..3a04d42
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/0002-Add-nios2-support.patch
@@ -0,0 +1,102 @@
+From 95bda64fb4cf1825fea745e918cfe8202843f0ba Mon Sep 17 00:00:00 2001
+From: Marek Vasut <marex@denx.de>
+Date: Sat, 30 Jan 2016 07:18:02 +0100
+Subject: [PATCH] Add nios2 support
+
+Add support for the nios2 CPU.
+
+Signed-off-by: Marek Vasut <marex@denx.de>
+Upstream-Status: Submitted [ https://bugzilla.mozilla.org/show_bug.cgi?id=1244421 ]
+---
+ nspr/pr/include/md/_linux.cfg | 45 +++++++++++++++++++++++++++++++++++++++++++
+ nspr/pr/include/md/_linux.h   | 14 ++++++++++++++
+ 2 files changed, 59 insertions(+)
+
+Index: nspr/pr/include/md/_linux.cfg
+===================================================================
+--- nspr.orig/pr/include/md/_linux.cfg
++++ nspr/pr/include/md/_linux.cfg
+@@ -975,6 +975,51 @@
+ #define PR_BYTES_PER_WORD_LOG2   2
+ #define PR_BYTES_PER_DWORD_LOG2  3
+ 
++#elif defined(__nios2__)
++
++#define IS_LITTLE_ENDIAN    1
++#undef  IS_BIG_ENDIAN
++
++#define PR_BYTES_PER_BYTE   1
++#define PR_BYTES_PER_SHORT  2
++#define PR_BYTES_PER_INT    4
++#define PR_BYTES_PER_INT64  8
++#define PR_BYTES_PER_LONG   4
++#define PR_BYTES_PER_FLOAT  4
++#define PR_BYTES_PER_DOUBLE 8
++#define PR_BYTES_PER_WORD   4
++#define PR_BYTES_PER_DWORD  8
++
++#define PR_BITS_PER_BYTE    8
++#define PR_BITS_PER_SHORT   16
++#define PR_BITS_PER_INT     32
++#define PR_BITS_PER_INT64   64
++#define PR_BITS_PER_LONG    32
++#define PR_BITS_PER_FLOAT   32
++#define PR_BITS_PER_DOUBLE  64
++#define PR_BITS_PER_WORD    32
++
++#define PR_BITS_PER_BYTE_LOG2   3
++#define PR_BITS_PER_SHORT_LOG2  4
++#define PR_BITS_PER_INT_LOG2    5
++#define PR_BITS_PER_INT64_LOG2  6
++#define PR_BITS_PER_LONG_LOG2   5
++#define PR_BITS_PER_FLOAT_LOG2  5
++#define PR_BITS_PER_DOUBLE_LOG2 6
++#define PR_BITS_PER_WORD_LOG2   5
++
++#define PR_ALIGN_OF_SHORT   2
++#define PR_ALIGN_OF_INT     4
++#define PR_ALIGN_OF_LONG    4
++#define PR_ALIGN_OF_INT64   4
++#define PR_ALIGN_OF_FLOAT   4
++#define PR_ALIGN_OF_DOUBLE  4
++#define PR_ALIGN_OF_POINTER 4
++#define PR_ALIGN_OF_WORD    4
++
++#define PR_BYTES_PER_WORD_LOG2   2
++#define PR_BYTES_PER_DWORD_LOG2  3
++
+ #elif defined(__or1k__)
+ 
+ #undef  IS_LITTLE_ENDIAN
+Index: nspr/pr/include/md/_linux.h
+===================================================================
+--- nspr.orig/pr/include/md/_linux.h
++++ nspr/pr/include/md/_linux.h
+@@ -55,6 +55,8 @@
+ #define _PR_SI_ARCHITECTURE "avr32"
+ #elif defined(__m32r__)
+ #define _PR_SI_ARCHITECTURE "m32r"
++#elif defined(__nios2__)
++#define _PR_SI_ARCHITECTURE "nios2"
+ #elif defined(__or1k__)
+ #define _PR_SI_ARCHITECTURE "or1k"
+ #elif defined(__riscv) && (__riscv_xlen == 32)
+@@ -129,6 +131,18 @@ extern PRInt32 _PR_x86_64_AtomicSet(PRIn
+ #define _MD_ATOMIC_SET                _PR_x86_64_AtomicSet
+ #endif
+ 
++#if defined(__nios2__)
++#if defined(__GNUC__)
++/* Use GCC built-in functions */
++#define _PR_HAVE_ATOMIC_OPS
++#define _MD_INIT_ATOMIC()
++#define _MD_ATOMIC_INCREMENT(ptr) __sync_add_and_fetch(ptr, 1)
++#define _MD_ATOMIC_DECREMENT(ptr) __sync_sub_and_fetch(ptr, 1)
++#define _MD_ATOMIC_ADD(ptr, i) __sync_add_and_fetch(ptr, i)
++#define _MD_ATOMIC_SET(ptr, nv) __sync_lock_test_and_set(ptr, nv)
++#endif
++#endif
++
+ #if defined(__or1k__)
+ #if defined(__GNUC__)
+ /* Use GCC built-in functions */
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr/Makefile.in-remove-_BUILD_STRING-and-_BUILD_TIME.patch b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/Makefile.in-remove-_BUILD_STRING-and-_BUILD_TIME.patch
new file mode 100644
index 0000000..90fe45f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/Makefile.in-remove-_BUILD_STRING-and-_BUILD_TIME.patch
@@ -0,0 +1,103 @@
+From 8a592e4ead4ed6befe6044da3dd2dc7523c33905 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <Mingli.Yu@windriver.com>
+Date: Fri, 16 Nov 2018 13:52:49 +0800
+Subject: [PATCH] Makefile.in: remove _BUILD_STRING and _BUILD_TIME
+
+Remove _BUILD_STRING and _BUILD_TIME to avoid
+adding timestamp to _pl_bld.h which can result
+in adding timestamp in library file such as
+libnspr4.so.
+ $ readelf --wide --decompress --hex-dump=.rodata libnspr4.so
+ [snip]
+  0x00004000 32303138 2d31312d 31352030 353a3439 2018-11-15 05:49
+ [snip]
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
+---
+ lib/ds/Makefile.in        | 8 +-------
+ lib/libc/src/Makefile.in  | 8 +-------
+ lib/prstreams/Makefile.in | 8 +-------
+ pr/src/Makefile.in        | 8 +-------
+ 4 files changed, 4 insertions(+), 28 deletions(-)
+
+diff --git a/lib/ds/Makefile.in b/lib/ds/Makefile.in
+index e737791..b578476 100644
+--- a/lib/ds/Makefile.in
++++ b/lib/ds/Makefile.in
+@@ -114,13 +114,7 @@ GARBAGE += $(TINC)
+ 
+ $(TINC):
+ 	@$(MAKE_OBJDIR)
+-	@$(ECHO) '#define _BUILD_STRING "$(SH_DATE)"' > $(TINC)
+-	@if test ! -z "$(SH_NOW)"; then \
+-	    $(ECHO) '#define _BUILD_TIME $(SH_NOW)$(SUF)' >> $(TINC); \
+-	else \
+-	    true; \
+-	fi
+-	@$(ECHO) '#define _PRODUCTION "$(PROD)"' >> $(TINC)
++	@$(ECHO) '#define _PRODUCTION "$(PROD)"' > $(TINC)
+ 
+ 
+ $(OBJDIR)/plvrsion.$(OBJ_SUFFIX): plvrsion.c $(TINC)
+diff --git a/lib/libc/src/Makefile.in b/lib/libc/src/Makefile.in
+index e8a6d9f..978ed28 100644
+--- a/lib/libc/src/Makefile.in
++++ b/lib/libc/src/Makefile.in
+@@ -116,13 +116,7 @@ GARBAGE += $(TINC)
+ 
+ $(TINC):
+ 	@$(MAKE_OBJDIR)
+-	@$(ECHO) '#define _BUILD_STRING "$(SH_DATE)"' > $(TINC)
+-	@if test ! -z "$(SH_NOW)"; then \
+-	    $(ECHO) '#define _BUILD_TIME $(SH_NOW)$(SUF)' >> $(TINC); \
+-	else \
+-	    true; \
+-	fi
+-	@$(ECHO) '#define _PRODUCTION "$(PROD)"' >> $(TINC)
++	@$(ECHO) '#define _PRODUCTION "$(PROD)"' > $(TINC)
+ 
+ 
+ $(OBJDIR)/plvrsion.$(OBJ_SUFFIX): plvrsion.c $(TINC)
+diff --git a/lib/prstreams/Makefile.in b/lib/prstreams/Makefile.in
+index aeb2944..f318097 100644
+--- a/lib/prstreams/Makefile.in
++++ b/lib/prstreams/Makefile.in
+@@ -116,13 +116,7 @@ endif
+ 
+ $(TINC):
+ 	@$(MAKE_OBJDIR)
+-	@$(ECHO) '#define _BUILD_STRING "$(SH_DATE)"' > $(TINC)
+-	@if test ! -z "$(SH_NOW)"; then \
+-	    $(ECHO) '#define _BUILD_TIME $(SH_NOW)$(SUF)' >> $(TINC); \
+-	else \
+-	    true; \
+-	fi
+-	@$(ECHO) '#define _PRODUCTION "$(PROD)"' >> $(TINC)
++	@$(ECHO) '#define _PRODUCTION "$(PROD)"' > $(TINC)
+ 
+ 
+ $(OBJDIR)/plvrsion.$(OBJ_SUFFIX): plvrsion.c $(TINC)
+diff --git a/pr/src/Makefile.in b/pr/src/Makefile.in
+index 19c5a69..b4ac31c 100644
+--- a/pr/src/Makefile.in
++++ b/pr/src/Makefile.in
+@@ -326,13 +326,7 @@ GARBAGE += $(TINC)
+ 
+ $(TINC):
+ 	@$(MAKE_OBJDIR)
+-	@$(ECHO) '#define _BUILD_STRING "$(SH_DATE)"' > $(TINC)
+-	@if test ! -z "$(SH_NOW)"; then \
+-	    $(ECHO) '#define _BUILD_TIME $(SH_NOW)$(SUF)' >> $(TINC); \
+-	else \
+-	    true; \
+-	fi
+-	@$(ECHO) '#define _PRODUCTION "$(PROD)"' >> $(TINC)
++	@$(ECHO) '#define _PRODUCTION "$(PROD)"' > $(TINC)
+ 
+ 
+ $(OBJDIR)/prvrsion.$(OBJ_SUFFIX): prvrsion.c $(TINC)
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr/fix-build-on-x86_64.patch b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/fix-build-on-x86_64.patch
new file mode 100644
index 0000000..f12acc8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/fix-build-on-x86_64.patch
@@ -0,0 +1,52 @@
+Fix build failure on x86_64
+
+When the target_cpu is x86_64, we should assume that the pkg uses 64bit,
+only if USE_N32 is set, we can assume that the pkg uses 32bit. It used a
+opposite logic before.
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+
+Upstream-Status: Pending
+---
+ configure.in |   12 ++++++------
+ 1 files changed, 6 insertions(+), 6 deletions(-)
+
+Index: nspr/configure.in
+===================================================================
+--- nspr.orig/configure.in
++++ nspr/configure.in
+@@ -1875,28 +1875,24 @@ tools are selected during the Xcode/Deve
+         PR_MD_ASFILES=os_Linux_ia64.s
+         ;;
+     x86_64)
+-        if test -n "$USE_64"; then
+-            PR_MD_ASFILES=os_Linux_x86_64.s
+-        elif test -n "$USE_X32"; then
++        if test -n "$USE_X32"; then
++            AC_DEFINE(i386)
+             PR_MD_ASFILES=os_Linux_x86_64.s
+             CC="$CC -mx32"
+             CXX="$CXX -mx32"
+         else
+-            AC_DEFINE(i386)
+-            PR_MD_ASFILES=os_Linux_x86.s
+-            CC="$CC -m32"
+-            CXX="$CXX -m32"
++            PR_MD_ASFILES=os_Linux_x86_64.s
+         fi
+         ;;
+     ppc|powerpc)
+         PR_MD_ASFILES=os_Linux_ppc.s
+         ;;
+     powerpc64)
+-        if test -n "$USE_64"; then
++        if test -n "$USE_N32"; then
++            PR_MD_ASFILES=os_Linux_ppc.s
++        else
+             CC="$CC -m64"
+             CXX="$CXX -m64"
+-        else
+-            PR_MD_ASFILES=os_Linux_ppc.s
+         fi
+         ;;
+     esac    
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr/nspr.pc.in b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/nspr.pc.in
new file mode 100644
index 0000000..1f15d19
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/nspr.pc.in
@@ -0,0 +1,11 @@
+os_libs=-lpthread -ldl
+prefix=OEPREFIX
+exec_prefix=OEEXECPREFIX
+libdir=OELIBDIR
+includedir=OEINCDIR
+
+Name: NSPR
+Description: The Netscape Portable Runtime
+Version: NSPRVERSION
+Libs: -L${libdir} -lplds4 -lplc4 -lnspr4 -lpthread -ldl
+Cflags: -I${includedir}/nspr
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr/remove-rpath-from-tests.patch b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/remove-rpath-from-tests.patch
new file mode 100644
index 0000000..7ba59ed
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/remove-rpath-from-tests.patch
@@ -0,0 +1,26 @@
+Author: Andrei Gherzan <andrei@gherzan.ro>
+Date:   Thu Feb 9 00:03:38 2012 +0200
+
+Avoid QA warnings by removing hardcoded rpath from binaries.
+
+[...]
+WARNING: QA Issue: package nspr contains bad RPATH {builddir}/tmp/work/armv5te-poky-linux-gnueabi/nspr-4.8.9-r1/nspr-4.8.9/mozilla/nsprpub/pr/tests/../../dist/lib
+in file {builddir}/tmp/work/armv5te-poky-linux-gnueabi/nspr-4.8.9-r1/packages-split/nspr/usr/lib/nspr/tests/multiwait
+[...]
+
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+Upstream-Status: Pending
+
+Index: nspr/pr/tests/Makefile.in
+===================================================================
+--- nspr.orig/pr/tests/Makefile.in
++++ nspr/pr/tests/Makefile.in
+@@ -316,7 +316,7 @@ ifeq ($(OS_ARCH), SunOS)
+ endif # SunOS
+ 
+ ifeq (,$(filter-out Linux GNU GNU_%,$(OS_ARCH)))
+-    LDOPTS += -Xlinker -rpath $(ABSOLUTE_LIB_DIR)
++    LDOPTS += -Xlinker
+     ifeq ($(USE_PTHREADS),1)
+         EXTRA_LIBS = -lpthread
+     endif
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr/remove-srcdir-from-configure-in.patch b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/remove-srcdir-from-configure-in.patch
new file mode 100644
index 0000000..bde715c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr/remove-srcdir-from-configure-in.patch
@@ -0,0 +1,19 @@
+the $srcdir is not defined at the time of gnu-configurize.
+
+Upstream-Status: Inappropriate [OE-Core specific]
+
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+
+Index: nspr/configure.in
+===================================================================
+--- nspr.orig/configure.in
++++ nspr/configure.in
+@@ -8,7 +8,7 @@ AC_PREREQ(2.61)
+ AC_INIT
+ AC_CONFIG_SRCDIR([pr/include/nspr.h])
+ 
+-AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf)
++AC_CONFIG_AUX_DIR(build/autoconf)
+ AC_CANONICAL_TARGET
+ 
+ dnl ========================================================
diff --git a/meta-openembedded/meta-oe/recipes-support/nspr/nspr_4.25.bb b/meta-openembedded/meta-oe/recipes-support/nspr/nspr_4.25.bb
new file mode 100644
index 0000000..1de26e1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nspr/nspr_4.25.bb
@@ -0,0 +1,197 @@
+SUMMARY = "Netscape Portable Runtime Library"
+HOMEPAGE =  "http://www.mozilla.org/projects/nspr/"
+LICENSE = "GPL-2.0 | MPL-2.0 | LGPL-2.1"
+LIC_FILES_CHKSUM = "file://configure.in;beginline=3;endline=6;md5=90c2fdee38e45d6302abcfe475c8b5c5 \
+                    file://Makefile.in;beginline=4;endline=38;md5=beda1dbb98a515f557d3e58ef06bca99"
+SECTION = "libs/network"
+
+SRC_URI = "http://ftp.mozilla.org/pub/nspr/releases/v${PV}/src/nspr-${PV}.tar.gz \
+           file://remove-rpath-from-tests.patch \
+           file://fix-build-on-x86_64.patch \
+           file://remove-srcdir-from-configure-in.patch \
+           file://0002-Add-nios2-support.patch \
+           file://0001-md-Fix-build-with-musl.patch \
+           file://Makefile.in-remove-_BUILD_STRING-and-_BUILD_TIME.patch \
+           file://nspr.pc.in \
+"
+
+CACHED_CONFIGUREVARS_append_libc-musl = " CFLAGS='${CFLAGS} -D_PR_POLL_AVAILABLE \
+                                          -D_PR_HAVE_OFF64_T -D_PR_INET6 -D_PR_HAVE_INET_NTOP \
+                                          -D_PR_HAVE_GETHOSTBYNAME2 -D_PR_HAVE_GETADDRINFO \
+                                          -D_PR_INET6_PROBE -DNO_DLOPEN_NULL'"
+
+UPSTREAM_CHECK_URI = "http://ftp.mozilla.org/pub/nspr/releases/"
+UPSTREAM_CHECK_REGEX = "v(?P<pver>\d+(\.\d+)+)/"
+
+SRC_URI[md5sum] = "4ca4d75a424f30fcdc766296bb103d17"
+SRC_URI[sha256sum] = "0bc309be21f91da4474c56df90415101c7f0c7c7cab2943cd943cd7896985256"
+
+CVE_PRODUCT = "netscape_portable_runtime"
+
+S = "${WORKDIR}/nspr-${PV}/nspr"
+
+RDEPENDS_${PN}-dev += "perl"
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+TESTS = " \
+    accept \
+    acceptread \
+    acceptreademu \
+    affinity \
+    alarm \
+    anonfm \
+    atomic \
+    attach \
+    bigfile \
+    cleanup \
+    cltsrv  \
+    concur \
+    cvar \
+    cvar2 \
+    dlltest \
+    dtoa \
+    errcodes \
+    exit \
+    fdcach \
+    fileio \
+    foreign \
+    formattm \
+    fsync \
+    gethost \
+    getproto \
+    i2l \
+    initclk \
+    inrval \
+    instrumt \
+    intrio \
+    intrupt \
+    io_timeout \
+    ioconthr \
+    join \
+    joinkk \
+    joinku \
+    joinuk \
+    joinuu \
+    layer \
+    lazyinit \
+    libfilename \
+    lltest \
+    lock \
+    lockfile \
+    logfile \
+    logger \
+    many_cv \
+    multiwait \
+    nameshm1 \
+    nblayer \
+    nonblock \
+    ntioto \
+    ntoh \
+    op_2long \
+    op_excl \
+    op_filnf \
+    op_filok \
+    op_nofil \
+    parent \
+    parsetm \
+    peek \
+    perf \
+    pipeping \
+    pipeping2 \
+    pipeself \
+    poll_nm \
+    poll_to \
+    pollable \
+    prftest \
+    primblok \
+    provider \
+    prpollml \
+    ranfile \
+    randseed \
+    reinit \
+    rwlocktest \
+    sel_spd \
+    selct_er \
+    selct_nm \
+    selct_to \
+    selintr \
+    sema \
+    semaerr \
+    semaping \
+    sendzlf \
+    server_test \
+    servr_kk \
+    servr_uk \
+    servr_ku \
+    servr_uu \
+    short_thread \
+    sigpipe \
+    socket \
+    sockopt \
+    sockping \
+    sprintf \
+    stack \
+    stdio \
+    str2addr \
+    strod \
+    switch \
+    system \
+    testbit \
+    testfile \
+    threads \
+    timemac \
+    timetest \
+    tpd \
+    udpsrv \
+    vercheck \
+    version \
+    writev \
+    xnotify \
+    zerolen"
+
+inherit autotools multilib_script
+
+MULTILIB_SCRIPTS = "${PN}-dev:${bindir}/nspr-config"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+# Do not install nspr in usr/include, but in usr/include/nspr, the
+# preferred path upstream.
+EXTRA_OECONF += "--includedir=${includedir}/nspr"
+
+do_compile_prepend() {
+	oe_runmake CROSS_COMPILE=1 CFLAGS="-DXP_UNIX ${BUILD_CFLAGS}" LDFLAGS="" CC="${BUILD_CC}" -C config export
+}
+
+do_compile_append() {
+	oe_runmake -C pr/tests
+}
+
+do_install_append() {
+    install -D ${WORKDIR}/nspr.pc.in ${D}${libdir}/pkgconfig/nspr.pc
+    sed -i  \
+    -e 's:NSPRVERSION:${PV}:g' \
+    -e 's:OEPREFIX:${prefix}:g' \
+    -e 's:OELIBDIR:${libdir}:g' \
+    -e 's:OEINCDIR:${includedir}:g' \
+    -e 's:OEEXECPREFIX:${exec_prefix}:g' \
+    ${D}${libdir}/pkgconfig/nspr.pc
+
+    mkdir -p ${D}${libdir}/nspr/tests
+    install -m 0755 ${S}/pr/tests/runtests.pl ${D}${libdir}/nspr/tests
+    install -m 0755 ${S}/pr/tests/runtests.sh ${D}${libdir}/nspr/tests
+    cd ${B}/pr/tests
+    install -m 0755 ${TESTS} ${D}${libdir}/nspr/tests
+
+    # delete compile-et.pl and perr.properties from ${bindir} because these are
+    # only used to generate prerr.c and prerr.h files from prerr.et at compile
+    # time
+    rm ${D}${bindir}/compile-et.pl ${D}${bindir}/prerr.properties
+}
+
+FILES_${PN} = "${libdir}/lib*.so"
+FILES_${PN}-dev = "${bindir}/* ${libdir}/nspr/tests/* ${libdir}/pkgconfig \
+                ${includedir}/* ${datadir}/aclocal/* "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch
new file mode 100644
index 0000000..c380c14
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch
@@ -0,0 +1,52 @@
+From 5595e9651aca39af945931c73eb524a0f8bd130d Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Wed, 18 Dec 2019 12:29:50 +0100
+Subject: [PATCH] freebl: add a configure option to disable ARM HW crypto
+
+Not all current hardware supports it, particularly anything
+prior to armv8 does not.
+
+Upstream-Status: Pending
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ nss/lib/freebl/Makefile | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/nss/lib/freebl/Makefile
++++ b/nss/lib/freebl/Makefile
+@@ -125,6 +125,9 @@ else
+         DEFINES += -DNSS_X86
+ endif
+ endif
++
++ifdef NSS_USE_ARM_HW_CRYPTO
++    DEFINES += -DNSS_USE_ARM_HW_CRYPTO
+ ifeq ($(CPU_ARCH),aarch64)
+     DEFINES += -DUSE_HW_AES
+     EXTRA_SRCS += aes-armv8.c gcm-aarch64.c
+@@ -146,6 +149,7 @@ ifeq ($(CPU_ARCH),arm)
+         endif
+     endif
+ endif
++endif
+ 
+ ifeq ($(OS_TARGET),OSF1)
+     DEFINES += -DMP_ASSEMBLY_MULTIPLY -DMP_NO_MP_WORD
+--- a/nss/lib/freebl/gcm.c
++++ b/nss/lib/freebl/gcm.c
+@@ -17,6 +17,7 @@
+ 
+ #include <limits.h>
+ 
++#ifdef NSS_USE_ARM_HW_CRYPTO
+ /* old gcc doesn't support some poly64x2_t intrinsic */
+ #if defined(__aarch64__) && defined(IS_LITTLE_ENDIAN) && \
+     (defined(__clang__) || defined(__GNUC__) && __GNUC__ > 6)
+@@ -25,6 +26,7 @@
+ /* We don't test on big endian platform, so disable this on big endian. */
+ #define USE_ARM_GCM
+ #endif
++#endif
+ 
+ /* Forward declarations */
+ SECStatus gcm_HashInit_hw(gcmHashContext *ghash);
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-nss-fix-support-cross-compiling.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-nss-fix-support-cross-compiling.patch
new file mode 100644
index 0000000..d540339
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/0001-nss-fix-support-cross-compiling.patch
@@ -0,0 +1,48 @@
+From 0cf47ee432cc26a706864fcc09b2c3adc342a679 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Wed, 22 Feb 2017 11:36:11 +0200
+Subject: [PATCH] nss: fix support cross compiling
+
+Let some make variables be assigned from outside makefile.
+
+Upstream-Status: Inappropriate [configuration]
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ nss/coreconf/arch.mk    | 2 +-
+ nss/lib/freebl/Makefile | 6 ++++++
+ 2 files changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/nss/coreconf/arch.mk b/nss/coreconf/arch.mk
+index 06c276f..9c1eb51 100644
+--- a/nss/coreconf/arch.mk
++++ b/nss/coreconf/arch.mk
+@@ -30,7 +30,7 @@ OS_TEST := $(shell uname -m)
+ ifeq ($(OS_TEST),i86pc)
+     OS_RELEASE := $(shell uname -r)_$(OS_TEST)
+ else
+-    OS_RELEASE := $(shell uname -r)
++    OS_RELEASE ?= $(shell uname -r)
+ endif
+ 
+ #
+diff --git a/nss/lib/freebl/Makefile b/nss/lib/freebl/Makefile
+index 0ce1425..ebeb411 100644
+--- a/nss/lib/freebl/Makefile
++++ b/nss/lib/freebl/Makefile
+@@ -36,6 +36,12 @@ ifdef USE_64
+ 	DEFINES += -DNSS_USE_64
+ endif
+ 
++ifeq ($(OS_TEST),mips)
++ifndef USE_64
++       DEFINES += -DNS_PTR_LE_32
++endif
++endif
++
+ ifdef USE_ABI32_FPU
+ 	DEFINES += -DNSS_USE_ABI32_FPU
+ endif
+-- 
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/blank-cert9.db b/meta-openembedded/meta-oe/recipes-support/nss/nss/blank-cert9.db
new file mode 100644
index 0000000..7d4bcf2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/blank-cert9.db
Binary files differ
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/blank-key4.db b/meta-openembedded/meta-oe/recipes-support/nss/nss/blank-key4.db
new file mode 100644
index 0000000..d47f08d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/blank-key4.db
Binary files differ
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/disable-Wvarargs-with-clang.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/disable-Wvarargs-with-clang.patch
new file mode 100644
index 0000000..de812d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/disable-Wvarargs-with-clang.patch
@@ -0,0 +1,33 @@
+clang 3.9 add this warning to rightly flag undefined
+behavior, we relegate this to be just a warning instead
+of error and keep the behavior as it was. Right fix would
+be to not pass enum to the function with variadic arguments
+as last named argument
+
+Fixes errors like
+ocsp.c:2220:22: error: passing an object that undergoes default argument promotion to 'va_start' has undefined behavior [-Werror,-Wvarargs]
+        va_start(ap, responseType0);
+                     ^
+ocsp.c:2200:43: note: parameter of type 'SECOidTag' is declared here
+                                SECOidTag responseType0, ...)
+
+see
+https://www.securecoding.cert.org/confluence/display/cplusplus/EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start
+for more details
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: nss-3.37.1/nss/coreconf/Werror.mk
+===================================================================
+--- nss-3.37.1.orig/nss/coreconf/Werror.mk
++++ nss-3.37.1/nss/coreconf/Werror.mk
+@@ -56,7 +56,7 @@ ifndef WARNING_CFLAGS
+     ifdef CC_IS_CLANG
+       # -Qunused-arguments : clang objects to arguments that it doesn't understand
+       #    and fixing this would require rearchitecture
+-      WARNING_CFLAGS += -Qunused-arguments
++      WARNING_CFLAGS += -Qunused-arguments -Wno-error=varargs
+       # -Wno-parentheses-equality : because clang warns about macro expansions
+       WARNING_CFLAGS += $(call disable_warning,parentheses-equality)
+       ifdef BUILD_OPT
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-fix-incorrect-shebang-of-perl.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-fix-incorrect-shebang-of-perl.patch
new file mode 100644
index 0000000..547594d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-fix-incorrect-shebang-of-perl.patch
@@ -0,0 +1,110 @@
+nss: fix incorrect shebang of perl
+
+Replace incorrect shebang of perl with `#!/usr/bin/env perl'.
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Upstream-Status: Pending
+---
+ nss/cmd/smimetools/smime  | 2 +-
+ nss/coreconf/cpdist.pl    | 2 +-
+ nss/coreconf/import.pl    | 2 +-
+ nss/coreconf/jniregen.pl  | 2 +-
+ nss/coreconf/outofdate.pl | 2 +-
+ nss/coreconf/release.pl   | 2 +-
+ nss/coreconf/version.pl   | 2 +-
+ nss/tests/clean_tbx       | 2 +-
+ nss/tests/path_uniq       | 2 +-
+ 9 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/nss/cmd/smimetools/smime b/nss/cmd/smimetools/smime
+--- a/nss/cmd/smimetools/smime
++++ b/nss/cmd/smimetools/smime
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl
++#!/usr/bin/env perl
+ 
+ # 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
+diff --git a/nss/coreconf/cpdist.pl b/nss/coreconf/cpdist.pl
+index 800edfb..652187f 100755
+--- a/nss/coreconf/cpdist.pl
++++ b/nss/coreconf/cpdist.pl
+@@ -1,4 +1,4 @@
+-#! /usr/local/bin/perl
++#!/usr/bin/env perl
+ #
+ # 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
+diff --git a/nss/coreconf/import.pl b/nss/coreconf/import.pl
+index dd2d177..428eaa5 100755
+--- a/nss/coreconf/import.pl
++++ b/nss/coreconf/import.pl
+@@ -1,4 +1,4 @@
+-#! /usr/local/bin/perl
++#!/usr/bin/env perl
+ #
+ # 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
+diff --git a/nss/coreconf/jniregen.pl b/nss/coreconf/jniregen.pl
+index 2039180..5f4f69c 100755
+--- a/nss/coreconf/jniregen.pl
++++ b/nss/coreconf/jniregen.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl
++#!/usr/bin/env perl
+ #
+ # 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
+diff --git a/nss/coreconf/outofdate.pl b/nss/coreconf/outofdate.pl
+index 33d80bb..01fc097 100755
+--- a/nss/coreconf/outofdate.pl
++++ b/nss/coreconf/outofdate.pl
+@@ -1,4 +1,4 @@
+-#!/usr/local/bin/perl
++#!/usr/bin/env perl
+ #
+ # 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
+diff --git a/nss/coreconf/release.pl b/nss/coreconf/release.pl
+index 7cde19d..b5df2f6 100755
+--- a/nss/coreconf/release.pl
++++ b/nss/coreconf/release.pl
+@@ -1,4 +1,4 @@
+-#! /usr/local/bin/perl
++#!/usr/bin/env perl
+ #
+ # 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
+diff --git a/nss/coreconf/version.pl b/nss/coreconf/version.pl
+index d2a4942..79359fe 100644
+--- a/nss/coreconf/version.pl
++++ b/nss/coreconf/version.pl
+@@ -1,4 +1,4 @@
+-#!/usr/sbin/perl
++#!/usr/bin/env perl
+ #
+ # 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
+diff --git a/nss/tests/clean_tbx b/nss/tests/clean_tbx
+index 4de9555..a7def9f 100755
+--- a/nss/tests/clean_tbx
++++ b/nss/tests/clean_tbx
+@@ -1,4 +1,4 @@
+-#! /bin/perl
++#!/usr/bin/env perl
+ 
+ #######################################################################
+ #
+diff --git a/nss/tests/path_uniq b/nss/tests/path_uniq
+index f29f60a..08fbffa 100755
+--- a/nss/tests/path_uniq
++++ b/nss/tests/path_uniq
+@@ -1,4 +1,4 @@
+-#! /bin/perl
++#!/usr/bin/env perl
+ 
+ ########################################################################
+ #
+-- 
+1.8.1.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-fix-nsinstall-build.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-fix-nsinstall-build.patch
new file mode 100644
index 0000000..43c09d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-fix-nsinstall-build.patch
@@ -0,0 +1,36 @@
+Fix nss multilib build on openSUSE 11.x 32bit
+
+While building lib64-nss on openSUSE 11.x 32bit, the nsinstall will
+fail with error:
+
+* nsinstall.c:1:0: sorry, unimplemented: 64-bit mode not compiled
+
+It caused by the '-m64' option which passed to host gcc.
+
+The nsinstall was built first while nss starting to build, it only runs
+on host to install built files, it doesn't need any cross-compling or
+multilib build options. Just clean the ARCHFLAG and LDFLAGS to fix this
+error.
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+===================================================
+Index: nss-3.24/nss/coreconf/nsinstall/Makefile
+===================================================================
+--- nss-3.24.orig/nss/coreconf/nsinstall/Makefile
++++ nss-3.24/nss/coreconf/nsinstall/Makefile
+@@ -18,6 +18,13 @@ INTERNAL_TOOLS  = 1
+ 
+ include $(DEPTH)/coreconf/config.mk
+ 
++# nsinstall is unfit for cross-compiling/multilib-build since it was
++# always run on local host to install built files. This change intends
++# to clean the '-m64' from ARCHFLAG and LDFLAGS.
++ARCHFLAG =
++LDFLAGS =
++# CFLAGS =
++
+ ifeq (,$(filter-out OS2 WIN%,$(OS_TARGET)))
+ PROGRAM		=
+ else
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-no-rpath-for-cross-compiling.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-no-rpath-for-cross-compiling.patch
new file mode 100644
index 0000000..7661dc9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss-no-rpath-for-cross-compiling.patch
@@ -0,0 +1,26 @@
+nss:no rpath for cross compiling
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Upstream-Status: Inappropriate [configuration]
+---
+ nss/cmd/platlibs.mk | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/nss/cmd/platlibs.mk b/nss/cmd/platlibs.mk
+--- a/nss/cmd/platlibs.mk
++++ b/nss/cmd/platlibs.mk
+@@ -18,9 +18,9 @@ endif
+ 
+ ifeq ($(OS_ARCH), Linux)
+ ifeq ($(USE_64), 1)
+-EXTRA_SHARED_LIBS += -Wl,-rpath,'$$ORIGIN/../lib64:/opt/sun/private/lib64:$$ORIGIN/../lib'
++#EXTRA_SHARED_LIBS += -Wl,-rpath,'$$ORIGIN/../lib64:/opt/sun/private/lib64:$$ORIGIN/../lib'
+ else
+-EXTRA_SHARED_LIBS += -Wl,-rpath,'$$ORIGIN/../lib:/opt/sun/private/lib'
++#EXTRA_SHARED_LIBS += -Wl,-rpath,'$$ORIGIN/../lib:/opt/sun/private/lib'
+ endif
+ endif
+ 
+-- 
+1.8.1.2
+
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/nss.pc.in b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss.pc.in
new file mode 100644
index 0000000..402b4ec
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/nss.pc.in
@@ -0,0 +1,11 @@
+prefix=OEPREFIX
+exec_prefix=OEEXECPREFIX
+libdir=OELIBDIR
+includedir=OEINCDIR
+
+Name: NSS
+Description: Network Security Services
+Version: %NSS_VERSION%
+Requires: nspr >= %NSPR_VERSION%
+Libs: -L${libdir} -lssl3 -lsmime3 -lnss3 -lsoftokn3 -lnssutil3
+Cflags: -IOEINCDIR
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/pqg.c-ULL_addend.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/pqg.c-ULL_addend.patch
new file mode 100644
index 0000000..3a817fa
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/pqg.c-ULL_addend.patch
@@ -0,0 +1,23 @@
+nss does not build on mips with clang because wrong types are used?
+
+pqg.c:339:16: error: comparison of constant 18446744073709551615 with expression of type 'unsigned long' is always true [-Werror,-Wtautological-constant-out-of-range-compare]
+     if (addend < MP_DIGIT_MAX) {
+       ~~~~~~ ^ ~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+Index: nss-3.37.1/nss/lib/freebl/pqg.c
+===================================================================
+--- nss-3.37.1.orig/nss/lib/freebl/pqg.c
++++ nss-3.37.1/nss/lib/freebl/pqg.c
+@@ -326,8 +326,8 @@ generate_h_candidate(SECItem *hit, mp_in
+ 
+ static SECStatus
+ addToSeed(const SECItem *seed,
+-          unsigned long addend,
+-          int seedlen, /* g in 186-1 */
++          unsigned long long  addend,
++          int                 seedlen, /* g in 186-1 */
+           SECItem *seedout)
+ {
+     mp_int s, sum, modulus, tmp;
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/riscv.patch b/meta-openembedded/meta-oe/recipes-support/nss/nss/riscv.patch
new file mode 100644
index 0000000..aef91a7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/riscv.patch
@@ -0,0 +1,36 @@
+Enable uint128 on riscv64
+
+Fixes
+| verified/kremlin/kremlib/dist/minimal/LowStar_Endianness.h:29:37: error: 'load128_be' declared 'static' but never defined [-Werror=unused-function]
+|    29 | inline static FStar_UInt128_uint128 load128_be(uint8_t *x0);
+|       |                                     ^~~~~~~~~~
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+--- a/nss/lib/freebl/verified/kremlin/include/kremlin/internal/types.h
++++ b/nss/lib/freebl/verified/kremlin/include/kremlin/internal/types.h
+@@ -56,7 +56,8 @@ typedef const char *Prims_string;
+ #include <emmintrin.h>
+ typedef __m128i FStar_UInt128_uint128;
+ #elif !defined(KRML_VERIFIED_UINT128) && !defined(_MSC_VER) && \
+-    (defined(__x86_64__) || defined(__x86_64) || defined(__aarch64__))
++    (defined(__x86_64__) || defined(__x86_64) || defined(__aarch64__) || \
++     (defined(__riscv) && __riscv_xlen == 64))
+ typedef unsigned __int128 FStar_UInt128_uint128;
+ #else
+ typedef struct FStar_UInt128_uint128_s {
+--- a/nss/lib/freebl/verified/kremlin/kremlib/dist/minimal/fstar_uint128_gcc64.h
++++ b/nss/lib/freebl/verified/kremlin/kremlib/dist/minimal/fstar_uint128_gcc64.h
+@@ -23,9 +23,10 @@
+ #include "FStar_UInt128.h"
+ #include "FStar_UInt_8_16_32_64.h"
+ #include "LowStar_Endianness.h"
+-
++#include <stdint.h>
+ #if !defined(KRML_VERIFIED_UINT128) && !defined(_MSC_VER) && \
+-    (defined(__x86_64__) || defined(__x86_64) || defined(__aarch64__))
++    (defined(__x86_64__) || defined(__x86_64) || defined(__aarch64__) || \
++     (defined(__riscv) && __riscv_xlen == 64))
+ 
+ /* GCC + using native unsigned __int128 support */
+ 
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/signlibs.sh b/meta-openembedded/meta-oe/recipes-support/nss/nss/signlibs.sh
new file mode 100644
index 0000000..a74e499
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/signlibs.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# signlibs.sh
+#
+# (c)2010 Wind River Systems, Inc.
+#
+# regenerates the .chk files for the NSS libraries that require it
+# since the ones that are built have incorrect checksums that were
+# calculated on the host where they really need to be done on the
+# target
+
+CHK_FILES=`ls /lib*/*.chk /usr/lib*/*.chk 2>/dev/null`
+SIGN_BINARY=`which shlibsign`
+for I in $CHK_FILES
+do
+       DN=`dirname $I`
+       BN=`basename $I .chk`
+       FN=$DN/$BN.so
+       $SIGN_BINARY -i $FN
+done
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss/system-pkcs11.txt b/meta-openembedded/meta-oe/recipes-support/nss/nss/system-pkcs11.txt
new file mode 100644
index 0000000..1a264e9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss/system-pkcs11.txt
@@ -0,0 +1,5 @@
+library=
+name=NSS Internal PKCS #11 Module
+parameters=configdir='sql:/etc/pki/nssdb' certPrefix='' keyPrefix='' secmod='secmod.db' flags= updatedir='' updateCertPrefix='' updateKeyPrefix='' updateid='' updateTokenDescription='' 
+NSS=Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={slotFlags=[ECC,RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512] askpw=any timeout=30})
+
diff --git a/meta-openembedded/meta-oe/recipes-support/nss/nss_3.51.1.bb b/meta-openembedded/meta-oe/recipes-support/nss/nss_3.51.1.bb
new file mode 100644
index 0000000..0011240
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/nss/nss_3.51.1.bb
@@ -0,0 +1,274 @@
+SUMMARY = "Mozilla's SSL and TLS implementation"
+DESCRIPTION = "Network Security Services (NSS) is a set of libraries \
+designed to support cross-platform development of \
+security-enabled client and server applications. \
+Applications built with NSS can support SSL v2 and v3, \
+TLS, PKCS 5, PKCS 7, PKCS 11, PKCS 12, S/MIME, X.509 \
+v3 certificates, and other security standards."
+HOMEPAGE = "http://www.mozilla.org/projects/security/pki/nss/"
+SECTION = "libs"
+
+DEPENDS = "sqlite3 nspr zlib nss-native"
+DEPENDS_class-native = "sqlite3-native nspr-native zlib-native"
+
+LICENSE = "MPL-2.0 | (MPL-2.0 & GPL-2.0+) | (MPL-2.0 & LGPL-2.1+)"
+
+LIC_FILES_CHKSUM = "file://nss/COPYING;md5=3b1e88e1b9c0b5a4b2881d46cce06a18 \
+                    file://nss/lib/freebl/mpi/doc/LICENSE;md5=491f158d09d948466afce85d6f1fe18f \
+                    file://nss/lib/freebl/mpi/doc/LICENSE-MPL;md5=5d425c8f3157dbf212db2ec53d9e5132"
+
+VERSION_DIR = "${@d.getVar('BP').upper().replace('-', '_').replace('.', '_') + '_RTM'}"
+
+SRC_URI = "http://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/${VERSION_DIR}/src/${BP}.tar.gz \
+           file://nss.pc.in \
+           file://signlibs.sh \
+           file://0001-nss-fix-support-cross-compiling.patch \
+           file://nss-no-rpath-for-cross-compiling.patch \
+           file://nss-fix-incorrect-shebang-of-perl.patch \
+           file://disable-Wvarargs-with-clang.patch \
+           file://pqg.c-ULL_addend.patch \
+           file://blank-cert9.db \
+           file://blank-key4.db \
+           file://system-pkcs11.txt \
+           file://nss-fix-nsinstall-build.patch \
+           file://0001-freebl-add-a-configure-option-to-disable-ARM-HW-cryp.patch \
+           file://riscv.patch \
+           "
+
+SRC_URI[md5sum] = "6acaf1ddff69306ae30a908881c6f233"
+SRC_URI[sha256sum] = "085c5eaceef040eddea639e2e068e70f0e368f840327a678ef74ae3d6c15ca78"
+
+UPSTREAM_CHECK_URI = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_Releases"
+UPSTREAM_CHECK_REGEX = "NSS_(?P<pver>.+)_release_notes"
+
+inherit siteinfo
+
+TD = "${S}/tentative-dist"
+TDS = "${S}/tentative-dist-staging"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_configure_prepend_libc-musl () {
+    sed -i -e '/-DHAVE_SYS_CDEFS_H/d' ${S}/nss/lib/dbm/config/config.mk
+}
+
+do_compile_prepend_class-native() {
+    export NSPR_INCLUDE_DIR=${STAGING_INCDIR_NATIVE}/nspr
+    export NSPR_LIB_DIR=${STAGING_LIBDIR_NATIVE}
+    export NSS_ENABLE_WERROR=0
+}
+
+do_compile_prepend_class-nativesdk() {
+    export LDFLAGS=""
+}
+
+do_compile_prepend_class-native() {
+    # Need to set RPATH so that chrpath will do its job correctly
+    RPATH="-Wl,-rpath-link,${STAGING_LIBDIR_NATIVE} -Wl,-rpath-link,${STAGING_BASE_LIBDIR_NATIVE} -Wl,-rpath,${STAGING_LIBDIR_NATIVE} -Wl,-rpath,${STAGING_BASE_LIBDIR_NATIVE}"
+}
+
+do_compile() {
+    export NSPR_INCLUDE_DIR=${STAGING_INCDIR}/nspr
+
+    export CROSS_COMPILE=1
+    export NATIVE_CC="${BUILD_CC}"
+    # Additional defines needed on Centos 7
+    export NATIVE_FLAGS="${BUILD_CFLAGS} -DLINUX -Dlinux"
+    export BUILD_OPT=1
+
+    export FREEBL_NO_DEPEND=1
+    export FREEBL_LOWHASH=1
+
+    export LIBDIR=${libdir}
+    export MOZILLA_CLIENT=1
+    export NS_USE_GCC=1
+    export NSS_USE_SYSTEM_SQLITE=1
+    export NSS_ENABLE_ECC=1
+
+    ${@bb.utils.contains("TUNE_FEATURES", "crypto", "export NSS_USE_ARM_HW_CRYPTO=1", "", d)}
+
+    export OS_RELEASE=3.4
+    export OS_TARGET=Linux
+    export OS_ARCH=Linux
+
+    if [ "${TARGET_ARCH}" = "powerpc" ]; then
+        OS_TEST=ppc
+    elif [ "${TARGET_ARCH}" = "powerpc64" ]; then
+        OS_TEST=ppc64
+    elif [ "${TARGET_ARCH}" = "mips" -o "${TARGET_ARCH}" = "mipsel" -o "${TARGET_ARCH}" = "mips64" -o "${TARGET_ARCH}" = "mips64el" ]; then
+        OS_TEST=mips
+    elif [ "${TARGET_ARCH}" = "aarch64_be" ]; then
+        OS_TEST="aarch64"
+    else
+        OS_TEST="${TARGET_ARCH}"
+    fi
+
+    if [ "${SITEINFO_BITS}" = "64" ]; then
+        export USE_64=1
+    elif [ "${TARGET_ARCH}" = "x86_64" -a "${SITEINFO_BITS}" = "32" ]; then
+        export USE_X32=1
+    fi
+
+    export NSS_DISABLE_GTESTS=1
+
+    # We can modify CC in the environment, but if we set it via an
+    # argument to make, nsinstall, a host program, will also build with it!
+    #
+    # nss pretty much does its own thing with CFLAGS, so we put them into CC.
+    # Optimization will get clobbered, but most of the stuff will survive.
+    # The motivation for this is to point to the correct place for debug
+    # source files and CFLAGS does that.  Nothing uses CCC.
+    #
+    export CC="${CC} ${CFLAGS}"
+    make -C ./nss CCC="${CXX} -g" \
+        OS_TEST=${OS_TEST} \
+        RPATH="${RPATH}"
+}
+
+do_compile[vardepsexclude] += "SITEINFO_BITS"
+
+do_install_prepend_class-nativesdk() {
+    export LDFLAGS=""
+}
+
+do_install() {
+    export CROSS_COMPILE=1
+    export NATIVE_CC="${BUILD_CC}"
+    export BUILD_OPT=1
+
+    export FREEBL_NO_DEPEND=1
+
+    export LIBDIR=${libdir}
+    export MOZILLA_CLIENT=1
+    export NS_USE_GCC=1
+    export NSS_USE_SYSTEM_SQLITE=1
+    export NSS_ENABLE_ECC=1
+
+    export OS_RELEASE=3.4
+    export OS_TARGET=Linux
+    export OS_ARCH=Linux
+
+    if [ "${TARGET_ARCH}" = "powerpc" ]; then
+        OS_TEST=ppc
+    elif [ "${TARGET_ARCH}" = "powerpc64" ]; then
+        OS_TEST=ppc64
+    elif [ "${TARGET_ARCH}" = "mips" -o "${TARGET_ARCH}" = "mipsel" -o "${TARGET_ARCH}" = "mips64" -o "${TARGET_ARCH}" = "mips64el" ]; then
+        OS_TEST=mips
+    elif [ "${TARGET_ARCH}" = "aarch64_be" ]; then
+        CPU_ARCH=aarch64
+        OS_TEST="aarch64"
+    else
+        OS_TEST="${TARGET_ARCH}"
+    fi
+    if [ "${SITEINFO_BITS}" = "64" ]; then
+        export USE_64=1
+    elif [ "${TARGET_ARCH}" = "x86_64" -a "${SITEINFO_BITS}" = "32" ]; then
+        export USE_X32=1
+    fi
+
+    export NSS_DISABLE_GTESTS=1
+
+    make -C ./nss \
+        CCC="${CXX}" \
+        OS_TEST=${OS_TEST} \
+        SOURCE_LIB_DIR="${TD}/${libdir}" \
+        SOURCE_BIN_DIR="${TD}/${bindir}" \
+        install
+
+    install -d ${D}/${libdir}/
+    for file in ${S}/dist/*.OBJ/lib/*.so; do
+        echo "Installing `basename $file`..."
+        cp $file  ${D}/${libdir}/
+    done
+
+    for shared_lib in ${TD}/${libdir}/*.so.*; do
+        if [ -f $shared_lib ]; then
+            cp $shared_lib ${D}/${libdir}
+            ln -sf $(basename $shared_lib) ${D}/${libdir}/$(basename $shared_lib .1oe)
+        fi
+    done
+    for shared_lib in ${TD}/${libdir}/*.so; do
+        if [ -f $shared_lib -a ! -e ${D}/${libdir}/$shared_lib ]; then
+            cp $shared_lib ${D}/${libdir}
+        fi
+    done
+
+    install -d ${D}/${includedir}/nss3
+    install -m 644 -t ${D}/${includedir}/nss3 dist/public/nss/*
+
+    install -d ${D}/${bindir}
+    for binary in ${TD}/${bindir}/*; do
+        install -m 755 -t ${D}/${bindir} $binary
+    done
+}
+
+do_install[vardepsexclude] += "SITEINFO_BITS"
+
+do_install_append() {
+    # Create empty .chk files for the NSS libraries at build time. They could
+    # be regenerated at target's boot time.
+    for file in libsoftokn3.chk libfreebl3.chk libnssdbm3.chk; do
+        touch ${D}/${libdir}/$file
+        chmod 755 ${D}/${libdir}/$file
+    done
+    install -D -m 755 ${WORKDIR}/signlibs.sh ${D}/${bindir}/signlibs.sh
+
+    install -d ${D}${libdir}/pkgconfig/
+    sed 's/%NSS_VERSION%/${PV}/' ${WORKDIR}/nss.pc.in | sed 's/%NSPR_VERSION%/4.9.2/' > ${D}${libdir}/pkgconfig/nss.pc
+    sed -i s:OEPREFIX:${prefix}:g ${D}${libdir}/pkgconfig/nss.pc
+    sed -i s:OEEXECPREFIX:${exec_prefix}:g ${D}${libdir}/pkgconfig/nss.pc
+    sed -i s:OELIBDIR:${libdir}:g ${D}${libdir}/pkgconfig/nss.pc
+    sed -i s:OEINCDIR:${includedir}/nss3:g ${D}${libdir}/pkgconfig/nss.pc
+}
+
+do_install_append_class-target() {
+    # It used to call certutil to create a blank certificate with empty password at
+    # build time, but the checksum of key4.db changes every time when certutil is called.
+    # It causes non-determinism issue, so provide databases with a blank certificate
+    # which are originally from output of nss in qemux86-64 build. You can get these
+    # databases by:
+    # certutil -N -d sql:/database/path/ --empty-password
+    install -d ${D}${sysconfdir}/pki/nssdb/
+    install -m 0644 ${WORKDIR}/blank-cert9.db ${D}${sysconfdir}/pki/nssdb/cert9.db
+    install -m 0644 ${WORKDIR}/blank-key4.db ${D}${sysconfdir}/pki/nssdb/key4.db
+    install -m 0644 ${WORKDIR}/system-pkcs11.txt ${D}${sysconfdir}/pki/nssdb/pkcs11.txt
+}
+
+PACKAGE_WRITE_DEPS += "nss-native"
+pkg_postinst_${PN} () {
+    if [ -n "$D" ]; then
+        for I in $D${libdir}/lib*.chk; do
+            DN=`dirname $I`
+            BN=`basename $I .chk`
+            FN=$DN/$BN.so
+            shlibsign -i $FN
+            if [ $? -ne 0 ]; then
+                exit 1
+            fi
+        done
+    else
+        signlibs.sh
+    fi
+}
+
+PACKAGES =+ "${PN}-smime"
+FILES_${PN}-smime = "\
+    ${bindir}/smime \
+"
+
+FILES_${PN} = "\
+    ${sysconfdir} \
+    ${bindir} \
+    ${libdir}/lib*.chk \
+    ${libdir}/lib*.so \
+    "
+
+FILES_${PN}-dev = "\
+    ${libdir}/nss \
+    ${libdir}/pkgconfig/* \
+    ${includedir}/* \
+    "
+
+RDEPENDS_${PN}-smime = "perl"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/onig/onig_6.9.4.bb b/meta-openembedded/meta-oe/recipes-support/onig/onig_6.9.4.bb
index cfa86f0..50d9f52 100644
--- a/meta-openembedded/meta-oe/recipes-support/onig/onig_6.9.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/onig/onig_6.9.4.bb
@@ -28,5 +28,6 @@
 }
 
 do_install_ptest() {
-    install -Dm0755 -t ${D}${PTEST_PATH}/tests/ ${B}/test/.libs/*
+    mkdir -p ${D}${PTEST_PATH}/tests
+    install -m 0755 -t ${D}${PTEST_PATH}/tests/ ${B}/test/.libs/*
 }
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/kill-icu.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/kill-icu.patch
deleted file mode 100644
index 35e4646..0000000
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/kill-icu.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
-
-slapd depends on ICU if it was built first.
-
-Upstream-Status: inappropiate [embedded specific]
----
- configure.in |    8 --------
- 1 file changed, 8 deletions(-)
-
---- openldap-2.4.23.orig/configure.in
-+++ openldap-2.4.23/configure.in
-@@ -2045,18 +2045,10 @@ if test $ol_enable_ndb != no ; then
- 		SLAPD_LIBS="$SLAPD_LIBS \$(SLAPD_NDB_LIBS)"
- 	fi
- fi
- 
- dnl ----------------------------------------------------------------
--dnl International Components for Unicode
--OL_ICU
--if test "$ol_icu" = no ; then
--	AC_MSG_WARN([ICU not available])
--else
--	ICU_LIBS="$ol_icu"
--fi
--dnl ----------------------------------------------------------------
- dnl
- dnl Check for Cyrus SASL
- dnl
- WITH_SASL=no
- ol_link_sasl=no
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.48.bb b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.49.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.48.bb
rename to meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.49.bb
index ecc219d..670c704 100644
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.48.bb
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.49.bb
@@ -7,7 +7,7 @@
 # basically BSD.  opensource.org does not record this license
 # at present (so it is apparently not OSI certified).
 LICENSE = "OpenLDAP"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=ad914c35f97b468f421f8ac0f3d821f4 \
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=5391b559d23a2237bdb21e7a62dae7c3 \
                     file://LICENSE;md5=153d07ef052c4a37a8fac23bc6031972 \
                     "
 SECTION = "libs"
@@ -16,7 +16,6 @@
 
 SRC_URI = "http://www.openldap.org/software/download/OpenLDAP/openldap-release/${BP}.tgz \
     file://openldap-m4-pthread.patch \
-    file://kill-icu.patch \
     file://openldap-2.4.28-gnutls-gcrypt.patch \
     file://use-urandom.patch \
     file://initscript \
@@ -26,8 +25,8 @@
     file://remove-user-host-pwd-from-version.patch \
 "
 
-SRC_URI[md5sum] = "0729a0711fe096831dedc159e0bbe73f"
-SRC_URI[sha256sum] = "d9523ffcab5cd14b709fcf3cb4d04e8bc76bb8970113255f372bc74954c6074d"
+SRC_URI[md5sum] = "2a47a6bb4319357ea7b032c45283e79e"
+SRC_URI[sha256sum] = "e3b117944b4180f23befe87d0dcf47f29de775befbc469dcf4ac3dab3311e56e"
 
 DEPENDS = "util-linux groff-native"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite/0001-pcsc-spy-use-python3-only.patch b/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite/0001-pcsc-spy-use-python3-only.patch
new file mode 100644
index 0000000..3e7b0ad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite/0001-pcsc-spy-use-python3-only.patch
@@ -0,0 +1,43 @@
+From 75dd98876951d86890ceb30be521de57fd31e3c7 Mon Sep 17 00:00:00 2001
+From: Andrey Zhizhikin <andrey.z@gmail.com>
+Date: Mon, 27 Jan 2020 13:27:12 +0000
+Subject: [PATCH] pcsc-spy: use python3 only
+
+Python2 has been EOL and most distributions would not provide any
+support for it anymore. Since Python3 is available in all distributions
+now, switch pcsc-spy to use it exclusively.
+
+Upstream-Status: Pending
+
+Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
+---
+ src/spy/pcsc-spy | 9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/src/spy/pcsc-spy b/src/spy/pcsc-spy
+index 85222c6..965138e 100755
+--- a/src/spy/pcsc-spy
++++ b/src/spy/pcsc-spy
+@@ -1,4 +1,4 @@
+-#! /usr/bin/python
++#!/usr/bin/env python3
+ 
+ """
+ #    Display PC/SC functions arguments
+@@ -22,12 +22,7 @@ from __future__ import print_function
+ import os
+ import signal
+ import time
+-try:
+-    # for Python3
+-    from queue import Queue
+-except ImportError:
+-    # for Python2
+-    from Queue import Queue
++from queue import Queue
+ from threading import Thread
+ from operator import attrgetter
+ 
+-- 
+2.17.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.26.bb b/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.26.bb
index 5e60846..91d77ac 100644
--- a/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.26.bb
+++ b/meta-openembedded/meta-oe/recipes-support/pcsc-lite/pcsc-lite_1.8.26.bb
@@ -10,11 +10,14 @@
 LICENSE_${PN}-spy-dev = "GPLv3+"
 LIC_FILES_CHKSUM = "file://COPYING;md5=628c01ba985ecfa21677f5ee2d5202f6"
 
-SRC_URI = "https://pcsclite.apdu.fr/files/${BP}.tar.bz2"
+SRC_URI = "\
+	https://pcsclite.apdu.fr/files/${BP}.tar.bz2 \
+	file://0001-pcsc-spy-use-python3-only.patch \
+"
 SRC_URI[md5sum] = "9d36882998449daceec267c68a21ff0d"
 SRC_URI[sha256sum] = "3eb7be7d6ef618c0a444316cf5c1f2f9d7227aedba7a192f389fe3e7c0dfbbd9"
 
-inherit autotools systemd pkgconfig
+inherit autotools systemd pkgconfig perlnative
 
 EXTRA_OECONF = " \
     --disable-libusb \
@@ -50,6 +53,6 @@
 RREPLACES_${PN} += "${PN}-systemd"
 RCONFLICTS_${PN} += "${PN}-systemd"
 SYSTEMD_SERVICE_${PN} = "pcscd.socket"
-RDEPENDS_${PN}-spy +="python"
+RDEPENDS_${PN}-spy +="python3"
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.4.bb b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.4.bb
index f1dabcd..fcd5219 100644
--- a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.4.bb
@@ -16,6 +16,8 @@
    "
 SRCREV = "b95393dcc3640807838e8323b4e600e54d2e8116"
 
+UPSTREAM_CHECK_GITTAGREGEX = "poco-(?P<pver>\d+(\.\d+)+)"
+
 S = "${WORKDIR}/git"
 
 inherit cmake ptest
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.84.0.bb b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.86.1.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.84.0.bb
rename to meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.86.1.bb
index 5153868..a6067e6 100644
--- a/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.84.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.86.1.bb
@@ -7,14 +7,14 @@
            file://0001-Do-not-overwrite-all-our-build-flags.patch \
            file://basename-include.patch \
            "
-SRC_URI[md5sum] = "e14a8aca8809908ad4364c32c17bcb92"
-SRC_URI[sha256sum] = "c7a130da743b38a548f7a21fe5940506fb1949f4ebdd3209f0e5b302fa139731"
+SRC_URI[md5sum] = "2a638739f29e82a0a57b633ea39c87f3"
+SRC_URI[sha256sum] = "af630a277c8e194c31339c5446241834aed6ed3d4b4dc7080311e51c66257f6c"
 
 DEPENDS = "fontconfig zlib cairo lcms glib-2.0"
 
 inherit cmake pkgconfig gobject-introspection
 
-PACKAGECONFIG ??= "jpeg openjpeg png tiff nss ${@bb.utils.contains('BBFILE_COLLECTIONS', 'qt5-layer', 'qt5', '', d)}"
+PACKAGECONFIG ??= "jpeg openjpeg png tiff nss splash"
 PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON -DENABLE_DCTDECODER=libjpeg,-DWITH_JPEG=OFF -DENABLE_DCTDECODER=none,jpeg"
 PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng"
 PACKAGECONFIG[tiff] = "-DWITH_TIFF=ON,-DWITH_TIFF=OFF,tiff"
@@ -22,6 +22,7 @@
 PACKAGECONFIG[openjpeg] = "-DENABLE_LIBOPENJPEG=openjpeg2,-DENABLE_LIBOPENJPEG=none,openjpeg"
 PACKAGECONFIG[qt5] = "-DENABLE_QT5=ON,-DENABLE_QT5=OFF,qtbase qttools-native"
 PACKAGECONFIG[nss] = "-DWITH_NSS3=ON,-DWITH_NSS3=OFF,nss"
+PACKAGECONFIG[splash] = "-DENABLE_SPLASH=ON,-DENABLE_SPLASH=OFF,boost"
 
 # surprise - did not expect this to work :)
 inherit ${@bb.utils.contains('PACKAGECONFIG', 'qt5', 'cmake_qt5', '', d)}
diff --git a/meta-openembedded/meta-oe/recipes-support/pv/pv_1.6.6.bb b/meta-openembedded/meta-oe/recipes-support/pv/pv_1.6.6.bb
index 9649555..0eef82b 100644
--- a/meta-openembedded/meta-oe/recipes-support/pv/pv_1.6.6.bb
+++ b/meta-openembedded/meta-oe/recipes-support/pv/pv_1.6.6.bb
@@ -7,6 +7,9 @@
 SRC_URI[md5sum] = "ff3564fddcc2b9bd4a9c1d143aba4b4c"
 SRC_URI[sha256sum] = "608ef935f7a377e1439c181c4fc188d247da10d51a19ef79bcdee5043b0973f1"
 
+UPSTREAM_CHECK_URI = "http://www.ivarch.com/programs/pv.shtml"
+UPSTREAM_CHECK_REGEX = "pv-(?P<pver>\d+(\.\d+)+).tar.bz2"
+
 inherit autotools
 
 LDEMULATION_mipsarchn32 = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', 'elf32btsmipn32', 'elf32ltsmipn32', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.3.6.bb b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.3.6.bb
index 14fbc94..5b66348 100644
--- a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.3.6.bb
+++ b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.3.6.bb
@@ -3,10 +3,8 @@
 SECTION = "Support"
 LICENSE = "GPLv2 & openssl"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=dab7215512044d49037272ce1ac4ea8f file://LICENSE.OpenSSL;md5=c1eb3cee0a4dea27503c531267a69769"
-DEPENDS += "openssl freerdp gtk+3 gdk-pixbuf atk libgcrypt avahi-ui libsodium libssh vte json-glib libsoup-2.4 libvncserver libsecret"
+DEPENDS += "openssl freerdp gtk+3 gdk-pixbuf atk libgcrypt avahi-ui libsodium libssh vte json-glib libsoup-2.4 libvncserver libsecret libxkbfile"
 
-DEPENDS_append_x86 = " spice spice-protocol"
-DEPENDS_append_x86-64 = " spice spice-protocol"
 
 DEPENDS_append_libc-musl = " libexecinfo"
 LDFLAGS_append_libc-musl = " -lexecinfo"
@@ -18,16 +16,10 @@
 
 S = "${WORKDIR}/Remmina-v${PV}"
 
-inherit cmake features_check
+inherit cmake features_check mime-xdg
+REQUIRED_DISTRO_FEATURES = "x11"
 
-# depends on avahi-ui with this restriction
-ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-
-EXTRA_OECMAKE += "-DWITH_APPINDICATOR=OFF -DWITH_GETTEXT=OFF -DWITH_TRANSLATIONS=OFF -DWITH_SPICE=OFF"
-
-EXTRA_OECMAKE_append_x86 = " -DWITH_SPICE=ON"
-EXTRA_OECMAKE_append_x86-64 = " -DWITH_SPICE=ON"
-
+EXTRA_OECMAKE += "-DWITH_APPINDICATOR=OFF -DWITH_GETTEXT=OFF -DWITH_TRANSLATIONS=OFF"
 
 do_install_append(){
     # We dont need the extra stuff form other desktop environments
@@ -36,6 +28,8 @@
     rm -rf ${D}/${datadir}/gnome-session
 }
 
+PACKAGECONFIG[spice] = "-DWITH_SPICE=ON, -DWITH_SPICE=OFF, spice spice-protocol"
+
 RDEPENDS_${PN} = "bash"
 
 FILES_${PN}_append = " ${datadir}/icons/hicolor/*"
diff --git a/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb b/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb
index aefe362..efe95b1 100644
--- a/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/rsnapshot/rsnapshot_git.bb
@@ -29,7 +29,7 @@
 
 S = "${WORKDIR}/git"
 
-inherit autotools
+inherit autotools perlnative
 
 # Fix rsnapshot.conf.default:
 # don't inject the host path into target configs.
diff --git a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/files/0001-ppt.c-Do-not-include-sys-io.h.patch b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/files/0001-ppt.c-Do-not-include-sys-io.h.patch
deleted file mode 100644
index 4e6c250..0000000
--- a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/files/0001-ppt.c-Do-not-include-sys-io.h.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From fd244ae648789591f0fb79e74d2b8f6c5b15d6e8 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 6 Aug 2019 00:47:14 +0000
-Subject: [PATCH] ppt.c: Do not include sys/io.h
-
-newer versions of glibc has removed it
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ppt.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/ppt.c b/ppt.c
-index 0bae2d0..0ef279f 100644
---- a/ppt.c
-+++ b/ppt.c
-@@ -5,7 +5,6 @@
- #else

- #include <unistd.h>

- #include <stdlib.h>

--#include <sys/io.h>

- #include <linux/parport.h>

- #include <linux/ppdev.h>

- #include <sys/ioctl.h>

--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c24xx-gpio_svn.bb b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c24xx-gpio_svn.bb
deleted file mode 100644
index 255754d..0000000
--- a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c24xx-gpio_svn.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-SUMMARY = "A user-space tool to show and modify the state of GPIOs on the S3c24xx platform"
-SECTION = "console/utils"
-AUTHOR = "Werner Almesberger <werner@openmoko.org>"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://gpio.c;endline=12;md5=cfb91c686857b2e60852b4925d90a3e1"
-SRCREV = "4949"
-PV = "1.0+svnr${SRCPV}"
-PR = "r2"
-
-SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;protocol=http"
-S = "${WORKDIR}/gpio"
-
-CLEANBROKEN = "1"
-
-do_compile() {
-    ${CC} ${CFLAGS} ${LDFLAGS} -o ${PN} gpio.c
-}
-
-do_install() {
-    install -d ${D}${sbindir}
-    install -m 0755 ${PN} ${D}${sbindir}
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c64xx-gpio_svn.bb b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c64xx-gpio_svn.bb
deleted file mode 100644
index 976a4f1..0000000
--- a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/s3c64xx-gpio_svn.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "A user-space tool to show and modify the state of GPIOs on the S3c64xx platform"
-SECTION = "console/utils"
-AUTHOR = "Werner Almesberger <werner@openmoko.org>"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://gpio-s3c6410.c;endline=12;md5=060cda1be945ad9194593f11d56d55c7"
-SRCREV = "4949"
-PV = "1.0+svnr${SRCPV}"
-
-SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gpio;protocol=http"
-S = "${WORKDIR}/gpio"
-
-CLEANBROKEN = "1"
-
-do_compile() {
-    ${CC} ${CFLAGS} ${LDFLAGS} -o ${PN} gpio-s3c6410.c
-}
-
-do_install() {
-    install -d ${D}${sbindir}
-    install -m 0755 ${PN} ${D}${sbindir}
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/sjf2410-linux-native_svn.bb b/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/sjf2410-linux-native_svn.bb
deleted file mode 100644
index 3a5172e..0000000
--- a/meta-openembedded/meta-oe/recipes-support/samsung-soc-utils/sjf2410-linux-native_svn.bb
+++ /dev/null
@@ -1,40 +0,0 @@
-SUMMARY = "JTAG utility to interface w/ a S3C2410 device"
-SECTION = "devel"
-AUTHOR = "Harald Welte <laforge@openmoko.org>"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://parport.c;endline=19;md5=b5681091b0fd8c5f7068835c441bf0c8"
-SRCREV = "4268"
-PV = "0.1+svnr${SRCPV}"
-PR = "r1"
-
-SRC_URI = "svn://svn.openmoko.org/trunk/src/host/;module=sjf2410-linux;protocol=http \
-           file://0001-ppt.c-Do-not-include-sys-io.h.patch \
-          "
-S = "${WORKDIR}/sjf2410-linux"
-
-inherit native deploy
-
-CFLAGS += "-DLINUX_PPDEV"
-
-do_compile() {
-    oe_runmake
-}
-
-do_install() {
-    install -d ${D}/${bindir}
-    install -m 0755 sjf2410 ${D}/${bindir}
-}
-
-do_deploy() {
-    install -m 0755 sjf2410 ${DEPLOYDIR}/sjf2410-${PV}
-}
-
-addtask deploy before do_build after do_install
-
-do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_TOOLS}"
-# cleandirs should possibly be in deploy.bbclass but we need it
-do_deploy[cleandirs] = "${DEPLOYDIR}"
-# clear stamp-extra-info since MACHINE_ARCH is normally put there by
-# deploy.bbclass
-do_deploy[stamp-extra-info] = ""
-
diff --git a/meta-openembedded/meta-oe/recipes-support/sass/sassc_git.bb b/meta-openembedded/meta-oe/recipes-support/sass/sassc_git.bb
index 044c0c7..3c7a55c 100644
--- a/meta-openembedded/meta-oe/recipes-support/sass/sassc_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/sass/sassc_git.bb
@@ -7,8 +7,8 @@
 inherit autotools pkgconfig
 
 SRC_URI = "git://github.com/sass/sassc.git"
-SRCREV = "aa6d5c635ea8faf44d542a23aaf85d27e5777d48"
+SRCREV = "46748216ba0b60545e814c07846ca10c9fefc5b6"
 S = "${WORKDIR}/git"
-PV = "3.5.0"
+PV = "3.6.1"
 
 BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch b/meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch
index 3fd85d9..f58091a 100644
--- a/meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch
+++ b/meta-openembedded/meta-oe/recipes-support/sdparm/files/make-sysroot-work.patch
@@ -17,13 +17,13 @@
 index 61dd9f8..42c911f 100644
 --- a/src/Makefile.am
 +++ b/src/Makefile.am
-@@ -41,7 +41,7 @@ sglib_SOURCES =		../lib/sg_lib.c \
+@@ -53,7 +53,7 @@ sglib_SOURCES =		../lib/sg_lib.c \
  			../lib/sg_pt_common.c
  
  if HAVE_SGUTILS
 -INCLUDES = -I/scsi
 +INCLUDES = -I=@includedir@/scsi
- sdparm_LDADD = @GETOPT_O_FILES@ @os_libs@ @SGUTILS_LIBS@
+ sdparm_LDADD = @GETOPT_O_FILES@ @SGUTILS_LIBS@
  sdparm_DEPENDENCIES = @GETOPT_O_FILES@
  else
 -- 
diff --git a/meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.10.bb b/meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.11.bb
similarity index 77%
rename from meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.10.bb
rename to meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.11.bb
index c09b495..7fc87db 100644
--- a/meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/sdparm/sdparm_1.11.bb
@@ -5,7 +5,7 @@
 SECTION = "console/utils"
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://COPYING;md5=ecab6c36b7ba82c675581dd0afde36f7 \
-                    file://lib/BSD_LICENSE;md5=1d52f4a66f1e0ed96776bf354ab7a2ed"
+                    file://lib/BSD_LICENSE;md5=12cde17a04c30dece2752f36b7192c64"
 DEPENDS="sg3-utils"
 SRC_URI = "http://sg.danny.cz/sg/p/${BPN}-${PV}.tgz \
            file://make-sysroot-work.patch \
@@ -17,8 +17,8 @@
 PACKAGES =+ "${PN}-scripts"
 RDEPENDS_${PN}-scripts += "bash ${PN}"
 
-SRC_URI[md5sum] = "bdae64375376ce8fe4bf9521c1db858f"
-SRC_URI[sha256sum] = "1ea1ed1bb1ee2aef62392618fa42da9ed027d5e655f174525c39235778292ab3"
+SRC_URI[md5sum] = "cd998d1c12a4ec11652d0af580f06b4d"
+SRC_URI[sha256sum] = "432fdbfe90f0c51640291faf7602489b0ae56dfb96d0c02ed02308792adc7fb0"
 
 inherit autotools
 
diff --git a/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb b/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.45.bb
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb
rename to meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.45.bb
index 4909035..22995b7 100644
--- a/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb
+++ b/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.45.bb
@@ -14,8 +14,8 @@
 
 UPSTREAM_CHECK_REGEX = "sg3_utils-(?P<pver>\d+(\.\d+)+)\.tgz"
 
-SRC_URI[md5sum] = "c11d2b3ca4cc2fd01796473e5330afed"
-SRC_URI[sha256sum] = "8dae684d22e71b11353a48b16c95597af90f0cbe9bbd57f98d7f5544da5cae7b"
+SRC_URI[md5sum] = "2e71d7cd925dcc48acb24afaaaac7990"
+SRC_URI[sha256sum] = "0b87c971af52af7cebebcce343eac6bd3d73febb3c72af9ce41a4552f1605a61"
 
 inherit autotools-brokensep
 
diff --git a/meta-openembedded/meta-oe/recipes-support/smem/smem_1.4.bb b/meta-openembedded/meta-oe/recipes-support/smem/smem_1.4.bb
deleted file mode 100644
index 702217a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/smem/smem_1.4.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-SUMMARY = "Report application memory usage in a meaningful way"
-DESCRIPTION = "smem is a tool that can give numerous reports on memory usage on Linux \
-systems. Unlike existing tools, smem can report proportional set size (PSS), \
-which is a more meaningful representation of the amount of memory used by \
-libraries and applications in a virtual memory system."
-HOMEPAGE = "http://www.selenic.com/smem/"
-SECTION = "Applications/System"
-
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "http://www.selenic.com/${BPN}/download/${BP}.tar.gz"
-SRC_URI[md5sum] = "fe79435c3930389bfdb560255c802162"
-SRC_URI[sha256sum] = "2ea9f878f4cf3c276774c3f7e2a41977a1f2d64f98d2dcb6a15f1f3d84df61ec"
-
-do_compile() {
-        ${CC} ${CFLAGS} ${LDFLAGS} smemcap.c -o smemcap
-}
-
-do_install() {
-        install -d ${D}/${bindir}/
-        install -d ${D}/${mandir}/man8
-        install -m 0755 ${S}/smem ${D}${bindir}/
-        install -m 0755 ${S}/smemcap ${D}${bindir}/
-        install -m 0644 ${S}/smem.8 ${D}/${mandir}/man8/
-}
-RDEPENDS_${PN} += "python-textutils python-compression python-shell python-codecs"
-
-PACKAGES =+ "smemcap"
-
-FILES_smemcap = "${bindir}/smemcap"
diff --git a/meta-openembedded/meta-oe/recipes-support/span-lite/span-lite_git.bb b/meta-openembedded/meta-oe/recipes-support/span-lite/span-lite_git.bb
new file mode 100644
index 0000000..96ec829
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/span-lite/span-lite_git.bb
@@ -0,0 +1,12 @@
+SUMMARY = "single-file header-only version of a C++20-like span for C++98, C++11 and later"
+HOMEPAGE = "https://github.com/martinmoene/span-lite"
+LICENSE = "BSL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+
+SRC_URI += "git://github.com/martinmoene/span-lite"
+SRCREV = "e03d1166ccc8481d993dc02aae703966301a5e6e"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+inherit ptest
diff --git a/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.3.1.bb b/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.5.0.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.3.1.bb
rename to meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.5.0.bb
index 91e3f67..39629cc 100644
--- a/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.3.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.5.0.bb
@@ -3,7 +3,7 @@
 LICENSE = "MIT"
 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
 
-SRCREV = "a7148b718ea2fabb8387cb90aee9bf448da63e65"
+SRCREV = "cf6f1dd01e660d5865d68bf5fa78f6376b89470a"
 SRC_URI = "git://github.com/gabime/spdlog.git;protocol=git;branch=v1.x;"
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb b/meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb
index d3488df..4c34fa1 100644
--- a/meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb
+++ b/meta-openembedded/meta-oe/recipes-support/srecord/srecord_1.64.bb
@@ -11,6 +11,8 @@
 SRC_URI[md5sum] = "4de4a7497472d7972645c2af91313769"
 SRC_URI[sha256sum] = "49a4418733c508c03ad79a29e95acec9a2fbc4c7306131d2a8f5ef32012e67e2"
 
+UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/srecord/files/releases"
+
 DEPENDS = "libtool-native boost groff-native"
 
 inherit autotools-brokensep
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.systemd b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.systemd
index 965abf7..6a86276 100644
--- a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.systemd
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.systemd
@@ -1,4 +1,4 @@
-@version: 3.19
+@version: 3.24
 #
 # Syslog-ng configuration file, compatible with default Debian syslogd
 # installation. Originally written by anonymous (I can't find his name)
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.sysvinit b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.sysvinit
index 2b39b8c..32b9861 100644
--- a/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.sysvinit
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/files/syslog-ng.conf.sysvinit
@@ -1,4 +1,4 @@
-@version: 3.19
+@version: 3.24
 #
 # Syslog-ng configuration file, compatible with default Debian syslogd
 # installation. Originally written by anonymous (I can't find his name)
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
index 8e53689..ff6d9d2 100644
--- a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng.inc
@@ -73,26 +73,26 @@
 }
 
 do_install_append() {
-    install -d ${D}/${sysconfdir}/${BPN}
-    install -d ${D}/${sysconfdir}/init.d
-    install -m 755 ${WORKDIR}/initscript ${D}/${sysconfdir}/init.d/syslog
+    install -d ${D}${sysconfdir}/${BPN}
+    install -d ${D}${sysconfdir}/init.d
+    install -m 755 ${WORKDIR}/initscript ${D}${sysconfdir}/init.d/syslog
 
-    install -d ${D}/${sysconfdir}/default/volatiles/
-    install -m 755 ${WORKDIR}/volatiles.03_syslog-ng ${D}/${sysconfdir}/default/volatiles/03_syslog-ng
-    install -d ${D}/${sysconfdir}/tmpfiles.d/
-    install -m 755 ${WORKDIR}/syslog-ng-tmp.conf ${D}/${sysconfdir}/tmpfiles.d/syslog-ng.conf
+    install -d ${D}${sysconfdir}/default/volatiles/
+    install -m 644 ${WORKDIR}/volatiles.03_syslog-ng ${D}${sysconfdir}/default/volatiles/03_syslog-ng
+    install -d ${D}${sysconfdir}/tmpfiles.d/
+    install -m 644 ${WORKDIR}/syslog-ng-tmp.conf ${D}${sysconfdir}/tmpfiles.d/syslog-ng.conf
 
-    install -d ${D}/${localstatedir}/lib/${BPN}
+    install -d ${D}${localstatedir}/lib/${BPN}
     # Remove /var/run as it is created on startup
     rm -rf ${D}${localstatedir}/run
 
     # support for systemd
     if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
-        install ${WORKDIR}/syslog-ng.conf.systemd ${D}${sysconfdir}/${BPN}/${BPN}.conf
+        install -m 644 ${WORKDIR}/syslog-ng.conf.systemd ${D}${sysconfdir}/${BPN}/${BPN}.conf
 
         install -d ${D}${systemd_unitdir}/system/
-        install -m 0644 ${S}/contrib/systemd/${BPN}@.service ${D}${systemd_unitdir}/system/${BPN}@.service
-        install -m 0644 ${S}/contrib/systemd/${BPN}@default ${D}${sysconfdir}/default/${BPN}@default
+        install -m 644 ${S}/contrib/systemd/${BPN}@.service ${D}${systemd_unitdir}/system/${BPN}@.service
+        install -m 644 ${S}/contrib/systemd/${BPN}@default ${D}${sysconfdir}/default/${BPN}@default
 
         sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/${BPN}@.service ${D}${sysconfdir}/default/${BPN}@default
         sed -i -e 's,@LOCALSTATEDIR@,${localstatedir},g' ${D}${systemd_unitdir}/system/${BPN}@.service ${D}${sysconfdir}/default/${BPN}@default
@@ -101,7 +101,7 @@
         install -d ${D}${systemd_unitdir}/system/multi-user.target.wants
         ln -sf ../${BPN}@.service ${D}${systemd_unitdir}/system/multi-user.target.wants/${BPN}@default.service
     else
-        install ${WORKDIR}/syslog-ng.conf.sysvinit ${D}${sysconfdir}/${BPN}/${BPN}.conf
+        install -m 644 ${WORKDIR}/syslog-ng.conf.sysvinit ${D}${sysconfdir}/${BPN}/${BPN}.conf
     fi
 
     oe_multilib_header syslog-ng/syslog-ng-config.h
diff --git a/meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb b/meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb
index 26b4412..1ce3c8e 100644
--- a/meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/system-config-keyboard/system-config-keyboard_1.4.0.bb
@@ -6,7 +6,7 @@
 SRC_URI[md5sum] = "c267db0ee7a2131ba418399dc17f9e72"
 SRC_URI[sha256sum] = "218c883e4e2bfcc82bfe07e785707b5c2ece28df772f2155fd044b9bb1614284"
 
-inherit python-dir gettext
+inherit python3-dir gettext
 DEPENDS += "intltool-native gettext-native"
 
 EXTRA_OEMAKE = " \
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/0002-linux-Fix-gcc-version-check.patch b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/0002-linux-Fix-gcc-version-check.patch
deleted file mode 100644
index 9824b61..0000000
--- a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/0002-linux-Fix-gcc-version-check.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From aee098f1bf0511c6b5544de3170a9e8b51673b60 Mon Sep 17 00:00:00 2001
-From: Pierre Le Magourou <plemagourou@softbankrobotics.com>
-Date: Tue, 23 Jan 2018 15:25:50 +0100
-Subject: [PATCH] linux.gcc: Fix cross compilation error.
-
-When cross compiling on linux with gcc, the host gcc was used instead of
-the cross gcc to set compilation flags according to gcc version.
-
-When the cross gcc was in version 5.X and the host gcc in version 7.X,
-tbb was compiled with the -flifetime-dse=1 flag that does not exist on
-gcc 5.X.
----
- build/linux.gcc.inc | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
-index 5c1889c..a4d6698 100644
---- a/build/linux.gcc.inc
-+++ b/build/linux.gcc.inc
-@@ -41,29 +41,29 @@ LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
- C_FLAGS = $(CPLUS_FLAGS)
- 
- # gcc 4.2 and higher support OpenMP
--ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[2-9]|[5-9])"))
-+ifneq (,$(shell $(CC) -dumpversion | egrep  "^(4\.[2-9]|[5-9])"))
-     OPENMP_FLAG = -fopenmp
- endif
- 
- # gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them
--ifneq (,$(shell gcc -dumpversion | egrep  "^(4\.[8-9]|[5-9])"))
-+ifneq (,$(shell $(CC) -dumpversion | egrep  "^(4\.[8-9]|[5-9])"))
-     RTM_KEY = -mrtm
- endif
- 
- # gcc 4.0 and later have -Wextra that is used by some our customers.
--ifneq (,$(shell gcc -dumpversion | egrep  "^([4-9])"))
-+ifneq (,$(shell $(CC) -dumpversion | egrep  "^([4-9])"))
-     TEST_WARNING_KEY += -Wextra
- endif
- 
- # gcc 5.0 and later have -Wsuggest-override option
- # enable it via a pre-included header in order to limit to C++11 and above
--ifneq (,$(shell gcc -dumpversion | egrep  "^([5-9])"))
-+ifneq (,$(shell $(CC) -dumpversion | egrep  "^([5-9])"))
-     INCLUDE_TEST_HEADERS = -include $(tbb_root)/src/test/harness_preload.h
- endif
- 
- # gcc 6.0 and later have -flifetime-dse option that controls
- # elimination of stores done outside the object lifetime
--ifneq (,$(shell gcc -dumpversion | egrep  "^([6-9])"))
-+ifneq (,$(shell $(CC) -dumpversion | egrep  "^([6-9])"))
-     # keep pre-contruction stores for zero initialization
-     DSE_KEY = -flifetime-dse=1
- endif
--- 
-2.15.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/GLIBC-PREREQ-is-not-defined-on-musl.patch b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/GLIBC-PREREQ-is-not-defined-on-musl.patch
new file mode 100644
index 0000000..6f28f6f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/GLIBC-PREREQ-is-not-defined-on-musl.patch
@@ -0,0 +1,42 @@
+From 27956d4c5fb615098231cebfb8eef11057639d3c Mon Sep 17 00:00:00 2001
+From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+Date: Sun, 8 Dec 2019 18:14:38 +0100
+Subject: [PATCH] src/tbbmalloc/proxy.cpp: __GLIBC_PREREQ is not defined on
+ musl
+
+Do not call __GLIBC_PREREQ if it is not defined otherwise build will
+fail on musl
+
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+
+Upstream-Status: Submitted [https://github.com/oneapi-src/oneTBB/pull/203]
+
+Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
+---
+ src/tbbmalloc/proxy.cpp | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/tbbmalloc/proxy.cpp b/src/tbbmalloc/proxy.cpp
+index d96ae7a0..709ae839 100644
+--- a/src/tbbmalloc/proxy.cpp
++++ b/src/tbbmalloc/proxy.cpp
+@@ -24,7 +24,8 @@
+ // of aligned_alloc as required by new C++ standard, this makes it hard to
+ // redefine aligned_alloc here. However, running on systems with new libc
+ // version, it still needs it to be redefined, thus tricking system headers
+-#if defined(__GLIBC_PREREQ) && !__GLIBC_PREREQ(2, 16) && _GLIBCXX_HAVE_ALIGNED_ALLOC
++#if defined(__GLIBC_PREREQ)
++#if !__GLIBC_PREREQ(2, 16) && _GLIBCXX_HAVE_ALIGNED_ALLOC
+ // tell <cstdlib> that there is no aligned_alloc
+ #undef _GLIBCXX_HAVE_ALIGNED_ALLOC
+ // trick <stdlib.h> to define another symbol instead
+@@ -32,7 +33,8 @@
+ // Fix the state and undefine the trick
+ #include <cstdlib>
+ #undef aligned_alloc
+-#endif // defined(__GLIBC_PREREQ)&&!__GLIBC_PREREQ(2, 16)&&_GLIBCXX_HAVE_ALIGNED_ALLOC
++#endif // defined(__GLIBC_PREREQ)
++#endif // !__GLIBC_PREREQ(2, 16)&&_GLIBCXX_HAVE_ALIGNED_ALLOC
+ #endif // __linux__ && !__ANDROID__
+ 
+ #include "proxy.h"
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch
index d54b307..3657854 100644
--- a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/cross-compile.patch
@@ -1,39 +1,35 @@
 Author: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
-
+  
 Upstream-Status: unsuitable
 ---
- build/linux.gcc.inc |    5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
 
-Index: tbb2017_20170118oss/build/linux.gcc.inc
-===================================================================
---- tbb2017_20170118oss.orig/build/linux.gcc.inc
-+++ tbb2017_20170118oss/build/linux.gcc.inc
-@@ -32,8 +32,9 @@ DYLIB_KEY = -shared
- EXPORT_KEY = -Wl,--version-script,
- LIBDL = -ldl
+diff --git a/build/linux.clang.inc b/build/linux.clang.inc
+index fe9b5c98..b0dcd68b 100644
+--- a/build/linux.clang.inc
++++ b/build/linux.clang.inc
+@@ -12,8 +12,8 @@
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
  
--CPLUS = g++
--CONLY = gcc
-+CPLUS = $(CXX)
-+CONLY = $(CC)
-+CPLUS_FLAGS = $(CXXFLAGS)
- LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
- LIBS += -lpthread -lrt
- LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
-Index: tbb2017_20170118oss/build/linux.clang.inc
-===================================================================
---- tbb2017_20170118oss.orig/build/linux.clang.inc
-+++ tbb2017_20170118oss/build/linux.clang.inc
-@@ -31,8 +31,9 @@ DYLIB_KEY = -shared
- EXPORT_KEY = -Wl,--version-script,
- LIBDL = -ldl
+-CPLUS ?= clang++
+-CONLY ?= clang
++CPLUS ?= $(CXX)
++CONLY ?= $(CC)
+ COMPILE_ONLY = -c -MMD
+ PREPROC_ONLY = -E -x c++
+ INCLUDE_KEY = -I
+diff --git a/build/linux.gcc.inc b/build/linux.gcc.inc
+index d820c15d..62c76afd 100644
+--- a/build/linux.gcc.inc
++++ b/build/linux.gcc.inc
+@@ -12,8 +12,8 @@
+ # See the License for the specific language governing permissions and
+ # limitations under the License.
  
--CPLUS = clang++
--CONLY = clang
-+CPLUS = $(CXX)
-+CONLY = $(CC)
-+CPLUS_FLAGS = $(CXXFLAGS)
- LIB_LINK_FLAGS = $(DYLIB_KEY) -Wl,-soname=$(BUILDING_LIBRARY)
- LIBS += -lpthread -lrt
- LINK_FLAGS = -Wl,-rpath-link=. -rdynamic
+-CPLUS ?= g++
+-CONLY ?= gcc
++CPLUS ?= $(CXX)
++CONLY ?= $(CC)
+ COMPILE_ONLY = -c -MMD
+ PREPROC_ONLY = -E -x c++
+ INCLUDE_KEY = -I
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc
index 644b64f..4f9da11 100644
--- a/meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb/tbb.pc
@@ -5,7 +5,7 @@
 
 Name: Threading Building Blocks
 Description: Intel's parallelism library for C++
-URL: http://www.threadingbuildingblocks.org/
-Version: 3.0+r018
+URL: https://software.intel.com/en-us/tbb
+Version: 2020.2
 Libs: -L${libdir} -ltbb
 Cflags: -I${includedir} 
diff --git a/meta-openembedded/meta-oe/recipes-support/tbb/tbb.bb b/meta-openembedded/meta-oe/recipes-support/tbb/tbb_2020.2.bb
similarity index 73%
rename from meta-openembedded/meta-oe/recipes-support/tbb/tbb.bb
rename to meta-openembedded/meta-oe/recipes-support/tbb/tbb_2020.2.bb
index f870104..2f9fd7f 100644
--- a/meta-openembedded/meta-oe/recipes-support/tbb/tbb.bb
+++ b/meta-openembedded/meta-oe/recipes-support/tbb/tbb_2020.2.bb
@@ -3,35 +3,37 @@
     performance without having to be a threading expert. It represents a \
     higher-level, task-based parallelism that abstracts platform details \
     and threading mechanism for performance and scalability."
-HOMEPAGE = "http://threadingbuildingblocks.org/"
+HOMEPAGE = "https://software.intel.com/en-us/tbb"
 LICENSE = "Apache-2.0"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-PRDATE = "20170412"
-BRANCH = "tbb_2017"
-SRCREV = "a2cfdfe946933cbe38bffe1d8086ae36f06691a3"
-PV = "${PRDATE}+${SRCPV}"
-SRC_URI = "git://github.com/01org/tbb;branch=${BRANCH} \
+BRANCH = "tbb_2020"
+SRCREV = "60b7d0a78f8910976678ba63a19fdaee22c0ef65"
+SRC_URI = "git://github.com/oneapi-src/oneTBB.git;protocol=https;branch=${BRANCH} \
            file://cross-compile.patch \
            file://0001-mallinfo-is-glibc-specific-API-mark-it-so.patch \
-           file://0002-linux-Fix-gcc-version-check.patch \
+           file://GLIBC-PREREQ-is-not-defined-on-musl.patch \
            file://tbb.pc \
 "
 
 S = "${WORKDIR}/git"
+PE = "1"
 
 COMPILER ?= "gcc"
 COMPILER_toolchain-clang = "clang"
 
 do_compile() {
-    oe_runmake compiler=${COMPILER} arch=${HOST_ARCH} runtime=cc4
+    oe_runmake compiler=${COMPILER} arch=${HOST_ARCH}
 }
 
 do_install() {
-    install -d ${D}${includedir} ${D}${libdir}/pkgconfig
+    install -d ${D}${includedir} ${D}${libdir}
     rm ${S}/include/tbb/index.html -f
     cp -R --no-dereference --preserve=mode,links -v ${S}/include/tbb ${D}${includedir}
-    install -m 0755 ${B}/build/linux_*_release/lib*.so* ${D}${libdir}
-    install -m 0644 ${WORKDIR}/tbb.pc ${D}${libdir}/pkgconfig
+    for f in ${B}/build/linux_*_release/lib*.so*
+    do
+        install -Dm 0755 $f ${D}${libdir}/
+    done
+    install -Dm 0644 ${WORKDIR}/tbb.pc ${D}${libdir}/pkgconfig/tbb.pc
 }
 
 # fails with thumb enabled:
@@ -41,5 +43,3 @@
 # ...
 # | make[1]: *** [concurrent_queue.o] Error 1
 ARM_INSTRUCTION_SET = "arm"
-SECURITY_CFLAGS_append = " -fPIC"
-
diff --git a/meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.8.bb b/meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.8.bb
index c1136cd..0366ad8 100644
--- a/meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.8.bb
+++ b/meta-openembedded/meta-oe/recipes-support/uim/uim_1.8.8.bb
@@ -13,6 +13,8 @@
 SRC_URI[md5sum] = "01c7bd5d0d4f3a9f6f5befe6f57a470b"
 SRC_URI[sha256sum] = "34599bbcc4e5ab87832370763e38be5100984a64237555e9234a1ea225a0fadc"
 
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
+
 DEPENDS = "anthy fontconfig libxft libxt glib-2.0 ncurses intltool libedit"
 DEPENDS_append_class-target = " intltool-native gtk+ gtk+3 uim-native takao-fonts"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.9.3.bb b/meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.9.3.bb
index 8c28c9d..da52bb5 100644
--- a/meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.9.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/uriparser/uriparser_0.9.3.bb
@@ -8,6 +8,8 @@
 SRC_URI[md5sum] = "9874b64f6f4ff656f3f69598e38f12b7"
 SRC_URI[sha256sum] = "6cef39d6eaf1a48504ee0264ce85f078758057dafb1edd0a898183b55ff76014"
 
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
+
 inherit cmake
 
 EXTRA_OECMAKE += "-DURIPARSER_BUILD_DOCS:BOOL=OFF -DURIPARSER_BUILD_TESTS:BOOL=OFF"
diff --git a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170806.bb b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20191128.bb
similarity index 75%
rename from meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170806.bb
rename to meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20191128.bb
index 6abd941..938c0f9 100644
--- a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170806.bb
+++ b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20191128.bb
@@ -7,8 +7,8 @@
 DEPENDS += "tcl-native"
 
 SRC_URI = "http://www.draisberghof.de/usb_modeswitch/${BP}.tar.bz2"
-SRC_URI[md5sum] = "fb50d15b52e909d742dd16f0a9882316"
-SRC_URI[sha256sum] = "ce413ef2a50e648e9c81bc3ea6110e7324a8bf981034fc9ec4467d3562563c2c"
+SRC_URI[md5sum] = "e8fce7eb949cbe16c61fb71bade4cc17"
+SRC_URI[sha256sum] = "3f039b60791c21c7cb15c7986cac89650f076dc274798fa242231b910785eaf9"
 
 do_install() {
     oe_runmake install DESTDIR=${D}
diff --git a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.2.bb b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.6.0.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.2.bb
rename to meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.6.0.bb
index 33e40b3..baad340 100644
--- a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.6.0.bb
@@ -1,12 +1,12 @@
 SUMMARY = "A mode switching tool for controlling 'flip flop' (multiple device) USB gear"
 LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+LIC_FILES_CHKSUM = "file://COPYING;md5=091556bd6d0154cd4c2d17a1bfc7380a"
 
 DEPENDS = "libusb1"
 
 SRC_URI = "http://www.draisberghof.de/usb_modeswitch/${BP}.tar.bz2"
-SRC_URI[md5sum] = "16b9a8efa1bf8fbd7d5612757eae4f26"
-SRC_URI[sha256sum] = "abffac09c87eacd78e101545967dc25af7e989745b4276756d45dbf4008a2ea6"
+SRC_URI[md5sum] = "be73dcc84025794081a1d4d4e5a75e4c"
+SRC_URI[sha256sum] = "c215236e6bada6e659fc195a31d611ea298a4bdb4d57a0d68c553b56585f8ba3"
 
 inherit pkgconfig systemd
 
diff --git a/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath/configure.patch b/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath/configure.patch
deleted file mode 100644
index 271e6a5..0000000
--- a/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath/configure.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-Index: usbpath/configure.ac
-===================================================================
---- usbpath.orig/configure.ac	2014-07-17 20:40:26.000000000 +0000
-+++ usbpath/configure.ac	2014-07-18 07:01:40.933474420 +0000
-@@ -1,5 +1,5 @@
- AC_INIT([usbpath],[0.1])
--AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
-+AM_INIT_AUTOMAKE([foreign])
- 
- AC_PROG_CC
- AC_PROG_RANLIB
diff --git a/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath_svn.bb b/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath_svn.bb
deleted file mode 100644
index 6c9cd04..0000000
--- a/meta-openembedded/meta-oe/recipes-support/usbpath/usbpath_svn.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-SUMMARY = "Convert the physical locations of a USB device to/from its number"
-AUTHOR = "Werner Almesberger <werner@openmoko.org>"
-SECTION = "console/utils"
-LICENSE = "GPLv2+"
-LIC_FILES_CHKSUM = "file://usbpath.c;endline=20;md5=0aa8c7d2af9110c78a99fbf9a504dc3f"
-DEPENDS = "virtual/libusb0"
-DEPENDS_class-native = "virtual/libusb0-native"
-
-BBCLASSEXTEND = "native"
-
-SRCREV = "3172"
-PV = "0.0+svnr${SRCPV}"
-
-SRC_URI = "svn://svn.openmoko.org/trunk/src/host;module=usbpath;protocol=http \
-           file://configure.patch"
-
-S = "${WORKDIR}/usbpath"
-
-inherit autotools pkgconfig
-
-RDEPENDS_${PN} += "perl"
diff --git a/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
index 71bf572..7cfd470 100644
--- a/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
+++ b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu/0001-Fix-build-on-32bit-arches-with-64bit-time_t.patch
@@ -12,8 +12,8 @@
 Signed-off-by: Khem Raj <raj.khem@gmail.com>
 ---
  src/evemu-impl.h |  5 +++++
- src/evemu.c      | 16 +++++++++-------
- 2 files changed, 14 insertions(+), 7 deletions(-)
+ src/evemu.c      | 20 ++++++++++++--------
+ 2 files changed, 17 insertions(+), 8 deletions(-)
 
 diff --git a/src/evemu-impl.h b/src/evemu-impl.h
 index acf2976..c08d861 100644
@@ -32,7 +32,7 @@
  #define EVPLAY_NBYTES	((EVPLAY_NBITS + 7) / 8)
  
 diff --git a/src/evemu.c b/src/evemu.c
-index 21187af..160c915 100644
+index 21187af..7489449 100644
 --- a/src/evemu.c
 +++ b/src/evemu.c
 @@ -363,7 +363,7 @@ int evemu_read(struct evemu_device *dev, FILE *fp)
@@ -55,16 +55,19 @@
  	ev->type = type;
  	ev->code = code;
  	ev->value = value;
-@@ -411,12 +411,14 @@ int evemu_read_event_realtime(FILE *fp, struct input_event *ev,
+@@ -410,13 +411,16 @@ int evemu_read_event_realtime(FILE *fp, struct input_event *ev,
+ 		return ret;
  
  	if (evtime) {
- 		if (!evtime->tv_sec)
+-		if (!evtime->tv_sec)
 -			*evtime = ev->time;
 -		usec = 1000000L * (ev->time.tv_sec - evtime->tv_sec);
 -		usec += ev->time.tv_usec - evtime->tv_usec;
++		if (!evtime->tv_sec) {
 +			evtime->tv_sec = ev->input_event_sec;
 +			evtime->tv_usec = ev->input_event_usec;
-+		usec = 1000000L * (ev->input_event_sec - evtime->tv_sec);
++		}
++		usec = (ev->input_event_sec - evtime->tv_sec) * 1000000L;
 +		usec += ev->input_event_usec - evtime->tv_usec;
  		if (usec > 500) {
  			usleep(usec);
diff --git a/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb
index 41d1cbf..7c5a734 100644
--- a/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/utouch/utouch-evemu_git.bb
@@ -12,7 +12,7 @@
            "
 SRCREV = "9752b50e922572e4cd214ac45ed95e4ee410fe24"
 
-PV = "1.0.5+git${SRCPV}"
+PV = "1.0.6+git${SRCPV}"
 
 S = "${WORKDIR}/git/"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.2.bb b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.6.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.2.bb
rename to meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.6.bb
index 62c2b50..89b1ee1 100644
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.6.bb
@@ -14,8 +14,8 @@
 SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
     file://Makefile.utils \
 "
-SRC_URI[md5sum] = "f4f42fd09857556b04b803fb99cc6905"
-SRC_URI[sha256sum] = "4326576e8428ea3626194fc82646347576e94c61f11d412a669fc8a10c2a1e67"
+SRC_URI[md5sum] = "fe6328d22dfb20ea372daa4b58b12374"
+SRC_URI[sha256sum] = "b031c30d770f28c5f884071ad933e8c1f83e65b93aaba03a4012077c1d90a54f"
 
 S = "${WORKDIR}/vbox_module"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-Replace-make_shared-with-new-in-some-cases.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-Replace-make_shared-with-new-in-some-cases.patch
deleted file mode 100644
index 0c8285d..0000000
--- a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-Replace-make_shared-with-new-in-some-cases.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From 080fc37949114184d4832f7acffe2613745833f3 Mon Sep 17 00:00:00 2001
-From: Stefan Floeren <42731906+stefan-floeren@users.noreply.github.com>
-Date: Tue, 16 Apr 2019 08:38:01 +0200
-Subject: [PATCH 1/2] Replace make_shared with new in some cases
-
-Replace make_shared for asio types that take a lib::ref as a parameter.
-This should fix the ASIO change (boostorg/asio@59066d8) for 1.70,
-while keeping it backwards compatible to older boost versions.
----
- websocketpp/transport/asio/connection.hpp    | 7 ++++---
- websocketpp/transport/asio/endpoint.hpp      | 3 +--
- websocketpp/transport/asio/security/none.hpp | 3 +--
- websocketpp/transport/asio/security/tls.hpp  | 3 +--
- 4 files changed, 7 insertions(+), 9 deletions(-)
-
-diff --git a/websocketpp/transport/asio/connection.hpp b/websocketpp/transport/asio/connection.hpp
-index 60f88a7..1ccda8f 100644
---- a/websocketpp/transport/asio/connection.hpp
-+++ b/websocketpp/transport/asio/connection.hpp
-@@ -311,9 +311,10 @@ public:
-      * needed.
-      */
-     timer_ptr set_timer(long duration, timer_handler callback) {
--        timer_ptr new_timer = lib::make_shared<lib::asio::steady_timer>(
--            lib::ref(*m_io_service),
--            lib::asio::milliseconds(duration)
-+        timer_ptr new_timer(
-+            new lib::asio::steady_timer(
-+                *m_io_service,
-+                lib::asio::milliseconds(duration))
-         );
- 
-         if (config::enable_multithreading) {
-diff --git a/websocketpp/transport/asio/endpoint.hpp b/websocketpp/transport/asio/endpoint.hpp
-index ddab2c7..4b719a9 100644
---- a/websocketpp/transport/asio/endpoint.hpp
-+++ b/websocketpp/transport/asio/endpoint.hpp
-@@ -195,8 +195,7 @@ public:
- 
-         m_io_service = ptr;
-         m_external_io_service = true;
--        m_acceptor = lib::make_shared<lib::asio::ip::tcp::acceptor>(
--            lib::ref(*m_io_service));
-+        m_acceptor.reset(new lib::asio::ip::tcp::acceptor(*m_io_service));
- 
-         m_state = READY;
-         ec = lib::error_code();
-diff --git a/websocketpp/transport/asio/security/none.hpp b/websocketpp/transport/asio/security/none.hpp
-index 5c8293d..6c7d352 100644
---- a/websocketpp/transport/asio/security/none.hpp
-+++ b/websocketpp/transport/asio/security/none.hpp
-@@ -168,8 +168,7 @@ protected:
-             return socket::make_error_code(socket::error::invalid_state);
-         }
- 
--        m_socket = lib::make_shared<lib::asio::ip::tcp::socket>(
--            lib::ref(*service));
-+        m_socket.reset(new lib::asio::ip::tcp::socket(*service));
- 
-         if (m_socket_init_handler) {
-             m_socket_init_handler(m_hdl, *m_socket);
-diff --git a/websocketpp/transport/asio/security/tls.hpp b/websocketpp/transport/asio/security/tls.hpp
-index c76fd9a..04ac379 100644
---- a/websocketpp/transport/asio/security/tls.hpp
-+++ b/websocketpp/transport/asio/security/tls.hpp
-@@ -193,8 +193,7 @@ protected:
-         if (!m_context) {
-             return socket::make_error_code(socket::error::invalid_tls_context);
-         }
--        m_socket = lib::make_shared<socket_type>(
--            _WEBSOCKETPP_REF(*service),lib::ref(*m_context));
-+        m_socket.reset(new socket_type(*service, *m_context));
- 
-         if (m_socket_init_handler) {
-             m_socket_init_handler(m_hdl, get_socket());
--- 
-2.23.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0002-Fix-missed-entries-fix-testing.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0002-Fix-missed-entries-fix-testing.patch
deleted file mode 100644
index 962d089..0000000
--- a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0002-Fix-missed-entries-fix-testing.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 12ab603ca962e83591985a585451d33544d75d56 Mon Sep 17 00:00:00 2001
-From: Stefan Floeren <42731906+stefan-floeren@users.noreply.github.com>
-Date: Wed, 17 Apr 2019 10:06:18 +0000
-Subject: [PATCH 2/2] Fix missed entries; fix testing
-
----
- CMakeLists.txt                            | 2 +-
- websocketpp/transport/asio/connection.hpp | 3 +--
- websocketpp/transport/asio/endpoint.hpp   | 7 ++-----
- 3 files changed, 4 insertions(+), 8 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 2786aba..951de97 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -202,7 +202,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES)
- 	endif ()
- 
-     if (NOT Boost_USE_STATIC_LIBS)
--        add_definitions (/DBOOST_TEST_DYN_LINK)
-+        add_definitions (-DBOOST_TEST_DYN_LINK)
-     endif ()
- 
-     set (Boost_FIND_REQUIRED TRUE)
-diff --git a/websocketpp/transport/asio/connection.hpp b/websocketpp/transport/asio/connection.hpp
-index 1ccda8f..57dda74 100644
---- a/websocketpp/transport/asio/connection.hpp
-+++ b/websocketpp/transport/asio/connection.hpp
-@@ -462,8 +462,7 @@ protected:
-         m_io_service = io_service;
- 
-         if (config::enable_multithreading) {
--            m_strand = lib::make_shared<lib::asio::io_service::strand>(
--                lib::ref(*io_service));
-+            m_strand.reset(new lib::asio::io_service::strand(*io_service));
-         }
- 
-         lib::error_code ec = socket_con_type::init_asio(io_service, m_strand,
-diff --git a/websocketpp/transport/asio/endpoint.hpp b/websocketpp/transport/asio/endpoint.hpp
-index 4b719a9..94509ad 100644
---- a/websocketpp/transport/asio/endpoint.hpp
-+++ b/websocketpp/transport/asio/endpoint.hpp
-@@ -687,9 +687,7 @@ public:
-      * @since 0.3.0
-      */
-     void start_perpetual() {
--        m_work = lib::make_shared<lib::asio::io_service::work>(
--            lib::ref(*m_io_service)
--        );
-+        m_work.reset(new lib::asio::io_service::work(*m_io_service));
-     }
- 
-     /// Clears the endpoint's perpetual flag, allowing it to exit when empty
-@@ -853,8 +851,7 @@ protected:
- 
-         // Create a resolver
-         if (!m_resolver) {
--            m_resolver = lib::make_shared<lib::asio::ip::tcp::resolver>(
--                lib::ref(*m_io_service));
-+            m_resolver.reset(new lib::asio::ip::tcp::resolver(*m_io_service));
-         }
- 
-         tcon->set_uri(u);
--- 
-2.23.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/771.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/771.patch
deleted file mode 100644
index bc65efb..0000000
--- a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/771.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 4bccfb04a264704ec9b80ba332ee1cf113ce7f1b Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Wolfgang=20St=C3=B6ggl?= <c72578@yahoo.de>
-Date: Thu, 1 Nov 2018 20:58:10 +0100
-Subject: [PATCH] Update version number in CMakeLists.txt to 0.8.1
-
----
- CMakeLists.txt | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 2786aba9..2d13117b 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -24,7 +24,7 @@ endif ()
- ############ Project name and version
- set (WEBSOCKETPP_MAJOR_VERSION 0)
- set (WEBSOCKETPP_MINOR_VERSION 8)
--set (WEBSOCKETPP_PATCH_VERSION 0)
-+set (WEBSOCKETPP_PATCH_VERSION 1)
- set (WEBSOCKETPP_VERSION ${WEBSOCKETPP_MAJOR_VERSION}.${WEBSOCKETPP_MINOR_VERSION}.${WEBSOCKETPP_PATCH_VERSION})
- 
- if(POLICY CMP0048)
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/842.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/842.patch
deleted file mode 100644
index c3651e9..0000000
--- a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/842.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 7f7e2be01b4fa6580ce27f668e61adf37853ad67 Mon Sep 17 00:00:00 2001
-From: Schrijvers Luc <begasus@gmail.com>
-Date: Wed, 18 Sep 2019 11:35:43 +0200
-Subject: [PATCH] Fix "include" directory installation. the variable
- INSTALL_INCLUDE_DIR already exists, and defaults to include if not
- specificied otherwise. Using it allows people to customize the installation
- from outside, fixing issues with other OS like Haiku
-
-Signed-off-by: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
-Signed-off-by: Gianfranco Costamagna <locutusofborg@debian.org>
----
- cmake/CMakeHelpers.cmake | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/cmake/CMakeHelpers.cmake b/cmake/CMakeHelpers.cmake
-index 1478f4b..f603632 100644
---- a/cmake/CMakeHelpers.cmake
-+++ b/cmake/CMakeHelpers.cmake
-@@ -80,7 +80,7 @@ macro (final_target)
-     endif ()
- 
-     install (DIRECTORY ${CMAKE_SOURCE_DIR}/${TARGET_NAME}
--             DESTINATION include/
-+             DESTINATION ${INSTALL_INCLUDE_DIR}/
-              FILES_MATCHING PATTERN "*.hpp*")
- endmacro ()
- 
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-Correct-clang-compiler-flags.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/0001-Correct-clang-compiler-flags.patch
similarity index 95%
rename from meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-Correct-clang-compiler-flags.patch
rename to meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/0001-Correct-clang-compiler-flags.patch
index f1d037f..7a99daf 100644
--- a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-Correct-clang-compiler-flags.patch
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/0001-Correct-clang-compiler-flags.patch
@@ -18,7 +18,7 @@
 index 2d13117..c17354a 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -150,7 +150,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES)
+@@ -154,7 +154,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES)
          endif()
          set (WEBSOCKETPP_PLATFORM_TLS_LIBS ssl crypto)
          set (WEBSOCKETPP_BOOST_LIBS system thread)
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-cmake-Use-GNUInstallDirs.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/0001-cmake-Use-GNUInstallDirs.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/0001-cmake-Use-GNUInstallDirs.patch
rename to meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/0001-cmake-Use-GNUInstallDirs.patch
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/855.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/855.patch
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/855.patch
rename to meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/855.patch
index a1ee627..3245d94 100644
--- a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/855.patch
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/855.patch
@@ -12,7 +12,7 @@
 index 2d13117b..9a46bc10 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -213,7 +213,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES)
+@@ -217,7 +217,7 @@ if (BUILD_TESTS OR BUILD_EXAMPLES)
      set (Boost_USE_MULTITHREADED TRUE)
      set (Boost_ADDITIONAL_VERSIONS "1.39.0" "1.40.0" "1.41.0" "1.42.0" "1.43.0" "1.44.0" "1.46.1") # todo: someone who knows better spesify these!
  
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/857.patch b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/857.patch
similarity index 100%
rename from meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.1/857.patch
rename to meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp-0.8.2/857.patch
diff --git a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.8.1.bb b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.8.2.bb
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.8.1.bb
rename to meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.8.2.bb
index af6d30a..79a5ac5 100644
--- a/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.8.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/websocketpp/websocketpp_0.8.2.bb
@@ -7,11 +7,7 @@
 DEPENDS = " ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'openssl boost zlib', '', d)} "
 
 SRC_URI = "git://github.com/zaphoyd/websocketpp.git;protocol=https \
-           file://0001-Replace-make_shared-with-new-in-some-cases.patch \
-           file://0002-Fix-missed-entries-fix-testing.patch \
            file://0001-cmake-Use-GNUInstallDirs.patch \
-           file://842.patch \
-           file://771.patch \
            file://855.patch \
            file://857.patch \
            file://0001-Correct-clang-compiler-flags.patch \
@@ -25,8 +21,8 @@
 # to add this package to an SDK, since it isn't a reverse-dependency of anything, just use something like this:
 # TOOLCHAIN_TARGET_TASK_append = " websocketpp-dev"
 
-# tag 0.8.1
-SRCREV= "c6d7e295bf5a0ab9b5f896720cc1a0e0fdc397a7"
+# tag 0.8.2
+SRCREV= "56123c87598f8b1dd471be83ca841ceae07f95ba"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0001-makefile-Pass-CFLAGS-to-compile.patch b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0001-makefile-Pass-CFLAGS-to-compile.patch
deleted file mode 100644
index 90eff5b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0001-makefile-Pass-CFLAGS-to-compile.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 0378cbb323c662a565f7f3de2dee3d8a646e7bd1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 27 Jun 2017 09:32:42 -0700
-Subject: [PATCH 1/2] makefile: Pass CFLAGS to compile
-
-Set CC if not already set
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- host/tools/wmiconfig/Makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/host/tools/wmiconfig/Makefile b/host/tools/wmiconfig/Makefile
-index c6738c5..3253a7e 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,4 +1,4 @@
--CC :=$(ATH_CROSS_COMPILE_TYPE)gcc
-+CC ?= $(ATH_CROSS_COMPILE_TYPE)gcc
- 
- all:
--	$(CC) -Wall -DUSER_KEYS -g $(LDFLAGS) -I../../include -I../../../include -I../../wlan/include -I../../os/linux/include wmiconfig.c -o wmiconfig
-+	$(CC) -Wall -DUSER_KEYS -g $(CFLAGS) $(LDFLAGS) -I../../include -I../../../include -I../../wlan/include -I../../os/linux/include wmiconfig.c -o wmiconfig
--- 
-2.13.2
-
diff --git a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0002-fix-err-API-to-have-format-string.patch b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0002-fix-err-API-to-have-format-string.patch
deleted file mode 100644
index f67f784..0000000
--- a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig/0002-fix-err-API-to-have-format-string.patch
+++ /dev/null
@@ -1,656 +0,0 @@
-From 909ebdde4ee2233d65de8fa01fde8e9a3bec12b7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 27 Jun 2017 09:33:26 -0700
-Subject: [PATCH 2/2] fix err() API to have format string
-
-Fixes errors with hardening flags
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- host/tools/wmiconfig/wmiconfig.c | 148 +++++++++++++++++++--------------------
- 1 file changed, 74 insertions(+), 74 deletions(-)
-
-diff --git a/host/tools/wmiconfig/wmiconfig.c b/host/tools/wmiconfig/wmiconfig.c
-index 21c9dcd..a6ec481 100644
---- a/wmiconfig.c
-+++ b/wmiconfig.c
-@@ -483,7 +483,7 @@ main (int argc, char **argv)
-     strcpy(ifname, ethIf);
-     s = socket(AF_INET, SOCK_DGRAM, 0);
-     if (s < 0) {
--        err(1, "socket");
-+        err(1, "%s", "socket");
-     }
- 
-     while (1) {
-@@ -1506,28 +1506,28 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)filterCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SETBSSFILTER, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_POWER_MODE:
-         ifr.ifr_data = (void *)pwrCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SETPWR, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_PM_PARAMS:
-         ifr.ifr_data = (void *)pmParamCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_PMPARAMS, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_IBSS_PM_CAPS:
-         ifr.ifr_data = (void *)adhocPmCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_IBSS_PM_CAPS, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_ERROR_DETECTION:
-@@ -1535,7 +1535,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_HB_CHALLENGE_RESP:
-@@ -1543,7 +1543,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
- #ifdef USER_KEYS
-@@ -1554,7 +1554,7 @@ main (int argc, char **argv)
- 
-             if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-             {
--                err(1, ifr.ifr_name);
-+                err(1, "%s", ifr.ifr_name);
-             }
- 
-             break;
-@@ -1575,7 +1575,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)sParamCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SETSCAN, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_VERSION:
-@@ -1586,7 +1586,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)revinfo;
-         if (ioctl(s, AR6000_IOCTL_WMI_GETREV, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         printf("Host Rev = 0x%x(%u.%u.%u.%u), Target Rev = 0x%x(%u.%u.%u.%u)\n",
-               revinfo->host_ver,
-@@ -1606,14 +1606,14 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)listenCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SETLISTENINT, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_BMISS_TIME:
-         ifr.ifr_data = (void *)bmissCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_BMISS_TIME, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_RSSI_THRESHOLDS:
-@@ -1621,14 +1621,14 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_SNR_THRESHOLDS:
-         ifr.ifr_data = (void *)snrThresholdParam;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_SNRTHRESHOLD, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_CLR_RSSISNR:
-@@ -1636,7 +1636,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_LQ_THRESHOLDS:
-@@ -1644,7 +1644,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_CHANNEL:
-@@ -1693,18 +1693,18 @@ main (int argc, char **argv)
-  
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_CHANNELPARAMS, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_SSID:
-         if (index > MAX_PROBED_SSID_INDEX) {
-             printf("num option for ssid command too large\n");
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-             break;
-         }
-         if (strlen((char *)ssid) > sizeof (ssidCmd->ssid)) {
-             printf("ssid name too large\n");
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-             break;
-         }
-         ssidCmd->entryIndex = index;
-@@ -1722,7 +1722,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)ssidCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_PROBEDSSID, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_BADAP:
-@@ -1735,7 +1735,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)badApCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_BADAP, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_CREATE_QOS:
-@@ -1794,7 +1794,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)crePStreamCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_CREATE_QOS, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_TARGET_STATS:
-@@ -1807,7 +1807,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)&tgtStatsCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_GET_TARGET_STATS, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         printTargetStats(&(tgtStatsCmd.targetStats));
-         break;
-@@ -1815,7 +1815,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)pBitMask;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_ERROR_REPORT_BITMASK, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_DELETE_QOS:
-@@ -1824,7 +1824,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)delPStreamCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_DELETE_QOS, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_QOS_QUEUE:
-@@ -1840,7 +1840,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)getQosQueueCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_GET_QOS_QUEUE, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
- 
-         printf("Active TSIDs \n");
-@@ -1855,7 +1855,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)ieInfo;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_ASSOC_INFO, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_AC_PARAMS:
-@@ -1871,14 +1871,14 @@ main (int argc, char **argv)
-         ifr.ifr_data = (void *)acParamsCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_ACCESS_PARAMS, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_DISC_TIMEOUT:
-         ifr.ifr_data = (void *)discCmd;
-         if (ioctl(s, AR6000_IOCTL_WMI_SET_DISC_TIMEOUT, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-      case WMI_SET_ADHOC_BSSID:
-@@ -1887,7 +1887,7 @@ main (int argc, char **argv)
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
-             printf("fail to set adhoc bssid \n");
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_OPT_MODE:
-@@ -1895,7 +1895,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_OPT_SEND_FRAME:
-@@ -1903,7 +1903,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_BEACON_INT:
-@@ -1911,7 +1911,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_VOICE_PKT_SIZE:
-@@ -1919,7 +1919,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_MAX_SP:
-@@ -1927,7 +1927,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_ROAM_TBL:
-@@ -1935,7 +1935,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_ROAM_CTRL:
-@@ -1943,7 +1943,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_POWERSAVE_TIMERS:
-@@ -1951,7 +1951,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_POWER_MODE:
-@@ -1959,7 +1959,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         printf("Power mode is %s\n",
-                (getPowerMode->powerMode == MAX_PERF_POWER) ? "maxperf" : "rec");
-@@ -1969,7 +1969,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_ROAM_DATA:
-@@ -1977,7 +1977,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_BT_STATUS:
-@@ -1985,7 +1985,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_BT_PARAMS:
-@@ -1993,7 +1993,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;   
-     case WMI_SET_RETRYLIMITS:
-@@ -2001,14 +2001,14 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_START_SCAN:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_STARTSCAN;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_FIX_RATES:
-@@ -2031,14 +2031,14 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_FIX_RATES:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_GETFIXRATES;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         } else {
-             int i;
-             printf("Fix rate set index:");
-@@ -2057,7 +2057,7 @@ main (int argc, char **argv)
-         index--;
-         setAuthMode->mode = atoi(argv[index]);
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_REASSOC_MODE:
-@@ -2067,42 +2067,42 @@ main (int argc, char **argv)
-         index--;
-         setReassocMode->mode = atoi(argv[index]);
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_LPREAMBLE:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_LPREAMBLE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_RTS:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_RTS;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_WMM:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_WMM;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_TXOP:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_TXOP;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case DIAG_READ:
-         ((int *)buf)[0] = AR6000_XIOCTL_DIAG_READ;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         printf("diagdata: 0x%x\n", *diagdata);
-         break;
-@@ -2110,7 +2110,7 @@ main (int argc, char **argv)
-         ((int *)buf)[0] = AR6000_XIOCTL_DIAG_WRITE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_RD:
-@@ -2118,7 +2118,7 @@ main (int argc, char **argv)
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0)
-         {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         else
-         {
-@@ -2139,14 +2139,14 @@ main (int argc, char **argv)
-         index--;
-         setKeepAlive->keepaliveInterval = atoi(argv[index]);
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_KEEPALIVE:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_GET_KEEPALIVE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         printf("Keepalive interval is %d secs and AP is %s\n",
-                getKeepAlive->keepaliveInterval, (getKeepAlive->configured ?
-@@ -2156,63 +2156,63 @@ main (int argc, char **argv)
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_APPIE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_MGMT_FRM_RX_FILTER:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_MGMT_FRM_RX_FILTER;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_DBGLOG_CFG_MODULE:
-         ((int *)buf)[0] = AR6000_XIOCTL_DBGLOG_CFG_MODULE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_DBGLOG_GET_DEBUG_LOGS:
-         ((int *)buf)[0] = AR6000_XIOCTL_DBGLOG_GET_DEBUG_LOGS;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_HOST_SLEEP_MODE:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_HOST_SLEEP_MODE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_WOW_MODE:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_WOW_MODE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_ADD_WOW_PATTERN:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_ADD_WOW_PATTERN;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_DEL_WOW_PATTERN:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_DEL_WOW_PATTERN;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_GET_WOW_LIST:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_GET_WOW_LIST;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case DIAG_DUMP_CHIP_MEM:
-@@ -2225,7 +2225,7 @@ main (int argc, char **argv)
-                 ((int *)buf)[0] = AR6000_XIOCTL_DIAG_READ;
-                 ifr.ifr_data = buf;
-                 if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--                    err(1, ifr.ifr_name);
-+                    err(1, "%s", ifr.ifr_name);
-                 }
-                 printf("0x%04x:0x%04x\n", *diagaddr, *diagdata);
-             }
-@@ -2237,21 +2237,21 @@ main (int argc, char **argv)
-         index = optind - 1;
-         *connectCtrlFlags = strtoul(argv[index], NULL, 0);
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case DUMP_HTC_CREDITS:        
-         ((int *)buf)[0] = AR6000_XIOCTL_DUMP_HTC_CREDIT_STATE;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_AKMP_INFO:
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_AKMP_PARAMS;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_PMKID_LIST:
-@@ -2259,7 +2259,7 @@ main (int argc, char **argv)
-             ((int *)buf)[0] = AR6000_XIOCTL_WMI_SET_PMKID_LIST;
-             ifr.ifr_data = buf;
-             if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--                err(1, ifr.ifr_name);
-+                err(1, "%s", ifr.ifr_name);
-             }
-         } else {
-             printf("No PMKIDs entered\n");
-@@ -2269,7 +2269,7 @@ main (int argc, char **argv)
-         ((int *)buf)[0] = AR6000_XIOCTL_WMI_GET_PMKID_LIST;
-         ifr.ifr_data = buf;
-         if (ioctl(s, AR6000_IOCTL_EXTENDED, &ifr) < 0) {
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     case WMI_SET_BSS_PMKID_INFO:
-@@ -2277,7 +2277,7 @@ main (int argc, char **argv)
-         iwr.u.data.length = sizeof(*pi_cmd);
-         if (ioctl(s, IEEE80211_IOCTL_ADDPMKID, &iwr) < 0) {
-             printf("ADDPMKID IOCTL Error\n");
--            err(1, ifr.ifr_name);
-+            err(1, "%s", ifr.ifr_name);
-         }
-         break;
-     default:
--- 
-2.13.2
-
diff --git a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig_svn.bb b/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig_svn.bb
deleted file mode 100644
index c66572b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/wmiconfig/wmiconfig_svn.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Atheros 6K Wifi configuration utility"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://wmiconfig.c;endline=19;md5=4394a56bca1c5b2446c9f8e406c82911"
-SECTION = "console/network"
-SRCREV = "5394"
-PV = "0.0.0+svnr${SRCPV}"
-PR = "r2"
-
-SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=AR6kSDK.build_sw.18;protocol=http \
-           file://0001-makefile-Pass-CFLAGS-to-compile.patch \
-           file://0002-fix-err-API-to-have-format-string.patch \
-           "
-S = "${WORKDIR}/AR6kSDK.build_sw.18/host/tools/wmiconfig"
-
-CLEANBROKEN = "1"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS="
-
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-do_install() {
-    install -d ${D}${bindir}
-    install -m 0755 wmiconfig ${D}${bindir}
-}
-
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-nss-nspr-fix-for-multilib.patch b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-nss-nspr-fix-for-multilib.patch
new file mode 100644
index 0000000..53c1197
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-nss-nspr-fix-for-multilib.patch
@@ -0,0 +1,52 @@
+From 9ed3b4e628f9254d5c86006fe63c33a1eb02aee5 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Tue, 4 Feb 2020 23:39:49 -0800
+Subject: [PATCH] nss/nspr: fix for multilib
+
+Upstream-Status: Pending
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ configure.ac | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index b46d97d..39f4318 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -920,24 +920,24 @@ fi
+ dnl Priority 1: User specifies the path to installation
+ if test "z$NSPR_FOUND" = "zno" -a "z$with_nspr" != "z" -a "z$with_nspr" != "zyes" ; then
+     AC_MSG_CHECKING(for nspr library installation in "$with_nspr" folder)
+-    if test -f "$with_nspr/include/$NSPR_INCLUDE_MARKER" -a -f "$with_nspr/lib/$NSPR_LIB_MARKER" ; then
+-        NSPR_INCLUDE_PATH="$with_nspr/include"
+-        NSPR_LIB_PATH="$with_nspr/lib"
++    if test -f "$with_nspr/${includedir}/$NSPR_INCLUDE_MARKER" -a -f "$with_nspr/${libdir}/$NSPR_LIB_MARKER" ; then
++        NSPR_INCLUDE_PATH="$with_nspr/${includedir}"
++        NSPR_LIB_PATH="$with_nspr/${libdir}"
+         NSPR_FOUND="yes"
+         AC_MSG_RESULT([yes])
+     else
+-        AC_MSG_ERROR([not found: "$with_nspr/include/$NSPR_INCLUDE_MARKER" and/or "$with_nspr/lib/$NSPR_LIB_MARKER" files don't exist), typo?])
++        AC_MSG_ERROR([not found: "$with_nspr/${includedir}/$NSPR_INCLUDE_MARKER" and/or "$with_nspr/${libdir}/$NSPR_LIB_MARKER" files don't exist), typo?])
+     fi
+ fi
+ if test "z$NSS_FOUND" = "zno" -a "z$with_nss" != "z" -a "z$with_nss" != "zyes" ; then
+     AC_MSG_CHECKING(for nss library installation in "$with_nss" folder)
+-    if test -f "$with_nss/include/$NSS_INCLUDE_MARKER" -a -f "$with_nss/lib/$NSS_LIB_MARKER" ; then
+-        NSS_INCLUDE_PATH="$with_nss/include"
+-        NSS_LIB_PATH="$with_nss/lib"
++    if test -f "$with_nss/${includedir}/$NSS_INCLUDE_MARKER" -a -f "$with_nss/${libdir}/$NSS_LIB_MARKER" ; then
++        NSS_INCLUDE_PATH="$with_nss/${includedir}"
++        NSS_LIB_PATH="$with_nss/${libdir}"
+         NSS_FOUND="yes"
+         AC_MSG_RESULT([yes])
+     else
+-        AC_MSG_ERROR([not found: "$with_nss/include/$NSS_INCLUDE_MARKER" and/or "$with_nss/lib/$NSS_LIB_MARKER" files don't exist), typo?])
++        AC_MSG_ERROR([not found: "$with_nss/${includedir}/$NSS_INCLUDE_MARKER" and/or "$with_nss/${libdir}/$NSS_LIB_MARKER" files don't exist), typo?])
+     fi
+ fi
+ 
+-- 
+2.21.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/change-finding-path-of-nss.patch b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/change-finding-path-of-nss.patch
index 1cec47f..1451ff5 100644
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/change-finding-path-of-nss.patch
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/change-finding-path-of-nss.patch
@@ -16,12 +16,8 @@
 index 951b3eb..1fdeb0f 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -866,10 +866,10 @@ MOZILLA_MIN_VERSION="1.4"
- NSS_CRYPTO_LIB="$XMLSEC_PACKAGE-nss"
- NSPR_PACKAGE=mozilla-nspr
- NSS_PACKAGE=mozilla-nss
--NSPR_INCLUDE_MARKER="nspr/nspr.h"
-+NSPR_INCLUDE_MARKER="nspr.h"
+@@ -866,7 +866,7 @@ MOZILLA_MIN_VERSION="1.4"
+ NSPR_INCLUDE_MARKER="nspr/nspr.h"
  NSPR_LIB_MARKER="libnspr4$shrext"
  NSPR_LIBS_LIST="-lnspr4 -lplds4 -lplc4"
 -NSS_INCLUDE_MARKER="nss/nss.h"
@@ -29,39 +25,3 @@
  NSS_LIB_MARKER="libnss3$shrext"
  NSS_LIBS_LIST="-lnss3 -lsmime3"
  
-@@ -898,24 +898,24 @@ fi
- dnl Priority 1: User specifies the path to installation
- if test "z$NSPR_FOUND" = "zno" -a "z$with_nspr" != "z" -a "z$with_nspr" != "zyes" ; then
-     AC_MSG_CHECKING(for nspr library installation in "$with_nspr" folder)
--    if test -f "$with_nspr/include/$NSPR_INCLUDE_MARKER" -a -f "$with_nspr/lib/$NSPR_LIB_MARKER" ; then
--        NSPR_INCLUDE_PATH="$with_nspr/include"
--        NSPR_LIB_PATH="$with_nspr/lib"
-+    if test -f "$with_nspr/usr/include/$NSPR_INCLUDE_MARKER" -a -f "$with_nspr/${libdir}/$NSPR_LIB_MARKER" ; then
-+        NSPR_INCLUDE_PATH="$with_nspr/usr/include"
-+        NSPR_LIB_PATH="$with_nspr/${libdir}"
-         NSPR_FOUND="yes"
-         AC_MSG_RESULT([yes])
-     else
--        AC_MSG_ERROR([not found: "$with_nspr/include/$NSPR_INCLUDE_MARKER" and/or "$with_nspr/lib/$NSPR_LIB_MARKER" files don't exist), typo?])
-+        AC_MSG_ERROR([not found: "$with_nspr/usr/include/$NSPR_INCLUDE_MARKER" and/or "$with_nspr/${libdir}/$NSPR_LIB_MARKER" files don't exist), typo?])
-     fi
- fi
- if test "z$NSS_FOUND" = "zno" -a "z$with_nss" != "z" -a "z$with_nss" != "zyes" ; then
-     AC_MSG_CHECKING(for nss library installation in "$with_nss" folder)
--    if test -f "$with_nss/include/$NSS_INCLUDE_MARKER" -a -f "$with_nss/lib/$NSS_LIB_MARKER" ; then
--        NSS_INCLUDE_PATH="$with_nss/include"
--        NSS_LIB_PATH="$with_nss/lib"
-+    if test -f "$with_nss/usr/include/$NSS_INCLUDE_MARKER" -a -f "$with_nss/${libdir}/$NSS_LIB_MARKER" ; then
-+        NSS_INCLUDE_PATH="$with_nss/usr/include/nss3"
-+        NSS_LIB_PATH="$with_nss/${libdir}"
-         NSS_FOUND="yes"
-         AC_MSG_RESULT([yes])
-     else
--        AC_MSG_ERROR([not found: "$with_nss/include/$NSS_INCLUDE_MARKER" and/or "$with_nss/lib/$NSS_LIB_MARKER" files don't exist), typo?])
-+        AC_MSG_ERROR([not found: "$with_nss/usr/include/$NSS_INCLUDE_MARKER" and/or "$with_nss/${libdir}/$NSS_LIB_MARKER" files don't exist), typo?])
-     fi
- fi
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.29.bb b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.30.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.29.bb
rename to meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.30.bb
index 40c585e..20c7b2d 100644
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.29.bb
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.30.bb
@@ -17,21 +17,22 @@
     file://change-finding-path-of-nss.patch \
     file://makefile-ptest.patch \
     file://xmlsec1-examples-allow-build-in-separate-dir.patch \
+    file://0001-nss-nspr-fix-for-multilib.patch \
     file://run-ptest \
     "
 
-SRC_URI[md5sum] = "4755621ff2a7150e208de6bd7decca10"
-SRC_URI[sha256sum] = "b1d1deba966019930f608d1f2b95c40ca3450f1393bcd3a3c001a8ba1d2839ab"
+SRC_URI[md5sum] = "b66ec21e0a0ac331afb4b1bc5c9ef966"
+SRC_URI[sha256sum] = "2d84360b03042178def1d9ff538acacaed2b3a27411db7b2874f1612ed71abc8"
 
 inherit autotools-brokensep ptest pkgconfig
 
-CFLAGS += "-I${STAGING_INCDIR}/nspr4 -I${STAGING_INCDIR}/nss3"
-CPPFLAGS += "-I${STAGING_INCDIR}/nspr4 -I${STAGING_INCDIR}/nss3"
+#CFLAGS += "-I${STAGING_INCDIR}/nss3"
+#CPPFLAGS += "-I${STAGING_INCDIR}/nss3"
 
 PACKAGECONFIG ??= "gnutls libgcrypt nss openssl des"
 PACKAGECONFIG[gnutls] = ",,gnutls"
 PACKAGECONFIG[libgcrypt] = ",,libgcrypt"
-PACKAGECONFIG[nss] = "--with-nss=${STAGING_LIBDIR}/../.. --with-nspr=${STAGING_LIBDIR}/../..,,nss nspr"
+PACKAGECONFIG[nss] = "--with-nss=${STAGING_DIR_HOST} --with-nspr=${STAGING_DIR_HOST},,nss nspr"
 PACKAGECONFIG[openssl] = ",,openssl"
 PACKAGECONFIG[des] = ",--disable-des,,"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/xxhash/xxhash_0.7.3.bb b/meta-openembedded/meta-oe/recipes-support/xxhash/xxhash_0.7.3.bb
new file mode 100644
index 0000000..865adc5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/xxhash/xxhash_0.7.3.bb
@@ -0,0 +1,21 @@
+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"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=01a7eba4212ef1e882777a38585e7a9b"
+
+SRC_URI = "git://github.com/Cyan4973/xxHash.git"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
+SRCREV = "d408e9b0606d07b1ddc5452ffc0ec8512211b174"
+
+S = "${WORKDIR}/git"
+
+do_compile () {
+	oe_runmake all
+}
+
+do_install () {
+	oe_runmake DESTDIR=${D} install
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk/0001-zck.h-fix-build-on-musl.patch b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk/0001-zck.h-fix-build-on-musl.patch
new file mode 100644
index 0000000..64e0e8e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk/0001-zck.h-fix-build-on-musl.patch
@@ -0,0 +1,39 @@
+From 78247d478cec254bad27f4ed97b532f4f54bf1b0 Mon Sep 17 00:00:00 2001
+From: Pierre-Jean Texier <pjtexier@koncepto.io>
+Date: Thu, 23 Jan 2020 19:14:40 +0100
+Subject: [PATCH 1/2] zck.h: fix build on musl
+
+The ssize_t type requires the <sys/types.h> header. This fixes build with musl
+libc:
+
+include/zck.h:68:1: error: unknown type name 'ssize_t'; did you mean 'size_t'?
+   68 | ssize_t zck_read(zckCtx *zck, char *dst, size_t dst_size)
+      | ^~~~~~~
+      | size_t
+include/zck.h:81:1: error: unknown type name 'ssize_t'; did you mean 'size_t'?
+   81 | ssize_t zck_write(zckCtx *zck, const char *src, const size_t src_size)
+      | ^~~~~~~
+      | size_t
+      
+Upstream-Status: Submitted [https://github.com/zchunk/zchunk/pull/23]
+
+Signed-off-by: Pierre-Jean Texier <pjtexier@koncepto.io>
+---
+ include/zck.h.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/zck.h.in b/include/zck.h.in
+index 91d2557..b847576 100644
+--- a/include/zck.h.in
++++ b/include/zck.h.in
+@@ -5,6 +5,7 @@
+ 
+ #include <stdlib.h>
+ #include <stdbool.h>
++#include <sys/types.h>
+ 
+ typedef enum zck_hash {
+     ZCK_HASH_SHA1,
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk/0002-unzck-fix-build-with-musl-libc.patch b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk/0002-unzck-fix-build-with-musl-libc.patch
new file mode 100644
index 0000000..a1c95bf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk/0002-unzck-fix-build-with-musl-libc.patch
@@ -0,0 +1,61 @@
+From 72c55e3da59eccdfea3778d11f83862b58af723d Mon Sep 17 00:00:00 2001
+From: Pierre-Jean Texier <pjtexier@koncepto.io>
+Date: Thu, 23 Jan 2020 22:42:40 +0100
+Subject: [PATCH 2/2] unzck: fix build with musl libc
+
+On musl libc "stdout" is a preprocessor macro whose expansion leads to
+compilation errors.
+
+Fixes:
+
+| In file included from ../git/src/unzck.c:31:
+| ../git/src/unzck.c: In function 'parse_opt':
+| ../git/src/unzck.c:78:24: error: expected identifier before '(' token
+|    78 |             arguments->stdout = true;
+|       |                        ^~~~~~
+| ../git/src/unzck.c: In function 'main':
+| ../git/src/unzck.c:141:20: error: expected identifier before '(' token
+|   141 |     if(!(arguments.stdout)) {
+|       |                    ^~~~~~
+
+Upstream-Status: Submitted [https://github.com/zchunk/zchunk/pull/23]
+
+Signed-off-by: Pierre-Jean Texier <pjtexier@koncepto.io>
+---
+ src/unzck.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/unzck.c b/src/unzck.c
+index 8d6c62a..002492c 100644
+--- a/src/unzck.c
++++ b/src/unzck.c
+@@ -58,7 +58,7 @@ struct arguments {
+   char *args[1];
+   zck_log_type log_level;
+   bool dict;
+-  bool stdout;
++  bool stdOut;
+   bool exit;
+ };
+ 
+@@ -75,7 +75,7 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state) {
+                 arguments->log_level = ZCK_LOG_DDEBUG;
+             break;
+         case 'c':
+-            arguments->stdout = true;
++            arguments->stdOut = true;
+             break;
+         case 'V':
+             version();
+@@ -138,7 +138,7 @@ int main (int argc, char *argv[]) {
+         snprintf(out_name + strlen(base_name) - 4, 7, ".zdict");
+ 
+     int dst_fd = STDOUT_FILENO;
+-    if(!arguments.stdout) {
++    if(!arguments.stdOut) {
+         dst_fd = open(out_name, O_TRUNC | O_WRONLY | O_CREAT, 0666);
+         if(dst_fd < 0) {
+             dprintf(STDERR_FILENO, "Unable to open %s", out_name);
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.1.5.bb b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.1.5.bb
new file mode 100644
index 0000000..f75412f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.1.5.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "A file format designed for highly efficient deltas while maintaining good compression"
+AUTHOR = "Jonathan Dieter"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cd6e590282010ce90a94ef25dd31410f"
+
+SRC_URI = " \
+	git://github.com/zchunk/zchunk.git;protocol=https \
+	file://0001-zck.h-fix-build-on-musl.patch \
+	file://0002-unzck-fix-build-with-musl-libc.patch \
+	"
+
+SRCREV = "c01bf12feede792982f165f52f4a6c573e3a8c17"
+S = "${WORKDIR}/git"
+
+DEPENDS = "\
+    curl \
+    zstd \
+    "
+
+DEPENDS_append_libc-musl = " argp-standalone"
+LDFLAGS_append_libc-musl = " -largp"
+
+inherit meson
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb b/meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb
index 98f2cac..babf804 100644
--- a/meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb
+++ b/meta-openembedded/meta-oe/recipes-test/cunit/cunit_2.1-3.bb
@@ -11,6 +11,8 @@
 SRC_URI[md5sum] = "b5f1a9f6093869c070c6e4a9450cc10c"
 SRC_URI[sha256sum] = "f5b29137f845bb08b77ec60584fdb728b4e58f1023e6f249a464efa49a40f214"
 
+UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/cunit/files/releases"
+
 inherit autotools-brokensep remove-libtool
 
 EXTRA_OECONF = "--enable-memtrace --enable-automated --enable-basic --enable-console"
diff --git a/meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.4.bb b/meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.4.bb
index 342fccf..252eea3 100644
--- a/meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.4.bb
+++ b/meta-openembedded/meta-oe/recipes-test/cxxtest/cxxtest_4.4.bb
@@ -10,7 +10,7 @@
 
 S = "${WORKDIR}/cxxtest-${PV}/python"
 
-inherit distutils
+inherit distutils3
 
 do_install_append() {
     install -d ${D}${includedir}