Browse Source

ssiapi: Upgrade to 1.3.0

Fix out of tree builds
Fix build with clang as well as musl
Refresh and forward port patches as needed
Update boost headers

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Khem Raj 4 years ago
parent
commit
7127971a48
20 changed files with 2080 additions and 727 deletions
  1. 116 0
      meta-oe/recipes-support/ssiapi/ssiapi/0001-Don-t-use-__GNUC_PREREQ.patch
  2. 32 0
      meta-oe/recipes-support/ssiapi/ssiapi/0001-Include-libgen.h.patch
  3. 0 342
      meta-oe/recipes-support/ssiapi/ssiapi/0001-Use-pragma-once-unconditionally.patch
  4. 57 0
      meta-oe/recipes-support/ssiapi/ssiapi/0001-log-Avoid-shadowing-functions-from-std-lib.patch
  5. 0 39
      meta-oe/recipes-support/ssiapi/ssiapi/0001-ssieventmonitor-ordered-comparison-between-pointers-.patch
  6. 0 123
      meta-oe/recipes-support/ssiapi/ssiapi/0002-Convert-macros-into-functions.patch
  7. 54 0
      meta-oe/recipes-support/ssiapi/ssiapi/0002-Use-stangard-int-types.patch
  8. 1409 0
      meta-oe/recipes-support/ssiapi/ssiapi/0002-boost-Backport-clang-support.patch
  9. 0 33
      meta-oe/recipes-support/ssiapi/ssiapi/0003-Replace-canonicalize_file_name-with-realpath-API.patch
  10. 47 0
      meta-oe/recipes-support/ssiapi/ssiapi/0003-engine-Define-discover-const-String-path-in-base-cla.patch
  11. 43 0
      meta-oe/recipes-support/ssiapi/ssiapi/0003-replace-canonicalize_file_name-with-realpath.patch
  12. 33 0
      meta-oe/recipes-support/ssiapi/ssiapi/0004-Do-not-override-flags-coming-from-build-environment.patch
  13. 0 54
      meta-oe/recipes-support/ssiapi/ssiapi/0004-engine-Fix-indentation-and-missing-semi-colon.patch
  14. 25 0
      meta-oe/recipes-support/ssiapi/ssiapi/0004-include-limits.h.patch
  15. 228 0
      meta-oe/recipes-support/ssiapi/ssiapi/0005-enable-out-of-source-tree-builds.patch
  16. 0 40
      meta-oe/recipes-support/ssiapi/ssiapi/0005-engine-Define-SENTINEL.patch
  17. 0 40
      meta-oe/recipes-support/ssiapi/ssiapi/0006-tools-Add-missing-includes-and-use-realpath-instead-.patch
  18. 0 21
      meta-oe/recipes-support/ssiapi/ssiapi/configure-cflags.patch
  19. 0 35
      meta-oe/recipes-support/ssiapi/ssiapi_1.0.1.bb
  20. 36 0
      meta-oe/recipes-support/ssiapi/ssiapi_1.3.0.bb

+ 116 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0001-Don-t-use-__GNUC_PREREQ.patch

