reset upstream subtrees to HEAD

Reset the following subtrees on HEAD:
  poky: 8217b477a1(master)
  meta-xilinx: 64aa3d35ae(master)
  meta-openembedded: 0435c9e193(master)
  meta-raspberrypi: 490a4441ac(master)
  meta-security: cb6d1c85ee(master)

Squashed patches:
  meta-phosphor: drop systemd 239 patches
  meta-phosphor: mrw-api: use correct install path

Change-Id: I268e2646d9174ad305630c6bbd3fbc1a6105f43d
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-openembedded/meta-oe/recipes-support/ace-cloud-editor/ace-cloud-editor_git.bb b/meta-openembedded/meta-oe/recipes-support/ace-cloud-editor/ace-cloud-editor_git.bb
new file mode 100644
index 0000000..4ea6c8a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/ace-cloud-editor/ace-cloud-editor_git.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "Ace is a code editor written in JavaScript."
+SUMMARY = "Ace is a code editor written in JavaScript. This repository has only generated files"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=794d11c5219c59c9efa2487c2b4066b2"
+
+SRC_URI = "git://github.com/ajaxorg/ace-builds.git;protocol=https"
+
+PV = "02.07.17+git${SRCPV}"
+SRCREV = "812e2c56aed246931a667f16c28b096e34597016"
+
+FILES_${PN} = "${datadir}/ace-builds"
+
+S = "${WORKDIR}/git"
+
+DEPENDS += "rsync-native"
+
+do_install () {
+    install -d ${D}/${datadir}/ace-builds/src-noconflict
+    rsync -r --exclude=".*" ${S}/src-noconflict/* ${D}/${datadir}/ace-builds/src-noconflict
+}
+
diff --git a/meta-openembedded/meta-oe/recipes-support/asio/asio_1.12.1.bb b/meta-openembedded/meta-oe/recipes-support/asio/asio_1.12.2.bb
similarity index 69%
rename from meta-openembedded/meta-oe/recipes-support/asio/asio_1.12.1.bb
rename to meta-openembedded/meta-oe/recipes-support/asio/asio_1.12.2.bb
index 28cd9c0..35f875f 100644
--- a/meta-openembedded/meta-oe/recipes-support/asio/asio_1.12.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/asio/asio_1.12.2.bb
@@ -6,7 +6,7 @@
 SECTION = "libs"
 LICENSE = "BSL-1.0"
 
-DEPENDS = "boost openssl"
+DEPENDS = "openssl"
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${BP}.tar.bz2"
 
@@ -16,7 +16,11 @@
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=3e73f311a3af69e6df275e8c3b1c09b5"
 
-SRC_URI[md5sum] = "037854d113024f57c9753d6326b339bc"
-SRC_URI[sha256sum] = "a9091b4de847539fa5b2259bf76a5355339c7eaaa5e33d7d4ae74d614c21965a"
+SRC_URI[md5sum] = "312e53385e2daad10f08d57f91ad3431"
+SRC_URI[sha256sum] = "4e27dcb37456ba707570334b91f4798721111ed67b69915685eac141895779aa"
 
 SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${BP}.tar.bz2"
+
+PACKAGECONFIG ??= "boost"
+
+PACKAGECONFIG[boost] = "--with-boost,--without-boost,boost"
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-add-sys-sysmacros.h-for-major-minor-macros.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-add-sys-sysmacros.h-for-major-minor-macros.patch
deleted file mode 100644
index 5646061..0000000
--- a/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-add-sys-sysmacros.h-for-major-minor-macros.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 13f3771655f859d5e0332dd65b9c43f572f6359d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 11 Aug 2018 16:02:06 -0700
-Subject: [PATCH] add sys/sysmacros.h for major/minor macros
-
-photosyst.c:1465:19: error: called object 'major' is not a function or function pointer
-     dmp->major  = major(statbuf.st_rdev);
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- photosyst.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/photosyst.c b/photosyst.c
-index 38828ec..caed352 100644
---- a/photosyst.c
-+++ b/photosyst.c
-@@ -152,6 +152,7 @@
- static const char rcsid[] = "$Id: photosyst.c,v 1.38 2010/11/19 07:40:40 gerlof Exp $";
- 
- #include <sys/types.h>
-+#include <sys/sysmacros.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-atop.daily-atop.init-atop-pm.sh-Avoid-using-bash.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-atop.daily-atop.init-atop-pm.sh-Avoid-using-bash.patch
new file mode 100644
index 0000000..facb257
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/0001-atop.daily-atop.init-atop-pm.sh-Avoid-using-bash.patch
@@ -0,0 +1,67 @@
+From ffc8ba8d324243a923abe48e9758adecb03d24a4 Mon Sep 17 00:00:00 2001
+From: Peter Kjellerstedt <pkj@axis.com>
+Date: Tue, 12 Feb 2019 21:25:23 +0100
+Subject: [PATCH] atop.daily, atop.init, atop-pm.sh: Avoid using bash
+
+Avoid using bash and bashisms when not necesary. On some systems,
+e.g., embedded products, bash may not be available by default.
+
+Upstream-Status: Submitted [https://github.com/Atoptool/atop/pull/50]
+Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
+---
+ atop-pm.sh | 2 +-
+ atop.daily | 4 ++--
+ atop.init  | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/atop-pm.sh b/atop-pm.sh
+index 7f41a86..3ff4ab5 100755
+--- a/atop-pm.sh
++++ b/atop-pm.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ 
+ case "$1" in
+ 	pre)	/usr/bin/systemctl stop atop
+diff --git a/atop.daily b/atop.daily
+index 57a9507..fe5a11b 100755
+--- a/atop.daily
++++ b/atop.daily
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ 
+ LOGOPTS="-R"				# default options
+ LOGINTERVAL=600				# default interval in seconds
+@@ -38,7 +38,7 @@ then
+ 
+ 	while ps -p `cat "$PIDFILE"` > /dev/null
+ 	do
+-		let CNT+=1
++		CNT=$((CNT + 1))
+ 
+ 		if [ $CNT -gt 5 ]
+ 		then
+diff --git a/atop.init b/atop.init
+index e6e11dc..03c3f02 100755
+--- a/atop.init
++++ b/atop.init
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # atop		Startup script for the Atop process logging in background
+ #
+@@ -47,7 +47,7 @@ case "$1" in
+ 
+ 		while ps -p `cat $PIDFILE` > /dev/null
+ 		do
+-			let CNT+=1
++			CNT=$((CNT + 1))
+ 
+ 			if [ $CNT -gt 5 ]
+ 			then
+-- 
+2.12.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch
index ee74199..8488b38 100644
--- a/meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/fix-permissions.patch
@@ -1,15 +1,22 @@
-Update permissions of executable files that remove setuid bit and make everyone
-could read.
+From d9498d10d0e8241749835dbc9fa229465d4fdfd7 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 6 Feb 2019 13:58:04 +0000
+Subject: [PATCH] Fix permissions
+
+Update permissions of executable files that remove setuid bit and make
+everyone could read.
 
 Upstream-Status: Inappropriate [embedded specific]
-
 Signed-off-by: Kai Kang <kai.kang@windriver.com>
 ---
+ Makefile | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
 diff --git a/Makefile b/Makefile
-index a65b9b6..21d9828 100644
+index 3bf5929..1221ee4 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -66,7 +66,7 @@ systemdinstall:	genericinstall
+@@ -72,7 +72,7 @@ systemdinstall:	genericinstall
  		chmod 0644            $(DESTDIR)$(SYSDPATH)/atopacct.service
  		cp atop.cronsystemd   $(DESTDIR)$(CRNPATH)/atop
  		cp atop-pm.sh         $(DESTDIR)$(PMPATHD)
@@ -18,7 +25,7 @@
  		#
  		# only when making on target system:
  		#
-@@ -91,11 +91,11 @@ sysvinstall:	genericinstall
+@@ -97,11 +97,11 @@ sysvinstall:	genericinstall
  		#
  		if [   -d $(DESTDIR)$(PMPATH1) ]; 			\
  		then	cp 45atoppm $(DESTDIR)$(PMPATH1); 		\
@@ -32,7 +39,7 @@
  		fi
  		#
  		#
-@@ -139,7 +139,7 @@ genericinstall:	atop atopacctd
+@@ -145,7 +145,7 @@ genericinstall:	atop atopacctd atopconvert
  		#
  		cp atop   		$(DESTDIR)$(BINPATH)/atop
  		chown root		$(DESTDIR)$(BINPATH)/atop
@@ -41,12 +48,12 @@
  		ln -sf atop             $(DESTDIR)$(BINPATH)/atopsar
  		cp atopacctd  		$(DESTDIR)$(SBINPATH)/atopacctd
  		chown root		$(DESTDIR)$(SBINPATH)/atopacctd
-@@ -147,7 +147,7 @@ genericinstall:	atop atopacctd
- 		cp atop   		$(DESTDIR)$(BINPATH)/atop-$(VERS)
- 		ln -sf atop-$(VERS)     $(DESTDIR)$(BINPATH)/atopsar-$(VERS)
+@@ -159,7 +159,7 @@ genericinstall:	atop atopacctd atopconvert
+ 		chown root		$(DESTDIR)$(BINPATH)/atopconvert
+ 		chmod 0711 		$(DESTDIR)$(BINPATH)/atopconvert
  		cp atop.daily    	$(DESTDIR)$(SCRPATH)
 -		chmod 0711 	 	$(DESTDIR)$(SCRPATH)/atop.daily
 +		chmod 0755 	 	$(DESTDIR)$(SCRPATH)/atop.daily
  		cp man/atop.1    	$(DESTDIR)$(MAN1PATH)
  		cp man/atopsar.1 	$(DESTDIR)$(MAN1PATH)
- 		cp man/atoprc.5  	$(DESTDIR)$(MAN5PATH)
+ 		cp man/atopconvert.1 	$(DESTDIR)$(MAN1PATH)
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/remove-bashisms.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/remove-bashisms.patch
deleted file mode 100644
index f1fcbfe..0000000
--- a/meta-openembedded/meta-oe/recipes-support/atop/atop/remove-bashisms.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Upstream-Status: Inappropriate [embedded specific]
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
----
-diff --git a/atop-pm.sh b/atop-pm.sh
-index 7f41a86..3ff4ab5 100755
---- a/atop-pm.sh
-+++ b/atop-pm.sh
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- 
- case "$1" in
- 	pre)	/usr/bin/systemctl stop atop
-diff --git a/atop.daily b/atop.daily
-index 24d33bd..f29bd94 100755
---- a/atop.daily
-+++ b/atop.daily
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- 
- CURDAY=`date +%Y%m%d`
- LOGPATH=/var/log/atop
-@@ -16,7 +16,7 @@ then
- 
- 	while ps -p `cat $PIDFILE` > /dev/null
- 	do
--		let CNT+=1
-+		CNT=$((CNT+1))
- 
- 		if [ $CNT -gt 5 ]
- 		then
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch b/meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch
index 5994d3e..1145a24 100644
--- a/meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop/sysvinit-implement-status.patch
@@ -1,11 +1,18 @@
+From bdd068873ed0979027c21773939bdb18046a8756 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 6 Feb 2019 13:58:04 +0000
+Subject: [PATCH] sysvinit: Implement status
+
 Implement the sub-command status.
 
 Upstream-Status: Pending
-
 Signed-off-by: Kai Kang <kai.kang@windriver.com>
 ---
+ atop.init | 3 +++
+ 1 file changed, 3 insertions(+)
+
 diff --git a/atop.init b/atop.init
-index 108bdc5..9f89fad 100755
+index e6e11dc..e7b226d 100755
 --- a/atop.init
 +++ b/atop.init
 @@ -18,6 +18,8 @@
diff --git a/meta-openembedded/meta-oe/recipes-support/atop/atop_2.3.0.bb b/meta-openembedded/meta-oe/recipes-support/atop/atop_2.4.0.bb
similarity index 87%
rename from meta-openembedded/meta-oe/recipes-support/atop/atop_2.3.0.bb
rename to meta-openembedded/meta-oe/recipes-support/atop/atop_2.4.0.bb
index 302813c..5bde965 100644
--- a/meta-openembedded/meta-oe/recipes-support/atop/atop_2.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/atop/atop_2.4.0.bb
@@ -17,13 +17,12 @@
 
 SRC_URI = "http://www.atoptool.nl/download/${BP}.tar.gz \
            ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'file://volatiles.atop.conf', 'file://volatiles.99_atop', d)} \
-           file://remove-bashisms.patch \
            file://fix-permissions.patch \
            file://sysvinit-implement-status.patch \
-           file://0001-add-sys-sysmacros.h-for-major-minor-macros.patch \
+           file://0001-atop.daily-atop.init-atop-pm.sh-Avoid-using-bash.patch \
            "
-SRC_URI[md5sum] = "48e1dbef8c7d826e68829a8d5fc920fc"
-SRC_URI[sha256sum] = "73e4725de0bafac8c63b032e8479e2305e3962afbe977ec1abd45f9e104eb264"
+SRC_URI[md5sum] = "1077da884ed94f2bc3c81ac3ab970436"
+SRC_URI[sha256sum] = "be1c010a77086b7d98376fce96514afcd73c3f20a8d1fe01520899ff69a73d69"
 
 do_compile() {
     oe_runmake all
@@ -49,7 +48,7 @@
 
 inherit systemd
 
-SYSTEMD_SERVICE_${PN} = "atop.service"
+SYSTEMD_SERVICE_${PN} = "atop.service atopgpu.service"
 SYSTEMD_AUTO_ENABLE = "disable"
 
 FILES_${PN} += "${systemd_unitdir}/system-sleep"
diff --git a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch
deleted file mode 100644
index 8ef774f..0000000
--- a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-configure.ac: add check for NO_GETCONTEXT definition
-
-Signed-off-by: Samuel Martin <s.martin49@gmail.com>
-[yann.morin.1998@free.fr: add a comment, change variable name, use
- AS_IF, remove debug traces, use AC_CHECK_FUNCS (as suggested by
- Thomas)]
-Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
-Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
----
-Upstream-Status: Pending
- configure.ac | 6 ++++++
- 1 file changed, 6 insertions(+)
-
---- bdwgc-7.2f.orig/configure.ac	2014-06-01 19:00:47.000000000 +0200
-+++ bdwgc-7.2f/configure.ac	2014-12-23 14:13:11.585716713 +0100
-@@ -365,6 +365,12 @@
-   AC_MSG_RESULT($ac_cv_fno_strict_aliasing)
- fi
- 
-+# Check for getcontext (uClibc can be configured without it, for example)
-+AC_CHECK_FUNCS([getcontext])
-+AS_IF([test "$ac_cv_func_getcontext" = "no"],
-+  [CFLAGS="$CFLAGS -DNO_GETCONTEXT"
-+   CPPFLAGS="$CPPFLAGS -DNO_GETCONTEXT"])
-+
- case "$host" in
- # While IRIX 6 has libdl for the O32 and N32 ABIs, it's missing for N64
- # and unnecessary everywhere.
diff --git a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/musl_header_fix.patch b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/musl_header_fix.patch
deleted file mode 100644
index 4a18496..0000000
--- a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc/musl_header_fix.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Add missing header to avoid:
-
-| 1472659610.016355: ../git/pthread_stop_world.c: In function 'GC_brief_async_signal_safe_sleep':
-| 1472659610.0540252: ../git/pthread_stop_world.c:397:22: error: storage size of 'tv' isn't known
-| 1472659610.0540252:        struct timeval tv;
-| 1472659610.0540252:                       ^~
-| 1472659610.054099: ../git/pthread_stop_world.c:397:22: warning: unused variable 'tv' [-Wunused-variable]
-| 1472659610.054099:        struct timeval tv;
-| 1472659610.054099:                       ^~
-| 1472659610.054099: Makefile:1530: recipe for target 'pthread_stop_world.lo' failed
-
-in musl builds.
-
-Upstream-Status: Pending
-
-Index: git/pthread_stop_world.c
-===================================================================
---- git.orig/pthread_stop_world.c
-+++ git/pthread_stop_world.c
-@@ -45,6 +45,7 @@
- #include <semaphore.h>
- #include <errno.h>
- #include <unistd.h>
-+#include <sys/time.h>
- #include "atomic_ops.h"
- 
- /* It's safe to call original pthread_sigmask() here.   */
diff --git a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.0.bb b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.12.bb
similarity index 82%
rename from meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.0.bb
rename to meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.12.bb
index dcb68f0..b1c1099 100644
--- a/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/bdwgc/bdwgc_7.6.12.bb
@@ -19,12 +19,10 @@
 HOMEPAGE = "http://www.hboehm.info/gc/"
 SECTION = "devel"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://README.QUICK;md5=4f81f24ec69726c312487c2ac740e9e3"
+LIC_FILES_CHKSUM = "file://README.QUICK;md5=728501f233050290314d33fb07d883eb"
 
-SRCREV = "8ac1d84a40eb7a431fec1b8097e3f24b48fb23fa"
-SRC_URI = "git://github.com/ivmai/bdwgc.git \
-           file://0001-configure.ac-add-check-for-NO_GETCONTEXT-definition.patch \
-           file://musl_header_fix.patch \
+SRCREV = "a46546f40d18e60c31077c2e7c8bb4e44bf1bef1"
+SRC_URI = "git://github.com/ivmai/bdwgc.git;branch=release-7_6 \
           "
 
 FILES_${PN}-doc = "${datadir}"
diff --git a/meta-openembedded/meta-oe/recipes-support/cli11/cli11_1.6.2.bb b/meta-openembedded/meta-oe/recipes-support/cli11/cli11_1.6.2.bb
index 6899b12..e62c1d3 100644
--- a/meta-openembedded/meta-oe/recipes-support/cli11/cli11_1.6.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/cli11/cli11_1.6.2.bb
@@ -6,11 +6,14 @@
 SRCREV = "bd4dc911847d0cde7a6b41dfa626a85aab213baf"
 PV .= "+git${SRCPV}"
 
-SRC_URI += "gitsm://github.com/CLIUtils/CLI11"
+SRC_URI += "gitsm://github.com/CLIUtils/CLI11 \
+            file://0001-Add-CLANG_TIDY-check.patch \
+           "
 
 S = "${WORKDIR}/git"
 
 inherit cmake
 inherit ptest
 
+EXTRA_OECMAKE += "-DCLANG_TIDY=OFF"
 DEPENDS += "boost"
diff --git a/meta-openembedded/meta-oe/recipes-support/cli11/files/0001-Add-CLANG_TIDY-check.patch b/meta-openembedded/meta-oe/recipes-support/cli11/files/0001-Add-CLANG_TIDY-check.patch
new file mode 100644
index 0000000..bef3548
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/cli11/files/0001-Add-CLANG_TIDY-check.patch
@@ -0,0 +1,27 @@
+From ef6310bc726a53ff6b45071633fa7b37224cae96 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 12 Feb 2019 13:22:21 -0800
+Subject: [PATCH] Add CLANG_TIDY check
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 79404b8..f68217d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -39,7 +39,7 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
+         add_definitions(-Wall -Wextra -pedantic)
+     endif()
+ 
+-    if(CMAKE_VERSION VERSION_GREATER 3.6)
++    if(CMAKE_VERSION VERSION_GREATER 3.6 AND CLANG_TIDY)
+         # Add clang-tidy if available
+         option(CLANG_TIDY_FIX "Perform fixes for Clang-Tidy" OFF)
+         find_program(
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/950-fix.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/950-fix.patch
deleted file mode 100644
index 3ae46a1..0000000
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/950-fix.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Origin: upstream
-Bug: https://github.com/Microsoft/cpprestsdk/issues/950
-Last-Update: 2018-11-04
-
-Index: cpprest/Release/src/utilities/asyncrt_utils.cpp
-===================================================================
---- cpprest.orig/Release/src/utilities/asyncrt_utils.cpp
-+++ cpprest/Release/src/utilities/asyncrt_utils.cpp
-@@ -356,7 +356,7 @@
- inline size_t count_utf8_to_utf16(const std::string& s)
- {
-     const size_t sSize = s.size();
--    auto sData = reinterpret_cast<const UtilCharInternal_t* const>(s.data());
-+    auto const sData = reinterpret_cast<const UtilCharInternal_t*>(s.data());
-     size_t result{ sSize };
- 
-     for (size_t index = 0; index < sSize;)
-@@ -441,7 +441,7 @@
- {
-     // Save repeated heap allocations, use the length of resulting sequence.
-     const size_t srcSize = s.size();
--    auto srcData = reinterpret_cast<const UtilCharInternal_t* const>(s.data());
-+    auto const srcData = reinterpret_cast<const UtilCharInternal_t*>(s.data());
-     utf16string dest(count_utf8_to_utf16(s), L'\0');
-     utf16string::value_type* const destData = &dest[0];
-     size_t destIndex = 0;
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-float-tests.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-float-tests.patch
deleted file mode 100644
index 75f74ec..0000000
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-float-tests.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Description: new toolchain might have increased the float precision
-Author: Gianfranco Costamagna <locutusofborg@debian.org>
-Last-Update: 2017-10-28
-Forwarded: https://github.com/Microsoft/cpprestsdk/issues/576
-
---- casablanca-2.10.0.orig/Release/tests/functional/streams/istream_tests.cpp
-+++ casablanca-2.10.0/Release/tests/functional/streams/istream_tests.cpp
-@@ -1302,7 +1302,7 @@ void compare_float(float expected, float
- {
-     compare_floating(expected, actual, FLT_EPSILON);
- }
--
-+/*
- TEST(extract_floating_point)
- {
-     std::string test_string;
-@@ -1349,7 +1349,7 @@ TEST(extract_floating_point)
-             VERIFY_ARE_EQUAL(1 / expected, 1 / actual);
-     } while (!std_istream.eof());
- }
--
-+*/
- TEST(extract_floating_point_with_exceptions)
- {
-     std::vector<std::pair<std::string, std::string>> tests;
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
deleted file mode 100644
index 2dff0d9..0000000
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-outside-tests.patch
+++ /dev/null
@@ -1,142 +0,0 @@
-Description: Debian forbids calls to external websites.
-
-Author: Gianfranco Costamagna <locutus@debian.org>
-Origin: Debian
-Forwarded: not-needed
-Reviewed-By: Gianfranco Costamagna <locutusofborg@debian.org>
-Last-Update: 2015-11-25
-
-Index: casablanca/Release/tests/functional/http/client/CMakeLists.txt
-===================================================================
---- casablanca.orig/Release/tests/functional/http/client/CMakeLists.txt
-+++ casablanca/Release/tests/functional/http/client/CMakeLists.txt
-@@ -12,7 +12,6 @@
-   multiple_requests.cpp
-   oauth1_tests.cpp
-   oauth2_tests.cpp
--  outside_tests.cpp
-   pipeline_stage_tests.cpp
-   progress_handler_tests.cpp
-   proxy_tests.cpp
-Index: casablanca/Release/tests/functional/http/client/authentication_tests.cpp
-===================================================================
---- casablanca.orig/Release/tests/functional/http/client/authentication_tests.cpp
-+++ casablanca/Release/tests/functional/http/client/authentication_tests.cpp
-@@ -663,15 +663,19 @@
-     VERIFY_ARE_EQUAL(return_code, response.status_code());
- }
- 
-+/*
- TEST(auth_no_data)
- {
-     auth_test_impl(false);
- }
-+*/
- 
-+/*
- TEST(unsuccessful_auth_with_basic_cred)
- {
-     auth_test_impl(true);
- }
-+*/
- 
- TEST_FIXTURE(uri_address, set_user_options_asio_http)
- {
-@@ -692,7 +696,7 @@
-     auto response = client.request(methods::GET).get();
-     VERIFY_ARE_EQUAL(200, response.status_code());
- }
--
-+/*
- TEST_FIXTURE(uri_address, set_user_options_asio_https)
- {
-     handle_timeout([]
-@@ -714,7 +718,7 @@
-         VERIFY_IS_FALSE(v.empty());
-     });
- }
--
-+*/
- #endif
- 
- } // SUITE(authentication_tests)
-Index: casablanca/Release/tests/functional/websockets/client/authentication_tests.cpp
-===================================================================
---- casablanca.orig/Release/tests/functional/websockets/client/authentication_tests.cpp
-+++ casablanca/Release/tests/functional/websockets/client/authentication_tests.cpp
-@@ -86,7 +86,7 @@
-     }
-     return false;
- }
--
-+/*
- TEST(ssl_test)
- {
-     websocket_client client;
-@@ -122,7 +122,7 @@
-         throw;
-     }
- }
--
-+*/
- // These tests are specific to our websocketpp based implementation.
- #if !defined(__cplusplus_winrt)
- 
-@@ -153,14 +153,15 @@
-         throw;
-     }
- }
--
-+/*
- // 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.
- // The configuration below relies on a timeout in the success case.
-@@ -188,7 +189,8 @@
-         throw;
-     }
- }
--
-+*/
-+/*
- // Winrt doesn't allow explicitly setting server host for SNI.
- TEST(sni_explicit_hostname)
- {
-@@ -199,7 +201,7 @@
-     websocket_client client(config);
-     sni_test_impl(client);
- }
--
-+*/
- void handshake_error_test_impl(const ::utility::string_t &host)
- {
-     websocket_client client;
-Index: casablanca/Release/tests/functional/http/client/connections_and_errors.cpp
-===================================================================
---- casablanca.orig/Release/tests/functional/http/client/connections_and_errors.cpp
-+++ casablanca/Release/tests/functional/http/client/connections_and_errors.cpp
-@@ -415,6 +415,7 @@
- }
- #endif
- 
-+/*
- // Try to connect to a server on a closed port and cancel the operation.
- TEST_FIXTURE(uri_address, cancel_bad_port)
- {
-@@ -446,7 +447,7 @@
- 
-     VERIFY_THROWS_HTTP_ERROR_CODE(t.get(), std::errc::operation_canceled);
- }
--
-+*/
- } // SUITE(connections_and_errors)
- 
- }}}}
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-test-timeouts.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-test-timeouts.patch
deleted file mode 100644
index 93c3e8a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/disable-test-timeouts.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-Description: Some tests takes too long on slow architectures and timeouts
- We can safely disable them.
- e.g.
- Release/tests/functional/http/client/connections_and_errors.cpp:142: error: Failure in request_timeout_microsecond: Test case timed out and is hung. Aborting all remaining test cases. Expected under 180000ms. FAILED
-
-Index: casablanca/Release/tests/functional/http/client/connections_and_errors.cpp
-===================================================================
---- casablanca.orig/Release/tests/functional/http/client/connections_and_errors.cpp
-+++ casablanca/Release/tests/functional/http/client/connections_and_errors.cpp
-@@ -127,7 +127,7 @@
-     // Try sending another request.
-     VERIFY_THROWS(client.request(methods::GET).wait(), web::http::http_exception);
- }
--
-+/*
- TEST_FIXTURE(uri_address, request_timeout)
- {
-     test_http_server::scoped_server scoped(m_uri);
-@@ -146,7 +146,8 @@
- #endif
-     t.get();
- }
--
-+*/
-+/*
- TEST_FIXTURE(uri_address, request_timeout_microsecond)
- {
-     pplx::task<test_request*> t;
-@@ -168,7 +169,7 @@
-     try { t.get(); }
-     catch (...) {}
- }
--
-+*/
- TEST_FIXTURE(uri_address, invalid_method)
- {
-     web::http::uri uri(U("http://www.bing.com/"));
-Index: casablanca/Release/tests/functional/http/listener/requests_tests.cpp
-===================================================================
---- casablanca.orig/Release/tests/functional/http/listener/requests_tests.cpp
-+++ casablanca/Release/tests/functional/http/listener/requests_tests.cpp
-@@ -173,7 +173,7 @@
- 
-     listener.close().wait();
- }
--
-+/*
- TEST_FIXTURE(uri_address, response_order)
- {
-     http_listener listener(m_uri);
-@@ -217,7 +217,7 @@
- 
-     listener.close().wait();
- }
--
-+*/
- TEST_FIXTURE(uri_address, uri_encoding, "Ignore", "Codeplex 201")
- {
-     http_listener listener(m_uri);
-Index: casablanca/Release/tests/functional/websockets/client/authentication_tests.cpp
-===================================================================
---- casablanca.orig/Release/tests/functional/websockets/client/authentication_tests.cpp
-+++ casablanca/Release/tests/functional/websockets/client/authentication_tests.cpp
-@@ -221,7 +221,7 @@
-         VERIFY_ARE_EQUAL("TLS handshake failed", e.error_code().message());
-     }
- }
--
-+/*
- TEST(self_signed_cert)
- {
-     handshake_error_test_impl(U("wss://self-signed.badssl.com/"));
-@@ -236,7 +236,7 @@
- {
-     handshake_error_test_impl(U("wss://expired.badssl.com/"));
- }
--
-+*/
- #endif
- 
- } // SUITE(authentication_tests)
-Index: casablanca/Release/tests/functional/websockets/client/client_construction.cpp
-===================================================================
---- casablanca.orig/Release/tests/functional/websockets/client/client_construction.cpp
-+++ casablanca/Release/tests/functional/websockets/client/client_construction.cpp
-@@ -81,7 +81,7 @@
-     VERIFY_ARE_EQUAL(config2.credentials().username(), cred.username());
- }
- 
--
-+/*
- // Verify that we can get the baseuri from websocket_client connect.
- TEST_FIXTURE(uri_address, uri_test)
- {
-@@ -101,7 +101,7 @@
-     VERIFY_ARE_EQUAL(client2.uri(), m_uri);
-     client2.close().wait();
- }
--
-+*/
- TEST_FIXTURE(uri_address, move_operations)
- {
-     std::string body("hello");
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/revert-9b670e5b33dfdbd501d618cd7e7498148ffbd559.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/revert-9b670e5b33dfdbd501d618cd7e7498148ffbd559.patch
new file mode 100644
index 0000000..9af2cbf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/revert-9b670e5b33dfdbd501d618cd7e7498148ffbd559.patch
@@ -0,0 +1,26 @@
+Description: revert upstream bugfix (see:https://github.com/Microsoft/cpprestsdk/issues/1090)
+Last-Update: 2019-03-28
+
+--- cpprest-2.10.12.orig/Release/src/utilities/asyncrt_utils.cpp
++++ cpprest-2.10.12/Release/src/utilities/asyncrt_utils.cpp
+@@ -1393,16 +1393,15 @@ utility::seconds __cdecl timespan::xml_d
+     return utility::seconds(numSecs);
+ }
+ 
+-static const char c_allowed_chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+-static const int chars_count = static_cast<int>(sizeof(c_allowed_chars) - 1);
++static const utility::char_t c_allowed_chars[] =
++    _XPLATSTR("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
+ 
+ utility::string_t nonce_generator::generate()
+ {
+-    std::uniform_int_distribution<> distr(0, chars_count - 1);
++    std::uniform_int_distribution<> distr(0, static_cast<int>(sizeof(c_allowed_chars) / sizeof(utility::char_t)) - 1);
+     utility::string_t result;
+     result.reserve(length());
+-    std::generate_n(std::back_inserter(result), length(),
+-		[&] { return static_cast<utility::char_t>(c_allowed_chars[distr(m_random)]); });
++    std::generate_n(std::back_inserter(result), length(), [&]() { return c_allowed_chars[distr(m_random)]; });
+     return result;
+ }
+ 
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/revert-f10d9f8e214516d2c19aa6ef831ee874a58c0479.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/revert-f10d9f8e214516d2c19aa6ef831ee874a58c0479.patch
new file mode 100644
index 0000000..01e4631
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/revert-f10d9f8e214516d2c19aa6ef831ee874a58c0479.patch
@@ -0,0 +1,1557 @@
+Description: revert upstream bugfix (see:https://github.com/Microsoft/cpprestsdk/issues/1090)
+Last-Update: 2019-03-28
+
+--- cpprest-2.10.12.orig/Release/include/cpprest/asyncrt_utils.h
++++ cpprest-2.10.12/Release/include/cpprest/asyncrt_utils.h
+@@ -630,6 +630,15 @@ private:
+     static const interval_type _hourTicks = 60 * 60 * _secondTicks;
+     static const interval_type _dayTicks = 24 * 60 * 60 * _secondTicks;
+ 
++#ifdef _WIN32
++    // void* to avoid pulling in windows.h
++    static _ASYNCRTIMP bool __cdecl system_type_to_datetime(/*SYSTEMTIME*/ void* psysTime,
++                                                            uint64_t seconds,
++                                                            datetime* pdt);
++#else
++    static datetime timeval_to_datetime(const timeval& time);
++#endif
++
+     // Private constructor. Use static methods to create an instance.
+     datetime(interval_type interval) : m_interval(interval) {}
+ 
+@@ -690,6 +699,7 @@ public:
+     void set_length(int length) { m_length = length; }
+ 
+ private:
++    static const utility::string_t c_allowed_chars;
+     std::mt19937 m_random;
+     int m_length;
+ };
+--- cpprest-2.10.12.orig/Release/src/pch/stdafx.h
++++ cpprest-2.10.12/Release/src/pch/stdafx.h
+@@ -61,6 +61,7 @@
+ #undef BOOST_NO_CXX11_NULLPTR
+ #endif
+ #include "boost/bind/bind.hpp"
++#include "boost/date_time/posix_time/posix_time_types.hpp"
+ #include "boost/thread/condition_variable.hpp"
+ #include "boost/thread/mutex.hpp"
+ #include <fcntl.h>
+--- cpprest-2.10.12.orig/Release/src/utilities/asyncrt_utils.cpp
++++ cpprest-2.10.12/Release/src/utilities/asyncrt_utils.cpp
+@@ -15,9 +15,20 @@
+ 
+ #include <algorithm>
+ #include <cpprest/asyncrt_utils.h>
+-#include <stdexcept>
++#include <sstream>
+ #include <string>
+-#include <time.h>
++
++#ifndef _WIN32
++#if defined(__clang__)
++#pragma clang diagnostic push
++#pragma clang diagnostic ignored "-Wunused-local-typedef"
++#endif
++#include <boost/date_time/posix_time/posix_time.hpp>
++#include <boost/date_time/posix_time/posix_time_io.hpp>
++#if defined(__clang__)
++#pragma clang diagnostic pop
++#endif
++#endif
+ 
+ using namespace web;
+ using namespace utility;
+@@ -618,7 +629,18 @@ std::string __cdecl conversions::to_utf8
+ 
+ utf16string __cdecl conversions::to_utf16string(const std::string& value) { return utf8_to_utf16(value); }
+ 
+-static const uint64_t ntToUnixOffsetSeconds = 11644473600U; // diff between windows and unix epochs (seconds)
++#ifndef WIN32
++datetime datetime::timeval_to_datetime(const timeval& time)
++{
++    const uint64_t epoch_offset = 11644473600LL; // diff between windows and unix epochs (seconds)
++    uint64_t result = epoch_offset + time.tv_sec;
++    result *= _secondTicks;      // convert to 10e-7
++    result += time.tv_usec * 10; // convert and add microseconds, 10e-6 to 10e-7
++    return datetime(result);
++}
++#endif
++
++static bool is_digit(utility::char_t c) { return c >= _XPLATSTR('0') && c <= _XPLATSTR('9'); }
+ 
+ datetime __cdecl datetime::utc_now()
+ {
+@@ -634,649 +656,450 @@ datetime __cdecl datetime::utc_now()
+ #else // LINUX
+     struct timeval time;
+     gettimeofday(&time, nullptr);
+-    uint64_t result = ntToUnixOffsetSeconds + time.tv_sec;
+-    result *= _secondTicks;      // convert to 10e-7
+-    result += time.tv_usec * 10; // convert and add microseconds, 10e-6 to 10e-7
+-    return datetime(result);
++    return timeval_to_datetime(time);
+ #endif
+ }
+ 
+-static const char dayNames[] = "Sun\0Mon\0Tue\0Wed\0Thu\0Fri\0Sat";
+-static const char monthNames[] = "Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct\0Nov\0Dec";
+-
+ utility::string_t datetime::to_string(date_format format) const
+ {
+-    const uint64_t input = m_interval / _secondTicks; // convert to seconds
+-    const int frac_sec = static_cast<int>(m_interval % _secondTicks);
+-    const time_t time = static_cast<time_t>(input - ntToUnixOffsetSeconds);
+-    struct tm t;
+-#ifdef _MSC_VER
+-    if (gmtime_s(&t, &time) != 0)
+-#else  // ^^^ _MSC_VER ^^^ // vvv !_MSC_VER vvv
+-    if (gmtime_r(&time, &t) == 0)
+-#endif // _MSC_VER
+-    {
+-        throw std::invalid_argument("gmtime_r/s failed on the time supplied");
+-    }
+-
+-    char outBuffer[38]; // Thu, 01 Jan 1970 00:00:00 GMT\0
+-                        // 1970-01-01T00:00:00.1234567Z\0
+-    char* outCursor = outBuffer;
+-    switch (format)
+-    {
+-        case RFC_1123:
+-#ifdef _MSC_VER
+-            sprintf_s(outCursor,
+-                      26,
+-                      "%s, %02d %s %04d %02d:%02d:%02d",
+-                      dayNames + 4 * t.tm_wday,
+-                      t.tm_mday,
+-                      monthNames + 4 * t.tm_mon,
+-                      t.tm_year + 1900,
+-                      t.tm_hour,
+-                      t.tm_min,
+-                      t.tm_sec);
+-#else  // ^^^ _MSC_VER // !_MSC_VER vvv
+-            sprintf(outCursor,
+-                    "%s, %02d %s %04d %02d:%02d:%02d",
+-                    dayNames + 4 * t.tm_wday,
+-                    t.tm_mday,
+-                    monthNames + 4 * t.tm_mon,
+-                    t.tm_year + 1900,
+-                    t.tm_hour,
+-                    t.tm_min,
+-                    t.tm_sec);
+-#endif // _MSC_VER
+-            outCursor += 25;
+-            memcpy(outCursor, " GMT", 4);
+-            outCursor += 4;
+-            return utility::string_t(outBuffer, outCursor);
+-        case ISO_8601:
+-#ifdef _MSC_VER
+-            sprintf_s(outCursor,
+-                      20,
+-                      "%04d-%02d-%02dT%02d:%02d:%02d",
+-                      t.tm_year + 1900,
+-                      t.tm_mon + 1,
+-                      t.tm_mday,
+-                      t.tm_hour,
+-                      t.tm_min,
+-                      t.tm_sec);
+-#else  // ^^^ _MSC_VER // !_MSC_VER vvv
+-            sprintf(outCursor,
+-                    "%04d-%02d-%02dT%02d:%02d:%02d",
+-                    t.tm_year + 1900,
+-                    t.tm_mon + 1,
+-                    t.tm_mday,
+-                    t.tm_hour,
+-                    t.tm_min,
+-                    t.tm_sec);
+-#endif // _MSC_VER
+-            outCursor += 19;
+-            if (frac_sec != 0)
+-            {
+-                // Append fractional second, which is a 7-digit value with no trailing zeros
+-                // This way, '1200' becomes '00012'
+-#ifdef _MSC_VER
+-                size_t appended = sprintf_s(outCursor, 9, ".%07d", frac_sec);
+-#else  // ^^^ _MSC_VER // !_MSC_VER vvv
+-                size_t appended = sprintf(outCursor, ".%07d", frac_sec);
+-#endif // _MSC_VER
+-                while (outCursor[appended - 1] == '0')
+-                {
+-                    --appended; // trim trailing zeros
+-                }
+-
+-                outCursor += appended;
+-            }
+-
+-            *outCursor = 'Z';
+-            ++outCursor;
+-            return utility::string_t(outBuffer, outCursor);
+-        default: throw std::invalid_argument("Unrecognized date format.");
+-    }
+-}
+-
+-template<class CharT>
+-static bool string_starts_with(const CharT* haystack, const char* needle)
+-{
+-    while (*needle)
+-    {
+-        if (*haystack != static_cast<CharT>(*needle))
+-        {
+-            return false;
+-        }
+-
+-        ++haystack;
+-        ++needle;
+-    }
+-
+-    return true;
+-}
+-
+-#define ascii_isdigit(c) ((unsigned char)((unsigned char)(c) - '0') <= 9)
+-#define ascii_isdigit6(c) ((unsigned char)((unsigned char)(c) - '0') <= 6)
+-#define ascii_isdigit5(c) ((unsigned char)((unsigned char)(c) - '0') <= 5)
+-#define ascii_isdigit3(c) ((unsigned char)((unsigned char)(c) - '0') <= 3)
+-#define ascii_isdigit2(c) ((unsigned char)((unsigned char)(c) - '0') <= 2)
+-#define ascii_isdigit1(c) ((unsigned char)((unsigned char)(c) - '0') <= 1)
+-
+-static const unsigned char max_days_in_month[12] = {
+-    31, // Jan
+-    00, // Feb, special handling for leap years
+-    31, // Mar
+-    30, // Apr
+-    31, // May
+-    30, // Jun
+-    31, // Jul
+-    31, // Aug
+-    30, // Sep
+-    31, // Oct
+-    30, // Nov
+-    31  // Dec
+-};
+-
+-static bool validate_day_month(int day, int month, int year)
+-{
+-    int maxDaysThisMonth;
+-    if (month == 1)
+-    { // Feb needs leap year testing
+-        maxDaysThisMonth = 28 + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
+-    }
+-    else
+-    {
+-        maxDaysThisMonth = max_days_in_month[month];
+-    }
+-
+-    return day >= 1 && day <= maxDaysThisMonth;
+-}
++#ifdef _WIN32
++    int status;
+ 
+-template<class CharT>
+-static int atoi2(const CharT* str)
+-{
+-    return (static_cast<unsigned char>(str[0]) - '0') * 10 + (static_cast<unsigned char>(str[1]) - '0');
+-}
++    ULARGE_INTEGER largeInt;
++    largeInt.QuadPart = m_interval;
+ 
+-static const time_t maxTimeT = sizeof(time_t) == 4 ? (time_t)INT_MAX : (time_t)LLONG_MAX;
++    FILETIME ft;
++    ft.dwHighDateTime = largeInt.HighPart;
++    ft.dwLowDateTime = largeInt.LowPart;
+ 
+-static time_t timezone_adjust(time_t result, unsigned char chSign, int adjustHours, int adjustMinutes)
+-{
+-    if (adjustHours > 23)
++    SYSTEMTIME systemTime;
++    if (!FileTimeToSystemTime((const FILETIME*)&ft, &systemTime))
+     {
+-        return (time_t)-1;
++        throw utility::details::create_system_error(GetLastError());
+     }
+ 
+-    // adjustMinutes > 59 is impossible due to digit 5 check
+-    const int tzAdjust = adjustMinutes * 60 + adjustHours * 60 * 60;
+-    if (chSign == '-')
++    std::wstring result;
++    if (format == RFC_1123)
+     {
+-        if (maxTimeT - result < tzAdjust)
+         {
+-            return (time_t)-1;
++            wchar_t dateStr[18] = {0};
++#if _WIN32_WINNT < _WIN32_WINNT_VISTA
++            status = GetDateFormatW(
++                LOCALE_INVARIANT, 0, &systemTime, L"ddd',' dd MMM yyyy", dateStr, sizeof(dateStr) / sizeof(wchar_t));
++#else
++            status = GetDateFormatEx(LOCALE_NAME_INVARIANT,
++                                     0,
++                                     &systemTime,
++                                     L"ddd',' dd MMM yyyy",
++                                     dateStr,
++                                     sizeof(dateStr) / sizeof(wchar_t),
++                                     NULL);
++#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
++            if (status == 0)
++            {
++                throw utility::details::create_system_error(GetLastError());
++            }
++
++            result += dateStr;
++            result += L' ';
+         }
+ 
+-        result += tzAdjust;
+-    }
+-    else
+-    {
+-        if (tzAdjust > result)
+         {
+-            return (time_t)-1;
+-        }
+-
+-        result -= tzAdjust;
+-    }
+-
+-    return result;
+-}
+-
+-static time_t make_gm_time(struct tm* t)
+-{
+-#ifdef _MSC_VER
+-    return _mkgmtime(t);
+-#elif (defined(ANDROID) || defined(__ANDROID__))
+-    // HACK: The (nonportable?) POSIX function timegm is not available in
+-    //       bionic. As a workaround[1][2], we set the C library timezone to
+-    //       UTC, call mktime, then set the timezone back. However, the C
+-    //       environment is fundamentally a shared global resource and thread-
+-    //       unsafe. We can protect our usage here, however any other code might
+-    //       manipulate the environment at the same time.
+-    //
+-    // [1] http://linux.die.net/man/3/timegm
+-    // [2] http://www.gnu.org/software/libc/manual/html_node/Broken_002ddown-Time.html
+-    time_t time;
+-    static boost::mutex env_var_lock;
+-    {
+-        boost::lock_guard<boost::mutex> lock(env_var_lock);
+-        std::string prev_env;
+-        auto prev_env_cstr = getenv("TZ");
+-        if (prev_env_cstr != nullptr)
+-        {
+-            prev_env = prev_env_cstr;
+-        }
+-        setenv("TZ", "UTC", 1);
+-
+-        time = mktime(t);
++            wchar_t timeStr[10] = {0};
++#if _WIN32_WINNT < _WIN32_WINNT_VISTA
++            status = GetTimeFormatW(LOCALE_INVARIANT,
++                                    TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT,
++                                    &systemTime,
++                                    L"HH':'mm':'ss",
++                                    timeStr,
++                                    sizeof(timeStr) / sizeof(wchar_t));
++#else
++            status = GetTimeFormatEx(LOCALE_NAME_INVARIANT,
++                                     TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT,
++                                     &systemTime,
++                                     L"HH':'mm':'ss",
++                                     timeStr,
++                                     sizeof(timeStr) / sizeof(wchar_t));
++#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
++            if (status == 0)
++            {
++                throw utility::details::create_system_error(GetLastError());
++            }
+ 
+-        if (prev_env_cstr)
+-        {
+-            setenv("TZ", prev_env.c_str(), 1);
+-        }
+-        else
+-        {
+-            unsetenv("TZ");
++            result += timeStr;
++            result += L" GMT";
+         }
+     }
+-    return time;
+-#else  // ^^^ ANDROID // Other POSIX platforms vvv
+-    return timegm(t);
+-#endif // _MSC_VER
+-}
+-
+-/*
+-https://tools.ietf.org/html/rfc822
+-https://tools.ietf.org/html/rfc1123
+-
+-date-time   =  [ day "," ] date time        ; dd mm yy
+-                                            ;  hh:mm:ss zzz
+-
+-day         =  "Mon"  / "Tue" /  "Wed"  / "Thu"
+-            /  "Fri"  / "Sat" /  "Sun"
+-
+-date        =  1*2DIGIT month 2DIGIT        ; day month year
+-                                            ;  e.g. 20 Jun 82
+-RFC1123 changes this to:
+-date        =  1*2DIGIT month 2*4DIGIT        ; day month year
+-                                              ;  e.g. 20 Jun 1982
+-This implementation only accepts 4 digit years.
+-
+-month       =  "Jan"  /  "Feb" /  "Mar"  /  "Apr"
+-            /  "May"  /  "Jun" /  "Jul"  /  "Aug"
+-            /  "Sep"  /  "Oct" /  "Nov"  /  "Dec"
+-
+-time        =  hour zone                    ; ANSI and Military
+-
+-hour        =  2DIGIT ":" 2DIGIT [":" 2DIGIT]
+-                                            ; 00:00:00 - 23:59:59
+-
+-zone        =  "UT"  / "GMT"                ; Universal Time
+-                                            ; North American : UT
+-            /  "EST" / "EDT"                ;  Eastern:  - 5/ - 4
+-            /  "CST" / "CDT"                ;  Central:  - 6/ - 5
+-            /  "MST" / "MDT"                ;  Mountain: - 7/ - 6
+-            /  "PST" / "PDT"                ;  Pacific:  - 8/ - 7
+-
+-// military time deleted by RFC 1123
+-
+-            / ( ("+" / "-") 4DIGIT )        ; Local differential
+-                                            ;  hours+min. (HHMM)
+-*/
+-
+-
+-datetime __cdecl datetime::from_string(const utility::string_t& dateString, date_format format)
+-{
+-    datetime result;
+-    time_t seconds;
+-    uint64_t frac_sec = 0;
+-    struct tm t{};
+-    auto str = dateString.c_str();
+-    if (format == RFC_1123)
++    else if (format == ISO_8601)
+     {
+-        int parsedWeekday = -1;
+-        for (int day = 0; day < 7; ++day)
++        const size_t buffSize = 64;
+         {
+-            if (string_starts_with(str, dayNames + day * 4) && str[3] == _XPLATSTR(',') && str[4] == _XPLATSTR(' '))
++            wchar_t dateStr[buffSize] = {0};
++#if _WIN32_WINNT < _WIN32_WINNT_VISTA
++            status = GetDateFormatW(LOCALE_INVARIANT, 0, &systemTime, L"yyyy-MM-dd", dateStr, buffSize);
++#else
++            status = GetDateFormatEx(LOCALE_NAME_INVARIANT, 0, &systemTime, L"yyyy-MM-dd", dateStr, buffSize, NULL);
++#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
++            if (status == 0)
+             {
+-                parsedWeekday = day;
+-                str += 5; // parsed day of week
+-                break;
++                throw utility::details::create_system_error(GetLastError());
+             }
+-        }
+ 
+-        if (ascii_isdigit3(str[0]) && ascii_isdigit(str[1]) && str[2] == _XPLATSTR(' '))
+-        {
+-            t.tm_mday = atoi2(str); // validity checked later
+-            str += 3;               // parsed day
+-        }
+-        else if (ascii_isdigit(str[0]) && str[1] == _XPLATSTR(' '))
+-        {
+-            t.tm_mday = str[0] - _XPLATSTR('0');
+-            str += 2; // parsed day
+-        }
+-        else
+-        {
+-            return result;
++            result += dateStr;
++            result += L'T';
+         }
+ 
+-        t.tm_mon = -1;
+-        for (int month = 0; month < 12; ++month)
+         {
+-            if (string_starts_with(str, monthNames + month * 4))
++            wchar_t timeStr[buffSize] = {0};
++#if _WIN32_WINNT < _WIN32_WINNT_VISTA
++            status = GetTimeFormatW(LOCALE_INVARIANT,
++                                    TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT,
++                                    &systemTime,
++                                    L"HH':'mm':'ss",
++                                    timeStr,
++                                    buffSize);
++#else
++            status = GetTimeFormatEx(LOCALE_NAME_INVARIANT,
++                                     TIME_NOTIMEMARKER | TIME_FORCE24HOURFORMAT,
++                                     &systemTime,
++                                     L"HH':'mm':'ss",
++                                     timeStr,
++                                     buffSize);
++#endif // _WIN32_WINNT < _WIN32_WINNT_VISTA
++            if (status == 0)
+             {
+-                t.tm_mon = month;
+-                break;
++                throw utility::details::create_system_error(GetLastError());
+             }
+-        }
+ 
+-        if (t.tm_mon == -1 || str[3] != _XPLATSTR(' '))
+-        {
+-            return result;
++            result += timeStr;
+         }
+ 
+-        str += 4; // parsed month
+-
+-        if (!ascii_isdigit3(str[0]) || !ascii_isdigit(str[1]) || !ascii_isdigit(str[2]) || !ascii_isdigit(str[3]) ||
+-            str[4] != ' ')
++        uint64_t frac_sec = largeInt.QuadPart % _secondTicks;
++        if (frac_sec > 0)
+         {
+-            return result;
++            // Append fractional second, which is a 7-digit value with no trailing zeros
++            // This way, '1200' becomes '00012'
++            wchar_t buf[9] = {0};
++            size_t appended = swprintf_s(buf, 9, L".%07ld", static_cast<long>(frac_sec));
++            while (buf[appended - 1] == L'0')
++                --appended; // trim trailing zeros
++            result.append(buf, appended);
+         }
+ 
+-        t.tm_year = (str[0] - _XPLATSTR('0')) * 1000 + (str[1] - _XPLATSTR('0')) * 100 +
+-                    (str[2] - _XPLATSTR('0')) * 10 + (str[3] - _XPLATSTR('0'));
+-        if (t.tm_year < 1970 || t.tm_year > 3000)
+-        {
+-            return result;
+-        }
++        result += L'Z';
++    }
+ 
+-        // days in month validity check
+-        if (!validate_day_month(t.tm_mday, t.tm_mon, t.tm_year))
+-        {
+-            return result;
+-        }
++    return result;
++#else // LINUX
++    uint64_t input = m_interval;
++    uint64_t frac_sec = input % _secondTicks;
++    input /= _secondTicks;                               // convert to seconds
++    time_t time = (time_t)input - (time_t)11644473600LL; // diff between windows and unix epochs (seconds)
++
++    struct tm datetime;
++    gmtime_r(&time, &datetime);
++
++    const int max_dt_length = 64;
++    char output[max_dt_length + 1] = {0};
++
++    if (format != RFC_1123 && frac_sec > 0)
++    {
++        // Append fractional second, which is a 7-digit value with no trailing zeros
++        // This way, '1200' becomes '00012'
++        const int max_frac_length = 8;
++        char buf[max_frac_length + 1] = {0};
++        snprintf(buf, sizeof(buf), ".%07ld", (long int)frac_sec);
++        // trim trailing zeros
++        for (int i = max_frac_length - 1; buf[i] == '0'; i--)
++            buf[i] = '\0';
++        // format the datetime into a separate buffer
++        char datetime_str[max_dt_length - max_frac_length - 1 + 1] = {0};
++        strftime(datetime_str, sizeof(datetime_str), "%Y-%m-%dT%H:%M:%S", &datetime);
++        // now print this buffer into the output buffer
++        snprintf(output, sizeof(output), "%s%sZ", datetime_str, buf);
++    }
++    else
++    {
++        strftime(
++            output, sizeof(output), format == RFC_1123 ? "%a, %d %b %Y %H:%M:%S GMT" : "%Y-%m-%dT%H:%M:%SZ", &datetime);
++    }
+ 
+-        t.tm_year -= 1900;
+-        str += 5; // parsed year
++    return std::string(output);
++#endif
++}
+ 
+-        if (!ascii_isdigit2(str[0]) || !ascii_isdigit(str[1]) || str[2] != _XPLATSTR(':') || !ascii_isdigit5(str[3]) ||
+-            !ascii_isdigit(str[4]))
+-        {
+-            return result;
+-        }
++#ifdef _WIN32
++bool __cdecl datetime::system_type_to_datetime(void* pvsysTime, uint64_t seconds, datetime* pdt)
++{
++    SYSTEMTIME* psysTime = (SYSTEMTIME*)pvsysTime;
++    FILETIME fileTime;
+ 
+-        t.tm_hour = atoi2(str);
+-        if (t.tm_hour > 23)
+-        {
+-            return result;
+-        }
++    if (SystemTimeToFileTime(psysTime, &fileTime))
++    {
++        ULARGE_INTEGER largeInt;
++        largeInt.LowPart = fileTime.dwLowDateTime;
++        largeInt.HighPart = fileTime.dwHighDateTime;
+ 
+-        str += 3; // parsed hour
+-        t.tm_min = atoi2(str);
+-        str += 2; // parsed mins
++        // Add hundredths of nanoseconds
++        largeInt.QuadPart += seconds;
+ 
+-        if (str[0] == ':')
+-        {
+-            if (!ascii_isdigit6(str[1]) || !ascii_isdigit(str[2]) || str[3] != _XPLATSTR(' '))
+-            {
+-                return result;
+-            }
++        *pdt = datetime(largeInt.QuadPart);
++        return true;
++    }
++    return false;
++}
++#endif
+ 
+-            t.tm_sec = atoi2(str + 1);
+-            str += 4; // parsed seconds
+-        }
+-        else if (str[0] == _XPLATSTR(' '))
+-        {
+-            t.tm_sec = 0;
+-            str += 1; // parsed seconds
+-        }
+-        else
+-        {
+-            return result;
++// Take a string that represents a fractional second and return the number of ticks
++// This is equivalent to doing atof on the string and multiplying by 10000000,
++// but does not lose precision
++template<typename StringIterator>
++uint64_t timeticks_from_second(StringIterator begin, StringIterator end)
++{
++    int size = (int)(end - begin);
++    _ASSERTE(begin[0] == U('.'));
++    uint64_t ufrac_second = 0;
++    for (int i = 1; i <= 7; ++i)
++    {
++        ufrac_second *= 10;
++        int add = i < size ? begin[i] - U('0') : 0;
++        ufrac_second += add;
++    }
++    return ufrac_second;
++}
++
++void extract_fractional_second(const utility::string_t& dateString,
++                               utility::string_t& resultString,
++                               uint64_t& ufrac_second)
++{
++    resultString = dateString;
++    // First, the string must be strictly longer than 2 characters, and the trailing character must be 'Z'
++    if (resultString.size() > 2 && resultString[resultString.size() - 1] == U('Z'))
++    {
++        // Second, find the last non-digit by scanning the string backwards
++        auto last_non_digit = std::find_if_not(resultString.rbegin() + 1, resultString.rend(), is_digit);
++        if (last_non_digit < resultString.rend() - 1)
++        {
++            // Finally, make sure the last non-digit is a dot:
++            auto last_dot = last_non_digit.base() - 1;
++            if (*last_dot == U('.'))
++            {
++                // Got it! Now extract the fractional second
++                auto last_before_Z = std::end(resultString) - 1;
++                ufrac_second = timeticks_from_second(last_dot, last_before_Z);
++                // And erase it from the string
++                resultString.erase(last_dot, last_before_Z);
++            }
+         }
++    }
++}
+ 
+-        if (t.tm_sec > 60)
+-        { // 60 to allow leap seconds
+-            return result;
+-        }
++datetime __cdecl datetime::from_string(const utility::string_t& dateString, date_format format)
++{
++    // avoid floating point math to preserve precision
++    uint64_t ufrac_second = 0;
+ 
+-        t.tm_isdst = 0;
+-        seconds = make_gm_time(&t);
+-        if (seconds < 0)
+-        {
+-            return result;
+-        }
++#ifdef _WIN32
++    datetime result;
++    if (format == RFC_1123)
++    {
++        SYSTEMTIME sysTime = {0};
+ 
+-        if (parsedWeekday >= 0 && parsedWeekday != t.tm_wday)
+-        {
+-            return result;
+-        }
++        std::wstring month(3, L'\0');
++        std::wstring unused(3, L'\0');
+ 
+-        if (!string_starts_with(str, "GMT") && !string_starts_with(str, "UT"))
+-        {
+-            // some timezone adjustment necessary
+-            auto tzCh = _XPLATSTR('-');
+-            int tzHours;
+-            int tzMinutes = 0;
+-            if (string_starts_with(str, "EDT"))
+-            {
+-                tzHours = 4;
+-            }
+-            else if (string_starts_with(str, "EST") || string_starts_with(str, "CDT"))
+-            {
+-                tzHours = 5;
+-            }
+-            else if (string_starts_with(str, "CST") || string_starts_with(str, "MDT"))
+-            {
+-                tzHours = 6;
+-            }
+-            else if (string_starts_with(str, "MST") || string_starts_with(str, "PDT"))
+-            {
+-                tzHours = 7;
+-            }
+-            else if (string_starts_with(str, "PST"))
+-            {
+-                tzHours = 8;
+-            }
+-            else if ((tzCh == _XPLATSTR('+') || tzCh == _XPLATSTR('-')) && ascii_isdigit2(str[1]) &&
+-                     ascii_isdigit(str[2]) && ascii_isdigit5(str[3]) && ascii_isdigit(str[4]))
+-            {
+-                tzCh = str[0];
+-                tzHours = atoi2(str + 1);
+-                tzMinutes = atoi2(str + 3);
+-            }
+-            else
+-            {
+-                return result;
+-            }
++        const wchar_t* formatString = L"%3c, %2d %3c %4d %2d:%2d:%2d %3c";
++        auto n = swscanf_s(dateString.c_str(),
++                           formatString,
++                           unused.data(),
++                           unused.size(),
++                           &sysTime.wDay,
++                           month.data(),
++                           month.size(),
++                           &sysTime.wYear,
++                           &sysTime.wHour,
++                           &sysTime.wMinute,
++                           &sysTime.wSecond,
++                           unused.data(),
++                           unused.size());
++
++        if (n == 8)
++        {
++            std::wstring monthnames[12] = {
++                L"Jan", L"Feb", L"Mar", L"Apr", L"May", L"Jun", L"Jul", L"Aug", L"Sep", L"Oct", L"Nov", L"Dec"};
++            auto loc =
++                std::find_if(monthnames, monthnames + 12, [&month](const std::wstring& m) { return m == month; });
+ 
+-            seconds = timezone_adjust(seconds, static_cast<unsigned char>(tzCh), tzHours, tzMinutes);
+-            if (seconds < 0)
++            if (loc != monthnames + 12)
+             {
+-                return result;
++                sysTime.wMonth = (short)((loc - monthnames) + 1);
++                if (system_type_to_datetime(&sysTime, ufrac_second, &result))
++                {
++                    return result;
++                }
+             }
+         }
+     }
+     else if (format == ISO_8601)
+     {
+-        // parse year
+-        if (!ascii_isdigit3(str[0]) || !ascii_isdigit(str[1]) || !ascii_isdigit(str[2]) || !ascii_isdigit(str[3]))
+-        {
+-            return result;
+-        }
++        // Unlike FILETIME, SYSTEMTIME does not have enough precision to hold seconds in 100 nanosecond
++        // increments. Therefore, start with seconds and milliseconds set to 0, then add them separately
+ 
+-        t.tm_year = (str[0] - _XPLATSTR('0')) * 1000 + (str[1] - _XPLATSTR('0')) * 100 +
+-                    (str[2] - _XPLATSTR('0')) * 10 + (str[3] - _XPLATSTR('0'));
+-        if (t.tm_year < 1970 || t.tm_year > 3000)
+-        {
+-            return result;
+-        }
++        // Try to extract the fractional second from the timestamp
++        utility::string_t input;
++        extract_fractional_second(dateString, input, ufrac_second);
++        {
++            SYSTEMTIME sysTime = {0};
++            const wchar_t* formatString = L"%4d-%2d-%2dT%2d:%2d:%2dZ";
++            auto n = swscanf_s(input.c_str(),
++                               formatString,
++                               &sysTime.wYear,
++                               &sysTime.wMonth,
++                               &sysTime.wDay,
++                               &sysTime.wHour,
++                               &sysTime.wMinute,
++                               &sysTime.wSecond);
+ 
+-        str += 4;
+-        if (*str == _XPLATSTR('-'))
+-        {
+-            ++str;
++            if (n == 3 || n == 6)
++            {
++                if (system_type_to_datetime(&sysTime, ufrac_second, &result))
++                {
++                    return result;
++                }
++            }
+         }
+-
+-        // parse month
+-        if (!ascii_isdigit1(str[0]) || !ascii_isdigit(str[1]))
+         {
+-            return result;
+-        }
++            SYSTEMTIME sysTime = {0};
++            DWORD date = 0;
+ 
+-        t.tm_mon = atoi2(str);
+-        if (t.tm_mon < 1 || t.tm_mon > 12)
+-        {
+-            return result;
+-        }
+-
+-        t.tm_mon -= 1;
+-        str += 2;
++            const wchar_t* formatString = L"%8dT%2d:%2d:%2dZ";
++            auto n = swscanf_s(input.c_str(), formatString, &date, &sysTime.wHour, &sysTime.wMinute, &sysTime.wSecond);
+ 
+-        if (*str == _XPLATSTR('-'))
+-        {
+-            ++str;
+-        }
++            if (n == 1 || n == 4)
++            {
++                sysTime.wDay = date % 100;
++                date /= 100;
++                sysTime.wMonth = date % 100;
++                date /= 100;
++                sysTime.wYear = (WORD)date;
+ 
+-        // parse day
+-        if (!ascii_isdigit3(str[0]) || !ascii_isdigit(str[1]))
+-        {
+-            return result;
++                if (system_type_to_datetime(&sysTime, ufrac_second, &result))
++                {
++                    return result;
++                }
++            }
+         }
+-
+-        t.tm_mday = atoi2(str);
+-        if (!validate_day_month(t.tm_mday, t.tm_mon, t.tm_year))
+         {
+-            return result;
+-        }
++            SYSTEMTIME sysTime = {0};
++            GetSystemTime(&sysTime); // Fill date portion with today's information
++            sysTime.wSecond = 0;
++            sysTime.wMilliseconds = 0;
+ 
+-        t.tm_year -= 1900;
+-        str += 2;
++            const wchar_t* formatString = L"%2d:%2d:%2dZ";
++            auto n = swscanf_s(input.c_str(), formatString, &sysTime.wHour, &sysTime.wMinute, &sysTime.wSecond);
+ 
+-        if (str[0] != _XPLATSTR('T') && str[0] != _XPLATSTR('t'))
+-        {
+-            // No time
+-            seconds = make_gm_time(&t);
+-            if (seconds < 0)
++            if (n == 3)
+             {
+-                return result;
++                if (system_type_to_datetime(&sysTime, ufrac_second, &result))
++                {
++                    return result;
++                }
+             }
+-
+-            seconds += ntToUnixOffsetSeconds;
+-            result.m_interval = static_cast<interval_type>(seconds) * _secondTicks;
+-            return result;
+         }
++    }
+ 
+-        ++str; // skip 'T'
++    return datetime();
++#else
++    std::string input(dateString);
+ 
+-        // parse hour
+-        if (!ascii_isdigit2(str[0]) || !ascii_isdigit(str[1]))
+-        {
+-            return result;
+-        }
++    struct tm output = tm();
+ 
+-        t.tm_hour = atoi2(str);
+-        str += 2;
+-        if (t.tm_hour > 23)
+-        {
+-            return result;
+-        }
++    if (format == RFC_1123)
++    {
++        strptime(input.data(), "%a, %d %b %Y %H:%M:%S GMT", &output);
++    }
++    else
++    {
++        // Try to extract the fractional second from the timestamp
++        utility::string_t input;
++        extract_fractional_second(dateString, input, ufrac_second);
+ 
+-        if (*str == _XPLATSTR(':'))
+-        {
+-            ++str;
+-        }
++        auto result = strptime(input.data(), "%Y-%m-%dT%H:%M:%SZ", &output);
+ 
+-        // parse minute
+-        if (!ascii_isdigit5(str[0]) || !ascii_isdigit(str[1]))
++        if (result == nullptr)
+         {
+-            return result;
++            result = strptime(input.data(), "%Y%m%dT%H:%M:%SZ", &output);
+         }
+-        t.tm_min = atoi2(str);
+-        // t.tm_min > 59 is impossible because we checked that the first digit is <= 5 in the basic format
+-        // check above
+-
+-        str += 2;
+-
+-        if (*str == _XPLATSTR(':'))
++        if (result == nullptr)
+         {
+-            ++str;
++            // Fill the date portion with the epoch,
++            // strptime will do the rest
++            memset(&output, 0, sizeof(struct tm));
++            output.tm_year = 70;
++            output.tm_mon = 1;
++            output.tm_mday = 1;
++            result = strptime(input.data(), "%H:%M:%SZ", &output);
+         }
+-
+-        // parse seconds
+-        if (!ascii_isdigit6(str[0]) || !ascii_isdigit(str[1]))
++        if (result == nullptr)
+         {
+-            return result;
++            result = strptime(input.data(), "%Y-%m-%d", &output);
+         }
+-
+-        t.tm_sec = atoi2(str);
+-        // We allow 60 to account for leap seconds
+-        if (t.tm_sec > 60)
++        if (result == nullptr)
+         {
+-            return result;
++            result = strptime(input.data(), "%Y%m%d", &output);
+         }
+-
+-        str += 2;
+-        if (str[0] == _XPLATSTR('.') && ascii_isdigit(str[1]))
++        if (result == nullptr)
+         {
+-            ++str;
+-            int digits = 7;
+-            for (;;)
+-            {
+-                frac_sec *= 10;
+-                frac_sec += *str - _XPLATSTR('0');
+-                --digits;
+-                ++str;
+-                if (digits == 0)
+-                {
+-                    while (ascii_isdigit(*str))
+-                    {
+-                        // consume remaining fractional second digits we can't use
+-                        ++str;
+-                    }
+-
+-                    break;
+-                }
+-
+-                if (!ascii_isdigit(*str))
+-                {
+-                    // no more digits in the input, do the remaining multiplies we need
+-                    for (; digits != 0; --digits)
+-                    {
+-                        frac_sec *= 10;
+-                    }
+-
+-                    break;
+-                }
+-            }
++            return datetime();
+         }
++    }
+ 
+-        seconds = make_gm_time(&t);
+-        if (seconds < 0)
+-        {
+-            return result;
+-        }
++#if (defined(ANDROID) || defined(__ANDROID__))
++    // HACK: The (nonportable?) POSIX function timegm is not available in
++    //       bionic. As a workaround[1][2], we set the C library timezone to
++    //       UTC, call mktime, then set the timezone back. However, the C
++    //       environment is fundamentally a shared global resource and thread-
++    //       unsafe. We can protect our usage here, however any other code might
++    //       manipulate the environment at the same time.
++    //
++    // [1] http://linux.die.net/man/3/timegm
++    // [2] http://www.gnu.org/software/libc/manual/html_node/Broken_002ddown-Time.html
++    time_t time;
+ 
+-        if (str[0] == _XPLATSTR('Z') || str[0] == _XPLATSTR('z'))
++    static boost::mutex env_var_lock;
++    {
++        boost::lock_guard<boost::mutex> lock(env_var_lock);
++        std::string prev_env;
++        auto prev_env_cstr = getenv("TZ");
++        if (prev_env_cstr != nullptr)
+         {
+-            // no adjustment needed for zulu time
++            prev_env = prev_env_cstr;
+         }
+-        else if (str[0] == _XPLATSTR('+') || str[0] == _XPLATSTR('-'))
+-        {
+-            const unsigned char offsetDirection = static_cast<unsigned char>(str[0]);
+-            if (!ascii_isdigit2(str[1]) || !ascii_isdigit(str[2]) || str[3] != _XPLATSTR(':') ||
+-                !ascii_isdigit5(str[4]) || !ascii_isdigit(str[5]))
+-            {
+-                return result;
+-            }
++        setenv("TZ", "UTC", 1);
+ 
+-            seconds = timezone_adjust(seconds, offsetDirection, atoi2(str + 1), atoi2(str + 4));
+-            if (seconds < 0)
+-            {
+-                return result;
+-            }
++        time = mktime(&output);
++
++        if (prev_env_cstr)
++        {
++            setenv("TZ", prev_env.c_str(), 1);
+         }
+         else
+         {
+-            // the timezone is malformed, but cpprestsdk currently accepts this as no timezone
++            unsetenv("TZ");
+         }
+     }
+-    else
+-    {
+-        throw std::invalid_argument("unrecognized date format");
+-    }
++#else
++    time_t time = timegm(&output);
++#endif
++
++    struct timeval tv = timeval();
++    tv.tv_sec = time;
++    auto result = timeval_to_datetime(tv);
+ 
+-    seconds += ntToUnixOffsetSeconds;
+-    result.m_interval = static_cast<interval_type>(seconds) * _secondTicks + frac_sec;
++    // fractional seconds are already in correct format so just add them.
++    result = result + ufrac_second;
+     return result;
++#endif
+ }
+ 
+ /// <summary>
+@@ -1358,32 +1181,38 @@ utility::seconds __cdecl timespan::xml_d
+     // The final S could be omitted
+ 
+     int64_t numSecs = 0;
+-    auto cursor = timespanString.c_str();
+-    auto c = *cursor++; // skip 'P'
+-    while (c)
++
++    utility::istringstream_t is(timespanString);
++    is.imbue(std::locale::classic());
++    auto eof = std::char_traits<utility::char_t>::eof();
++
++    std::basic_istream<utility::char_t>::int_type c;
++    c = is.get(); // P
++
++    while (c != eof)
+     {
+         int val = 0;
+-        c = *cursor++;
++        c = is.get();
+ 
+-        while (ascii_isdigit(c))
++        while (is_digit((utility::char_t)c))
+         {
+-            val = val * 10 + (c - _XPLATSTR('0'));
+-            c = *cursor++;
++            val = val * 10 + (c - L'0');
++            c = is.get();
+ 
+-            if (c == _XPLATSTR('.'))
++            if (c == '.')
+             {
+                 // decimal point is not handled
+                 do
+                 {
+-                    c = *cursor++;
+-                } while (ascii_isdigit(c));
++                    c = is.get();
++                } while (is_digit((utility::char_t)c));
+             }
+         }
+ 
+-        if (c == _XPLATSTR('D')) numSecs += val * 24 * 3600; // days
+-        if (c == _XPLATSTR('H')) numSecs += val * 3600;      // Hours
+-        if (c == _XPLATSTR('M')) numSecs += val * 60;        // Minutes
+-        if (c == _XPLATSTR('S') || c == _XPLATSTR('\0'))
++        if (c == L'D') numSecs += val * 24 * 3600; // days
++        if (c == L'H') numSecs += val * 3600;      // Hours
++        if (c == L'M') numSecs += val * 60;        // Minutes
++        if (c == L'S' || c == eof)
+         {
+             numSecs += val; // seconds
+             break;
+@@ -1393,12 +1222,12 @@ utility::seconds __cdecl timespan::xml_d
+     return utility::seconds(numSecs);
+ }
+ 
+-static const utility::char_t c_allowed_chars[] =
+-    _XPLATSTR("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
++const utility::string_t nonce_generator::c_allowed_chars(
++    _XPLATSTR("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"));
+ 
+ utility::string_t nonce_generator::generate()
+ {
+-    std::uniform_int_distribution<> distr(0, static_cast<int>(sizeof(c_allowed_chars) / sizeof(utility::char_t)) - 1);
++    std::uniform_int_distribution<> distr(0, static_cast<int>(c_allowed_chars.length() - 1));
+     utility::string_t result;
+     result.reserve(length());
+     std::generate_n(std::back_inserter(result), length(), [&]() { return c_allowed_chars[distr(m_random)]; });
+--- cpprest-2.10.12.orig/Release/tests/functional/utils/datetime.cpp
++++ cpprest-2.10.12/Release/tests/functional/utils/datetime.cpp
+@@ -74,6 +74,16 @@ SUITE(datetime)
+         }
+     }
+ 
++    TEST(parsing_time_extended)
++    {
++        // ISO 8601
++        {
++            auto dt = utility::datetime::from_string(_XPLATSTR("14:30:01Z"), utility::datetime::ISO_8601);
++
++            VERIFY_ARE_NOT_EQUAL(0u, dt.to_interval());
++        }
++    }
++
+     void TestDateTimeRoundtrip(utility::string_t str, utility::string_t strExpected)
+     {
+         auto dt = utility::datetime::from_string(str, utility::datetime::ISO_8601);
+@@ -91,8 +101,6 @@ SUITE(datetime)
+ 
+     TEST(parsing_time_roundtrip_datetime2)
+     {
+-        // lose the last '000'
+-        TestDateTimeRoundtrip(_XPLATSTR("2013-11-19T14:30:59.1234567000Z"), _XPLATSTR("2013-11-19T14:30:59.1234567Z"));
+         // lose the last '999' without rounding up
+         TestDateTimeRoundtrip(_XPLATSTR("2013-11-19T14:30:59.1234567999Z"), _XPLATSTR("2013-11-19T14:30:59.1234567Z"));
+     }
+@@ -121,260 +129,16 @@ SUITE(datetime)
+         TestDateTimeRoundtrip(_XPLATSTR("2013-11-19T14:30:59.5Z"));
+     }
+ 
+-    void TestRfc1123IsTimeT(const utility::char_t* str, time_t t)
+-    {
+-        datetime dt = datetime::from_string(str, utility::datetime::RFC_1123);
+-        uint64_t interval = dt.to_interval();
+-        VERIFY_ARE_EQUAL(0, interval % 10000000);
+-        interval /= 10000000;
+-        interval -= 11644473600; // NT epoch adjustment
+-        VERIFY_ARE_EQUAL(static_cast<uint64_t>(t), interval);
+-    }
+-
+-    TEST(parsing_time_rfc1123_accepts_each_day)
+-    {
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 00:00:00 GMT"), (time_t) 0);
+-        TestRfc1123IsTimeT(_XPLATSTR("Fri, 02 Jan 1970 00:00:00 GMT"), (time_t) 86400 * 1);
+-        TestRfc1123IsTimeT(_XPLATSTR("Sat, 03 Jan 1970 00:00:00 GMT"), (time_t) 86400 * 2);
+-        TestRfc1123IsTimeT(_XPLATSTR("Sun, 04 Jan 1970 00:00:00 GMT"), (time_t) 86400 * 3);
+-        TestRfc1123IsTimeT(_XPLATSTR("Mon, 05 Jan 1970 00:00:00 GMT"), (time_t) 86400 * 4);
+-        TestRfc1123IsTimeT(_XPLATSTR("Tue, 06 Jan 1970 00:00:00 GMT"), (time_t) 86400 * 5);
+-        TestRfc1123IsTimeT(_XPLATSTR("Wed, 07 Jan 1970 00:00:00 GMT"), (time_t) 86400 * 6);
+-    }
+-
+-    TEST(parsing_time_rfc1123_boundary_cases)
+-    {
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 00:00:00 GMT"), (time_t) 0);
+-        TestRfc1123IsTimeT(_XPLATSTR("19 Jan 2038 03:14:06 GMT"), (time_t) INT_MAX - 1);
+-#ifndef _USE_32BIT_TIME_T
+-        TestRfc1123IsTimeT(_XPLATSTR("19 Jan 2038 03:13:07 -0001"), (time_t) INT_MAX);
+-        TestRfc1123IsTimeT(_XPLATSTR("19 Jan 2038 03:14:07 -0000"), (time_t) INT_MAX);
+-#endif // _USE_32BIT_TIME_T
+-        TestRfc1123IsTimeT(_XPLATSTR("14 Jan 2019 23:16:21 +0000"), (time_t) 1547507781);
+-        TestRfc1123IsTimeT(_XPLATSTR("14 Jan 2019 23:16:21 -0001"), (time_t) 1547507841);
+-        TestRfc1123IsTimeT(_XPLATSTR("14 Jan 2019 23:16:21 +0001"), (time_t) 1547507721);
+-        TestRfc1123IsTimeT(_XPLATSTR("14 Jan 2019 23:16:21 -0100"), (time_t) 1547511381);
+-        TestRfc1123IsTimeT(_XPLATSTR("14 Jan 2019 23:16:21 +0100"), (time_t) 1547504181);
+-    }
+-
+-    TEST(parsing_time_rfc1123_uses_each_field)
+-    {
+-        TestRfc1123IsTimeT(_XPLATSTR("02 Jan 1970 00:00:00 GMT"), (time_t) 86400);
+-        TestRfc1123IsTimeT(_XPLATSTR("12 Jan 1970 00:00:00 GMT"), (time_t) 950400);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Feb 1970 00:00:00 GMT"), (time_t) 2678400);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 2000 00:00:00 GMT"), (time_t) 946684800);
+-#ifndef _USE_32BIT_TIME_T
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 2100 00:00:00 GMT"), (time_t) 4102444800);
+-#endif // _USE_32BIT_TIME_T
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1990 00:00:00 GMT"), (time_t) 631152000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1971 00:00:00 GMT"), (time_t) 31536000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 10:00:00 GMT"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 01:00:00 GMT"), (time_t) 3600);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 00:10:00 GMT"), (time_t) 600);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 00:01:00 GMT"), (time_t) 60);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 00:00:10 GMT"), (time_t) 10);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 00:00:01 GMT"), (time_t) 1);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 10:00:00 GMT"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 02:00:00 PST"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 03:00:00 PDT"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 03:00:00 MST"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 04:00:00 MDT"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 04:00:00 CST"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 05:00:00 CDT"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 05:00:00 EST"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 06:00:00 EDT"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 06:00:00 -0400"), (time_t) 36000);
+-        TestRfc1123IsTimeT(_XPLATSTR("01 Jan 1970 05:59:00 -0401"), (time_t) 36000);
+-    }
+-
+-    TEST(parsing_time_rfc1123_max_days)
+-    {
+-        TestRfc1123IsTimeT(_XPLATSTR("31 Jan 1970 00:00:00 GMT"), (time_t) 2592000);
+-        TestRfc1123IsTimeT(_XPLATSTR("28 Feb 2019 00:00:00 GMT"), (time_t) 1551312000); // non leap year allows feb 28
+-        TestRfc1123IsTimeT(_XPLATSTR("29 Feb 2020 00:00:00 GMT"), (time_t) 1582934400); // leap year allows feb 29
+-        TestRfc1123IsTimeT(_XPLATSTR("31 Mar 1970 00:00:00 GMT"), (time_t) 7689600);
+-        TestRfc1123IsTimeT(_XPLATSTR("30 Apr 1970 00:00:00 GMT"), (time_t) 10281600);
+-        TestRfc1123IsTimeT(_XPLATSTR("31 May 1970 00:00:00 GMT"), (time_t) 12960000);
+-        TestRfc1123IsTimeT(_XPLATSTR("30 Jun 1970 00:00:00 GMT"), (time_t) 15552000);
+-        TestRfc1123IsTimeT(_XPLATSTR("31 Jul 1970 00:00:00 GMT"), (time_t) 18230400);
+-        TestRfc1123IsTimeT(_XPLATSTR("31 Aug 1970 00:00:00 GMT"), (time_t) 20908800);
+-        TestRfc1123IsTimeT(_XPLATSTR("30 Sep 1970 00:00:00 GMT"), (time_t) 23500800);
+-        TestRfc1123IsTimeT(_XPLATSTR("31 Oct 1970 00:00:00 GMT"), (time_t) 26179200);
+-        TestRfc1123IsTimeT(_XPLATSTR("30 Nov 1970 00:00:00 GMT"), (time_t) 28771200);
+-        TestRfc1123IsTimeT(_XPLATSTR("31 Dec 1970 00:00:00 GMT"), (time_t) 31449600);
+-    }
+-
+-    TEST(parsing_time_rfc1123_invalid_cases)
+-    {
+-        const utility::string_t bad_strings[] = {
+-            _XPLATSTR("Ahu, 01 Jan 1970 00:00:00 GMT"), // bad letters in each place
+-            _XPLATSTR("TAu, 01 Jan 1970 00:00:00 GMT"),
+-            _XPLATSTR("ThA, 01 Jan 1970 00:00:00 GMT"),
+-            _XPLATSTR("ThuA 01 Jan 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu,A01 Jan 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, A1 Jan 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 0A Jan 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01AJan 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Aan 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 JAn 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 JaA 1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 JanA1970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan A970 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1A70 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 19A0 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 197A 00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970A00:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 A0:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 0A:00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00A00:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:A0:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:0A:00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00A00 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:A0 GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:0A GMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00AGMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00 AMT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00 GAT"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00 GMA"),
+-            _XPLATSTR(""), // truncation
+-            _XPLATSTR("T"),
+-            _XPLATSTR("Th"),
+-            _XPLATSTR("Thu"),
+-            _XPLATSTR("Thu,"),
+-            _XPLATSTR("Thu, "),
+-            _XPLATSTR("Thu, 0"),
+-            _XPLATSTR("Thu, 01"),
+-            _XPLATSTR("Thu, 01 "),
+-            _XPLATSTR("Thu, 01 J"),
+-            _XPLATSTR("Thu, 01 Ja"),
+-            _XPLATSTR("Thu, 01 Jan"),
+-            _XPLATSTR("Thu, 01 Jan "),
+-            _XPLATSTR("Thu, 01 Jan 1"),
+-            _XPLATSTR("Thu, 01 Jan 19"),
+-            _XPLATSTR("Thu, 01 Jan 197"),
+-            _XPLATSTR("Thu, 01 Jan 1970"),
+-            _XPLATSTR("Thu, 01 Jan 1970 "),
+-            _XPLATSTR("Thu, 01 Jan 1970 0"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:0"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:0"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00 "),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00 G"),
+-            _XPLATSTR("Thu, 01 Jan 1970 00:00:00 GM"),
+-            _XPLATSTR("Fri, 01 Jan 1970 00:00:00 GMT"), // wrong day
+-            _XPLATSTR("01 Jan 4970 00:00:00 GMT"), // year too big
+-            _XPLATSTR("01 Jan 3001 00:00:00 GMT"),
+-            _XPLATSTR("01 Xxx 1971 00:00:00 GMT"), // month bad
+-            _XPLATSTR("00 Jan 1971 00:00:00 GMT"), // day too small
+-            _XPLATSTR("32 Jan 1971 00:00:00 GMT"), // day too big
+-            _XPLATSTR("30 Feb 1971 00:00:00 GMT"), // day too big for feb
+-            _XPLATSTR("30 Feb 1971 00:00:00 GMT"), // day too big for feb (non-leap year)
+-            _XPLATSTR("32 Mar 1971 00:00:00 GMT"), // other months
+-            _XPLATSTR("31 Apr 1971 00:00:00 GMT"),
+-            _XPLATSTR("32 May 1971 00:00:00 GMT"),
+-            _XPLATSTR("31 Jun 1971 00:00:00 GMT"),
+-            _XPLATSTR("32 Jul 1971 00:00:00 GMT"),
+-            _XPLATSTR("32 Aug 1971 00:00:00 GMT"),
+-            _XPLATSTR("31 Sep 1971 00:00:00 GMT"),
+-            _XPLATSTR("32 Oct 1971 00:00:00 GMT"),
+-            _XPLATSTR("31 Nov 1971 00:00:00 GMT"),
+-            _XPLATSTR("32 Dec 1971 00:00:00 GMT"),
+-            _XPLATSTR("01 Jan 1971 70:00:00 GMT"), // hour too big
+-            _XPLATSTR("01 Jan 1971 24:00:00 GMT"),
+-            _XPLATSTR("01 Jan 1971 00:60:00 GMT"), // minute too big
+-            _XPLATSTR("01 Jan 1971 00:00:70 GMT"), // second too big
+-            _XPLATSTR("01 Jan 1971 00:00:61 GMT"),
+-            _XPLATSTR("01 Jan 1969 00:00:00 GMT"), // underflow
+-            _XPLATSTR("01 Jan 1969 00:00:00 CEST"), // bad tz
+-            _XPLATSTR("01 Jan 1970 00:00:00 +2400"), // bad tzoffsets
+-            _XPLATSTR("01 Jan 1970 00:00:00 -3000"),
+-            _XPLATSTR("01 Jan 1970 00:00:00 +2160"),
+-            _XPLATSTR("01 Jan 1970 00:00:00 -2400"),
+-            _XPLATSTR("01 Jan 1970 00:00:00 -2160"),
+-        };
+-
+-        for (const auto& str : bad_strings)
+-        {
+-            auto dt = utility::datetime::from_string(str, utility::datetime::RFC_1123);
+-            VERIFY_ARE_EQUAL(0, dt.to_interval());
+-        }
+-    }
+-
+-    TEST(parsing_time_iso8601_boundary_cases)
+-    {
+-        // boundary cases:
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T00:00:00Z"));                                         // epoch
+-        TestDateTimeRoundtrip(_XPLATSTR("2038-01-19T03:14:06+00:00"), _XPLATSTR("2038-01-19T03:14:06Z")); // INT_MAX - 1
+-#ifndef _USE_32BIT_TIME_T
+-        TestDateTimeRoundtrip(_XPLATSTR("2038-01-19T03:13:07-00:01"),
+-                              _XPLATSTR("2038-01-19T03:14:07Z")); // INT_MAX after subtacting 1
+-        TestDateTimeRoundtrip(_XPLATSTR("2038-01-19T03:14:07-00:00"), _XPLATSTR("2038-01-19T03:14:07Z"));
+-#endif // _USE_32BIT_TIME_T
+-    }
+-
+-    TEST(parsing_time_iso8601_uses_each_timezone_digit)
+-    {
+-        TestDateTimeRoundtrip(_XPLATSTR("2019-01-14T23:16:21+00:00"), _XPLATSTR("2019-01-14T23:16:21Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("2019-01-14T23:16:21-00:01"), _XPLATSTR("2019-01-14T23:17:21Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("2019-01-14T23:16:21+00:01"), _XPLATSTR("2019-01-14T23:15:21Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("2019-01-14T23:16:21-01:00"), _XPLATSTR("2019-01-15T00:16:21Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("2019-01-14T23:16:21+01:00"), _XPLATSTR("2019-01-14T22:16:21Z"));
+-    }
+-
+-    TEST(parsing_time_iso8601_uses_each_digit)
+-    {
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T00:00:01Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T00:01:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T01:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-02T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-02-01T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1971-01-01T00:00:00Z"));
+-
+-        TestDateTimeRoundtrip(_XPLATSTR("1999-01-01T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-12-01T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-09-01T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-30T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-31T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T23:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T19:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T00:59:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T00:00:59Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T00:00:60Z"), _XPLATSTR("1970-01-01T00:01:00Z")); // leap seconds
+-    }
+-
+-    TEST(parsing_time_iso8601_accepts_month_max_days)
+-    {
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-31T00:00:00Z")); // jan
+-        TestDateTimeRoundtrip(_XPLATSTR("2019-02-28T00:00:00Z")); // non leap year allows feb 28
+-        TestDateTimeRoundtrip(_XPLATSTR("2020-02-29T00:00:00Z")); // leap year allows feb 29
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-03-31T00:00:00Z")); // mar
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-04-30T00:00:00Z")); // apr
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-05-31T00:00:00Z")); // may
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-06-30T00:00:00Z")); // jun
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-07-31T00:00:00Z")); // jul
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-08-31T00:00:00Z")); // aug
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-09-30T00:00:00Z")); // sep
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-10-31T00:00:00Z")); // oct
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-11-30T00:00:00Z")); // nov
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-12-31T00:00:00Z")); // dec
+-    }
+-
+-    TEST(parsing_time_iso8601_accepts_lowercase_t_z)
+-    {
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01t00:00:00Z"), _XPLATSTR("1970-01-01T00:00:00Z"));
+-        TestDateTimeRoundtrip(_XPLATSTR("1970-01-01T00:00:00z"), _XPLATSTR("1970-01-01T00:00:00Z"));
+-    }
+-
+-    TEST(parsing_time_roundtrip_datetime_accepts_invalid_no_trailing_timezone)
++    TEST(parsing_time_roundtrip_datetime_invalid1,
++         "Ignore:Linux",
++         "Codeplex issue #115",
++         "Ignore:Apple",
++         "Codeplex issue #115")
+     {
+         // No digits after the dot, or non-digits. This is not a valid input, but we should not choke on it,
+         // Simply ignore the bad fraction
+         const utility::string_t bad_strings[] = {_XPLATSTR("2013-11-19T14:30:59.Z"),
+-                                                 _XPLATSTR("2013-11-19T14:30:59.a12Z")};
++                                                 _XPLATSTR("2013-11-19T14:30:59.1a2Z")};
+         utility::string_t str_corrected = _XPLATSTR("2013-11-19T14:30:59Z");
+ 
+         for (const auto& str : bad_strings)
+@@ -387,87 +151,12 @@ SUITE(datetime)
+ 
+     TEST(parsing_time_roundtrip_datetime_invalid2)
+     {
+-        // Various unsupported cases. In all cases, we have produce an empty date time
++        // Variouls unsupported cases. In all cases, we have produce an empty date time
+         const utility::string_t bad_strings[] = {
+-            _XPLATSTR(""),                     // empty
+-            _XPLATSTR(".Z"),                   // too short
+-            _XPLATSTR(".Zx"),                  // no trailing Z
+-            _XPLATSTR("3.14Z")                 // not a valid date
+-            _XPLATSTR("a971-01-01T00:00:00Z"), // any non digits or valid separators
+-            _XPLATSTR("1a71-01-01T00:00:00Z"),
+-            _XPLATSTR("19a1-01-01T00:00:00Z"),
+-            _XPLATSTR("197a-01-01T00:00:00Z"),
+-            _XPLATSTR("1971a01-01T00:00:00Z"),
+-            _XPLATSTR("1971-a1-01T00:00:00Z"),
+-            _XPLATSTR("1971-0a-01T00:00:00Z"),
+-            _XPLATSTR("1971-01a01T00:00:00Z"),
+-            _XPLATSTR("1971-01-a1T00:00:00Z"),
+-            _XPLATSTR("1971-01-0aT00:00:00Z"),
+-            // _XPLATSTR("1971-01-01a00:00:00Z"), parsed as complete date
+-            _XPLATSTR("1971-01-01Ta0:00:00Z"),
+-            _XPLATSTR("1971-01-01T0a:00:00Z"),
+-            _XPLATSTR("1971-01-01T00a00:00Z"),
+-            _XPLATSTR("1971-01-01T00:a0:00Z"),
+-            _XPLATSTR("1971-01-01T00:0a:00Z"),
+-            _XPLATSTR("1971-01-01T00:00a00Z"),
+-            _XPLATSTR("1971-01-01T00:00:a0Z"),
+-            _XPLATSTR("1971-01-01T00:00:0aZ"),
+-            // "1971-01-01T00:00:00a", accepted as per invalid_no_trailing_timezone above
+-            _XPLATSTR("1"), // truncation
+-            _XPLATSTR("19"),
+-            _XPLATSTR("197"),
+-            _XPLATSTR("1970"),
+-            _XPLATSTR("1970-"),
+-            _XPLATSTR("1970-0"),
+-            _XPLATSTR("1970-01"),
+-            _XPLATSTR("1970-01-"),
+-            _XPLATSTR("1970-01-0"),
+-            // _XPLATSTR("1970-01-01"), complete date
+-            _XPLATSTR("1970-01-01T"),
+-            _XPLATSTR("1970-01-01T0"),
+-            _XPLATSTR("1970-01-01T00"),
+-            _XPLATSTR("1970-01-01T00:"),
+-            _XPLATSTR("1970-01-01T00:0"),
+-            _XPLATSTR("1970-01-01T00:00"),
+-            _XPLATSTR("1970-01-01T00:00:"),
+-            _XPLATSTR("1970-01-01T00:00:0"),
+-            // _XPLATSTR("1970-01-01T00:00:00"), // accepted as invalid timezone above
+-            _XPLATSTR("4970-01-01T00:00:00Z"), // year too big
+-            _XPLATSTR("3001-01-01T00:00:00Z"),
+-            _XPLATSTR("1971-00-01T00:00:00Z"), // month too small
+-            _XPLATSTR("1971-20-01T00:00:00Z"), // month too big
+-            _XPLATSTR("1971-13-01T00:00:00Z"),
+-            _XPLATSTR("1971-01-00T00:00:00Z"), // day too small
+-            _XPLATSTR("1971-01-32T00:00:00Z"), // day too big
+-            _XPLATSTR("1971-02-30T00:00:00Z"), // day too big for feb
+-            _XPLATSTR("1971-02-30T00:00:00Z"), // day too big for feb (non-leap year)
+-            _XPLATSTR("1971-03-32T00:00:00Z"), // other months
+-            _XPLATSTR("1971-04-31T00:00:00Z"),
+-            _XPLATSTR("1971-05-32T00:00:00Z"),
+-            _XPLATSTR("1971-06-31T00:00:00Z"),
+-            _XPLATSTR("1971-07-32T00:00:00Z"),
+-            _XPLATSTR("1971-08-32T00:00:00Z"),
+-            _XPLATSTR("1971-09-31T00:00:00Z"),
+-            _XPLATSTR("1971-10-32T00:00:00Z"),
+-            _XPLATSTR("1971-11-31T00:00:00Z"),
+-            _XPLATSTR("1971-12-32T00:00:00Z"),
+-            _XPLATSTR("1971-01-01T70:00:00Z"), // hour too big
+-            _XPLATSTR("1971-01-01T24:00:00Z"),
+-            _XPLATSTR("1971-01-01T00:60:00Z"), // minute too big
+-            _XPLATSTR("1971-01-01T00:00:70Z"), // second too big
+-            _XPLATSTR("1971-01-01T00:00:61Z"),
+-            _XPLATSTR("1969-01-01T00:00:00Z"), // underflow
+-#ifdef _USE_32BIT_TIME_T
+-            _XPLATSTR("3000-01-01T00:00:01Z"), // overflow
+-#endif
+-            _XPLATSTR("3001-01-01T00:00:00Z"),
+-            _XPLATSTR("1970-01-01T00:00:00+00:01"), // time zone underflow
+-            // _XPLATSTR("1970-01-01T00:00:00.Z"), // accepted as invalid timezone above
+-            _XPLATSTR("1970-01-01T00:00:00+24:00"), // bad tzoffsets
+-            _XPLATSTR("1970-01-01T00:00:00-30:00"),
+-            _XPLATSTR("1970-01-01T00:00:00+21:60"),
+-            _XPLATSTR("1970-01-01T00:00:00-24:00"),
+-            _XPLATSTR("1970-01-01T00:00:00-21:60"),
++            _XPLATSTR(""),     // empty
++            _XPLATSTR(".Z"),   // too short
++            _XPLATSTR(".Zx"),  // no trailing Z
++            _XPLATSTR("3.14Z") // not a valid date
+         };
+ 
+         for (const auto& str : bad_strings)
+@@ -477,6 +166,16 @@ SUITE(datetime)
+         }
+     }
+ 
++    TEST(parsing_time_roundtrip_time)
++    {
++        // time only without date
++        utility::string_t str = _XPLATSTR("14:30:59.1234567Z");
++        auto dt = utility::datetime::from_string(str, utility::datetime::ISO_8601);
++        utility::string_t str2 = dt.to_string(utility::datetime::ISO_8601);
++        // Must look for a substring now, since the date part is filled with today's date
++        VERIFY_IS_TRUE(str2.find(str) != std::string::npos);
++    }
++
+ } // SUITE(datetime)
+ 
+ } // namespace utils_tests
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/system-brotli.patch b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/system-brotli.patch
deleted file mode 100644
index e6f6477..0000000
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest/system-brotli.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Description: Find system brotli
-Author: Gianfranco Costamagna <locutusofborg@debian.org>
-Forwarded: https://github.com/Microsoft/cpprestsdk/pull/952
-Last-Update: 2018-11-05
-
---- cpprest-2.10.7.orig/Release/cmake/cpprest_find_brotli.cmake
-+++ cpprest-2.10.7/Release/cmake/cpprest_find_brotli.cmake
-@@ -3,8 +3,17 @@ function(cpprest_find_brotli)
-     return()
-   endif()
- 
--  find_package(unofficial-brotli REQUIRED)
- 
--  add_library(cpprestsdk_brotli_internal INTERFACE)
--  target_link_libraries(cpprestsdk_brotli_internal INTERFACE unofficial::brotli::brotlienc unofficial::brotli::brotlidec unofficial::brotli::brotlicommon)
-+  find_package(PkgConfig)
-+  pkg_check_modules(BROTLIENC libbrotlienc)
-+  pkg_check_modules(BROTLIDEC libbrotlidec)
-+  if(BROTLIDEC_FOUND AND BROTLIENC_FOUND)
-+	  target_link_libraries(cpprest PRIVATE ${BROTLIDEC_LDFLAGS} ${BROTLIENC_LDFLAGS})
-+  else(BROTLIDEC_FOUND AND BROTLIENC_FOUND)
-+    find_package(unofficial-brotli REQUIRED)
-+    add_library(cpprestsdk_brotli_internal INTERFACE)
-+    target_link_libraries(cpprestsdk_brotli_internal INTERFACE unofficial::brotli::brotlienc unofficial::brotli::brotlidec unofficial::brotli::brotlicommon)
-+    target_link_libraries(cpprest PRIVATE cpprestsdk_brotli_internal)
-+  endif(BROTLIDEC_FOUND AND BROTLIENC_FOUND)
-+
- endfunction()
---- cpprest-2.10.7.orig/Release/src/CMakeLists.txt
-+++ cpprest-2.10.7/Release/src/CMakeLists.txt
-@@ -84,7 +84,6 @@ else()
-     target_compile_definitions(cpprest PRIVATE -DCPPREST_EXCLUDE_BROTLI=1)
-   else()
-     cpprest_find_brotli()
--    target_link_libraries(cpprest PRIVATE cpprestsdk_brotli_internal)
-   endif()
- endif()
- 
diff --git a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.7.bb b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.12.bb
similarity index 65%
rename from meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.7.bb
rename to meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.12.bb
index 5cc6385..92c0453 100644
--- a/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.7.bb
+++ b/meta-openembedded/meta-oe/recipes-support/cpprest/cpprest_2.10.12.bb
@@ -8,16 +8,13 @@
 EXTRA_OECMAKE = "-DCPPREST_EXPORT_DIR=cmake -DCPPREST_EXCLUDE_BROTLI=OFF"
 
 SRC_URI = "git://github.com/Microsoft/cpprestsdk.git;protocol=https;branch=master \
-           file://disable-outside-tests.patch \
-           file://disable-test-timeouts.patch \
-           file://disable-float-tests.patch \
-           file://950-fix.patch \
-           file://system-brotli.patch \
+           file://revert-9b670e5b33dfdbd501d618cd7e7498148ffbd559.patch \
+           file://revert-f10d9f8e214516d2c19aa6ef831ee874a58c0479.patch \
            "
 
-# tag 2.10.7
-SRCREV= "c4cef129e880a3f9c23a480e8c983793963173bb"
+# tag 2.10.12
+SRCREV= "d4fb1cf7f7d22c12e2e442ba5a5e98d09b0a28ab"
 
 S = "${WORKDIR}/git"
 
-inherit cmake
+inherit cmake pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/enchant/enchant2_2.2.3.bb b/meta-openembedded/meta-oe/recipes-support/enchant/enchant2_2.2.3.bb
new file mode 100644
index 0000000..42150c8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/enchant/enchant2_2.2.3.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Enchant Spell checker API Library v2"
+SECTION = "libs"
+HOMEPAGE = "https://abiword.github.io/enchant/"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7"
+
+DEPENDS = "glib-2.0"
+
+inherit autotools pkgconfig
+
+SRC_URI = "https://github.com/AbiWord/enchant/releases/download/v${PV}/enchant-${PV}.tar.gz"
+SRC_URI[md5sum] = "4b8abb58e00e93363591b3f5ea4f52d5"
+SRC_URI[sha256sum] = "abd8e915675cff54c0d4da5029d95c528362266557c61c7149d53fa069b8076d"
+
+S = "${WORKDIR}/enchant-${PV}"
+
+EXTRA_OEMAKE = "pkgdatadir=${datadir}/enchant-2"
+
+PACKAGECONFIG ??= "hunspell"
+PACKAGECONFIG[aspell]  = "--with-aspell,--without-aspell,aspell,aspell"
+PACKAGECONFIG[hunspell]  = "--with-hunspell,--without-hunspell,hunspell,hunspell"
+
+FILES_${PN} += " \
+    ${datadir}/enchant-2 \
+    ${libdir}/enchant-2 \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/espeak-data_1.48.04.bb b/meta-openembedded/meta-oe/recipes-support/espeak/espeak-data_1.48.04.bb
deleted file mode 100644
index a4e5d14..0000000
--- a/meta-openembedded/meta-oe/recipes-support/espeak/espeak-data_1.48.04.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-require espeak.inc
-
-inherit native
-
-PACKAGES = "${PN}"
-FILES_${PN} = "${layout_datadir}"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-TARGET_ARCH = "${MACHINE_ARCH}"
-
-do_compile() {
-    # Fixing byte order of phoneme data files
-    cd "${S}/platforms/big_endian"
-    sed -i '/^ *CC *=/d' Makefile
-    sed -i 's/\(.*BYTE_ORDER\)/#undef BYTE_ORDER\n#define BYTE_ORDER BIG_ENDIAN\n\1/' espeak-phoneme-data.c
-    oe_runmake
-    ./espeak-phoneme-data "${S}/espeak-data" "." "${S}/espeak-data/phondata-manifest"
-    cp -f phondata phonindex phontab "${S}/espeak-data"
-}
-
-do_install() {
-    install -d ${D}${layout_datadir}/espeak-data
-    install -m 0644 ${S}/espeak-data/phon* ${D}${layout_datadir}/espeak-data
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/espeak.inc b/meta-openembedded/meta-oe/recipes-support/espeak/espeak.inc
deleted file mode 100644
index f45455c..0000000
--- a/meta-openembedded/meta-oe/recipes-support/espeak/espeak.inc
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "eSpeak is a compact open source software speech synthesizer"
-SECTION = "base"
-LICENSE = "GPLv3"
-LIC_FILES_CHKSUM = "file://License.txt;md5=cb7a20edb4c9f5f478de6523dcd7362c"
-
-SRC_URI = "http://downloads.sourceforge.net/espeak/espeak-1.48.04-source.zip \
-           file://0001-Fix-build-of-shared-library-on-architectures-needing.patch \
-           file://espeak-1.48-gcc-6-fix.patch \
-"
-SRC_URI[md5sum] = "cadd7482eaafe9239546bdc09fa244c3"
-SRC_URI[sha256sum] = "bf9a17673adffcc28ff7ea18764f06136547e97bbd9edf2ec612f09b207f0659"
-
-S = "${WORKDIR}/espeak-${PV}-source"
-
-DEPENDS = "portaudio-v19"
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb b/meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb
index 57e30f0..78f8f85 100644
--- a/meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb
+++ b/meta-openembedded/meta-oe/recipes-support/espeak/espeak_1.48.04.bb
@@ -1,8 +1,20 @@
-require espeak.inc
-inherit siteinfo
+DESCRIPTION = "eSpeak is a compact open source software speech synthesizer"
+SECTION = "base"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://License.txt;md5=cb7a20edb4c9f5f478de6523dcd7362c"
 
-EXTRA_PHONEMES = '${@bb.utils.contains("SITEINFO_ENDIANNESS", "be",  "espeak-data (= ${PV})", "", d)}'
-RDEPENDS_${PN} = "portaudio-v19 ${EXTRA_PHONEMES}"
+SRC_URI = "http://downloads.sourceforge.net/espeak/espeak-1.48.04-source.zip \
+           file://0001-Fix-build-of-shared-library-on-architectures-needing.patch \
+           file://0002-tr_languages-cast-string_ordinal-init-values.patch \
+"
+SRC_URI[md5sum] = "cadd7482eaafe9239546bdc09fa244c3"
+SRC_URI[sha256sum] = "bf9a17673adffcc28ff7ea18764f06136547e97bbd9edf2ec612f09b207f0659"
+
+S = "${WORKDIR}/espeak-${PV}-source"
+
+DEPENDS = "portaudio-v19 qemu-helper-native"
+inherit siteinfo qemu
+
 
 CXXFLAGS += "-DUSE_PORTAUDIO"
 TARGET_CC_ARCH += "${LDFLAGS}"
@@ -11,12 +23,30 @@
 
 do_configure() {
     #  "speak" binary, a TTS engine, uses portaudio in either APIs V18 or V19, use V19
-    cp "${S}/src/portaudio19.h" "${S}/src/portaudio.h"
+    install -m 0644 "${S}/src/portaudio19.h" "${S}/src/portaudio.h"
 }
 
 do_compile() {
     cd src
     oe_runmake
+
+    cd "${S}/platforms/big_endian"
+    qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${S}/platforms/big_endian', '${STAGING_DIR_TARGET}${base_libdir}'])}"
+    cat >qemuwrapper <<EOF
+#!/bin/sh
+$qemu_binary "\$@"
+EOF
+    chmod +x qemuwrapper
+    sed -i '/^ *CC *=/d' Makefile
+    # Fixing byte order of phoneme data files
+    if [ "${SITEINFO_ENDIANNESS}" = "be" ]; then
+        sed -i 's/\(.*BYTE_ORDER\)/#undef BYTE_ORDER\n#define BYTE_ORDER BIG_ENDIAN\n\1/' espeak-phoneme-data.c
+    else
+        sed -i 's/\(.*BYTE_ORDER\)/#undef BYTE_ORDER\n#define BYTE_ORDER LITTLE_ENDIAN\n\1/' espeak-phoneme-data.c
+    fi
+    oe_runmake
+    ./qemuwrapper ./espeak-phoneme-data "${S}/espeak-data" "." "${S}/espeak-data/phondata-manifest"
+    cp -f phondata phonindex phontab "${S}/espeak-data"
 }
 
 do_install() {
@@ -31,10 +61,7 @@
     ln -sf espeak/espeak.h ${D}${includedir}/
     oe_libinstall -so -C src libespeak ${D}${libdir}
 
-    if [ "${SITEINFO_ENDIANNESS}" = "be" ] ; then
-        # the big-endian phon* files are provided by the package espeak-data
-        rm -f ${S}/espeak-data/phon*
-    fi
-
     cp -R --no-dereference --preserve=mode,links ${S}/espeak-data/* ${D}${datadir}/espeak-data
 }
+
+RDEPENDS_${PN} = "portaudio-v19"
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/files/0002-tr_languages-cast-string_ordinal-init-values.patch b/meta-openembedded/meta-oe/recipes-support/espeak/files/0002-tr_languages-cast-string_ordinal-init-values.patch
new file mode 100644
index 0000000..cef360e
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/espeak/files/0002-tr_languages-cast-string_ordinal-init-values.patch
@@ -0,0 +1,34 @@
+From 451330d09a6a3500b40bc4f5896ba790ab46cd6c Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@gmail.com>
+Date: Sun, 15 Jan 2017 19:37:31 +0100
+Subject: [PATCH 2/2] tr_languages: cast string_ordinal init values
+
+On some architecture, "char" is signed (x86_64, nios2...) so the
+compiler try to convert int 0xc2 and 0xba to a signed char.
+This is an error since gcc6 (Wnarrowing).
+
+Fixes:
+http://autobuild.buildroot.net/results/bae/baef9888b1979d18171668a675985e3f3b45fda6
+
+Upstream-Status: Pending [imported from BR]
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ src/tr_languages.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp
+index 5c80286..dbc6e36 100644
+--- a/src/tr_languages.cpp
++++ b/src/tr_languages.cpp
+@@ -200,7 +200,7 @@ static const unsigned short chars_ignore_zwnj_hyphen[] = {
+ 	0x200d,  1, // zero width joiner
+ 	0, 0 };
+ 
+-const char string_ordinal[] = {0xc2,0xba,0};  // masculine ordinal character, UTF-8
++const char string_ordinal[] = {(char)0xc2,(char)0xba,0};  // masculine ordinal character, UTF-8
+ 
+ 
+ static Translator* NewTranslator(void)
+-- 
+2.9.3
+
diff --git a/meta-openembedded/meta-oe/recipes-support/espeak/files/espeak-1.48-gcc-6-fix.patch b/meta-openembedded/meta-oe/recipes-support/espeak/files/espeak-1.48-gcc-6-fix.patch
deleted file mode 100644
index 6e59c78..0000000
--- a/meta-openembedded/meta-oe/recipes-support/espeak/files/espeak-1.48-gcc-6-fix.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp
---- a/src/tr_languages.cpp
-+++ b/src/tr_languages.cpp
-@@ -198,7 +198,7 @@ static const unsigned short chars_ignore_zwnj_hyphen[] = {
- 	0x200d,  1, // zero width joiner
- 	0, 0 };
- 
--const char string_ordinal[] = {0xc2,0xba,0};  // masculine ordinal character, UTF-8
-+const char string_ordinal[] = {'\xc2','\xba',0};  // masculine ordinal character, UTF-8
- 
- 
- static Translator* NewTranslator(void)
diff --git a/meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.14.bb b/meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.14.bb
index 775257f..967beeb 100644
--- a/meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.14.bb
+++ b/meta-openembedded/meta-oe/recipes-support/farsight/libnice_0.1.14.bb
@@ -15,15 +15,16 @@
 
 PACKAGECONFIG ??= "gstreamer1.0"
 PACKAGECONFIG[gupnp] = "--enable-gupnp,--disable-gupnp,gupnp-igd"
-PACKAGECONFIG[gstreamer0.10] = "--with-gstreamer-0.10,--without-gstreamer-0.10,gstreamer gst-plugins-base"
 PACKAGECONFIG[gstreamer1.0] = "--with-gstreamer,--without-gstreamer,gstreamer1.0 gstreamer1.0-plugins-base"
 
 inherit autotools pkgconfig gtk-doc gobject-introspection
 
-FILES_${PN} += "${libdir}/gstreamer-0.10/*.so ${libdir}/gstreamer-1.0/*.so"
-FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-1.0/*.la"
-FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/*.a ${libdir}/gstreamer-1.0/*.a"
-FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug ${libdir}/gstreamer-1.0/.debug"
+EXTRA_OECONF += "--without-gstreamer-0.10"
+
+FILES_${PN} += "${libdir}/gstreamer-1.0/*.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-1.0/.debug"
 
 do_configure_prepend() {
     mkdir ${S}/m4 || true
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-gstreamer-1.0-detection.patch b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-gstreamer-1.0-detection.patch
deleted file mode 100644
index a567cba..0000000
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/0001-Fix-gstreamer-1.0-detection.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 368989526c32cdf9d680a397fede3cb773fa2609 Mon Sep 17 00:00:00 2001
-From: Mike Gilbert <floppym@gentoo.org>
-Date: Fri, 28 Jul 2017 16:31:41 -0400
-Subject: [PATCH] Fix gstreamer-1.0 detection
-
-Upstream State: Backport
-
----
- cmake/FindGStreamer_1_0.cmake | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/cmake/FindGStreamer_1_0.cmake b/cmake/FindGStreamer_1_0.cmake
-index 3aa8fc6..6fbc0ec 100644
---- a/cmake/FindGStreamer_1_0.cmake
-+++ b/cmake/FindGStreamer_1_0.cmake
-@@ -59,7 +59,7 @@ macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _library)
- 
-     string(REGEX MATCH "(.*)>=(.*)" _dummy "${_pkgconfig_name}")
-     if ("${CMAKE_MATCH_2}" STREQUAL "")
--        pkg_check_modules(PC_${_component_prefix} "${_pkgconfig_name} >= ${GStreamer_FIND_VERSION}")
-+        pkg_check_modules(PC_${_component_prefix} "${_pkgconfig_name} >= ${GSTREAMER_1_0_MINIMUM_VERSION}")
-     else ()
-         pkg_check_modules(PC_${_component_prefix} ${_pkgconfig_name})
-     endif ()
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch
index 0d7dcc2..0f6f575 100644
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp/winpr-makecert-Build-with-install-RPATH.patch
@@ -12,13 +12,13 @@
  winpr/tools/makecert-cli/CMakeLists.txt | 3 +++
  1 file changed, 3 insertions(+)
 
-diff --git a/winpr/tools/makecert-cli/CMakeLists.txt b/winpr/tools/makecert-cli/CMakeLists.txt
-index 74afa09..8d00ef1 100644
---- a/winpr/tools/makecert-cli/CMakeLists.txt
-+++ b/winpr/tools/makecert-cli/CMakeLists.txt
+Index: git/winpr/tools/makecert-cli/CMakeLists.txt
+===================================================================
+--- git.orig/winpr/tools/makecert-cli/CMakeLists.txt
++++ git/winpr/tools/makecert-cli/CMakeLists.txt
 @@ -44,6 +44,9 @@ set(${MODULE_PREFIX}_LIBS winpr-tools)
  
- target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})
+ target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS} winpr)
  
 +set_target_properties(${MODULE_NAME} PROPERTIES
 +       BUILD_WITH_INSTALL_RPATH 1)
@@ -26,6 +26,3 @@
  set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "WinPR/Tools")
  
  install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT tools EXPORT WinPRTargets)
--- 
-2.7.4
-
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 88aec9c..373c497 100644
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_git.bb
@@ -13,10 +13,10 @@
 PV = "2.0.0+gitr${SRCPV}"
 PKGV = "${GITPKGVTAG}"
 
-SRCREV = "1648deb435ad52206f7aa2afe4b4dff71d9329bc"
+# 2.0.0-rc4
+SRCREV = "e21b72c95f857817b4b32b5ef5406355c005a9e8"
 SRC_URI = "git://github.com/FreeRDP/FreeRDP.git \
     file://winpr-makecert-Build-with-install-RPATH.patch \
-    file://0001-Fix-gstreamer-1.0-detection.patch \
 "
 
 S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/function2/function2_4.0.0.bb b/meta-openembedded/meta-oe/recipes-support/function2/function2_4.0.0.bb
new file mode 100644
index 0000000..556a25a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/function2/function2_4.0.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Improved drop-in replacement for std::function"
+DESCRIPTION = "Provides improved implementations of std::function."
+HOMEPAGE = "https://naios.github.io/function2"
+LICENSE = "BSL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
+SRCREV = "d2acdb6c3c7612a6133cd03464ef941161258f4e"
+PV .= "+git${SRCPV}"
+
+SRC_URI += "gitsm://github.com/Naios/function2"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+inherit ptest
+
+# Installs some data to incorrect top-level /usr directory
+do_install_append() {
+	mkdir -p ${D}/${datadir}/function2
+	mv ${D}/${prefix}/Readme.md ${D}/${datadir}/function2/
+	mv ${D}/${prefix}/LICENSE.txt ${D}/${datadir}/function2/
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib/CVE-2018-17942.patch b/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib/CVE-2018-17942.patch
deleted file mode 100644
index 77e82b1..0000000
--- a/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib/CVE-2018-17942.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From e91600a7aae3bafbefbe13abf771e61badd16286 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Tue, 16 Oct 2018 14:26:11 +0800
-Subject: [PATCH] vasnprintf: Fix heap memory overrun bug.
-
-Reported by Ben Pfaff <blp@cs.stanford.edu> in
-<https://lists.gnu.org/archive/html/bug-gnulib/2018-09/msg00107.html>.
-
-* lib/vasnprintf.c (convert_to_decimal): Allocate one more byte of
-memory.
-* tests/test-vasnprintf.c (test_function): Add another test.
-
-Upstream-Status: Backport [http://git.savannah.gnu.org/gitweb/?p=gnulib.git;
-a=commitdiff;h=278b4175c9d7dd47c1a3071554aac02add3b3c35]
-
-CVE: CVE-2018-17942
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- ChangeLog               |  8 ++++++++
- lib/vasnprintf.c        |  4 +++-
- tests/test-vasnprintf.c | 19 ++++++++++++++++++-
- 3 files changed, 29 insertions(+), 2 deletions(-)
-
-diff --git a/ChangeLog b/ChangeLog
-index 9864353..5ff76a3 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,11 @@
-+2018-09-23  Bruno Haible  <bruno@clisp.org>
-+ 	vasnprintf: Fix heap memory overrun bug.
-+	Reported by Ben Pfaff <blp@cs.stanford.edu> in
-+	<https://lists.gnu.org/archive/html/bug-gnulib/2018-09/msg00107.html>.
-+	* lib/vasnprintf.c (convert_to_decimal): Allocate one more byte of
-+	memory.
-+	* tests/test-vasnprintf.c (test_function): Add another test.
-+
- 2017-08-21  Paul Eggert  <eggert@cs.ucla.edu>
- 
- 	vc-list-files: port to Solaris 10
-diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
-index 2e4eb19..45de49f 100644
---- a/lib/vasnprintf.c
-+++ b/lib/vasnprintf.c
-@@ -860,7 +860,9 @@ convert_to_decimal (mpn_t a, size_t extra_zeroes)
-   size_t a_len = a.nlimbs;
-   /* 0.03345 is slightly larger than log(2)/(9*log(10)).  */
-   size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1);
--  char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes));
-+  /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the
-+     digits of a, followed by 1 byte for the terminating NUL.  */
-+  char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1));
-   if (c_ptr != NULL)
-     {
-       char *d_ptr = c_ptr;
-diff --git a/tests/test-vasnprintf.c b/tests/test-vasnprintf.c
-index 2dd869f..ff68d5c 100644
---- a/tests/test-vasnprintf.c
-+++ b/tests/test-vasnprintf.c
-@@ -53,7 +53,24 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
-       ASSERT (result != NULL);
-       ASSERT (strcmp (result, "12345") == 0);
-       ASSERT (length == 5);
--      if (size < 6)
-+      if (size < 5 + 1)
-+        ASSERT (result != buf);
-+      ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0);
-+      if (result != buf)
-+        free (result);
-+    }
-+   /* Note: This test assumes IEEE 754 representation of 'double' floats.  */
-+  for (size = 0; size <= 8; size++)
-+    {
-+      size_t length;
-+      char *result;
-+       memcpy (buf, "DEADBEEF", 8);
-+      length = size;
-+      result = my_asnprintf (buf, &length, "%2.0f", 1.6314159265358979e+125);
-+      ASSERT (result != NULL);
-+      ASSERT (strcmp (result, "163141592653589790215729350939528493057529598899734151772468186268423257777068536614838678161083520756952076273094236944990208") == 0);
-+      ASSERT (length == 126);
-+      if (size < 126 + 1)
-         ASSERT (result != buf);
-       ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0);
-       if (result != buf)
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2017-08-20.18.bb b/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2018-03-07.03.bb
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2017-08-20.18.bb
rename to meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2018-03-07.03.bb
index e048810..146747e 100644
--- a/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2017-08-20.18.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gnulib/gnulib_2018-03-07.03.bb
@@ -11,20 +11,20 @@
 LICENSE = "LGPLv2+"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=56a22a6e5bcce45e2c8ac184f81412b5"
-SRCREV = "b23000de1e47c7d580e0e220966dd1ee42a5e5bc"
+SRCREV = "0d6e3307bbdb8df4d56043d5f373eeeffe4cbef3"
 
-SRC_URI = "git://git.sv.gnu.org/gnulib;protocol=git \
-           file://CVE-2018-17942.patch \
+SRC_URI = "git://git.sv.gnu.org/gnulib.git \
 "
 
 S = "${WORKDIR}/git"
 
+inherit utils
+
 do_install () {
     cd ${S}
+    check_git_config
     git checkout master
     git clone ${S} ${D}/${datadir}/gnulib
-    cd ${D}/${datadir}/gnulib
-    git am ${WORKDIR}/CVE-2018-17942.patch
 }
 
 do_patch[noexec] = "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.bb
index e9fcc4c..c8b9127 100644
--- a/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.bb
+++ b/meta-openembedded/meta-oe/recipes-support/gperftools/gperftools_2.7.bb
@@ -26,4 +26,5 @@
 # {standard input}:434: Error: lo register required -- `ldr pc,[sp]'
 # Makefile:4538: recipe for target 'src/base/libtcmalloc_la-linuxthreads.lo' failed
 ARM_INSTRUCTION_SET_armv5 = "arm"
+ARM_INSTRUCTION_SET_toolchain-clang_arm = "arm"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/files/0001-cross-compiling-support.patch b/meta-openembedded/meta-oe/recipes-support/hdf5/files/0001-cross-compiling-support.patch
new file mode 100644
index 0000000..97f16bb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/files/0001-cross-compiling-support.patch
@@ -0,0 +1,71 @@
+From 1b4fadf550587b46e405d7ccb777dcb00aa791a2 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 29 Jan 2019 15:39:15 +0800
+Subject: [PATCH 1/2] cross compiling support
+
+Do not generate config files at build time, use pre-generated
+files to instead.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ CMakeLists.txt     |  6 ++++++
+ src/CMakeLists.txt | 23 -----------------------
+ 2 files changed, 6 insertions(+), 23 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 08a65c4..9af14d5 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -817,4 +817,10 @@ endif ()
+ #-----------------------------------------------------------------------------
+ configure_file (${HDF_RESOURCES_DIR}/H5pubconf.h.in ${HDF5_BINARY_DIR}/H5pubconf.h @ONLY)
+ 
++#-----------------------------------------------------------------------------
++# Copy the pre-generated files in place
++#-----------------------------------------------------------------------------
++configure_file(H5Tinit.c H5Tinit.c COPYONLY)
++configure_file(H5lib_settings.c H5lib_settings.c COPYONLY)
++
+ include (CMakeInstallation.cmake)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index d343208..d11525b 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -613,32 +613,9 @@ set (H5_PRIVATE_HEADERS
+ #-----------------------------------------------------------------------------
+ add_executable (H5detect ${HDF5_SRC_DIR}/H5detect.c)
+ TARGET_C_PROPERTIES (H5detect STATIC " " " ")
+-if (MSVC OR MINGW)
+-  target_link_libraries (H5detect "ws2_32.lib")
+-endif ()
+-
+-set (CMD $<TARGET_FILE:H5detect>)
+-add_custom_command (
+-    OUTPUT ${HDF5_BINARY_DIR}/H5Tinit.c
+-    COMMAND ${CMD}
+-    ARGS > ${HDF5_BINARY_DIR}/H5Tinit.c
+-    DEPENDS H5detect
+-)
+ 
+ add_executable (H5make_libsettings ${HDF5_SRC_DIR}/H5make_libsettings.c)
+ TARGET_C_PROPERTIES (H5make_libsettings STATIC " " " ")
+-if (MSVC OR MINGW)
+-  target_link_libraries (H5make_libsettings "ws2_32.lib")
+-endif ()
+-
+-set (CMD $<TARGET_FILE:H5make_libsettings>)
+-add_custom_command (
+-    OUTPUT ${HDF5_BINARY_DIR}/H5lib_settings.c
+-    COMMAND ${CMD}
+-    ARGS > ${HDF5_BINARY_DIR}/H5lib_settings.c
+-    DEPENDS H5make_libsettings
+-    WORKING_DIRECTORY ${HDF5_BINARY_DIR}
+-)
+ 
+ if (GENERATE_ERROR_HEADERS)
+   find_package (Perl)
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/files/0002-Remove-suffix-shared-from-shared-library-name.patch b/meta-openembedded/meta-oe/recipes-support/hdf5/files/0002-Remove-suffix-shared-from-shared-library-name.patch
new file mode 100644
index 0000000..6f89378
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/files/0002-Remove-suffix-shared-from-shared-library-name.patch
@@ -0,0 +1,50 @@
+From f76141864edf7100c1c29bec159ea629077a7fa0 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 29 Jan 2019 11:13:42 +0800
+Subject: [PATCH 2/2] Remove suffix `-shared' from shared library name
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ CMakeLists.txt | 24 ++++++++++++------------
+ 1 file changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9af14d5..05100e3 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -153,18 +153,18 @@ set (HDF5_F90_TEST_LIB_TARGET     "${HDF5_F90_TEST_LIB_CORENAME}-static")
+ set (HDF5_F90_C_TEST_LIB_TARGET   "${HDF5_F90_C_TEST_LIB_CORENAME}-static")
+ set (HDF5_HL_F90_LIB_TARGET       "${HDF5_HL_F90_LIB_CORENAME}-static")
+ set (HDF5_HL_F90_C_LIB_TARGET     "${HDF5_HL_F90_C_LIB_CORENAME}-static")
+-set (HDF5_LIBSH_TARGET            "${HDF5_LIB_CORENAME}-shared")
+-set (HDF5_TEST_LIBSH_TARGET       "${HDF5_TEST_LIB_CORENAME}-shared")
+-set (HDF5_CPP_LIBSH_TARGET        "${HDF5_CPP_LIB_CORENAME}-shared")
+-set (HDF5_HL_LIBSH_TARGET         "${HDF5_HL_LIB_CORENAME}-shared")
+-set (HDF5_HL_CPP_LIBSH_TARGET     "${HDF5_HL_CPP_LIB_CORENAME}-shared")
+-set (HDF5_TOOLS_LIBSH_TARGET      "${HDF5_TOOLS_LIB_CORENAME}-shared")
+-set (HDF5_F90_LIBSH_TARGET        "${HDF5_F90_LIB_CORENAME}-shared")
+-set (HDF5_F90_C_LIBSH_TARGET      "${HDF5_F90_C_LIB_CORENAME}-shared")
+-set (HDF5_F90_TEST_LIBSH_TARGET   "${HDF5_F90_TEST_LIB_CORENAME}-shared")
+-set (HDF5_F90_C_TEST_LIBSH_TARGET "${HDF5_F90_C_TEST_LIB_CORENAME}-shared")
+-set (HDF5_HL_F90_LIBSH_TARGET     "${HDF5_HL_F90_LIB_CORENAME}-shared")
+-set (HDF5_HL_F90_C_LIBSH_TARGET   "${HDF5_HL_F90_C_LIB_CORENAME}-shared")
++set (HDF5_LIBSH_TARGET            "${HDF5_LIB_CORENAME}")
++set (HDF5_TEST_LIBSH_TARGET       "${HDF5_TEST_LIB_CORENAME}")
++set (HDF5_CPP_LIBSH_TARGET        "${HDF5_CPP_LIB_CORENAME}")
++set (HDF5_HL_LIBSH_TARGET         "${HDF5_HL_LIB_CORENAME}")
++set (HDF5_HL_CPP_LIBSH_TARGET     "${HDF5_HL_CPP_LIB_CORENAME}")
++set (HDF5_TOOLS_LIBSH_TARGET      "${HDF5_TOOLS_LIB_CORENAME}")
++set (HDF5_F90_LIBSH_TARGET        "${HDF5_F90_LIB_CORENAME}")
++set (HDF5_F90_C_LIBSH_TARGET      "${HDF5_F90_C_LIB_CORENAME}")
++set (HDF5_F90_TEST_LIBSH_TARGET   "${HDF5_F90_TEST_LIB_CORENAME}")
++set (HDF5_F90_C_TEST_LIBSH_TARGET "${HDF5_F90_C_TEST_LIB_CORENAME}")
++set (HDF5_HL_F90_LIBSH_TARGET     "${HDF5_HL_F90_LIB_CORENAME}")
++set (HDF5_HL_F90_C_LIBSH_TARGET   "${HDF5_HL_F90_C_LIB_CORENAME}")
+ 
+ #-----------------------------------------------------------------------------
+ # Define some CMake variables for use later in the project
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5Tinit-32.c b/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5Tinit-32.c
new file mode 100755
index 0000000..8057a7a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5Tinit-32.c
@@ -0,0 +1,975 @@
+/* Generated automatically by H5detect -- do not edit */
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the COPYING file, which can be found at the root of the source code       *
+ * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.  *
+ * If you do not have access to either file, you may request a copy from     *
+ * help@hdfgroup.org.                                                        *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * Created:		Mar  5, 2019
+ *			root <root@qemuarm>
+ *
+ * Purpose:		This machine-generated source code contains
+ *			information about the various integer and
+ *			floating point numeric formats found on this
+ *			architecture.  The parameters below should be
+ *			checked carefully and errors reported to the
+ *			HDF5 maintainer.
+ *			
+ *			Each of the numeric formats listed below are
+ *			printed from most significant bit to least
+ *			significant bit even though the actual bytes
+ *			might be stored in a different order in
+ *			memory.	 The integers above each binary byte
+ *			indicate the relative order of the bytes in
+ *			memory; little-endian machines have
+ *			decreasing numbers while big-endian machines
+ *			have increasing numbers.
+ *			
+ *			The fields of the numbers are printed as
+ *			letters with `S' for the mantissa sign bit,
+ *			`M' for the mantissa magnitude, and `E' for
+ *			the exponent.  The exponent has an associated
+ *			bias which can be subtracted to find the
+ *			true exponent.	The radix point is assumed
+ *			to be before the first `M' bit.	 Any bit
+ *			of a floating-point value not falling into one
+ *			of these categories is printed as a question
+ *			mark.  Bits of integer types are printed as
+ *			`I' for 2's complement and `U' for magnitude.
+ *			
+ *			If the most significant bit of the normalized
+ *			mantissa (always a `1' except for `0.0') is
+ *			not stored then an `implicit=yes' appears
+ *			under the field description.  In thie case,
+ *			the radix point is still assumed to be
+ *			before the first `M' but after the implicit
+ *			bit.
+ *
+ * Modifications:
+ *
+ *	DO NOT MAKE MODIFICATIONS TO THIS FILE!
+ *	It was generated by code in `H5detect.c'.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/****************/
+/* Module Setup */
+/****************/
+
+#define H5T_PACKAGE /*suppress error about including H5Tpkg.h*/
+
+
+/***********/
+/* Headers */
+/***********/
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Tpkg.h"		/* Datatypes 				*/
+
+
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5TN_init_interface
+ *
+ * Purpose:	Initialize pre-defined native datatypes from code generated
+ *              during the library configuration by H5detect.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 16, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5TN_init_interface(void)
+{
+    H5T_t	*dt = NULL;
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(FAIL)
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_SCHAR_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_SCHAR_ALIGN_g = 1;
+    H5T_NATIVE_SCHAR_COMP_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UCHAR_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UCHAR_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_SHORT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_SHORT_ALIGN_g = 1;
+    H5T_NATIVE_SHORT_COMP_ALIGN_g = 2;
+
+   /*
+    *    1        0
+    * UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_USHORT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_USHORT_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_ALIGN_g = 1;
+    H5T_NATIVE_INT_COMP_ALIGN_g = 4;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_LONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_LONG_ALIGN_g = 1;
+    H5T_NATIVE_LONG_COMP_ALIGN_g = 4;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_ULONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_ULONG_ALIGN_g = 1;
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST8_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT16_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT16_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST16_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST16_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST16_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST16_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST32_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_LLONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_LLONG_ALIGN_g = 1;
+    H5T_NATIVE_LLONG_COMP_ALIGN_g = 8;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_ULLONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_ULLONG_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
+    * Implicit bit? yes
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_FLOAT;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.f.sign = 31;
+    dt->shared->u.atomic.u.f.epos = 23;
+    dt->shared->u.atomic.u.f.esize = 8;
+    dt->shared->u.atomic.u.f.ebias = 0x0000007f;
+    dt->shared->u.atomic.u.f.mpos = 0;
+    dt->shared->u.atomic.u.f.msize = 23;
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+    if((H5T_NATIVE_FLOAT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_FLOAT_ALIGN_g = 1;
+    H5T_NATIVE_FLOAT_COMP_ALIGN_g = 4;
+
+   /*
+    *    7        6        5        4
+    * SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM
+    *    3        2        1        0
+    * MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
+    * Implicit bit? yes
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_FLOAT;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.f.sign = 63;
+    dt->shared->u.atomic.u.f.epos = 52;
+    dt->shared->u.atomic.u.f.esize = 11;
+    dt->shared->u.atomic.u.f.ebias = 0x000003ff;
+    dt->shared->u.atomic.u.f.mpos = 0;
+    dt->shared->u.atomic.u.f.msize = 52;
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+    if((H5T_NATIVE_DOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_DOUBLE_ALIGN_g = 1;
+    H5T_NATIVE_DOUBLE_COMP_ALIGN_g = 8;
+
+   /*
+    *    7        6        5        4
+    * SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM
+    *    3        2        1        0
+    * MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
+    * Implicit bit? yes
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_FLOAT;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.f.sign = 63;
+    dt->shared->u.atomic.u.f.epos = 52;
+    dt->shared->u.atomic.u.f.esize = 11;
+    dt->shared->u.atomic.u.f.ebias = 0x000003ff;
+    dt->shared->u.atomic.u.f.mpos = 0;
+    dt->shared->u.atomic.u.f.msize = 52;
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+    if((H5T_NATIVE_LDOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_LDOUBLE_ALIGN_g = 1;
+    H5T_NATIVE_LDOUBLE_COMP_ALIGN_g = 8;
+
+    /* Set the native order for this machine */
+    H5T_native_order_g = H5T_ORDER_LE;
+
+    /* Structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */
+    H5T_POINTER_COMP_ALIGN_g = 4;
+    H5T_HVL_COMP_ALIGN_g = 4;
+    H5T_HOBJREF_COMP_ALIGN_g = 8;
+    H5T_HDSETREGREF_COMP_ALIGN_g = 1;
+
+done:
+    if(ret_value < 0) {
+        if(dt != NULL) {
+            dt->shared = H5FL_FREE(H5T_shared_t, dt->shared);
+            dt = H5FL_FREE(H5T_t, dt);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5TN_init_interface() */
+
+/****************************************/
+/* ALIGNMENT and signal-handling status */
+/****************************************/
+/* Signal() support: yes */
+/* setjmp() support: yes */
+/* longjmp() support: yes */
+/* sigsetjmp() support: yes */
+/* siglongjmp() support: yes */
+/* sigprocmask() support: yes */
+
+/******************************/
+/* signal handlers statistics */
+/******************************/
+/* signal_handlers tested: 15 times */
+/* sigbus_handler called: 5 times */
+/* sigsegv_handler called: 5 times */
+/* sigill_handler called: 5 times */
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5Tinit-64.c b/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5Tinit-64.c
new file mode 100644
index 0000000..85f79a6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5Tinit-64.c
@@ -0,0 +1,991 @@
+/* Generated automatically by H5detect -- do not edit */
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the COPYING file, which can be found at the root of the source code       *
+ * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.  *
+ * If you do not have access to either file, you may request a copy from     *
+ * help@hdfgroup.org.                                                        *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * Created:		Jan 29, 2019
+ *			root <root@qemux86-64>
+ *
+ * Purpose:		This machine-generated source code contains
+ *			information about the various integer and
+ *			floating point numeric formats found on this
+ *			architecture.  The parameters below should be
+ *			checked carefully and errors reported to the
+ *			HDF5 maintainer.
+ *			
+ *			Each of the numeric formats listed below are
+ *			printed from most significant bit to least
+ *			significant bit even though the actual bytes
+ *			might be stored in a different order in
+ *			memory.	 The integers above each binary byte
+ *			indicate the relative order of the bytes in
+ *			memory; little-endian machines have
+ *			decreasing numbers while big-endian machines
+ *			have increasing numbers.
+ *			
+ *			The fields of the numbers are printed as
+ *			letters with `S' for the mantissa sign bit,
+ *			`M' for the mantissa magnitude, and `E' for
+ *			the exponent.  The exponent has an associated
+ *			bias which can be subtracted to find the
+ *			true exponent.	The radix point is assumed
+ *			to be before the first `M' bit.	 Any bit
+ *			of a floating-point value not falling into one
+ *			of these categories is printed as a question
+ *			mark.  Bits of integer types are printed as
+ *			`I' for 2's complement and `U' for magnitude.
+ *			
+ *			If the most significant bit of the normalized
+ *			mantissa (always a `1' except for `0.0') is
+ *			not stored then an `implicit=yes' appears
+ *			under the field description.  In thie case,
+ *			the radix point is still assumed to be
+ *			before the first `M' but after the implicit
+ *			bit.
+ *
+ * Modifications:
+ *
+ *	DO NOT MAKE MODIFICATIONS TO THIS FILE!
+ *	It was generated by code in `H5detect.c'.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/****************/
+/* Module Setup */
+/****************/
+
+#define H5T_PACKAGE /*suppress error about including H5Tpkg.h*/
+
+
+/***********/
+/* Headers */
+/***********/
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Tpkg.h"		/* Datatypes 				*/
+
+
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/********************/
+/* Public Variables */
+/********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5TN_init_interface
+ *
+ * Purpose:	Initialize pre-defined native datatypes from code generated
+ *              during the library configuration by H5detect.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 16, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5TN_init_interface(void)
+{
+    H5T_t	*dt = NULL;
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(FAIL)
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_SCHAR_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_SCHAR_ALIGN_g = 1;
+    H5T_NATIVE_SCHAR_COMP_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UCHAR_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UCHAR_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_SHORT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_SHORT_ALIGN_g = 1;
+    H5T_NATIVE_SHORT_COMP_ALIGN_g = 2;
+
+   /*
+    *    1        0
+    * UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_USHORT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_USHORT_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_ALIGN_g = 1;
+    H5T_NATIVE_INT_COMP_ALIGN_g = 4;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_LONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_LONG_ALIGN_g = 1;
+    H5T_NATIVE_LONG_COMP_ALIGN_g = 8;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_ULONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_ULONG_ALIGN_g = 1;
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST8_ALIGN_g = 1;
+
+   /*
+    *    0
+    * UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 1;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 8;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST8_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST8_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT16_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT16_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST16_ALIGN_g = 1;
+
+   /*
+    *    1        0
+    * UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 2;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 16;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST16_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST16_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST16_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST16_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST32_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST32_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST32_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST32_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST32_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_LEAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_LEAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_LEAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_LEAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_INT_FAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_INT_FAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_UINT_FAST64_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_UINT_FAST64_ALIGN_g = 1;
+
+   /*
+    *    7        6        5        4
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    *    3        2        1        0
+    * IIIIIIII IIIIIIII IIIIIIII IIIIIIII
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;
+    if((H5T_NATIVE_LLONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_LLONG_ALIGN_g = 1;
+    H5T_NATIVE_LLONG_COMP_ALIGN_g = 8;
+
+   /*
+    *    7        6        5        4
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    *    3        2        1        0
+    * UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_INTEGER;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;
+    if((H5T_NATIVE_ULLONG_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_ULLONG_ALIGN_g = 1;
+
+   /*
+    *    3        2        1        0
+    * SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM
+    * Implicit bit? yes
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_FLOAT;
+    dt->shared->size = 4;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 32;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.f.sign = 31;
+    dt->shared->u.atomic.u.f.epos = 23;
+    dt->shared->u.atomic.u.f.esize = 8;
+    dt->shared->u.atomic.u.f.ebias = 0x0000007f;
+    dt->shared->u.atomic.u.f.mpos = 0;
+    dt->shared->u.atomic.u.f.msize = 23;
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+    if((H5T_NATIVE_FLOAT_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_FLOAT_ALIGN_g = 1;
+    H5T_NATIVE_FLOAT_COMP_ALIGN_g = 4;
+
+   /*
+    *    7        6        5        4
+    * SEEEEEEE EEEEMMMM MMMMMMMM MMMMMMMM
+    *    3        2        1        0
+    * MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
+    * Implicit bit? yes
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_FLOAT;
+    dt->shared->size = 8;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 64;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.f.sign = 63;
+    dt->shared->u.atomic.u.f.epos = 52;
+    dt->shared->u.atomic.u.f.esize = 11;
+    dt->shared->u.atomic.u.f.ebias = 0x000003ff;
+    dt->shared->u.atomic.u.f.mpos = 0;
+    dt->shared->u.atomic.u.f.msize = 52;
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+    if((H5T_NATIVE_DOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_DOUBLE_ALIGN_g = 1;
+    H5T_NATIVE_DOUBLE_COMP_ALIGN_g = 8;
+
+   /*
+    *   15       14       13       12
+    * ???????? ???????? ???????? ????????
+    *   11       10        9        8
+    * ???????? ???????? SEEEEEEE EEEEEEEE
+    *    7        6        5        4
+    * MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
+    *    3        2        1        0
+    * MMMMMMMM MMMMMMMM MMMMMMMM MMMMMMMM
+    * Implicit bit? no
+    * Alignment: none
+    */
+    if(NULL == (dt = H5T__alloc()))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, FAIL, "datatype allocation failed")
+    dt->shared->state = H5T_STATE_IMMUTABLE;
+    dt->shared->type = H5T_FLOAT;
+    dt->shared->size = 16;
+    dt->shared->u.atomic.order = H5T_ORDER_LE;
+    dt->shared->u.atomic.offset = 0;
+    dt->shared->u.atomic.prec = 80;
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+    dt->shared->u.atomic.u.f.sign = 79;
+    dt->shared->u.atomic.u.f.epos = 64;
+    dt->shared->u.atomic.u.f.esize = 15;
+    dt->shared->u.atomic.u.f.ebias = 0x00003fff;
+    dt->shared->u.atomic.u.f.mpos = 0;
+    dt->shared->u.atomic.u.f.msize = 64;
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_NONE;
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;
+    if((H5T_NATIVE_LDOUBLE_g = H5I_register(H5I_DATATYPE, dt, FALSE)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register ID for built-in datatype")
+    H5T_NATIVE_LDOUBLE_ALIGN_g = 1;
+    H5T_NATIVE_LDOUBLE_COMP_ALIGN_g = 16;
+
+    /* Set the native order for this machine */
+    H5T_native_order_g = H5T_ORDER_LE;
+
+    /* Structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */
+    H5T_POINTER_COMP_ALIGN_g = 8;
+    H5T_HVL_COMP_ALIGN_g = 8;
+    H5T_HOBJREF_COMP_ALIGN_g = 8;
+    H5T_HDSETREGREF_COMP_ALIGN_g = 1;
+
+done:
+    if(ret_value < 0) {
+        if(dt != NULL) {
+            dt->shared = H5FL_FREE(H5T_shared_t, dt->shared);
+            dt = H5FL_FREE(H5T_t, dt);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5TN_init_interface() */
+
+/****************************************/
+/* ALIGNMENT and signal-handling status */
+/****************************************/
+/* Signal() support: yes */
+/* setjmp() support: yes */
+/* longjmp() support: yes */
+/* sigsetjmp() support: yes */
+/* siglongjmp() support: yes */
+/* sigprocmask() support: yes */
+
+/******************************/
+/* signal handlers statistics */
+/******************************/
+/* signal_handlers tested: 15 times */
+/* sigbus_handler called: 5 times */
+/* sigsegv_handler called: 5 times */
+/* sigill_handler called: 5 times */
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5lib_settings.c b/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5lib_settings.c
new file mode 100644
index 0000000..c243aee
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/files/H5lib_settings.c
@@ -0,0 +1,98 @@
+/* Generated automatically by H5make_libsettings -- do not edit */
+
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the COPYING file, which can be found at the root of the source code       *
+ * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.  *
+ * If you do not have access to either file, you may request a copy from     *
+ * help@hdfgroup.org.                                                        *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * Created:		Jan 29, 2019
+ *			root <root@qemux86-64>
+ *
+ * Purpose:		This machine-generated source code contains
+ *			information about the library build configuration
+ *
+ * Modifications:
+ *
+ *	DO NOT MAKE MODIFICATIONS TO THIS FILE!
+ *	It was generated by code in `H5make_libsettings.c'.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+char H5libhdf5_settings[]=
+	"      SUMMARY OF THE HDF5 CONFIGURATION\n"
+	"      =================================\n"
+	"\n"
+	"General Information:\n"
+	"-------------------\n"
+	"                   HDF5 Version: 1.8.19\n"
+	"                  Configured on: 2019-01-29\n"
+	"                  Configured by: Ninja\n"
+	"                 Configure mode: CMAKE 3.12.2\n"
+	"                    Host system: Linux-4.4.0-31-generic\n"
+	"              Uname information: Linux\n"
+	"                       Byte sex: little-endian\n"
+	"                      Libraries: \n"
+	"             Installation point: /usr\n"
+	"\n"
+	"Compiling Options:\n"
+	"------------------\n"
+	"               Compilation Mode: \n"
+	"                      H5_CFLAGS: \n"
+	"                      AM_CFLAGS: \n"
+	"                       CPPFLAGS: \n"
+	"                    H5_CPPFLAGS: \n"
+	"                    AM_CPPFLAGS: \n"
+	"               Shared C Library: YES\n"
+	"               Static C Library: YES\n"
+	"  Statically Linked Executables: OFF\n"
+	"                        LDFLAGS: -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed\n"
+	"                     AM_LDFLAGS: \n"
+	"                Extra libraries: m;dl\n"
+	"              Debugged Packages: \n"
+	"                    API Tracing: OFF\n"
+	"\n"
+	"Languages:\n"
+	"----------\n"
+	"                        Fortran: OFF\n"
+	"               Fortran Compiler: \n"
+	"          Fortran 2003 Compiler: \n"
+	"                  Fortran Flags: \n"
+	"               H5 Fortran Flags: \n"
+	"               AM Fortran Flags: \n"
+	"         Shared Fortran Library: YES\n"
+	"         Static Fortran Library: YES\n"
+	"\n"
+	"                   H5 C++ Flags: \n"
+	"                   AM C++ Flags: \n"
+	"             Shared C++ Library: YES\n"
+	"             Static C++ Library: YES\n"
+	"\n"
+	"Features:\n"
+	"---------\n"
+	"                  Parallel HDF5: OFF\n"
+	"             High Level library: ON\n"
+	"                   Threadsafety: OFF\n"
+	"            Default API Mapping: v18\n"
+	" With Deprecated Public Symbols: ON\n"
+	"         I/O filters (external): \n"
+	"                            MPE: \n"
+	"                     Direct VFD: \n"
+	"                        dmalloc: \n"
+	"Clear file buffers before write: ON\n"
+	"           Using memory checker: OFF\n"
+	"         Function Stack Tracing: OFF\n"
+	"      Strict File Format Checks: OFF\n"
+	"   Optimization Instrumentation: \n"
+;
+
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.8.19.bb b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.8.19.bb
new file mode 100644
index 0000000..fcbe9b0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.8.19.bb
@@ -0,0 +1,58 @@
+SUMMARY = "Unique technology suite that makes possible the management of \
+extremely large and complex data collections"
+HOMEPAGE = "https://www.hdfgroup.org/"
+SECTION = "libs"
+
+LICENSE = "HDF5"
+LIC_FILES_CHKSUM = "file://COPYING;md5=57e5351b17591e659eedae107265c606"
+
+inherit cmake siteinfo
+
+SRC_URI = " \
+    https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-${PV}/src/${BPN}-${PV}.tar.bz2 \
+    file://H5lib_settings.c \
+    file://H5Tinit-64.c \
+    file://H5Tinit-32.c \
+    file://0001-cross-compiling-support.patch \
+    file://0002-Remove-suffix-shared-from-shared-library-name.patch \
+"
+
+SRC_URI[md5sum] = "6f0353ee33e99089c110a1c8d2dd1b22"
+SRC_URI[sha256sum] = "59c03816105d57990329537ad1049ba22c2b8afe1890085f0c022b75f1727238"
+
+FILES_${PN} += "${libdir}/libhdf5.settings ${datadir}/*"
+
+EXTRA_OECMAKE = " \
+    -DTEST_LFS_WORKS_RUN=0 \
+    -DTEST_LFS_WORKS_RUN__TRYRUN_OUTPUT=0 \
+    -DH5_PRINTF_LL_TEST_RUN=1 \
+    -DH5_PRINTF_LL_TEST_RUN__TRYRUN_OUTPUT='8' \
+    -DH5_LDOUBLE_TO_LONG_SPECIAL_RUN=0 \
+    -DH5_LDOUBLE_TO_LONG_SPECIAL_RUN__TRYRUN_OUTPUT= \
+    -DH5_LONG_TO_LDOUBLE_SPECIAL_RUN=0 \
+    -DH5_LONG_TO_LDOUBLE_SPECIAL_RUN__TRYRUN_OUTPUT= \
+    -DH5_LDOUBLE_TO_LLONG_ACCURATE_RUN=0 \
+    -DH5_LDOUBLE_TO_LLONG_ACCURATE_RUN__TRYRUN_OUTPUT= \
+    -DH5_LLONG_TO_LDOUBLE_CORRECT_RUN=0 \
+    -DH5_LLONG_TO_LDOUBLE_CORRECT_RUN__TRYRUN_OUTPUT= \
+    -DH5_NO_ALIGNMENT_RESTRICTIONS_RUN=0 \
+    -DH5_NO_ALIGNMENT_RESTRICTIONS_RUN__TRYRUN_OUTPUT= \
+    -DCMAKE_INSTALL_PREFIX='${prefix}' \
+    -DHDF5_INSTALL_LIB_DIR='${baselib}' \
+"
+
+do_unpack[postfuncs] += "gen_hd5file"
+gen_hd5file() {
+    install -m 544 ${WORKDIR}/H5lib_settings.c ${S}
+    install -m 544 ${WORKDIR}/H5Tinit-${SITEINFO_BITS}.c ${S}/H5Tinit.c
+}
+
+do_install_append() {
+    # Used for generating config files on target
+    install -m 755 ${B}/bin/H5detect ${D}${bindir}
+    install -m 755 ${B}/bin/H5make_libsettings ${D}${bindir}
+}
+
+BBCLASSEXTEND = "native"
+
+SRC_DISTRIBUTE_LICENSES += "HDF5"
diff --git a/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.6.2.bb b/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.6.2.bb
deleted file mode 100644
index 5feea89..0000000
--- a/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.6.2.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "A spell checker and morphological analyzer library"
-HOMEPAGE = "http://hunspell.github.io/"
-LICENSE = "GPLv3 | LGPLv3"
-LIC_FILES_CHKSUM = " \
-    file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
-    file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02 \
-"
-
-SRC_URI = "https://github.com/${BPN}/${BPN}/archive/v${PV}.tar.gz"
-SRC_URI[md5sum] = "1a54504cb470aafa6530bb372a10dc04"
-SRC_URI[sha256sum] = "3cd9ceb062fe5814f668e4f22b2fa6e3ba0b339b921739541ce180cac4d6f4c4"
-
-inherit autotools pkgconfig gettext
-
-RDEPENDS_${PN} = "perl"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.7.0.bb b/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.7.0.bb
new file mode 100644
index 0000000..40da3b4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/hunspell/hunspell_1.7.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "A spell checker and morphological analyzer library"
+HOMEPAGE = "http://hunspell.github.io/"
+LICENSE = "GPLv2 | LGPLv2.1"
+LIC_FILES_CHKSUM = " \
+    file://COPYING;md5=75859989545e37968a99b631ef42722e \
+    file://COPYING.LESSER;md5=c96ca6c1de8adc025adfada81d06fba5 \
+"
+
+SRC_URI = "https://github.com/${BPN}/${BPN}/archive/v${PV}.tar.gz"
+SRC_URI[md5sum] = "b2399a4aa927e8b3e171d9ea6737cc02"
+SRC_URI[sha256sum] = "bb27b86eb910a8285407cf3ca33b62643a02798cf2eef468c0a74f6c3ee6bc8a"
+
+inherit autotools pkgconfig gettext
+
+RDEPENDS_${PN} = "perl"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb b/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb
index 46cc78e..37d5a63 100644
--- a/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb
+++ b/meta-openembedded/meta-oe/recipes-support/imagemagick/imagemagick_7.0.7.bb
@@ -1,5 +1,8 @@
-SUMMARY = "ImageMagick is an image convertion tools"
+SUMMARY = "ImageMagick is an image conversion toolkit"
 SECTION = "console/utils"
+HOMEPAGE = "https://www.imagemagick.org/"
+DESCRIPTION = "ImageMagick is a collection of tools for displaying, converting, and \
+editing raster and vector image files. It can read and write over 200 image file formats."
 LICENSE = "ImageMagick"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=dad5a98f173fd3fa6958a1a58c6131c1"
 # FIXME: There are many more checked libraries. All should be added or explicitly disabled to get consistent results.
diff --git a/meta-openembedded/meta-oe/recipes-support/itstool/itstool_2.0.5.bb b/meta-openembedded/meta-oe/recipes-support/itstool/itstool_2.0.5.bb
new file mode 100644
index 0000000..b74d5f6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/itstool/itstool_2.0.5.bb
@@ -0,0 +1,22 @@
+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 = "python3-native python3-lxml-native"
+
+SRC_URI = "http://files.itstool.org/${BPN}/${BPN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "655c6f78fc64faee45adcc45ccc5a57e"
+SRC_URI[sha256sum] = "100506f8df62cca6225ec3e631a8237e9c04650c77495af4919ac6a100d4b308"
+
+do_install_append() {
+    # fix shebang of main script
+    sed -i 's:${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}:${bindir}/${PYTHON_PN}:g' ${D}${bindir}/itstool
+}
+
+BBCLASSEXTEND = "native"
+
+RDEPENDS_${PN} += "python3 python3-lxml"
+
diff --git a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_1.3.bb b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_1.4.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_1.3.bb
rename to meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_1.4.bb
index caf84de..863ce42 100644
--- a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_1.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_1.4.bb
@@ -9,8 +9,7 @@
 S = "${WORKDIR}/git"
 B = "${S}"
 
-SRCREV = "b0dcf6f457d700127b43c0e0a198253c266b78ae"
-PV = "1.3+git${SRCPV}"
+SRCREV = "ebbda2217d177d2a17f917d7a3e3d132a26db791"
 SRC_URI = "git://github.com/rhinstaller/libbytesize;branch=master \
 "
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.5.bb b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.7.bb
similarity index 69%
rename from meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.5.bb
rename to meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.7.bb
index 7078e50..e1deb66 100644
--- a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.5.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.3.7.bb
@@ -4,11 +4,11 @@
 LICENSE = "MPL-2.0"
 LIC_FILES_CHKSUM = "file://COPYING.MPL2;md5=815ca599c9df247a0c7f619bab123dad"
 
-SRC_URI = "http://bitbucket.org/eigen/eigen/get/${PV}.tar.bz2;downloadfilename=${BP}.tar.bz2"
-SRC_URI[md5sum] = "e83549a79d1b721da0f8899ab34edf95"
-SRC_URI[sha256sum] = "7352bff3ea299e4c7d7fbe31c504f8eb9149d7e685dec5a12fbaa26379f603e2"
+SRC_URI = "https://bitbucket.org/eigen/eigen/get/${PV}.tar.bz2;downloadfilename=${BP}.tar.bz2"
+SRC_URI[md5sum] = "05b1f7511c93980c385ebe11bd3c93fa"
+SRC_URI[sha256sum] = "9f13cf90dedbe3e52a19f43000d71fdf72e986beb9a5436dddcd61ff9d77a3ce"
 
-S = "${WORKDIR}/eigen-eigen-b3f3d4950030"
+S = "${WORKDIR}/eigen-eigen-323c052e1731"
 
 inherit cmake
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.27.4.bb b/meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.27.8.bb
similarity index 90%
rename from meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.27.4.bb
rename to meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.27.8.bb
index 816ae5e..a434089 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.27.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgit2/libgit2_0.27.8.bb
@@ -6,8 +6,8 @@
 DEPENDS = "curl openssl zlib libssh2 libgcrypt"
 
 SRC_URI = "git://github.com/libgit2/libgit2.git;branch=maint/v0.27"
-#v0.27.5
-SRCREV = "8e0b172981a046d19f1d9efa5acd6186bccbd3ce"
+#v0.27.8
+SRCREV = "2882803ca2b2cdedd069746422155a23fdd002b2"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb
index 09fb65a..96615eb 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_0.3.3.bb
@@ -1,4 +1,6 @@
 require libgpiod.inc
 
+PACKAGECONFIG[tests] = "--enable-tests,--disable-tests,kmod udev"
+
 SRC_URI[md5sum] = "2aa1e1a80c3c919ae142ab9a55fb59ca"
 SRC_URI[sha256sum] = "b773e557af1a497f786825462a776b7bf90168e67ee0a5bc5d2473a5674dc38c"
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.2.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.2.bb
deleted file mode 100644
index 30289b9..0000000
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.2.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-require libgpiod.inc
-
-DEPENDS += "autoconf-archive-native"
-
-SRC_URI[md5sum] = "34a9972f2f4e9c32fa940301301b007d"
-SRC_URI[sha256sum] = "b6b9079c933f7c8524815437937dda6b795a16141bca202a9eec70ba5844b5ba"
-
-PACKAGECONFIG[cxx] = "--enable-bindings-cxx,--disable-bindings-cxx"
-
-PACKAGECONFIG[python3] = "--enable-bindings-python,--disable-bindings-python,python3,python3-core"
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3native', '', d)}
-
-PACKAGES =+ "${PN}-python"
-FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR}"
-RRECOMMENDS_PYTHON = "${@bb.utils.contains('PACKAGECONFIG', 'python3', '${PN}-python', '',d)}"
-RRECOMMENDS_${PN} += "${RRECOMMENDS_PYTHON}"
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.3.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.3.bb
new file mode 100644
index 0000000..e513a33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.3.bb
@@ -0,0 +1,17 @@
+require libgpiod.inc
+
+DEPENDS += "autoconf-archive-native"
+
+SRC_URI[md5sum] = "9f7530a5d56f070ba0af78d6ba077973"
+SRC_URI[sha256sum] = "6ec837f23e8f2196e5976dec4ac81403170830075e7f33ede1394eaf67f2e962"
+
+PACKAGECONFIG[cxx] = "--enable-bindings-cxx,--disable-bindings-cxx"
+PACKAGECONFIG[tests] = "--enable-tests --enable-install-tests,--disable-tests --disable-install-tests,kmod udev"
+
+PACKAGECONFIG[python3] = "--enable-bindings-python,--disable-bindings-python,python3"
+inherit ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3native', '', d)}
+
+PACKAGES =+ "${PN}-python"
+FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR}"
+RRECOMMENDS_PYTHON = "${@bb.utils.contains('PACKAGECONFIG', 'python3', '${PN}-python', '',d)}"
+RRECOMMENDS_${PN}-python += "${RRECOMMENDS_PYTHON}"
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 fa6f4c2..cc0efcc 100644
--- a/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libiio/libiio_git.bb
@@ -4,8 +4,8 @@
 LICENSE = "LGPLv2.1+"
 LIC_FILES_CHKSUM = "file://COPYING.txt;md5=7c13b3376cea0ce68d2d2da0a1b3a72c"
 
-SRCREV = "fa82974d8bd1fded78e630ab71a7ded1b11d0e33"
-PV = "0.14+git${SRCPV}"
+SRCREV = "6ecff5d46e1b12c2859f0b63a73282940e3402bb"
+PV = "0.15+git${SRCPV}"
 
 SRC_URI = "git://github.com/analogdevicesinc/libiio.git;protocol=https"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libmxml/libmxml_git.bb b/meta-openembedded/meta-oe/recipes-support/libmxml/libmxml_git.bb
index 542fe81..b17fc67 100644
--- a/meta-openembedded/meta-oe/recipes-support/libmxml/libmxml_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libmxml/libmxml_git.bb
@@ -1,13 +1,14 @@
 DESCRIPTION = "Tiny XML Library"
-LICENSE = "Mini-XML-License"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a6ba38606d63bb042c5d8cfee182e120"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
 HOMEPAGE = "https://www.msweet.org/mxml/"
 BUGTRACKER = "https://github.com/michaelrsweet/mxml/issues"
 
 SRC_URI = "git://github.com/michaelrsweet/mxml.git"
-SRCREV = "ba3cca82e15a88a9cc6afb60f059288a99afc703"
+SRCREV = "c7755b6992a2afdd34dde47fc9be97f1237cfded"
 S = "${WORKDIR}/git"
-PV = "2.12+git${SRCPV}"
+# v3.0
+PV = "3.0"
 
 CONFIGUREOPTS = " --prefix=${prefix} \
                   --bindir=${bindir} \
@@ -28,6 +29,8 @@
                 "
 
 do_configure() {
+    install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}
+    install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}
     ./configure ${CONFIGUREOPTS} --enable-shared
 }
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.0.bb b/meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.2.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.0.bb
rename to meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.2.bb
index 94bfb8f..fe853cd 100644
--- a/meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libssh2/libssh2_1.8.2.bb
@@ -8,8 +8,9 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=c5cf34fc0acb44b082ef50ef5e4354ca"
 
 SRC_URI = "http://www.libssh2.org/download/${BP}.tar.gz"
-SRC_URI[md5sum] = "3d1147cae66e2959ea5441b183de1b1c"
-SRC_URI[sha256sum] = "39f34e2f6835f4b992cafe8625073a88e5a28ba78f83e8099610a7b3af4676d4"
+
+SRC_URI[md5sum] = "616efd99af3d9ef731a26bed6cee9593"
+SRC_URI[sha256sum] = "088307d9f6b6c4b8c13f34602e8ff65d21c2dc4d55284dfe15d502c4ee190d67"
 
 inherit autotools pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.27.bb b/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.28.bb
similarity index 84%
rename from meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.27.bb
rename to meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.28.bb
index 442592d..b80bb4e 100644
--- a/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.27.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libteam/libteam_1.28.bb
@@ -13,10 +13,7 @@
            file://0001-team_basic_test.py-disable-RedHat-specific-test.patch \
            file://run-ptest \
            "
-SRCREV = "91a928a56a501daac5ce8b3c16bd9943661f1d16"
-
-SRC_URI[md5sum] = "565114d70c41bff6093d8e57be284e8a"
-SRC_URI[sha256sum] = "d65286379141db141bea33424ec0507bb0f827a0bf03d9c65004bb593e3d5545"
+SRCREV = "903950c7fcf28c32f4b62d9d1c07c0234e8378a2"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx-config.bb b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx-config.bb
new file mode 100644
index 0000000..b269e33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx-config.bb
@@ -0,0 +1,12 @@
+SUMMARY = "USB Gadget Configuration Files"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+SRC_URI = "file://usbgx.default"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+do_install() {
+    install -Dm 0644 ${WORKDIR}/usbgx.default ${D}${sysconfdir}/default/usbgx
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx-config/usbgx.default b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx-config/usbgx.default
new file mode 100644
index 0000000..f690dfe
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx-config/usbgx.default
@@ -0,0 +1,2 @@
+IMPORT_SCHEMAS=""
+ENABLED_SCHEMAS="$IMPORT_SCHEMAS"
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/gadget-start b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/gadget-start
new file mode 100644
index 0000000..1a106b7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/gadget-start
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+[ -r /etc/default/usbgx ] && . /etc/default/usbgx
+
+for i in $IMPORT_SCHEMAS; do
+    /usr/bin/gadget-import "$i" /etc/usbgx/"$i".schema
+done
+
+for i in $ENABLED_SCHEMAS; do
+    ls /sys/class/udc/ > /sys/kernel/config/usb_gadget/"$i"/UDC
+done
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.initd b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.initd
new file mode 100644
index 0000000..d193807
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.initd
@@ -0,0 +1,143 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          usbg
+# Required-Start:    $local_fs
+# Should-Start:
+# Required-Stop:     $local_fs
+# Should-Stop:
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Example initscript
+# Description:       This file should be used to construct scripts to be
+#                    placed in /etc/init.d
+### END INIT INFO
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+
+DESC="Load USB gadget schemas"
+NAME="usbgx"
+DAEMON=/usr/bin/gadget-start
+DAEMON_ARGS=""
+PIDFILE=/var/run/$NAME.pid
+
+. /etc/init.d/functions || exit 1
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+#
+# Function that starts the daemon/service
+#
+do_start() {
+    local status pid
+
+    status=0
+    pid=`pidofproc $NAME` || status=$?
+    case $status in
+        0)
+            echo "$DESC already running ($pid)."
+            exit 1
+            ;;
+        *)
+            echo "Starting $DESC ..."
+            exec $DAEMON $DAEMON_ARGS >/dev/null 2>&1 || status=$?
+            echo "ERROR: Failed to start $DESC."
+            exit $status
+            ;;
+    esac
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop() {
+    local pid status
+
+    status=0
+    pid=`pidofproc $NAME` || status=$?
+    case $status in
+        0)
+            # Exit when fail to stop, the kill would complain when fail
+            kill -s 15 $pid >/dev/null && rm -f $PIDFILE && \
+                echo "Stopped $DESC ($pid)." || exit $?
+            ;;
+        *)
+            echo "$DESC is not running; none killed." >&2
+            ;;
+    esac
+
+    return $status
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+    local pid status
+
+    status=0
+    # If the daemon can reload its configuration without
+    # restarting (for example, when it is sent a SIGHUP),
+    # then implement that here.
+    pid=`pidofproc $NAME` || status=$?
+    case $status in
+        0)
+            echo "Reloading $DESC ..."
+            kill -s 1 $pid || exit $?
+            ;;
+        *)
+            echo "$DESC is not running; none reloaded." >&2
+            ;;
+    esac
+    exit $status
+}
+
+
+#
+# Function that shows the daemon/service status
+#
+status_of_proc () {
+    local pid status
+
+    status=0
+    # pidof output null when no program is running, so no "2>/dev/null".
+    pid=`pidofproc $NAME` || status=$?
+    case $status in
+        0)
+            echo "$DESC is running ($pid)."
+            exit 0
+            ;;
+        *)
+            echo "$DESC is not running." >&2
+            exit $status
+            ;;
+    esac
+}
+
+case "$1" in
+    start)
+        do_start
+        ;;
+    stop)
+        do_stop || exit $?
+        ;;
+    status)
+        status_of_proc
+        ;;
+    restart)
+        # Always start the service regardless the status of do_stop
+        do_stop
+        do_start
+        ;;
+    try-restart|force-reload)
+        do_stop && do_start
+        ;;
+    *)
+        echo "Usage: $0 {start|stop|status|restart|try-restart|force-reload}" >&2
+        exit 3
+        ;;
+esac
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
new file mode 100644
index 0000000..74541d3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Load USB gadget schemas
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/gadget-start
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx_git.bb b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
new file mode 100644
index 0000000..d73ca61
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
@@ -0,0 +1,40 @@
+SUMMARY = "USB Gadget neXt Configfs Library"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libconfig"
+
+inherit autotools pkgconfig systemd update-rc.d
+
+PV = "0.2.0+git${SRCPV}"
+SRCREV = "45c14ef4d5d7ced0fbf984208de44ced6d5ed898"
+SRCBRANCH = "master"
+SRC_URI = " \
+    git://github.com/libusbgx/libusbgx.git;branch=${SRCBRANCH} \
+    file://gadget-start \
+    file://usbgx.initd \
+    file://usbgx.service \
+"
+
+S = "${WORKDIR}/git"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "usbgx.service"
+
+INITSCRIPT_NAME = "usbgx"
+INITSCRIPT_PARAMS = "defaults"
+
+EXTRA_OECONF = "--includedir=${includedir}/usbgx"
+
+do_install_append() {
+    install -Dm 0755 ${WORKDIR}/gadget-start ${D}/${bindir}/gadget-start
+    if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+        install -Dm 0644 ${WORKDIR}/usbgx.service ${D}${systemd_system_unitdir}/usbgx.service
+    fi
+    if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+		install -Dm 0755 ${WORKDIR}/usbgx.initd ${D}${sysconfdir}/init.d/usbgx
+	fi
+}
+
+RDEPENDS_${PN} += "libusbgx-config"
diff --git a/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb
index 8c84cb3..b8a700b 100644
--- a/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter.bb
@@ -12,6 +12,7 @@
 
 SRC_URI = "git://git.altlinux.org/people/ldv/packages/libutempter.git \
            file://0001-Fix-macro-error.patch \
+           file://0002-Proper-macro-path-generation.patch \
            file://libutempter-remove-glibc-assumption.patch \
           "
 
diff --git a/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/0002-Proper-macro-path-generation.patch b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/0002-Proper-macro-path-generation.patch
new file mode 100644
index 0000000..2a866c0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/libutempter/libutempter/0002-Proper-macro-path-generation.patch
@@ -0,0 +1,34 @@
+From 48b6bcf9f5d8a05eace4bc463c47e8a4715d3000 Mon Sep 17 00:00:00 2001
+From: iddinev <xidinev@gmail.com>
+Date: Mon, 18 Mar 2019 15:45:20 +0200
+Subject: [PATCH] Proper macro path generation.
+
+Signed-off-by: iddinev <xidinev@gmail.com>
+---
+ libutempter/iface.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git libutempter/iface.c libutempter/iface.c
+index 27793f0..c1c0ee9 100644
+--- libutempter/iface.c
++++ libutempter/iface.c
+@@ -44,13 +44,12 @@
+ #endif
+ 
+ #ifdef  LIBEXECDIR
+-#  define CAT_PATH(DIR1,DIR2)           DIR1##DIR2
+-#  define RAW_UTEMPTER_PATH             CAT_PATH(LIBEXECDIR,/utempter/utempter)
++#  define UTEMPTER_DEFAULT_PATHNAME     XSTR_PATH(LIBEXECDIR)"/utempter/utempter"
+ #else
+-#  define RAW_UTEMPTER_PATH             /usr/lib/libtempter/utempter/utempter
++#  define UTEMPTER_DEFAULT_PATHNAME     STR_PATH(/usr/lib/libtempter/utempter/utempter)
+ #endif
+ #define STR_PATH(RAW_STR)               #RAW_STR
+-#define UTEMPTER_DEFAULT_PATHNAME       STR_PATH(RAW_UTEMPTER_PATH)
++#define XSTR_PATH(STR)                  STR_PATH(STR)
+ 
+ static const char *utempter_pathname;
+ static int saved_fd = -1;
+-- 
+2.7.4
+
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 d9780cf..ea54e75 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
@@ -6,10 +6,10 @@
 
 PV = "4.1+git${SRCPV}"
 
-SRC_URI = "git://risingtidesystems.com/lio-utils.git \
+SRC_URI = "git://github.com/Datera/lio-utils.git \
            file://0001-Makefiles-Respect-environment-variables-and-add-LDFL.patch \
            "
-SRCREV = "28bd928655bdc7bd3cf380f0196630690c51e05f"
+SRCREV = "0ac9091c1ff7a52d5435a4f4449e82637142e06e"
 S = "${WORKDIR}/git"
 
 inherit distutils
diff --git a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/0001-include-sys-sysmacros.h-for-major-minor-definitions.patch b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/0001-include-sys-sysmacros.h-for-major-minor-definitions.patch
deleted file mode 100644
index 12f5be9..0000000
--- a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/0001-include-sys-sysmacros.h-for-major-minor-definitions.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 2f39dc3d6f920c0826aa74367da1a0a7cc49b0fe Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 11 Aug 2018 15:18:04 -0700
-Subject: [PATCH] include sys/sysmacros.h for major/minor definitions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated.
-This means that in a future release, the macros “major”, “minor”, and
-“makedev” will only be available from <sys/sysmacros.h>.
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/lockdev.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/lockdev.c b/src/lockdev.c
-index 9a0fca5..3581938 100644
---- a/src/lockdev.c
-+++ b/src/lockdev.c
-@@ -117,6 +117,7 @@
- #include <sys/stat.h>
- #include <sys/file.h>
- #include <sys/types.h>
-+#include <sys/sysmacros.h>
- #include <sys/wait.h>
- #include "lockdev.h"
- #include "ttylock.h"
diff --git a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/build.patch b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/build.patch
new file mode 100644
index 0000000..6ec91d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/build.patch
@@ -0,0 +1,28 @@
+commit 0dd47123655c52d68185f06b9da8fb0e1b925400
+Author: Ludwig Nussel <ludwig.nussel@suse.de>
+Date:   Tue Feb 9 14:56:23 2010 +0100
+
+    RedHat patch 2
+    
+    - change library file name
+    - install devel symlink
+
+--- a/Makefile
++++ b/Makefile
+@@ -11,7 +11,7 @@ VER	= $(shell expr `pwd` : '.*-\([0-9.]*
+ MVER	= ${shell expr `pwd` : '.*-\([0-9]*\).[0-9]*'}
+ 
+ static	= ${libname}.a
+-shared	= ${libname}.${VER}.so
++shared	= ${libname}.so.${VER}
+ soname	= ${libname}.so.${MVER}
+ 
+ # overwritten by caller (e.g.: debian/rules)
+@@ -72,6 +72,7 @@ install_doc:	docs/lockdev.3
+ install_run:	${shared}
+ 	install -m755 -d	${libdir}
+ 	install -m644 ${shared}	${libdir}
++	ln -s ${shared}		${libdir}/liblockdev.so
+ 
+ .PHONY: clean distclean perl-clean mostyclean 
+ perl-clean:	clean
diff --git a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/cross_compile.patch b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/cross_compile.patch
new file mode 100644
index 0000000..aa8f6a4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev/cross_compile.patch
@@ -0,0 +1,25 @@
+--- a/Makefile
++++ b/Makefile
+@@ -15,17 +15,17 @@ shared	= ${libname}.${VER}.so
+ soname	= ${libname}.so.${MVER}
+ 
+ # overwritten by caller (e.g.: debian/rules)
+-basedir	= /usr/local
++basedir	?= /usr/local
+ srcdir=.
+ 
+ libdir	= ${basedir}/lib
+ incdir	= ${basedir}/include
+ mandir	= ${basedir}/share/man
+ 
+-CC	= gcc
+-LCFLAGS	= -g -O2 -fPIC -Wall -pipe -D_REENTRANT 
+-CFLAGS	= -g
+-LDLIBS	= -llockdev
++CC	?= gcc
++LCFLAGS	?= -g -O2 -fPIC -Wall -pipe -D_REENTRANT 
++CFLAGS	?= -g
++LDLIBS	?= -llockdev
+ 
+ .PHONY: shared static perl-lib
+ ALL:	shared static perl-lib
diff --git a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_1.0.3.bb b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_1.0.3.bb
new file mode 100644
index 0000000..5b862bd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_1.0.3.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Locking devices library"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM="file://LICENSE;md5=d8045f3b8f929c1cb29a1e3fd737b499"
+
+PE = "1"
+SRC_URI = "http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/l/lockdev/lockdev_${PV}.orig.tar.gz \
+           http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/l/lockdev/lockdev_${PV}-1.6.diff.gz;name=debianpatch \
+           file://cross_compile.patch \
+           file://build.patch \
+           "
+SRC_URI[md5sum] = "64b9c1b87b125fc348e892e24625524a"
+SRC_URI[sha256sum] = "ccae635d7ac3fdd50897eceb250872b3d9a191d298f213e7f0c836910d869f82"
+SRC_URI[debianpatch.md5sum] = "5ef6267c42fca9145e0af006ccb6aff7"
+SRC_URI[debianpatch.sha256sum] = "a5405c6ee5e97e45eeb1c81330a7e9f444a58bda5e6771fa30007516c115007e"
+
+inherit lib_package perlnative
+export basedir="${D}${prefix}"
+
+CFLAGS += " -D__GNU_LIBRARY__"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_compile() {
+        oe_runmake basedir=${D}${prefix} LD="${CC}" LD="${CC}" shared static
+}
+do_install() {
+        oe_runmake DESTDIR=${D} basedir=${D}${prefix} install
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_git.bb b/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_git.bb
deleted file mode 100644
index 5ad7f0c..0000000
--- a/meta-openembedded/meta-oe/recipes-support/lockdev/lockdev_git.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "Locking devices library"
-SECTION = "libs"
-LICENSE = "LGPLv2.1"
-LIC_FILES_CHKSUM="file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-PV = "1.0.3+git${SRCPV}"
-
-SRCREV = "16b899645d32012cc94cc9232f64d4ddaaf0b795"
-SRC_URI = "git://anonscm.debian.org/lockdev/lockdev.git \
-           file://0001-include-sys-sysmacros.h-for-major-minor-definitions.patch \
-           "
-
-S = "${WORKDIR}/git"
-
-inherit lib_package autotools-brokensep
-
-do_configure_prepend () {
-    ./scripts/git-version > VERSION
-
-    # Make automake happy
-    touch ChangeLog
-}
-
-CFLAGS_append_libc-musl = " -D__GNU_LIBRARY__"
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch
index 5b55111..3c4a3a1 100644
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0001-Avoid-bashisms-in-init-scripts.patch
@@ -1,26 +1,27 @@
-From 916ea0c70fd063ab7b81f16fd917a75dc02edf4f Mon Sep 17 00:00:00 2001
-From: Peter Kjellerstedt <pkj@axis.com>
-Date: Fri, 17 Mar 2017 03:18:28 +0100
-Subject: [PATCH] Avoid bashisms in init scripts
+From ea66faf68c93735edb1f2691cd7364b8cab83fef Mon Sep 17 00:00:00 2001
+From: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
+Date: Mon, 26 Nov 2018 14:53:09 +0800
+Subject: [PATCH 1/3] Avoid bashisms in init scripts
 
 Upstream-Status: Inappropriate
 
 Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
----
- scripts/blk_availability_init_red_hat.in      | 4 ++--
- scripts/clvmd_init_red_hat.in                 | 6 +++---
- scripts/cmirrord_init_red_hat.in              | 4 ++--
- scripts/lvm2_cluster_activation_red_hat.sh.in | 4 ++--
- scripts/lvm2_lvmetad_init_red_hat.in          | 4 ++--
- scripts/lvm2_lvmpolld_init_red_hat.in         | 4 ++--
- scripts/lvm2_monitoring_init_red_hat.in       | 4 ++--
- scripts/lvm2_monitoring_init_rhel4            | 4 ++--
- 8 files changed, 17 insertions(+), 17 deletions(-)
 
-Index: LVM2.2.02.177/scripts/blk_availability_init_red_hat.in
-===================================================================
---- LVM2.2.02.177.orig/scripts/blk_availability_init_red_hat.in
-+++ LVM2.2.02.177/scripts/blk_availability_init_red_hat.in
+Rebase to 2.03.01
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ scripts/blk_availability_init_red_hat.in | 4 ++--
+ scripts/cmirrord_init_red_hat.in         | 4 ++--
+ scripts/lvm2_lvmpolld_init_red_hat.in    | 4 ++--
+ scripts/lvm2_monitoring_init_red_hat.in  | 4 ++--
+ scripts/lvm2_monitoring_init_rhel4       | 4 ++--
+ 5 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/scripts/blk_availability_init_red_hat.in b/scripts/blk_availability_init_red_hat.in
+index 347c395..b2e9cf9 100644
+--- a/scripts/blk_availability_init_red_hat.in
++++ b/scripts/blk_availability_init_red_hat.in
 @@ -1,4 +1,4 @@
 -#!/bin/bash
 +#!/bin/sh
@@ -35,38 +36,10 @@
 +	echo "Usage: $0 {start|stop|status}"
  	;;
  esac
-Index: LVM2.2.02.177/scripts/clvmd_init_red_hat.in
-===================================================================
---- LVM2.2.02.177.orig/scripts/clvmd_init_red_hat.in
-+++ LVM2.2.02.177/scripts/clvmd_init_red_hat.in
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- #
- # clvmd - Clustered LVM Daemon init script
- #
-@@ -161,7 +161,7 @@ restart() {
- 	fi
- }
- 
--[ "$EUID" != "0" ] && {
-+[ "$(id -u)" != "0" ] && {
- 	echo "clvmd init script can only be executed as root user"
- 	exit 4
- }
-@@ -206,7 +206,7 @@ case "$1" in
- 	;;
- 
-   *)
--	echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
-+	echo "Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
- 	rtrn=2
- 	;;
- esac
-Index: LVM2.2.02.177/scripts/cmirrord_init_red_hat.in
-===================================================================
---- LVM2.2.02.177.orig/scripts/cmirrord_init_red_hat.in
-+++ LVM2.2.02.177/scripts/cmirrord_init_red_hat.in
+diff --git a/scripts/cmirrord_init_red_hat.in b/scripts/cmirrord_init_red_hat.in
+index c82f8f5..a3a321d 100755
+--- a/scripts/cmirrord_init_red_hat.in
++++ b/scripts/cmirrord_init_red_hat.in
 @@ -1,4 +1,4 @@
 -#!/bin/bash
 +#!/bin/sh
@@ -82,48 +55,10 @@
  		;;
  esac
  
-Index: LVM2.2.02.177/scripts/lvm2_cluster_activation_red_hat.sh.in
-===================================================================
---- LVM2.2.02.177.orig/scripts/lvm2_cluster_activation_red_hat.sh.in
-+++ LVM2.2.02.177/scripts/lvm2_cluster_activation_red_hat.sh.in
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- 
- sbindir="@SBINDIR@"
- 
-@@ -54,7 +54,7 @@ case "$1" in
- 	rtrn=$?
- 	;;
-   *)
--	echo $"Usage: $0 {activate|deactivate}"
-+	echo "Usage: $0 {activate|deactivate}"
- 	rtrn=3
- 	;;
- esac
-Index: LVM2.2.02.177/scripts/lvm2_lvmetad_init_red_hat.in
-===================================================================
---- LVM2.2.02.177.orig/scripts/lvm2_lvmetad_init_red_hat.in
-+++ LVM2.2.02.177/scripts/lvm2_lvmetad_init_red_hat.in
-@@ -1,4 +1,4 @@
--#!/bin/bash
-+#!/bin/sh
- #
- # Copyright (C) 2012-2017 Red Hat, Inc. All rights reserved.
- #
-@@ -103,7 +103,7 @@ case "$1" in
- 	;;
- 
-   *)
--	echo $"Usage: $0 {start|stop|force-stop|restart|condrestart|try-restart|status}"
-+	echo "Usage: $0 {start|stop|force-stop|restart|condrestart|try-restart|status}"
- 	;;
- esac
- 
-Index: LVM2.2.02.177/scripts/lvm2_lvmpolld_init_red_hat.in
-===================================================================
---- LVM2.2.02.177.orig/scripts/lvm2_lvmpolld_init_red_hat.in
-+++ LVM2.2.02.177/scripts/lvm2_lvmpolld_init_red_hat.in
+diff --git a/scripts/lvm2_lvmpolld_init_red_hat.in b/scripts/lvm2_lvmpolld_init_red_hat.in
+index 176ff5d..825f6ad 100644
+--- a/scripts/lvm2_lvmpolld_init_red_hat.in
++++ b/scripts/lvm2_lvmpolld_init_red_hat.in
 @@ -1,4 +1,4 @@
 -#!/bin/bash
 +#!/bin/sh
@@ -139,10 +74,10 @@
  	;;
  esac
  
-Index: LVM2.2.02.177/scripts/lvm2_monitoring_init_red_hat.in
-===================================================================
---- LVM2.2.02.177.orig/scripts/lvm2_monitoring_init_red_hat.in
-+++ LVM2.2.02.177/scripts/lvm2_monitoring_init_red_hat.in
+diff --git a/scripts/lvm2_monitoring_init_red_hat.in b/scripts/lvm2_monitoring_init_red_hat.in
+index 95e4125..dff89cd 100644
+--- a/scripts/lvm2_monitoring_init_red_hat.in
++++ b/scripts/lvm2_monitoring_init_red_hat.in
 @@ -1,4 +1,4 @@
 -#!/bin/bash
 +#!/bin/sh
@@ -158,10 +93,10 @@
  	;;
  esac
  
-Index: LVM2.2.02.177/scripts/lvm2_monitoring_init_rhel4
-===================================================================
---- LVM2.2.02.177.orig/scripts/lvm2_monitoring_init_rhel4
-+++ LVM2.2.02.177/scripts/lvm2_monitoring_init_rhel4
+diff --git a/scripts/lvm2_monitoring_init_rhel4 b/scripts/lvm2_monitoring_init_rhel4
+index 8eb06c5..2e8d0f7 100644
+--- a/scripts/lvm2_monitoring_init_rhel4
++++ b/scripts/lvm2_monitoring_init_rhel4
 @@ -1,4 +1,4 @@
 -#!/bin/bash
 +#!/bin/sh
@@ -177,3 +112,6 @@
  	;;
  esac
  
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch
deleted file mode 100644
index 9ab1c06..0000000
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From b1ad91a059d99afd1ce25823b7c0a8d3ac63d2fd Mon Sep 17 00:00:00 2001
-From: Dengke Du <dengke.du@windriver.com>
-Date: Tue, 25 Oct 2016 11:55:49 +0000
-Subject: [PATCH 3/4] include fcntl.h for O_* defines and fcntl() signature
-
-On glibc _somehow_ this header gets pulled in indirectly
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Signed-off-by: Dengke Du <dengke.du@windriver.com>
----
-Upstream-Status: Pending
----
- libdaemon/server/daemon-server.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c
-index 6af6de9..a9590e7 100644
---- a/libdaemon/server/daemon-server.c
-+++ b/libdaemon/server/daemon-server.c
-@@ -18,6 +18,7 @@
- #include "daemon-server.h"
- #include "daemon-log.h"
- 
-+#include <fcntl.h>
- #include <dlfcn.h>
- #include <errno.h>
- #include <pthread.h>
--- 
-2.9.3
-
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch
index e3ce4c8..7117d99 100644
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0005-do-not-build-manual.patch
@@ -1,7 +1,7 @@
-From 51d661ff33bb254d7b335a9c87acf5c6e7a94192 Mon Sep 17 00:00:00 2001
+From 103ac1c1200df8190372d973e004776cffe8e659 Mon Sep 17 00:00:00 2001
 From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Tue, 31 Jul 2018 15:08:34 +0800
-Subject: [PATCH] do not build manual
+Date: Mon, 26 Nov 2018 14:59:55 +0800
+Subject: [PATCH 2/3] do not build manual
 
 On some host (ubuntu 1404), build manual failed.
 ...
@@ -14,34 +14,39 @@
 Upstream-Status: Pending
 
 Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+
+Update context for lvm2 2.03.02.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
 ---
  Makefile.in  | 6 +++---
  configure.ac | 1 -
  2 files changed, 3 insertions(+), 4 deletions(-)
 
 diff --git a/Makefile.in b/Makefile.in
-index e2f5a84..acf31e5 100644
+index 6a1a990..80cba91 100644
 --- a/Makefile.in
 +++ b/Makefile.in
 @@ -18,7 +18,7 @@ top_builddir = @top_builddir@
  abs_top_builddir = @abs_top_builddir@
  abs_top_srcdir = @abs_top_srcdir@
  
--SUBDIRS = conf daemons include lib libdaemon libdm man scripts device_mapper tools
-+SUBDIRS = conf daemons include lib libdaemon libdm scripts device_mapper tools
+-SUBDIRS = conf daemons include lib libdaemon libdm man scripts tools
++SUBDIRS = conf daemons include lib libdaemon libdm scripts tools
  
  ifeq ("@UDEV_RULES@", "yes")
    SUBDIRS += udev
-@@ -41,7 +41,7 @@ ifeq ($(MAKECMDGOALS),clean)
+@@ -33,7 +33,7 @@ ifeq ($(MAKECMDGOALS),clean)
  endif
  # FIXME Should use intermediate Makefiles here!
  ifeq ($(MAKECMDGOALS),distclean)
 -  SUBDIRS = conf include man test scripts \
 +  SUBDIRS = conf include test scripts \
      libdaemon lib tools daemons libdm \
-     udev po liblvm python device_mapper
+     udev po
  tools.distclean: test.distclean
-@@ -71,7 +71,7 @@ liblvm.device-mapper: include.device-mapper
+@@ -65,7 +65,7 @@ libdm.device-mapper: include.device-mapper
  daemons.device-mapper: libdm.device-mapper
  tools.device-mapper: libdm.device-mapper
  scripts.device-mapper: include.device-mapper
@@ -51,17 +56,17 @@
  ifeq ("@INTL@", "yes")
  lib.pofile: include.pofile
 diff --git a/configure.ac b/configure.ac
-index aa374ea..5a92cba 100644
+index 7fd0561..4154dc0 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -2124,7 +2124,6 @@ libdm/Makefile
+@@ -1812,7 +1812,6 @@ libdaemon/server/Makefile
+ libdm/Makefile
+ libdm/dm-tools/Makefile
  libdm/libdevmapper.pc
- liblvm/Makefile
- liblvm/liblvm2app.pc
 -man/Makefile
  po/Makefile
- python/Makefile
- python/setup.py
+ scripts/lvm2-pvscan.service
+ scripts/blkdeactivate.sh
 -- 
 2.7.4
 
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch
index 0e68d62..e5ad4ea 100644
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/files/0006-start-lvm2-monitor.service-after-tmp.mount.patch
@@ -10,20 +10,25 @@
 Upstream-Status: Inappropriate [oe specific]
 
 Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+
+Update context for lvm2 2.03.02.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
 ---
  scripts/lvm2_monitoring_systemd_red_hat.service.in | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/scripts/lvm2_monitoring_systemd_red_hat.service.in b/scripts/lvm2_monitoring_systemd_red_hat.service.in
-index 22238b7..93b2bee 100644
+index 7ec4e4e..3282a95 100644
 --- a/scripts/lvm2_monitoring_systemd_red_hat.service.in
 +++ b/scripts/lvm2_monitoring_systemd_red_hat.service.in
 @@ -2,7 +2,7 @@
  Description=Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling
  Documentation=man:dmeventd(8) man:lvcreate(8) man:lvchange(8) man:vgchange(8)
- Requires=dm-event.socket lvm2-lvmetad.socket
--After=dm-event.socket dm-event.service lvm2-lvmetad.socket lvm2-activation.service lvm2-lvmetad.service
-+After=dm-event.socket dm-event.service lvm2-lvmetad.socket lvm2-activation.service lvm2-lvmetad.service tmp.mount
+ Requires=dm-event.socket
+-After=dm-event.socket dm-event.service lvm2-activation.service
++After=dm-event.socket dm-event.service lvm2-activation.service tmp.mount
  Before=local-fs-pre.target
  DefaultDependencies=no
  Conflicts=shutdown.target
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.02.180.bb b/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.02.180.bb
deleted file mode 100644
index 26af327..0000000
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.02.180.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-require lvm2.inc
-
-SRC_URI[md5sum] = "bc26da66e96727babbd288bb0f050339"
-SRC_URI[sha256sum] = "24997e26dfc916151707c9da504d38d0473bec3481a8230b676bc079041bead6"
-
-DEPENDS += "autoconf-archive-native"
-
-TARGET_CC_ARCH += "${LDFLAGS}"
-
-do_install() {
-    oe_runmake 'DESTDIR=${D}' -C libdm install
-    oe_runmake 'DESTDIR=${D}' -C tools install_device-mapper
-}
-
-RRECOMMENDS_${PN}_append_class-target = " lvm2-udevrules"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.03.02.bb b/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.03.02.bb
new file mode 100644
index 0000000..2c4febb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/libdevmapper_2.03.02.bb
@@ -0,0 +1,15 @@
+require lvm2.inc
+
+SRCREV = "913c28917e62577a2ef67152b2e5159237503dda"
+
+DEPENDS += "autoconf-archive-native"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install() {
+    oe_runmake 'DESTDIR=${D}' -C libdm install
+}
+
+RRECOMMENDS_${PN}_append_class-target = " lvm2-udevrules"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc
index 26a887e..8617f25 100644
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2.inc
@@ -7,25 +7,23 @@
 
 DEPENDS += "util-linux libaio"
 
-SRC_URI = "ftp://sources.redhat.com/pub/lvm2/old/LVM2.${PV}.tgz \
+SRC_URI = "ftp://sources.redhat.com/pub/lvm2/releases/LVM2.${PV}.tgz \
            file://lvm.conf \
            file://0001-implement-libc-specific-reopen_stream.patch \
            file://0002-Guard-use-of-mallinfo-with-__GLIBC__.patch \
-           file://0003-include-fcntl.h-for-O_-defines-and-fcntl-signature.patch \
            file://0004-tweak-MODPROBE_CMD-for-cross-compile.patch \
            file://0001-Avoid-bashisms-in-init-scripts.patch \
            file://0005-do-not-build-manual.patch \
            file://0006-start-lvm2-monitor.service-after-tmp.mount.patch \
            "
-
-UPSTREAM_CHECK_URI = "ftp://sources.redhat.com/pub/lvm2/"
-UPSTREAM_CHECK_REGEX = "LVM2\.(?P<pver>\d+(\.\d+)+)"
+SRC_URI[md5sum] = "5fc07da5461a3794a751dcfc355827d5"
+SRC_URI[sha256sum] = "550ba750239fd75b7e52c9877565cabffef506bbf6d7f6f17b9700dee56c720f"
 
 S = "${WORKDIR}/LVM2.${PV}"
 
 inherit autotools-brokensep pkgconfig systemd license
 
-LVM2_PACKAGECONFIG = "dmeventd lvmetad"
+LVM2_PACKAGECONFIG = "dmeventd"
 LVM2_PACKAGECONFIG_append_class-target = " \
     ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)} \
     ${@incompatible_license_contains('GPLv3', '', 'thin-provisioning-tools', d)} \
@@ -39,7 +37,6 @@
 PACKAGECONFIG ??= "odirect ${LVM2_PACKAGECONFIG}"
 
 PACKAGECONFIG[dmeventd] = "--enable-dmeventd,--disable-dmeventd"
-PACKAGECONFIG[lvmetad] = "--enable-lvmetad,--disable-lvmetad"
 PACKAGECONFIG[odirect] = "--enable-o_direct,--disable-o_direct"
 PACKAGECONFIG[readline] = "--enable-readline,--disable-readline,readline"
 PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
@@ -50,7 +47,6 @@
 EXTRA_OECONF = "--with-user= \
                 --with-group= \
                 --enable-realtime \
-                --enable-applib \
                 --enable-cmdlib \
                 --enable-pkgconfig \
                 --with-usrlibdir=${libdir} \
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-dev-hdc-open-failed-No-medium-found-will-print-out-i.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-dev-hdc-open-failed-No-medium-found-will-print-out-i.patch
new file mode 100644
index 0000000..24d5b1b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-dev-hdc-open-failed-No-medium-found-will-print-out-i.patch
@@ -0,0 +1,32 @@
+From 93c93e3b85492e58f9451841e6079d00c497efa4 Mon Sep 17 00:00:00 2001
+From: Jiping Ma <jiping.ma2@windriver.com>
+Date: Mon, 25 Feb 2019 13:29:12 +0800
+Subject: [PATCH] "/dev/hdc: open failed: No medium found" will print out in
+ lvmdiskscan.
+
+commit [57bb46c5e7f8] introduce this issue.
+"/dev/hdc: open failed: No medium found" will be print out
+after run lvmdiskscan. change dev_open_readonly()
+to dev_open_readonly_quiet() in fuction _dev_get_size_dev().
+
+Signed-off-by: Jiping Ma <jiping.ma2@windriver.com>
+---
+ lib/device/dev-io.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/device/dev-io.c b/lib/device/dev-io.c
+index dc95131..81a66b0 100644
+--- a/lib/device/dev-io.c
++++ b/lib/device/dev-io.c
+@@ -338,7 +338,7 @@ static int _dev_get_size_dev(struct device *dev, uint64_t *size)
+ 	}
+ 
+ 	if (fd <= 0) {
+-		if (!dev_open_readonly(dev))
++		if (!dev_open_readonly_quiet(dev))
+ 			return_0;
+ 		fd = dev_fd(dev);
+ 		do_close = 1;
+-- 
+1.9.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
index 7f5dd93..24160b4 100644
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
@@ -1,6 +1,6 @@
-From 5a3e13ae94318c2bed60f875bb3852c45ce0113c Mon Sep 17 00:00:00 2001
+From 3c16d9aaa46602e7594d717d86e7f02066d21134 Mon Sep 17 00:00:00 2001
 From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Thu, 25 May 2017 05:27:11 -0400
+Date: Mon, 26 Nov 2018 17:20:20 +0800
 Subject: [PATCH] explicitly do not install libdm
 
 Already have package libdevmapper which split from lvm2,
@@ -9,17 +9,21 @@
 Upstream-Status: Inappropriate [meta-oe specific]
 
 Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
-Signed-off-by: Andrew Bresticker <abrestic@waymo.com>
+
+
+Update context for lvm2 2.03.02.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
 ---
- libdm/Makefile.in | 6 ++++--
- tools/Makefile.in | 3 ++-
- 2 files changed, 6 insertions(+), 3 deletions(-)
+ libdm/Makefile.in          | 6 ++++--
+ libdm/dm-tools/Makefile.in | 6 ++++--
+ 2 files changed, 8 insertions(+), 4 deletions(-)
 
 diff --git a/libdm/Makefile.in b/libdm/Makefile.in
-index 66ec39513..c779c9d86 100644
+index e9bb5ae..4e9ae3f 100644
 --- a/libdm/Makefile.in
 +++ b/libdm/Makefile.in
-@@ -77,9 +77,11 @@ ifeq ("@PKGCONFIG@", "yes")
+@@ -82,9 +82,11 @@ ifeq ("@PKGCONFIG@", "yes")
    INSTALL_TYPE += install_pkgconfig
  endif
  
@@ -32,21 +36,30 @@
 +	echo "Do not install device mapper in lvm2"
  
  install_include: $(srcdir)/libdevmapper.h
- 	$(INSTALL_DATA) -D $< $(includedir)/$(<F)
-diff --git a/tools/Makefile.in b/tools/Makefile.in
-index 103b76732..63ba7fc04 100644
---- a/tools/Makefile.in
-+++ b/tools/Makefile.in
-@@ -267,7 +267,8 @@ install_dmsetup_static: dmsetup.static
- 	$(Q) $(INSTALL_PROGRAM) -D $< $(staticdir)/$(<F)
- 	$(Q) $(LN_S) -f $(<F) $(staticdir)/dmstats
+ 	@echo "    [INSTALL] $<"
+diff --git a/libdm/dm-tools/Makefile.in b/libdm/dm-tools/Makefile.in
+index 15a9d8e..65e1306 100644
+--- a/libdm/dm-tools/Makefile.in
++++ b/libdm/dm-tools/Makefile.in
+@@ -20,7 +20,8 @@ all: device-mapper
  
--install_device-mapper: $(INSTALL_DMSETUP_TARGETS)
+ SOURCES2 = dmsetup.c
+ TARGETS_DM = dmsetup
+-install_device-mapper: install_dmsetup_dynamic
 +install_device-mapper:
 +	echo "Do not install device mapper in lvm2"
  
- install_lvm2: $(INSTALL_LVM_TARGETS)
+ ifeq ("@STATIC_LINK@", "yes")
+   TARGETS_DM += dmsetup.static
+@@ -93,6 +94,7 @@ install_dmfilemapd_static: dmfilemapd.static
+ .PHONY: install_dmsetup_dynamic install_dmsetup_static
+ .PHONY: install_dmfilemapd install_dmfilemapd_static
  
+-install: install_device-mapper install_dmfilemapd
++install:
++	echo "Do not install device mapper in lvm2"
+ 
+ device-mapper: $(TARGETS_DM)
 -- 
-2.19.0.397.gdd90340f6a-goog
+2.7.4
 
diff --git a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.02.180.bb b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.03.02.bb
similarity index 83%
rename from meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.02.180.bb
rename to meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.03.02.bb
index 7bd7b09..e2ce95c 100644
--- a/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.02.180.bb
+++ b/meta-openembedded/meta-oe/recipes-support/lvm2/lvm2_2.03.02.bb
@@ -1,9 +1,10 @@
 require lvm2.inc
 
-SRC_URI[md5sum] = "bc26da66e96727babbd288bb0f050339"
-SRC_URI[sha256sum] = "24997e26dfc916151707c9da504d38d0473bec3481a8230b676bc079041bead6"
+SRCREV = "913c28917e62577a2ef67152b2e5159237503dda"
 
-SRC_URI += "file://0001-explicitly-do-not-install-libdm.patch"
+SRC_URI += "file://0001-explicitly-do-not-install-libdm.patch \
+            file://0001-dev-hdc-open-failed-No-medium-found-will-print-out-i.patch \
+           "
 
 DEPENDS += "autoconf-archive-native"
 
@@ -32,8 +33,7 @@
 
 SYSTEMD_PACKAGES = "${PN}"
 SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'dmeventd', 'lvm2-monitor.service dm-event.socket dm-event.service', '', d)} \
-                         ${@bb.utils.contains('PACKAGECONFIG', 'lvmetad', 'lvm2-lvmetad.socket lvm2-pvscan@.service', '', d)} \
-                         blk-availability.service"
+                         blk-availability.service lvm2-pvscan@.service"
 SYSTEMD_AUTO_ENABLE = "disable"
 
 TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test/makefile-remove-ldflags.patch b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test/makefile-remove-ldflags.patch
new file mode 100644
index 0000000..0ffedd2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test/makefile-remove-ldflags.patch
@@ -0,0 +1,23 @@
+Remove the default CFLAGS and LDFLAGS in Makefile. Ensure the extra linker flags can be passed.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/cases/stress/hwpoison/Makefile b/cases/stress/hwpoison/Makefile
+index da1cbd8..dec5b14 100644
+--- a/cases/stress/hwpoison/Makefile
++++ b/cases/stress/hwpoison/Makefile
+@@ -1,8 +1,8 @@
+-CFLAGS := -g -Wall
+-LDFLAGS := -g
++#CFLAGS := -g -Wall
++#LDFLAGS := -g
+ 
+-export CFLAGS
+-export LDFLAGS
++#export CFLAGS
++#export LDFLAGS
+ 
+ all:
+ 	mkdir -p bin
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
new file mode 100644
index 0000000..888c729
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mce-test_git.bb
@@ -0,0 +1,30 @@
+#
+# Copyright (C) 2012 Wind River Systems, Inc.
+#
+SUMMARY = "MCE test suite"
+
+DESCRIPTION = "The MCE test suite is a collection of tools and test scripts for \
+testing the Linux RAS related features, including CPU/Memory error \
+containment and recovery, ACPI/APEI support etc."
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "git://git.kernel.org/pub/scm/utils/cpu/mce/mce-test.git;protocol=git \
+           file://makefile-remove-ldflags.patch \
+          "
+SRCREV = "74bffd8b0aa27051aeaa1983a7b23975ca8d8726"
+PV = "20171030+git${SRCPV}"
+
+RDEPENDS_${PN} = "mcelog mce-inject dialog bash"
+
+COMPATIBLE_HOST = '(i.86|x86_64).*-linux'
+
+S ="${WORKDIR}/git"
+
+do_install_append(){
+   install -d ${D}/opt/mce-test
+   cp -rf ${S}/* ${D}/opt/mce-test/
+}
+
+FILES_${PN} += "/opt"
diff --git a/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb b/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb
index 0f1548a..44f55b5 100644
--- a/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb
+++ b/meta-openembedded/meta-oe/recipes-support/mini-iconv/mini-iconv.bb
@@ -13,7 +13,7 @@
 SRC_URI[sha256sum] = "3552262bf1bcf8e859a2a3a7adfb0367af8593383e730c492e981477aac0a0d4"
 
 
-S = "${WORKDIR}/${PN}"
+S = "${WORKDIR}/${BPN}"
 
 do_install() {
     oe_runmake install DESTDIR=${D} PREFIX=${prefix} LIB=${base_libdir}
diff --git a/meta-openembedded/meta-oe/recipes-support/mscgen/mscgen_0.20.bb b/meta-openembedded/meta-oe/recipes-support/mscgen/mscgen_0.20.bb
new file mode 100644
index 0000000..6ead015
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/mscgen/mscgen_0.20.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Mscgen is a small program that parses Message Sequence Chart descriptions and produces PNG, SVG, EPS or server side image maps (ismaps) as the output."
+HOMEPAGE = "http://www.mcternan.me.uk/mscgen/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b1e6a340187c1cf716513439d07c1d79"
+
+SRC_URI = "http://www.mcternan.me.uk/mscgen/software/${PN}-src-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "65c90fb5150d7176b65b793f0faa7377"
+SRC_URI[sha256sum] = "3c3481ae0599e1c2d30b7ed54ab45249127533ab2f20e768a0ae58d8551ddc23"
+
+DEPENDS = "gd "
+
+inherit autotools gettext
+
+do_configure_prepend() {
+	sed -i "s#AC_PATH_PROG(GDLIB_CONFIG,gdlib-config)#AC_PATH_PROG([GDLIB_CONFIG],[gdlib-config], ,[${STAGING_BINDIR_CROSS}])#" ${S}/configure.ac
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch
deleted file mode 100644
index 1d983e9..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Wed, 11 Apr 2018 15:14:13 +0200
-Subject: [PATCH] multipath-tools: add RDAC SUN/ArrayStorage to hwtable
-
-Already in scsi_dh: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/scsi/scsi_dh.c#n70
-
-Cc: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com>
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: DM ML <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/hwtable.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
-index 88b4700..827e899 100644
---- a/libmultipath/hwtable.c
-+++ b/libmultipath/hwtable.c
-@@ -890,6 +890,18 @@ static struct hwentry default_hw[] = {
- 		.no_path_retry = 30,
- 	},
- 	{
-+		.vendor        = "SUN",
-+		.product       = "ArrayStorage",
-+		.bl_product    = "Universal Xport",
-+		.pgpolicy      = GROUP_BY_PRIO,
-+		.checker_name  = RDAC,
-+		.features      = "2 pg_init_retries 50",
-+		.hwhandler     = "1 rdac",
-+		.prio_name     = PRIO_RDAC,
-+		.pgfailback    = -FAILBACK_IMMEDIATE,
-+		.no_path_retry = 30,
-+	},
-+	{
- 		/* ZFS Storage Appliances */
- 		.vendor        = "SUN",
- 		.product       = "(Sun Storage|ZFS Storage|COMSTAR)",
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch
deleted file mode 100644
index 73f000a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Tue, 24 Apr 2018 15:03:40 +0200
-Subject: [PATCH] multipath-tools: remove "c" from __cpluscplus, misspelled
-
-found by cppcheck(http://cppcheck.sf.net/):
-[libmpathcmd/mpath_cmd.h:24]: (error) Invalid number of character '{' when these macros are defined: '__cpluscplus'.
-
-Cc: Benjamin Marzinski <bmarzins@redhat.com>
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: DM ML <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmpathcmd/mpath_cmd.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libmpathcmd/mpath_cmd.h b/libmpathcmd/mpath_cmd.h
-index aaa8da9..df9d938 100644
---- a/libmpathcmd/mpath_cmd.h
-+++ b/libmpathcmd/mpath_cmd.h
-@@ -20,7 +20,7 @@
- #ifndef LIB_MPATH_CMD_H
- #define LIB_MPATH_CMD_H
- 
--#ifdef __cpluscplus
-+#ifdef __cplusplus
- extern "C" {
- #endif
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch
deleted file mode 100644
index 7358e1a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Thu, 12 Apr 2018 18:17:13 +0200
-Subject: [PATCH] multipath-tools: remove emacs autoconfig of kpartx/gpt.h
-
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: DM ML <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- kpartx/gpt.h | 19 -------------------
- 1 file changed, 19 deletions(-)
-
-diff --git a/kpartx/gpt.h b/kpartx/gpt.h
-index 66ce8f1..7bb54b7 100644
---- a/kpartx/gpt.h
-+++ b/kpartx/gpt.h
-@@ -109,22 +109,3 @@ int read_gpt_pt (int fd, struct slice all, struct slice *sp, int ns);
- 
- 
- #endif
--
--/*
-- * Overrides for Emacs so that we follow Linus's tabbing style.
-- * Emacs will notice this stuff at the end of the file and automatically
-- * adjust the settings for this buffer only.  This must remain at the end
-- * of the file.
-- * ---------------------------------------------------------------------------
-- * Local variables:
-- * c-indent-level: 4
-- * c-brace-imaginary-offset: 0
-- * c-brace-offset: -4
-- * c-argdecl-indent: 4
-- * c-label-offset: -4
-- * c-continued-statement-offset: 4
-- * c-continued-brace-offset: 0
-- * indent-tabs-mode: nil
-- * tab-width: 8
-- * End:
-- */
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch
deleted file mode 100644
index 13f18b5..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch
+++ /dev/null
@@ -1,191 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Fri, 11 May 2018 15:42:43 +0200
-Subject: [PATCH] multipath-tools: replace FSF address with a www pointer
-
-Less prone to future modifications, new FSF licences
-point exactly to this url: <http://www.gnu.org/licenses/>.
-And sending a smail to FSF is outdated.
-
-First clean up was done in 5619a39c433ac3d10a88079593cec1aa6472cbeb
-
-Cc: Martin Wilck <mwilck@suse.com>
-Cc: Benjamin Marzinski <bmarzins@redhat.com>
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: DM ML <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/dm-generic.c   | 4 +---
- libmultipath/dm-generic.h   | 4 +---
- libmultipath/foreign.c      | 4 +---
- libmultipath/foreign.h      | 4 +---
- libmultipath/foreign/nvme.c | 4 +---
- libmultipath/generic.c      | 4 +---
- libmultipath/generic.h      | 4 +---
- tests/dmevents.c            | 2 +-
- tests/parser.c              | 2 +-
- tests/uevent.c              | 2 +-
- tests/util.c                | 2 +-
- 11 files changed, 11 insertions(+), 25 deletions(-)
-
-diff --git a/libmultipath/dm-generic.c b/libmultipath/dm-generic.c
-index bdc9ca0..d752991 100644
---- a/libmultipath/dm-generic.c
-+++ b/libmultipath/dm-generic.c
-@@ -12,9 +12,7 @@
-   GNU General Public License for more details.
- 
-   You should have received a copy of the GNU General Public License
--  along with this program; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
-+  along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  */
- 
- #include <stdint.h>
-diff --git a/libmultipath/dm-generic.h b/libmultipath/dm-generic.h
-index 5d59724..986429f 100644
---- a/libmultipath/dm-generic.h
-+++ b/libmultipath/dm-generic.h
-@@ -12,9 +12,7 @@
-   GNU General Public License for more details.
- 
-   You should have received a copy of the GNU General Public License
--  along with this program; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
-+  along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  */
- #ifndef _DM_GENERIC_H
- #define _DM_GENERIC_H
-diff --git a/libmultipath/foreign.c b/libmultipath/foreign.c
-index 7217184..80b399b 100644
---- a/libmultipath/foreign.c
-+++ b/libmultipath/foreign.c
-@@ -12,9 +12,7 @@
-   GNU General Public License for more details.
- 
-   You should have received a copy of the GNU General Public License
--  along with this program; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
-+  along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
- 
- #include <sys/sysmacros.h>
-diff --git a/libmultipath/foreign.h b/libmultipath/foreign.h
-index 973f368..697f12f 100644
---- a/libmultipath/foreign.h
-+++ b/libmultipath/foreign.h
-@@ -12,9 +12,7 @@
-   GNU General Public License for more details.
- 
-   You should have received a copy of the GNU General Public License
--  along with this program; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
-+  along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
- #ifndef _FOREIGN_H
- #define _FOREIGN_H
-diff --git a/libmultipath/foreign/nvme.c b/libmultipath/foreign/nvme.c
-index 235f75d..280b6bd 100644
---- a/libmultipath/foreign/nvme.c
-+++ b/libmultipath/foreign/nvme.c
-@@ -12,9 +12,7 @@
-   GNU General Public License for more details.
- 
-   You should have received a copy of the GNU General Public License
--  along with this program; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
-+  along with this program.  If not, see <https://www.gnu.org/licenses/>.
- */
- 
- #include <sys/sysmacros.h>
-diff --git a/libmultipath/generic.c b/libmultipath/generic.c
-index 6f7a2cd..0d1e632 100644
---- a/libmultipath/generic.c
-+++ b/libmultipath/generic.c
-@@ -12,9 +12,7 @@
-   GNU General Public License for more details.
- 
-   You should have received a copy of the GNU General Public License
--  along with this program; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
-+  along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  */
- 
- 
-diff --git a/libmultipath/generic.h b/libmultipath/generic.h
-index 7f7fe66..6346ffe 100644
---- a/libmultipath/generic.h
-+++ b/libmultipath/generic.h
-@@ -12,9 +12,7 @@
-   GNU General Public License for more details.
- 
-   You should have received a copy of the GNU General Public License
--  along with this program; if not, write to the Free Software
--  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
--  USA.
-+  along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  */
- #ifndef _GENERIC_H
- #define _GENERIC_H
-diff --git a/tests/dmevents.c b/tests/dmevents.c
-index bba51dc..3399c81 100644
---- a/tests/dmevents.c
-+++ b/tests/dmevents.c
-@@ -12,7 +12,7 @@
-  * GNU General Public License for more details.
-  *
-  * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  *
-  */
- 
-diff --git a/tests/parser.c b/tests/parser.c
-index a7e7598..29859da 100644
---- a/tests/parser.c
-+++ b/tests/parser.c
-@@ -12,7 +12,7 @@
-  * GNU General Public License for more details.
-  *
-  * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  *
-  */
- 
-diff --git a/tests/uevent.c b/tests/uevent.c
-index acfcb14..b0d0bfd 100644
---- a/tests/uevent.c
-+++ b/tests/uevent.c
-@@ -12,7 +12,7 @@
-  * GNU General Public License for more details.
-  *
-  * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  *
-  */
- 
-diff --git a/tests/util.c b/tests/util.c
-index 113b134..839effd 100644
---- a/tests/util.c
-+++ b/tests/util.c
-@@ -12,7 +12,7 @@
-  * GNU General Public License for more details.
-  *
-  * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
-  *
-  */
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch
deleted file mode 100644
index 953e739..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch
+++ /dev/null
@@ -1,156 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Fri, 11 May 2018 15:43:11 +0200
-Subject: [PATCH] multipath-tools: Remove trailing/leading whitespaces and
- reformat code
-
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: device-mapper development <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- Makefile.inc           | 23 +++++++++++------------
- kpartx/mac.h           |  2 +-
- kpartx/test-kpartx     |  2 +-
- libmpathcmd/Makefile   |  2 +-
- libmultipath/hwtable.c | 14 +++++++-------
- libmultipath/print.h   |  2 +-
- multipathd/main.h      |  6 +++---
- 7 files changed, 25 insertions(+), 26 deletions(-)
-
-diff --git a/Makefile.inc b/Makefile.inc
-index 57a1835..af2f5ba 100644
---- a/Makefile.inc
-+++ b/Makefile.inc
-@@ -103,21 +103,20 @@ LDFLAGS		= -Wl,-z,relro -Wl,-z,now
- BIN_LDFLAGS	= -pie
- 
- # Check whether a function with name $1 has been declared in header file $2.
--check_func =								       \
--    $(shell								       \
-+check_func = $(shell \
- 	if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \
--	   found=1;							       \
--	   status="yes";						       \
--	else								       \
--	   found=0;							       \
--	   status="no";							       \
--	fi;								       \
--	echo 1>&2 "Checking for $1 in $2 ... $$status";			       \
--	echo "$$found"							       \
--    )
-+		found=1; \
-+		status="yes"; \
-+	else \
-+		found=0; \
-+		status="no"; \
-+	fi; \
-+	echo 1>&2 "Checking for $1 in $2 ... $$status"; \
-+	echo "$$found" \
-+	)
- 
- # Checker whether a file with name $1 exists
--check_file = $(shell	\
-+check_file = $(shell \
- 	if [ -f "$1" ]; then \
- 		found=1; \
- 		status="yes"; \
-diff --git a/kpartx/mac.h b/kpartx/mac.h
-index a44cf38..55c3ec9 100644
---- a/kpartx/mac.h
-+++ b/kpartx/mac.h
-@@ -24,7 +24,7 @@ struct mac_driver_desc {
- 	uint16_t  signature;      /* expected to be MAC_DRIVER_MAGIC */
- 	uint16_t  block_size;
- 	uint32_t  block_count;
--    /* ... more stuff */
-+	/* ... more stuff */
- };
- 
- #endif
-diff --git a/kpartx/test-kpartx b/kpartx/test-kpartx
-index 9cee20f..d2001dc 100755
---- a/kpartx/test-kpartx
-+++ b/kpartx/test-kpartx
-@@ -131,7 +131,7 @@ step "create DM devices (spans)"
- # They also serve as DM devices to test partition removal on those.
- 
- TABLE="\
--0 $((SIZE/SECTSIZ-OFFS)) linear $DEV1 $OFFS 
-+0 $((SIZE/SECTSIZ-OFFS)) linear $DEV1 $OFFS
- $((SIZE/SECTSIZ-OFFS)) $((SIZE/SECTSIZ-OFFS)) linear $DEV2 $OFFS"
- 
- SPAN1=kpt
-diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile
-index 53c0899..0f6b816 100644
---- a/libmpathcmd/Makefile
-+++ b/libmpathcmd/Makefile
-@@ -27,7 +27,7 @@ uninstall:
- 	$(RM) $(DESTDIR)$(includedir)/mpath_cmd.h
- 
- clean: dep_clean
--	$(RM) core *.a *.o *.so *.so.* *.gz 
-+	$(RM) core *.a *.o *.so *.so.* *.gz
- 
- include $(wildcard $(OBJS:.o=.d))
- 
-diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
-index 827e899..2ca6888 100644
---- a/libmultipath/hwtable.c
-+++ b/libmultipath/hwtable.c
-@@ -78,13 +78,13 @@
- #endif
- 
- static struct hwentry default_hw[] = {
--       /*
--	* Generic NVMe
--	*
--	* Due to the parsing logic in find_hwe(), generic entries
--	* have to be put on top of this list, and more specific ones
--	* below.
--	*/
-+	/*
-+	 * Generic NVMe devices
-+	 *
-+	 * Due to the parsing logic in find_hwe(), generic entries
-+	 * have to be put on top of this list, and more specific ones
-+	 * below.
-+	 */
- 	{
- 		.vendor        = "NVME",
- 		.product       = ".*",
-diff --git a/libmultipath/print.h b/libmultipath/print.h
-index 7ba6438..9b5a23a 100644
---- a/libmultipath/print.h
-+++ b/libmultipath/print.h
-@@ -113,7 +113,7 @@ int _snprint_multipath (const struct gen_multipath *, char *, int,
- 			const char *, int);
- #define snprint_multipath(buf, len, fmt, mp, v)				\
- 	_snprint_multipath(dm_multipath_to_gen(mp), buf, len, fmt,  v)
--int _snprint_multipath_topology (const struct gen_multipath *, char *, int, 
-+int _snprint_multipath_topology (const struct gen_multipath *, char *, int,
- 				 int verbosity);
- #define snprint_multipath_topology(buf, len, mpp, v) \
- 	_snprint_multipath_topology (dm_multipath_to_gen(mpp), buf, len, v)
-diff --git a/multipathd/main.h b/multipathd/main.h
-index af39558..8fd426b 100644
---- a/multipathd/main.h
-+++ b/multipathd/main.h
-@@ -29,11 +29,11 @@ int ev_remove_map (char *, char *, int, struct vectors *);
- int set_config_state(enum daemon_status);
- void * mpath_alloc_prin_response(int prin_sa);
- int prin_do_scsi_ioctl(char *, int rq_servact, struct prin_resp * resp,
--       int noisy);
-+		       int noisy);
- void dumpHex(const char * , int len, int no_ascii);
- int prout_do_scsi_ioctl(char * , int rq_servact, int rq_scope,
--       unsigned int rq_type, struct prout_param_descriptor *param,
--       int noisy);
-+			unsigned int rq_type,
-+			struct prout_param_descriptor *param, int noisy);
- int mpath_pr_event_handle(struct path *pp);
- void * mpath_pr_event_handler_fn (void * );
- int update_map_pr(struct multipath *mpp);
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch
deleted file mode 100644
index c6fd5b4..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Fri, 11 May 2018 18:39:44 +0200
-Subject: [PATCH] multipath-tools: fix compilation with musl libc
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In file included from alias.c:15:
-file.h:9:47: error: unknown type name ‘mode_t’; did you mean ‘time_t’?
- int ensure_directories_exist(const char *str, mode_t dir_mode);
-                                               ^~~~~~
-                                               time_t
-
-sysfs.c: In function ‘sysfs_is_multipathed’:
-sysfs.c:304:15: error: ‘PATH_MAX’ undeclared (first use in this function); did you mean ‘PATH_UP’?
-  char pathbuf[PATH_MAX];
-               ^~~~~~~~
-               PATH_UP
-
-Cc: Martin Wilck <mwilck@suse.com>
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: DM ML <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/file.h  | 2 ++
- libmultipath/sysfs.c | 1 +
- 2 files changed, 3 insertions(+)
-
-diff --git a/libmultipath/file.h b/libmultipath/file.h
-index 29520c7..3c75c90 100644
---- a/libmultipath/file.h
-+++ b/libmultipath/file.h
-@@ -5,6 +5,8 @@
- #ifndef _FILE_H
- #define _FILE_H
- 
-+#include <sys/stat.h>
-+
- #define FILE_TIMEOUT 30
- int ensure_directories_exist(const char *str, mode_t dir_mode);
- int open_file(const char *file, int *can_write, const char *header);
-diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c
-index ee72e6a..16e0a73 100644
---- a/libmultipath/sysfs.c
-+++ b/libmultipath/sysfs.c
-@@ -28,6 +28,7 @@
- #include <dirent.h>
- #include <libudev.h>
- #include <fnmatch.h>
-+#include <limits.h>
- 
- #include "checkers.h"
- #include "vector.h"
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch
deleted file mode 100644
index 9e608e1..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Sun, 13 May 2018 00:39:41 +0200
-Subject: [PATCH] multipath-tools: add +x to doc-preclean.pl and split-man.pl
-
-It is not strictly necessary, but it helps identify bin files.
-
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: DM ML <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libdmmp/docs/doc-preclean.pl | 0
- libdmmp/docs/split-man.pl    | 0
- 2 files changed, 0 insertions(+), 0 deletions(-)
- mode change 100644 => 100755 libdmmp/docs/doc-preclean.pl
- mode change 100644 => 100755 libdmmp/docs/split-man.pl
-
-diff --git a/libdmmp/docs/doc-preclean.pl b/libdmmp/docs/doc-preclean.pl
-old mode 100644
-new mode 100755
-diff --git a/libdmmp/docs/split-man.pl b/libdmmp/docs/split-man.pl
-old mode 100644
-new mode 100755
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch
deleted file mode 100644
index 3752158..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch
+++ /dev/null
@@ -1,784 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Sun, 13 May 2018 00:39:42 +0200
-Subject: [PATCH] multipath-tools: refresh kernel-doc from kernel sources
-
-Cc: Gris Ge <fge@redhat.com>
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: device-mapper development <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libdmmp/docs/kernel-doc | 671 ++++++++++++++++++++++++++----------------------
- 1 file changed, 368 insertions(+), 303 deletions(-)
-
-diff --git a/libdmmp/docs/kernel-doc b/libdmmp/docs/kernel-doc
-index fee8952..0057d8e 100755
---- a/libdmmp/docs/kernel-doc
-+++ b/libdmmp/docs/kernel-doc
-@@ -1,4 +1,5 @@
- #!/usr/bin/env perl
-+# SPDX-License-Identifier: GPL-2.0
- 
- use warnings;
- use strict;
-@@ -328,13 +329,15 @@ my $lineprefix="";
- use constant {
-     STATE_NORMAL        => 0, # normal code
-     STATE_NAME          => 1, # looking for function name
--    STATE_FIELD         => 2, # scanning field start
--    STATE_PROTO         => 3, # scanning prototype
--    STATE_DOCBLOCK      => 4, # documentation block
--    STATE_INLINE        => 5, # gathering documentation outside main block
-+    STATE_BODY_MAYBE    => 2, # body - or maybe more description
-+    STATE_BODY          => 3, # the body of the comment
-+    STATE_PROTO         => 4, # scanning prototype
-+    STATE_DOCBLOCK      => 5, # documentation block
-+    STATE_INLINE        => 6, # gathering documentation outside main block
- };
- my $state;
- my $in_doc_sect;
-+my $leading_space;
- 
- # Inline documentation state
- use constant {
-@@ -363,7 +366,7 @@ my $doc_sect = $doc_com .
- my $doc_content = $doc_com_body . '(.*)';
- my $doc_block = $doc_com . 'DOC:\s*(.*)?';
- my $doc_inline_start = '^\s*/\*\*\s*$';
--my $doc_inline_sect = '\s*\*\s*(@[\w\s]+):(.*)';
-+my $doc_inline_sect = '\s*\*\s*(@\s*[\w][\w\.]*\s*):(.*)';
- my $doc_inline_end = '^\s*\*/\s*$';
- my $doc_inline_oneline = '^\s*/\*\*\s*(@[\w\s]+):\s*(.*)\s*\*/\s*$';
- my $export_symbol = '^\s*EXPORT_SYMBOL(_GPL)?\s*\(\s*(\w+)\s*\)\s*;';
-@@ -553,10 +556,9 @@ sub output_highlight {
- 	}
- 	if ($line eq ""){
- 	    if (! $output_preformatted) {
--		print $lineprefix, local_unescape($blankline);
-+		print $lineprefix, $blankline;
- 	    }
- 	} else {
--	    $line =~ s/\\\\\\/\&/g;
- 	    if ($output_mode eq "man" && substr($line, 0, 1) eq ".") {
- 		print "\\&$line";
- 	    } else {
-@@ -747,17 +749,73 @@ sub output_blockhead_rst(%) {
-     }
- }
- 
--sub output_highlight_rst {
--    my $contents = join "\n",@_;
--    my $line;
--
--    # undo the evil effects of xml_escape() earlier
--    $contents = xml_unescape($contents);
--
-+#
-+# Apply the RST highlights to a sub-block of text.
-+#   
-+sub highlight_block($) {
-+    # The dohighlight kludge requires the text be called $contents
-+    my $contents = shift;
-     eval $dohighlight;
-     die $@ if $@;
-+    return $contents;
-+}
- 
--    foreach $line (split "\n", $contents) {
-+#
-+# Regexes used only here.
-+#
-+my $sphinx_literal = '^[^.].*::$';
-+my $sphinx_cblock = '^\.\.\ +code-block::';
-+
-+sub output_highlight_rst {
-+    my $input = join "\n",@_;
-+    my $output = "";
-+    my $line;
-+    my $in_literal = 0;
-+    my $litprefix;
-+    my $block = "";
-+
-+    foreach $line (split "\n",$input) {
-+	#
-+	# If we're in a literal block, see if we should drop out
-+	# of it.  Otherwise pass the line straight through unmunged.
-+	#
-+	if ($in_literal) {
-+	    if (! ($line =~ /^\s*$/)) {
-+		#
-+		# If this is the first non-blank line in a literal
-+		# block we need to figure out what the proper indent is.
-+		#
-+		if ($litprefix eq "") {
-+		    $line =~ /^(\s*)/;
-+		    $litprefix = '^' . $1;
-+		    $output .= $line . "\n";
-+		} elsif (! ($line =~ /$litprefix/)) {
-+		    $in_literal = 0;
-+		} else {
-+		    $output .= $line . "\n";
-+		}
-+	    } else {
-+		$output .= $line . "\n";
-+	    }
-+	}
-+	#
-+	# Not in a literal block (or just dropped out)
-+	#
-+	if (! $in_literal) {
-+	    $block .= $line . "\n";
-+	    if (($line =~ /$sphinx_literal/) || ($line =~ /$sphinx_cblock/)) {
-+		$in_literal = 1;
-+		$litprefix = "";
-+		$output .= highlight_block($block);
-+		$block = ""
-+	    }
-+	}
-+    }
-+
-+    if ($block) {
-+	$output .= highlight_block($block);
-+    }
-+    foreach $line (split "\n", $output) {
- 	print $lineprefix . $line . "\n";
-     }
- }
-@@ -1062,7 +1120,7 @@ sub dump_struct($$) {
- 					# Handle bitmaps
- 					$arg =~ s/:\s*\d+\s*//g;
- 					# Handle arrays
--					$arg =~ s/\[\S+\]//g;
-+					$arg =~ s/\[.*\]//g;
- 					# The type may have multiple words,
- 					# and multiple IDs can be defined, like:
- 					#	const struct foo, *bar, foobar
-@@ -1422,8 +1480,6 @@ sub push_parameter($$$$) {
- 		}
- 	}
- 
--	$param = xml_escape($param);
--
- 	# strip spaces from $param so that it is one continuous string
- 	# on @parameterlist;
- 	# this fixes a problem where check_sections() cannot find
-@@ -1522,6 +1578,7 @@ sub dump_function($$) {
-     $prototype =~ s/__meminit +//;
-     $prototype =~ s/__must_check +//;
-     $prototype =~ s/__weak +//;
-+    $prototype =~ s/__sched +//;
-     my $define = $prototype =~ s/^#\s*define\s+//; #ak added
-     $prototype =~ s/__attribute__\s*\(\(
-             (?:
-@@ -1748,47 +1805,6 @@ sub process_proto_type($$) {
-     }
- }
- 
--# xml_escape: replace <, >, and & in the text stream;
--#
--# however, formatting controls that are generated internally/locally in the
--# kernel-doc script are not escaped here; instead, they begin life like
--# $blankline_html (4 of '\' followed by a mnemonic + ':'), then these strings
--# are converted to their mnemonic-expected output, without the 4 * '\' & ':',
--# just before actual output; (this is done by local_unescape())
--sub xml_escape($) {
--	my $text = shift;
--	if ($output_mode eq "man") {
--		return $text;
--	}
--	$text =~ s/\&/\\\\\\amp;/g;
--	$text =~ s/\</\\\\\\lt;/g;
--	$text =~ s/\>/\\\\\\gt;/g;
--	return $text;
--}
--
--# xml_unescape: reverse the effects of xml_escape
--sub xml_unescape($) {
--	my $text = shift;
--	if ($output_mode eq "man") {
--		return $text;
--	}
--	$text =~ s/\\\\\\amp;/\&/g;
--	$text =~ s/\\\\\\lt;/</g;
--	$text =~ s/\\\\\\gt;/>/g;
--	return $text;
--}
--
--# convert local escape strings to html
--# local escape strings look like:  '\\\\menmonic:' (that's 4 backslashes)
--sub local_unescape($) {
--	my $text = shift;
--	if ($output_mode eq "man") {
--		return $text;
--	}
--	$text =~ s/\\\\\\\\lt:/</g;
--	$text =~ s/\\\\\\\\gt:/>/g;
--	return $text;
--}
- 
- sub map_filename($) {
-     my $file;
-@@ -1826,15 +1842,291 @@ sub process_export_file($) {
-     close(IN);
- }
- 
--sub process_file($) {
--    my $file;
-+#
-+# Parsers for the various processing states.
-+#
-+# STATE_NORMAL: looking for the /** to begin everything.
-+#
-+sub process_normal() {
-+    if (/$doc_start/o) {
-+	$state = STATE_NAME;	# next line is always the function name
-+	$in_doc_sect = 0;
-+	$declaration_start_line = $. + 1;
-+    }
-+}
-+
-+#
-+# STATE_NAME: Looking for the "name - description" line
-+#
-+sub process_name($$) {
-+    my $file = shift;
-     my $identifier;
--    my $func;
-     my $descr;
--    my $in_purpose = 0;
-+
-+    if (/$doc_block/o) {
-+	$state = STATE_DOCBLOCK;
-+	$contents = "";
-+	$new_start_line = $. + 1;
-+
-+	if ( $1 eq "" ) {
-+	    $section = $section_intro;
-+	} else {
-+	    $section = $1;
-+	}
-+    }
-+    elsif (/$doc_decl/o) {
-+	$identifier = $1;
-+	if (/\s*([\w\s]+?)(\(\))?\s*-/) {
-+	    $identifier = $1;
-+	}
-+
-+	$state = STATE_BODY;
-+	# if there's no @param blocks need to set up default section
-+	# here
-+	$contents = "";
-+	$section = $section_default;
-+	$new_start_line = $. + 1;
-+	if (/-(.*)/) {
-+	    # strip leading/trailing/multiple spaces
-+	    $descr= $1;
-+	    $descr =~ s/^\s*//;
-+	    $descr =~ s/\s*$//;
-+	    $descr =~ s/\s+/ /g;
-+	    $declaration_purpose = $descr;
-+	    $state = STATE_BODY_MAYBE;
-+	} else {
-+	    $declaration_purpose = "";
-+	}
-+
-+	if (($declaration_purpose eq "") && $verbose) {
-+	    print STDERR "${file}:$.: warning: missing initial short description on line:\n";
-+	    print STDERR $_;
-+	    ++$warnings;
-+	}
-+
-+	if ($identifier =~ m/^struct/) {
-+	    $decl_type = 'struct';
-+	} elsif ($identifier =~ m/^union/) {
-+	    $decl_type = 'union';
-+	} elsif ($identifier =~ m/^enum/) {
-+	    $decl_type = 'enum';
-+	} elsif ($identifier =~ m/^typedef/) {
-+	    $decl_type = 'typedef';
-+	} else {
-+	    $decl_type = 'function';
-+	}
-+
-+	if ($verbose) {
-+	    print STDERR "${file}:$.: info: Scanning doc for $identifier\n";
-+	}
-+    } else {
-+	print STDERR "${file}:$.: warning: Cannot understand $_ on line $.",
-+	    " - I thought it was a doc line\n";
-+	++$warnings;
-+	$state = STATE_NORMAL;
-+    }
-+}
-+
-+
-+#
-+# STATE_BODY and STATE_BODY_MAYBE: the bulk of a kerneldoc comment.
-+#
-+sub process_body($$) {
-+    my $file = shift;
-+
-+    if (/$doc_sect/i) { # case insensitive for supported section names
-+	$newsection = $1;
-+	$newcontents = $2;
-+
-+	# map the supported section names to the canonical names
-+	if ($newsection =~ m/^description$/i) {
-+	    $newsection = $section_default;
-+	} elsif ($newsection =~ m/^context$/i) {
-+	    $newsection = $section_context;
-+	} elsif ($newsection =~ m/^returns?$/i) {
-+	    $newsection = $section_return;
-+	} elsif ($newsection =~ m/^\@return$/) {
-+	    # special: @return is a section, not a param description
-+	    $newsection = $section_return;
-+	}
-+
-+	if (($contents ne "") && ($contents ne "\n")) {
-+	    if (!$in_doc_sect && $verbose) {
-+		print STDERR "${file}:$.: warning: contents before sections\n";
-+		++$warnings;
-+	    }
-+	    dump_section($file, $section, $contents);
-+	    $section = $section_default;
-+	}
-+
-+	$in_doc_sect = 1;
-+	$state = STATE_BODY;
-+	$contents = $newcontents;
-+	$new_start_line = $.;
-+	while (substr($contents, 0, 1) eq " ") {
-+	    $contents = substr($contents, 1);
-+	}
-+	if ($contents ne "") {
-+	    $contents .= "\n";
-+	}
-+	$section = $newsection;
-+	$leading_space = undef;
-+    } elsif (/$doc_end/) {
-+	if (($contents ne "") && ($contents ne "\n")) {
-+	    dump_section($file, $section, $contents);
-+	    $section = $section_default;
-+	    $contents = "";
-+	}
-+	# look for doc_com + <text> + doc_end:
-+	if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') {
-+	    print STDERR "${file}:$.: warning: suspicious ending line: $_";
-+	    ++$warnings;
-+	}
-+
-+	$prototype = "";
-+	$state = STATE_PROTO;
-+	$brcount = 0;
-+    } elsif (/$doc_content/) {
-+	# miguel-style comment kludge, look for blank lines after
-+	# @parameter line to signify start of description
-+	if ($1 eq "") {
-+	    if ($section =~ m/^@/ || $section eq $section_context) {
-+		dump_section($file, $section, $contents);
-+		$section = $section_default;
-+		$contents = "";
-+		$new_start_line = $.;
-+	    } else {
-+		$contents .= "\n";
-+	    }
-+	    $state = STATE_BODY;
-+	} elsif ($state == STATE_BODY_MAYBE) {
-+	    # Continued declaration purpose
-+	    chomp($declaration_purpose);
-+	    $declaration_purpose .= " " . $1;
-+	    $declaration_purpose =~ s/\s+/ /g;
-+	} else {
-+	    my $cont = $1;
-+	    if ($section =~ m/^@/ || $section eq $section_context) {
-+		if (!defined $leading_space) {
-+		    if ($cont =~ m/^(\s+)/) {
-+			$leading_space = $1;
-+		    } else {
-+			$leading_space = "";
-+		    }
-+		}
-+		$cont =~ s/^$leading_space//;
-+	    }
-+	    $contents .= $cont . "\n";
-+	}
-+    } else {
-+	# i dont know - bad line?  ignore.
-+	print STDERR "${file}:$.: warning: bad line: $_";
-+	++$warnings;
-+    }
-+}
-+
-+
-+#
-+# STATE_PROTO: reading a function/whatever prototype.
-+#
-+sub process_proto($$) {
-+    my $file = shift;
-+
-+    if (/$doc_inline_oneline/) {
-+	$section = $1;
-+	$contents = $2;
-+	if ($contents ne "") {
-+	    $contents .= "\n";
-+	    dump_section($file, $section, $contents);
-+	    $section = $section_default;
-+	    $contents = "";
-+	}
-+    } elsif (/$doc_inline_start/) {
-+	$state = STATE_INLINE;
-+	$inline_doc_state = STATE_INLINE_NAME;
-+    } elsif ($decl_type eq 'function') {
-+	process_proto_function($_, $file);
-+    } else {
-+	process_proto_type($_, $file);
-+    }
-+}
-+
-+#
-+# STATE_DOCBLOCK: within a DOC: block.
-+#
-+sub process_docblock($$) {
-+    my $file = shift;
-+
-+    if (/$doc_end/) {
-+	dump_doc_section($file, $section, $contents);
-+	$section = $section_default;
-+	$contents = "";
-+	$function = "";
-+	%parameterdescs = ();
-+	%parametertypes = ();
-+	@parameterlist = ();
-+	%sections = ();
-+	@sectionlist = ();
-+	$prototype = "";
-+	$state = STATE_NORMAL;
-+    } elsif (/$doc_content/) {
-+	if ( $1 eq "" )	{
-+	    $contents .= $blankline;
-+	} else {
-+	    $contents .= $1 . "\n";
-+	}
-+    }
-+}
-+
-+#
-+# STATE_INLINE: docbook comments within a prototype.
-+#
-+sub process_inline($$) {
-+    my $file = shift;
-+
-+    # First line (state 1) needs to be a @parameter
-+    if ($inline_doc_state == STATE_INLINE_NAME && /$doc_inline_sect/o) {
-+	$section = $1;
-+	$contents = $2;
-+	$new_start_line = $.;
-+	if ($contents ne "") {
-+	    while (substr($contents, 0, 1) eq " ") {
-+		$contents = substr($contents, 1);
-+	    }
-+	    $contents .= "\n";
-+	}
-+	$inline_doc_state = STATE_INLINE_TEXT;
-+	# Documentation block end */
-+    } elsif (/$doc_inline_end/) {
-+	if (($contents ne "") && ($contents ne "\n")) {
-+	    dump_section($file, $section, $contents);
-+	    $section = $section_default;
-+	    $contents = "";
-+	}
-+	$state = STATE_PROTO;
-+	$inline_doc_state = STATE_INLINE_NA;
-+	# Regular text
-+    } elsif (/$doc_content/) {
-+	if ($inline_doc_state == STATE_INLINE_TEXT) {
-+	    $contents .= $1 . "\n";
-+	    # nuke leading blank lines
-+	    if ($contents =~ /^\s*$/) {
-+		$contents = "";
-+	    }
-+	} elsif ($inline_doc_state == STATE_INLINE_NAME) {
-+	    $inline_doc_state = STATE_INLINE_ERROR;
-+	    print STDERR "${file}:$.: warning: ";
-+	    print STDERR "Incorrect use of kernel-doc format: $_";
-+	    ++$warnings;
-+	}
-+    }
-+}
-+
-+
-+sub process_file($) {
-+    my $file;
-     my $initial_section_counter = $section_counter;
-     my ($orig_file) = @_;
--    my $leading_space;
- 
-     $file = map_filename($orig_file);
- 
-@@ -1853,250 +2145,23 @@ sub process_file($) {
- 	}
- 	# Replace tabs by spaces
-         while ($_ =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {};
-+	# Hand this line to the appropriate state handler
- 	if ($state == STATE_NORMAL) {
--	    if (/$doc_start/o) {
--		$state = STATE_NAME;	# next line is always the function name
--		$in_doc_sect = 0;
--		$declaration_start_line = $. + 1;
--	    }
--	} elsif ($state == STATE_NAME) {# this line is the function name (always)
--	    if (/$doc_block/o) {
--		$state = STATE_DOCBLOCK;
--		$contents = "";
--                $new_start_line = $. + 1;
--
--		if ( $1 eq "" ) {
--			$section = $section_intro;
--		} else {
--			$section = $1;
--		}
--	    }
--	    elsif (/$doc_decl/o) {
--		$identifier = $1;
--		if (/\s*([\w\s]+?)\s*-/) {
--		    $identifier = $1;
--		}
--
--		$state = STATE_FIELD;
--		# if there's no @param blocks need to set up default section
--		# here
--		$contents = "";
--		$section = $section_default;
--		$new_start_line = $. + 1;
--		if (/-(.*)/) {
--		    # strip leading/trailing/multiple spaces
--		    $descr= $1;
--		    $descr =~ s/^\s*//;
--		    $descr =~ s/\s*$//;
--		    $descr =~ s/\s+/ /g;
--		    $declaration_purpose = xml_escape($descr);
--		    $in_purpose = 1;
--		} else {
--		    $declaration_purpose = "";
--		}
--
--		if (($declaration_purpose eq "") && $verbose) {
--			print STDERR "${file}:$.: warning: missing initial short description on line:\n";
--			print STDERR $_;
--			++$warnings;
--		}
--
--		if ($identifier =~ m/^struct/) {
--		    $decl_type = 'struct';
--		} elsif ($identifier =~ m/^union/) {
--		    $decl_type = 'union';
--		} elsif ($identifier =~ m/^enum/) {
--		    $decl_type = 'enum';
--		} elsif ($identifier =~ m/^typedef/) {
--		    $decl_type = 'typedef';
--		} else {
--		    $decl_type = 'function';
--		}
--
--		if ($verbose) {
--		    print STDERR "${file}:$.: info: Scanning doc for $identifier\n";
--		}
--	    } else {
--		print STDERR "${file}:$.: warning: Cannot understand $_ on line $.",
--		" - I thought it was a doc line\n";
--		++$warnings;
--		$state = STATE_NORMAL;
--	    }
--	} elsif ($state == STATE_FIELD) {	# look for head: lines, and include content
--	    if (/$doc_sect/i) { # case insensitive for supported section names
--		$newsection = $1;
--		$newcontents = $2;
--
--		# map the supported section names to the canonical names
--		if ($newsection =~ m/^description$/i) {
--		    $newsection = $section_default;
--		} elsif ($newsection =~ m/^context$/i) {
--		    $newsection = $section_context;
--		} elsif ($newsection =~ m/^returns?$/i) {
--		    $newsection = $section_return;
--		} elsif ($newsection =~ m/^\@return$/) {
--		    # special: @return is a section, not a param description
--		    $newsection = $section_return;
--		}
--
--		if (($contents ne "") && ($contents ne "\n")) {
--		    if (!$in_doc_sect && $verbose) {
--			print STDERR "${file}:$.: warning: contents before sections\n";
--			++$warnings;
--		    }
--		    dump_section($file, $section, xml_escape($contents));
--		    $section = $section_default;
--		}
--
--		$in_doc_sect = 1;
--		$in_purpose = 0;
--		$contents = $newcontents;
--                $new_start_line = $.;
--		while (substr($contents, 0, 1) eq " ") {
--		    $contents = substr($contents, 1);
--		}
--		if ($contents ne "") {
--		    $contents .= "\n";
--		}
--		$section = $newsection;
--		$leading_space = undef;
--	    } elsif (/$doc_end/) {
--		if (($contents ne "") && ($contents ne "\n")) {
--		    dump_section($file, $section, xml_escape($contents));
--		    $section = $section_default;
--		    $contents = "";
--		}
--		# look for doc_com + <text> + doc_end:
--		if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') {
--		    print STDERR "${file}:$.: warning: suspicious ending line: $_";
--		    ++$warnings;
--		}
--
--		$prototype = "";
--		$state = STATE_PROTO;
--		$brcount = 0;
--#		print STDERR "end of doc comment, looking for prototype\n";
--	    } elsif (/$doc_content/) {
--		# miguel-style comment kludge, look for blank lines after
--		# @parameter line to signify start of description
--		if ($1 eq "") {
--		    if ($section =~ m/^@/ || $section eq $section_context) {
--			dump_section($file, $section, xml_escape($contents));
--			$section = $section_default;
--			$contents = "";
--                        $new_start_line = $.;
--		    } else {
--			$contents .= "\n";
--		    }
--		    $in_purpose = 0;
--		} elsif ($in_purpose == 1) {
--		    # Continued declaration purpose
--		    chomp($declaration_purpose);
--		    $declaration_purpose .= " " . xml_escape($1);
--		    $declaration_purpose =~ s/\s+/ /g;
--		} else {
--		    my $cont = $1;
--		    if ($section =~ m/^@/ || $section eq $section_context) {
--			if (!defined $leading_space) {
--			    if ($cont =~ m/^(\s+)/) {
--				$leading_space = $1;
--			    } else {
--				$leading_space = "";
--			    }
--			}
--
--			$cont =~ s/^$leading_space//;
--		    }
--		    $contents .= $cont . "\n";
--		}
--	    } else {
--		# i dont know - bad line?  ignore.
--		print STDERR "${file}:$.: warning: bad line: $_";
--		++$warnings;
--	    }
-+	    process_normal();
-+	} elsif ($state == STATE_NAME) {
-+	    process_name($file, $_);
-+	} elsif ($state == STATE_BODY || $state == STATE_BODY_MAYBE) {
-+	    process_body($file, $_);
- 	} elsif ($state == STATE_INLINE) { # scanning for inline parameters
--	    # First line (state 1) needs to be a @parameter
--	    if ($inline_doc_state == STATE_INLINE_NAME && /$doc_inline_sect/o) {
--		$section = $1;
--		$contents = $2;
--                $new_start_line = $.;
--		if ($contents ne "") {
--		    while (substr($contents, 0, 1) eq " ") {
--			$contents = substr($contents, 1);
--		    }
--		    $contents .= "\n";
--		}
--		$inline_doc_state = STATE_INLINE_TEXT;
--	    # Documentation block end */
--	    } elsif (/$doc_inline_end/) {
--		if (($contents ne "") && ($contents ne "\n")) {
--		    dump_section($file, $section, xml_escape($contents));
--		    $section = $section_default;
--		    $contents = "";
--		}
--		$state = STATE_PROTO;
--		$inline_doc_state = STATE_INLINE_NA;
--	    # Regular text
--	    } elsif (/$doc_content/) {
--		if ($inline_doc_state == STATE_INLINE_TEXT) {
--		    $contents .= $1 . "\n";
--		    # nuke leading blank lines
--		    if ($contents =~ /^\s*$/) {
--			$contents = "";
--		    }
--		} elsif ($inline_doc_state == STATE_INLINE_NAME) {
--		    $inline_doc_state = STATE_INLINE_ERROR;
--		    print STDERR "${file}:$.: warning: ";
--		    print STDERR "Incorrect use of kernel-doc format: $_";
--		    ++$warnings;
--		}
--	    }
--	} elsif ($state == STATE_PROTO) {	# scanning for function '{' (end of prototype)
--	    if (/$doc_inline_oneline/) {
--		$section = $1;
--		$contents = $2;
--		if ($contents ne "") {
--		    $contents .= "\n";
--		    dump_section($file, $section, xml_escape($contents));
--		    $section = $section_default;
--		    $contents = "";
--		}
--	    } elsif (/$doc_inline_start/) {
--		$state = STATE_INLINE;
--		$inline_doc_state = STATE_INLINE_NAME;
--	    } elsif ($decl_type eq 'function') {
--		process_proto_function($_, $file);
--	    } else {
--		process_proto_type($_, $file);
--	    }
-+	    process_inline($file, $_);
-+	} elsif ($state == STATE_PROTO) {
-+	    process_proto($file, $_);
- 	} elsif ($state == STATE_DOCBLOCK) {
--		if (/$doc_end/)
--		{
--			dump_doc_section($file, $section, xml_escape($contents));
--			$section = $section_default;
--			$contents = "";
--			$function = "";
--			%parameterdescs = ();
--			%parametertypes = ();
--			@parameterlist = ();
--			%sections = ();
--			@sectionlist = ();
--			$prototype = "";
--			$state = STATE_NORMAL;
--		}
--		elsif (/$doc_content/)
--		{
--			if ( $1 eq "" )
--			{
--				$contents .= $blankline;
--			}
--			else
--			{
--				$contents .= $1 . "\n";
--			}
--		}
-+	    process_docblock($file, $_);
- 	}
-     }
-+
-+    # Make sure we got something interesting.
-     if ($initial_section_counter == $section_counter) {
- 	if ($output_mode ne "none") {
- 	    print STDERR "${file}:1: warning: no structured comments found\n";
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch
deleted file mode 100644
index 2cae075..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Date: Mon, 14 May 2018 17:30:17 +0200
-Subject: [PATCH] multipath-tools: configure hitachi ams2000 and hus100 as full
- active arrays
-
-AMS2000 and HUS100 families are active/active arrays.
-
-Based on https://support.hitachivantara.com/download/epcra/df818913.pdf
-and internal hitachi docs.
-
-Cc: Matthias Rudolph <Matthias.Rudolph@hitachivantara.com>
-Cc: Christophe Varoqui <christophe.varoqui@opensvc.com>
-Cc: DM-DEV ML <dm-devel@redhat.com>
-Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/hwtable.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
-index 2ca6888..148f0ba 100644
---- a/libmultipath/hwtable.c
-+++ b/libmultipath/hwtable.c
-@@ -398,13 +398,13 @@ static struct hwentry default_hw[] = {
- 	 * Mail : matthias.rudolph@hds.com
- 	 */
- 	{
--		/* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families */
-+		/* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HP XP */
- 		.vendor        = "(HITACHI|HP)",
- 		.product       = "^OPEN-",
- 		.pgpolicy      = MULTIBUS,
- 	},
- 	{
--		/* AMS 2000 and HUS 100 families */
-+		/* AMS other than AMS 2000 */
- 		.vendor        = "HITACHI",
- 		.product       = "^DF",
- 		.no_path_retry = NO_PATH_RETRY_QUEUE,
-@@ -412,6 +412,12 @@ static struct hwentry default_hw[] = {
- 		.pgfailback    = -FAILBACK_IMMEDIATE,
- 		.prio_name     = PRIO_HDS,
- 	},
-+	{
-+		/* AMS 2000 and HUS 100 families */
-+		.vendor        = "HITACHI",
-+		.product       = "^DF600F",
-+		.pgpolicy      = MULTIBUS,
-+	},
- 	/*
- 	 * IBM
- 	 *
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch
deleted file mode 100644
index 2dda2ed..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Martin Wilck <mwilck@suse.com>
-Date: Wed, 21 Mar 2018 10:34:18 +0100
-Subject: [PATCH] libmultipath: don't reject maps with undefined prio
-
-libmultipath's prio routines can deal with pp->priority == PRIO_UNDEF
-just fine. PRIO_UNDEF is just a very low priority. So there's
-no reason to reject setting up a multipath map because paths have
-undefined priority.
-
-Signed-off-by: Martin Wilck <mwilck@suse.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/configure.c | 5 -----
- 1 file changed, 5 deletions(-)
-
-diff --git a/libmultipath/configure.c b/libmultipath/configure.c
-index 5796683..5c54f9b 100644
---- a/libmultipath/configure.c
-+++ b/libmultipath/configure.c
-@@ -1063,9 +1063,6 @@ int coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid,
- 			continue;
- 		}
- 
--		if (pp1->priority == PRIO_UNDEF)
--			mpp->action = ACT_REJECT;
--
- 		if (!mpp->paths) {
- 			condlog(0, "%s: skip coalesce (no paths)", mpp->alias);
- 			remove_map(mpp, vecs, 0);
-@@ -1091,8 +1088,6 @@ int coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid,
- 					mpp->size);
- 				mpp->action = ACT_REJECT;
- 			}
--			if (pp2->priority == PRIO_UNDEF)
--				mpp->action = ACT_REJECT;
- 		}
- 		verify_paths(mpp, vecs);
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch
deleted file mode 100644
index 96a814f..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Martin Wilck <mwilck@suse.com>
-Date: Wed, 21 Mar 2018 10:34:19 +0100
-Subject: [PATCH] multipathd: handle errors in uxlsnr as fatal
-
-The ppoll() calls of the uxlsnr thread are vital for proper functioning of
-multipathd. If the uxlsnr thread can't open the socket or fails to call ppoll()
-for other reasons, quit the daemon. If we don't do that, multipathd may
-hang in a state where it can't be terminated any more, because the uxlsnr
-thread is responsible for handling all signals. This happens e.g. if
-systemd's multipathd.socket is running in and multipathd is started from
-outside systemd.
-
-24f2844 "multipathd: fix signal blocking logic" has made this problem more
-severe. Before that patch, the signals weren't actually blocked in any thread.
-That's not to say 24f2844 was wrong. I still think it's correct, we just
-need this one on top.
-
-Signed-off-by: Martin Wilck <mwilck@suse.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- multipathd/uxlsnr.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c
-index cdafd82..6f66666 100644
---- a/multipathd/uxlsnr.c
-+++ b/multipathd/uxlsnr.c
-@@ -178,7 +178,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data)
- 
- 	if (ux_sock == -1) {
- 		condlog(1, "could not create uxsock: %d", errno);
--		return NULL;
-+		exit_daemon();
- 	}
- 
- 	pthread_cleanup_push(uxsock_cleanup, (void *)ux_sock);
-@@ -187,7 +187,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data)
- 	polls = (struct pollfd *)MALLOC((MIN_POLLS + 1) * sizeof(struct pollfd));
- 	if (!polls) {
- 		condlog(0, "uxsock: failed to allocate poll fds");
--		return NULL;
-+		exit_daemon();
- 	}
- 	sigfillset(&mask);
- 	sigdelset(&mask, SIGINT);
-@@ -249,6 +249,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data)
- 
- 			/* something went badly wrong! */
- 			condlog(0, "uxsock: poll failed with %d", errno);
-+			exit_daemon();
- 			break;
- 		}
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch
deleted file mode 100644
index 8ce2431..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Martin Wilck <mwilck@suse.com>
-Date: Tue, 15 May 2018 14:32:44 +0200
-Subject: [PATCH] libmultipath: fix error parsing "find_multipaths strict"
-
-If "find_multipaths strict" is set in multipath.conf, the error message
-"illegal value for find_multipaths: strict" is printed. This causes no
-functional problem, as "strict" happens to be the default, fallback
-value. It should be fixed nonetheless. FIND_MULTIPATHS_STRICT, having
-the highest numeric value, must be last in the enum.
-
-Fixes: c36f2f42 "libmultipath: change find_multipaths option to multi-value"
-Signed-off-by: Martin Wilck <mwilck@suse.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/structs.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libmultipath/structs.h b/libmultipath/structs.h
-index eb6a178..e424b15 100644
---- a/libmultipath/structs.h
-+++ b/libmultipath/structs.h
-@@ -122,9 +122,9 @@ enum find_multipaths_states {
- 	FIND_MULTIPATHS_UNDEF = YNU_UNDEF,
- 	FIND_MULTIPATHS_OFF = YNU_NO,
- 	FIND_MULTIPATHS_ON = _FIND_MULTIPATHS_F,
--	FIND_MULTIPATHS_STRICT = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_N,
- 	FIND_MULTIPATHS_GREEDY = _FIND_MULTIPATHS_I,
- 	FIND_MULTIPATHS_SMART = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_I,
-+	FIND_MULTIPATHS_STRICT = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_N,
- 	__FIND_MULTIPATHS_LAST,
- };
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch
deleted file mode 100644
index c767804..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Mon, 7 May 2018 17:16:05 -0500
-Subject: [PATCH] libmultipath: print correct default for delay_*_checks
-
-These options default to "no", so they should display that when the
-config is printed.
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/dict.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/libmultipath/dict.c b/libmultipath/dict.c
-index 4040611..3e7c5d6 100644
---- a/libmultipath/dict.c
-+++ b/libmultipath/dict.c
-@@ -1115,7 +1115,8 @@ print_off_int_undef(char * buff, int len, long v)
- }
- 
- declare_def_handler(delay_watch_checks, set_off_int_undef)
--declare_def_snprint(delay_watch_checks, print_off_int_undef)
-+declare_def_snprint_defint(delay_watch_checks, print_off_int_undef,
-+			   DEFAULT_DELAY_CHECKS)
- declare_ovr_handler(delay_watch_checks, set_off_int_undef)
- declare_ovr_snprint(delay_watch_checks, print_off_int_undef)
- declare_hw_handler(delay_watch_checks, set_off_int_undef)
-@@ -1123,7 +1124,8 @@ declare_hw_snprint(delay_watch_checks, print_off_int_undef)
- declare_mp_handler(delay_watch_checks, set_off_int_undef)
- declare_mp_snprint(delay_watch_checks, print_off_int_undef)
- declare_def_handler(delay_wait_checks, set_off_int_undef)
--declare_def_snprint(delay_wait_checks, print_off_int_undef)
-+declare_def_snprint_defint(delay_wait_checks, print_off_int_undef,
-+			   DEFAULT_DELAY_CHECKS)
- declare_ovr_handler(delay_wait_checks, set_off_int_undef)
- declare_ovr_snprint(delay_wait_checks, print_off_int_undef)
- declare_hw_handler(delay_wait_checks, set_off_int_undef)
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch
deleted file mode 100644
index 0ab4e06..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Wed, 9 May 2018 14:32:59 -0500
-Subject: [PATCH] multipath.conf.5: clarify property whitelist handling
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- multipath/multipath.conf.5 | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
-index f689795..96d1b66 100644
---- a/multipath/multipath.conf.5
-+++ b/multipath/multipath.conf.5
-@@ -1181,10 +1181,9 @@ and
- keywords. For a full description of these keywords please see the \fIdevices\fR
- section description.
- .LP
--The \fIproperty\fR blacklist and whitelist handling is different from the usual
--handling in the sense that the whitelist \fIhas\fR to be set, otherwise the
--device will be blacklisted. In these cases the message \fIblacklisted, udev
--property missing\fR will be displayed.
-+The \fIproperty\fR whitelist handling is different from the usual
-+handling in the sense that the device \fIhas\fR to have a udev property that
-+matches the whitelist, otherwise the device will be blacklisted. In these cases the message \fIblacklisted, udev property missing\fR will be displayed.
- .
- .
- .\" ----------------------------------------------------------------------------
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch
deleted file mode 100644
index be2681d..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch
+++ /dev/null
@@ -1,317 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Thu, 31 May 2018 17:47:11 -0500
-Subject: [PATCH] mpathpersist: add all_tg_pt option
-
-Some arrays, such as the EMC VNX, don't follow the scsi persistent
-reservations spec in making key registrations per I_T NEXUS. Instead,
-the registration is shared by all target ports connected to a given
-host.  This causes mpathpersist to fail whenever it tries to register a
-key, since it will receive a registration conflict on some of the paths.
-
-To deal with this, mpathpersist needs to track the hosts that it has
-done a registration on, and only register once per host. The new
-"all_tg_pt" multipath.conf option is used to set which arrays need this
-feature.  I currently don't know if all EMC VNX arrays handle persistent
-reservations like this, or if it is configurable. A future patch will
-update the VNX built-in config, if this is indeed their default (or
-only) setting.
-
-Multipathd doesn't need to worry about this. It is often the case that
-when a path device comes back, it will still have the keys registered to
-it. Because of this, multipathd uses register-and-ignore, which means
-that it won't cause an error if the registration has already happened
-down a different target port.
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmpathpersist/mpath_persist.c | 28 ++++++++++++++++++++++------
- libmultipath/config.c           |  2 ++
- libmultipath/config.h           |  2 ++
- libmultipath/defaults.h         |  1 +
- libmultipath/dict.c             | 10 ++++++++++
- libmultipath/propsel.c          | 15 +++++++++++++++
- libmultipath/propsel.h          |  1 +
- libmultipath/structs.h          |  7 +++++++
- multipath/multipath.conf.5      | 11 +++++++++++
- 9 files changed, 71 insertions(+), 6 deletions(-)
-
-diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
-index 907a17c..ca91c55 100644
---- a/libmpathpersist/mpath_persist.c
-+++ b/libmpathpersist/mpath_persist.c
-@@ -335,6 +335,7 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,
- 
- 	conf = get_multipath_config();
- 	select_reservation_key(conf, mpp);
-+	select_all_tg_pt(conf, mpp);
- 	put_multipath_config(conf);
- 
- 	memcpy(&prkey, paramp->sa_key, 8);
-@@ -456,7 +457,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
- 	unsigned int rq_type, struct prout_param_descriptor * paramp, int noisy)
- {
- 
--	int i, j;
-+	int i, j, k;
- 	struct pathgroup *pgp = NULL;
- 	struct path *pp = NULL;
- 	int rollback = 0;
-@@ -481,11 +482,13 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
- 	}
- 
- 	struct threadinfo thread[active_pathcount];
-+	int hosts[active_pathcount];
- 
- 	memset(thread, 0, sizeof(thread));
- 
- 	/* init thread parameter */
- 	for (i =0; i< active_pathcount; i++){
-+		hosts[i] = -1;
- 		thread[i].param.rq_servact = rq_servact;
- 		thread[i].param.rq_scope = rq_scope;
- 		thread[i].param.rq_type = rq_type;
-@@ -514,6 +517,17 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
- 				condlog (1, "%s: %s path not up. Skip.", mpp->wwid, pp->dev);
- 				continue;
- 			}
-+			if (mpp->all_tg_pt == ALL_TG_PT_ON &&
-+			    pp->sg_id.host_no != -1) {
-+				for (k = 0; k < count; k++) {
-+					if (pp->sg_id.host_no == hosts[k]) {
-+						condlog(3, "%s: %s host %d matches skip.", pp->wwid, pp->dev, pp->sg_id.host_no);
-+						break;
-+					}
-+				}
-+				if (k < count)
-+					continue;
-+			}
- 			strncpy(thread[count].param.dev, pp->dev,
- 				FILE_NAME_SIZE - 1);
- 
-@@ -531,10 +545,12 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
- 				condlog (0, "%s: failed to create thread %d", mpp->wwid, rc);
- 				thread[count].param.status = MPATH_PR_THREAD_ERROR;
- 			}
-+			else
-+				hosts[count] = pp->sg_id.host_no;
- 			count = count + 1;
- 		}
- 	}
--	for( i=0; i < active_pathcount ; i++){
-+	for( i=0; i < count ; i++){
- 		if (thread[i].param.status != MPATH_PR_THREAD_ERROR) {
- 			rc = pthread_join(thread[i].id, NULL);
- 			if (rc){
-@@ -557,7 +573,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
- 	}
- 	if (rollback && ((rq_servact == MPATH_PROUT_REG_SA) && sa_key != 0 )){
- 		condlog (3, "%s: ERROR: initiating pr out rollback", mpp->wwid);
--		for( i=0 ; i < active_pathcount ; i++){
-+		for( i=0 ; i < count ; i++){
- 			if(thread[i].param.status == MPATH_PR_SUCCESS) {
- 				memcpy(&thread[i].param.paramp->key, &thread[i].param.paramp->sa_key, 8);
- 				memset(&thread[i].param.paramp->sa_key, 0, 8);
-@@ -571,7 +587,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope,
- 			} else
- 				thread[i].param.status = MPATH_PR_SKIP;
- 		}
--		for(i=0; i < active_pathcount ; i++){
-+		for(i=0; i < count ; i++){
- 			if (thread[i].param.status != MPATH_PR_SKIP &&
- 			    thread[i].param.status != MPATH_PR_THREAD_ERROR) {
- 				rc = pthread_join(thread[i].id, NULL);
-@@ -720,7 +736,7 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope,
- 		}
- 	}
- 	pthread_attr_destroy (&attr);
--	for (i = 0; i < active_pathcount; i++){
-+	for (i = 0; i < count; i++){
- 		if (thread[i].param.status != MPATH_PR_THREAD_ERROR) {
- 			rc = pthread_join (thread[i].id, NULL);
- 			if (rc){
-@@ -729,7 +745,7 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope,
- 		}
- 	}
- 
--	for (i = 0; i < active_pathcount; i++){
-+	for (i = 0; i < count; i++){
- 		/*  check thread status here and return the status */
- 
- 		if (thread[i].param.status == MPATH_PR_RESERV_CONFLICT)
-diff --git a/libmultipath/config.c b/libmultipath/config.c
-index 085a3e1..5872927 100644
---- a/libmultipath/config.c
-+++ b/libmultipath/config.c
-@@ -352,6 +352,7 @@ merge_hwe (struct hwentry * dst, struct hwentry * src)
- 	merge_num(skip_kpartx);
- 	merge_num(max_sectors_kb);
- 	merge_num(ghost_delay);
-+	merge_num(all_tg_pt);
- 
- 	snprintf(id, sizeof(id), "%s/%s", dst->vendor, dst->product);
- 	reconcile_features_with_options(id, &dst->features,
-@@ -622,6 +623,7 @@ load_config (char * file)
- 	conf->disable_changed_wwids = DEFAULT_DISABLE_CHANGED_WWIDS;
- 	conf->remove_retries = 0;
- 	conf->ghost_delay = DEFAULT_GHOST_DELAY;
-+	conf->all_tg_pt = DEFAULT_ALL_TG_PT;
- 
- 	/*
- 	 * preload default hwtable
-diff --git a/libmultipath/config.h b/libmultipath/config.h
-index 6e69a37..1bf708a 100644
---- a/libmultipath/config.h
-+++ b/libmultipath/config.h
-@@ -82,6 +82,7 @@ struct hwentry {
- 	int skip_kpartx;
- 	int max_sectors_kb;
- 	int ghost_delay;
-+	int all_tg_pt;
- 	char * bl_product;
- };
- 
-@@ -194,6 +195,7 @@ struct config {
- 	char * partition_delim;
- 	char * config_dir;
- 	int prkey_source;
-+	int all_tg_pt;
- 	struct be64 reservation_key;
- 
- 	vector keywords;
-diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h
-index d7b87b4..f076b4b 100644
---- a/libmultipath/defaults.h
-+++ b/libmultipath/defaults.h
-@@ -43,6 +43,7 @@
- #define DEFAULT_GHOST_DELAY GHOST_DELAY_OFF
- #define DEFAULT_FIND_MULTIPATHS_TIMEOUT -10
- #define DEFAULT_UNKNOWN_FIND_MULTIPATHS_TIMEOUT 1
-+#define DEFAULT_ALL_TG_PT ALL_TG_PT_OFF
- 
- #define DEFAULT_CHECKINT	5
- #define MAX_CHECKINT(a)		(a << 2)
-diff --git a/libmultipath/dict.c b/libmultipath/dict.c
-index 3e7c5d6..2557b8a 100644
---- a/libmultipath/dict.c
-+++ b/libmultipath/dict.c
-@@ -1178,6 +1178,13 @@ declare_hw_snprint(ghost_delay, print_off_int_undef)
- declare_mp_handler(ghost_delay, set_off_int_undef)
- declare_mp_snprint(ghost_delay, print_off_int_undef)
- 
-+declare_def_handler(all_tg_pt, set_yes_no_undef)
-+declare_def_snprint_defint(all_tg_pt, print_yes_no_undef, DEFAULT_ALL_TG_PT)
-+declare_ovr_handler(all_tg_pt, set_yes_no_undef)
-+declare_ovr_snprint(all_tg_pt, print_yes_no_undef)
-+declare_hw_handler(all_tg_pt, set_yes_no_undef)
-+declare_hw_snprint(all_tg_pt, print_yes_no_undef)
-+
- 
- static int
- def_uxsock_timeout_handler(struct config *conf, vector strvec)
-@@ -1509,6 +1516,7 @@ init_keywords(vector keywords)
- 	install_keyword("prkeys_file", &def_prkeys_file_handler, &snprint_def_prkeys_file);
- 	install_keyword("log_checker_err", &def_log_checker_err_handler, &snprint_def_log_checker_err);
- 	install_keyword("reservation_key", &def_reservation_key_handler, &snprint_def_reservation_key);
-+	install_keyword("all_tg_pt", &def_all_tg_pt_handler, &snprint_def_all_tg_pt);
- 	install_keyword("retain_attached_hw_handler", &def_retain_hwhandler_handler, &snprint_def_retain_hwhandler);
- 	install_keyword("detect_prio", &def_detect_prio_handler, &snprint_def_detect_prio);
- 	install_keyword("detect_checker", &def_detect_checker_handler, &snprint_def_detect_checker);
-@@ -1618,6 +1626,7 @@ init_keywords(vector keywords)
- 	install_keyword("skip_kpartx", &hw_skip_kpartx_handler, &snprint_hw_skip_kpartx);
- 	install_keyword("max_sectors_kb", &hw_max_sectors_kb_handler, &snprint_hw_max_sectors_kb);
- 	install_keyword("ghost_delay", &hw_ghost_delay_handler, &snprint_hw_ghost_delay);
-+	install_keyword("all_tg_pt", &hw_all_tg_pt_handler, &snprint_hw_all_tg_pt);
- 	install_sublevel_end();
- 
- 	install_keyword_root("overrides", &overrides_handler);
-@@ -1654,6 +1663,7 @@ init_keywords(vector keywords)
- 	install_keyword("skip_kpartx", &ovr_skip_kpartx_handler, &snprint_ovr_skip_kpartx);
- 	install_keyword("max_sectors_kb", &ovr_max_sectors_kb_handler, &snprint_ovr_max_sectors_kb);
- 	install_keyword("ghost_delay", &ovr_ghost_delay_handler, &snprint_ovr_ghost_delay);
-+	install_keyword("all_tg_pt", &ovr_all_tg_pt_handler, &snprint_ovr_all_tg_pt);
- 
- 	install_keyword_root("multipaths", &multipaths_handler);
- 	install_keyword_multi("multipath", &multipath_handler, NULL);
-diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c
-index 627d366..9ca1355 100644
---- a/libmultipath/propsel.c
-+++ b/libmultipath/propsel.c
-@@ -978,3 +978,18 @@ out:
- 		pp->dev, pp->find_multipaths_timeout, origin);
- 	return 0;
- }
-+
-+int select_all_tg_pt (struct config *conf, struct multipath * mp)
-+{
-+	const char *origin;
-+
-+	mp_set_ovr(all_tg_pt);
-+	mp_set_hwe(all_tg_pt);
-+	mp_set_conf(all_tg_pt);
-+	mp_set_default(all_tg_pt, DEFAULT_ALL_TG_PT);
-+out:
-+	condlog(3, "%s: all_tg_pt = %s %s", mp->alias,
-+		(mp->all_tg_pt == ALL_TG_PT_ON)? "yes" : "no",
-+		origin);
-+	return 0;
-+}
-diff --git a/libmultipath/propsel.h b/libmultipath/propsel.h
-index a022bee..ae99b92 100644
---- a/libmultipath/propsel.h
-+++ b/libmultipath/propsel.h
-@@ -34,3 +34,4 @@ int select_ghost_delay(struct config *conf, struct multipath * mp);
- void reconcile_features_with_options(const char *id, char **features,
- 				     int* no_path_retry,
- 				     int *retain_hwhandler);
-+int select_all_tg_pt (struct config *conf, struct multipath * mp);
-diff --git a/libmultipath/structs.h b/libmultipath/structs.h
-index e424b15..0194b1e 100644
---- a/libmultipath/structs.h
-+++ b/libmultipath/structs.h
-@@ -217,6 +217,12 @@ enum prkey_sources {
- 	PRKEY_SOURCE_FILE,
- };
- 
-+enum all_tg_pt_states {
-+	ALL_TG_PT_UNDEF = YNU_UNDEF,
-+	ALL_TG_PT_OFF = YNU_NO,
-+	ALL_TG_PT_ON = YNU_YES,
-+};
-+
- struct sg_id {
- 	int host_no;
- 	int channel;
-@@ -362,6 +368,7 @@ struct multipath {
- 	int prkey_source;
- 	struct be64 reservation_key;
- 	unsigned char prflag;
-+	int all_tg_pt;
- 	struct gen_multipath generic_mp;
- };
- 
-diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
-index 96d1b66..0c1f174 100644
---- a/multipath/multipath.conf.5
-+++ b/multipath/multipath.conf.5
-@@ -743,6 +743,17 @@ The default is: \fB<unset>\fR
- .
- .
- .TP
-+.B all_tg_pt
-+This must be set to \fByes\fR to successfully use mpathpersist on arrays that
-+automatically set and clear registration keys on all target ports from a
-+host, instead of per target port per host.
-+.RS
-+.TP
-+The default is: \fBno\fR
-+.RE
-+.
-+.
-+.TP
- .B retain_attached_hw_handler
- (Obsolete for kernels >= 4.3) If set to
- .I yes
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch
deleted file mode 100644
index 8d19547..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch
+++ /dev/null
@@ -1,1093 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Fri, 1 Jun 2018 16:30:44 -0500
-Subject: [PATCH] libmultipath: remove rbd code
-
-The Ceph tean has asked to drop support for multipathed rbd, since it
-was running into data corruption issues. There was never an upstream
-Ceph release based on it, and because of the corruption, there should be
-no users of this code. This patch simply reverts all the rbd code from
-multipath.
-
-Cc: Michael Christie <mchristi@redhat.com>
-Cc: Jason Dillaman <dillaman@redhat.com>
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/checkers.c              |  22 --
- libmultipath/checkers.h              |   6 -
- libmultipath/checkers/Makefile       |   7 -
- libmultipath/checkers/cciss_tur.c    |   5 -
- libmultipath/checkers/directio.c     |   5 -
- libmultipath/checkers/emc_clariion.c |   5 -
- libmultipath/checkers/hp_sw.c        |   5 -
- libmultipath/checkers/rbd.c          | 653 -----------------------------------
- libmultipath/checkers/rdac.c         |   5 -
- libmultipath/checkers/readsector0.c  |   5 -
- libmultipath/checkers/tur.c          |   5 -
- libmultipath/discovery.c             |  70 ----
- libmultipath/hwtable.c               |  12 -
- multipath/multipath.conf.5           |   3 -
- multipathd/main.c                    |  11 -
- 15 files changed, 819 deletions(-)
- delete mode 100644 libmultipath/checkers/rbd.c
-
-diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c
-index 08cdfc3..0bacc86 100644
---- a/libmultipath/checkers.c
-+++ b/libmultipath/checkers.c
-@@ -141,13 +141,6 @@ struct checker * add_checker (char *multipath_dir, char * name)
- 	if (!c->free)
- 		goto out;
- 
--	c->repair = (void (*)(struct checker *)) dlsym(c->handle,
--						       "libcheck_repair");
--	errstr = dlerror();
--	if (errstr != NULL)
--		condlog(0, "A dynamic linking error occurred: (%s)", errstr);
--	if (!c->repair)
--		goto out;
- done:
- 	c->fd = -1;
- 	c->sync = 1;
-@@ -222,20 +215,6 @@ void checker_put (struct checker * dst)
- 	free_checker(src);
- }
- 
--void checker_repair (struct checker * c)
--{
--	if (!checker_selected(c))
--		return;
--
--	c->message[0] = '\0';
--	if (c->disable) {
--		MSG(c, "checker disabled");
--		return;
--	}
--	if (c->repair)
--		c->repair(c);
--}
--
- int checker_check (struct checker * c, int path_state)
- {
- 	int r;
-@@ -310,7 +289,6 @@ void checker_get (char *multipath_dir, struct checker * dst, char * name)
- 	dst->sync = src->sync;
- 	strncpy(dst->name, src->name, CHECKER_NAME_LEN);
- 	strncpy(dst->message, src->message, CHECKER_MSG_LEN);
--	dst->repair = src->repair;
- 	dst->check = src->check;
- 	dst->init = src->init;
- 	dst->free = src->free;
-diff --git a/libmultipath/checkers.h b/libmultipath/checkers.h
-index 52154ca..7b18a1a 100644
---- a/libmultipath/checkers.h
-+++ b/libmultipath/checkers.h
-@@ -86,7 +86,6 @@ enum path_check_state {
- #define READSECTOR0  "readsector0"
- #define CCISS_TUR    "cciss_tur"
- #define NONE         "none"
--#define RBD          "rbd"
- 
- #define ASYNC_TIMEOUT_SEC	30
- 
-@@ -113,9 +112,6 @@ struct checker {
- 						multipath-wide. Use MALLOC if
- 						you want to stuff data in. */
- 	int (*check)(struct checker *);
--	void (*repair)(struct checker *);    /* called if check returns
--						PATH_DOWN to bring path into
--						usable state */
- 	int (*init)(struct checker *);       /* to allocate the context */
- 	void (*free)(struct checker *);      /* to free the context */
- };
-@@ -136,7 +132,6 @@ void checker_set_async (struct checker *);
- void checker_set_fd (struct checker *, int);
- void checker_enable (struct checker *);
- void checker_disable (struct checker *);
--void checker_repair (struct checker *);
- int checker_check (struct checker *, int);
- int checker_selected (struct checker *);
- char * checker_name (struct checker *);
-@@ -148,6 +143,5 @@ void checker_get (char *, struct checker *, char *);
- int libcheck_check(struct checker *);
- int libcheck_init(struct checker *);
- void libcheck_free(struct checker *);
--void libcheck_repair(struct checker *);
- 
- #endif /* _CHECKERS_H */
-diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile
-index 87c15bd..02caea6 100644
---- a/libmultipath/checkers/Makefile
-+++ b/libmultipath/checkers/Makefile
-@@ -15,15 +15,8 @@ LIBS= \
- 	libcheckhp_sw.so \
- 	libcheckrdac.so
- 
--ifneq ($(call check_file,/usr/include/rados/librados.h),0)
--LIBS += libcheckrbd.so
--endif
--
- all: $(LIBS)
- 
--libcheckrbd.so: rbd.o
--	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -lrados -ludev
--
- libcheckdirectio.so: libsg.o directio.o
- 	$(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -laio
- 
-diff --git a/libmultipath/checkers/cciss_tur.c b/libmultipath/checkers/cciss_tur.c
-index 436470c..1cab201 100644
---- a/libmultipath/checkers/cciss_tur.c
-+++ b/libmultipath/checkers/cciss_tur.c
-@@ -59,11 +59,6 @@ void libcheck_free (struct checker * c)
- 	return;
- }
- 
--void libcheck_repair (struct checker * c)
--{
--	return;
--}
--
- int libcheck_check(struct checker * c)
- {
- 	int rc;
-diff --git a/libmultipath/checkers/directio.c b/libmultipath/checkers/directio.c
-index ce60e4c..a80848d 100644
---- a/libmultipath/checkers/directio.c
-+++ b/libmultipath/checkers/directio.c
-@@ -118,11 +118,6 @@ void libcheck_free (struct checker * c)
- 	free(ct);
- }
- 
--void libcheck_repair (struct checker * c)
--{
--	return;
--}
--
- static int
- check_state(int fd, struct directio_context *ct, int sync, int timeout_secs)
- {
-diff --git a/libmultipath/checkers/emc_clariion.c b/libmultipath/checkers/emc_clariion.c
-index 9c1ffed..9115b1b 100644
---- a/libmultipath/checkers/emc_clariion.c
-+++ b/libmultipath/checkers/emc_clariion.c
-@@ -90,11 +90,6 @@ void libcheck_free (struct checker * c)
- 	free(c->context);
- }
- 
--void libcheck_repair (struct checker * c)
--{
--	return;
--}
--
- int libcheck_check (struct checker * c)
- {
- 	unsigned char sense_buffer[128] = { 0, };
-diff --git a/libmultipath/checkers/hp_sw.c b/libmultipath/checkers/hp_sw.c
-index cee9aab..0ad34a6 100644
---- a/libmultipath/checkers/hp_sw.c
-+++ b/libmultipath/checkers/hp_sw.c
-@@ -45,11 +45,6 @@ void libcheck_free (struct checker * c)
- 	return;
- }
- 
--void libcheck_repair (struct checker * c)
--{
--	return;
--}
--
- static int
- do_inq(int sg_fd, int cmddt, int evpd, unsigned int pg_op,
-        void *resp, int mx_resp_len, int noisy, unsigned int timeout)
-diff --git a/libmultipath/checkers/rbd.c b/libmultipath/checkers/rbd.c
-deleted file mode 100644
-index 4ff54f4..0000000
---- a/libmultipath/checkers/rbd.c
-+++ /dev/null
-@@ -1,653 +0,0 @@
--/*
-- * Copyright (c) 2016 Red Hat
-- * Copyright (c) 2004 Christophe Varoqui
-- *
-- * Code based off of tur.c and ceph's krbd.cc
-- */
--#define _GNU_SOURCE
--#include <stdio.h>
--#include <stdlib.h>
--#include <string.h>
--#include <unistd.h>
--#include <fcntl.h>
--#include <errno.h>
--#include <pthread.h>
--#include <libudev.h>
--#include <ifaddrs.h>
--#include <sys/types.h>
--#include <sys/stat.h>
--#include <sys/ioctl.h>
--#include <sys/time.h>
--#include <sys/wait.h>
--#include <urcu.h>
--
--#include "rados/librados.h"
--
--#include "structs.h"
--#include "checkers.h"
--
--#include "../libmultipath/debug.h"
--#include "../libmultipath/util.h"
--#include "../libmultipath/time-util.h"
--#include "../libmultipath/util.h"
--
--struct rbd_checker_context;
--typedef int (thread_fn)(struct rbd_checker_context *ct, char *msg);
--
--#define RBD_MSG(msg, fmt, args...) snprintf(msg, CHECKER_MSG_LEN, fmt, ##args);
--
--#define RBD_FEATURE_EXCLUSIVE_LOCK	(1 << 2)
--
--struct rbd_checker_context {
--	int rbd_bus_id;
--	char *client_addr;
--	char *config_info;
--	char *snap;
--	char *pool;
--	char *image;
--	char *username;
--	int remapped;
--	int blacklisted;
--	unsigned lock_on_read:1;
--
--	rados_t cluster;
--
--	int state;
--	int running;
--	time_t time;
--	thread_fn *fn;
--	pthread_t thread;
--	pthread_mutex_t lock;
--	pthread_cond_t active;
--	pthread_spinlock_t hldr_lock;
--	int holders;
--	char message[CHECKER_MSG_LEN];
--};
--
--int libcheck_init(struct checker * c)
--{
--	struct rbd_checker_context *ct;
--	struct udev_device *block_dev;
--	struct udev_device *bus_dev;
--	struct udev *udev;
--	struct stat sb;
--	const char *block_name, *addr, *config_info, *features_str;
--	const char *image, *pool, *snap, *username;
--	uint64_t features = 0;
--	char sysfs_path[PATH_SIZE];
--	int ret;
--
--	ct = malloc(sizeof(struct rbd_checker_context));
--	if (!ct)
--		return 1;
--	memset(ct, 0, sizeof(struct rbd_checker_context));
--	ct->holders = 1;
--	pthread_cond_init_mono(&ct->active);
--	pthread_mutex_init(&ct->lock, NULL);
--	pthread_spin_init(&ct->hldr_lock, PTHREAD_PROCESS_PRIVATE);
--	c->context = ct;
--
--	/*
--	 * The rbd block layer sysfs device is not linked to the rbd bus
--	 * device that we interact with, so figure that out now.
--	 */
--	if (fstat(c->fd, &sb) != 0)
--		goto free_ct;
--
--	udev = udev_new();
--	if (!udev)
--		goto free_ct;
--
--	block_dev = udev_device_new_from_devnum(udev, 'b', sb.st_rdev);
--	if (!block_dev)
--		goto free_udev;
--
--	block_name  = udev_device_get_sysname(block_dev);
--	ret = sscanf(block_name, "rbd%d", &ct->rbd_bus_id);
--
--	udev_device_unref(block_dev);
--	if (ret != 1)
--		goto free_udev;
--
--	snprintf(sysfs_path, sizeof(sysfs_path), "/sys/bus/rbd/devices/%d",
--		 ct->rbd_bus_id);
--	bus_dev = udev_device_new_from_syspath(udev, sysfs_path);
--	if (!bus_dev)
--		goto free_udev;
--
--	addr = udev_device_get_sysattr_value(bus_dev, "client_addr");
--	if (!addr) {
--		condlog(0, "rbd%d: Could not find client_addr in rbd sysfs. "
--			"Try updating kernel", ct->rbd_bus_id);
--		goto free_dev;
--	}
--
--	ct->client_addr = strdup(addr);
--	if (!ct->client_addr)
--		goto free_dev;
--
--	features_str = udev_device_get_sysattr_value(bus_dev, "features");
--	if (!features_str)
--		goto free_addr;
--	features = strtoll(features_str, NULL, 16);
--	if (!(features & RBD_FEATURE_EXCLUSIVE_LOCK)) {
--		condlog(3, "rbd%d: Exclusive lock not set.", ct->rbd_bus_id);
--		goto free_addr;
--	}
--
--	config_info = udev_device_get_sysattr_value(bus_dev, "config_info");
--	if (!config_info)
--		goto free_addr;
--
--	if (!strstr(config_info, "noshare")) {
--		condlog(3, "rbd%d: Only nonshared clients supported.",
--			ct->rbd_bus_id);
--		goto free_addr;
--	}
--
--	if (strstr(config_info, "lock_on_read"))
--		ct->lock_on_read = 1;
--
--	ct->config_info = strdup(config_info);
--	if (!ct->config_info)
--		goto free_addr;
--
--	username = strstr(config_info, "name=");
--	if (username) {
--		char *end;
--		int len;
--
--		username += 5;
--		end = strchr(username, ',');
--		if (!end)
--			goto free_info;
--		len = end - username;
--
--		ct->username = malloc(len + 1);
--		if (!ct->username)
--			goto free_info;
--		strncpy(ct->username, username, len);
--		ct->username[len] = '\0';
--	}
--
--	image = udev_device_get_sysattr_value(bus_dev, "name");
--	if (!image)
--		goto free_username;
--
--	ct->image = strdup(image);
--	if (!ct->image)
--		goto free_username;
--
--	pool = udev_device_get_sysattr_value(bus_dev, "pool");
--	if (!pool)
--		goto free_image;
--
--	ct->pool = strdup(pool);
--	if (!ct->pool)
--		goto free_image;
--
--	snap = udev_device_get_sysattr_value(bus_dev, "current_snap");
--	if (!snap)
--		goto free_pool;
--
--	if (strcmp("-", snap)) {
--		ct->snap = strdup(snap);
--		if (!ct->snap)
--			goto free_pool;
--	}
--
--	if (rados_create(&ct->cluster, NULL) < 0) {
--		condlog(0, "rbd%d: Could not create rados cluster",
--			ct->rbd_bus_id);
--		goto free_snap;
--	}
--
--	if (rados_conf_read_file(ct->cluster, NULL) < 0) {
--		condlog(0, "rbd%d: Could not read rados conf", ct->rbd_bus_id);
--		goto shutdown_rados;
--	}
--
--	ret = rados_connect(ct->cluster);
--	if (ret < 0) {
--		condlog(0, "rbd%d: Could not connect to rados cluster",
--			ct->rbd_bus_id);
--		goto shutdown_rados;
--	}
--
--	udev_device_unref(bus_dev);
--	udev_unref(udev);
--
--	condlog(3, "rbd%d checker init %s %s/%s@%s %s", ct->rbd_bus_id,
--		ct->client_addr, ct->pool, ct->image, ct->snap ? ct->snap : "-",
--		ct->username ? ct->username : "none");
--	return 0;
--
--shutdown_rados:
--	rados_shutdown(ct->cluster);
--free_snap:
--	if (ct->snap)
--		free(ct->snap);
--free_pool:
--	free(ct->pool);
--free_image:
--	free(ct->image);
--free_username:
--	if (ct->username)
--		free(ct->username);
--free_info:
--	free(ct->config_info);
--free_addr:
--	free(ct->client_addr);
--free_dev:
--	udev_device_unref(bus_dev);
--free_udev:
--	udev_unref(udev);
--free_ct:
--	free(ct);
--	return 1;
--}
--
--static void cleanup_context(struct rbd_checker_context *ct)
--{
--	pthread_mutex_destroy(&ct->lock);
--	pthread_cond_destroy(&ct->active);
--	pthread_spin_destroy(&ct->hldr_lock);
--
--	rados_shutdown(ct->cluster);
--
--	if (ct->username)
--		free(ct->username);
--	if (ct->snap)
--		free(ct->snap);
--	free(ct->pool);
--	free(ct->image);
--	free(ct->config_info);
--	free(ct->client_addr);
--	free(ct);
--}
--
--void libcheck_free(struct checker * c)
--{
--	if (c->context) {
--		struct rbd_checker_context *ct = c->context;
--		int holders;
--		pthread_t thread;
--
--		pthread_spin_lock(&ct->hldr_lock);
--		ct->holders--;
--		holders = ct->holders;
--		thread = ct->thread;
--		pthread_spin_unlock(&ct->hldr_lock);
--		if (holders)
--			pthread_cancel(thread);
--		else
--			cleanup_context(ct);
--		c->context = NULL;
--	}
--}
--
--static int rbd_is_blacklisted(struct rbd_checker_context *ct, char *msg)
--{
--	char *addr_tok, *start, *save;
--	const char *cmd[2];
--	char *blklist, *stat;
--	size_t blklist_len, stat_len;
--	int ret;
--	char *end;
--
--	cmd[0] = "{\"prefix\": \"osd blacklist ls\"}";
--	cmd[1] = NULL;
--
--	ret = rados_mon_command(ct->cluster, (const char **)cmd, 1, "", 0,
--				&blklist, &blklist_len, &stat, &stat_len);
--	if (ret < 0) {
--		RBD_MSG(msg, "checker failed: mon command failed %d", ret);
--		return ret;
--	}
--
--	if (!blklist || !blklist_len)
--		goto free_bufs;
--
--	/*
--	 * parse list of addrs with the format
--	 * ipv4:port/nonce date time\n
--	 * or
--	 * [ipv6]:port/nonce date time\n
--	 */
--	ret = 0;
--	for (start = blklist; ; start = NULL) {
--		addr_tok = strtok_r(start, "\n", &save);
--		if (!addr_tok || !strlen(addr_tok))
--			break;
--
--		end = strchr(addr_tok, ' ');
--		if (!end) {
--			RBD_MSG(msg, "checker failed: invalid blacklist %s",
--				 addr_tok);
--			break;
--		}
--		*end = '\0';
--
--		if (!strcmp(addr_tok, ct->client_addr)) {
--			ct->blacklisted = 1;
--			RBD_MSG(msg, "%s is blacklisted", ct->client_addr);
--			ret = 1;
--			break;
--		}
--	}
--
--free_bufs:
--	rados_buffer_free(blklist);
--	rados_buffer_free(stat);
--	return ret;
--}
--
--static int rbd_check(struct rbd_checker_context *ct, char *msg)
--{
--	if (ct->blacklisted || rbd_is_blacklisted(ct, msg) == 1)
--		return PATH_DOWN;
--
--	RBD_MSG(msg, "checker reports path is up");
--	/*
--	 * Path may have issues, but the ceph cluster is at least
--	 * accepting IO, so we can attempt to do IO.
--	 *
--	 * TODO: in future versions, we can run other tests to
--	 * verify OSDs and networks.
--	 */
--	return PATH_UP;
--}
--
--static int sysfs_write_rbd_bus(const char *which, const char *buf,
--			       size_t buf_len)
--{
--	char sysfs_path[PATH_SIZE];
--	int fd;
--	int r;
--
--	/* we require newer kernels so single_major should always be there */
--	snprintf(sysfs_path, sizeof(sysfs_path),
--		 "/sys/bus/rbd/%s_single_major", which);
--	fd = open(sysfs_path, O_WRONLY);
--	if (fd < 0)
--		return -errno;
--
--	r = safe_write(fd, buf, buf_len);
--	close(fd);
--	return r;
--}
--
--static int rbd_remap(struct rbd_checker_context *ct)
--{
--	char *argv[11];
--	pid_t pid;
--	int ret = 0, i = 0;
--	int status;
--
--	pid = fork();
--	switch (pid) {
--	case 0:
--		argv[i++] = "rbd";
--		argv[i++] = "map";
--		if (ct->lock_on_read)
--			argv[i++] = "-o noshare,lock_on_read";
--		else
--			argv[i++] = "-o noshare";
--		if (ct->username) {
--			argv[i++] = "--id";
--			argv[i++] = ct->username;
--		}
--		argv[i++] = "--pool";
--		argv[i++] = ct->pool;
--		if (ct->snap) {
--			argv[i++] = "--snap";
--			argv[i++] = ct->snap;
--		}
--		argv[i++] = ct->image;
--		argv[i] = NULL;
--
--		ret = execvp(argv[0], argv);
--		condlog(0, "rbd%d: Error executing rbd: %s", ct->rbd_bus_id,
--			strerror(errno));
--		exit(-1);
--	case -1:
--		condlog(0, "rbd%d: fork failed: %s", ct->rbd_bus_id,
--			strerror(errno));
--		return -1;
--	default:
--		ret = -1;
--		wait(&status);
--		if (WIFEXITED(status)) {
--			status = WEXITSTATUS(status);
--			if (status == 0)
--				ret = 0;
--			else
--				condlog(0, "rbd%d: failed with %d",
--					ct->rbd_bus_id, status);
--		}
--	}
--
--	return ret;
--}
--
--static int sysfs_write_rbd_remove(const char *buf, int buf_len)
--{
--	return sysfs_write_rbd_bus("remove", buf, buf_len);
--}
--
--static int rbd_rm_blacklist(struct rbd_checker_context *ct)
--{
--	const char *cmd[2];
--	char *stat, *cmd_str;
--	size_t stat_len;
--	int ret;
--
--	ret = asprintf(&cmd_str, "{\"prefix\": \"osd blacklist\", \"blacklistop\": \"rm\", \"addr\": \"%s\"}",
--		       ct->client_addr);
--	if (ret == -1)
--		return -ENOMEM;
--
--	cmd[0] = cmd_str;
--	cmd[1] = NULL;
--
--	ret = rados_mon_command(ct->cluster, (const char **)cmd, 1, "", 0,
--				NULL, NULL, &stat, &stat_len);
--	if (ret < 0) {
--		condlog(1, "rbd%d: repair failed to remove blacklist for %s %d",
--			ct->rbd_bus_id, ct->client_addr, ret);
--		goto free_cmd;
--	}
--
--	condlog(1, "rbd%d: repair rm blacklist for %s",
--	       ct->rbd_bus_id, ct->client_addr);
--	free(stat);
--free_cmd:
--	free(cmd_str);
--	return ret;
--}
--
--static int rbd_repair(struct rbd_checker_context *ct, char *msg)
--{
--	char del[17];
--	int ret;
--
--	if (!ct->blacklisted)
--		return PATH_UP;
--
--	if (!ct->remapped) {
--		ret = rbd_remap(ct);
--		if (ret) {
--			RBD_MSG(msg, "repair failed to remap. Err %d", ret);
--			return PATH_DOWN;
--		}
--	}
--	ct->remapped = 1;
--
--	snprintf(del, sizeof(del), "%d force", ct->rbd_bus_id);
--	ret = sysfs_write_rbd_remove(del, strlen(del) + 1);
--	if (ret) {
--		RBD_MSG(msg, "repair failed to clean up. Err %d", ret);
--		return PATH_DOWN;
--	}
--
--	ret = rbd_rm_blacklist(ct);
--	if (ret) {
--		RBD_MSG(msg, "repair could not remove blacklist entry. Err %d",
--			ret);
--		return PATH_DOWN;
--	}
--
--	ct->remapped = 0;
--	ct->blacklisted = 0;
--
--	RBD_MSG(msg, "has been repaired");
--	return PATH_UP;
--}
--
--#define rbd_thread_cleanup_push(ct) pthread_cleanup_push(cleanup_func, ct)
--#define rbd_thread_cleanup_pop(ct) pthread_cleanup_pop(1)
--
--static void cleanup_func(void *data)
--{
--	int holders;
--	struct rbd_checker_context *ct = data;
--	pthread_spin_lock(&ct->hldr_lock);
--	ct->holders--;
--	holders = ct->holders;
--	ct->thread = 0;
--	pthread_spin_unlock(&ct->hldr_lock);
--	if (!holders)
--		cleanup_context(ct);
--	rcu_unregister_thread();
--}
--
--static void *rbd_thread(void *ctx)
--{
--	struct rbd_checker_context *ct = ctx;
--	int state;
--
--	/* This thread can be canceled, so setup clean up */
--	rbd_thread_cleanup_push(ct)
--	rcu_register_thread();
--	condlog(3, "rbd%d: thread starting up", ct->rbd_bus_id);
--
--	ct->message[0] = '\0';
--
--	/* checker start up */
--	pthread_mutex_lock(&ct->lock);
--	ct->state = PATH_PENDING;
--	pthread_mutex_unlock(&ct->lock);
--
--	state = ct->fn(ct, ct->message);
--
--	/* checker done */
--	pthread_mutex_lock(&ct->lock);
--	ct->state = state;
--	pthread_cond_signal(&ct->active);
--	pthread_mutex_unlock(&ct->lock);
--
--	condlog(3, "rbd%d: thead finished, state %s", ct->rbd_bus_id,
--		checker_state_name(state));
--	rbd_thread_cleanup_pop(ct);
--	return ((void *)0);
--}
--
--static void rbd_timeout(struct timespec *tsp)
--{
--	clock_gettime(CLOCK_MONOTONIC, tsp);
--	tsp->tv_nsec += 1000 * 1000; /* 1 millisecond */
--	normalize_timespec(tsp);
--}
--
--static int rbd_exec_fn(struct checker *c, thread_fn *fn)
--{
--	struct rbd_checker_context *ct = c->context;
--	struct timespec tsp;
--	pthread_attr_t attr;
--	int rbd_status, r;
--
--	if (c->sync)
--		return fn(ct, c->message);
--	/*
--	 * Async mode
--	 */
--	r = pthread_mutex_lock(&ct->lock);
--	if (r != 0) {
--		condlog(2, "rbd%d: mutex lock failed with %d", ct->rbd_bus_id,
--			r);
--		MSG(c, "rbd%d: thread failed to initialize", ct->rbd_bus_id);
--		return PATH_WILD;
--	}
--
--	if (ct->running) {
--		/* Check if checker is still running */
--		if (ct->thread) {
--			condlog(3, "rbd%d: thread not finished",
--				ct->rbd_bus_id);
--			rbd_status = PATH_PENDING;
--		} else {
--			/* checker done */
--			ct->running = 0;
--			rbd_status = ct->state;
--			strncpy(c->message, ct->message, CHECKER_MSG_LEN);
--			c->message[CHECKER_MSG_LEN - 1] = '\0';
--		}
--		pthread_mutex_unlock(&ct->lock);
--	} else {
--		/* Start new checker */
--		ct->state = PATH_UNCHECKED;
--		ct->fn = fn;
--		pthread_spin_lock(&ct->hldr_lock);
--		ct->holders++;
--		pthread_spin_unlock(&ct->hldr_lock);
--		setup_thread_attr(&attr, 32 * 1024, 1);
--		r = pthread_create(&ct->thread, &attr, rbd_thread, ct);
--		if (r) {
--			pthread_mutex_unlock(&ct->lock);
--			ct->thread = 0;
--			ct->holders--;
--			condlog(3, "rbd%d failed to start rbd thread, using sync mode",
--				ct->rbd_bus_id);
--			return fn(ct, c->message);
--		}
--		pthread_attr_destroy(&attr);
--		rbd_timeout(&tsp);
--		r = pthread_cond_timedwait(&ct->active, &ct->lock, &tsp);
--		rbd_status = ct->state;
--		strncpy(c->message, ct->message,CHECKER_MSG_LEN);
--		c->message[CHECKER_MSG_LEN -1] = '\0';
--		pthread_mutex_unlock(&ct->lock);
--
--		if (ct->thread &&
--		    (rbd_status == PATH_PENDING || rbd_status == PATH_UNCHECKED)) {
--			condlog(3, "rbd%d: thread still running",
--				ct->rbd_bus_id);
--			ct->running = 1;
--			rbd_status = PATH_PENDING;
--		}
--	}
--
--	return rbd_status;
--}
--
--void libcheck_repair(struct checker * c)
--{
--	struct rbd_checker_context *ct = c->context;
--
--	if (!ct || !ct->blacklisted)
--		return;
--	rbd_exec_fn(c, rbd_repair);
--}
--
--int libcheck_check(struct checker * c)
--{
--	struct rbd_checker_context *ct = c->context;
--
--	if (!ct)
--		return PATH_UNCHECKED;
--
--	if (ct->blacklisted)
--		return PATH_DOWN;
--
--	return rbd_exec_fn(c, rbd_check);
--}
-diff --git a/libmultipath/checkers/rdac.c b/libmultipath/checkers/rdac.c
-index a643a4a..5104e4e 100644
---- a/libmultipath/checkers/rdac.c
-+++ b/libmultipath/checkers/rdac.c
-@@ -139,11 +139,6 @@ void libcheck_free (struct checker * c)
- 	return;
- }
- 
--void libcheck_repair (struct checker * c)
--{
--	return;
--}
--
- static int
- do_inq(int sg_fd, unsigned int pg_op, void *resp, int mx_resp_len,
-        unsigned int timeout)
-diff --git a/libmultipath/checkers/readsector0.c b/libmultipath/checkers/readsector0.c
-index 8fccb46..1c2a868 100644
---- a/libmultipath/checkers/readsector0.c
-+++ b/libmultipath/checkers/readsector0.c
-@@ -23,11 +23,6 @@ void libcheck_free (struct checker * c)
- 	return;
- }
- 
--void libcheck_repair (struct checker * c)
--{
--	return;
--}
--
- int libcheck_check (struct checker * c)
- {
- 	unsigned char buf[4096];
-diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c
-index eb3348d..bf8486d 100644
---- a/libmultipath/checkers/tur.c
-+++ b/libmultipath/checkers/tur.c
-@@ -112,11 +112,6 @@ void libcheck_free (struct checker * c)
- 	return;
- }
- 
--void libcheck_repair (struct checker * c)
--{
--	return;
--}
--
- #define TUR_MSG(fmt, args...)					\
- 	do {							\
- 		char msg[CHECKER_MSG_LEN];			\
-diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c
-index 1ef1dfa..18ad0e2 100644
---- a/libmultipath/discovery.c
-+++ b/libmultipath/discovery.c
-@@ -1246,21 +1246,6 @@ nvme_sysfs_pathinfo (struct path * pp, vector hwtable)
- }
- 
- static int
--rbd_sysfs_pathinfo (struct path * pp, vector hwtable)
--{
--	sprintf(pp->vendor_id, "Ceph");
--	sprintf(pp->product_id, "RBD");
--
--	condlog(3, "%s: vendor = %s product = %s", pp->dev, pp->vendor_id,
--		pp->product_id);
--	/*
--	 * set the hwe configlet pointer
--	 */
--	pp->hwe = find_hwe(hwtable, pp->vendor_id, pp->product_id, NULL);
--	return 0;
--}
--
--static int
- ccw_sysfs_pathinfo (struct path * pp, vector hwtable)
- {
- 	struct udev_device *parent;
-@@ -1486,8 +1471,6 @@ sysfs_pathinfo(struct path * pp, vector hwtable)
- 		pp->bus = SYSFS_BUS_CCW;
- 	if (!strncmp(pp->dev,"sd", 2))
- 		pp->bus = SYSFS_BUS_SCSI;
--	if (!strncmp(pp->dev,"rbd", 3))
--		pp->bus = SYSFS_BUS_RBD;
- 	if (!strncmp(pp->dev,"nvme", 4))
- 		pp->bus = SYSFS_BUS_NVME;
- 
-@@ -1502,9 +1485,6 @@ sysfs_pathinfo(struct path * pp, vector hwtable)
- 	} else if (pp->bus == SYSFS_BUS_CCISS) {
- 		if (cciss_sysfs_pathinfo(pp, hwtable))
- 			return 1;
--	} else if (pp->bus == SYSFS_BUS_RBD) {
--		if (rbd_sysfs_pathinfo(pp, hwtable))
--			return 1;
- 	} else if (pp->bus == SYSFS_BUS_NVME) {
- 		if (nvme_sysfs_pathinfo(pp, hwtable))
- 			return 1;
-@@ -1753,53 +1733,6 @@ get_udev_uid(struct path * pp, char *uid_attribute, struct udev_device *udev)
- }
- 
- static int
--get_rbd_uid(struct path * pp)
--{
--	struct udev_device *rbd_bus_dev;
--	int ret, rbd_bus_id;
--	const char *pool, *image, *snap;
--	char sysfs_path[PATH_SIZE];
--	uint64_t snap_id, max_snap_id = -3;
--
--	ret = sscanf(pp->dev, "rbd%d", &rbd_bus_id);
--	if (ret != 1)
--		return -EINVAL;
--
--	snprintf(sysfs_path, sizeof(sysfs_path), "/sys/bus/rbd/devices/%d",
--		 rbd_bus_id);
--	rbd_bus_dev = udev_device_new_from_syspath(udev, sysfs_path);
--	if (!rbd_bus_dev)
--		return -ENODEV;
--
--	ret = -EINVAL;
--	pool = udev_device_get_sysattr_value(rbd_bus_dev, "pool_id");
--	if (!pool)
--		goto free_dev;
--
--	image = udev_device_get_sysattr_value(rbd_bus_dev, "image_id");
--	if (!image)
--		goto free_dev;
--
--	snap = udev_device_get_sysattr_value(rbd_bus_dev, "snap_id");
--	if (!snap)
--		goto free_dev;
--	snap_id = strtoull(snap, NULL, 19);
--	if (snap_id >= max_snap_id)
--		ret = snprintf(pp->wwid, WWID_SIZE, "%s-%s", pool, image);
--	else
--		ret = snprintf(pp->wwid, WWID_SIZE, "%s-%s-%s", pool,
--			       image, snap);
--	if (ret >= WWID_SIZE) {
--		condlog(0, "%s: wwid overflow", pp->dev);
--		ret = -EOVERFLOW;
--	}
--
--free_dev:
--	udev_device_unref(rbd_bus_dev);
--	return ret;
--}
--
--static int
- get_vpd_uid(struct path * pp)
- {
- 	struct udev_device *parent = pp->udev;
-@@ -1876,9 +1809,6 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev)
- 		} else
- 			len = strlen(pp->wwid);
- 		origin = "callout";
--	} else if (pp->bus == SYSFS_BUS_RBD) {
--		len = get_rbd_uid(pp);
--		origin = "sysfs";
- 	} else {
- 
- 		if (udev && pp->uid_attribute) {
-diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c
-index 148f0ba..d529bae 100644
---- a/libmultipath/hwtable.c
-+++ b/libmultipath/hwtable.c
-@@ -1000,18 +1000,6 @@ static struct hwentry default_hw[] = {
- 		.prio_name     = PRIO_ALUA,
- 	},
- 	/*
--	 * Red Hat
--	 *
--	 * Maintainer: Mike Christie
--	 * Mail: mchristi@redhat.com
--	 */
--	{
--		.vendor        = "Ceph",
--		.product       = "RBD",
--		.checker_name  = RBD,
--		.deferred_remove = DEFERRED_REMOVE_ON,
--	},
--	/*
- 	 * Kove
- 	 */
- 	{
-diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
-index 0c1f174..31f4585 100644
---- a/multipath/multipath.conf.5
-+++ b/multipath/multipath.conf.5
-@@ -482,9 +482,6 @@ Check the path state for HP/COMPAQ Smart Array(CCISS) controllers.
- .I none
- Do not check the device, fallback to use the values retrieved from sysfs
- .TP
--.I rbd
--Check if the path is in the Ceph blacklist and remap the path if it is.
--.TP
- The default is: \fBtur\fR
- .RE
- .
-diff --git a/multipathd/main.c b/multipathd/main.c
-index 0db88ee..d40c416 100644
---- a/multipathd/main.c
-+++ b/multipathd/main.c
-@@ -1783,15 +1783,6 @@ int update_path_groups(struct multipath *mpp, struct vectors *vecs, int refresh)
- 	return 0;
- }
- 
--void repair_path(struct path * pp)
--{
--	if (pp->state != PATH_DOWN)
--		return;
--
--	checker_repair(&pp->checker);
--	LOG_MSG(1, checker_message(&pp->checker));
--}
--
- /*
-  * Returns '1' if the path has been checked, '-1' if it was blacklisted
-  * and '0' otherwise
-@@ -1972,7 +1963,6 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
- 			pp->mpp->failback_tick = 0;
- 
- 			pp->mpp->stat_path_failures++;
--			repair_path(pp);
- 			return 1;
- 		}
- 
-@@ -2071,7 +2061,6 @@ check_path (struct vectors * vecs, struct path * pp, int ticks)
- 	}
- 
- 	pp->state = newstate;
--	repair_path(pp);
- 
- 	if (pp->mpp->wait_for_udev)
- 		return 1;
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch
deleted file mode 100644
index b98d310..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch
+++ /dev/null
@@ -1,543 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Mon, 4 Jun 2018 22:04:44 -0500
-Subject: [PATCH] mpathpersist: fix aptpl support
-
-The "Active Persist Through Power Loss" flag must be set whenever a key
-is registered. However, there is no way for multipathd to know if this
-was set by mpathpersist. The result is that if a path goes down and
-comes back up (or if it wasn't up when mpathpersist was first run)
-multipathd will clear the aptpl flag when it reregisters the key on it.
-
-To fix this, multipath.conf now accepts an optional ":aptpl" appended
-on the reservation_key value. If this is added to the reservation_key
-multipathd will set the aptpl flag when it reregisters the key. If
-reservation_key is set to "file", this will automatically be tracked
-in the /etc/multipath/prkeys file.
-
-To track this flag in the prkeys file, without changing the format
-I've made "0x<key>" stand for non-aptpl keys, and "0X<key>" stand
-for aptpl keys. Since previously, all keys used a lower-case x, this
-will default to the current behavior for existing keys. Obviously, the
-next time mpathpersist is run, this will be changed if --param-aptpl
-is used.  Since there are no more flags that are in sg_persist that
-multipathd needs to care about in mpathpersist, there shouldn't need
-to be any more flags added to the prkeys file.
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmpathpersist/mpath_persist.c  |  3 ++-
- libmpathpersist/mpath_updatepr.c | 11 +++++++----
- libmpathpersist/mpathpr.h        |  3 ++-
- libmultipath/Makefile            |  2 +-
- libmultipath/config.h            |  2 ++
- libmultipath/dict.c              | 23 +++++++++++++++++++----
- libmultipath/dict.h              |  3 ++-
- libmultipath/prkey.c             | 27 ++++++++++++++++++++++++---
- libmultipath/prkey.h             |  6 ++++--
- libmultipath/propsel.c           |  6 ++++--
- libmultipath/structs.h           |  1 +
- libmultipath/util.c              | 16 ++++++++++++++++
- libmultipath/util.h              |  1 +
- multipath/multipath.conf.5       |  7 +++++--
- multipathd/cli_handlers.c        | 15 ++++++++++-----
- multipathd/main.c                |  1 +
- 16 files changed, 101 insertions(+), 26 deletions(-)
-
-diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c
-index ca91c55..6e9e67f 100644
---- a/libmpathpersist/mpath_persist.c
-+++ b/libmpathpersist/mpath_persist.c
-@@ -344,7 +344,8 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope,
- 	      rq_servact == MPATH_PROUT_REG_SA) ||
- 	     rq_servact == MPATH_PROUT_REG_IGN_SA)) {
- 		memcpy(&mpp->reservation_key, paramp->sa_key, 8);
--		if (update_prkey(alias, get_be64(mpp->reservation_key))) {
-+		if (update_prkey_flags(alias, get_be64(mpp->reservation_key),
-+				       paramp->sa_flags)) {
- 			condlog(0, "%s: failed to set prkey for multipathd.",
- 				alias);
- 			ret = MPATH_PR_DMMP_ERROR;
-diff --git a/libmpathpersist/mpath_updatepr.c b/libmpathpersist/mpath_updatepr.c
-index 8063e90..0aca28e 100644
---- a/libmpathpersist/mpath_updatepr.c
-+++ b/libmpathpersist/mpath_updatepr.c
-@@ -1,7 +1,5 @@
- #include <stdio.h>
- #include <unistd.h>
--#include <errno.h>
--
- #include <stdlib.h>
- #include <stdarg.h>
- #include <fcntl.h>
-@@ -11,6 +9,8 @@
- #include <sys/un.h>
- #include <poll.h>
- #include <errno.h>
-+#include <libudev.h>
-+#include <mpath_persist.h>
- #include "debug.h"
- #include "mpath_cmd.h"
- #include "uxsock.h"
-@@ -59,11 +59,14 @@ int update_prflag(char *mapname, int set) {
- 	return do_update_pr(mapname, (set)? "setprstatus" : "unsetprstatus");
- }
- 
--int update_prkey(char *mapname, uint64_t prkey) {
-+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags) {
- 	char str[256];
-+	char *flagstr = "";
- 
-+	if (sa_flags & MPATH_F_APTPL_MASK)
-+		flagstr = ":aptpl";
- 	if (prkey)
--		sprintf(str, "setprkey key %" PRIx64, prkey);
-+		sprintf(str, "setprkey key %" PRIx64 "%s", prkey, flagstr);
- 	else
- 		sprintf(str, "unsetprkey");
- 	return do_update_pr(mapname, str);
-diff --git a/libmpathpersist/mpathpr.h b/libmpathpersist/mpathpr.h
-index 72feb60..5ea8cd6 100644
---- a/libmpathpersist/mpathpr.h
-+++ b/libmpathpersist/mpathpr.h
-@@ -46,7 +46,8 @@ int send_prout_activepath(char * dev, int rq_servact, int rq_scope,
- 	unsigned int rq_type,   struct prout_param_descriptor * paramp, int noisy);
- 
- int update_prflag(char *mapname, int set);
--int update_prkey(char *mapname, uint64_t prkey);
-+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags);
-+#define update_prkey(mapname, prkey) update_prkey_flags(mapname, prkey, 0)
- void * mpath_alloc_prin_response(int prin_sa);
- int update_map_pr(struct multipath *mpp);
- 
-diff --git a/libmultipath/Makefile b/libmultipath/Makefile
-index f51786d..33f5269 100644
---- a/libmultipath/Makefile
-+++ b/libmultipath/Makefile
-@@ -7,7 +7,7 @@ SONAME = 0
- DEVLIB = libmultipath.so
- LIBS = $(DEVLIB).$(SONAME)
- 
--CFLAGS += $(LIB_CFLAGS) -I$(mpathcmddir)
-+CFLAGS += $(LIB_CFLAGS) -I$(mpathcmddir) -I$(mpathpersistdir)
- 
- LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathcmddir) -lmpathcmd -lurcu -laio
- 
-diff --git a/libmultipath/config.h b/libmultipath/config.h
-index 1bf708a..fcbe3fc 100644
---- a/libmultipath/config.h
-+++ b/libmultipath/config.h
-@@ -98,6 +98,7 @@ struct mpentry {
- 	char * prio_args;
- 	int prkey_source;
- 	struct be64 reservation_key;
-+	uint8_t sa_flags;
- 	int pgpolicy;
- 	int pgfailback;
- 	int rr_weight;
-@@ -197,6 +198,7 @@ struct config {
- 	int prkey_source;
- 	int all_tg_pt;
- 	struct be64 reservation_key;
-+	uint8_t sa_flags;
- 
- 	vector keywords;
- 	vector mptable;
-diff --git a/libmultipath/dict.c b/libmultipath/dict.c
-index 2557b8a..7ad0f5a 100644
---- a/libmultipath/dict.c
-+++ b/libmultipath/dict.c
-@@ -22,6 +22,8 @@
- #include "util.h"
- #include <errno.h>
- #include <inttypes.h>
-+#include <libudev.h>
-+#include <mpath_persist.h>
- #include "mpath_cmd.h"
- #include "dict.h"
- 
-@@ -1012,10 +1014,12 @@ snprint_def_log_checker_err (struct config *conf, char * buff, int len,
- }
- 
- static int
--set_reservation_key(vector strvec, struct be64 *be64_ptr, int *source_ptr)
-+set_reservation_key(vector strvec, struct be64 *be64_ptr, uint8_t *flags_ptr,
-+		    int *source_ptr)
- {
- 	char *buff;
- 	uint64_t prkey;
-+	uint8_t sa_flags;
- 
- 	buff = set_value(strvec);
- 	if (!buff)
-@@ -1023,35 +1027,43 @@ set_reservation_key(vector strvec, struct be64 *be64_ptr, int *source_ptr)
- 
- 	if (strcmp(buff, "file") == 0) {
- 		*source_ptr = PRKEY_SOURCE_FILE;
-+		*flags_ptr = 0;
- 		put_be64(*be64_ptr, 0);
- 		FREE(buff);
- 		return 0;
- 	}
- 
--	if (parse_prkey(buff, &prkey) != 0) {
-+	if (parse_prkey_flags(buff, &prkey, &sa_flags) != 0) {
- 		FREE(buff);
- 		return 1;
- 	}
- 	*source_ptr = PRKEY_SOURCE_CONF;
-+	*flags_ptr = sa_flags;
- 	put_be64(*be64_ptr, prkey);
- 	FREE(buff);
- 	return 0;
- }
- 
- int
--print_reservation_key(char * buff, int len, struct be64 key, int source)
-+print_reservation_key(char * buff, int len, struct be64 key, uint8_t flags,
-+		      int source)
- {
-+	char *flagstr = "";
- 	if (source == PRKEY_SOURCE_NONE)
- 		return 0;
- 	if (source == PRKEY_SOURCE_FILE)
- 		return snprintf(buff, len, "file");
--	return snprintf(buff, len, "0x%" PRIx64, get_be64(key));
-+	if (flags & MPATH_F_APTPL_MASK)
-+		flagstr = ":aptpl";
-+	return snprintf(buff, len, "0x%" PRIx64 "%s", get_be64(key),
-+			flagstr);
- }
- 
- static int
- def_reservation_key_handler(struct config *conf, vector strvec)
- {
- 	return set_reservation_key(strvec, &conf->reservation_key,
-+				   &conf->sa_flags,
- 				   &conf->prkey_source);
- }
- 
-@@ -1060,6 +1072,7 @@ snprint_def_reservation_key (struct config *conf, char * buff, int len,
- 			     const void * data)
- {
- 	return print_reservation_key(buff, len, conf->reservation_key,
-+				     conf->sa_flags,
- 				     conf->prkey_source);
- }
- 
-@@ -1070,6 +1083,7 @@ mp_reservation_key_handler(struct config *conf, vector strvec)
- 	if (!mpe)
- 		return 1;
- 	return set_reservation_key(strvec, &mpe->reservation_key,
-+				   &mpe->sa_flags,
- 				   &mpe->prkey_source);
- }
- 
-@@ -1079,6 +1093,7 @@ snprint_mp_reservation_key (struct config *conf, char * buff, int len,
- {
- 	const struct mpentry * mpe = (const struct mpentry *)data;
- 	return print_reservation_key(buff, len, mpe->reservation_key,
-+				     mpe->sa_flags,
- 				     mpe->prkey_source);
- }
- 
-diff --git a/libmultipath/dict.h b/libmultipath/dict.h
-index 7564892..a40ac66 100644
---- a/libmultipath/dict.h
-+++ b/libmultipath/dict.h
-@@ -15,6 +15,7 @@ int print_pgpolicy(char *buff, int len, long v);
- int print_no_path_retry(char *buff, int len, long v);
- int print_fast_io_fail(char *buff, int len, long v);
- int print_dev_loss(char *buff, int len, unsigned long v);
--int print_reservation_key(char * buff, int len, struct be64 key, int source);
-+int print_reservation_key(char * buff, int len, struct be64 key, uint8_t
-+			  flags, int source);
- int print_off_int_undef(char *buff, int len, long v);
- #endif /* _DICT_H */
-diff --git a/libmultipath/prkey.c b/libmultipath/prkey.c
-index 89b90ed..d645f81 100644
---- a/libmultipath/prkey.c
-+++ b/libmultipath/prkey.c
-@@ -11,6 +11,8 @@
- #include <string.h>
- #include <inttypes.h>
- #include <errno.h>
-+#include <libudev.h>
-+#include <mpath_persist.h>
- 
- #define PRKEY_READ 0
- #define PRKEY_WRITE 1
-@@ -108,7 +110,8 @@ static int do_prkey(int fd, char *wwid, char *keystr, int cmd)
- 	return 0;
- }
- 
--int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey)
-+int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey,
-+	      uint8_t *sa_flags)
- {
- 	int fd;
- 	int unused;
-@@ -124,6 +127,9 @@ int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey)
- 	ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_READ);
- 	if (ret)
- 		goto out_file;
-+	*sa_flags = 0;
-+	if (strchr(keystr, 'X'))
-+		*sa_flags = MPATH_F_APTPL_MASK;
- 	ret = !!parse_prkey(keystr, prkey);
- out_file:
- 	close(fd);
-@@ -131,7 +137,8 @@ out:
- 	return ret;
- }
- 
--int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey)
-+int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey,
-+	      uint8_t sa_flags)
- {
- 	int fd;
- 	int can_write = 1;
-@@ -141,6 +148,12 @@ int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey)
- 	if (!strlen(mpp->wwid))
- 		goto out;
- 
-+	if (sa_flags & ~MPATH_F_APTPL_MASK) {
-+		condlog(0, "unsupported pr flags, 0x%x",
-+			sa_flags & ~MPATH_F_APTPL_MASK);
-+		sa_flags &= MPATH_F_APTPL_MASK;
-+	}
-+
- 	fd = open_file(conf->prkeys_file, &can_write, PRKEYS_FILE_HEADER);
- 	if (fd < 0)
- 		goto out;
-@@ -149,7 +162,15 @@ int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey)
- 		goto out_file;
- 	}
- 	if (prkey) {
--		snprintf(keystr, PRKEY_SIZE, "0x%016" PRIx64, prkey);
-+		/* using the capitalization of the 'x' is a hack, but
-+		 * it's unlikely that mpath_persist will support more options
-+		 * since sg_persist doesn't, and this lets us keep the
-+		 * same file format as before instead of needing to change
-+		 * the format of the prkeys file */
-+		if (sa_flags)
-+			snprintf(keystr, PRKEY_SIZE, "0X%016" PRIx64, prkey);
-+		else
-+			snprintf(keystr, PRKEY_SIZE, "0x%016" PRIx64, prkey);
- 		keystr[PRKEY_SIZE - 1] = '\0';
- 		ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_WRITE);
- 	}
-diff --git a/libmultipath/prkey.h b/libmultipath/prkey.h
-index 4028e70..6739191 100644
---- a/libmultipath/prkey.h
-+++ b/libmultipath/prkey.h
-@@ -13,7 +13,9 @@
- "# prkey wwid\n" \
- "#\n"
- 
--int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey);
--int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey);
-+int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey,
-+	      uint8_t sa_flags);
-+int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey,
-+	      uint8_t *sa_flags);
- 
- #endif /* _PRKEY_H */
-diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c
-index 9ca1355..62a6893 100644
---- a/libmultipath/propsel.c
-+++ b/libmultipath/propsel.c
-@@ -106,6 +106,7 @@ do {									\
- 	if (src && src->prkey_source != PRKEY_SOURCE_NONE) {		\
- 		mp->prkey_source = src->prkey_source;			\
- 		mp->reservation_key = src->reservation_key;		\
-+		mp->sa_flags = src->sa_flags;				\
- 		origin = msg;						\
- 		goto out;						\
- 	}								\
-@@ -703,18 +704,19 @@ int select_reservation_key(struct config *conf, struct multipath *mp)
- 	do_prkey_set(mp->mpe, multipaths_origin);
- 	do_prkey_set(conf, conf_origin);
- 	put_be64(mp->reservation_key, 0);
-+	mp->sa_flags = 0;
- 	mp->prkey_source = PRKEY_SOURCE_NONE;
- 	return 0;
- out:
- 	if (mp->prkey_source == PRKEY_SOURCE_FILE) {
- 		from_file = " (from prkeys file)";
--		if (get_prkey(conf, mp, &prkey) != 0)
-+		if (get_prkey(conf, mp, &prkey, &mp->sa_flags) != 0)
- 			put_be64(mp->reservation_key, 0);
- 		else
- 			put_be64(mp->reservation_key, prkey);
- 	}
- 	print_reservation_key(buff, PRKEY_SIZE, mp->reservation_key,
--			      mp->prkey_source);
-+			      mp->sa_flags, mp->prkey_source);
- 	condlog(3, "%s: reservation_key = %s %s%s", mp->alias, buff, origin,
- 		from_file);
- 	return 0;
-diff --git a/libmultipath/structs.h b/libmultipath/structs.h
-index 0194b1e..987479f 100644
---- a/libmultipath/structs.h
-+++ b/libmultipath/structs.h
-@@ -367,6 +367,7 @@ struct multipath {
- 	/* persistent management data*/
- 	int prkey_source;
- 	struct be64 reservation_key;
-+	uint8_t sa_flags;
- 	unsigned char prflag;
- 	int all_tg_pt;
- 	struct gen_multipath generic_mp;
-diff --git a/libmultipath/util.c b/libmultipath/util.c
-index 7251ad0..8d8fcc8 100644
---- a/libmultipath/util.c
-+++ b/libmultipath/util.c
-@@ -10,6 +10,8 @@
- #include <dirent.h>
- #include <unistd.h>
- #include <errno.h>
-+#include <libudev.h>
-+#include <mpath_persist.h>
- 
- #include "util.h"
- #include "debug.h"
-@@ -435,6 +437,20 @@ int parse_prkey(char *ptr, uint64_t *prkey)
- 	return 0;
- }
- 
-+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags)
-+{
-+	char *flagstr;
-+
-+	flagstr = strchr(ptr, ':');
-+	*flags = 0;
-+	if (flagstr) {
-+		*flagstr++ = '\0';
-+		if (strlen(flagstr) == 5 && strcmp(flagstr, "aptpl") == 0)
-+			*flags = MPATH_F_APTPL_MASK;
-+	}
-+	return parse_prkey(ptr, prkey);
-+}
-+
- int safe_write(int fd, const void *buf, size_t count)
- {
- 	while (count > 0) {
-diff --git a/libmultipath/util.h b/libmultipath/util.h
-index a3ab894..56cec76 100644
---- a/libmultipath/util.h
-+++ b/libmultipath/util.h
-@@ -19,6 +19,7 @@ void setup_thread_attr(pthread_attr_t *attr, size_t stacksize, int detached);
- int systemd_service_enabled(const char *dev);
- int get_linux_version_code(void);
- int parse_prkey(char *ptr, uint64_t *prkey);
-+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags);
- int safe_write(int fd, const void *buf, size_t count);
- 
- #define KERNEL_VERSION(maj, min, ptc) ((((maj) * 256) + (min)) * 256 + (ptc))
-diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
-index 31f4585..30d8598 100644
---- a/multipath/multipath.conf.5
-+++ b/multipath/multipath.conf.5
-@@ -726,14 +726,17 @@ This is the service action reservation key used by mpathpersist. It must be
- set for all multipath devices using persistent reservations, and it must be
- the same as the RESERVATION KEY field of the PERSISTENT RESERVE OUT parameter
- list which contains an 8-byte value provided by the application client to the
--device server to identify the I_T nexus.
-+device server to identify the I_T nexus. If the \fI--param-aptpl\fR option is
-+used when registering the key with mpathpersist, \fB:aptpl\fR must be appended
-+to the end of the reservation key.
- .RS
- .PP
- Alternatively, this can be set to \fBfile\fR, which will store the RESERVATION
- KEY registered by mpathpersist in the \fIprkeys_file\fR. multipathd will then
- use this key to register additional paths as they appear.  When the
- registration is removed, the RESERVATION KEY is removed from the
--\fIprkeys_file\fR.
-+\fIprkeys_file\fR. The prkeys file will automatically keep track of whether
-+the key was registered with \fI--param-aptpl\fR.
- .TP
- The default is: \fB<unset>\fR
- .RE
-diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c
-index ba50fb8..6452796 100644
---- a/multipathd/cli_handlers.c
-+++ b/multipathd/cli_handlers.c
-@@ -21,6 +21,7 @@
- #include "sysfs.h"
- #include <errno.h>
- #include <libudev.h>
-+#include <mpath_persist.h>
- #include "util.h"
- #include "prkey.h"
- #include "propsel.h"
-@@ -1463,6 +1464,7 @@ cli_getprkey(void * v, char ** reply, int * len, void * data)
- 	struct multipath * mpp;
- 	struct vectors * vecs = (struct vectors *)data;
- 	char *mapname = get_keyparam(v, MAP);
-+	char *flagstr = "";
- 
- 	mapname = convert_dev(mapname, 0);
- 	condlog(3, "%s: get persistent reservation key (operator)", mapname);
-@@ -1478,8 +1480,10 @@ cli_getprkey(void * v, char ** reply, int * len, void * data)
- 		*len = strlen(*reply) + 1;
- 		return 0;
- 	}
--	snprintf(*reply, 20, "0x%" PRIx64 "\n",
--		 get_be64(mpp->reservation_key));
-+	if (mpp->sa_flags & MPATH_F_APTPL_MASK)
-+		flagstr = ":aptpl";
-+	snprintf(*reply, 20, "0x%" PRIx64 "%s\n",
-+		 get_be64(mpp->reservation_key), flagstr);
- 	(*reply)[19] = '\0';
- 	*len = strlen(*reply) + 1;
- 	return 0;
-@@ -1503,7 +1507,7 @@ cli_unsetprkey(void * v, char ** reply, int * len, void * data)
- 
- 	conf = get_multipath_config();
- 	pthread_cleanup_push(put_multipath_config, conf);
--	ret = set_prkey(conf, mpp, 0);
-+	ret = set_prkey(conf, mpp, 0, 0);
- 	pthread_cleanup_pop(1);
- 
- 	return ret;
-@@ -1517,6 +1521,7 @@ cli_setprkey(void * v, char ** reply, int * len, void * data)
- 	char *mapname = get_keyparam(v, MAP);
- 	char *keyparam = get_keyparam(v, KEY);
- 	uint64_t prkey;
-+	uint8_t flags;
- 	int ret;
- 	struct config *conf;
- 
-@@ -1527,14 +1532,14 @@ cli_setprkey(void * v, char ** reply, int * len, void * data)
- 	if (!mpp)
- 		return 1;
- 
--	if (parse_prkey(keyparam, &prkey) != 0) {
-+	if (parse_prkey_flags(keyparam, &prkey, &flags) != 0) {
- 		condlog(0, "%s: invalid prkey : '%s'", mapname, keyparam);
- 		return 1;
- 	}
- 
- 	conf = get_multipath_config();
- 	pthread_cleanup_push(put_multipath_config, conf);
--	ret = set_prkey(conf, mpp, prkey);
-+	ret = set_prkey(conf, mpp, prkey, flags);
- 	pthread_cleanup_pop(1);
- 
- 	return ret;
-diff --git a/multipathd/main.c b/multipathd/main.c
-index d40c416..6b1e782 100644
---- a/multipathd/main.c
-+++ b/multipathd/main.c
-@@ -3089,6 +3089,7 @@ void *  mpath_pr_event_handler_fn (void * pathp )
- 
- 	param= malloc(sizeof(struct prout_param_descriptor));
- 	memset(param, 0 , sizeof(struct prout_param_descriptor));
-+	param->sa_flags = mpp->sa_flags;
- 	memcpy(param->sa_key, &mpp->reservation_key, 8);
- 	param->num_transportid = 0;
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch
deleted file mode 100644
index 5a3fd83..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Tue, 5 Jun 2018 15:31:55 -0500
-Subject: [PATCH] multipath: don't check timestamps without a path
-
-If a path was blacklisted, pathvec could exist but have no path in it.
-print_cmd_valid wasn't checking this before calling
-find_multipaths_check_timeout(). This was causing it to dereference a
-NULL pointer in these cases.
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- multipath/main.c | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/multipath/main.c b/multipath/main.c
-index c69e996..3f0a6aa 100644
---- a/multipath/main.c
-+++ b/multipath/main.c
-@@ -482,10 +482,8 @@ static int print_cmd_valid(int k, const vector pathvec,
- 			pp, pp->find_multipaths_timeout, &until);
- 		if (wait != FIND_MULTIPATHS_WAITING)
- 			k = 1;
--	} else if (pathvec != NULL) {
--		pp = VECTOR_SLOT(pathvec, 0);
-+	} else if (pathvec != NULL && (pp = VECTOR_SLOT(pathvec, 0)))
- 		wait = find_multipaths_check_timeout(pp, 0, &until);
--	}
- 	if (wait == FIND_MULTIPATHS_WAITING)
- 		printf("FIND_MULTIPATHS_WAIT_UNTIL=\"%ld.%06ld\"\n",
- 			       until.tv_sec, until.tv_nsec/1000);
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch
deleted file mode 100644
index 23908fa..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Fri, 8 Jun 2018 17:12:37 -0500
-Subject: [PATCH] libmultipath: fix detect alua corner case
-
-If retain_attach_hw_handler = no, then the paths tpgs state will never
-be checked, and the multipath device will always select the alua
-handler, if no other handler is selected. the paths tpgs state
-should be checked, regardless of the retain_hwhandler value.
-
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/propsel.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c
-index 62a6893..f626c74 100644
---- a/libmultipath/propsel.c
-+++ b/libmultipath/propsel.c
-@@ -403,9 +403,11 @@ int select_hwhandler(struct config *conf, struct multipath *mp)
- 	bool all_tpgs = true;
- 
- 	dh_state = &handler[2];
-+
-+	vector_foreach_slot(mp->paths, pp, i)
-+		all_tpgs = all_tpgs && (pp->tpgs > 0);
- 	if (mp->retain_hwhandler != RETAIN_HWHANDLER_OFF) {
- 		vector_foreach_slot(mp->paths, pp, i) {
--			all_tpgs = all_tpgs && (pp->tpgs > 0);
- 			if (get_dh_state(pp, dh_state, sizeof(handler) - 2) > 0
- 			    && strcmp(dh_state, "detached")) {
- 				memcpy(handler, "1 ", 2);
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch
deleted file mode 100644
index 624f45e..0000000
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Fri, 8 Jun 2018 17:23:07 -0500
-Subject: [PATCH] multipath: fix setting conf->version
-
-Commit d3b71498 stopped multipath from setting conf->version. Instead,
-it was always being set to 0.0.0. Multipathd was still setting this
-correctly.
-
-Fixes: d3b71498 "multipath: fix rcu thread cancellation hang"
-Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
----
- libmultipath/devmapper.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
-index f2befad..8136d15 100644
---- a/libmultipath/devmapper.c
-+++ b/libmultipath/devmapper.c
-@@ -245,13 +245,13 @@ void libmp_dm_init(void)
- 	int verbosity;
- 	unsigned int version[3];
- 
-+	if (dm_prereq(version))
-+		exit(1);
- 	conf = get_multipath_config();
- 	verbosity = conf->verbosity;
--	memcpy(version, conf->version, sizeof(version));
-+	memcpy(conf->version, version, sizeof(version));
- 	put_multipath_config(conf);
- 	dm_init(verbosity);
--	if (dm_prereq(version))
--		exit(1);
- 	dm_udev_set_sync_support(libmp_dm_udev_sync);
- }
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch
index 4ef3e70..e88e256 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch
@@ -10,18 +10,21 @@
 too.
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Update patch to 0.8.0
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  Makefile.inc        | 2 +-
  kpartx/kpartx.rules | 2 +-
  multipath/Makefile  | 4 ++--
- multipath/main.c    | 2 +-
- 4 files changed, 5 insertions(+), 5 deletions(-)
+ 3 files changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/Makefile.inc b/Makefile.inc
-index af2f5ba..0b271ea 100644
+index fc728ca..2f0bcea 100644
 --- a/Makefile.inc
 +++ b/Makefile.inc
-@@ -51,7 +51,7 @@ endif
+@@ -48,7 +48,7 @@ endif
  prefix		=
  exec_prefix	= $(prefix)
  usr_prefix	= $(prefix)
@@ -64,19 +67,6 @@
  	$(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz
  	$(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz
  
-diff --git a/multipath/main.c b/multipath/main.c
-index 3f0a6aa..6fdde03 100644
---- a/multipath/main.c
-+++ b/multipath/main.c
-@@ -389,7 +389,7 @@ static int find_multipaths_check_timeout(const struct path *pp, long tmo,
- 	struct timespec now, ftimes[2], tdiff;
- 	struct stat st;
- 	long fd;
--	int r, err, retries = 0;
-+	int r, err = 0, retries = 0;
- 
- 	clock_gettime(CLOCK_REALTIME, &now);
- 
 -- 
 2.7.4
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch
index 451c524..fd10608 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch
@@ -1,7 +1,7 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Wed, 2 Jul 2014 12:49:53 -0500
-Subject: [PATCH] RH: Remove the property blacklist exception builtin
+From 0000000000000000000000000000000000000000 Mon Sep 17  00:00:00 2001
+From:Benjamin Marzinski <bmarzins@redhat.com> 
+Date: Wed, 2 Jul  2014 12:49:53 -0500 
+Subject: [PATCH] RH: Remove the property blacklist  exception builtin
 
 Multipath set the default property blacklist exceptions to
 (ID_SCSI_VPD|ID_WWN).  This has the effect of blacklisting some internal
@@ -12,76 +12,46 @@
 it.
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upsteam-Status: Pending
+
+Update patch to 0.8.0
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- libmultipath/blacklist.c   | 15 ++++++---------
- multipath/multipath.conf.5 | 14 ++++++++------
- 2 files changed, 14 insertions(+), 15 deletions(-)
+ libmultipath/blacklist.c | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
 
 diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c
-index ee396e2..19d4697 100644
+index e0d0279..9f58313 100644
 --- a/libmultipath/blacklist.c
 +++ b/libmultipath/blacklist.c
-@@ -181,12 +181,6 @@ setup_default_blist (struct config * conf)
- 	if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
- 		return 1;
+@@ -192,12 +192,6 @@ setup_default_blist (struct config * conf)
+ 	char * str;
+ 	int i;
  
--	str = STRDUP("(SCSI_IDENT_|ID_WWN)");
+-	str = STRDUP("^(ram|zram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]");
 -	if (!str)
 -		return 1;
--	if (store_ble(conf->elist_property, str, ORIGIN_DEFAULT))
+-	if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT))
 -		return 1;
 -
- 	vector_foreach_slot (conf->hwtable, hwe, i) {
- 		if (hwe->bl_product) {
- 			if (_blacklist_device(conf->blist_device, hwe->vendor,
-@@ -390,9 +384,12 @@ filter_property(struct config * conf, struct udev_device * udev)
- 	 * This is the inverse of the 'normal' matching;
- 	 * the environment variable _has_ to match.
- 	 */
--	log_filter(devname, NULL, NULL, NULL, NULL,
--		   MATCH_PROPERTY_BLIST_MISSING);
--	return MATCH_PROPERTY_BLIST_MISSING;
-+	if (VECTOR_SIZE(conf->elist_property)) {
-+		log_filter(devname, NULL, NULL, NULL, NULL,
-+			   MATCH_PROPERTY_BLIST_MISSING);
-+		return MATCH_PROPERTY_BLIST_MISSING;
-+	}
-+	return 0;
+ 	str = STRDUP("^(td|hd|vd)[a-z]");
+ 	if (!str)
+ 		return 1;
+@@ -415,8 +409,11 @@ filter_property(struct config *conf, struct udev_device *udev, int lvl)
+ 		}
+ 	}
+ 
+-	log_filter(devname, NULL, NULL, NULL, env, NULL, r, lvl);
+-	return r;
++       if (VECTOR_SIZE(conf->elist_property)) {
++               log_filter(devname, NULL, NULL, NULL, env, NULL, r, lvl);
++               return r;
++       }
++       return 0;
  }
  
- void
-diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5
-index 30d8598..c45da9f 100644
---- a/multipath/multipath.conf.5
-+++ b/multipath/multipath.conf.5
-@@ -1179,10 +1179,6 @@ The \fIWorld Wide Identification\fR of a device.
- .TP
- .B property
- Regular expression of the udev property to be whitelisted.
--.RS
--.TP
--The default is: \fB(SCSI_IDENT_|ID_WWN)\fR
--.RE
- .TP
- .B device
- Subsection for the device description. This subsection recognizes the
-@@ -1193,8 +1189,14 @@ keywords. For a full description of these keywords please see the \fIdevices\fR
- section description.
- .LP
- The \fIproperty\fR whitelist handling is different from the usual
--handling in the sense that the device \fIhas\fR to have a udev property that
--matches the whitelist, otherwise the device will be blacklisted. In these cases the message \fIblacklisted, udev property missing\fR will be displayed.
-+handling in the sense that if the propery whitelist is set, the device
-+\fIhas\fR to have a udev property that matches the whitelist, otherwise the
-+device will be blacklisted. In these cases the message \fIblacklisted, udev
-+property missing\fR will be displayed. For example settting the
-+property blacklist_exception to \fB(SCSI_IDENT_|ID_WWN)\fR will blacklist
-+all devices that have no udev property whose name regex matches either
-+\fBSCSI_IDENT_\fR or \fBID_WWN\fR. This works to exclude most
-+non-multipathable devices.
- .
- .
- .\" ----------------------------------------------------------------------------
+ static void free_ble(struct blentry *ble)
 -- 
 2.7.4
 
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch
index 886f1c8..ea6137f 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch
@@ -1,7 +1,10 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Wed, 15 Oct 2014 10:39:30 -0500
-Subject: [PATCH] RH: don't start without a config file
+From 0bf8ff8dab26201b268b419809844c07e168f17d Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Fri, 23 Nov 2018 17:25:15 +0800
+Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
+ 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Wed, 15
+ Oct 2014 10:39:30 -0500 Subject: [PATCH] RH: don't start without a config
+ file
 
 If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist
 all devices when running multipath.  A completely blank configuration file
@@ -11,16 +14,21 @@
 /etc/multipath.conf will keep multipath from doing anything.
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upstream-Status: Pending
+
+update this patch to new version
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- libmultipath/config.c         | 15 +++++++++++++++
+ libmultipath/config.c         | 18 ++++++++++++++++++
  libmultipath/config.h         |  1 +
  multipath/multipath.rules     |  1 +
  multipathd/multipathd.8       |  2 ++
  multipathd/multipathd.service |  1 +
- 5 files changed, 20 insertions(+)
+ 5 files changed, 23 insertions(+)
 
 diff --git a/libmultipath/config.c b/libmultipath/config.c
-index 5872927..0607403 100644
+index 5af7af5..e4233f1 100644
 --- a/libmultipath/config.c
 +++ b/libmultipath/config.c
 @@ -26,6 +26,7 @@
@@ -30,30 +38,33 @@
 +#include "version.h"
  
  static int
- hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2)
-@@ -658,6 +659,20 @@ load_config (char * file)
- 			factorize_hwtable(conf->hwtable, builtin_hwtable_size);
+ hwe_strmatch (const struct hwentry *hwe1, const struct hwentry *hwe2)
+@@ -743,6 +745,23 @@ load_config (char * file)
+ 			goto out;
  		}
- 
+ 		factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
 +	} else {
 +		condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
 +		if (conf->blist_devnode == NULL) {
 +			conf->blist_devnode = vector_alloc();
 +			if (!conf->blist_devnode) {
-+				condlog(0, "cannot allocate blacklist\n");
++				conf->blist_devnode = vector_alloc();
++				if (!conf->blist_devnode) {
++					condlog(0, "cannot allocate blacklist\n");
++					goto out;
++				}
++			}
++			if (store_ble(conf->blist_devnode, strdup(".*"),
++				ORIGIN_NO_CONFIG)) {
++				condlog(0, "cannot store default no-config blacklist\n");
 +				goto out;
 +			}
 +		}
-+		if (store_ble(conf->blist_devnode, strdup(".*"),
-+		              ORIGIN_NO_CONFIG)) {
-+			condlog(0, "cannot store default no-config blacklist\n");
-+			goto out;
-+		}
  	}
  
  	conf->processed_main_config = 1;
 diff --git a/libmultipath/config.h b/libmultipath/config.h
-index fcbe3fc..3a42435 100644
+index 7d0cd9a..d7fb8e2 100644
 --- a/libmultipath/config.h
 +++ b/libmultipath/config.h
 @@ -9,6 +9,7 @@
@@ -65,7 +76,7 @@
  /*
   * In kernel, fast_io_fail == 0 means immediate failure on rport delete.
 diff --git a/multipath/multipath.rules b/multipath/multipath.rules
-index d658073..b3f54d7 100644
+index 9df11a9..0486bf7 100644
 --- a/multipath/multipath.rules
 +++ b/multipath/multipath.rules
 @@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath"
@@ -77,7 +88,7 @@
  ENV{DEVTYPE}!="partition", GOTO="test_dev"
  IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH"
 diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8
-index e78ac9e..09cdead 100644
+index 94c3f97..ed13efd 100644
 --- a/multipathd/multipathd.8
 +++ b/multipathd/multipathd.8
 @@ -38,6 +38,8 @@ map regains its maximum performance and redundancy.
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch
index 9330bf0..77dd96f 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch
@@ -1,49 +1,58 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Wed, 19 Apr 2017 06:10:01 -0500
-Subject: [PATCH] RH: use rpm optflags if present
+From 436f7594485e35523269e662c4b5dc3a2c10ff9b Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Mon, 26 Nov 2018 09:19:17 +0800
+Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
+ 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Wed, 19
+ Apr 2017 06:10:01 -0500 Subject: [PATCH] RH: use rpm optflags if present
 
 Use the passed in optflags when compiling as an RPM, and keep the
 default flags as close as possible to the current fedora flags, while
 still being generic.
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upstream-Status: Pending
+
+update this patch to new version
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- Makefile.inc | 24 ++++++++++++++++--------
- 1 file changed, 16 insertions(+), 8 deletions(-)
+ Makefile.inc | 25 ++++++++++++++++---------
+ 1 file changed, 16 insertions(+), 9 deletions(-)
 
 diff --git a/Makefile.inc b/Makefile.inc
-index 0b271ea..5ff69a3 100644
+index b86cba6..295afb9 100644
 --- a/Makefile.inc
 +++ b/Makefile.inc
-@@ -85,14 +85,22 @@ TEST_CC_OPTION = $(shell \
+@@ -85,15 +85,22 @@ TEST_CC_OPTION = $(shell \
  		echo "$(2)"; \
  	fi)
  
 -STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
+-ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)
 -
 -OPTFLAGS	= -O2 -g -pipe -Wall -Wextra -Wformat=2 -Werror=implicit-int \
 -		  -Werror=implicit-function-declaration -Werror=format-security \
 -		  -Wno-sign-compare -Wno-unused-parameter -Wno-clobbered \
--		  -Werror=cast-qual -Werror=discarded-qualifiers \
+-		  -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) \
 -		  -Wp,-D_FORTIFY_SOURCE=2 $(STACKPROT) \
 -		  --param=ssp-buffer-size=4
 +ifndef RPM_OPT_FLAGS
-+	STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
-+	OPTFLAGS	= -O2 -g -pipe -Wall -Werror=format-security \
-+			  -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \
-+			  $(STACKPROT) --param=ssp-buffer-size=4 \
-+			  -grecord-gcc-switches
-+	ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1)
-+		OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-+	endif
++       STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
++       OPTFLAGS        = -O2 -g -pipe -Wall -Werror=format-security \
++                         -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \
++                         $(STACKPROT) --param=ssp-buffer-size=4 \
++                         -grecord-gcc-switches
++       ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1)
++               OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
++       endif
 +else
-+	OPTFLAGS = $(RPM_OPT_FLAGS)
++       OPTFLAGS = $(RPM_OPT_FLAGS)
 +endif
-+OPTFLAGS	+= -Wextra -Wstrict-prototypes -Wformat=2 -Werror=implicit-int \
-+		   -Werror=implicit-function-declaration -Wno-sign-compare \
-+		   -Wno-unused-parameter -Werror=cast-qual \
-+		   -Werror=discarded-qualifiers
++OPTFLAGS       += -Wextra -Wstrict-prototypes -Wformat=2 -Werror=implicit-int \
++                  -Werror=implicit-function-declaration -Wno-sign-compare \
++                  -Wno-unused-parameter -Werror=cast-qual \
++                  -Werror=discarded-qualifiers
  
  CFLAGS		:= $(OPTFLAGS) -DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \
  		   -MMD -MP $(CFLAGS)
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch
index 5cad22b..a140771 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch
@@ -1,7 +1,9 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Thu, 16 Oct 2014 15:49:01 -0500
-Subject: [PATCH] RH: add mpathconf
+From eb5a36e6e0caedf06008e48eb77b7bf7c6534ee5 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Mon, 26 Nov 2018 09:55:12 +0800
+Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
+ 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Thu, 16
+ Oct 2014 15:49:01 -0500 Subject: [PATCH] RH: add mpathconf
 
 mpathconf is a program (largely based on lvmcomf) to help users
 configure /etc/multipath.conf and enable or disable multipathing.  It
@@ -11,6 +13,12 @@
 a single command.
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upstream-Status: Pending
+
+update this patch to new version
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  libmultipath/config.c |   1 +
  multipath/Makefile    |   5 +
@@ -21,11 +29,11 @@
  create mode 100644 multipath/mpathconf.8
 
 diff --git a/libmultipath/config.c b/libmultipath/config.c
-index 0607403..5c98e48 100644
+index e4233f1..b779505 100644
 --- a/libmultipath/config.c
 +++ b/libmultipath/config.c
-@@ -661,6 +661,7 @@ load_config (char * file)
- 
+@@ -747,6 +747,7 @@ load_config (char * file)
+ 		factorize_hwtable(conf->hwtable, builtin_hwtable_size, file);
  	} else {
  		condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices.");
 +		condlog(0, "You can run /sbin/mpathconf to create or modify /etc/multipath.conf");
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
index ddf022f..938262b 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch
@@ -1,7 +1,7 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From 0000000000000000000000000000000000000000 Mon Sep 17  00:00:00 2001 
 From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Fri, 17 Oct 2014 11:20:34 -0500
-Subject: [PATCH] RH: add wwids from kernel cmdline mpath.wwids with -A
+Date: Fri, 17  Oct 2014 11:20:34 -0500
+Subject: [PATCH] RH: add wwids from kernel cmdline  mpath.wwids with -A
 
 This patch adds another option to multipath, "-A", which reads
 /proc/cmdline for mpath.wwid=<WWID> options, and adds any wwids it finds
@@ -13,16 +13,22 @@
 multipathd.service
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upstream-Status: Pending
+
+Update this patch to new version 0.8.0
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  libmultipath/wwids.c          | 44 +++++++++++++++++++++++++++++++++++++++++++
  libmultipath/wwids.h          |  1 +
- multipath/main.c              | 10 ++++++++--
- multipath/multipath.8         |  5 ++++-
+ multipath/main.c              |  9 ++++++++-
+ multipath/multipath.8         |  3 +++
  multipathd/multipathd.service |  1 +
- 5 files changed, 58 insertions(+), 3 deletions(-)
+ 5 files changed, 57 insertions(+), 1 deletion(-)
 
 diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c
-index 53e7951..39e08cd 100644
+index 53e7951..9ba9b62 100644
 --- a/libmultipath/wwids.c
 +++ b/libmultipath/wwids.c
 @@ -443,3 +443,47 @@ int op ## _wwid(const char *wwid) \
@@ -32,46 +38,46 @@
 +
 +int remember_cmdline_wwid(void)
 +{
-+	FILE *f = NULL;
-+	char buf[LINE_MAX], *next, *ptr;
-+	int ret = 0;
++       FILE *f = NULL;
++       char buf[LINE_MAX], *next, *ptr;
++       int ret = 0;
 +
-+	f = fopen("/proc/cmdline", "re");
-+	if (!f) {
-+		condlog(0, "can't open /proc/cmdline : %s", strerror(errno));
-+		return -1;
-+	}
++       f = fopen("/proc/cmdline", "re");
++       if (!f) {
++               condlog(0, "can't open /proc/cmdline : %s", strerror(errno));
++               return -1;
++       }
 +
-+	if (!fgets(buf, sizeof(buf), f)) {
-+		if (ferror(f))
-+			condlog(0, "read of /proc/cmdline failed : %s",
-+				strerror(errno));
-+		else
-+			condlog(0, "couldn't read /proc/cmdline");
-+		fclose(f);
-+		return -1;
-+	}
-+	fclose(f);
-+	next = buf;
-+	while((ptr = strstr(next, "mpath.wwid="))) {
-+		ptr += 11;
-+		next = strpbrk(ptr, " \t\n");
-+		if (next) {
-+			*next = '\0';
-+			next++;
-+		}
-+		if (strlen(ptr)) {
-+			if (remember_wwid(ptr) != 0)
-+				ret = -1;
-+		}
-+		else {
-+			condlog(0, "empty mpath.wwid kernel command line option");
-+			ret = -1;
-+		}
-+		if (!next)
-+			break;
-+	}
-+	return ret;
++       if (!fgets(buf, sizeof(buf), f)) {
++               if (ferror(f))
++                       condlog(0, "read of /proc/cmdline failed : %s",
++                               strerror(errno));
++               else
++                       condlog(0, "couldn't read /proc/cmdline");
++               fclose(f);
++               return -1;
++       }
++       fclose(f);
++       next = buf;
++       while((ptr = strstr(next, "mpath.wwid="))) {
++               ptr += 11;
++               next = strpbrk(ptr, " \t\n");
++               if (next) {
++                       *next = '\0';
++                       next++;
++               }
++               if (strlen(ptr)) {
++                       if (remember_wwid(ptr) != 0)
++                               ret = -1;
++               }
++               else {
++                       condlog(0, "empty mpath.wwid kernel command line option");
++                       ret = -1;
++               }
++               if (!next)
++                       break;
++       }
++       return ret;
 +}
 diff --git a/libmultipath/wwids.h b/libmultipath/wwids.h
 index 0c6ee54..e32a0b0 100644
@@ -86,19 +92,18 @@
  enum {
  	WWID_IS_NOT_FAILED = 0,
 diff --git a/multipath/main.c b/multipath/main.c
-index 6fdde03..7bac232 100644
+index 5abb118..c751b31 100644
 --- a/multipath/main.c
 +++ b/multipath/main.c
-@@ -109,7 +109,7 @@ usage (char * progname)
- {
+@@ -134,6 +134,7 @@ usage (char * progname)
  	fprintf (stderr, VERSION_STRING);
  	fprintf (stderr, "Usage:\n");
--	fprintf (stderr, "  %s [-a|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
+ 	fprintf (stderr, "  %s [-a|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
 +	fprintf (stderr, "  %s [-a|-A|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname);
  	fprintf (stderr, "  %s -l|-ll|-f [-v lvl] [-b fil] [-R num] [dev]\n", progname);
  	fprintf (stderr, "  %s -F [-v lvl] [-R num]\n", progname);
- 	fprintf (stderr, "  %s -t\n", progname);
-@@ -123,6 +123,8 @@ usage (char * progname)
+ 	fprintf (stderr, "  %s [-t|-T]\n", progname);
+@@ -147,6 +148,8 @@ usage (char * progname)
  		"  -f      flush a multipath device map\n"
  		"  -F      flush all multipath device maps\n"
  		"  -a      add a device wwid to the wwids file\n"
@@ -107,40 +112,31 @@
  		"  -c      check if a device should be a path in a multipath device\n"
  		"  -C      check if a multipath device has usable paths\n"
  		"  -q      allow queue_if_no_path when multipathd is not running\n"
-@@ -907,7 +909,7 @@ main (int argc, char *argv[])
- 		exit(1);
+@@ -870,7 +873,7 @@ main (int argc, char *argv[])
+ 		exit(RTVL_FAIL);
  	multipath_conf = conf;
  	conf->retrigger_tries = 0;
--	while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) {
-+	while ((arg = getopt(argc, argv, ":aAdcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) {
+-	while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itTquUwW")) != EOF ) {
++	while ((arg = getopt(argc, argv, ":aAdcChl::FfM:v:p:b:BrR:itTquUwW")) != EOF ) {
  		switch(arg) {
  		case 1: printf("optarg : %s\n",optarg);
  			break;
-@@ -974,6 +976,10 @@ main (int argc, char *argv[])
+@@ -937,6 +940,10 @@ main (int argc, char *argv[])
  		case 't':
- 			r = dump_config(conf);
+ 			r = dump_config(conf, NULL, NULL) ? RTVL_FAIL : RTVL_OK;
  			goto out_free_config;
 +		case 'A':
 +			if (remember_cmdline_wwid() != 0)
 +				exit(1);
 +			exit(0);
- 		case 'h':
- 			usage(argv[0]);
- 			exit(0);
+ 		case 'T':
+ 			cmd = CMD_DUMP_CONFIG;
+ 			break;
 diff --git a/multipath/multipath.8 b/multipath/multipath.8
-index 914a8cb..8c6a4c1 100644
+index 9cdd05a..1e120f3 100644
 --- a/multipath/multipath.8
 +++ b/multipath/multipath.8
-@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig.
- .RB [\| \-b\ \c
- .IR bindings_file \|]
- .RB [\| \-d \|]
--.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-u | \-U | \-w | \-W \|]
-+.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-A | \-u | \-U | \-w | \-W \|]
- .RB [\| \-p\ \c
- .IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
- .RB [\| \-R\ \c
-@@ -135,6 +135,9 @@ Add the WWID for the specified device to the WWIDs file.
+@@ -167,6 +167,9 @@ itself doesn't attempt to do I/O on the device.
  Check if the device specified in the program environment should be
  a path in a multipath device.
  .
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch
index a23e167..57d04d0 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch
@@ -1,7 +1,10 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Mon, 6 Nov 2017 21:39:28 -0600
-Subject: [PATCH] RH: warn on invalid regex instead of failing
+From d16de70b76919269561b4e404825f78286ea9a40 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Mon, 26 Nov 2018 10:31:30 +0800
+Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
+ 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Mon, 6 Nov
+ 2017 21:39:28 -0600 Subject: [PATCH] RH: warn on invalid regex instead of
+ failing
 
 multipath.conf used to allow "*" as a match everything regular expression,
 instead of requiring ".*". Instead of erroring when the old style
@@ -9,39 +12,56 @@
 them.
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upstream-Status: Pending
+
+update this patch to new version
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- libmultipath/dict.c   | 27 +++++++++++++++++++++------
+ libmultipath/dict.c   | 29 ++++++++++++++++++++++-------
  libmultipath/parser.c | 13 +++++++++++++
- libmultipath/parser.h |  1 +
- 3 files changed, 35 insertions(+), 6 deletions(-)
+ libmultipath/parser.h |  2 +-
+ 3 files changed, 36 insertions(+), 8 deletions(-)
 
 diff --git a/libmultipath/dict.c b/libmultipath/dict.c
-index 7ad0f5a..ab808d6 100644
+index a81c051..0689763 100644
 --- a/libmultipath/dict.c
 +++ b/libmultipath/dict.c
-@@ -55,6 +55,21 @@ set_str(vector strvec, void *ptr)
+@@ -59,6 +59,21 @@ set_str(vector strvec, void *ptr)
  }
  
  static int
 +set_regex(vector strvec, void *ptr)
 +{
-+	char **str_ptr = (char **)ptr;
++       char **str_ptr = (char **)ptr;
 +
-+	if (*str_ptr)
-+		FREE(*str_ptr);
-+	*str_ptr = set_regex_value(strvec);
++       if (*str_ptr)
++               FREE(*str_ptr);
++       *str_ptr = set_regex_value(strvec);
 +
-+	if (!*str_ptr)
-+		return 1;
++       if (!*str_ptr)
++               return 1;
 +
-+	return 0;
++       return 0;
 +}
 +
 +static int
  set_yes_no(vector strvec, void *ptr)
  {
  	char * buff;
-@@ -1271,7 +1286,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec)		\
+@@ -1346,8 +1361,8 @@ ble_ ## option ## _handler (struct config *conf, vector strvec)		\
+ 									\
+ 	if (!conf->option)						\
+ 		return 1;						\
+-									\
+-	buff = set_value(strvec);					\
++									\	
++	buff = set_regex_value(strvec);					\
+ 	if (!buff)							\
+ 		return 1;						\
+ 									\
+@@ -1363,7 +1378,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
  	if (!conf->option)						\
  		return 1;						\
  									\
@@ -50,16 +70,7 @@
  	if (!buff)							\
  		return 1;						\
  									\
-@@ -1287,7 +1302,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \
- 	if (!conf->option)						\
- 		return 1;						\
- 									\
--	buff = set_value(strvec);					\
-+	buff = set_regex_value(strvec);					\
- 	if (!buff)							\
- 		return 1;						\
- 									\
-@@ -1388,16 +1403,16 @@ device_handler(struct config *conf, vector strvec)
+@@ -1466,16 +1481,16 @@ device_handler(struct config *conf, vector strvec)
  	return 0;
  }
  
@@ -81,37 +92,38 @@
  
  declare_hw_handler(hwhandler, set_str)
 diff --git a/libmultipath/parser.c b/libmultipath/parser.c
-index b8b7e0d..34b4ad2 100644
+index 92ef7cf..0e2cf49 100644
 --- a/libmultipath/parser.c
 +++ b/libmultipath/parser.c
-@@ -380,6 +380,19 @@ set_value(vector strvec)
+@@ -384,6 +384,19 @@ set_value(vector strvec)
  	return alloc;
  }
  
 +void *
 +set_regex_value(vector strvec)
 +{
-+	char *buff = set_value(strvec);
++       char *buff = set_value(strvec);
 +
-+	if (buff && strcmp("*", buff) == 0) {
-+		condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\"");
-+		FREE(buff);
-+		return strdup(".*");
-+	}
-+	return buff;
++       if (buff && strcmp("*", buff) == 0) {
++               condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\"");
++               FREE(buff);
++               return strdup(".*");
++       }
++       return buff;
 +}
 +
  /* non-recursive configuration stream handler */
  static int kw_level = 0;
  
 diff --git a/libmultipath/parser.h b/libmultipath/parser.h
-index 62906e9..b791705 100644
+index 62906e9..b6899fc 100644
 --- a/libmultipath/parser.h
 +++ b/libmultipath/parser.h
-@@ -77,6 +77,7 @@ extern void dump_keywords(vector keydump, int level);
+@@ -76,7 +76,7 @@ extern int _install_keyword(vector keywords, char *string,
+ extern void dump_keywords(vector keydump, int level);
  extern void free_keywords(vector keywords);
  extern vector alloc_strvec(char *string);
- extern void *set_value(vector strvec);
+-extern void *set_value(vector strvec);
 +extern void *set_regex_value(vector strvec);
  extern int process_file(struct config *conf, char *conf_file);
  extern struct keyword * find_keyword(vector keywords, vector v, char * name);
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch
index 05e6864..ad03b8a 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch
@@ -1,18 +1,27 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Marzinski <bmarzins@redhat.com>
-Date: Thu, 7 Jun 2018 17:43:52 -0500
-Subject: [PATCH] RH: reset default find_mutipaths value to off
+From 16900150e02e5b367a8b33621b393975ad011130 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Mon, 26 Nov 2018 11:12:01 +0800
+Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17
+ 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Thu, 7 Jun
+ 2018 17:43:52 -0500 Subject: [PATCH] RH: reset default find_mutipaths value
+ to off
 
 Upstream has changed to default find_multipaths to "strict". For now
 Redhat will retain the previous default of "off".
 
 Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
+
+Upstream-Status: Pending
+
+Update this patch to new version
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  libmultipath/defaults.h | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h
-index f076b4b..70ba98a 100644
+index 6576939..a2404b2 100644
 --- a/libmultipath/defaults.h
 +++ b/libmultipath/defaults.h
 @@ -17,7 +17,7 @@
@@ -20,7 +29,7 @@
  #define DEFAULT_VERBOSITY	2
  #define DEFAULT_REASSIGN_MAPS	0
 -#define DEFAULT_FIND_MULTIPATHS	FIND_MULTIPATHS_STRICT
-+#define DEFAULT_FIND_MULTIPATHS	FIND_MULTIPATHS_OFF
++#define DEFAULT_FIND_MULTIPATHS        FIND_MULTIPATHS_OFF
  #define DEFAULT_FAST_IO_FAIL	5
  #define DEFAULT_DEV_LOSS_TMO	600
  #define DEFAULT_RETAIN_HWHANDLER RETAIN_HWHANDLER_ON
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch
index 45cd32a..4fa7960 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch
@@ -1,7 +1,10 @@
-From 8bdd4481d822b6625d8bf719431ca74ed1b5e021 Mon Sep 17 00:00:00 2001
+From a805b601fcf4bb9e269566a8d25e48d9e60915c0 Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 16 Jul 2018 15:56:37 +0800
-Subject: [PATCH] multipath-tools: modify Makefile.inc for cross-compilation
+Date: Mon, 26 Nov 2018 11:14:24 +0800
+Subject: [PATCH] From 8bdd4481d822b6625d8bf719431ca74ed1b5e021 Mon Sep 17
+ 00:00:00 2001 From: Changqing Li <changqing.li@windriver.com> Date: Mon, 16
+ Jul 2018 15:56:37 +0800 Subject: [PATCH] multipath-tools: modify Makefile.inc
+ for cross-compilation
 
 Do not look for systemd info on the host, and allow us to pass in CFLAGS
 using the OPTFLAGS variable.
@@ -23,12 +26,15 @@
 remove change about CFLAGS part, since patch 0024 already have similar function.
 
 Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+update for version 0.7.9
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
- Makefile.inc | 8 ++------
- 1 file changed, 2 insertions(+), 6 deletions(-)
+ Makefile.inc | 6 ------
+ 1 file changed, 6 deletions(-)
 
 diff --git a/Makefile.inc b/Makefile.inc
-index 57a1835..0c403c7 100644
+index 295afb9..7136db3 100644
 --- a/Makefile.inc
 +++ b/Makefile.inc
 @@ -38,12 +38,6 @@ ifndef RUN
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch
index 1281180..3e88b41 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch
@@ -1,7 +1,7 @@
-From d929a1ea5e42ecbe30c990644ed4ada2817c6439 Mon Sep 17 00:00:00 2001
+From e4acb46b10484d1da6f093257e34f269832e6a37 Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 16 Jul 2018 16:00:14 +0800
-Subject: [PATCH]  Always use devmapper
+Date: Mon, 26 Nov 2018 11:17:41 +0800
+Subject: [PATCH] Subject: [PATCH]  Always use devmapper
 
 Do not try to compute several _API_ make variables
 from host information when cross-compiling.
@@ -18,12 +18,15 @@
 Rebase to 0.7.7
 
 Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+Rebase to 0.7.9
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  libmultipath/Makefile | 19 ++++---------------
  1 file changed, 4 insertions(+), 15 deletions(-)
 
 diff --git a/libmultipath/Makefile b/libmultipath/Makefile
-index f51786d..3ad9c48 100644
+index 33f5269..adf6f4a 100644
 --- a/libmultipath/Makefile
 +++ b/libmultipath/Makefile
 @@ -20,21 +20,10 @@ ifdef SYSTEMD
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch
index 88a758d..418c020 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch
@@ -1,7 +1,7 @@
-From 145f2b829e5362cda975bebafd7fe4d00ff56d1c Mon Sep 17 00:00:00 2001
+From 1fe937835311a2d0afbc85ce4a4dbd3c9e0c912f Mon Sep 17 00:00:00 2001
 From: Changqing Li <changqing.li@windriver.com>
-Date: Mon, 16 Jul 2018 16:02:07 +0800
-Subject: [PATCH] Always use devmapper for kpartx
+Date: Mon, 26 Nov 2018 11:19:45 +0800
+Subject: [PATCH] Subject: [PATCH] Always use devmapper for kpartx
 
 Do not try to compute the LIBDM_API_COOKIE make variable
 from host information when cross-compiling.
@@ -16,6 +16,9 @@
 
 Rebase to 0.7.7
 Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+Rebase to 0.7.9
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
 ---
  kpartx/Makefile | 4 +---
  1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.7.bb b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.8.0.bb
similarity index 72%
rename from meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.7.bb
rename to meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.8.0.bb
index 5cc1546..0cff48d 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.7.bb
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.8.0.bb
@@ -31,26 +31,6 @@
 SRC_URI = "git://git.opensvc.com/multipath-tools/.git;protocol=http \
            file://multipathd.oe \
            file://multipath.conf.example \
-           file://0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch \
-           file://0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch \
-           file://0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch \
-           file://0004-multipath-tools-replace-FSF-address-with-a-www-point.patch \
-           file://0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch \
-           file://0006-multipath-tools-fix-compilation-with-musl-libc.patch \
-           file://0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch \
-           file://0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch \
-           file://0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch \
-           file://0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch \
-           file://0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch \
-           file://0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch \
-           file://0013-libmultipath-print-correct-default-for-delay_-_check.patch \
-           file://0014-multipath.conf.5-clarify-property-whitelist-handling.patch \
-           file://0015-mpathpersist-add-all_tg_pt-option.patch \
-           file://0016-libmultipath-remove-rbd-code.patch \
-           file://0017-mpathpersist-fix-aptpl-support.patch \
-           file://0018-multipath-don-t-check-timestamps-without-a-path.patch \
-           file://0019-libmultipath-fix-detect-alua-corner-case.patch \
-           file://0020-multipath-fix-setting-conf-version.patch \
            file://0021-RH-fixup-udev-rules-for-redhat.patch \
            file://0022-RH-Remove-the-property-blacklist-exception-builtin.patch \
            file://0023-RH-don-t-start-without-a-config-file.patch \
@@ -66,7 +46,7 @@
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
 
-SRCREV = "386d288b5595fc2c01dffe698b6eb306c6674908"
+SRCREV = "eb688e1833e9533bfd9496ddc37eecc93590defa"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/nano/nano_3.0.bb b/meta-openembedded/meta-oe/recipes-support/nano/nano_4.0.bb
similarity index 79%
rename from meta-openembedded/meta-oe/recipes-support/nano/nano_3.0.bb
rename to meta-openembedded/meta-oe/recipes-support/nano/nano_4.0.bb
index 2c7fbd5..3d7921a 100644
--- a/meta-openembedded/meta-oe/recipes-support/nano/nano_3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/nano/nano_4.0.bb
@@ -2,18 +2,18 @@
 Not ANOther editor) is an enhanced clone of the \
 Pico text editor."
 HOMEPAGE = "http://www.nano-editor.org/"
+SECTION = "console/utils"
 LICENSE = "GPLv3"
 LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
-SECTION = "console/utils"
+
 DEPENDS = "ncurses file"
 RDEPENDS_${PN} = "ncurses-terminfo-base"
 
 PV_MAJOR = "${@d.getVar('PV').split('.')[0]}"
 
 SRC_URI = "https://nano-editor.org/dist/v${PV_MAJOR}/nano-${PV}.tar.xz"
-
-SRC_URI[md5sum] = "74196427a09ec2f82a88facd220d2787"
-SRC_URI[sha256sum] = "e0a5bca354514e64762c987c200a8758b05e7bcced3b00b3e48ea0a2d383c8a0"
+SRC_URI[md5sum] = "2de3e8a60ecf09649e316e89be2aac65"
+SRC_URI[sha256sum] = "1e2fcfea35784624a7d86785768b772d58bb3995d1aec9176a27a113b1e9bac3"
 
 inherit autotools gettext pkgconfig
 
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-misc-Do-not-print-NULL-string-into-logs.patch b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-misc-Do-not-print-NULL-string-into-logs.patch
new file mode 100644
index 0000000..7af265a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools/0001-misc-Do-not-print-NULL-string-into-logs.patch
@@ -0,0 +1,31 @@
+From e25d00d8297cba044c3a4d2e38749e54adac66c1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 22 Dec 2018 19:59:02 -0800
+Subject: [PATCH] misc: Do not print NULL string into logs
+
+string format %s is getting a NULL pointer for 'expand'
+parameter always since the check for chunks[i] == NULL will ensure that
+its always null when the Log() API is called
+
+Upstream-Status: Submitted [https://github.com/vmware/open-vm-tools/pull/312]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ open-vm-tools/lib/misc/util_misc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git open-vm-tools/lib/misc/util_misc.c b/open-vm-tools/lib/misc/util_misc.c
+index 198c23d2..0ac0a335 100644
+--- open-vm-tools/lib/misc/util_misc.c
++++ open-vm-tools/lib/misc/util_misc.c
+@@ -719,8 +719,8 @@ Util_ExpandString(const char *fileName) // IN  file path to expand
+       ASSERT(!freeChunk[i]);
+       chunks[i] = expand;
+       if (chunks[i] == NULL) {
+-	 Log("%s: Cannot allocate memory to expand \"%s\" in \"%s\".\n",
+-             __FUNCTION__, expand, fileName);
++	 Log("%s: Cannot allocate memory to expand in \"%s\".\n",
++             __FUNCTION__, fileName);
+ 	 goto out;
+       }
+       chunkSize[i] = strlen(expand);
diff --git a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.0.bb b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.5.bb
similarity index 75%
rename from meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.0.bb
rename to meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.5.bb
index 2d7486d..7ed6593 100644
--- a/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/open-vm-tools/open-vm-tools_10.3.5.bb
@@ -22,23 +22,25 @@
 LICENSE_modules/solaris = "CDDL-1.0"
 
 SRC_URI = "git://github.com/vmware/open-vm-tools.git;protocol=https \
-    file://tools.conf \
-    file://vmtoolsd.service \
-    file://vmtoolsd.init \
-    file://0001-configure.ac-don-t-use-dnet-config.patch \
-    file://0002-add-include-sys-sysmacros.h.patch \
-    file://0005-Use-configure-test-for-struct-timespec.patch \
-    file://0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch \
-    file://0007-Use-configure-to-test-for-feature-instead-of-platfor.patch \
-    file://0011-Use-configure-test-for-sys-stat.h-include.patch \
-    file://fix-subdir-objects-configure-error.patch \
-    file://0001-include-poll.h-instead-of-sys-poll.h.patch \
-    file://0002-Rename-poll.h-to-vm_poll.h.patch \
-    file://0003-use-posix-strerror_r-unless-on-gnu-libc-system.patch \
-    file://0004-Use-uintmax_t-for-handling-rlim_t.patch \
-    file://0001-Use-off64_t-instead-of-__off64_t.patch \
-"
-SRCREV = "2147df6aabe639fc5ff423ed791a8e7f02bf8d0a"
+           file://tools.conf \
+           file://vmtoolsd.service \
+           file://vmtoolsd.init \
+           file://0001-configure.ac-don-t-use-dnet-config.patch \
+           file://0002-add-include-sys-sysmacros.h.patch \
+           file://0005-Use-configure-test-for-struct-timespec.patch \
+           file://0006-Fix-definition-of-ALLPERMS-and-ACCESSPERMS.patch \
+           file://0007-Use-configure-to-test-for-feature-instead-of-platfor.patch \
+           file://0011-Use-configure-test-for-sys-stat.h-include.patch \
+           file://fix-subdir-objects-configure-error.patch \
+           file://0001-include-poll.h-instead-of-sys-poll.h.patch \
+           file://0002-Rename-poll.h-to-vm_poll.h.patch \
+           file://0003-use-posix-strerror_r-unless-on-gnu-libc-system.patch \
+           file://0004-Use-uintmax_t-for-handling-rlim_t.patch \
+           file://0001-Use-off64_t-instead-of-__off64_t.patch \
+           file://0001-misc-Do-not-print-NULL-string-into-logs.patch \
+           "
+# stable-10.3.5
+SRCREV = "f2ff192717375b95a6b7e278fb47dbb3d3bc56d1"
 
 S = "${WORKDIR}/git/open-vm-tools"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Add-missing-multi-line-separator.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Add-missing-multi-line-separator.patch
deleted file mode 100644
index 513597b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Add-missing-multi-line-separator.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 60857229aab13ccc426572a43ab891409bb76ea4 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 9 Sep 2018 22:52:55 -0700
-Subject: [PATCH] Add missing multi-line separator
-
-Otherwise this fails to build ( found on mips )
-
-Fixes
-contrib/modules/surface_matching/src/hash_murmur86.hpp:97:15: error:
-expected constructor, destructor, or type conversion before '(' token
-     && defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 &&
-__GNUC_MINOR__>=3))
-               ^
-
-Upstream-Status: Submitted [https://github.com/opencv/opencv_contrib/pull/1764]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- modules/surface_matching/src/hash_murmur86.hpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/modules/surface_matching/src/hash_murmur86.hpp b/modules/surface_matching/src/hash_murmur86.hpp
-index 1edf6bf4..0477d37e 100644
---- a/modules/surface_matching/src/hash_murmur86.hpp
-+++ b/modules/surface_matching/src/hash_murmur86.hpp
-@@ -93,7 +93,7 @@ void hashMurmurx86 ( const void * key, const int len, const uint seed, void * ou
- /* Now find best way we can to READ_UINT32 */
- #ifndef WORDS_BIGENDIAN
- # define READ_UINT32(ptr)   (*((uint32_t*)(ptr)))
--#elif defined(WORDS_BIGENDIAN)
-+#elif defined(WORDS_BIGENDIAN) \
-     && defined(__GNUC__) && (__GNUC__>4 || (__GNUC__==4 && __GNUC_MINOR__>=3))
- # define READ_UINT32(ptr)   (__builtin_bswap32(*((uint32_t*)(ptr))))
- #endif
--- 
-2.18.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Check-for-clang-before-using-isystem.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Check-for-clang-before-using-isystem.patch
deleted file mode 100644
index 319071a..0000000
--- a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/0001-Check-for-clang-before-using-isystem.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From fa76d8646bb2b9b514728eeef41afed7c43a36f2 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 11 Sep 2018 18:18:33 -0700
-Subject: [PATCH] Check for clang before using -isystem
-
-When cross compiling with clang, the internal C++ headers are not found
-when adding sysroot to -isystem, that is redundant anyway because it
-will look for headers insider --sysroot path with same quality as it
-would do with -isystem otherwise
-
-Upstream-Status: Submitted [https://github.com/opencv/opencv/pull/12504]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- cmake/OpenCVUtils.cmake | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake
-index fae91c165f..60c20192dc 100644
---- a/cmake/OpenCVUtils.cmake
-+++ b/cmake/OpenCVUtils.cmake
-@@ -259,7 +259,7 @@ function(ocv_include_directories)
-     ocv_is_opencv_directory(__is_opencv_dir "${dir}")
-     if(__is_opencv_dir)
-       list(APPEND __add_before "${dir}")
--    elseif(CV_GCC AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0" AND
-+    elseif(((CV_GCC AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6.0") OR CV_CLANG) AND
-            dir MATCHES "/usr/include$")
-       # workaround for GCC 6.x bug
-     else()
--- 
-2.18.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.3.bb b/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.5.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.3.bb
rename to meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.5.bb
index 0a99700..fa6e06a 100644
--- a/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.5.bb
@@ -10,9 +10,9 @@
 
 DEPENDS = "libtool swig-native bzip2 zlib glib-2.0 libwebp"
 
-SRCREV_opencv = "b38c50b3d0c31e82294315ec44b54b7ef559ef12"
-SRCREV_contrib = "1f6d6f06266e1ef336437ae5404bee1c65d42cda"
-SRCREV_ipp = "bdb7bb85f34a8cb0d35e40a81f58da431aa1557a"
+SRCREV_opencv = "8f1356c3c5b16721349582db461a2051653059e8"
+SRCREV_contrib = "7292df62624ded8af8035231435dfd17c93e1a80"
+SRCREV_ipp = "32e315a5b106a7b89dbed51c28f8120a48b368b4"
 SRCREV_boostdesc = "34e4206aef44d50e6bbcd0ab06354b52e7466d26"
 SRCREV_vgg = "fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d"
 SRC_URI[tinydnn.md5sum] = "adb1c512e09ca2c7a6faef36f9c53e59"
@@ -20,19 +20,19 @@
 
 def ipp_filename(d):
     import re
-    arch = d.getVar('TARGET_ARCH', True)
+    arch = d.getVar('TARGET_ARCH')
     if re.match("i.86$", arch):
-        return "ippicv_2017u3_lnx_ia32_general_20180518.tgz"
+        return "ippicv_2019_lnx_ia32_general_20180723.tgz"
     else:
-        return "ippicv_2017u3_lnx_intel64_general_20180518.tgz"
+        return "ippicv_2019_lnx_intel64_general_20180723.tgz"
 
 def ipp_md5sum(d):
     import re
-    arch = d.getVar('TARGET_ARCH', True)
+    arch = d.getVar('TARGET_ARCH')
     if re.match("i.86$", arch):
-        return "ea72de74dae3c604eb6348395366e78e"
+        return "4f38432c30bfd6423164b7a24bbc98a0"
     else:
-        return "b7cc351267db2d34b9efa1cd22ff0572"
+        return "c0bd78adb4156bbf552c1dfe90599607"
 
 IPP_FILENAME = "${@ipp_filename(d)}"
 IPP_MD5 = "${@ipp_md5sum(d)}"
@@ -40,21 +40,19 @@
 SRCREV_FORMAT = "opencv_contrib_ipp_boostdesc_vgg"
 SRC_URI = "git://github.com/opencv/opencv.git;name=opencv \
     git://github.com/opencv/opencv_contrib.git;destsuffix=contrib;name=contrib \
-    git://github.com/opencv/opencv_3rdparty.git;branch=ippicv/master_20180518;destsuffix=ipp;name=ipp \
+    git://github.com/opencv/opencv_3rdparty.git;branch=ippicv/master_20180723;destsuffix=ipp;name=ipp \
     git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_boostdesc_20161012;destsuffix=boostdesc;name=boostdesc \
     git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_vgg_20160317;destsuffix=vgg;name=vgg \
     https://github.com/tiny-dnn/tiny-dnn/archive/v1.0.0a3.tar.gz;destsuffix=git/3rdparty/tinydnn/tiny-dnn-1.0.0a3;name=tinydnn;unpack=false \
     file://0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch \
     file://uselocalxfeatures.patch;patchdir=../contrib/ \
-    file://0001-Add-missing-multi-line-separator.patch;patchdir=../contrib/ \
     file://0002-Make-opencv-ts-create-share-library-intead-of-static.patch \
     file://0003-To-fix-errors-as-following.patch \
     file://fixpkgconfig.patch \
     file://0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch \
     file://0001-Dont-use-isystem.patch \
-    file://0001-Check-for-clang-before-using-isystem.patch \
 "
-PV = "3.4.3+git${SRCPV}"
+PV = "3.4.5"
 
 S = "${WORKDIR}/git"
 
@@ -76,8 +74,6 @@
     ${@bb.utils.contains("TARGET_CC_ARCH", "-msse3", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1", "", d)} \
     ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.1", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1", "", d)} \
     ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.2", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1 -DENABLE_SSE42=1", "", d)} \
-    ${@oe.utils.conditional("libdir", "/usr/lib64", "-DLIB_SUFFIX=64", "", d)} \
-    ${@oe.utils.conditional("libdir", "/usr/lib32", "-DLIB_SUFFIX=32", "", d)} \
 "
 EXTRA_OECMAKE_append_x86 = " -DX86=ON"
 
@@ -180,6 +176,8 @@
 FILES_python3-opencv = "${PYTHON_SITEPACKAGES_DIR}/*"
 RDEPENDS_python3-opencv = "python3-core python3-numpy"
 
+RDEPENDS_opencv-apps  = "bash"
+
 do_install_append() {
     cp ${S}/include/opencv/*.h ${D}${includedir}/opencv/
     sed -i '/blobtrack/d' ${D}${includedir}/opencv/cvaux.h
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/remove-user-host-pwd-from-version.patch b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/remove-user-host-pwd-from-version.patch
index 4eb3897..870fc98 100644
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap/remove-user-host-pwd-from-version.patch
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap/remove-user-host-pwd-from-version.patch
@@ -1,24 +1,36 @@
-diff -ru openldap-2.4.46.orig/build/mkversion openldap-2.4.46/build/mkversion
---- openldap-2.4.46.orig/build/mkversion	2018-10-25 18:46:10.383750480 +1300
-+++ openldap-2.4.46/build/mkversion	2018-10-25 18:46:33.156232586 +1300
-@@ -50,7 +50,15 @@
- fi
- 
- APPLICATION=$1
--WHOWHERE="$USER@`uname -n`:`pwd`"
-+if [ -n "${SOURCE_DATE_EPOCH}" ]; then
-+   WHOWHERE="openldap"
+From 868a04b0596e2df708ba14ed70815b1411db3db1 Mon Sep 17 00:00:00 2001
+From: Changqing Li <changqing.li@windriver.com>
+Date: Thu, 21 Feb 2019 11:33:24 +0800
+Subject: [PATCH] mkversion: remove user host pwd from version
+
+Upstream-Status: Pending
+
+Update this patch to version 2.4.47
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ build/mkversion | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/build/mkversion b/build/mkversion
+index 4e35723..9fa3bee 100755
+--- a/build/mkversion
++++ b/build/mkversion
+@@ -53,8 +53,12 @@ APPLICATION=$1
+ # Reproducible builds set SOURCE_DATE_EPOCH, want constant strings
+ if [ -n "${SOURCE_DATE_EPOCH}" ]; then
+    WHOWHERE="openldap"
 +   DATE=$(date -d@$SOURCE_DATE_EPOCH +' %b %d %Y ')
 +   TIME=$(date -d@$SOURCE_DATE_EPOCH +' %H:%M:%S ')
-+else
-+   WHOWHERE="$USER@$(uname -n):$(pwd)"
+ else
+-   WHOWHERE="$USER@$(uname -n):$(pwd)"
++   WHOWHERE="openldap"
 +   DATE='" __DATE__ "'
 +   TIME='" __TIME__ "'
-+fi
+ fi
  
  cat << __EOF__
- /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
-@@ -72,7 +80,7 @@
+@@ -77,7 +81,7 @@ static const char copyright[] =
  "COPYING RESTRICTIONS APPLY\n";
  
  $static $const char $SYMBOL[] =
@@ -27,3 +39,6 @@
  "\t$WHOWHERE\n";
  
  __EOF__
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.46.bb b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.47.bb
similarity index 97%
rename from meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.46.bb
rename to meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.47.bb
index 7fe9fb0..4345d7d 100644
--- a/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.46.bb
+++ b/meta-openembedded/meta-oe/recipes-support/openldap/openldap_2.4.47.bb
@@ -14,7 +14,7 @@
 
 LDAP_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}"
 
-SRC_URI = "ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/${BP}.tgz \
+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 \
@@ -26,8 +26,8 @@
     file://remove-user-host-pwd-from-version.patch \
 "
 
-SRC_URI[md5sum] = "829016c5a9f45c51adc50073ac6f9fd7"
-SRC_URI[sha256sum] = "9a90dcb86b99ae790ccab93b7585a31fbcbeec8c94bf0f7ab0ca0a87ea0c4b2d"
+SRC_URI[md5sum] = "e508f97bfd778fec7799f286e5c07176"
+SRC_URI[sha256sum] = "f54c5877865233d9ada77c60c0f69b3e0bfd8b1b55889504c650047cc305520b"
 
 DEPENDS = "util-linux groff-native"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/opensc/opensc/0001-Fixed-gcc-8-compilation-errors-1353.patch b/meta-openembedded/meta-oe/recipes-support/opensc/opensc/0001-Fixed-gcc-8-compilation-errors-1353.patch
deleted file mode 100644
index 48d8327..0000000
--- a/meta-openembedded/meta-oe/recipes-support/opensc/opensc/0001-Fixed-gcc-8-compilation-errors-1353.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From 87857d5cae7db94fdd776904886392b1e86053bd Mon Sep 17 00:00:00 2001
-From: Florian Bezdeka <1119693+fbezdeka@users.noreply.github.com>
-Date: Fri, 18 May 2018 18:54:56 +0200
-Subject: [PATCH] Fixed gcc 8 compilation errors (#1353)
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The following errors occured during a compilation using gcc 8:
-
-In function »gids_create_file.constprop«,
-    inserted by »gids_save_certificate.isra.8« beicard-gids.c:1548:7:
-card-gids.c:465:2: Error: »strncpy« output may be truncated copying 8 bytes from a string of length 8 [-Werror=stringop-truncation]
-  strncpy(record->filename, filename, 8);
-  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-pkcs15-oberthur.c: In function »sc_pkcs15emu_oberthur_add_prvkey«:
-pkcs15-oberthur.c:741:5: Error: »strncpy« output may be truncated copying 254 bytes from a string of length 254 [-Werror=stringop-truncation]
-     strncpy(kobj.label, objs[ii]->label, sizeof(kobj.label) - 1);
-     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Upstream-Status: Backport [https://github.com/OpenSC/OpenSC/pull/1353]
-Signed-off-by Khem Raj <raj.khem@gmail.com>
----
- src/libopensc/card-gids.c       | 3 ++-
- src/libopensc/pkcs15-oberthur.c | 3 ++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/libopensc/card-gids.c b/src/libopensc/card-gids.c
-index fc5d2a7..ac3e579 100644
---- a/src/libopensc/card-gids.c
-+++ b/src/libopensc/card-gids.c
-@@ -33,6 +33,7 @@ Some features are undocumented like the format used to store certificates. They
- 
- #include <stdlib.h>
- #include <string.h>
-+#include "../common/compat_strlcpy.h"
- 
- #ifdef ENABLE_OPENSSL
- /* openssl only needed for card administration */
-@@ -462,7 +463,7 @@ static int gids_create_file(sc_card_t *card, char* directory, char* filename) {
- 	memset(masterfilebuffer + offset, 0, sizeof(gids_mf_record_t));
- 	record = (gids_mf_record_t*) (masterfilebuffer + offset);
- 	strncpy(record->directory, directory, 8);
--	strncpy(record->filename, filename, 8);
-+	strlcpy(record->filename, filename, sizeof(record->filename));
- 	record->fileIdentifier = fileIdentifier;
- 	record->dataObjectIdentifier = dataObjectIdentifier;
- 
-diff --git a/src/libopensc/pkcs15-oberthur.c b/src/libopensc/pkcs15-oberthur.c
-index 4f841ed..3415be7 100644
---- a/src/libopensc/pkcs15-oberthur.c
-+++ b/src/libopensc/pkcs15-oberthur.c
-@@ -29,6 +29,7 @@
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
-+#include "../common/compat_strlcpy.h"
- 
- #include "pkcs15.h"
- #include "log.h"
-@@ -738,7 +739,7 @@ sc_pkcs15emu_oberthur_add_prvkey(struct sc_pkcs15_card *p15card,
- 			unsigned int id = path.value[path.len - 2] * 0x100 + path.value[path.len - 1];
- 
- 			if (id == ccont.id_cert)   {
--				strncpy(kobj.label, objs[ii]->label, sizeof(kobj.label) - 1);
-+				strlcpy(kobj.label, objs[ii]->label, sizeof(kobj.label));
- 				break;
- 			}
- 		}
--- 
-2.18.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/opensc/opensc/0001-Remove-redundant-logging.patch b/meta-openembedded/meta-oe/recipes-support/opensc/opensc/0001-Remove-redundant-logging.patch
new file mode 100644
index 0000000..291f1a2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/opensc/opensc/0001-Remove-redundant-logging.patch
@@ -0,0 +1,34 @@
+From c012f46965b3fe24e31367796e52c2d0b14ca5d9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 17 Dec 2018 18:44:23 -0800
+Subject: [PATCH] Remove redundant logging
+
+Same information is printed a few line below in same function, the only
+difference is that there it takes care of case when label is NULL pointer
+unlike this line
+
+secondly, every function call to cosm_write_tokeninfo() in this file
+passes label=NULL, and then it tries to print a null pointer
+
+Fixes errors like
+src/libopensc/log.h:48:47: error: '%s' directive argument is null
+[-Werror=format-overflow=]
+
+Upstream-Status: Submitted [https://github.com/OpenSC/OpenSC/pull/1557]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/pkcs15init/pkcs15-oberthur.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+Index: git/src/pkcs15init/pkcs15-oberthur.c
+===================================================================
+--- git.orig/src/pkcs15init/pkcs15-oberthur.c
++++ git/src/pkcs15init/pkcs15-oberthur.c
+@@ -70,7 +70,6 @@ cosm_write_tokeninfo (struct sc_pkcs15_c
+ 	ctx = p15card->card->ctx;
+ 
+ 	SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_VERBOSE);
+-	sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "cosm_write_tokeninfo() label '%s'; flags 0x%X", label, flags);
+ 	if (sc_profile_get_file(profile, COSM_TITLE"-token-info", &file)) {
+ 		rv = SC_ERROR_INCONSISTENT_PROFILE;
+ 		SC_TEST_GOTO_ERR(ctx, SC_LOG_DEBUG_NORMAL, rv, "Cannot find "COSM_TITLE"-token-info");
diff --git a/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.18.0.bb b/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.19.0.bb
similarity index 74%
rename from meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.18.0.bb
rename to meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.19.0.bb
index 45c931e..bc1722e 100644
--- a/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.18.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/opensc/opensc_0.19.0.bb
@@ -8,22 +8,19 @@
 
 HOMEPAGE = "http://www.opensc-project.org/opensc/"
 SECTION = "System Environment/Libraries"
-
-SRC_URI = "https://snapshot.debian.org/archive/debian/20180521T101428Z/pool/main/o/opensc/opensc_0.18.0.orig.tar.gz \
-           file://0001-Fixed-gcc-8-compilation-errors-1353.patch \
-          "
-
-SRC_URI[md5sum] = "bce516f752e0db5327aa06cc0136fe27"
-SRC_URI[sha256sum] = "6ef62b00e8fdbe3e386c3ee25c2cadb56c1931ea42f1a11dce8c947f51b45033"
-
-DEPENDS = "openct pcsc-lite virtual/libiconv openssl"
-
 LICENSE = "LGPLv2+"
 LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
 
-inherit autotools pkgconfig
+#v0.19.0
+SRCREV = "f1691fc91fc113191c3a8aaf5facd6983334ec47"
+SRC_URI = "git://github.com/OpenSC/OpenSC \
+           file://0001-Remove-redundant-logging.patch \
+          "
+DEPENDS = "openct pcsc-lite virtual/libiconv openssl"
 
-S = "${WORKDIR}/OpenSC-${PV}"
+S = "${WORKDIR}/git"
+inherit autotools pkgconfig bash-completion
+
 EXTRA_OECONF = " \
     --disable-static \
     --enable-openct \
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Support-of-arch-riscv64-by-Manuel-A.-Fernandez-Monte.patch b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Support-of-arch-riscv64-by-Manuel-A.-Fernandez-Monte.patch
new file mode 100644
index 0000000..72d89d0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Support-of-arch-riscv64-by-Manuel-A.-Fernandez-Monte.patch
@@ -0,0 +1,41 @@
+From ed04c97abe015a226269de391e36c4d251292725 Mon Sep 17 00:00:00 2001
+From: Francis ANDRE <francis.andre.kampbell@orange.fr>
+Date: Sun, 6 May 2018 12:28:25 +0200
+Subject: [PATCH] Support of arch riscv64 by Manuel A. Fernandez Montecelo
+ <mafm@debian.org>
+
+---
+ Foundation/include/Poco/Platform.h | 6 +++++-
+ Foundation/src/utils.h             | 1 +
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+--- a/Foundation/include/Poco/Platform.h
++++ b/Foundation/include/Poco/Platform.h
+@@ -134,6 +134,7 @@
+ #define POCO_ARCH_NIOS2   0x0e
+ #define POCO_ARCH_AARCH64 0x0f
+ #define POCO_ARCH_ARM64   0x0f // same as POCO_ARCH_AARCH64
++#define POCO_ARCH_RISCV64 0x10
+ 
+ 
+ #if defined(__ALPHA) || defined(__alpha) || defined(__alpha__) || defined(_M_ALPHA)
+@@ -224,6 +225,9 @@
+ #elif defined(__AARCH64EB__)
+ 	#define POCO_ARCH POCO_ARCH_AARCH64
+ 	#define POCO_ARCH_BIG_ENDIAN 1
++#elif defined(__riscv) && (__riscv_xlen == 64)
++	#define POCO_ARCH POCO_ARCH_RISCV64
++	#define POCO_ARCH_LITTLE_ENDIAN 1
+ #endif
+ 
+ 
+--- a/Foundation/src/utils.h
++++ b/Foundation/src/utils.h
+@@ -63,6 +63,7 @@
+     defined(__SH4__) || defined(__alpha__) || \
+     defined(_MIPS_ARCH_MIPS32R2) || \
+     defined(__AARCH64EL__) || \
++    defined(__riscv) || \
+     defined(nios2) || defined(__nios2) || defined(__nios2__)
+ #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1
+ #elif defined(_M_IX86) || defined(__i386__) || defined(__i386)
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.0.bb b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.0.bb
index 258cc49..70b2510 100644
--- a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.9.0.bb
@@ -11,6 +11,7 @@
 SRC_URI = " \
     git://github.com/pocoproject/poco.git;branch=poco-${PV} \
     file://0001-Don-t-try-to-install-non-existing-Encodings-testsuit.patch \
+    file://0001-Support-of-arch-riscv64-by-Manuel-A.-Fernandez-Monte.patch \
     file://run-ptest \
    "
 SRCREV = "daf00da73ab917e4d4581e3aa00c0ee61e0cc58b"
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-glib-CMakeLists.txt-Add-libpoppler-to-link-along-wit.patch b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-glib-CMakeLists.txt-Add-libpoppler-to-link-along-wit.patch
index 7ed795e..c364d73 100644
--- a/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-glib-CMakeLists.txt-Add-libpoppler-to-link-along-wit.patch
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/0001-glib-CMakeLists.txt-Add-libpoppler-to-link-along-wit.patch
@@ -15,15 +15,18 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/glib/CMakeLists.txt b/glib/CMakeLists.txt
-index 33c6608..87e1b44 100644
+index 6f91669..ca5021f 100644
 --- a/glib/CMakeLists.txt
 +++ b/glib/CMakeLists.txt
-@@ -127,7 +127,7 @@ if (HAVE_INTROSPECTION AND BUILD_SHARED_LIBS)
+@@ -135,7 +135,7 @@ if (HAVE_INTROSPECTION AND BUILD_SHARED_LIBS)
    get_directory_property(_tmp_includes INCLUDE_DIRECTORIES)
    _list_prefix(_includes _tmp_includes "-I")
-   set(Poppler_0_18_gir_CFLAGS ${_includes} -L${CMAKE_BINARY_DIR})
+   set(Poppler_0_18_gir_CFLAGS ${_includes} -L${CMAKE_BINARY_DIR} -L${CMAKE_CURRENT_BINARY_DIR})
 -  set(Poppler_0_18_gir_LIBS poppler-glib)
 +  set(Poppler_0_18_gir_LIBS poppler-glib poppler)
    _list_prefix(_abs_introspection_files introspection_files "${CMAKE_CURRENT_SOURCE_DIR}/")
    list(APPEND _abs_introspection_files
      ${CMAKE_CURRENT_BINARY_DIR}/poppler-enums.c
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler/basename-include.patch b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/basename-include.patch
index 528528a..ab6bdb0 100644
--- a/meta-openembedded/meta-oe/recipes-support/poppler/poppler/basename-include.patch
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler/basename-include.patch
@@ -8,8 +8,8 @@
 --- poppler-0.64.0.orig/utils/pdfsig.cc
 +++ poppler-0.64.0/utils/pdfsig.cc
 @@ -35,6 +35,10 @@
- #include "Win32Console.h"
  #include "numberofcharacters.h"
+ #include <libgen.h>
  
 +#if !defined(__GLIBC__)
 +#define basename(src) (strrchr(src,'/') ? strrchr(src,'/')+1 : src)
diff --git a/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.70.1.bb b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.75.0.bb
similarity index 91%
rename from meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.70.1.bb
rename to meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.75.0.bb
index b618f28..0704f1a 100644
--- a/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.70.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poppler/poppler_0.75.0.bb
@@ -8,8 +8,8 @@
            file://0001-glib-CMakeLists.txt-Add-libpoppler-to-link-along-wit.patch \
            file://basename-include.patch \
            "
-SRC_URI[md5sum] = "fdb0699e9aa20e81acd1a50701374c8b"
-SRC_URI[sha256sum] = "66972047d9ef8162cc8c389d7e7698291dfc9f2b3e4ea9a9f08ae604107451bd"
+SRC_URI[md5sum] = "3fb4ca803d989742695ca586c5cc489e"
+SRC_URI[sha256sum] = "3bbaedb0fa2797cac933a0659d144303e4d09eec6892c65600da987d8707199a"
 
 DEPENDS = "fontconfig zlib cairo lcms glib-2.0"
 
@@ -31,7 +31,7 @@
 
 EXTRA_OECMAKE += " \
     -DENABLE_CMS=lcms2 \
-    -DENABLE_XPDF_HEADERS=ON \
+    -DENABLE_UNSTABLE_API_ABI_HEADERS=ON \
     -DBUILD_GTK_TESTS=OFF \
     -DENABLE_ZLIB=ON \
     -DCMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES:PATH='${STAGING_INCDIR}' \
@@ -40,7 +40,7 @@
 do_configure_append() {
     # poppler macro uses pkg-config to check for g-ir runtimes. Something
     # makes them point to /usr/bin. Align them to sysroot - that's where the
-    # git-wrappers are:
+    # gir-wrappers are:
     sed -i 's: ${bindir}/g-ir: ${STAGING_BINDIR}/g-ir:' ${B}/build.ninja
 }
 
diff --git a/meta-openembedded/meta-oe/recipes-support/pv/pv_1.5.3.bb b/meta-openembedded/meta-oe/recipes-support/pv/pv_1.5.3.bb
deleted file mode 100644
index 5e3dd67..0000000
--- a/meta-openembedded/meta-oe/recipes-support/pv/pv_1.5.3.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-SUMMARY = "Terminal-based tool for monitoring the progress of data through a pipeline"
-
-LICENSE = "Artistic-2.0"
-LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
-
-SRC_URI = "http://www.ivarch.com/programs/sources/pv-${PV}.tar.bz2"
-SRC_URI[md5sum] = "efe8e9e4cad5f3264a32258a63bf2c8e"
-SRC_URI[sha256sum] = "76f3999b1c3b3027163dce6ef667cdf8dafb75218ee25e54a03bfe590478f90e"
-
-inherit autotools
-
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
new file mode 100644
index 0000000..9649555
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/pv/pv_1.6.6.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Terminal-based tool for monitoring the progress of data through a pipeline"
+
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=9c50db2589ee3ef10a9b7b2e50ce1d02"
+
+SRC_URI = "http://www.ivarch.com/programs/sources/${BP}.tar.bz2"
+SRC_URI[md5sum] = "ff3564fddcc2b9bd4a9c1d143aba4b4c"
+SRC_URI[sha256sum] = "608ef935f7a377e1439c181c4fc188d247da10d51a19ef79bcdee5043b0973f1"
+
+inherit autotools
+
+LDEMULATION_mipsarchn32 = "${@bb.utils.contains('TUNE_FEATURES', 'bigendian', 'elf32btsmipn32', 'elf32ltsmipn32', d)}"
+export LDEMULATION
diff --git a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-Do-not-install-license-file.patch b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-Do-not-install-license-file.patch
new file mode 100644
index 0000000..a9b9476
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-Do-not-install-license-file.patch
@@ -0,0 +1,17 @@
+Do not install license file
+
+File name is incorrect as well; must be LICENSE instead of COPYING.
+
+Upstream-Status: Submitted [pyrophobicman@gmail.com]
+
+Signed-off-by: Stefan Wiehler <stefan.wiehler@missinglinkelectronics.com>
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -13,5 +13,5 @@
+ add_subdirectory (parse-edid)
+ 
+ INSTALL(FILES get-edid.1 DESTINATION share/man/man1)
+-INSTALL(FILES AUTHORS ChangeLog COPYING README DESTINATION
++INSTALL(FILES AUTHORS ChangeLog README DESTINATION
+ 	share/doc/read-edid)
diff --git a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch
deleted file mode 100644
index 4408002..0000000
--- a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid/0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From eb7590cc2cdd5c35403af4567d8524e017010f1c Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Sat, 11 May 2013 07:58:17 +0200
-Subject: [PATCH] configure: remove check for x86.h, we don't build get-edid
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
-
-Upstream-status: Inappropriate [OE specific]
----
- configure.in | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/configure.in b/configure.in
-index ac85a21..f53e904 100644
---- a/configure.in
-+++ b/configure.in
-@@ -8,8 +8,6 @@ dnl Checks for programs
- 
- AC_PROG_CC
- 
--AC_CHECK_HEADER([libx86.h], [], [AC_MSG_ERROR([libx86.h not found])])
--
- dnl Simple, huh?
- 
- AC_OUTPUT([Makefile])
--- 
-1.8.1.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_2.0.0.bb b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_2.0.0.bb
deleted file mode 100644
index b002906..0000000
--- a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_2.0.0.bb
+++ /dev/null
@@ -1,23 +0,0 @@
-DESCRIPTION = "read-edid elucidates various very useful informations from a conforming PnP monitor"
-LICENSE = "GPLv2"
-LIC_FILES_CHKSUM = "file://COPYING;md5=d0bf70fa1ef81fe4741ec0e6231dadfd"
-
-SRC_URI = "http://polypux.org/projects/read-edid/read-edid-${PV}.tar.gz \
-           file://0001-configure-remove-check-for-x86.h-we-don-t-build-get-.patch"
-
-SRC_URI[md5sum] = "586e7fa1167773b27f4e505edc93274b"
-SRC_URI[sha256sum] = "246ec14ec509e09ac26fe6862b120481b2cc881e2f142ba40886d6eec15e77e8"
-
-inherit autotools
-
-do_compile() {
-    oe_runmake parse-edid
-}
-
-do_install() {
-    install -d ${D}${bindir}
-    install -m 0755 parse-edid ${D}${bindir}
-}
-
-PACKAGES =+ "parse-edid"
-FILES_parse-edid = "${bindir}/parse-edid"
diff --git a/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_3.0.2.bb b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_3.0.2.bb
new file mode 100644
index 0000000..e4c2cad
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/read-edid/read-edid_3.0.2.bb
@@ -0,0 +1,20 @@
+SUMMARY = "A pair of tools for reading the EDID from a monitor"
+DESCRIPTION = "read-edid is a set of two tools - get-edid, which gets the raw \
+               EDID information from the monitor, and parse-edid, which turns \
+	       the raw binary information into a xorg.conf-compatible monitor \
+	       section."
+AUTHOR = "Stefan Wiehler <stefan.wiehler@missinglinkelectronics.com>"
+HOMEPAGE = "http://www.polypux.org/projects/read-edid/"
+SECTION = "console/utils"
+LICENSE = "read-edid"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=292c42e2aedc4af636636bf7af0e2b26"
+
+SRC_URI = "http://polypux.org/projects/read-edid/read-edid-${PV}.tar.gz \
+           file://0001-Do-not-install-license-file.patch \
+	   "
+SRC_URI[md5sum] = "016546e438bf6c98739ff74061df9854"
+SRC_URI[sha256sum] = "c7c6d8440f5b90f98e276829271ccea5b2ff5a3413df8a0f87ec09f834af186f"
+
+EXTRA_OECMAKE = "-DCLASSICBUILD=OFF"
+
+inherit cmake
diff --git a/meta-openembedded/meta-oe/recipes-support/sass/libsass_git.bb b/meta-openembedded/meta-oe/recipes-support/sass/libsass_git.bb
new file mode 100644
index 0000000..4c229cd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sass/libsass_git.bb
@@ -0,0 +1,13 @@
+SUMMARY = "C/C++ port of the Sass CSS precompiler"
+HOMEPAGE = "http://sass-lang.com/libsass"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8f34396ca205f5e119ee77aae91fa27d"
+
+inherit autotools
+
+SRC_URI = "git://github.com/sass/libsass.git;branch=3.5-stable"
+SRCREV = "39e30874b9a5dd6a802c20e8b0470ba44eeba929"
+S = "${WORKDIR}/git"
+PV = "3.5.5"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/sass/sassc_git.bb b/meta-openembedded/meta-oe/recipes-support/sass/sassc_git.bb
new file mode 100644
index 0000000..044c0c7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/sass/sassc_git.bb
@@ -0,0 +1,14 @@
+SUMMARY = "libsass command line driver "
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2f8a76980411a3f1f1480b141ce06744"
+
+DEPENDS = "libsass"
+
+inherit autotools pkgconfig
+
+SRC_URI = "git://github.com/sass/sassc.git"
+SRCREV = "aa6d5c635ea8faf44d542a23aaf85d27e5777d48"
+S = "${WORKDIR}/git"
+PV = "3.5.0"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.26.bb b/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.27.bb
similarity index 94%
rename from meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.26.bb
rename to meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.27.bb
index a09bea2..10dfc2b 100644
--- a/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.26.bb
+++ b/meta-openembedded/meta-oe/recipes-support/satyr/satyr_0.27.bb
@@ -10,7 +10,7 @@
 SRC_URI = "git://github.com/abrt/satyr.git \
            file://0002-fix-compile-failure-against-musl-C-library.patch \
 "
-SRCREV = "4baa0c765071054314d1e7e78547ce6b7c133fbc"
+SRCREV = "dff1b877d42bf2153f8f090905d9cc8fb333bf1e"
 S = "${WORKDIR}/git"
 
 LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
diff --git a/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils/glibc-2.28.patch b/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils/glibc-2.28.patch
deleted file mode 100644
index fbad413..0000000
--- a/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils/glibc-2.28.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Fixes:
-http://errors.yoctoproject.org/Errors/Details/185896/
-
-TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: sg_map26.o: in function `nd_match_scandir_select':
-/usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:359: undefined reference to `major'
-TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: /usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:361: undefined reference to `minor'
-TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: sg_map26.o: in function `nt_typ_from_filename':
-/usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:218: undefined reference to `major'
-TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: /usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:219: undefined reference to `minor'
-collect2: error: ld returned 1 exit status
-Makefile:806: recipe for target 'sg_map26' failed
-
-Upstream-Status: Pending
-
---- sg3_utils-1.42.orig/src/sg_map26.c	2018-08-09 11:53:26.907493996 +0000
-+++ sg3_utils-1.42/src/sg_map26.c	2018-08-09 11:51:56.713490763 +0000
-@@ -33,6 +33,7 @@
- #include <sys/ioctl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-+#include <sys/sysmacros.h>
- #include <linux/major.h>
- 
- #ifdef HAVE_CONFIG_H
diff --git a/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb b/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb
similarity index 78%
rename from meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb
rename to meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb
index c37c5e9..4909035 100644
--- a/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb
+++ b/meta-openembedded/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb
@@ -9,14 +9,13 @@
 LIC_FILES_CHKSUM = "file://COPYING;md5=f90da7fc52172599dbf082d7620f18ca"
 
 SRC_URI = "http://sg.danny.cz/sg/p/sg3_utils-${PV}.tgz \
-    file://glibc-2.28.patch \
 "
 MIRRORS += "http://sg.danny.cz/sg/p https://fossies.org/linux/misc"
 
 UPSTREAM_CHECK_REGEX = "sg3_utils-(?P<pver>\d+(\.\d+)+)\.tgz"
 
-SRC_URI[md5sum] = "28080de5bf2222f8b55a29093bec8aea"
-SRC_URI[sha256sum] = "1dcb7a0309bd0ba3d4a83acb526973b80106ee26cd9f7398186cd3f0633c9ef3"
+SRC_URI[md5sum] = "c11d2b3ca4cc2fd01796473e5330afed"
+SRC_URI[sha256sum] = "8dae684d22e71b11353a48b16c95597af90f0cbe9bbd57f98d7f5544da5cae7b"
 
 inherit autotools-brokensep
 
diff --git a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
index c12289b..dca4267 100644
--- a/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/sharutils/sharutils_4.15.2.bb
@@ -20,3 +20,5 @@
         rmdir --ignore-fail-on-non-empty ${D}${libdir}
     fi
 }
+
+BBCLASSEXTEND = "native nativesdk"
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.3.1.bb
new file mode 100644
index 0000000..91e3f67
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/spdlog/spdlog_1.3.1.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Very fast, header only, C++ logging library."
+HOMEPAGE = "https://github.com/gabime/spdlog/wiki"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRCREV = "a7148b718ea2fabb8387cb90aee9bf448da63e65"
+SRC_URI = "git://github.com/gabime/spdlog.git;protocol=git;branch=v1.x;"
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
+# no need to build example&text&benchmarks on pure yocto
+EXTRA_OECMAKE += "-DSPDLOG_INSTALL=on -DSPDLOG_BUILD_EXAMPLES=off -DSPDLOG_BUILD_TESTS=off -DSPDLOG_BUILD_BENCH=off"
+
+inherit cmake
+
+# Header-only library
+RDEPENDS_${PN}-dev = ""
+RRECOMMENDS_${PN}-dbg = "${PN}-dev (= ${EXTENDPKGV})"
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-Add-linux-musleabi-to-ostable.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-Add-linux-musleabi-to-ostable.patch
deleted file mode 100644
index 269441f..0000000
--- a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-Add-linux-musleabi-to-ostable.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 087840efdbc86b1432ebdd81f25b4cb78c75f818 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 11 Sep 2018 12:28:10 -0700
-Subject: [PATCH] Add linux-musleabi to ostable
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ostable      | 1 +
- triplettable | 1 +
- 2 files changed, 2 insertions(+)
-
-diff --git a/ostable b/ostable
-index 3bb6819..d0ffdc7 100644
---- a/ostable
-+++ b/ostable
-@@ -15,6 +15,7 @@
- uclibceabi-linux	linux-uclibceabi	linux[^-]*-uclibceabi
- uclibc-linux		linux-uclibc		linux[^-]*-uclibc
- musleabihf-linux	linux-musleabihf	linux[^-]*-musleabihf
-+musleabi-linux		linux-musleabi		linux[^-]*-musleabi
- musl-linux		linux-musl		linux[^-]*-musl
- gnueabihf-linux		linux-gnueabihf		linux[^-]*-gnueabihf
- gnueabi-linux		linux-gnueabi		linux[^-]*-gnueabi
-diff --git a/triplettable b/triplettable
-index 7257744..45864c3 100644
---- a/triplettable
-+++ b/triplettable
-@@ -6,6 +6,7 @@
- uclibceabi-linux-arm	uclibc-linux-armel
- uclibc-linux-<cpu>	uclibc-linux-<cpu>
- musleabihf-linux-arm	musl-linux-armhf
-+musleabi-linux-arm	musl-linux-arm
- musl-linux-<cpu>	musl-linux-<cpu>
- gnueabihf-linux-arm	armhf
- gnueabi-linux-arm	armel
--- 
-2.18.0
-
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-dpkg-Support-muslx32-build.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-dpkg-Support-muslx32-build.patch
new file mode 100644
index 0000000..50e6894
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0001-dpkg-Support-muslx32-build.patch
@@ -0,0 +1,41 @@
+From a328c8bec0bf8071ae8f20fee4c7475205064ba1 Mon Sep 17 00:00:00 2001
+From: sweeaun <swee.aun.khor@intel.com>
+Date: Sun, 10 Sep 2017 00:14:15 -0700
+Subject: [PATCH] dpkg: Support muslx32 build
+
+Upstream-Status: Pending.
+Changes made on ostable and tupletable to enable muslx32 build.
+
+Signed-off-by: sweeaun <swee.aun.khor@intel.com>
+---
+ data/ostable    | 1 +
+ data/tupletable | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/data/ostable b/data/ostable
+index be64342..87db273 100644
+--- a/data/ostable
++++ b/data/ostable
+@@ -19,6 +19,7 @@ base-uclibc-linux	linux-uclibc		linux[^-]*-uclibc
+ eabihf-musl-linux	linux-musleabihf	linux[^-]*-musleabihf
+ eabi-musl-linux		linux-musleabi		linux[^-]*-musleabi
+ base-musl-linux		linux-musl		linux[^-]*-musl
++x32-musl-linux		linux-muslx32		linux[^-]*-muslx32
+ eabihf-gnu-linux	linux-gnueabihf		linux[^-]*-gnueabihf
+ eabi-gnu-linux		linux-gnueabi		linux[^-]*-gnueabi
+ abin32-gnu-linux	linux-gnuabin32		linux[^-]*-gnuabin32
+diff --git a/data/tupletable b/data/tupletable
+index 28f00bf..748ffab 100644
+--- a/data/tupletable
++++ b/data/tupletable
+@@ -10,6 +10,7 @@ base-uclibc-linux-<cpu>		uclibc-linux-<cpu>
+ eabihf-musl-linux-arm		musl-linux-armhf
+ eabi-musl-linux-arm		musl-linux-armel
+ base-musl-linux-<cpu>		musl-linux-<cpu>
++x32-musl-linux-amd64		x32
+ ilp32-gnu-linux-arm64		arm64ilp32
+ eabihf-gnu-linux-arm		armhf
+ eabi-gnu-linux-arm		armel
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch
new file mode 100644
index 0000000..9fe0ca7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch
@@ -0,0 +1,38 @@
+From b4ea54158c399874e12394ebc91afe98954695e2 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Wed, 26 Aug 2015 16:16:16 +0300
+Subject: [PATCH 2/5] Adapt to linux-wrs kernel version, which has character
+ '_' inside. Remove the first-char-digit-check (as the 1.15.8.5 version does).
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
+
+Upstream-Status: Inappropriate [embedded specific]
+---
+ lib/dpkg/parsehelp.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/lib/dpkg/parsehelp.c b/lib/dpkg/parsehelp.c
+index 453077fd9..f42ea2882 100644
+--- a/lib/dpkg/parsehelp.c
++++ b/lib/dpkg/parsehelp.c
+@@ -243,14 +243,12 @@ parseversion(struct dpkg_version *rversion, const char *string,
+   ptr = rversion->version;
+   if (!*ptr)
+     return dpkg_put_error(err, _("version number is empty"));
+-  if (*ptr && !c_isdigit(*ptr++))
+-    return dpkg_put_warn(err, _("version number does not start with digit"));
+   for (; *ptr; ptr++) {
+-    if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".-+~:", *ptr) == NULL)
++    if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".-+~:_", *ptr) == NULL)
+       return dpkg_put_warn(err, _("invalid character in version number"));
+   }
+   for (ptr = rversion->revision; *ptr; ptr++) {
+-    if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".+~", *ptr) == NULL)
++    if (!c_isdigit(*ptr) && !c_isalpha(*ptr) && strchr(".-+~_", *ptr) == NULL)
+       return dpkg_put_warn(err, _("invalid character in revision number"));
+   }
+ 
+
+-- 
+2.11.0
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch
new file mode 100644
index 0000000..93d8704
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch
@@ -0,0 +1,75 @@
+From 24229971492515b64c81e8c6392e5dfbdc22b44c Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Wed, 26 Aug 2015 16:25:45 +0300
+Subject: [PATCH 3/5] Our pre/postinsts expect $D to be set when running in a
+ sysroot and don't expect a chroot. This matches up our system expectations
+ with what dpkg does.
+
+Upstream-Status: Inappropriate [OE Specific]
+
+RP 2011/12/07
+ALIMON 2016/05/26
+ALIMON 2017/02/21
+---
+ src/script.c | 44 +++-----------------------------------------
+ 1 file changed, 3 insertions(+), 41 deletions(-)
+
+diff --git a/src/script.c b/src/script.c
+index 2f252ae..768a9d1 100644
+--- a/src/script.c
++++ b/src/script.c
+@@ -97,48 +97,10 @@ setexecute(const char *path, struct stat *stab)
+ static const char *
+ maintscript_pre_exec(struct command *cmd)
+ {
+-	const char *admindir = dpkg_db_get_dir();
+-	const char *changedir;
+-	size_t instdirlen = strlen(instdir);
+-
+-	if (instdirlen > 0 && fc_script_chrootless)
+-		changedir = instdir;
+-	else
+-		changedir = "/";
+-
+-	if (instdirlen > 0 && !fc_script_chrootless) {
+-		if (strncmp(admindir, instdir, instdirlen) != 0)
+-			ohshit(_("admindir must be inside instdir for dpkg to work properly"));
+-		if (setenv("DPKG_ADMINDIR", admindir + instdirlen, 1) < 0)
+-			ohshite(_("unable to setenv for subprocesses"));
+-		if (setenv("DPKG_ROOT", "", 1) < 0)
+-			ohshite(_("unable to setenv for subprocesses"));
+-
+-		if (chroot(instdir))
+-			ohshite(_("failed to chroot to '%.250s'"), instdir);
++	if (*instdir) {
++		setenv("D", instdir, 1);
+ 	}
+-	/* Switch to a known good directory to give the maintainer script
+-	 * a saner environment, also needed after the chroot(). */
+-	if (chdir(changedir))
+-		ohshite(_("failed to chdir to '%.255s'"), changedir);
+-	if (debug_has_flag(dbg_scripts)) {
+-		struct varbuf args = VARBUF_INIT;
+-		const char **argv = cmd->argv;
+-
+-		while (*++argv) {
+-			varbuf_add_char(&args, ' ');
+-			varbuf_add_str(&args, *argv);
+-		}
+-		varbuf_end_str(&args);
+-		debug(dbg_scripts, "fork/exec %s (%s )", cmd->filename,
+-		      args.buf);
+-		varbuf_destroy(&args);
+-	}
+-	if (instdirlen == 0 || fc_script_chrootless)
+-		return cmd->filename;
+-
+-	assert(strlen(cmd->filename) >= instdirlen);
+-	return cmd->filename + instdirlen;
++	return cmd->filename;
+ }
+ 
+ /**
+-- 
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch
new file mode 100644
index 0000000..56c85c7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch
@@ -0,0 +1,31 @@
+From adb6bfd0feeceaf030df0debe3343d7f73e708a0 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Wed, 26 Aug 2015 16:27:45 +0300
+Subject: [PATCH 4/5] The lutimes function doesn't work properly for all
+ systems.
+
+Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
+
+Upstream-Status: Inappropriate [embedded specific]
+---
+ src/archives.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/archives.c b/src/archives.c
+index bff5f14..b711013 100644
+--- a/src/archives.c
++++ b/src/archives.c
+@@ -449,8 +449,9 @@ tarobject_set_mtime(struct tar_entry *te, const char *path)
+ 
+   if (te->type == TAR_FILETYPE_SYMLINK) {
+ #ifdef HAVE_LUTIMES
+-    if (lutimes(path, tv) && errno != ENOSYS)
++/*    if (lutimes(path, tv) && errno != ENOSYS)
+       ohshite(_("error setting timestamps of '%.255s'"), path);
++*/
+ #endif
+   } else {
+     if (utimes(path, tv))
+-- 
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0005-dpkg-compiler.m4-remove-Wvla.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0005-dpkg-compiler.m4-remove-Wvla.patch
new file mode 100644
index 0000000..96e96f2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0005-dpkg-compiler.m4-remove-Wvla.patch
@@ -0,0 +1,36 @@
+From 0ad7bba80d5b9035089ff2b2f77a774b5b201915 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Wed, 26 Aug 2015 16:28:59 +0300
+Subject: [PATCH 5/5] dpkg-compiler.m4: remove -Wvla
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove the -Wvla flag from the set of compiler warning flags, since gcc
+on old host systems such as CentOS 5.8 doesn't support it, and it
+causes a build error for dpkg-native.
+
+Upstream-Status: Pending
+
+Signed-off-by: Donn Seeley <donn.seeley@windriver.com>
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
+---
+ m4/dpkg-compiler.m4 | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/m4/dpkg-compiler.m4 b/m4/dpkg-compiler.m4
+index 682857c..23ed7d0 100644
+--- a/m4/dpkg-compiler.m4
++++ b/m4/dpkg-compiler.m4
+@@ -52,7 +52,6 @@ AC_DEFUN([DPKG_CHECK_COMPILER_WARNINGS], [
+   DPKG_CHECK_COMPILER_FLAG([-Wlogical-op])
+   DPKG_CHECK_COMPILER_FLAG([-Wlogical-not-parentheses])
+   DPKG_CHECK_COMPILER_FLAG([-Wswitch-bool])
+-  DPKG_CHECK_COMPILER_FLAG([-Wvla])
+   DPKG_CHECK_COMPILER_FLAG([-Winit-self])
+   DPKG_CHECK_COMPILER_FLAG([-Wwrite-strings])
+   DPKG_CHECK_COMPILER_FLAG([-Wcast-align])
+-- 
+2.1.4
+
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0006-add-musleabi-to-known-target-tripets.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0006-add-musleabi-to-known-target-tripets.patch
new file mode 100644
index 0000000..8797ea5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0006-add-musleabi-to-known-target-tripets.patch
@@ -0,0 +1,42 @@
+From f8910022dc3ec622272f168cd0022dbdf6dff93a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 30 Dec 2015 23:05:41 +0000
+Subject: [PATCH] add musleabi to known target tripets
+
+helps compiling dpkg for musl/arm-softfloat
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
+---
+ data/ostable    | 1 +
+ data/tupletable | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/data/ostable b/data/ostable
+index 99c1f889d..be6434271 100644
+--- a/data/ostable
++++ b/data/ostable
+@@ -17,6 +17,7 @@
+ eabi-uclibc-linux	linux-uclibceabi	linux[^-]*-uclibceabi
+ base-uclibc-linux	linux-uclibc		linux[^-]*-uclibc
+ eabihf-musl-linux	linux-musleabihf	linux[^-]*-musleabihf
++eabi-musl-linux		linux-musleabi		linux[^-]*-musleabi
+ base-musl-linux		linux-musl		linux[^-]*-musl
+ eabihf-gnu-linux	linux-gnueabihf		linux[^-]*-gnueabihf
+ eabi-gnu-linux		linux-gnueabi		linux[^-]*-gnueabi
+diff --git a/data/tupletable b/data/tupletable
+index 5f500f6ca..28f00bfe6 100644
+--- a/data/tupletable
++++ b/data/tupletable
+@@ -8,6 +8,7 @@
+ eabi-uclibc-linux-arm		uclibc-linux-armel
+ base-uclibc-linux-<cpu>		uclibc-linux-<cpu>
+ eabihf-musl-linux-arm		musl-linux-armhf
++eabi-musl-linux-arm		musl-linux-armel
+ base-musl-linux-<cpu>		musl-linux-<cpu>
+ ilp32-gnu-linux-arm64		arm64ilp32
+ eabihf-gnu-linux-arm		armhf
+-- 
+2.11.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch
new file mode 100644
index 0000000..1b985df
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch
@@ -0,0 +1,39 @@
+From 8659eeeeda74d71e12080121f0b13a88cbdda433 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?An=C3=ADbal=20Lim=C3=B3n?= <anibal.limon@linux.intel.com>
+Date: Tue, 21 Feb 2017 11:23:27 -0600
+Subject: [PATCH] dpkg-deb/build.c: Remove usage of --clamp-mtime in tar
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Recently dpkg added --clamp-mtime to tar to create reproducible
+build tarballs [1].
+
+But host tools doesn't support this option because is new on tar
+so disable in our builds.
+
+Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
+
+Upstream-Status: Inappropriate [Configuration]
+
+[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=759999#20
+[2] https://lists.gnu.org/archive/html/help-tar/2016-01/msg00000.html
+---
+ dpkg-deb/build.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
+index a92b58e..a3d1912 100644
+--- a/dpkg-deb/build.c
++++ b/dpkg-deb/build.c
+@@ -450,7 +450,7 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
+ 
+     command_init(&cmd, TAR, "tar -cf");
+     command_add_args(&cmd, "tar", "-cf", "-", "--format=gnu",
+-                           "--mtime", mtime, "--clamp-mtime", NULL);
++                           "--mtime", mtime, NULL);
+     /* Mode might become a positional argument, pass it before -T. */
+     if (mode)
+       command_add_args(&cmd, "--mode", mode, NULL);
+-- 
+2.11.0
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/add_armeb_triplet_entry.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/add_armeb_triplet_entry.patch
new file mode 100644
index 0000000..d165616
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/add_armeb_triplet_entry.patch
@@ -0,0 +1,48 @@
+Author: Krishnanjanappa, Jagadeesh <jagadeesh.krishnanjanappa@caviumnetworks.com>
+Date:   Wed Apr 8 18:08:14 2015 +0530
+
+[PATCH] add armeb triplet entry into triplettable.
+
+Cross-compling dpkg application for armeb fails with below error
+during configure task,
+
+(snip)
+ configure:23141: checking dpkg cpu type
+ configure:23148: result: armeb
+ configure:23150: WARNING: armeb not found in cputable
+ configure:23162: checking dpkg operating system type
+ configure:23169: result: linux-gnueabi
+ configure:23171: WARNING: linux-gnueabi not found in ostable
+ configure:23183: checking dpkg architecture name
+ configure:23189: error: cannot determine host dpkg architecture
+-- CUT --
+
+the required combination of "gnueabi-linux-armeb" was not found in
+the triplettable file thereby returning dpkg_arch as
+empty in configure script.
+
+Upstream-Status: Pending
+
+Signed-off-by: Krishnanjanappa, Jagadeesh <jagadeesh.krishnanjanappa@caviumnetworks.com>
+Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
+
+---
+ data/tupletable | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/data/tupletable b/data/tupletable
+index b7802bec3..5f500f6ca 100644
+--- a/data/tupletable
++++ b/data/tupletable
+@@ -12,6 +12,7 @@ base-musl-linux-<cpu>		musl-linux-<cpu>
+ ilp32-gnu-linux-arm64		arm64ilp32
+ eabihf-gnu-linux-arm		armhf
+ eabi-gnu-linux-arm		armel
++eabi-gnu-linux-armeb		armeb
+ abin32-gnu-linux-mips64r6el	mipsn32r6el
+ abin32-gnu-linux-mips64r6	mipsn32r6
+ abin32-gnu-linux-mips64el	mipsn32el
+-- 
+2.11.0
+
+
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/arch_pm.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/arch_pm.patch
new file mode 100644
index 0000000..4e0d22a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/arch_pm.patch
@@ -0,0 +1,29 @@
+configure cannot determine the proper cpu, os, or
+architecture for mips64, and possibly other arch's
+because of faulty code added to Arch.pm in the latest
+release from upstream.  We remove that code.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe Slater <jslater@windriver.com>
+
+---
+ scripts/Dpkg/Arch.pm | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/scripts/Dpkg/Arch.pm b/scripts/Dpkg/Arch.pm
+index 1720847b8..6345ce3b9 100644
+--- a/scripts/Dpkg/Arch.pm
++++ b/scripts/Dpkg/Arch.pm
+@@ -323,9 +323,6 @@ sub _load_tupletable()
+ 		    (my $dt = $debtuple) =~ s/<cpu>/$_cpu/;
+ 		    (my $da = $debarch) =~ s/<cpu>/$_cpu/;
+ 
+-		    next if exists $debarch_to_debtuple{$da}
+-		         or exists $debtuple_to_debarch{$dt};
+-
+ 		    $debarch_to_debtuple{$da} = $dt;
+ 		    $debtuple_to_debarch{$dt} = $da;
+ 		}
+-- 
+2.11.0
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/noman.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/noman.patch
new file mode 100644
index 0000000..a7f3cb8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/noman.patch
@@ -0,0 +1,22 @@
+Upstream-Status: Inappropriate [disable feature]
+
+---
+ Makefile.am | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 0da52cb16..a1f79e0a2 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -13,8 +13,7 @@ SUBDIRS = \
+ 	$(MAYBE_DSELECT) \
+ 	scripts \
+ 	t-func \
+-	po \
+-	man
++	po
+ 
+ ACLOCAL_AMFLAGS = -I m4
+ 
+-- 
+2.11.0
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/remove-tar-no-timestamp.patch b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/remove-tar-no-timestamp.patch
new file mode 100644
index 0000000..4f408ff
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon/remove-tar-no-timestamp.patch
@@ -0,0 +1,17 @@
+busybox-1.19.4 tar utility doesn't support --warning=no-timestamp
+
+Signed-off-by: Constantin Musca <constantinx.musca@intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+Index: dpkg-1.17.1/dpkg-deb/extract.c
+===================================================================
+--- dpkg-1.17.1.orig/dpkg-deb/extract.c
++++ dpkg-1.17.1/dpkg-deb/extract.c
+@@ -318,7 +318,6 @@ extracthalf(const char *debar, const cha
+ 
+       command_add_arg(&cmd, "-f");
+       command_add_arg(&cmd, "-");
+-      command_add_arg(&cmd, "--warning=no-timestamp");
+ 
+       m_dup2(p2[0],0);
+       close(p2[0]);
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.17.25.bb b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.17.25.bb
deleted file mode 100644
index b9b22a3..0000000
--- a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.17.25.bb
+++ /dev/null
@@ -1,39 +0,0 @@
-SUMMARY = "Debian's start-stop-daemon utility extracted from the dpkg \
-package"
-LICENSE = "PD"
-LIC_FILES_CHKSUM = "file://utils/start-stop-daemon.c;endline=21;md5=8fbd0497a7d0b01e99820bffcb58e9ad"
-# start-stop-daemon is usually shipped by dpkg
-DEPENDS = "ncurses"
-RCONFLICTS_${PN} = "dpkg"
-
-SRC_URI = " \
-    ${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.xz \
-    file://0001-dpkg-start-stop-daemon-Accept-SIG-prefixed-signal-na.patch \
-    file://0001-Add-linux-musleabi-to-ostable.patch \
-"
-
-SRC_URI[md5sum] = "e48fcfdb2162e77d72c2a83432d537ca"
-SRC_URI[sha256sum] = "07019d38ae98fb107c79dbb3690cfadff877f153b8c4970e3a30d2e59aa66baa"
-
-inherit autotools gettext pkgconfig
-
-S = "${WORKDIR}/dpkg-${PV}"
-
-EXTRA_OECONF = " \
-    --without-bz2 \
-    --without-selinux \
-"
-
-do_install_append () {
-    # remove everything that is not related to start-stop-daemon, since there
-    # is no explicit rule for only installing ssd
-    find ${D} -type f -not -name "*start-stop-daemon*" -exec rm {} \;
-    find ${D} -depth -type d -empty -exec rmdir {} \;
-
-    # support for buggy init.d scripts that refer to an alternative
-    # explicit path to start-stop-daemon
-    if [ "${base_sbindir}" != "${sbindir}" ]; then
-        mkdir -p ${D}${base_sbindir}
-        ln -sf ${sbindir}/start-stop-daemon ${D}${base_sbindir}/start-stop-daemon
-    fi
-}
diff --git a/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.18.25.bb b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.18.25.bb
new file mode 100644
index 0000000..b372d3c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/start-stop-daemon/start-stop-daemon_1.18.25.bb
@@ -0,0 +1,87 @@
+SUMMARY = "Debian's start-stop-daemon utility extracted from the dpkg \
+package"
+LICENSE = "PD"
+LIC_FILES_CHKSUM = "file://utils/start-stop-daemon.c;endline=21;md5=8fbd0497a7d0b01e99820bffcb58e9ad"
+DEPENDS = "zlib bzip2 perl ncurses"
+# start-stop-daemon is usually shipped by dpkg
+RCONFLICTS_${PN} = "dpkg"
+
+SRC_URI = " \
+    ${DEBIAN_MIRROR}/main/d/dpkg/dpkg_${PV}.tar.xz \
+    file://0001-dpkg-start-stop-daemon-Accept-SIG-prefixed-signal-na.patch \
+    file://noman.patch \
+    file://remove-tar-no-timestamp.patch \
+    file://arch_pm.patch \
+    file://add_armeb_triplet_entry.patch \
+    file://0002-Adapt-to-linux-wrs-kernel-version-which-has-characte.patch \
+    file://0003-Our-pre-postinsts-expect-D-to-be-set-when-running-in.patch \
+    file://0004-The-lutimes-function-doesn-t-work-properly-for-all-s.patch \
+    file://0005-dpkg-compiler.m4-remove-Wvla.patch \
+    file://0006-add-musleabi-to-known-target-tripets.patch \
+    file://0007-dpkg-deb-build.c-Remove-usage-of-clamp-mtime-in-tar.patch \
+    file://0001-dpkg-Support-muslx32-build.patch \
+"
+SRC_URI[md5sum] = "e463f58b04acb23659df23d2a7a05cff"
+SRC_URI[sha256sum] = "c49c371953aea03f543814dcae37c069e86069333fb2e24e9252e76647663492"
+
+inherit autotools gettext perlnative pkgconfig perl-version
+
+S = "${WORKDIR}/dpkg-${PV}"
+
+EXTRA_OECONF = "\
+                --disable-dselect \
+                --enable-start-stop-daemon \
+                --with-libz \
+                --with-libbz2 \
+                --without-libselinux \
+                "
+
+PACKAGECONFIG = "liblzma"
+PACKAGECONFIG[liblzma] = "--with-liblzma,--without-liblzma, xz"
+
+export PERL = "${bindir}/perl"
+export PERL_LIBDIR = "${libdir}/perl/${@get_perl_version(d)}"
+EXTRA_OECONF += "TAR=tar"
+
+EXTRA_OECONF_append_class-target = " DEB_HOST_ARCH=${DPKG_ARCH}"
+
+DPKG_ARCH ??= "${@deb_arch_map(d.getVar('TARGET_ARCH'), d.getVar('TUNE_FEATURES'))}"
+
+def deb_arch_map(arch, tune):
+    tune_features = tune.split()
+    if arch == "allarch":
+        return "all"
+    if arch in ["i586", "i686"]:
+        return "i386"
+    if arch == "x86_64":
+        if "mx32" in tune_features:
+            return "x32"
+        return "amd64"
+    if arch.startswith("mips"):
+        endian = ["el", ""]["bigendian" in tune_features]
+        if "n64" in tune_features:
+            return "mips64" + endian
+        if "n32" in tune_features:
+            return "mipsn32" + endian
+        return "mips" + endian
+    if arch == "powerpc":
+        return arch + ["", "spe"]["spe" in tune_features]
+    if arch == "aarch64":
+        return "arm64"
+    if arch == "arm":
+        return arch + ["el", "hf"]["callconvention-hard" in tune_features]
+    return arch
+
+do_install_append () {
+    # remove everything that is not related to start-stop-daemon, since there
+    # is no explicit rule for only installing ssd
+    find ${D} -type f -not -name "*start-stop-daemon*" -exec rm {} \;
+    find ${D} -depth -type d -empty -exec rmdir {} \;
+
+    # support for buggy init.d scripts that refer to an alternative
+    # explicit path to start-stop-daemon
+    if [ "${base_sbindir}" != "${sbindir}" ]; then
+        mkdir -p ${D}${base_sbindir}
+        ln -sf ${sbindir}/start-stop-daemon ${D}${base_sbindir}/start-stop-daemon
+    fi
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.16.1.bb b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.19.1.bb
similarity index 80%
rename from meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.16.1.bb
rename to meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.19.1.bb
index b5f42cf..4eecf6b 100644
--- a/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.16.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/syslog-ng/syslog-ng_3.19.1.bb
@@ -12,5 +12,5 @@
            file://0001-syslog-ng-fix-segment-fault-during-service-start.patch \
            "
 
-SRC_URI[md5sum] = "72d44ad02c2e9ba0748b3ecd3f15a7ff"
-SRC_URI[sha256sum] = "c7ee6f1d5e98d86f191964e580111bfa71081ecbb3275cea035bbba177b73a29"
+SRC_URI[md5sum] = "aa79bc13d9fd925aa5fb9516e87aacd3"
+SRC_URI[sha256sum] = "5cf931a9d7bead0e6d9a2c65eee8f6005a005878f59aa280f3c4294257ed5178"
diff --git a/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/files/use-sh-on-path.patch b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/files/use-sh-on-path.patch
new file mode 100644
index 0000000..8cb16de
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/files/use-sh-on-path.patch
@@ -0,0 +1,21 @@
+
+thin-provisioning-tools: use sh on path when invoking txt2man
+
+txt2man contains a test which might try to use ksh to run the script, so we
+avoid running /bin/sh.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: joe.slater <joe.slater@windriver.com>
+
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -210,7 +210,7 @@ endif
+ 
+ %.8: %.txt bin/txt2man
+ 	@echo "    [txt2man] $<"
+-	$(V) bin/txt2man -p -t $(basename $(notdir $<)) $< > $@
++	$(V) sh bin/txt2man -p -t $(basename $(notdir $<)) $< > $@
+ 
+ #----------------------------------------------------------------
+ 
diff --git a/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.7.6.bb b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.7.6.bb
index 20cb17a..5f6ba9e 100644
--- a/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.7.6.bb
+++ b/meta-openembedded/meta-oe/recipes-support/thin-provisioning-tools/thin-provisioning-tools_0.7.6.bb
@@ -10,6 +10,7 @@
 SRC_URI = "git://github.com/jthornber/thin-provisioning-tools \
            file://0001-do-not-strip-pdata_tools-at-do_install.patch \
            file://0001-fix-compile-failed-with-libc-musl.patch \
+           file://use-sh-on-path.patch \
 "
 
 SRCREV = "6f936992b8e6208a7838fcf1ec87c5bd3a694a77"
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.7.8.bb b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.8.1.bb
similarity index 81%
rename from meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.7.8.bb
rename to meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.8.1.bb
index 64b338f..3f2130e 100644
--- a/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.7.8.bb
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks2_2.8.1.bb
@@ -19,15 +19,17 @@
 RDEPENDS_${PN} = "acl"
 
 SRC_URI = " \
-    git://github.com/storaged-project/udisks.git;branch=2.7.x-branch \
+    git://github.com/storaged-project/udisks.git;branch=master \
     file://non-gnu-libc.patch \
 "
-SRCREV = "47bc0141cb84624ba1e2242d596a89a30df1f5ea"
+SRCREV = "05ae471be3c2adf2255b3a01edb00bba06e02afb"
 S = "${WORKDIR}/git"
 
 CVE_PRODUCT = "udisks"
 
-inherit autotools systemd gtk-doc gobject-introspection
+inherit autotools systemd gtk-doc gobject-introspection distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "polkit"
 
 EXTRA_OECONF = "--disable-man --disable-gtk-doc"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb b/meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb
index 7cd9992..3ae8ecc 100644
--- a/meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb
+++ b/meta-openembedded/meta-oe/recipes-support/udisks/udisks_1.0.5.bb
@@ -22,7 +22,10 @@
 SRC_URI[udisks.md5sum] = "70d48dcfe523a74cd7c7fbbc2847fcdd"
 SRC_URI[udisks.sha256sum] = "f2ec82eb0ea7e01dc299b5b29b3c18cdf861236ec43dcff66b3552b4b31c6f71"
 
-inherit autotools-brokensep systemd gtk-doc
+inherit autotools-brokensep systemd gtk-doc distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "polkit"
+
 
 PACKAGECONFIG ??= "libdevmapper"
 PACKAGECONFIG[libdevmapper] = "--enable-devmapper,--disable-devmapper,libdevmapper"
diff --git a/meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.6.bb b/meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.7.bb
similarity index 75%
rename from meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.6.bb
rename to meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.7.bb
index 2674d35..563badf 100644
--- a/meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.6.bb
+++ b/meta-openembedded/meta-oe/recipes-support/unixodbc/unixodbc_2.3.7.bb
@@ -8,11 +8,11 @@
 
 DEPENDS = "libtool mysql5"
 
-SRC_URI = "ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-${PV}.tar.gz \
+SRC_URI = "http://ftp.unixodbc.org/unixODBC-${PV}.tar.gz \
            file://do-not-use-libltdl-source-directory.patch \
 "
-SRC_URI[md5sum] = "a8629fd2953b04b4639d0a9d8a5cf9d1"
-SRC_URI[sha256sum] = "88b637f647c052ecc3861a3baa275c3b503b193b6a49ff8c28b2568656d14d69"
+SRC_URI[md5sum] = "274a711b0c77394e052db6493840c6f9"
+SRC_URI[sha256sum] = "45f169ba1f454a72b8fcbb82abd832630a3bf93baa84731cf2949f449e1e3e77"
 
 UPSTREAM_CHECK_REGEX = "unixODBC-(?P<pver>\d+(\.\d+)+)\.tar"
 
diff --git a/meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb b/meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb
index 2cf3163..3fd91e9 100644
--- a/meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb
+++ b/meta-openembedded/meta-oe/recipes-support/upower/upower_0.99.7.bb
@@ -11,7 +11,9 @@
 SRC_URI[md5sum] = "236bb439d9ff1151450b3d8582399532"
 SRC_URI[sha256sum] = "24bcc2f6ab25a2533bac70b587bcb019e591293076920f5b5e04bdedc140a401"
 
-inherit autotools pkgconfig gettext gobject-introspection systemd
+inherit autotools pkgconfig gettext gobject-introspection systemd distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "polkit"
 
 PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
 PACKAGECONFIG[idevice] = "--with-idevice,--without-idevice,libimobiledevice libplist"
diff --git a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170205.bb b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170806.bb
similarity index 75%
rename from meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170205.bb
rename to meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170806.bb
index eeed5e2..6abd941 100644
--- a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170205.bb
+++ b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch-data_20170806.bb
@@ -7,8 +7,8 @@
 DEPENDS += "tcl-native"
 
 SRC_URI = "http://www.draisberghof.de/usb_modeswitch/${BP}.tar.bz2"
-SRC_URI[md5sum] = "0cc107cd0c4c83df0d9400c999e21dfd"
-SRC_URI[sha256sum] = "e2dcfd9d28928d8d8f03381571a23442b3c50d48d343bc40a1a07d01662738d1"
+SRC_URI[md5sum] = "fb50d15b52e909d742dd16f0a9882316"
+SRC_URI[sha256sum] = "ce413ef2a50e648e9c81bc3ea6110e7324a8bf981034fc9ec4467d3562563c2c"
 
 do_install() {
     oe_runmake install DESTDIR=${D}
diff --git a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.0.bb b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.2.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.0.bb
rename to meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.2.bb
index ac0df8b..33e40b3 100644
--- a/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/usb-modeswitch/usb-modeswitch_2.5.2.bb
@@ -5,8 +5,8 @@
 DEPENDS = "libusb1"
 
 SRC_URI = "http://www.draisberghof.de/usb_modeswitch/${BP}.tar.bz2"
-SRC_URI[md5sum] = "38ad5c9d70e06227a00361bdc2b1e568"
-SRC_URI[sha256sum] = "31c0be280d49a99ec3dc0be3325bef320d9c04b50714ef0ce1e36a614d687633"
+SRC_URI[md5sum] = "16b9a8efa1bf8fbd7d5612757eae4f26"
+SRC_URI[sha256sum] = "abffac09c87eacd78e101545967dc25af7e989745b4276756d45dbf4008a2ea6"
 
 inherit pkgconfig systemd
 
diff --git a/meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.0.2.bb b/meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.1.0.bb
similarity index 85%
rename from meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.0.2.bb
rename to meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.1.0.bb
index ccdd13b..7eb1383 100644
--- a/meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/uthash/uthash_2.1.0.bb
@@ -8,7 +8,7 @@
 HOMEPAGE = "https://troydhanson.github.io/uthash/"
 SECTION = "base"
 LICENSE = "BSD-1-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=5cc1f1e4c71f19f580458586756c02b4"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a2513f7d2291df840527b76b2a8f9718"
 
 SRC_URI = "\
     https://github.com/troydhanson/${BPN}/archive/v${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
@@ -16,8 +16,8 @@
 "
 UPSTREAM_CHECK_URI = "https://github.com/troydhanson/${BPN}/releases"
 
-SRC_URI[md5sum] = "d08632a58674274c9cd87e2930f5696a"
-SRC_URI[sha256sum] = "34a31d51dd7a839819cecd6f46049b4ffe031d7f3147d9a042f5504fdb1348d1"
+SRC_URI[md5sum] = "4d0a33f6393260926032f1fad4bad39a"
+SRC_URI[sha256sum] = "152ccd8e64d0f495377232e3964d06c7ec8bb8c3fbd3217f8a5702614f9a669e"
 
 inherit ptest
 
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/kernel-4.18.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/kernel-4.18.patch
deleted file mode 100644
index 93eaa3d..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/kernel-4.18.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Description: Fix build failure with new kernel 4.18
-Author: Gianfranco Costamagna <locutusofborg@debian.org>
-
-Upstream-Status:Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Index: vbox_module/vboxsf/utils.c
-===================================================================
---- vbox_module.orig/vboxsf/utils.c
-+++ vbox_module/vboxsf/utils.c
-@@ -50,7 +50,11 @@ static void sf_timespec_from_ftime(RTTIM
-     RTTimeSpecSetNano(ts, t);
- }
- #else /* >= 2.6.0 */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0)
- static void sf_ftime_from_timespec(struct timespec *tv, RTTIMESPEC *ts)
-+#else
-+static void sf_ftime_from_timespec(struct timespec64 *tv, RTTIMESPEC *ts)
-+#endif
- {
-     int64_t t = RTTimeSpecGetNano(ts);
-     int64_t nsec;
-@@ -60,7 +64,11 @@ static void sf_ftime_from_timespec(struc
-     tv->tv_nsec = nsec;
- }
- 
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 18, 0)
- static void sf_timespec_from_ftime(RTTIMESPEC *ts, struct timespec *tv)
-+#else
-+static void sf_timespec_from_ftime(RTTIMESPEC *ts, struct timespec64 *tv)
-+#endif
- {
-     int64_t t = (int64_t)tv->tv_nsec + (int64_t)tv->tv_sec * 1000000000;
-     RTTimeSpecSetNano(ts, t);
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.18.bb b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.22.bb
similarity index 92%
rename from meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.18.bb
rename to meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.22.bb
index 2a4cc38..e394f34 100644
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.18.bb
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_5.2.22.bb
@@ -13,10 +13,9 @@
 
 SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
     file://Makefile.utils \
-    file://kernel-4.18.patch \
 "
-SRC_URI[md5sum] = "d8e291525b84569356773eef507c49ce"
-SRC_URI[sha256sum] = "ed0a7efd56c7f39fae79c7ec3321473da412ef0d7914457b66f42679d513efcf"
+SRC_URI[md5sum] = "c9c2f162ac5f99d28d8c0ca43b19ed01"
+SRC_URI[sha256sum] = "5580e875349341a1aabc6d5d2f697d242f277487316faaf1fbe68d9014f788d4"
 
 S = "${WORKDIR}/vbox_module"
 
@@ -25,6 +24,9 @@
 
 EXTRA_OEMAKE += "KERN_DIR='${WORKDIR}/${KERNEL_VERSION}/build'"
 
+# otherwise 5.2.22 builds just vboxguest
+MAKE_TARGETS = "all"
+
 addtask export_sources before do_patch after do_unpack
 
 do_export_sources() {
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch b/meta-openembedded/meta-oe/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch
deleted file mode 100644
index 63a7b78..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vim/files/0001-src-Makefile-improve-reproducibility.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 133ab27cdb17ca20ef6b0304cf30621d2bcbe757 Mon Sep 17 00:00:00 2001
-From: Mingli Yu <mingli.yu@windriver.com>
-Date: Thu, 31 Jan 2019 21:32:26 -0800
-Subject: [PATCH] src/Makefile: improve reproducibility
-
-Clear all_cflags, all_lflags, compiled_user
-and compiled_sys to avoid introducing build
-info to improve reproducibility as below:
-
-WARNING: vim-8.1.0347-r0 do_package_qa: QA Issue: File /work/core2-64-wrs-linux/vim/8.1.0347-r0/packages-split/vim/usr/bin/vim.vim in package contained reference to tmpdir [buildpaths]
-
-Upstream-Status: Inappropriate [oe specific]
-
-Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
----
- src/Makefile | 14 ++++----------
- 1 file changed, 4 insertions(+), 10 deletions(-)
-
-diff --git a/src/Makefile b/src/Makefile
-index f2fafa4dc..7148d4bd9 100644
---- a/src/Makefile
-+++ b/src/Makefile
-@@ -2845,16 +2845,10 @@ auto/pathdef.c: Makefile auto/config.mk
- 	-@echo '#include "vim.h"' >> $@
- 	-@echo 'char_u *default_vim_dir = (char_u *)"$(VIMRCLOC)";' | $(QUOTESED) >> $@
- 	-@echo 'char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR)";' | $(QUOTESED) >> $@
--	-@echo 'char_u *all_cflags = (char_u *)"$(CC) -c -I$(srcdir) $(ALL_CFLAGS)";' | $(QUOTESED) >>  $@
--	-@echo 'char_u *all_lflags = (char_u *)"$(CC) $(ALL_LIB_DIRS) $(LDFLAGS) -o $(VIMTARGET) $(ALL_LIBS) ";' | $(QUOTESED) >>  $@
--	-@echo 'char_u *compiled_user = (char_u *)"' | tr -d $(NL) >> $@
--	-@if test -n "$(COMPILEDBY)"; then \
--		echo "$(COMPILEDBY)" | tr -d $(NL) >> $@; \
--		else ((logname) 2>/dev/null || whoami) | tr -d $(NL) >> $@; fi
--	-@echo '";' >> $@
--	-@echo 'char_u *compiled_sys = (char_u *)"' | tr -d $(NL) >> $@
--	-@if test -z "$(COMPILEDBY)"; then hostname | tr -d $(NL) >> $@; fi
--	-@echo '";' >> $@
-+	-@echo 'char_u *all_cflags = (char_u *)"";' | $(QUOTESED) >>  $@
-+	-@echo 'char_u *all_lflags = (char_u *)"";' | $(QUOTESED) >>  $@
-+	-@echo 'char_u *compiled_user = (char_u *)"";' >> $@
-+	-@echo 'char_u *compiled_sys = (char_u *)"";' >> $@
- 	-@sh $(srcdir)/pathdef.sh
- 
- GUI_GTK_RES_INPUTS = \
--- 
-2.17.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/files/disable_acl_header_check.patch b/meta-openembedded/meta-oe/recipes-support/vim/files/disable_acl_header_check.patch
deleted file mode 100644
index 4720003..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vim/files/disable_acl_header_check.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 5ed25c076a1fb1889a3c50dddf29f21850b59a13 Mon Sep 17 00:00:00 2001
-From: Wenzong Fan <wenzong.fan@windriver.com> 
-Date: Tue, 26 Jun 2018 17:29:09 +0800
-Subject: [PATCH] disable acl header check
-
-Don't check 'sys/acl.h' if acl support disabled for vim/vim-tiny.
-
-Upstream-Status: pending
-
-Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- src/configure.ac | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/configure.ac b/src/configure.ac
-index 107c170..0ee86ad 100644
---- a/src/configure.ac
-+++ b/src/configure.ac
-@@ -3220,7 +3220,7 @@ AC_CHECK_HEADERS(stdint.h stdlib.h string.h \
- 	sys/systeminfo.h locale.h sys/stream.h termios.h \
- 	libc.h sys/statfs.h poll.h sys/poll.h pwd.h \
- 	utime.h sys/param.h libintl.h libgen.h \
--	util/debug.h util/msg18n.h frame.h sys/acl.h \
-+	util/debug.h util/msg18n.h frame.h \
- 	sys/access.h sys/sysinfo.h wchar.h wctype.h)
- 
- dnl sys/ptem.h depends on sys/stream.h on Solaris
-@@ -3848,6 +3848,7 @@ AC_ARG_ENABLE(acl,
- 	, [enable_acl="yes"])
- if test "$enable_acl" = "yes"; then
-   AC_MSG_RESULT(no)
-+  AC_CHECK_HEADERS(sys/acl.h)
-   AC_CHECK_LIB(posix1e, acl_get_file, [LIBS="$LIBS -lposix1e"],
- 	AC_CHECK_LIB(acl, acl_get_file, [LIBS="$LIBS -lacl"
- 		  AC_CHECK_LIB(attr, fgetxattr, LIBS="$LIBS -lattr",,)],,),)
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch b/meta-openembedded/meta-oe/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch
deleted file mode 100644
index 37914d4..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vim/files/vim-add-knob-whether-elf.h-are-checked.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 38de4bccdb8a861ffdd447f12fdab19d6d852c02 Mon Sep 17 00:00:00 2001
-From: Chong Lu <Chong.Lu@windriver.com>
-Date: Tue, 26 Jun 2018 17:34:15 +0800
-Subject: [PATCH] vim: add knob whether elf.h are checked
-
-Previously, it still was checked when there was no elf library in sysroots directory.
-Add knob to decide whether elf.h are checked or not.
-
-Upstream-Status: Pending
-
-Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- src/configure.ac | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/src/configure.ac b/src/configure.ac
-index 0ee86ad..64736f0 100644
---- a/src/configure.ac
-+++ b/src/configure.ac
-@@ -3192,11 +3192,18 @@ AC_TRY_COMPILE([#include <stdio.h>], [int x __attribute__((unused));],
- 	AC_MSG_RESULT(no))
- 
- dnl Checks for header files.
-+AC_MSG_CHECKING(whether or not to look for elf.h)
-+AC_ARG_ENABLE(elf-check,
-+        [  --enable-elf-check      If elfutils, check for elf.h [default=no]],
-+        , enable_elf_check="no")
-+AC_MSG_RESULT($enable_elf_check)
-+if test "x$enable_elf_check" != "xno"; then
- AC_CHECK_HEADER(elf.h, HAS_ELF=1)
- dnl AC_CHECK_HEADER(dwarf.h, SVR4=1)
- if test "$HAS_ELF" = 1; then
-   AC_CHECK_LIB(elf, main)
- fi
-+fi
- 
- AC_HEADER_DIRENT
- 
--- 
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/vim-tiny_8.1.0347.bb b/meta-openembedded/meta-oe/recipes-support/vim/vim-tiny_8.1.0347.bb
deleted file mode 100644
index 8b1fb7b..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vim/vim-tiny_8.1.0347.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require vim_${PV}.bb
-
-SUMMARY += " (with tiny features)"
-
-PROVIDES_remove = "xxd"
-ALTERNATIVE_${PN}_remove = "xxd"
-
-PACKAGECONFIG += "tiny"
-
-do_install() {
-    install -D -m 0755 ${S}/vim ${D}/${bindir}/vim.tiny
-}
-
-ALTERNATIVE_PRIORITY = "90"
-ALTERNATIVE_TARGET = "${bindir}/vim.tiny"
diff --git a/meta-openembedded/meta-oe/recipes-support/vim/vim_8.1.0347.bb b/meta-openembedded/meta-oe/recipes-support/vim/vim_8.1.0347.bb
deleted file mode 100644
index 4de4d8e..0000000
--- a/meta-openembedded/meta-oe/recipes-support/vim/vim_8.1.0347.bb
+++ /dev/null
@@ -1,118 +0,0 @@
-SUMMARY = "Vi IMproved - enhanced vi editor"
-SECTION = "console/utils"
-
-PROVIDES = "xxd"
-DEPENDS = "ncurses gettext-native"
-# vimdiff doesn't like busybox diff
-RSUGGESTS_${PN} = "diffutils"
-LICENSE = "vim"
-LIC_FILES_CHKSUM = "file://../runtime/doc/uganda.txt;endline=287;md5=f1f82b42360005c70b8c19b0ef493f72"
-
-SRC_URI = "git://github.com/vim/vim.git \
-           file://disable_acl_header_check.patch;patchdir=.. \
-           file://vim-add-knob-whether-elf.h-are-checked.patch;patchdir=.. \
-           file://0001-src-Makefile-improve-reproducibility.patch;patchdir=.. \
-"
-SRCREV = "f1c118be93184e8e57e3e80b1b3383f464ed649e"
-
-S = "${WORKDIR}/git/src"
-
-VIMDIR = "vim${@d.getVar('PV').split('.')[0]}${@d.getVar('PV').split('.')[1]}"
-
-inherit autotools-brokensep update-alternatives
-
-CLEANBROKEN = "1"
-
-# vim configure.in contains functions which got 'dropped' by autotools.bbclass
-do_configure () {
-    rm -f auto/*
-    touch auto/config.mk
-    aclocal
-    autoconf
-    oe_runconf
-    touch auto/configure
-    touch auto/config.mk auto/config.h
-}
-
-#Available PACKAGECONFIG options are gtkgui, acl, x11, tiny
-PACKAGECONFIG ??= ""
-PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'acl selinux', d)}"
-
-PACKAGECONFIG[gtkgui] = "--enable-gtk2-test --enable-gui=gtk2,--enable-gui=no,gtk+,"
-PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl,"
-PACKAGECONFIG[x11] = "--with-x,--without-x,xt,"
-PACKAGECONFIG[tiny] = "--with-features=tiny,--with-features=big,,"
-PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux,"
-PACKAGECONFIG[elfutils] = "--enable-elf-check,,elfutils,"
-
-EXTRA_OECONF = " \
-    --disable-gpm \
-    --disable-gtktest \
-    --disable-xim \
-    --disable-netbeans \
-    --with-tlib=ncurses \
-    ac_cv_small_wchar_t=no \
-    vim_cv_getcwd_broken=no \
-    vim_cv_memmove_handles_overlap=yes \
-    vim_cv_stat_ignores_slash=no \
-    vim_cv_terminfo=yes \
-    vim_cv_tgetent=non-zero \
-    vim_cv_toupper_broken=no \
-    vim_cv_tty_group=world \
-    STRIP=/bin/true \
-"
-
-do_install() {
-    autotools_do_install
-
-    # Work around file-rdeps picking up csh, awk, perl or python as a dep
-    chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/vim132
-    chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/mve.awk
-    chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/*.pl
-    chmod -x ${D}${datadir}/${BPN}/${VIMDIR}/tools/*.py
-
-    # Install example vimrc from runtime files
-    install -m 0644 ../runtime/vimrc_example.vim ${D}/${datadir}/${BPN}/vimrc
-
-    # we use --with-features=big as default
-    mv ${D}${bindir}/${BPN} ${D}${bindir}/${BPN}.${BPN}
-}
-
-PARALLEL_MAKEINST = ""
-
-PACKAGES =+ "${PN}-common ${PN}-syntax ${PN}-help ${PN}-tutor ${PN}-vimrc ${PN}-tools"
-FILES_${PN}-syntax = "${datadir}/${BPN}/${VIMDIR}/syntax"
-FILES_${PN}-help = "${datadir}/${BPN}/${VIMDIR}/doc"
-FILES_${PN}-tutor = "${datadir}/${BPN}/${VIMDIR}/tutor ${bindir}/${BPN}tutor"
-FILES_${PN}-vimrc = "${datadir}/${BPN}/vimrc"
-FILES_${PN}-data = "${datadir}/${BPN}"
-FILES_${PN}-tools = "${datadir}/${BPN}/${VIMDIR}/tools"
-FILES_${PN}-common = " \
-    ${datadir}/${BPN}/${VIMDIR}/*.vim \
-    ${datadir}/${BPN}/${VIMDIR}/autoload \
-    ${datadir}/${BPN}/${VIMDIR}/colors \
-    ${datadir}/${BPN}/${VIMDIR}/compiler \
-    ${datadir}/${BPN}/${VIMDIR}/ftplugin \
-    ${datadir}/${BPN}/${VIMDIR}/indent \
-    ${datadir}/${BPN}/${VIMDIR}/keymap \
-    ${datadir}/${BPN}/${VIMDIR}/lang \
-    ${datadir}/${BPN}/${VIMDIR}/macros \
-    ${datadir}/${BPN}/${VIMDIR}/plugin \
-    ${datadir}/${BPN}/${VIMDIR}/print \
-    ${datadir}/${BPN}/${VIMDIR}/spell \
-    ${datadir}/icons \
-"
-
-RDEPENDS_${BPN} = "ncurses-terminfo-base"
-# Recommend that runtime data is installed along with vim
-RRECOMMENDS_${BPN} = "${PN}-syntax ${PN}-help ${PN}-tutor ${PN}-vimrc ${PN}-common"
-
-ALTERNATIVE_${PN} = "vi vim xxd"
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE_TARGET = "${bindir}/${BPN}.${BPN}"
-ALTERNATIVE_LINK_NAME[vi] = "${base_bindir}/vi"
-ALTERNATIVE_LINK_NAME[vim] = "${bindir}/vim"
-ALTERNATIVE_TARGET[xxd] = "${bindir}/xxd"
-ALTERNATIVE_LINK_NAME[xxd] = "${bindir}/xxd"
-
-BBCLASSEXTEND = "native"