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"