@@ -0,0 +1,116 @@
+From dd6ad8ca447457c812809791ab8622da8646104c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 30 Aug 2019 13:07:33 -0700
+Subject: [PATCH] Don't use __GNUC_PREREQ
+
+These are not official GCC predefined macros; they are macros defined
+by GNU libc and some versions of BSD libc for internal use by their
+own headers, and we shouldn't be using them without checking for their
+availability first
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/efi/efi.h           | 4 ++--
+ lib/engine/pragma.h     | 4 ++--
+ lib/log/log.h           | 4 ++--
+ lib/mpb/machine_bytes.h | 4 ++--
+ lib/mpb/mpb.h           | 4 ++--
+ lib/orom/orom.h         | 4 ++--
+ 6 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/lib/efi/efi.h b/lib/efi/efi.h
+index 0620d9c..c8358db 100644
+--- a/lib/efi/efi.h
++++ b/lib/efi/efi.h
+@@ -33,9 +33,9 @@
+ #include <features.h>
+ #include <ssi.h>
+ 
+-#if __GNUC_PREREQ(3, 4)
++#if ((defined __GNUC__ && __GNUC__ >= 3 && __GNUC_MINOR__ >= 4) || defined __clang__)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
++#endif
+ 
+ #if defined(__cplusplus)
+ extern "C" {
+diff --git a/lib/engine/pragma.h b/lib/engine/pragma.h
+index 8205ed3..fa0b268 100644
+--- a/lib/engine/pragma.h
++++ b/lib/engine/pragma.h
+@@ -32,9 +32,9 @@
+ 
+ #include <features.h>
+ 
+-#if __GNUC_PREREQ(3, 4)
++#if ((defined __GNUC__ && __GNUC__ >= 3 && __GNUC_MINOR__ >= 4) || defined __clang__)
+ #define SSI_HAS_PRAGMA_ONCE
+-#endif /* __GNUC_PREREQ */
++#endif
+ 
+ #ifdef SSI_HAS_PRAGMA_ONCE
+ #pragma once
+diff --git a/lib/log/log.h b/lib/log/log.h
+index 66a707b..ca5000a 100644
+--- a/lib/log/log.h
++++ b/lib/log/log.h
+@@ -32,9 +32,9 @@
+ 
+ #include <features.h>
+ 
+-#if __GNUC_PREREQ(3, 4)
++#if ((defined __GNUC__ && __GNUC__ >= 3 && __GNUC_MINOR__ >= 4) || defined __clang__)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
++#endif
+ 
+ #if defined(__cplusplus)
+ extern "C" {
+diff --git a/lib/mpb/machine_bytes.h b/lib/mpb/machine_bytes.h
+index 6cb81c9..807461f 100644
+--- a/lib/mpb/machine_bytes.h
++++ b/lib/mpb/machine_bytes.h
+@@ -27,9 +27,9 @@
+  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
+-#if __GNUC_PREREQ(3, 4)
++#if ((defined __GNUC__ && __GNUC__ >= 3 && __GNUC_MINOR__ >= 4) || defined __clang__)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
++#endif
+ 
+ #ifndef __ENDIAN_H__INCLUDED__
+ #define __ENDIAN_H__INCLUDED__
+diff --git a/lib/mpb/mpb.h b/lib/mpb/mpb.h
+index 32beb21..98f82fe 100644
+--- a/lib/mpb/mpb.h
++++ b/lib/mpb/mpb.h
+@@ -27,9 +27,9 @@
+  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
+-#if __GNUC_PREREQ(3, 4)
++#if ((defined __GNUC__ && __GNUC__ >= 3 && __GNUC_MINOR__ >= 4) || defined __clang__)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
++#endif
+ 
+ #ifndef __MPB_H__INCLUDED__
+ #define __MPB_H__INCLUDED__
+diff --git a/lib/orom/orom.h b/lib/orom/orom.h
+index 4492066..16b03a6 100644
+--- a/lib/orom/orom.h
++++ b/lib/orom/orom.h
+@@ -32,9 +32,9 @@
+ 
+ #include <features.h>
+ 
+-#if __GNUC_PREREQ(3, 4)
++#if ((defined __GNUC__ && __GNUC__ >= 3 && __GNUC_MINOR__ >= 4) || defined __clang__)
+ #pragma once
+-#endif /* __GNUC_PREREQ */
++#endif
+ 
+ #if defined(__cplusplus)
+ extern "C" {

+ 32 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0001-Include-libgen.h.patch

@@ -0,0 +1,32 @@
+From 258a1d128581f185a7a5070f47df06e5c29c9db8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 30 Aug 2019 13:43:32 -0700
+Subject: [PATCH] Include libgen.h
+
+Use XPG version of basename on non gnu libc systems
+ideally posix version should be used everywhere but that
+would be upstreams choice to make
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/ssieventmonitor.cpp | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/tools/ssieventmonitor.cpp b/tools/ssieventmonitor.cpp
+index 0d11975..af7e09c 100644
+--- a/tools/ssieventmonitor.cpp
++++ b/tools/ssieventmonitor.cpp
+@@ -39,7 +39,9 @@
+ #include <sys/select.h>
+ #include <sys/wait.h>
+ #include <sys/inotify.h>
+-
++#ifndef __GLIBC__
++#include <libgen.h>
++#endif
+ extern "C" {
+ #include "lib/safeclib/safe_str_lib.h"
+ }
+-- 
+2.23.0
+

File diff suppressed because it is too large
+ 0 - 342
meta-oe/recipes-support/ssiapi/ssiapi/0001-Use-pragma-once-unconditionally.patch


+ 57 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0001-log-Avoid-shadowing-functions-from-std-lib.patch

@@ -0,0 +1,57 @@
+From 874da836bc857e5942675c59e19f4fd8ad09b13e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Aug 2019 14:08:19 -0700
+Subject: [PATCH 1/4] log: Avoid shadowing functions from std lib
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/log/log.c | 2 +-
+ lib/log/log.h | 8 ++++----
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/lib/log/log.c b/lib/log/log.c
+index 7d8e17c..18b67a5 100644
+--- a/lib/log/log.c
++++ b/lib/log/log.c
+@@ -82,7 +82,7 @@ enum log_level log_get_level(void) {
+ }
+ 
+ /* */
+-void __log(enum log_level level, const char *message) {
++void _ssiap_log(enum log_level level, const char *message) {
+     struct tm tm;
+     struct timeval tv;
+ 
+diff --git a/lib/log/log.h b/lib/log/log.h
+index d94e482..66a707b 100644
+--- a/lib/log/log.h
++++ b/lib/log/log.h
+@@ -53,13 +53,13 @@ enum log_level {
+ };
+ 
+ /* */
+-#define log(__level, __message)                                 \
++#define ssiap_log(__level, __message)                           \
+     do { if (log_get_level() >= (enum log_level)(__level))      \
+-        __log(__level, __message);                              \
++        _ssiap_log(__level, __message);                              \
+     } while (0)
+ 
+ #define dlog(__message)                                 \
+-         log(LOG_DEBUG, __message);
++         ssiap_log(LOG_DEBUG, __message);
+ 
+ /* */
+ void log_init(enum log_level level, const char *path);
+@@ -68,7 +68,7 @@ void log_init(enum log_level level, const char *path);
+ void log_fini(void);
+ 
+ /* */
+-void __log(enum log_level level, const char *message);
++void _ssiap_log(enum log_level level, const char *message);
+ 
+ /* */
+ enum log_level log_get_level(void);
+-- 
+2.23.0
+

+ 0 - 39
meta-oe/recipes-support/ssiapi/ssiapi/0001-ssieventmonitor-ordered-comparison-between-pointers-.patch

@@ -1,39 +0,0 @@
-From ea9ecf4bf305f9509d5822b3823658a40162f43c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 25 Jul 2017 19:08:21 -0700
-Subject: [PATCH] ssieventmonitor: ordered comparison between pointers and
- zero, actually with NULL
-
-Comparing which is large or small between a pointer and NULL
-however, looks completely illogical. Ordered comparison of
-two valid pointers is legit, but no pointer will be smaller
-than NULL , so comparing if a pointer is larger than NULL
-simply means if the pointer is not NULL.
-
-Fixes errors found with clang e.g.
-
-| ssieventmonitor.cpp:339:53: error: ordered comparison between pointer and zero ('char *' and 'int')
-|                 if (fgets(nextline, sizeof(nextline) - 1, mdstat) < 0) {
-|                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- tools/ssieventmonitor.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/tools/ssieventmonitor.cpp b/tools/ssieventmonitor.cpp
-index f04b8f0..7a00122 100644
---- a/tools/ssieventmonitor.cpp
-+++ b/tools/ssieventmonitor.cpp
-@@ -336,7 +336,7 @@ static int _read_mdstat(int fd)
- 	if (!strncmp(line, "md", 2)) {
- 	    if (strstr(line, INACTIVE_STR)) { /* possibly container */
- 		char nextline[1024];
--		if (fgets(nextline, sizeof(nextline) - 1, mdstat) < 0) {
-+		if (fgets(nextline, sizeof(nextline) - 1, mdstat) != (char *) NULL) {
- 		    fclose(mdstat);
- 		    return 1;
- 		}
--- 
-2.13.3
-

+ 0 - 123
meta-oe/recipes-support/ssiapi/ssiapi/0002-Convert-macros-into-functions.patch

@@ -1,123 +0,0 @@
-From 1338ee4e69c465f8f381ec3bfe5058080236edba Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 16 Jun 2017 22:08:35 -0700
-Subject: [PATCH 2/6] Convert macros into functions
-
-This helps in fixing the security format warnings
-add -fno-builtin-log
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/engine/Makefile.am |  3 ++-
- lib/log/Makefile.am    |  2 ++
- lib/log/log.h          | 34 +++++++++++++++++++++-------------
- src/Makefile.am        |  3 ++-
- 4 files changed, 27 insertions(+), 15 deletions(-)
-
-Index: ssiapi.1.0.1/lib/engine/Makefile.am
-===================================================================
---- ssiapi.1.0.1.orig/lib/engine/Makefile.am
-+++ ssiapi.1.0.1/lib/engine/Makefile.am
-@@ -113,4 +113,5 @@ libengine_la_SOURCES =          \
- libengine_la_CPPFLAGS =         \
-         -I$(top_srcdir)         \
-         -I$(top_srcdir)/include \
--        -I$(top_srcdir)/lib
-+        -I$(top_srcdir)/lib     \
-+        -fno-builtin-log
-Index: ssiapi.1.0.1/lib/log/Makefile.am
-===================================================================
---- ssiapi.1.0.1.orig/lib/log/Makefile.am
-+++ ssiapi.1.0.1/lib/log/Makefile.am
-@@ -5,3 +5,5 @@ noinst_LTLIBRARIES = liblog.la
- liblog_la_SOURCES =     \
-         log.c           \
-         log.h
-+
-+liblog_la_CPPFLAGS = -fno-builtin-log
-Index: ssiapi.1.0.1/lib/log/log.h
-===================================================================
---- ssiapi.1.0.1.orig/lib/log/log.h
-+++ ssiapi.1.0.1/lib/log/log.h
-@@ -23,7 +23,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIG
- #if defined(__cplusplus)
- extern "C" {
- #endif /* __cplusplus */
--
-+#include <stdarg.h>
- /* */
- enum log_level {
-     LOG_FIRST = 0,
-@@ -37,26 +37,34 @@ enum log_level {
- };
- 
- /* */
--#define log(__level, __format, ...)                             \
--    do { if (log_get_level() >= (enum log_level)(__level))      \
--        __log(__level, __format, ## __VA_ARGS__);               \
--    } while (0)
--
--#define dlog(__format, ...)                             \
--	log(LOG_DEBUG, __format, ## __VA_ARGS__);
-+void __log(enum log_level level, const char *format, ...)
-+    __attribute__((format(printf, 2, 3)));
- 
- /* */
--void log_init(enum log_level level, const char *path);
-+enum log_level log_get_level(void);
- 
- /* */
--void log_fini(void);
--
-+static inline void log(enum log_level __level, const char* __format, ...) {
-+    va_list ap;
-+    va_start(ap, __format);
-+    do {
-+         if (log_get_level() >= (enum log_level)(__level))
-+            __log(__level, __format, ap);
-+    } while (0);
-+    va_end(ap);
-+}
-+
-+static inline void dlog(const char* __format, ...) {
-+    va_list ap;
-+    va_start(ap, __format);
-+	log(LOG_DEBUG, __format, ap);
-+    va_end(ap);
-+}
- /* */
--void __log(enum log_level level, const char *format, ...)
--    __attribute__((format(printf, 2, 3)));
-+void log_init(enum log_level level, const char *path);
- 
- /* */
--enum log_level log_get_level(void);
-+void log_fini(void);
- 
- /* */
- void log_set_level(enum log_level level);
-Index: ssiapi.1.0.1/src/Makefile.am
-===================================================================
---- ssiapi.1.0.1.orig/src/Makefile.am
-+++ ssiapi.1.0.1/src/Makefile.am
-@@ -7,7 +7,8 @@ lib_LTLIBRARIES = libssi.la
- libssi_la_CPPFLAGS =                    \
-         -I$(top_srcdir)                 \
-         -I$(top_srcdir)/include         \
--        -I$(top_srcdir)/lib
-+        -I$(top_srcdir)/lib             \
-+        -fno-builtin-log
- 
- libssi_la_LDFLAGS =                     \
-         $(SGUTILS_LDFLAGS)              \
-Index: ssiapi.1.0.1/lib/efi/Makefile.am
-===================================================================
---- ssiapi.1.0.1.orig/lib/efi/Makefile.am
-+++ ssiapi.1.0.1/lib/efi/Makefile.am
-@@ -5,3 +5,4 @@ noinst_LTLIBRARIES = libefi.la
- libefi_la_SOURCES =             \
-     efi.cpp                       \
-     efi.h
-+libefi_la_CPPFLAGS = -fno-builtin-log

+ 54 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0002-Use-stangard-int-types.patch

@@ -0,0 +1,54 @@
+From 01a75b23382fd042673d1f00fce708ba6c67d05a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 30 Aug 2019 13:12:54 -0700
+Subject: [PATCH] Use stangard int types
+
+__unitn_* are internal to GNU libc lets use portable types
+
+Fixes
+error: unknown type name '__uint8_t'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/engine/end_device.cpp | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/lib/engine/end_device.cpp b/lib/engine/end_device.cpp
+index 5a66de9..da078bf 100644
+--- a/lib/engine/end_device.cpp
++++ b/lib/engine/end_device.cpp
+@@ -36,6 +36,7 @@
+ #include <sys/ioctl.h>
+ #include <fcntl.h>
+ #include <linux/hdreg.h>
++#include <stdint.h>
+ #include <unistd.h>
+ #include <linux/fs.h>
+ #include <climits>
+@@ -90,20 +91,20 @@ using boost::shared_ptr;
+ 
+ struct AtaCommand
+ {
+-    __uint8_t command;
+-    __uint8_t obsolete1;
+-    __uint8_t obsolete2;
+-    __uint8_t transportDependent;
++    uint8_t command;
++    uint8_t obsolete1;
++    uint8_t obsolete2;
++    uint8_t transportDependent;
+ };
+ 
+ struct AtaIdentifyCall
+ {
+     AtaCommand command;
+-    __uint16_t data[256];
++    uint16_t data[256];
+ };
+ 
+ namespace {
+-    __uint16_t swap(__uint16_t value)
++    uint16_t swap(uint16_t value)
+     {
+         return (value >> 8) | (value << 8);
+     }

+ 1409 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0002-boost-Backport-clang-support.patch

@@ -0,0 +1,1409 @@
+From ef90544f8df369781a6ef094330c9cfa9f0ee1e4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Aug 2019 14:09:11 -0700
+Subject: [PATCH 2/4] boost: Backport clang support
+
+backport headers from boost 1.59
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/boost/config/compiler/clang.hpp           | 272 +++++++++
+ lib/boost/config/stdlib/libcpp.hpp            |  80 +++
+ lib/boost/cstdint.hpp                         | 542 ++++++++++++++++++
+ .../detail/sp_counted_base_clang.hpp          | 140 +++++
+ 4 files changed, 1034 insertions(+)
+ create mode 100644 lib/boost/config/compiler/clang.hpp
+ create mode 100644 lib/boost/config/stdlib/libcpp.hpp
+ create mode 100644 lib/boost/cstdint.hpp
+ create mode 100644 lib/boost/smart_ptr/detail/sp_counted_base_clang.hpp
+
+--- /dev/null
++++ b/lib/boost/config/compiler/clang.hpp
+@@ -0,0 +1,272 @@
++
++// (C) Copyright Douglas Gregor 2010
++//
++//  Use, modification and distribution are subject to the
++//  Boost Software License, Version 1.0. (See accompanying file
++//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
++
++//  See http://www.boost.org for most recent version.
++
++// Clang compiler setup.
++
++#define BOOST_HAS_PRAGMA_ONCE
++
++// Detecting `-fms-extension` compiler flag assuming that _MSC_VER defined when that flag is used.
++#if defined (_MSC_VER) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4))
++#   define BOOST_HAS_PRAGMA_DETECT_MISMATCH
++#endif
++
++// When compiling with clang before __has_extension was defined,
++// even if one writes 'defined(__has_extension) && __has_extension(xxx)',
++// clang reports a compiler error. So the only workaround found is:
++
++#ifndef __has_extension
++#define __has_extension __has_feature
++#endif
++
++#if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS)
++#  define BOOST_NO_EXCEPTIONS
++#endif
++
++#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_RTTI)
++#  define BOOST_NO_RTTI
++#endif
++
++#if !__has_feature(cxx_rtti) && !defined(BOOST_NO_TYPEID)
++#  define BOOST_NO_TYPEID
++#endif
++
++#if defined(__int64) && !defined(__GNUC__)
++#  define BOOST_HAS_MS_INT64
++#endif
++
++#define BOOST_HAS_NRVO
++
++// Branch prediction hints
++#if defined(__has_builtin)
++#if __has_builtin(__builtin_expect)
++#define BOOST_LIKELY(x) __builtin_expect(x, 1)
++#define BOOST_UNLIKELY(x) __builtin_expect(x, 0)
++#endif
++#endif
++
++// Clang supports "long long" in all compilation modes.
++#define BOOST_HAS_LONG_LONG
++
++//
++// We disable this if the compiler is really nvcc as it
++// doesn't actually support __int128 as of CUDA_VERSION=5000
++// even though it defines __SIZEOF_INT128__.
++// See https://svn.boost.org/trac/boost/ticket/10418
++// Only re-enable this for nvcc if you're absolutely sure
++// of the circumstances under which it's supported:
++//
++#if defined(__SIZEOF_INT128__) && !defined(__CUDACC__)
++#  define BOOST_HAS_INT128
++#endif
++
++
++//
++// Dynamic shared object (DSO) and dynamic-link library (DLL) support
++//
++#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32)
++#  define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default")))
++#  define BOOST_SYMBOL_IMPORT
++#  define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default")))
++#endif
++
++//
++// The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
++// between switch labels.
++//
++#if __cplusplus >= 201103L && defined(__has_warning)
++#  if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
++#    define BOOST_FALLTHROUGH [[clang::fallthrough]]
++#  endif
++#endif
++
++#if !__has_feature(cxx_auto_type)
++#  define BOOST_NO_CXX11_AUTO_DECLARATIONS
++#  define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS
++#endif
++
++//
++// Currently clang on Windows using VC++ RTL does not support C++11's char16_t or char32_t
++//
++#if defined(_MSC_VER) || !(defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L)
++#  define BOOST_NO_CXX11_CHAR16_T
++#  define BOOST_NO_CXX11_CHAR32_T
++#endif
++
++#if !__has_feature(cxx_constexpr)
++#  define BOOST_NO_CXX11_CONSTEXPR
++#endif
++
++#if !__has_feature(cxx_decltype)
++#  define BOOST_NO_CXX11_DECLTYPE
++#endif
++
++#if !__has_feature(cxx_decltype_incomplete_return_types)
++#  define BOOST_NO_CXX11_DECLTYPE_N3276
++#endif
++
++#if !__has_feature(cxx_defaulted_functions)
++#  define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS
++#endif
++
++#if !__has_feature(cxx_deleted_functions)
++#  define BOOST_NO_CXX11_DELETED_FUNCTIONS
++#endif
++
++#if !__has_feature(cxx_explicit_conversions)
++#  define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
++#endif
++
++#if !__has_feature(cxx_default_function_template_args)
++#  define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS
++#endif
++
++#if !__has_feature(cxx_generalized_initializers)
++#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
++#endif
++
++#if !__has_feature(cxx_lambdas)
++#  define BOOST_NO_CXX11_LAMBDAS
++#endif
++
++#if !__has_feature(cxx_local_type_template_args)
++#  define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS
++#endif
++
++#if !__has_feature(cxx_noexcept)
++#  define BOOST_NO_CXX11_NOEXCEPT
++#endif
++
++#if !__has_feature(cxx_nullptr)
++#  define BOOST_NO_CXX11_NULLPTR
++#endif
++
++#if !__has_feature(cxx_range_for)
++#  define BOOST_NO_CXX11_RANGE_BASED_FOR
++#endif
++
++#if !__has_feature(cxx_raw_string_literals)
++#  define BOOST_NO_CXX11_RAW_LITERALS
++#endif
++
++#if !__has_feature(cxx_reference_qualified_functions)
++#  define BOOST_NO_CXX11_REF_QUALIFIERS
++#endif
++
++#if !__has_feature(cxx_generalized_initializers)
++#  define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX
++#endif
++
++#if !__has_feature(cxx_rvalue_references)
++#  define BOOST_NO_CXX11_RVALUE_REFERENCES
++#endif
++
++#if !__has_feature(cxx_strong_enums)
++#  define BOOST_NO_CXX11_SCOPED_ENUMS
++#endif
++
++#if !__has_feature(cxx_static_assert)
++#  define BOOST_NO_CXX11_STATIC_ASSERT
++#endif
++
++#if !__has_feature(cxx_alias_templates)
++#  define BOOST_NO_CXX11_TEMPLATE_ALIASES
++#endif
++
++#if !__has_feature(cxx_unicode_literals)
++#  define BOOST_NO_CXX11_UNICODE_LITERALS
++#endif
++
++#if !__has_feature(cxx_variadic_templates)
++#  define BOOST_NO_CXX11_VARIADIC_TEMPLATES
++#endif
++
++#if !__has_feature(cxx_user_literals)
++#  define BOOST_NO_CXX11_USER_DEFINED_LITERALS
++#endif
++
++#if !__has_feature(cxx_alignas)
++#  define BOOST_NO_CXX11_ALIGNAS
++#endif
++
++#if !__has_feature(cxx_trailing_return)
++#  define BOOST_NO_CXX11_TRAILING_RESULT_TYPES
++#endif
++
++#if !__has_feature(cxx_inline_namespaces)
++#  define BOOST_NO_CXX11_INLINE_NAMESPACES
++#endif
++
++#if !__has_feature(cxx_override_control)
++#  define BOOST_NO_CXX11_FINAL
++#endif
++
++#if !(__has_feature(__cxx_binary_literals__) || __has_extension(__cxx_binary_literals__))
++#  define BOOST_NO_CXX14_BINARY_LITERALS
++#endif
++
++#if !__has_feature(__cxx_decltype_auto__)
++#  define BOOST_NO_CXX14_DECLTYPE_AUTO
++#endif
++
++#if !__has_feature(__cxx_aggregate_nsdmi__)
++#  define BOOST_NO_CXX14_AGGREGATE_NSDMI
++#endif
++
++#if !__has_feature(__cxx_init_captures__)
++#  define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES
++#endif
++
++#if !__has_feature(__cxx_generic_lambdas__)
++#  define BOOST_NO_CXX14_GENERIC_LAMBDAS
++#endif
++
++// clang < 3.5 has a defect with dependent type, like following.
++//
++//  template <class T>
++//  constexpr typename enable_if<pred<T> >::type foo(T &)
++//  { } // error: no return statement in constexpr function
++//
++// This issue also affects C++11 mode, but C++11 constexpr requires return stmt.
++// Therefore we don't care such case.
++//
++// Note that we can't check Clang version directly as the numbering system changes depending who's
++// creating the Clang release (see https://github.com/boostorg/config/pull/39#issuecomment-59927873)
++// so instead verify that we have a feature that was introduced at the same time as working C++14
++// constexpr (generic lambda's in this case):
++//
++#if !__has_feature(__cxx_generic_lambdas__) || !__has_feature(__cxx_relaxed_constexpr__)
++#  define BOOST_NO_CXX14_CONSTEXPR
++#endif
++
++#if !__has_feature(__cxx_return_type_deduction__)
++#  define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION
++#endif
++
++#if !__has_feature(__cxx_variable_templates__)
++#  define BOOST_NO_CXX14_VARIABLE_TEMPLATES
++#endif
++
++#if __cplusplus < 201400
++// All versions with __cplusplus above this value seem to support this:
++#  define BOOST_NO_CXX14_DIGIT_SEPARATORS
++#endif
++
++
++// Unused attribute:
++#if defined(__GNUC__) && (__GNUC__ >= 4)
++#  define BOOST_ATTRIBUTE_UNUSED __attribute__((unused))
++#endif
++
++#ifndef BOOST_COMPILER
++#  define BOOST_COMPILER "Clang version " __clang_version__
++#endif
++
++// Macro used to identify the Clang compiler.
++#define BOOST_CLANG 1
++
+--- /dev/null
++++ b/lib/boost/config/stdlib/libcpp.hpp
+@@ -0,0 +1,80 @@
++//  (C) Copyright Christopher Jefferson 2011.
++//  Use, modification and distribution are subject to the
++//  Boost Software License, Version 1.0. (See accompanying file
++//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
++
++//  See http://www.boost.org for most recent version.
++
++//  config for libc++
++//  Might need more in here later.
++
++#if !defined(_LIBCPP_VERSION)
++#  include <ciso646>
++#  if !defined(_LIBCPP_VERSION)
++#      error "This is not libc++!"
++#  endif
++#endif
++
++#define BOOST_STDLIB "libc++ version " BOOST_STRINGIZE(_LIBCPP_VERSION)
++
++#define BOOST_HAS_THREADS
++
++#ifdef _LIBCPP_HAS_NO_VARIADICS
++#    define BOOST_NO_CXX11_HDR_TUPLE
++#endif
++
++// BOOST_NO_CXX11_ALLOCATOR should imply no support for the C++11
++// allocator model. The C++11 allocator model requires a conforming
++// std::allocator_traits which is only possible with C++11 template
++// aliases since members rebind_alloc and rebind_traits require it.
++#if defined(_LIBCPP_HAS_NO_TEMPLATE_ALIASES)
++#    define BOOST_NO_CXX11_ALLOCATOR
++#endif
++
++#if __cplusplus < 201103
++#  define BOOST_NO_CXX11_HDR_ARRAY
++#  define BOOST_NO_CXX11_HDR_CODECVT
++#  define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE
++#  define BOOST_NO_CXX11_HDR_FORWARD_LIST
++#  define BOOST_NO_CXX11_HDR_INITIALIZER_LIST
++#  define BOOST_NO_CXX11_HDR_MUTEX
++#  define BOOST_NO_CXX11_HDR_RANDOM
++#  define BOOST_NO_CXX11_HDR_RATIO
++#  define BOOST_NO_CXX11_HDR_REGEX
++#  define BOOST_NO_CXX11_HDR_SYSTEM_ERROR
++#  define BOOST_NO_CXX11_HDR_THREAD
++#  define BOOST_NO_CXX11_HDR_TUPLE
++#  define BOOST_NO_CXX11_HDR_TYPEINDEX
++#  define BOOST_NO_CXX11_HDR_UNORDERED_MAP
++#  define BOOST_NO_CXX11_HDR_UNORDERED_SET
++#  define BOOST_NO_CXX11_NUMERIC_LIMITS
++#  define BOOST_NO_CXX11_ALLOCATOR
++#  define BOOST_NO_CXX11_SMART_PTR
++#  define BOOST_NO_CXX11_HDR_FUNCTIONAL
++#  define BOOST_NO_CXX11_STD_ALIGN
++#  define BOOST_NO_CXX11_ADDRESSOF
++#endif
++
++//
++// These appear to be unusable/incomplete so far:
++//
++#  define BOOST_NO_CXX11_HDR_CHRONO
++#  define BOOST_NO_CXX11_HDR_FUTURE
++#  define BOOST_NO_CXX11_HDR_TYPE_TRAITS
++#  define BOOST_NO_CXX11_ATOMIC_SMART_PTR
++#  define BOOST_NO_CXX11_HDR_ATOMIC
++
++// libc++ uses a non-standard messages_base
++#define BOOST_NO_STD_MESSAGES
++
++#if defined(__has_include)
++#if !__has_include(<shared_mutex>)
++#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
++#elif __cplusplus <= 201103
++#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
++#endif
++#elif __cplusplus < 201402
++#  define BOOST_NO_CXX14_HDR_SHARED_MUTEX
++#endif
++
++//  --- end ---
+--- /dev/null
++++ b/lib/boost/cstdint.hpp
+@@ -0,0 +1,542 @@
++//  boost cstdint.hpp header file  ------------------------------------------//
++
++//  (C) Copyright Beman Dawes 1999.
++//  (C) Copyright Jens Mauer 2001
++//  (C) Copyright John Maddock 2001
++//  Distributed under the Boost
++//  Software License, Version 1.0. (See accompanying file
++//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
++
++//  See http://www.boost.org/libs/integer for documentation.
++
++//  Revision History
++//   31 Oct 01  use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.)
++//   16 Apr 01  check LONGLONG_MAX when looking for "long long" (Jens Maurer)
++//   23 Jan 01  prefer "long" over "int" for int32_t and intmax_t (Jens Maurer)
++//   12 Nov 00  Merged <boost/stdint.h> (Jens Maurer)
++//   23 Sep 00  Added INTXX_C macro support (John Maddock).
++//   22 Sep 00  Better 64-bit support (John Maddock)
++//   29 Jun 00  Reimplement to avoid including stdint.h within namespace boost
++//    8 Aug 99  Initial version (Beman Dawes)
++
++
++#ifndef BOOST_CSTDINT_HPP
++#define BOOST_CSTDINT_HPP
++
++//
++// Since we always define the INT#_C macros as per C++0x,
++// define __STDC_CONSTANT_MACROS so that <stdint.h> does the right
++// thing if possible, and so that the user knows that the macros
++// are actually defined as per C99.
++//
++#ifndef __STDC_CONSTANT_MACROS
++#  define __STDC_CONSTANT_MACROS
++#endif
++
++#include <boost/config.hpp>
++
++//
++// Note that GLIBC is a bit inconsistent about whether int64_t is defined or not
++// depending upon what headers happen to have been included first...
++// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.
++// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990
++//
++#if defined(BOOST_HAS_STDINT_H)					\
++  && (!defined(__GLIBC__)					\
++      || defined(__GLIBC_HAVE_LONG_LONG)			\
++      || (defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 17)))))
++
++// The following #include is an implementation artifact; not part of interface.
++# ifdef __hpux
++// HP-UX has a vaguely nice <stdint.h> in a non-standard location
++#   include <inttypes.h>
++#   ifdef __STDC_32_MODE__
++      // this is triggered with GCC, because it defines __cplusplus < 199707L
++#     define BOOST_NO_INT64_T
++#   endif
++# elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)
++#   include <inttypes.h>
++# else
++#   include <stdint.h>
++
++// There is a bug in Cygwin two _C macros
++#   if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__)
++#     undef INTMAX_C
++#     undef UINTMAX_C
++#     define INTMAX_C(c) c##LL
++#     define UINTMAX_C(c) c##ULL
++#   endif
++
++# endif
++
++#ifdef __QNX__
++
++// QNX (Dinkumware stdlib) defines these as non-standard names.
++// Reflect to the standard names.
++
++typedef ::intleast8_t int_least8_t;
++typedef ::intfast8_t int_fast8_t;
++typedef ::uintleast8_t uint_least8_t;
++typedef ::uintfast8_t uint_fast8_t;
++
++typedef ::intleast16_t int_least16_t;
++typedef ::intfast16_t int_fast16_t;
++typedef ::uintleast16_t uint_least16_t;
++typedef ::uintfast16_t uint_fast16_t;
++
++typedef ::intleast32_t int_least32_t;
++typedef ::intfast32_t int_fast32_t;
++typedef ::uintleast32_t uint_least32_t;
++typedef ::uintfast32_t uint_fast32_t;
++
++# ifndef BOOST_NO_INT64_T
++
++typedef ::intleast64_t int_least64_t;
++typedef ::intfast64_t int_fast64_t;
++typedef ::uintleast64_t uint_least64_t;
++typedef ::uintfast64_t uint_fast64_t;
++
++# endif
++
++#endif
++
++namespace boost
++{
++
++  using ::int8_t;
++  using ::int_least8_t;
++  using ::int_fast8_t;
++  using ::uint8_t;
++  using ::uint_least8_t;
++  using ::uint_fast8_t;
++
++  using ::int16_t;
++  using ::int_least16_t;
++  using ::int_fast16_t;
++  using ::uint16_t;
++  using ::uint_least16_t;
++  using ::uint_fast16_t;
++
++  using ::int32_t;
++  using ::int_least32_t;
++  using ::int_fast32_t;
++  using ::uint32_t;
++  using ::uint_least32_t;
++  using ::uint_fast32_t;
++
++# ifndef BOOST_NO_INT64_T
++
++  using ::int64_t;
++  using ::int_least64_t;
++  using ::int_fast64_t;
++  using ::uint64_t;
++  using ::uint_least64_t;
++  using ::uint_fast64_t;
++
++# endif
++
++  using ::intmax_t;
++  using ::uintmax_t;
++
++} // namespace boost
++
++#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) || defined(__VMS) || defined(__SOLARIS9__) || defined(__NetBSD__)
++// FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need.
++# include <inttypes.h>
++
++namespace boost {
++
++  using ::int8_t;
++  typedef int8_t int_least8_t;
++  typedef int8_t int_fast8_t;
++  using ::uint8_t;
++  typedef uint8_t uint_least8_t;
++  typedef uint8_t uint_fast8_t;
++
++  using ::int16_t;
++  typedef int16_t int_least16_t;
++  typedef int16_t int_fast16_t;
++  using ::uint16_t;
++  typedef uint16_t uint_least16_t;
++  typedef uint16_t uint_fast16_t;
++
++  using ::int32_t;
++  typedef int32_t int_least32_t;
++  typedef int32_t int_fast32_t;
++  using ::uint32_t;
++  typedef uint32_t uint_least32_t;
++  typedef uint32_t uint_fast32_t;
++
++# ifndef BOOST_NO_INT64_T
++
++  using ::int64_t;
++  typedef int64_t int_least64_t;
++  typedef int64_t int_fast64_t;
++  using ::uint64_t;
++  typedef uint64_t uint_least64_t;
++  typedef uint64_t uint_fast64_t;
++
++  typedef int64_t intmax_t;
++  typedef uint64_t uintmax_t;
++
++# else
++
++  typedef int32_t intmax_t;
++  typedef uint32_t uintmax_t;
++
++# endif
++
++} // namespace boost
++
++#else  // BOOST_HAS_STDINT_H
++
++# include <boost/limits.hpp> // implementation artifact; not part of interface
++# include <limits.h>         // needed for limits macros
++
++
++namespace boost
++{
++
++//  These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit
++//  platforms.  For other systems, they will have to be hand tailored.
++//
++//  Because the fast types are assumed to be the same as the undecorated types,
++//  it may be possible to hand tailor a more efficient implementation.  Such
++//  an optimization may be illusionary; on the Intel x86-family 386 on, for
++//  example, byte arithmetic and load/stores are as fast as "int" sized ones.
++
++//  8-bit types  ------------------------------------------------------------//
++
++# if UCHAR_MAX == 0xff
++     typedef signed char     int8_t;
++     typedef signed char     int_least8_t;
++     typedef signed char     int_fast8_t;
++     typedef unsigned char   uint8_t;
++     typedef unsigned char   uint_least8_t;
++     typedef unsigned char   uint_fast8_t;
++# else
++#    error defaults not correct; you must hand modify boost/cstdint.hpp
++# endif
++
++//  16-bit types  -----------------------------------------------------------//
++
++# if USHRT_MAX == 0xffff
++#  if defined(__crayx1)
++     // The Cray X1 has a 16-bit short, however it is not recommend
++     // for use in performance critical code.
++     typedef short           int16_t;
++     typedef short           int_least16_t;
++     typedef int             int_fast16_t;
++     typedef unsigned short  uint16_t;
++     typedef unsigned short  uint_least16_t;
++     typedef unsigned int    uint_fast16_t;
++#  else
++     typedef short           int16_t;
++     typedef short           int_least16_t;
++     typedef short           int_fast16_t;
++     typedef unsigned short  uint16_t;
++     typedef unsigned short  uint_least16_t;
++     typedef unsigned short  uint_fast16_t;
++#  endif
++# elif (USHRT_MAX == 0xffffffff) && defined(__MTA__)
++      // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified
++      // MTA / XMT does support the following non-standard integer types
++      typedef __short16           int16_t;
++      typedef __short16           int_least16_t;
++      typedef __short16           int_fast16_t;
++      typedef unsigned __short16  uint16_t;
++      typedef unsigned __short16  uint_least16_t;
++      typedef unsigned __short16  uint_fast16_t;
++# elif (USHRT_MAX == 0xffffffff) && defined(CRAY)
++     // no 16-bit types on Cray:
++     typedef short           int_least16_t;
++     typedef short           int_fast16_t;
++     typedef unsigned short  uint_least16_t;
++     typedef unsigned short  uint_fast16_t;
++# else
++#    error defaults not correct; you must hand modify boost/cstdint.hpp
++# endif
++
++//  32-bit types  -----------------------------------------------------------//
++
++# if UINT_MAX == 0xffffffff
++     typedef int             int32_t;
++     typedef int             int_least32_t;
++     typedef int             int_fast32_t;
++     typedef unsigned int    uint32_t;
++     typedef unsigned int    uint_least32_t;
++     typedef unsigned int    uint_fast32_t;
++# elif (USHRT_MAX == 0xffffffff)
++     typedef short             int32_t;
++     typedef short             int_least32_t;
++     typedef short             int_fast32_t;
++     typedef unsigned short    uint32_t;
++     typedef unsigned short    uint_least32_t;
++     typedef unsigned short    uint_fast32_t;
++# elif ULONG_MAX == 0xffffffff
++     typedef long            int32_t;
++     typedef long            int_least32_t;
++     typedef long            int_fast32_t;
++     typedef unsigned long   uint32_t;
++     typedef unsigned long   uint_least32_t;
++     typedef unsigned long   uint_fast32_t;
++# elif (UINT_MAX == 0xffffffffffffffff) && defined(__MTA__)
++      // Integers are 64 bits on the MTA / XMT
++      typedef __int32           int32_t;
++      typedef __int32           int_least32_t;
++      typedef __int32           int_fast32_t;
++      typedef unsigned __int32  uint32_t;
++      typedef unsigned __int32  uint_least32_t;
++      typedef unsigned __int32  uint_fast32_t;
++# else
++#    error defaults not correct; you must hand modify boost/cstdint.hpp
++# endif
++
++//  64-bit types + intmax_t and uintmax_t  ----------------------------------//
++
++# if defined(BOOST_HAS_LONG_LONG) && \
++   !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \
++   (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \
++   (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
++#    if defined(__hpux)
++     // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
++#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL)
++                                                                 // 2**64 - 1
++#    else
++#       error defaults not correct; you must hand modify boost/cstdint.hpp
++#    endif
++
++     typedef  ::boost::long_long_type            intmax_t;
++     typedef  ::boost::ulong_long_type   uintmax_t;
++     typedef  ::boost::long_long_type            int64_t;
++     typedef  ::boost::long_long_type            int_least64_t;
++     typedef  ::boost::long_long_type            int_fast64_t;
++     typedef  ::boost::ulong_long_type   uint64_t;
++     typedef  ::boost::ulong_long_type   uint_least64_t;
++     typedef  ::boost::ulong_long_type   uint_fast64_t;
++
++# elif ULONG_MAX != 0xffffffff
++
++#    if ULONG_MAX == 18446744073709551615 // 2**64 - 1
++     typedef long                 intmax_t;
++     typedef unsigned long        uintmax_t;
++     typedef long                 int64_t;
++     typedef long                 int_least64_t;
++     typedef long                 int_fast64_t;
++     typedef unsigned long        uint64_t;
++     typedef unsigned long        uint_least64_t;
++     typedef unsigned long        uint_fast64_t;
++#    else
++#       error defaults not correct; you must hand modify boost/cstdint.hpp
++#    endif
++# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)
++     __extension__ typedef long long            intmax_t;
++     __extension__ typedef unsigned long long   uintmax_t;
++     __extension__ typedef long long            int64_t;
++     __extension__ typedef long long            int_least64_t;
++     __extension__ typedef long long            int_fast64_t;
++     __extension__ typedef unsigned long long   uint64_t;
++     __extension__ typedef unsigned long long   uint_least64_t;
++     __extension__ typedef unsigned long long   uint_fast64_t;
++# elif defined(BOOST_HAS_MS_INT64)
++     //
++     // we have Borland/Intel/Microsoft __int64:
++     //
++     typedef __int64             intmax_t;
++     typedef unsigned __int64    uintmax_t;
++     typedef __int64             int64_t;
++     typedef __int64             int_least64_t;
++     typedef __int64             int_fast64_t;
++     typedef unsigned __int64    uint64_t;
++     typedef unsigned __int64    uint_least64_t;
++     typedef unsigned __int64    uint_fast64_t;
++# else // assume no 64-bit integers
++#  define BOOST_NO_INT64_T
++     typedef int32_t              intmax_t;
++     typedef uint32_t             uintmax_t;
++# endif
++
++} // namespace boost
++
++
++#endif // BOOST_HAS_STDINT_H
++
++// intptr_t/uintptr_t are defined separately because they are optional and not universally available
++#if defined(BOOST_WINDOWS) && !defined(_WIN32_WCE) && !defined(BOOST_HAS_STDINT_H)
++// Older MSVC don't have stdint.h and have intptr_t/uintptr_t defined in stddef.h
++#include <stddef.h>
++#endif
++
++// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
++#if !defined(__PGIC__)
++
++#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
++    || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
++    || defined(__CYGWIN__) \
++    || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
++    || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(sun)
++
++namespace boost {
++    using ::intptr_t;
++    using ::uintptr_t;
++}
++#define BOOST_HAS_INTPTR_T
++
++// Clang pretends to be GCC, so it'll match this condition
++#elif defined(__GNUC__) && defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)
++
++namespace boost {
++    typedef __INTPTR_TYPE__ intptr_t;
++    typedef __UINTPTR_TYPE__ uintptr_t;
++}
++#define BOOST_HAS_INTPTR_T
++
++#endif
++
++#endif // !defined(__PGIC__)
++
++#endif // BOOST_CSTDINT_HPP
++
++
++/****************************************************
++
++Macro definition section:
++
++Added 23rd September 2000 (John Maddock).
++Modified 11th September 2001 to be excluded when
++BOOST_HAS_STDINT_H is defined (John Maddock).
++Modified 11th Dec 2009 to always define the
++INT#_C macros if they're not already defined (John Maddock).
++
++******************************************************/
++
++#if !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && \
++   (!defined(INT8_C) || !defined(INT16_C) || !defined(INT32_C) || !defined(INT64_C))
++//
++// For the following code we get several warnings along the lines of:
++//
++// boost/cstdint.hpp:428:35: error: use of C99 long long integer constant
++//
++// So we declare this a system header to suppress these warnings.
++//
++#if defined(__GNUC__) && (__GNUC__ >= 4)
++#pragma GCC system_header
++#endif
++
++#include <limits.h>
++# define BOOST__STDC_CONSTANT_MACROS_DEFINED
++# if defined(BOOST_HAS_MS_INT64)
++//
++// Borland/Intel/Microsoft compilers have width specific suffixes:
++//
++#ifndef INT8_C
++#  define INT8_C(value)     value##i8
++#endif
++#ifndef INT16_C
++#  define INT16_C(value)    value##i16
++#endif
++#ifndef INT32_C
++#  define INT32_C(value)    value##i32
++#endif
++#ifndef INT64_C
++#  define INT64_C(value)    value##i64
++#endif
++#  ifdef __BORLANDC__
++    // Borland bug: appending ui8 makes the type a signed char
++#   define UINT8_C(value)    static_cast<unsigned char>(value##u)
++#  else
++#   define UINT8_C(value)    value##ui8
++#  endif
++#ifndef UINT16_C
++#  define UINT16_C(value)   value##ui16
++#endif
++#ifndef UINT32_C
++#  define UINT32_C(value)   value##ui32
++#endif
++#ifndef UINT64_C
++#  define UINT64_C(value)   value##ui64
++#endif
++#ifndef INTMAX_C
++#  define INTMAX_C(value)   value##i64
++#  define UINTMAX_C(value)  value##ui64
++#endif
++
++# else
++//  do it the old fashioned way:
++
++//  8-bit types  ------------------------------------------------------------//
++
++#  if (UCHAR_MAX == 0xff) && !defined(INT8_C)
++#   define INT8_C(value) static_cast<boost::int8_t>(value)
++#   define UINT8_C(value) static_cast<boost::uint8_t>(value##u)
++#  endif
++
++//  16-bit types  -----------------------------------------------------------//
++
++#  if (USHRT_MAX == 0xffff) && !defined(INT16_C)
++#   define INT16_C(value) static_cast<boost::int16_t>(value)
++#   define UINT16_C(value) static_cast<boost::uint16_t>(value##u)
++#  endif
++
++//  32-bit types  -----------------------------------------------------------//
++#ifndef INT32_C
++#  if (UINT_MAX == 0xffffffff)
++#   define INT32_C(value) value
++#   define UINT32_C(value) value##u
++#  elif ULONG_MAX == 0xffffffff
++#   define INT32_C(value) value##L
++#   define UINT32_C(value) value##uL
++#  endif
++#endif
++
++//  64-bit types + intmax_t and uintmax_t  ----------------------------------//
++#ifndef INT64_C
++#  if defined(BOOST_HAS_LONG_LONG) && \
++    (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX) || defined(_ULLONG_MAX) || defined(_LLONG_MAX))
++
++#    if defined(__hpux)
++        // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
++#       define INT64_C(value) value##LL
++#       define UINT64_C(value) value##uLL
++#    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) ||  \
++        (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) ||  \
++        (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) || \
++        (defined(_ULLONG_MAX) && _ULLONG_MAX == 18446744073709551615ULL) || \
++        (defined(_LLONG_MAX) && _LLONG_MAX == 9223372036854775807LL)
++
++#       define INT64_C(value) value##LL
++#       define UINT64_C(value) value##uLL
++#    else
++#       error defaults not correct; you must hand modify boost/cstdint.hpp
++#    endif
++#  elif ULONG_MAX != 0xffffffff
++
++#    if ULONG_MAX == 18446744073709551615U // 2**64 - 1
++#       define INT64_C(value) value##L
++#       define UINT64_C(value) value##uL
++#    else
++#       error defaults not correct; you must hand modify boost/cstdint.hpp
++#    endif
++#  elif defined(BOOST_HAS_LONG_LONG)
++     // Usual macros not defined, work things out for ourselves:
++#    if(~0uLL == 18446744073709551615ULL)
++#       define INT64_C(value) value##LL
++#       define UINT64_C(value) value##uLL
++#    else
++#       error defaults not correct; you must hand modify boost/cstdint.hpp
++#    endif
++#  else
++#    error defaults not correct; you must hand modify boost/cstdint.hpp
++#  endif
++
++#  ifdef BOOST_NO_INT64_T
++#   define INTMAX_C(value) INT32_C(value)
++#   define UINTMAX_C(value) UINT32_C(value)
++#  else
++#   define INTMAX_C(value) INT64_C(value)
++#   define UINTMAX_C(value) UINT64_C(value)
++#  endif
++#endif
++# endif // Borland/Microsoft specific width suffixes
++
++#endif // INT#_C macros.
+--- /dev/null
++++ b/lib/boost/smart_ptr/detail/sp_counted_base_clang.hpp
+@@ -0,0 +1,140 @@
++#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED
++#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED
++
++// MS compatible compilers support #pragma once
++
++#if defined(_MSC_VER) && (_MSC_VER >= 1020)
++# pragma once
++#endif
++
++//  detail/sp_counted_base_clang.hpp - __c11 clang intrinsics
++//
++//  Copyright (c) 2007, 2013, 2015 Peter Dimov
++//
++//  Distributed under the Boost Software License, Version 1.0.
++//  See accompanying file LICENSE_1_0.txt or copy at
++//  http://www.boost.org/LICENSE_1_0.txt
++
++#include <boost/detail/sp_typeinfo.hpp>
++#include <boost/cstdint.hpp>
++
++namespace boost
++{
++
++namespace detail
++{
++
++typedef _Atomic( boost::int_least32_t ) atomic_int_least32_t;
++
++inline void atomic_increment( atomic_int_least32_t * pw )
++{
++    __c11_atomic_fetch_add( pw, 1, __ATOMIC_RELAXED );
++}
++
++inline boost::int_least32_t atomic_decrement( atomic_int_least32_t * pw )
++{
++    return __c11_atomic_fetch_sub( pw, 1, __ATOMIC_ACQ_REL );
++}
++
++inline boost::int_least32_t atomic_conditional_increment( atomic_int_least32_t * pw )
++{
++    // long r = *pw;
++    // if( r != 0 ) ++*pw;
++    // return r;
++
++    boost::int_least32_t r = __c11_atomic_load( pw, __ATOMIC_RELAXED );
++
++    for( ;; )
++    {
++        if( r == 0 )
++        {
++            return r;
++        }
++
++        if( __c11_atomic_compare_exchange_weak( pw, &r, r + 1, __ATOMIC_RELAXED, __ATOMIC_RELAXED ) )
++        {
++            return r;
++        }
++    }
++}
++
++class sp_counted_base
++{
++private:
++
++    sp_counted_base( sp_counted_base const & );
++    sp_counted_base & operator= ( sp_counted_base const & );
++
++    atomic_int_least32_t use_count_;	// #shared
++    atomic_int_least32_t weak_count_;	// #weak + (#shared != 0)
++
++public:
++
++    sp_counted_base()
++    {
++        __c11_atomic_init( &use_count_, 1 );
++        __c11_atomic_init( &weak_count_, 1 );
++    }
++
++    virtual ~sp_counted_base() // nothrow
++    {
++    }
++
++    // dispose() is called when use_count_ drops to zero, to release
++    // the resources managed by *this.
++
++    virtual void dispose() = 0; // nothrow
++
++    // destroy() is called when weak_count_ drops to zero.
++
++    virtual void destroy() // nothrow
++    {
++        delete this;
++    }
++
++    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
++    virtual void * get_untyped_deleter() = 0;
++
++    void add_ref_copy()
++    {
++        atomic_increment( &use_count_ );
++    }
++
++    bool add_ref_lock() // true on success
++    {
++        return atomic_conditional_increment( &use_count_ ) != 0;
++    }
++
++    void release() // nothrow
++    {
++        if( atomic_decrement( &use_count_ ) == 1 )
++        {
++            dispose();
++            weak_release();
++        }
++    }
++
++    void weak_add_ref() // nothrow
++    {
++        atomic_increment( &weak_count_ );
++    }
++
++    void weak_release() // nothrow
++    {
++        if( atomic_decrement( &weak_count_ ) == 1 )
++        {
++            destroy();
++        }
++    }
++
++    long use_count() const // nothrow
++    {
++        return __c11_atomic_load( const_cast< atomic_int_least32_t* >( &use_count_ ), __ATOMIC_ACQUIRE );
++    }
++};
++
++} // namespace detail
++
++} // namespace boost
++
++#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_CLANG_HPP_INCLUDED
+--- /dev/null
++++ b/lib/boost/smart_ptr/detail/sp_counted_base_sync.hpp
+@@ -0,0 +1,156 @@
++#ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED
++#define BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED
++
++// MS compatible compilers support #pragma once
++
++#if defined(_MSC_VER) && (_MSC_VER >= 1020)
++# pragma once
++#endif
++
++//  detail/sp_counted_base_sync.hpp - g++ 4.1+ __sync intrinsics
++//
++//  Copyright (c) 2007 Peter Dimov
++//
++//  Distributed under the Boost Software License, Version 1.0.
++//  See accompanying file LICENSE_1_0.txt or copy at
++//  http://www.boost.org/LICENSE_1_0.txt
++
++#include <boost/detail/sp_typeinfo.hpp>
++#include <limits.h>
++
++#if defined( __ia64__ ) && defined( __INTEL_COMPILER )
++# include <ia64intrin.h>
++#endif
++
++namespace boost
++{
++
++namespace detail
++{
++
++#if INT_MAX >= 2147483647
++
++typedef int sp_int32_t;
++
++#else
++
++typedef long sp_int32_t;
++
++#endif
++
++inline void atomic_increment( sp_int32_t * pw )
++{
++    __sync_fetch_and_add( pw, 1 );
++}
++
++inline sp_int32_t atomic_decrement( sp_int32_t * pw )
++{
++    return __sync_fetch_and_add( pw, -1 );
++}
++
++inline sp_int32_t atomic_conditional_increment( sp_int32_t * pw )
++{
++    // long r = *pw;
++    // if( r != 0 ) ++*pw;
++    // return r;
++
++    sp_int32_t r = *pw;
++
++    for( ;; )
++    {
++        if( r == 0 )
++        {
++            return r;
++        }
++
++        sp_int32_t r2 = __sync_val_compare_and_swap( pw, r, r + 1 );
++
++        if( r2 == r )
++        {
++            return r;
++        }
++        else
++        {
++            r = r2;
++        }
++    }
++}
++
++class sp_counted_base
++{
++private:
++
++    sp_counted_base( sp_counted_base const & );
++    sp_counted_base & operator= ( sp_counted_base const & );
++
++    sp_int32_t use_count_;        // #shared
++    sp_int32_t weak_count_;       // #weak + (#shared != 0)
++
++public:
++
++    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
++    {
++    }
++
++    virtual ~sp_counted_base() // nothrow
++    {
++    }
++
++    // dispose() is called when use_count_ drops to zero, to release
++    // the resources managed by *this.
++
++    virtual void dispose() = 0; // nothrow
++
++    // destroy() is called when weak_count_ drops to zero.
++
++    virtual void destroy() // nothrow
++    {
++        delete this;
++    }
++
++    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
++    virtual void * get_untyped_deleter() = 0;
++
++    void add_ref_copy()
++    {
++        atomic_increment( &use_count_ );
++    }
++
++    bool add_ref_lock() // true on success
++    {
++        return atomic_conditional_increment( &use_count_ ) != 0;
++    }
++
++    void release() // nothrow
++    {
++        if( atomic_decrement( &use_count_ ) == 1 )
++        {
++            dispose();
++            weak_release();
++        }
++    }
++
++    void weak_add_ref() // nothrow
++    {
++        atomic_increment( &weak_count_ );
++    }
++
++    void weak_release() // nothrow
++    {
++        if( atomic_decrement( &weak_count_ ) == 1 )
++        {
++            destroy();
++        }
++    }
++
++    long use_count() const // nothrow
++    {
++        return const_cast< sp_int32_t const volatile & >( use_count_ );
++    }
++};
++
++} // namespace detail
++
++} // namespace boost
++
++#endif  // #ifndef BOOST_SMART_PTR_DETAIL_SP_COUNTED_BASE_SYNC_HPP_INCLUDED
+--- /dev/null
++++ b/lib/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp
+@@ -0,0 +1,182 @@
++#ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED
++#define BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED
++
++// MS compatible compilers support #pragma once
++
++#if defined(_MSC_VER) && (_MSC_VER >= 1020)
++# pragma once
++#endif
++
++//
++//  detail/sp_counted_base_gcc_mips.hpp - g++ on MIPS
++//
++//  Copyright (c) 2009, Spirent Communications, Inc.
++//
++//  Distributed under the Boost Software License, Version 1.0. (See
++//  accompanying file LICENSE_1_0.txt or copy at
++//  http://www.boost.org/LICENSE_1_0.txt)
++//
++//
++//  Lock-free algorithm by Alexander Terekhov
++//
++
++#include <boost/detail/sp_typeinfo.hpp>
++
++namespace boost
++{
++
++namespace detail
++{
++
++inline void atomic_increment( int * pw )
++{
++    // ++*pw;
++
++    int tmp;
++
++    __asm__ __volatile__
++    (
++        "0:\n\t"
++        ".set push\n\t"
++        ".set mips2\n\t"
++        "ll %0, %1\n\t"
++        "addiu %0, 1\n\t"
++        "sc %0, %1\n\t"
++        ".set pop\n\t"
++        "beqz %0, 0b":
++        "=&r"( tmp ), "=m"( *pw ):
++        "m"( *pw )
++    );
++}
++
++inline int atomic_decrement( int * pw )
++{
++    // return --*pw;
++
++    int rv, tmp;
++
++    __asm__ __volatile__
++    (
++        "0:\n\t"
++        ".set push\n\t"
++        ".set mips2\n\t"
++        "ll %1, %2\n\t"
++        "addiu %0, %1, -1\n\t"
++        "sc %0, %2\n\t"
++        ".set pop\n\t"
++        "beqz %0, 0b\n\t"
++        "addiu %0, %1, -1":
++        "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ):
++        "m"( *pw ):
++        "memory"
++    );
++
++    return rv;
++}
++
++inline int atomic_conditional_increment( int * pw )
++{
++    // if( *pw != 0 ) ++*pw;
++    // return *pw;
++
++    int rv, tmp;
++
++    __asm__ __volatile__
++    (
++        "0:\n\t"
++        ".set push\n\t"
++        ".set mips2\n\t"
++        "ll %0, %2\n\t"
++        "beqz %0, 1f\n\t"
++        "addiu %1, %0, 1\n\t"
++        "sc %1, %2\n\t"
++        ".set pop\n\t"
++        "beqz %1, 0b\n\t"
++        "addiu %0, %0, 1\n\t"
++        "1:":
++        "=&r"( rv ), "=&r"( tmp ), "=m"( *pw ):
++        "m"( *pw ):
++        "memory"
++    );
++
++    return rv;
++}
++
++class sp_counted_base
++{
++private:
++
++    sp_counted_base( sp_counted_base const & );
++    sp_counted_base & operator= ( sp_counted_base const & );
++
++    int use_count_;        // #shared
++    int weak_count_;       // #weak + (#shared != 0)
++
++public:
++
++    sp_counted_base(): use_count_( 1 ), weak_count_( 1 )
++    {
++    }
++
++    virtual ~sp_counted_base() // nothrow
++    {
++    }
++
++    // dispose() is called when use_count_ drops to zero, to release
++    // the resources managed by *this.
++
++    virtual void dispose() = 0; // nothrow
++
++    // destroy() is called when weak_count_ drops to zero.
++
++    virtual void destroy() // nothrow
++    {
++        delete this;
++    }
++
++    virtual void * get_deleter( sp_typeinfo const & ti ) = 0;
++    virtual void * get_untyped_deleter() = 0;
++
++    void add_ref_copy()
++    {
++        atomic_increment( &use_count_ );
++    }
++
++    bool add_ref_lock() // true on success
++    {
++        return atomic_conditional_increment( &use_count_ ) != 0;
++    }
++
++    void release() // nothrow
++    {
++        if( atomic_decrement( &use_count_ ) == 0 )
++        {
++            dispose();
++            weak_release();
++        }
++    }
++
++    void weak_add_ref() // nothrow
++    {
++        atomic_increment( &weak_count_ );
++    }
++
++    void weak_release() // nothrow
++    {
++        if( atomic_decrement( &weak_count_ ) == 0 )
++        {
++            destroy();
++        }
++    }
++
++    long use_count() const // nothrow
++    {
++        return static_cast<int const volatile &>( use_count_ );
++    }
++};
++
++} // namespace detail
++
++} // namespace boost
++
++#endif  // #ifndef BOOST_DETAIL_SP_COUNTED_BASE_GCC_MIPS_HPP_INCLUDED

+ 0 - 33
meta-oe/recipes-support/ssiapi/ssiapi/0003-Replace-canonicalize_file_name-with-realpath-API.patch

@@ -1,33 +0,0 @@
-From 781288d6307002cce70ddafb6efb200b7f60294d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 16 Jun 2017 22:12:43 -0700
-Subject: [PATCH 3/6] Replace canonicalize_file_name with realpath() API
-
-Fixed build on musl where canonicalize_file_name is not implemented
-
-filesystem.cpp:46:15: error: 'canonicalize_file_name' was not declared in this scope
-     char *p = canonicalize_file_name(path);
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/engine/filesystem.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/engine/filesystem.cpp b/lib/engine/filesystem.cpp
-index b99257e..6064837 100644
---- a/lib/engine/filesystem.cpp
-+++ b/lib/engine/filesystem.cpp
-@@ -43,7 +43,7 @@ void CanonicalPath::__canonicalize_path_name(const char *path)
-     if (path == 0) {
-         throw E_NULL_POINTER;
-     }
--    char *p = canonicalize_file_name(path);
-+    char *p = realpath(path, NULL);
-     assign(p);
-     if (p) {
-         free(p);
--- 
-2.13.1
-

+ 47 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0003-engine-Define-discover-const-String-path-in-base-cla.patch

@@ -0,0 +1,47 @@
+From 24e0f55c07080a59907c190a315e279f7b2355e5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Aug 2019 14:25:02 -0700
+Subject: [PATCH 3/4] engine: Define discover(const String &path) in base class
+
+this fixes the confusion that compiler may have when inheriting two
+different classes where each of them defines discover() virtual function
+but with different signatures
+
+Remove ununsed orom_vmd
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/engine/storage_object.h | 3 +++
+ lib/engine/vmd_raid_info.h  | 2 --
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/lib/engine/storage_object.h b/lib/engine/storage_object.h
+index f1feb62..9c1d3d8 100644
+--- a/lib/engine/storage_object.h
++++ b/lib/engine/storage_object.h
+@@ -123,6 +123,9 @@ public:
+     virtual void discover() {
+         throw E_INVALID_OPERATION;
+     }
++    virtual void discover(const String &path) {
++        throw E_INVALID_OPERATION;
++    }
+     virtual void addToSession(const boost::shared_ptr<Session>& pSession) = 0;
+ };
+ 
+diff --git a/lib/engine/vmd_raid_info.h b/lib/engine/vmd_raid_info.h
+index 2bea839..cc6ffbe 100644
+--- a/lib/engine/vmd_raid_info.h
++++ b/lib/engine/vmd_raid_info.h
+@@ -53,8 +53,6 @@ public:
+         return SSI_ControllerTypeVMD;
+     }
+ 
+-private:
+-    struct orom_info orom_vmd;
+ };
+ 
+ #endif /* __VMD_RAID_INFO_H__INCLUDED__ */
+-- 
+2.23.0
+

+ 43 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0003-replace-canonicalize_file_name-with-realpath.patch

@@ -0,0 +1,43 @@
+From c817db76bb63b872fe2069e3c2449ac18affe8c1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 30 Aug 2019 13:17:38 -0700
+Subject: [PATCH] replace canonicalize_file_name with realpath
+
+Use 'realpath()' (BSD, POSIX) instead of
+'canonicalize_file_name()' (GNU extension).
+
+Fixes
+error: use of undeclared identifier 'canonicalize_file_name'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/engine/filesystem.cpp | 2 +-
+ tools/ssieventmonitor.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/engine/filesystem.cpp b/lib/engine/filesystem.cpp
+index bf5a776..194ab8a 100644
+--- a/lib/engine/filesystem.cpp
++++ b/lib/engine/filesystem.cpp
+@@ -54,7 +54,7 @@ void CanonicalPath::__canonicalize_path_name(const char *path)
+     if (path == NULL) {
+         throw E_NULL_POINTER;
+     }
+-    char *p = canonicalize_file_name(path);
++    char *p = realpath(path, (char *)0);
+     assign(p);
+     if (p) {
+         free(p);
+diff --git a/tools/ssieventmonitor.cpp b/tools/ssieventmonitor.cpp
+index 80791fd..3eed877 100644
+--- a/tools/ssieventmonitor.cpp
++++ b/tools/ssieventmonitor.cpp
+@@ -120,7 +120,7 @@ static int _exec_ssimsg(void)
+     int status;
+     switch (pid) {
+         case 0: {
+-            cp = canonicalize_file_name("/proc/self/exe");
++            cp = realpath("/proc/self/exe", (char *)0);
+             if (cp) {
+                 strcpy_s(buffer, sizeof(buffer), cp);
+                 free(cp);

+ 33 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0004-Do-not-override-flags-coming-from-build-environment.patch

@@ -0,0 +1,33 @@
+From 98fad8128d0f3b65619827ee5d65f7767b080c4c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Aug 2019 14:35:16 -0700
+Subject: [PATCH 4/4] Do not override flags coming from build environment
+
+e.g. we need some optimization level turned on when security flags are enabled
+without this change, the build would fail
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 34e41ea..9bd0fe3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -16,9 +16,9 @@ AM_INIT_AUTOMAKE(ssi, ${VERSION})
+ AM_CONFIG_HEADER(config.h)
+ 
+ dnl Set the language we use
+-CPPFLAGS="-g3 -gdwarf-2 -Wall -Werror -fvisibility=hidden -D_GNU_SOURCE -O3 -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIC"
+-CFLAGS="-std=gnu99 -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIC"
+-CXXFLAGS="-std=gnu++98 -fvisibility-inlines-hidden -O3 -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIC"
++#CPPFLAGS="-g3 -gdwarf-2 -Wall -Werror -fvisibility=hidden -D_GNU_SOURCE -O3 -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIC"
++#CFLAGS="-std=gnu99 -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIC"
++#CXXFLAGS="-std=gnu++98 -fvisibility-inlines-hidden -O3 -fstack-protector -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIC"
+ 
+ dnl Automake 1.11 - silent build rules
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+-- 
+2.23.0
+

+ 0 - 54
meta-oe/recipes-support/ssiapi/ssiapi/0004-engine-Fix-indentation-and-missing-semi-colon.patch

@@ -1,54 +0,0 @@
-From 04e8b99d8195a0e39982ecd27802421610633724 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 16 Jun 2017 22:18:31 -0700
-Subject: [PATCH 4/6] engine: Fix indentation and missing semi-colon
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/engine/mdadm_config.cpp      | 5 +++--
- lib/engine/unique_id_manager.cpp | 2 +-
- 2 files changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/lib/engine/mdadm_config.cpp b/lib/engine/mdadm_config.cpp
-index 1914ddc..e40c2c7 100644
---- a/lib/engine/mdadm_config.cpp
-+++ b/lib/engine/mdadm_config.cpp
-@@ -118,9 +118,10 @@ void check_configuration()
-         attr >> config;
-         configOk = correct_config(config);
-     } catch (Exception ex) {
--        if (ex != E_NOT_FOUND)
-+        if (ex != E_NOT_FOUND) {
-             dlog("Warning: mdadm config file cannot be read, new one will be written");
-             backup = false;
-+        }
-     }
- 
-     if (configOk && monitor_running()) {
-@@ -134,7 +135,7 @@ void check_configuration()
-             dlog("Warning: failed to update mdadm.conf");
-     }
-     if (restart_monitor() == 0)
--        dlog("Monitor restarted successfully")
-+        dlog("Monitor restarted successfully");
-     else
-         dlog("Error starting Monitor");
- }
-diff --git a/lib/engine/unique_id_manager.cpp b/lib/engine/unique_id_manager.cpp
-index 99c153c..87d6ddc 100644
---- a/lib/engine/unique_id_manager.cpp
-+++ b/lib/engine/unique_id_manager.cpp
-@@ -185,7 +185,7 @@ void UniqueIdManager::refresh()
-         keyFile >> keyList;
-         keyList += "\n";
-     } catch (...) {
--        dlog("ssi.keys file missing")
-+        dlog("ssi.keys file missing");
-         /* no file? that's ok */
-     }
-     /* process the list to update IdCaches */
--- 
-2.13.1
-

+ 25 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0004-include-limits.h.patch

@@ -0,0 +1,25 @@
+From e90101128dfe75b9b1a0575a0179d211f677e6ad Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 30 Aug 2019 13:19:50 -0700
+Subject: [PATCH] include limits.h
+
+Fixes
+error: use of undeclared identifier 'PATH_MAX'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tools/ssieventmonitor.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tools/ssieventmonitor.cpp b/tools/ssieventmonitor.cpp
+index 3eed877..0d11975 100644
+--- a/tools/ssieventmonitor.cpp
++++ b/tools/ssieventmonitor.cpp
+@@ -34,6 +34,7 @@
+ #include <unistd.h>
+ #include <dirent.h>
+ #include <errno.h>
++#include <limits.h>
+ #include <sys/fcntl.h>
+ #include <sys/select.h>
+ #include <sys/wait.h>

+ 228 - 0
meta-oe/recipes-support/ssiapi/ssiapi/0005-enable-out-of-source-tree-builds.patch

@@ -0,0 +1,228 @@
+From 3ec4eaf1688e413e8b5cb433148a3bc6e7987606 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Aug 2019 15:10:03 -0700
+Subject: [PATCH] enable out of source tree builds
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/efi/Makefile.am      |  2 +-
+ lib/engine/Makefile.am   |  2 +-
+ lib/orom/Makefile.am     |  2 +-
+ lib/safeclib/Makefile.am |  2 +-
+ src/Makefile.am          | 16 ++++++++--------
+ tools/Makefile.am        | 10 +++++-----
+ ut/Makefile.am           | 36 ++++++++++++++++++------------------
+ 7 files changed, 35 insertions(+), 35 deletions(-)
+
+--- a/lib/efi/Makefile.am
++++ b/lib/efi/Makefile.am
+@@ -7,6 +7,6 @@ libefi_la_SOURCES =             \
+     efi.h
+ 
+ libefi_la_CPPFLAGS =            \
+-        -I$(top_srcdir)         \
++        -I$(top_builddir)       \
+         -I$(top_srcdir)/include \
+         -I$(top_srcdir)/lib
+--- a/lib/engine/Makefile.am
++++ b/lib/engine/Makefile.am
+@@ -123,6 +123,7 @@ libengine_la_SOURCES =          \
+         volume.h
+ 
+ libengine_la_CPPFLAGS =         \
++        -I$(top_builddir)       \
+         -I$(top_srcdir)         \
+         -I$(top_srcdir)/include \
+         -I$(top_srcdir)/lib
+--- a/lib/orom/Makefile.am
++++ b/lib/orom/Makefile.am
+@@ -7,6 +7,6 @@ liborom_la_SOURCES =            \
+     orom.h
+ 
+ liborom_la_CPPFLAGS =           \
+-        -I$(top_srcdir)         \
++        -I$(top_builddir)       \
+         -I$(top_srcdir)/include \
+         -I$(top_srcdir)/lib
+--- a/lib/safeclib/Makefile.am
++++ b/lib/safeclib/Makefile.am
+@@ -37,7 +37,7 @@ libsafec_la_SOURCES =		\
+ 	strtok_s.c
+ 
+ libsafec_la_CPPFLAGS =		\
+-        -I$(top_srcdir)			\
++        -I$(top_builddir)		\
+         -I$(top_srcdir)/include		\
+         -I$(top_srcdir)/lib		\
+ 	-Wno-unused-variable
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -5,7 +5,7 @@ AUTOMAKE_OPTIONS = nostdinc
+ lib_LTLIBRARIES = libssi.la
+ 
+ libssi_la_CPPFLAGS =                    \
+-        -I$(top_srcdir)                 \
++        -I$(top_builddir)               \
+         -I$(top_srcdir)/include         \
+         -I$(top_srcdir)/lib             \
+         -DBOOST_NO_USER_CONFIG
+@@ -46,10 +46,10 @@ libssi_la_SOURCES =
+         templates.h                     \
+         volume.cpp
+ 
+-libssi_la_LIBADD =                      \
+-        ../lib/efi/libefi.la            \
+-        ../lib/log/liblog.la            \
+-        ../lib/orom/liborom.la          \
+-        ../lib/mpb/libmpb.la            \
+-        ../lib/engine/libengine.la      \
+-        ../lib/safeclib/libsafec.la
++libssi_la_LIBADD =                                   \
++        $(top_builddir)/lib/efi/libefi.la            \
++        $(top_builddir)/lib/log/liblog.la            \
++        $(top_builddir)/lib/orom/liborom.la          \
++        $(top_builddir)/lib/mpb/libmpb.la            \
++        $(top_builddir)/lib/engine/libengine.la      \
++        $(top_builddir)/lib/safeclib/libsafec.la
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -6,17 +6,18 @@ ssimsg_SOURCES =
+         ssimsg.cpp
+ 
+ ssimsg_CPPFLAGS =                       \
+-        -I$(top_srcdir)                 \
++        -I$(top_builddir)               \
+         -I$(top_srcdir)/include         \
+         -I$(top_srcdir)/lib
+ 
+-ssieventmonitor_SOURCES =                 \
++ssieventmonitor_SOURCES =               \
+         ssieventmonitor.cpp
+ 
+-ssieventmonitor_CPPFLAGS =                \
++ssieventmonitor_CPPFLAGS =              \
++        -I$(top_builddir)               \
+         -I$(top_srcdir)                 \
+         -I$(top_srcdir)/include         \
+         -I$(top_srcdir)/lib
+ 
+ ssieventmonitor_LDADD =			\
+-	$(top_srcdir)/lib/safeclib/libsafec.la
++	$(top_builddir)/lib/safeclib/libsafec.la
+--- a/ut/Makefile.am
++++ b/ut/Makefile.am
+@@ -8,81 +8,81 @@ ut_events_SOURCES = \
+ 	ut_events.cpp
+ 
+ ut_events_CPPFLAGS = \
+-	-I$(top_srcdir) \
++	-I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_events_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_volume_SOURCES = \
+ 	ut_volume.cpp
+ 
+ ut_volume_CPPFLAGS = \
+-	-I$(top_srcdir) \
++	-I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_volume_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_session_SOURCES = \
+ 	ut_session.cpp
+ 
+ ut_session_CPPFLAGS = \
+-	-g3 -I$(top_srcdir) \
++	-g3 -I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_session_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_info_SOURCES = \
+ 	ut_info.cpp
+ 
+ ut_info_CPPFLAGS = \
+-	-g3 -I$(top_srcdir) \
++	-g3 -I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_info_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_markasspare_SOURCES = \
+ 	ut_markasspare.cpp
+ 
+ ut_markasspare_CPPFLAGS = \
+-	-g3 -I$(top_srcdir) \
++	-g3 -I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_markasspare_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_migration_SOURCES = \
+ 	ut_migration.cpp
+ 
+ ut_migration_CPPFLAGS = \
+-	-g3 -I$(top_srcdir) \
++	-g3 -I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_migration_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_phy_SOURCES = \
+ 	ut_phy.cpp
+ 
+ ut_phy_CPPFLAGS = \
+-	-g3 -I$(top_srcdir) \
++	-g3 -I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_phy_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_initialize_volume_SOURCES = \
+ 	ut_initialize_volume.cpp
+ 
+ ut_initialize_volume_CPPFLAGS = \
+-	-g3 -I$(top_srcdir) \
++	-g3 -I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_initialize_volume_LDADD = \
+-	../src/libssi.la
++	$(top_builddir)/src/libssi.la
+ 
+ ut_filesystem_SOURCES = \
+ 	ut_filesystem.cpp \
+@@ -92,7 +92,7 @@ ut_filesystem_SOURCES = \
+ 
+ ut_filesystem_CPPFLAGS = \
+ 	-iquote $(top_srcdir)/lib/engine \
+-	-I$(top_srcdir) \
++	-I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 
+ ut_string_SOURCES = \
+@@ -103,6 +103,6 @@ ut_string_SOURCES = \
+ 
+ ut_string_CPPFLAGS = \
+ 	-iquote $(top_srcdir)/lib/engine \
+-	-I$(top_srcdir) \
++	-I$(top_builddir) \
+ 	-I$(top_srcdir)/include
+ 

+ 0 - 40
meta-oe/recipes-support/ssiapi/ssiapi/0005-engine-Define-SENTINEL.patch

@@ -1,40 +0,0 @@
-From a2e3a2e332c406ea3c56a8d74b61978107df68e6 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 16 Jun 2017 22:23:08 -0700
-Subject: [PATCH 5/6] engine: Define SENTINEL
-
-Fix warnings with gcc7
-test.cpp:12: warning: missing sentinel in function call
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/engine/utils.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/lib/engine/utils.cpp b/lib/engine/utils.cpp
-index 44579a1..8812a8c 100644
---- a/lib/engine/utils.cpp
-+++ b/lib/engine/utils.cpp
-@@ -35,7 +35,7 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- #include "filesystem.h"
- #include "utils.h"
- #include "log/log.h"
--
-+#define SENTINEL (const char *)0
- /**
-  * @brief capture shell output as binary data
-  *
-@@ -139,7 +139,7 @@ int shell(const String &s)
-          * Before switching into new executable close all non standard
-          * file handlers.*/
-         close_parent_fds();
--        execl("/bin/sh", "sh", "-c", cmd.get(), NULL);
-+        execl("/bin/sh", "sh", "-c", cmd.get(), SENTINEL);
-         /* If we're here then execl failed*/
-         exit(-1);
-         break;
--- 
-2.13.1
-

+ 0 - 40
meta-oe/recipes-support/ssiapi/ssiapi/0006-tools-Add-missing-includes-and-use-realpath-instead-.patch

@@ -1,40 +0,0 @@
-From df1d56d6b6a6b15d0137619eb8a4b623de6c9633 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 16 Jun 2017 22:28:59 -0700
-Subject: [PATCH 6/6] tools: Add missing includes and use realpath() instead of
- canonicalize_file_name
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- tools/ssieventmonitor.cpp | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/tools/ssieventmonitor.cpp b/tools/ssieventmonitor.cpp
-index 0553386..f04b8f0 100644
---- a/tools/ssieventmonitor.cpp
-+++ b/tools/ssieventmonitor.cpp
-@@ -18,7 +18,9 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- #include <unistd.h>
- #include <dirent.h>
- #include <errno.h>
--#include <sys/fcntl.h>
-+#include <limits.h>
-+#include <fcntl.h>
-+#include <libgen.h>
- #include <sys/select.h>
- #include <sys/wait.h>
- #include <sys/inotify.h>
-@@ -99,7 +101,7 @@ static int _exec_ssimsg(void)
-     int status;
-     switch (pid) {
- 	case 0: {
--	    cp = canonicalize_file_name("/proc/self/exe");
-+	    cp = realpath("/proc/self/exe", NULL);
- 	    if (cp) {
- 		strcpy(buffer, cp);
- 		free(cp);
--- 
-2.13.1
-

+ 0 - 21
meta-oe/recipes-support/ssiapi/ssiapi/configure-cflags.patch

@@ -1,21 +0,0 @@
-Do not override flags thereby respect the flags coming from environment,
-e.g. we need some optimization level turned on when security flags are enabled
-without this change, the build would fail
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Index: ssiapi.1.0.1/configure.ac
-===================================================================
---- ssiapi.1.0.1.orig/configure.ac
-+++ ssiapi.1.0.1/configure.ac
-@@ -15,11 +15,6 @@ AC_SUBST(VERSION)
- AM_INIT_AUTOMAKE(ssi, ${VERSION})
- AM_CONFIG_HEADER(config.h)
- 
--dnl Set the language we use
--CPPFLAGS="-g3 -gdwarf-2 -Wall -Werror -D_GNU_SOURCE"
--CFLAGS="-std=gnu99"
--CXXFLAGS="-std=gnu++98"
--
- dnl Automake 1.11 - silent build rules
- m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
- 

+ 0 - 35
meta-oe/recipes-support/ssiapi/ssiapi_1.0.1.bb

@@ -1,35 +0,0 @@
-SUMMARY = "Intel RSTe with Linux OS SSI API Library"
-
-DESCRIPTION = "Intel Rapid Storage Technology enterprise with Linux OS* Standard Storage Interface API Library. \
-The library allows user to manage storage devices including creating and managing Raid arrays on systems with Intel chipset."
-
-HOMEPAGE = "http://irstessi.sourceforge.net/"
-
-LICENSE = "BSD"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0413ff365e0bd733c4869a6797551c6f"
-
-DEPENDS += "sg3-utils"
-
-SRC_URI = "http://sourceforge.net/projects/irstessi/files/${BPN}.${PV}.tgz \
-           file://0001-Use-pragma-once-unconditionally.patch \
-           file://0002-Convert-macros-into-functions.patch \
-           file://0003-Replace-canonicalize_file_name-with-realpath-API.patch \
-           file://0004-engine-Fix-indentation-and-missing-semi-colon.patch \
-           file://0005-engine-Define-SENTINEL.patch \
-           file://0006-tools-Add-missing-includes-and-use-realpath-instead-.patch \
-           file://configure-cflags.patch \
-           file://0001-ssieventmonitor-ordered-comparison-between-pointers-.patch \
-           "
-SRC_URI[md5sum] = "02f16d7cbd30d28034093212906591f5"
-SRC_URI[sha256sum] = "e10d283b0f211afb8ebd0bde87c097769613d30a052cdf164753e35e803264c7"
-
-S ="${WORKDIR}/${BPN}.${PV}"
-
-inherit autotools-brokensep
-CXXFLAGS="-std=gnu++98 -D_GNU_SOURCE"
-
-do_configure_prepend(){
-    ./autogen.sh
-}
-
-RDEPENDS_${PN} += "mdadm"

+ 36 - 0
meta-oe/recipes-support/ssiapi/ssiapi_1.3.0.bb

@@ -0,0 +1,36 @@
+SUMMARY = "Intel RSTe with Linux OS SSI API Library"
+
+DESCRIPTION = "Intel Rapid Storage Technology enterprise with Linux OS* Standard Storage Interface API Library. \
+The library allows user to manage storage devices including creating and managing Raid arrays on systems with Intel chipset."
+
+HOMEPAGE = "http://irstessi.sourceforge.net/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9d701a2fbb56039fd64afb2262008ddb"
+
+DEPENDS += "sg3-utils"
+
+SRC_URI = "http://sourceforge.net/projects/irstessi/files/${BPN}.${PV}.tgz \
+           file://0001-log-Avoid-shadowing-functions-from-std-lib.patch \
+           file://0002-boost-Backport-clang-support.patch \
+           file://0003-engine-Define-discover-const-String-path-in-base-cla.patch \
+           file://0004-Do-not-override-flags-coming-from-build-environment.patch \
+           file://0005-enable-out-of-source-tree-builds.patch \
+           file://0001-Don-t-use-__GNUC_PREREQ.patch \
+           file://0002-Use-stangard-int-types.patch \
+           file://0003-replace-canonicalize_file_name-with-realpath.patch \
+           file://0004-include-limits.h.patch \
+           file://0001-Include-libgen.h.patch \
+           "
+SRC_URI[md5sum] = "d06c9b426437a7697d77266e9835b520"
+SRC_URI[sha256sum] = "59daab29363d6e9f07c524029c4239653cfbbee6b0e57fd75df62499728dad8a"
+
+S ="${WORKDIR}/${BPN}.${PV}"
+
+inherit autotools
+
+do_configure_prepend(){
+    ${S}/autogen.sh
+}
+
+RDEPENDS_${PN} += "mdadm"

Some files were not shown because too many files changed in this diff