diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
index cc7bf01..9557c93 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
@@ -17,8 +17,6 @@
 
 S = "${WORKDIR}/git"
 
-DEPENDS_append_libc-musl = " libexecinfo "
-
 ASNEEDED_class-native = ""
 ASNEEDED_class-nativesdk = ""
 
@@ -26,6 +24,7 @@
 
 EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON \
                  -DBUILD_TESTING=OFF    \
+                 -DCMAKE_CXX_STANDARD=14 \
                 "
 
 BBCLASSEXTEND = "native nativesdk"
@@ -33,28 +32,3 @@
 
 FILES_${PN} = "${libdir}/libabsl_*.so ${libdir}/cmake"
 FILES_${PN}-dev = "${includedir}"
-
-python () {
-    arch = d.getVar("TARGET_ARCH")
-
-    if arch == "aarch64":
-        tunes = d.getVar("TUNE_FEATURES")
-        if not tunes:
-            raise bb.parse.SkipRecipe("%s-%s Needs support for crypto on armv8" % (pkgn, pkgv))
-            return
-        pkgn = d.getVar("PN")
-        pkgv = d.getVar("PV")
-        if "crypto" not in tunes:
-            raise bb.parse.SkipRecipe("%s-%s Needs support for crypto on armv8" % (pkgn, pkgv))
-
-    if arch == "x86_64":
-        tunes = d.getVar("TUNE_FEATURES")
-        if not tunes:
-           raise bb.parse.SkipRecipe("%s-%s Needs support for corei7 on x86_64" % (pkgn, pkgv))
-           return
-        pkgn = d.getVar("PN")
-        pkgv = d.getVar("PV")
-        if "corei7" not in tunes:
-            raise bb.parse.SkipRecipe("%s-%s Needs support for corei7 on x86_64" % (pkgn, pkgv))
-
-}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
index ae14639..d93a7f7 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
@@ -3,7 +3,7 @@
 LICENSE = "Apache-2.0 & GPL-2.0 & BSD-2-Clause & BSD-3-Clause"
 LIC_FILES_CHKSUM = " \
     file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \
-    file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6 \
+    file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6 \
     file://${COMMON_LICENSE_DIR}/BSD-2-Clause;md5=cb641bc04cda31daea161b1bc15da69f \
     file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \
 "
diff --git a/meta-openembedded/meta-oe/recipes-devtools/boost-url/boost-url_git.bb b/meta-openembedded/meta-oe/recipes-devtools/boost-url/boost-url_git.bb
index 6d4635b..107a4a8 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/boost-url/boost-url_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/boost-url/boost-url_git.bb
@@ -4,9 +4,9 @@
 LICENSE = "BSL-1.0"
 LIC_FILES_CHKSUM = "file://LICENSE_1_0.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
 
-SRC_URI = "git://github.com/CPPAlliance/url.git"
+SRC_URI = "git://github.com/CPPAlliance/url.git;branch=develop"
 
-SRCREV = "a56ae0df6d3078319755fbaa67822b4fa7fd352b"
+SRCREV = "2c867fbe284ae532f1329b87a86ad3f8cd382867"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cereal/cereal/0001-add-license-files-for-components-of-cereal.patch b/meta-openembedded/meta-oe/recipes-devtools/cereal/cereal/0001-add-license-files-for-components-of-cereal.patch
deleted file mode 100644
index 0000ab9..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/cereal/cereal/0001-add-license-files-for-components-of-cereal.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-From 481b2aa46b3f54d9bee059d9da68263edece2bb3 Mon Sep 17 00:00:00 2001
-From: Adam Miartus <adam.miartus@softhows.eu>
-Date: Mon, 1 Feb 2021 16:15:01 +0100
-Subject: [PATCH] add license files for components of cereal
-
-Signed-off-by: Adam Miartus <adam.miartus@softhows.eu>
----
- include/cereal/external/LICENSE               | 21 ++++++++++++++
- include/cereal/external/rapidjson/LICENSE     | 13 +++++++++
- .../external/rapidjson/msinttypes/LICENSE     | 29 +++++++++++++++++++
- 3 files changed, 63 insertions(+)
- create mode 100644 include/cereal/external/LICENSE
- create mode 100644 include/cereal/external/rapidjson/LICENSE
- create mode 100644 include/cereal/external/rapidjson/msinttypes/LICENSE
-
-diff --git a/include/cereal/external/LICENSE b/include/cereal/external/LICENSE
-new file mode 100644
-index 00000000..66300b68
---- /dev/null
-+++ b/include/cereal/external/LICENSE
-@@ -0,0 +1,21 @@
-+Copyright (C) 2004-2008 René Nyffenegger
-+
-+This source code is provided 'as-is', without any express or implied
-+warranty. In no event will the author be held liable for any damages
-+arising from the use of this software.
-+
-+Permission is granted to anyone to use this software for any purpose,
-+including commercial applications, and to alter it and redistribute it
-+freely, subject to the following restrictions:
-+
-+1. The origin of this source code must not be misrepresented; you must not
-+  claim that you wrote the original source code. If you use this source code
-+  in a product, an acknowledgment in the product documentation would be
-+  appreciated but is not required.
-+
-+2. Altered source versions must be plainly marked as such, and must not be
-+  misrepresented as being the original source code.
-+
-+3. This notice may not be removed or altered from any source distribution.
-+
-+René Nyffenegger rene.nyffenegger@adp-gmbh.ch
-diff --git a/include/cereal/external/rapidjson/LICENSE b/include/cereal/external/rapidjson/LICENSE
-new file mode 100644
-index 00000000..4546f15a
---- /dev/null
-+++ b/include/cereal/external/rapidjson/LICENSE
-@@ -0,0 +1,13 @@
-+Tencent is pleased to support the open source community by making RapidJSON available.
-+
-+Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
-+
-+Licensed under the MIT License (the "License"); you may not use this file except
-+in compliance with the License. You may obtain a copy of the License at
-+
-+http://opensource.org/licenses/MIT
-+
-+Unless required by applicable law or agreed to in writing, software distributed 
-+under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
-+CONDITIONS OF ANY KIND, either express or implied. See the License for the 
-+specific language governing permissions and limitations under the License.
-diff --git a/include/cereal/external/rapidjson/msinttypes/LICENSE b/include/cereal/external/rapidjson/msinttypes/LICENSE
-new file mode 100644
-index 00000000..e3d96f8f
---- /dev/null
-+++ b/include/cereal/external/rapidjson/msinttypes/LICENSE
-@@ -0,0 +1,29 @@
-+ISO C9x  compliant stdint.h for Microsoft Visual Studio
-+Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124 
-+
-+ Copyright (c) 2006-2013 Alexander Chemeris
-+
-+Redistribution and use in source and binary forms, with or without
-+modification, are permitted provided that the following conditions are met:
-+
-+  1. Redistributions of source code must retain the above copyright notice,
-+     this list of conditions and the following disclaimer.
-+
-+  2. Redistributions in binary form must reproduce the above copyright
-+     notice, this list of conditions and the following disclaimer in the
-+     documentation and/or other materials provided with the distribution.
-+
-+  3. Neither the name of the product nor the names of its contributors may
-+     be used to endorse or promote products derived from this software
-+     without specific prior written permission.
-+
-+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-+EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
-+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--- 
-2.29.2
-
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cereal/cereal_1.3.0.bb b/meta-openembedded/meta-oe/recipes-devtools/cereal/cereal_1.3.0.bb
deleted file mode 100644
index a4b7f34..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/cereal/cereal_1.3.0.bb
+++ /dev/null
@@ -1,36 +0,0 @@
-SUMMARY = "cereal is a header-only C++11 serialization library"
-HOMEPAGE = "https://uscilab.github.io/cereal"
-LICENSE = "BSD & MIT & BSL-1.0"
-LIC_FILES_CHKSUM = "\
-    file://LICENSE;md5=e612690af2f575dfd02e2e91443cea23 \
-    file://include/cereal/external/rapidxml/license.txt;md5=d63ab70ba21ca0544b03284958324301 \
-    file://include/cereal/external/LICENSE;md5=b07578c9df99c0b8b45eb041efd4a645 \
-    file://include/cereal/external/rapidjson/LICENSE;md5=e7abb663111d4ac17cf00323698aff08 \
-    file://include/cereal/external/rapidjson/msinttypes/LICENSE;md5=dffce65b98c773976de2e338bd130f46 \
-"
-
-inherit cmake pkgconfig
-
-RDEPENDS_${PN}-dev = ""
-
-SRC_URI = " \
-    git://github.com/USCiLab/cereal.git;protocol=https \
-    file://0001-add-license-files-for-components-of-cereal.patch \
-"
-
-SRCREV = "02eace19a99ce3cd564ca4e379753d69af08c2c8"
-
-EXTRA_OECMAKE += "\
-    -DCEREAL_INSTALL=TRUE \
-    -DJUST_INSTALL_CEREAL=TRUE \
-"
-
-S = "${WORKDIR}/git"
-
-PROVIDES += "${PN}-dev"
-
-FILES_${PN}-dev = " \
-    ${includedir} \
-    ${libdir} \
-    ${datadir}/cmake \
-"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch
deleted file mode 100644
index 6cad533..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 6d606f1101c1a172fb6d738d6f1865aa61849e68 Mon Sep 17 00:00:00 2001
-From: Alexey Firago <alexey_firago@mentor.com>
-Date: Fri, 20 Oct 2017 00:04:19 +0300
-Subject: [PATCH] CMakeLists.txt: Fix grpc_cpp_plugin path during cross-compiling or native build
-
-Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
-Signed-off-by: Hiram Lew <lew@avast.com>
-Signed-off-by: Jan Kaisrlik <jan.kaisrlik@avast.com>
----
- CMakeLists.txt                    | 9 ++++++++-
- templates/CMakeLists.txt.template | 9 ++++++++-
- 2 files changed, 16 insertions(+), 2 deletions(-)
-
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -193,6 +193,13 @@ function(protobuf_generate_grpc_cpp)
-     return()
-   endif()
- 
-+  #if cross-compiling or nativesdk, find host plugin
-+  if(CMAKE_CROSSCOMPILING)
-+      find_program(gRPC_CPP_PLUGIN grpc_cpp_plugin)
-+  else()
-+      set(gRPC_CPP_PLUGIN $<TARGET_FILE:grpc_cpp_plugin>)
-+  endif()
-+
-   set(_protobuf_include_path -I . -I ${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR})
-   foreach(FIL ${ARGN})
-     get_filename_component(ABS_FIL ${FIL} ABSOLUTE)
---- a/templates/CMakeLists.txt.template
-+++ b/templates/CMakeLists.txt.template
-@@ -233,6 +233,13 @@
-       return()
-     endif()
- 
-+    #if cross-compiling or nativesdk, find host plugin
-+    if(CMAKE_CROSSCOMPILING)
-+        find_program(gRPC_CPP_PLUGIN grpc_cpp_plugin)
-+    else()
-+        set(gRPC_CPP_PLUGIN $<TARGET_FILE:grpc_cpp_plugin>)
-+    endif()
-+
-     set(_protobuf_include_path -I . -I <%text>${_gRPC_PROTOBUF_WELLKNOWN_INCLUDE_DIR}</%text>)
-     foreach(FIL <%text>${ARGN}</%text>)
-       get_filename_component(ABS_FIL <%text>${FIL}</%text> ABSOLUTE)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch
deleted file mode 100644
index e517355..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch
+++ /dev/null
@@ -1,177 +0,0 @@
-From 2279e30be5796e9b185545543ea54fe68633cbdd Mon Sep 17 00:00:00 2001
-From: Alexey Firago <alexey_firago@mentor.com>
-Date: Mon, 30 Oct 2017 23:24:49 +0300
-Subject: [PATCH] CMakeLists.txt: Fix libraries installation for Linux
-
-* Set libs versions as in Makefile
-
-Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
-
----
- CMakeLists.txt | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 59 insertions(+)
-
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -30,6 +30,15 @@ set(PACKAGE_TARNAME   "${PACKAGE_NAME}-$
- set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
- project(${PACKAGE_NAME} C CXX)
- 
-+set (CORE_VERSION_MAJOR "6")
-+set (CORE_VERSION "6.0.0")
-+
-+set (CPP_VERSION_MAJOR "1")
-+set (CPP_VERSION "${PACKAGE_VERSION}")
-+
-+set (CSHARP_VERSION_MAJOR "1")
-+set (CSHARP_VERSION "${PACKAGE_VERSION}")
-+
- set(gRPC_INSTALL_BINDIR "bin" CACHE STRING "Installation directory for executables")
- set(gRPC_INSTALL_LIBDIR "lib" CACHE STRING "Installation directory for libraries")
- set(gRPC_INSTALL_INCLUDEDIR "include" CACHE STRING "Installation directory for headers")
-@@ -777,6 +786,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET address_sorting PROPERTY VERSION ${CORE_VERSION})
-+  set_property(TARGET address_sorting PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(address_sorting
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -903,6 +916,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET gpr PROPERTY VERSION ${CORE_VERSION})
-+  set_property(TARGET gpr PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(gpr
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -1367,6 +1384,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc PROPERTY VERSION ${CORE_VERSION})
-+  set_property(TARGET grpc PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(grpc
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -1782,6 +1803,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc_cronet PROPERTY VERSION ${CORE_VERSION})
-+  set_property(TARGET grpc_cronet PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(grpc_cronet
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -2869,6 +2894,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc_unsecure PROPERTY VERSION ${CORE_VERSION})
-+  set_property(TARGET grpc_unsecure PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(grpc_unsecure
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -3206,6 +3235,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc++ PROPERTY VERSION ${CPP_VERSION})
-+  set_property(TARGET grpc++ PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(grpc++
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -3589,6 +3622,11 @@ protobuf_generate_grpc_cpp(
-   src/proto/grpc/status/status.proto
- )
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc++_error_details PROPERTY VERSION ${CPP_VERSION})
-+  set_property(TARGET grpc++_error_details PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
-+endif()
-+
- target_include_directories(grpc++_error_details
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
-@@ -3727,6 +3765,11 @@ protobuf_generate_grpc_cpp(
-   src/proto/grpc/reflection/v1alpha/reflection.proto
- )
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc++_reflection PROPERTY VERSION ${CPP_VERSION})
-+  set_property(TARGET grpc++_reflection PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
-+endif()
-+
- target_include_directories(grpc++_reflection
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
-@@ -3816,6 +3859,10 @@ target_link_libraries(grpc++_test_config
-   ${_gRPC_GFLAGS_LIBRARIES}
- )
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc++_cronet PROPERTY VERSION ${CPP_VERSION})
-+  set_property(TARGET grpc++_cronet PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
-+endif()
- 
- endif (gRPC_BUILD_TESTS)
- if (gRPC_BUILD_TESTS)
-@@ -4307,6 +4354,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc++_unsecure PROPERTY VERSION ${CPP_VERSION})
-+  set_property(TARGET grpc++_unsecure PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(grpc++_unsecure
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -4745,6 +4796,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc_plugin_support PROPERTY VERSION ${CORE_VERSION})
-+  set_property(TARGET grpc_plugin_support PROPERTY SOVERSION ${CORE_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(grpc_plugin_support
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-@@ -4813,6 +4868,11 @@ protobuf_generate_grpc_cpp(
-   src/proto/grpc/channelz/channelz.proto
- )
- 
-+if(_gRPC_PLATFORM_LINUX)
-+	set_property(TARGET grpcpp_channelz PROPERTY VERSION ${CPP_VERSION})
-+  set_property(TARGET grpcpp_channelz PROPERTY SOVERSION ${CPP_VERSION_MAJOR})
-+endif()
-+
- target_include_directories(grpcpp_channelz
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-   PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
-@@ -5367,6 +5427,10 @@ if(WIN32 AND MSVC)
-   endif()
- endif()
- 
-+if(_gRPC_PLATFORM_LINUX)
-+  set_property(TARGET grpc_csharp_ext PROPERTY VERSION ${CSHARP_VERSION})
-+  set_property(TARGET grpc_csharp_ext PROPERTY SOVERSION ${CSHARP_VERSION_MAJOR})
-+endif()
- 
- target_include_directories(grpc_csharp_ext
-   PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.24.3.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.36.1.bb
similarity index 66%
rename from meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.24.3.bb
rename to meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.36.1.bb
index c25ce36..358ec80 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.24.3.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.36.1.bb
@@ -6,22 +6,15 @@
 LICENSE = "Apache-2"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
 
-DEPENDS = "gflags c-ares protobuf protobuf-native protobuf-c protobuf-c-native openssl libnsl2"
+DEPENDS = "c-ares protobuf protobuf-native protobuf-c protobuf-c-native openssl libnsl2 abseil-cpp re2"
 DEPENDS_append_class-target = " googletest grpc-native "
 DEPENDS_append_class-nativesdk = " grpc-native "
 
 S = "${WORKDIR}/git"
-SRCREV_grpc = "2de2e8dd8921e1f7d043e01faf7fe8a291fbb072"
-SRCREV_upb = "9effcbcb27f0a665f9f345030188c0b291e32482"
-BRANCH = "v1.24.x"
+SRCREV_grpc = "3b7f86e3516746c5f0db1947e0d65e94159bcb12"
+BRANCH = "v1.36.x"
 SRC_URI = "git://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH} \
-           git://github.com/protocolbuffers/upb;name=upb;destsuffix=git/third_party/upb \
-           file://0001-CMakeLists.txt-Fix-libraries-installation-for-Linux.patch \
            "
-SRC_URI_append_class-target = " file://0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch \
-                               "
-SRC_URI_append_class-nativesdk = " file://0001-CMakeLists.txt-Fix-grpc_cpp_plugin-path-during-cross.patch"
-
 # Fixes build with older compilers 4.8 especially on ubuntu 14.04
 CXXFLAGS_append_class-native = " -Wl,--no-as-needed"
 
@@ -32,7 +25,8 @@
     -DgRPC_ZLIB_PROVIDER=package \
     -DgRPC_SSL_PROVIDER=package \
     -DgRPC_PROTOBUF_PROVIDER=package \
-    -DgRPC_GFLAGS_PROVIDER=package \
+    -DgRPC_ABSL_PROVIDER=package \
+    -DgRPC_RE2_PROVIDER=package \
     -DgRPC_INSTALL=ON \
     -DCMAKE_CROSSCOMPILING=ON \
     -DBUILD_SHARED_LIBS=ON \
@@ -40,6 +34,20 @@
     -DgRPC_INSTALL_CMAKEDIR=${baselib}/cmake/${BPN} \
     "
 
+PACKAGECONFIG ??= "cpp"
+PACKAGECONFIG[cpp] = "-DgRPC_BUILD_GRPC_CPP_PLUGIN=ON,-DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF"
+PACKAGECONFIG[csharp] = "-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=ON,-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF"
+PACKAGECONFIG[node] = "-DgRPC_BUILD_GRPC_NODE_PLUGIN=ON,-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF"
+PACKAGECONFIG[objective-c] = "-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=ON,-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF"
+PACKAGECONFIG[php] = "-DgRPC_BUILD_GRPC_PHP_PLUGIN=ON,-DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF"
+PACKAGECONFIG[python] = "-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=ON,-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF"
+PACKAGECONFIG[ruby] = "-DgRPC_BUILD_GRPC_RUBY_PLUGIN=ON,-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF"
+PACKAGECONFIG[protobuf-lite] = "-DgRPC_USE_PROTO_LITE=ON,-DgRPC_USE_PROTO_LITE=OFF,protobuf-lite"
+
+do_configure_prepend() {
+    sed -i -e "s#lib/pkgconfig/#${baselib}/pkgconfig/#g" ${S}/CMakeLists.txt
+}
+
 do_configure_prepend_mipsarch() {
     sed -i -e "s/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} rt m pthread)/set(_gRPC_ALLTARGETS_LIBRARIES \${CMAKE_DL_LIBS} atomic rt m pthread)/g" ${S}/CMakeLists.txt
 }
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch
index f123b3f..a29c8ce 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit/0001-Do-not-strip-automatically-this-leaves-the-stripping.patch
@@ -1,8 +1,7 @@
 From 528009f5ca0685c95ef27f6c8957160499c0576a Mon Sep 17 00:00:00 2001
 From: Khem Raj <raj.khem@gmail.com>
 Date: Fri, 10 May 2013 10:42:45 -0700
-Subject: [PATCH] Do not strip automatically, this leaves the stripping
- busines to OE
+Subject: [PATCH] Do not strip automatically, this leaves the stripping busines to OE
 
 Upstream-Status: Inappropriate [OE-Specific]
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
index 6573efc..7538352 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/luajit/luajit_git.bb
@@ -1,6 +1,6 @@
 SUMMARY = "Just-In-Time Compiler for Lua"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=d739bb9250a55c124a545b588fd76771"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=abe9020de9c00909317d02d5c803810e"
 HOMEPAGE = "http://luajit.org"
 
 SRC_URI = "git://luajit.org/git/luajit-2.0.git;protocol=http;branch=v2.1 \
@@ -8,9 +8,9 @@
            file://clang.patch \
            "
 
-# Set PV to a version tag and date associated with SRCREV if it is later.
-PV = "2.1.0~beta3-200809"
-SRCREV = "94d4abcca966df2cc423e821bcacd04898f73117"
+# Set PV to a version tag and date (YYMMDD) associated with SRCREV if it is later.
+PV = "2.1.0~beta3-210112"
+SRCREV = "ec6edc5c39c25e4eb3fca51b753f9995e97215da"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.2.bb b/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.2.bb
deleted file mode 100644
index 51b313c..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.2.bb
+++ /dev/null
@@ -1,47 +0,0 @@
-SUMMARY = "Message Passing Interface (MPI) implementation"
-HOMEPAGE = "http://www.mpich.org/"
-SECTION = "devel"
-
-LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=2106f0435056f3dd9349747a766e5816"
-
-SRC_URI = " \
-    http://www.mpich.org/static/downloads/${PV}/mpich-${PV}.tar.gz \
-"
-
-SRC_URI[md5sum] = "f414cfa77099cd1fa1a5ae4e22db508a"
-SRC_URI[sha256sum] = "0778679a6b693d7b7caff37ff9d2856dc2bfc51318bf8373859bfa74253da3dc"
-
-RDEPENDS_${PN} += "bash perl libxml2"
-S = "${WORKDIR}/${BP}"
-
-EXTRA_OECONF = "--enable-debuginfo \
-    --enable-fast \
-    --enable-shared  \
-    --with-pm=gforker  \
-    --disable-rpath \
-    --disable-f77 \
-    --disable-fc \
-    --disable-fortran \
-    --disable-cxx \
-    BASH_SHELL='${USRBINPATH}/env bash' \
-    PERL='${USRBINPATH}/env perl' \
-"
-
-inherit autotools-brokensep gettext
-
-do_configure_prepend() {
-    for d in confdb test/mpi/confdb src/openpa/confdb src/pm/hydra/confdb src/pm/hydra/tools/topo/hwloc/hwloc/config src/pm/hydra/mpl/confdb src/mpl/confdb src/mpi/romio/confdb;  do
-        install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/$d
-        install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/$d
-    done
-
-    autoreconf --verbose --install --force -I . -I confdb/ -I maint/
-    oe_runconf
-    exit
-}
-
-do_install_append() {
-    sed -i 's,${S}/,,g' ${D}/${libdir}/libmpi.la
-    sed -i 's,${DEBUG_PREFIX_MAP},,g' ${D}/${libdir}/pkgconfig/mpich.pc
-}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.4.1.bb b/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.4.1.bb
new file mode 100644
index 0000000..77e080c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/mpich/mpich_3.4.1.bb
@@ -0,0 +1,54 @@
+SUMMARY = "Message Passing Interface (MPI) implementation"
+HOMEPAGE = "http://www.mpich.org/"
+SECTION = "devel"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=bd4d7ab13df98988b1ca2a4e01c8c163"
+
+SRC_URI = "http://www.mpich.org/static/downloads/${PV}/mpich-${PV}.tar.gz"
+SRC_URI[sha256sum] = "8836939804ef6d492bcee7d54abafd6477d2beca247157d92688654d13779727"
+
+RDEPENDS_${PN} += "bash perl libxml2"
+
+EXTRA_OECONF = "--enable-debuginfo \
+    --enable-fast \
+    --enable-shared  \
+    --with-pm=gforker  \
+    --disable-rpath \
+    --disable-f77 \
+    --disable-fc \
+    --disable-fortran \
+    --disable-cxx \
+    BASH_SHELL='${USRBINPATH}/env bash' \
+    PERL='${USRBINPATH}/env perl' \
+    --with-device=ch3:nemesis \
+    --with-rdmacm=no \
+    --disable-numa \
+"
+
+PACKAGECONFIG += " \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+"
+PACKAGECONFIG[x11] = "--with-x --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR},--without-x,virtual/libx11"
+
+inherit autotools gettext pkgconfig
+
+do_configure() {
+    for d in confdb test/mpi test/mpi/confdb src/pm/hydra/confdb \
+        src/pm/hydra/tools/topo/hwloc/hwloc/config src/pm/hydra/mpl/confdb \
+        modules/yaksa/m4 modules/json-c modules/ucx test/mpi/dtpools/confdb \
+        src/mpl/confdb src/mpi/romio/confdb;  do
+        install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/$d
+        install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/$d
+    done
+#    cd ${S}
+#    autoupdate
+#    autoreconf --verbose --install --force
+#    cd ${B}
+    oe_runconf
+}
+
+do_install_append() {
+    sed -i 's,${S}/,,g' ${D}/${libdir}/libmpi.la
+    sed -i 's,${DEBUG_PREFIX_MAP},,g' ${D}/${libdir}/pkgconfig/mpich.pc
+}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.20.1.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.20.2.bb
similarity index 98%
rename from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.20.1.bb
rename to meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.20.2.bb
index 0673a32..6acc36b 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.20.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_12.20.2.bb
@@ -26,7 +26,7 @@
 SRC_URI_append_class-target = " \
            file://0002-Using-native-binaries.patch \
            "
-SRC_URI[sha256sum] = "e00eee325d705b2bfa9929b7d061eb2315402d7e8548945eac9870bf84321853"
+SRC_URI[sha256sum] = "961ad600f0706c396390ebc7767fb01d5e3792a5022dc2e7774796756eec6d3c"
 
 S = "${WORKDIR}/node-v${PV}"
 
diff --git a/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.9.bb b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.9.bb
index 25b8137..f8a8755 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.9.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/php/php_7.4.9.bb
@@ -205,7 +205,7 @@
 
 MODPHP_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'apache2', '${PN}-modphp', '', d)}"
 
-PACKAGES = "${PN}-dbg ${PN}-cli ${PN}-cgi ${PN}-fpm ${PN}-fpm-apache2 ${PN}-pear ${PN}-phar ${MODPHP_PACKAGE} ${PN}-dev ${PN}-staticdev ${PN}-doc ${PN}-opcache ${PN}"
+PACKAGES = "${PN}-dbg ${PN}-cli ${PN}-phpdbg ${PN}-cgi ${PN}-fpm ${PN}-fpm-apache2 ${PN}-pear ${PN}-phar ${MODPHP_PACKAGE} ${PN}-dev ${PN}-staticdev ${PN}-doc ${PN}-opcache ${PN}"
 
 RDEPENDS_${PN} += "libgcc"
 RDEPENDS_${PN}-pear = "${PN}"
@@ -221,6 +221,7 @@
                     ${libexecdir}/apache2/modules/.debug"
 FILES_${PN}-doc += "${PHP_LIBDIR}/php/doc"
 FILES_${PN}-cli = "${bindir}/php"
+FILES_${PN}-phpdbg = "${bindir}/phpdbg"
 FILES_${PN}-phar = "${bindir}/phar*"
 FILES_${PN}-cgi = "${bindir}/php-cgi"
 FILES_${PN}-fpm = "${sbindir}/php-fpm ${sysconfdir}/php-fpm.conf ${datadir}/fpm ${sysconfdir}/init.d/php-fpm ${systemd_unitdir}/system/php-fpm.service ${sysconfdir}/php-fpm.d/www.conf.default"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-fix-m4-pthread-update.patch b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-fix-m4-pthread-update.patch
deleted file mode 100644
index 7e4aa10..0000000
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf/0001-fix-m4-pthread-update.patch
+++ /dev/null
@@ -1,731 +0,0 @@
-From 8cfb4284b4e8b2893bd30e9c764d45f288e71efb Mon Sep 17 00:00:00 2001
-From: Adam Cozzette <acozzette@google.com>
-Date: Fri, 20 Nov 2020 16:36:56 -0800
-Subject: [PATCH] Updated ax_pthread.m4 to its most recent upstream version
-
-This should fix #8059.
-
-Upstream-Status: Backport [471317f03adc09a0436670c31d58264b3bef6561]
-Signed-off-by: Adrian Herrera <adrian.herrera@arm.com>
-Expected version: v4.0.0+
----
- m4/ax_pthread.m4 | 614 ++++++++++++++++++++++++-----------------------
- 1 file changed, 318 insertions(+), 296 deletions(-)
-
-diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
-index d218d1af73..1598d077ff 100644
---- a/m4/ax_pthread.m4
-+++ b/m4/ax_pthread.m4
-@@ -1,5 +1,5 @@
- # ===========================================================================
--#        http://www.gnu.org/software/autoconf-archive/ax_pthread.html
-+#        https://www.gnu.org/software/autoconf-archive/ax_pthread.html
- # ===========================================================================
- #
- # SYNOPSIS
-@@ -55,6 +55,7 @@
- #
- #   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
- #   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
-+#   Copyright (c) 2019 Marc Stevens <marc.stevens@cwi.nl>
- #
- #   This program is free software: you can redistribute it and/or modify it
- #   under the terms of the GNU General Public License as published by the
-@@ -67,7 +68,7 @@
- #   Public License for more details.
- #
- #   You should have received a copy of the GNU General Public License along
--#   with this program. If not, see <http://www.gnu.org/licenses/>.
-+#   with this program. If not, see <https://www.gnu.org/licenses/>.
- #
- #   As a special exception, the respective Autoconf Macro's copyright owner
- #   gives unlimited permission to copy, distribute and modify the configure
-@@ -82,7 +83,7 @@
- #   modified version of the Autoconf Macro, you may extend this special
- #   exception to the GPL to apply to your modified version as well.
- 
--#serial 22
-+#serial 27
- 
- AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
- AC_DEFUN([AX_PTHREAD], [
-@@ -100,22 +101,22 @@ ax_pthread_ok=no
- # etcetera environment variables, and if threads linking works using
- # them:
- if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
--	ax_pthread_save_CC="$CC"
--	ax_pthread_save_CFLAGS="$CFLAGS"
--	ax_pthread_save_LIBS="$LIBS"
--	AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
--	CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
--	LIBS="$PTHREAD_LIBS $LIBS"
--	AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
--	AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
--	AC_MSG_RESULT([$ax_pthread_ok])
--	if test "x$ax_pthread_ok" = "xno"; then
--		PTHREAD_LIBS=""
--		PTHREAD_CFLAGS=""
--	fi
--	CC="$ax_pthread_save_CC"
--	CFLAGS="$ax_pthread_save_CFLAGS"
--	LIBS="$ax_pthread_save_LIBS"
-+        ax_pthread_save_CC="$CC"
-+        ax_pthread_save_CFLAGS="$CFLAGS"
-+        ax_pthread_save_LIBS="$LIBS"
-+        AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
-+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-+        LIBS="$PTHREAD_LIBS $LIBS"
-+        AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
-+        AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
-+        AC_MSG_RESULT([$ax_pthread_ok])
-+        if test "x$ax_pthread_ok" = "xno"; then
-+                PTHREAD_LIBS=""
-+                PTHREAD_CFLAGS=""
-+        fi
-+        CC="$ax_pthread_save_CC"
-+        CFLAGS="$ax_pthread_save_CFLAGS"
-+        LIBS="$ax_pthread_save_LIBS"
- fi
- 
- # We must check for the threads library under a number of different
-@@ -123,10 +124,12 @@ fi
- # (e.g. DEC) have both -lpthread and -lpthreads, where one of the
- # libraries is broken (non-POSIX).
- 
--# Create a list of thread flags to try.  Items starting with a "-" are
--# C compiler flags, and other items are library names, except for "none"
--# which indicates that we try without any flags at all, and "pthread-config"
--# which is a program returning the flags for the Pth emulation library.
-+# Create a list of thread flags to try. Items with a "," contain both
-+# C compiler flags (before ",") and linker flags (after ","). Other items
-+# starting with a "-" are C compiler flags, and remaining items are
-+# library names, except for "none" which indicates that we try without
-+# any flags at all, and "pthread-config" which is a program returning
-+# the flags for the Pth emulation library.
- 
- ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
- 
-@@ -152,319 +155,338 @@ ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --
- 
- case $host_os in
- 
--	freebsd*)
-+        freebsd*)
- 
--	# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
--	# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-+        # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-+        # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
- 
--	ax_pthread_flags="-kthread lthread $ax_pthread_flags"
--	;;
-+        ax_pthread_flags="-kthread lthread $ax_pthread_flags"
-+        ;;
- 
--	hpux*)
-+        hpux*)
- 
--	# From the cc(1) man page: "[-mt] Sets various -D flags to enable
--	# multi-threading and also sets -lpthread."
-+        # From the cc(1) man page: "[-mt] Sets various -D flags to enable
-+        # multi-threading and also sets -lpthread."
- 
--	ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
--	;;
-+        ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
-+        ;;
- 
--	openedition*)
-+        openedition*)
- 
--	# IBM z/OS requires a feature-test macro to be defined in order to
--	# enable POSIX threads at all, so give the user a hint if this is
--	# not set. (We don't define these ourselves, as they can affect
--	# other portions of the system API in unpredictable ways.)
-+        # IBM z/OS requires a feature-test macro to be defined in order to
-+        # enable POSIX threads at all, so give the user a hint if this is
-+        # not set. (We don't define these ourselves, as they can affect
-+        # other portions of the system API in unpredictable ways.)
- 
--	AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
--	    [
--#	     if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
--	     AX_PTHREAD_ZOS_MISSING
--#	     endif
--	    ],
--	    [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
--	;;
-+        AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
-+            [
-+#            if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
-+             AX_PTHREAD_ZOS_MISSING
-+#            endif
-+            ],
-+            [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
-+        ;;
- 
--	solaris*)
-+        solaris*)
- 
--	# On Solaris (at least, for some versions), libc contains stubbed
--	# (non-functional) versions of the pthreads routines, so link-based
--	# tests will erroneously succeed. (N.B.: The stubs are missing
--	# pthread_cleanup_push, or rather a function called by this macro,
--	# so we could check for that, but who knows whether they'll stub
--	# that too in a future libc.)  So we'll check first for the
--	# standard Solaris way of linking pthreads (-mt -lpthread).
-+        # On Solaris (at least, for some versions), libc contains stubbed
-+        # (non-functional) versions of the pthreads routines, so link-based
-+        # tests will erroneously succeed. (N.B.: The stubs are missing
-+        # pthread_cleanup_push, or rather a function called by this macro,
-+        # so we could check for that, but who knows whether they'll stub
-+        # that too in a future libc.)  So we'll check first for the
-+        # standard Solaris way of linking pthreads (-mt -lpthread).
- 
--	ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
--	;;
-+        ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags"
-+        ;;
- esac
- 
-+# Are we compiling with Clang?
-+
-+AC_CACHE_CHECK([whether $CC is Clang],
-+    [ax_cv_PTHREAD_CLANG],
-+    [ax_cv_PTHREAD_CLANG=no
-+     # Note that Autoconf sets GCC=yes for Clang as well as GCC
-+     if test "x$GCC" = "xyes"; then
-+        AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
-+            [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
-+#            if defined(__clang__) && defined(__llvm__)
-+             AX_PTHREAD_CC_IS_CLANG
-+#            endif
-+            ],
-+            [ax_cv_PTHREAD_CLANG=yes])
-+     fi
-+    ])
-+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
-+
-+
- # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
- 
-+# Note that for GCC and Clang -pthread generally implies -lpthread,
-+# except when -nostdlib is passed.
-+# This is problematic using libtool to build C++ shared libraries with pthread:
-+# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460
-+# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333
-+# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555
-+# To solve this, first try -pthread together with -lpthread for GCC
-+
- AS_IF([test "x$GCC" = "xyes"],
--      [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"])
-+      [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"])
-+
-+# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first
-+
-+AS_IF([test "x$ax_pthread_clang" = "xyes"],
-+      [ax_pthread_flags="-pthread,-lpthread -pthread"])
-+
- 
- # The presence of a feature test macro requesting re-entrant function
- # definitions is, on some systems, a strong hint that pthreads support is
- # correctly enabled
- 
- case $host_os in
--	darwin* | hpux* | linux* | osf* | solaris*)
--	ax_pthread_check_macro="_REENTRANT"
--	;;
-+        darwin* | hpux* | linux* | osf* | solaris*)
-+        ax_pthread_check_macro="_REENTRANT"
-+        ;;
- 
--	aix* | freebsd*)
--	ax_pthread_check_macro="_THREAD_SAFE"
--	;;
-+        aix*)
-+        ax_pthread_check_macro="_THREAD_SAFE"
-+        ;;
- 
--	*)
--	ax_pthread_check_macro="--"
--	;;
-+        *)
-+        ax_pthread_check_macro="--"
-+        ;;
- esac
- AS_IF([test "x$ax_pthread_check_macro" = "x--"],
-       [ax_pthread_check_cond=0],
-       [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
- 
--# Are we compiling with Clang?
- 
--AC_CACHE_CHECK([whether $CC is Clang],
--    [ax_cv_PTHREAD_CLANG],
--    [ax_cv_PTHREAD_CLANG=no
--     # Note that Autoconf sets GCC=yes for Clang as well as GCC
--     if test "x$GCC" = "xyes"; then
--	AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
--	    [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
--#	     if defined(__clang__) && defined(__llvm__)
--	     AX_PTHREAD_CC_IS_CLANG
--#	     endif
--	    ],
--	    [ax_cv_PTHREAD_CLANG=yes])
--     fi
--    ])
--ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
-+if test "x$ax_pthread_ok" = "xno"; then
-+for ax_pthread_try_flag in $ax_pthread_flags; do
-+
-+        case $ax_pthread_try_flag in
-+                none)
-+                AC_MSG_CHECKING([whether pthreads work without any flags])
-+                ;;
-+
-+                *,*)
-+                PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"`
-+                PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"`
-+                AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"])
-+                ;;
-+
-+                -*)
-+                AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
-+                PTHREAD_CFLAGS="$ax_pthread_try_flag"
-+                ;;
-+
-+                pthread-config)
-+                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
-+                AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
-+                PTHREAD_CFLAGS="`pthread-config --cflags`"
-+                PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
-+                ;;
-+
-+                *)
-+                AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
-+                PTHREAD_LIBS="-l$ax_pthread_try_flag"
-+                ;;
-+        esac
-+
-+        ax_pthread_save_CFLAGS="$CFLAGS"
-+        ax_pthread_save_LIBS="$LIBS"
-+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-+        LIBS="$PTHREAD_LIBS $LIBS"
-+
-+        # Check for various functions.  We must include pthread.h,
-+        # since some functions may be macros.  (On the Sequent, we
-+        # need a special flag -Kthread to make this header compile.)
-+        # We check for pthread_join because it is in -lpthread on IRIX
-+        # while pthread_create is in libc.  We check for pthread_attr_init
-+        # due to DEC craziness with -lpthreads.  We check for
-+        # pthread_cleanup_push because it is one of the few pthread
-+        # functions on Solaris that doesn't have a non-functional libc stub.
-+        # We try pthread_create on general principles.
-+
-+        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
-+#                       if $ax_pthread_check_cond
-+#                        error "$ax_pthread_check_macro must be defined"
-+#                       endif
-+                        static void *some_global = NULL;
-+                        static void routine(void *a)
-+                          {
-+                             /* To avoid any unused-parameter or
-+                                unused-but-set-parameter warning.  */
-+                             some_global = a;
-+                          }
-+                        static void *start_routine(void *a) { return a; }],
-+                       [pthread_t th; pthread_attr_t attr;
-+                        pthread_create(&th, 0, start_routine, 0);
-+                        pthread_join(th, 0);
-+                        pthread_attr_init(&attr);
-+                        pthread_cleanup_push(routine, 0);
-+                        pthread_cleanup_pop(0) /* ; */])],
-+            [ax_pthread_ok=yes],
-+            [])
-+
-+        CFLAGS="$ax_pthread_save_CFLAGS"
-+        LIBS="$ax_pthread_save_LIBS"
-+
-+        AC_MSG_RESULT([$ax_pthread_ok])
-+        AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
-+
-+        PTHREAD_LIBS=""
-+        PTHREAD_CFLAGS=""
-+done
-+fi
- 
--ax_pthread_clang_warning=no
- 
- # Clang needs special handling, because older versions handle the -pthread
- # option in a rather... idiosyncratic way
- 
- if test "x$ax_pthread_clang" = "xyes"; then
- 
--	# Clang takes -pthread; it has never supported any other flag
--
--	# (Note 1: This will need to be revisited if a system that Clang
--	# supports has POSIX threads in a separate library.  This tends not
--	# to be the way of modern systems, but it's conceivable.)
--
--	# (Note 2: On some systems, notably Darwin, -pthread is not needed
--	# to get POSIX threads support; the API is always present and
--	# active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
--	# -pthread does define _REENTRANT, and while the Darwin headers
--	# ignore this macro, third-party headers might not.)
--
--	PTHREAD_CFLAGS="-pthread"
--	PTHREAD_LIBS=
--
--	ax_pthread_ok=yes
--
--	# However, older versions of Clang make a point of warning the user
--	# that, in an invocation where only linking and no compilation is
--	# taking place, the -pthread option has no effect ("argument unused
--	# during compilation").  They expect -pthread to be passed in only
--	# when source code is being compiled.
--	#
--	# Problem is, this is at odds with the way Automake and most other
--	# C build frameworks function, which is that the same flags used in
--	# compilation (CFLAGS) are also used in linking.  Many systems
--	# supported by AX_PTHREAD require exactly this for POSIX threads
--	# support, and in fact it is often not straightforward to specify a
--	# flag that is used only in the compilation phase and not in
--	# linking.  Such a scenario is extremely rare in practice.
--	#
--	# Even though use of the -pthread flag in linking would only print
--	# a warning, this can be a nuisance for well-run software projects
--	# that build with -Werror.  So if the active version of Clang has
--	# this misfeature, we search for an option to squash it.
--
--	AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
--	    [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
--	    [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
--	     # Create an alternate version of $ac_link that compiles and
--	     # links in two steps (.c -> .o, .o -> exe) instead of one
--	     # (.c -> exe), because the warning occurs only in the second
--	     # step
--	     ax_pthread_save_ac_link="$ac_link"
--	     ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
--	     ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
--	     ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
--	     ax_pthread_save_CFLAGS="$CFLAGS"
--	     for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
--		AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
--		CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
--		ac_link="$ax_pthread_save_ac_link"
--		AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
--		    [ac_link="$ax_pthread_2step_ac_link"
--		     AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
--			 [break])
--		    ])
--	     done
--	     ac_link="$ax_pthread_save_ac_link"
--	     CFLAGS="$ax_pthread_save_CFLAGS"
--	     AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
--	     ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
--	    ])
--
--	case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
--		no | unknown) ;;
--		*) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
--	esac
-+        # Clang takes -pthread; it has never supported any other flag
-+
-+        # (Note 1: This will need to be revisited if a system that Clang
-+        # supports has POSIX threads in a separate library.  This tends not
-+        # to be the way of modern systems, but it's conceivable.)
-+
-+        # (Note 2: On some systems, notably Darwin, -pthread is not needed
-+        # to get POSIX threads support; the API is always present and
-+        # active.  We could reasonably leave PTHREAD_CFLAGS empty.  But
-+        # -pthread does define _REENTRANT, and while the Darwin headers
-+        # ignore this macro, third-party headers might not.)
-+
-+        # However, older versions of Clang make a point of warning the user
-+        # that, in an invocation where only linking and no compilation is
-+        # taking place, the -pthread option has no effect ("argument unused
-+        # during compilation").  They expect -pthread to be passed in only
-+        # when source code is being compiled.
-+        #
-+        # Problem is, this is at odds with the way Automake and most other
-+        # C build frameworks function, which is that the same flags used in
-+        # compilation (CFLAGS) are also used in linking.  Many systems
-+        # supported by AX_PTHREAD require exactly this for POSIX threads
-+        # support, and in fact it is often not straightforward to specify a
-+        # flag that is used only in the compilation phase and not in
-+        # linking.  Such a scenario is extremely rare in practice.
-+        #
-+        # Even though use of the -pthread flag in linking would only print
-+        # a warning, this can be a nuisance for well-run software projects
-+        # that build with -Werror.  So if the active version of Clang has
-+        # this misfeature, we search for an option to squash it.
-+
-+        AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
-+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
-+            [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
-+             # Create an alternate version of $ac_link that compiles and
-+             # links in two steps (.c -> .o, .o -> exe) instead of one
-+             # (.c -> exe), because the warning occurs only in the second
-+             # step
-+             ax_pthread_save_ac_link="$ac_link"
-+             ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
-+             ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
-+             ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
-+             ax_pthread_save_CFLAGS="$CFLAGS"
-+             for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
-+                AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
-+                CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
-+                ac_link="$ax_pthread_save_ac_link"
-+                AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
-+                    [ac_link="$ax_pthread_2step_ac_link"
-+                     AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
-+                         [break])
-+                    ])
-+             done
-+             ac_link="$ax_pthread_save_ac_link"
-+             CFLAGS="$ax_pthread_save_CFLAGS"
-+             AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
-+             ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
-+            ])
-+
-+        case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
-+                no | unknown) ;;
-+                *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
-+        esac
- 
- fi # $ax_pthread_clang = yes
- 
--if test "x$ax_pthread_ok" = "xno"; then
--for ax_pthread_try_flag in $ax_pthread_flags; do
- 
--	case $ax_pthread_try_flag in
--		none)
--		AC_MSG_CHECKING([whether pthreads work without any flags])
--		;;
--
--		-mt,pthread)
--		AC_MSG_CHECKING([whether pthreads work with -mt -lpthread])
--		PTHREAD_CFLAGS="-mt"
--		PTHREAD_LIBS="-lpthread"
--		;;
--
--		-*)
--		AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
--		PTHREAD_CFLAGS="$ax_pthread_try_flag"
--		;;
--
--		pthread-config)
--		AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
--		AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
--		PTHREAD_CFLAGS="`pthread-config --cflags`"
--		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
--		;;
--
--		*)
--		AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
--		PTHREAD_LIBS="-l$ax_pthread_try_flag"
--		;;
--	esac
--
--	ax_pthread_save_CFLAGS="$CFLAGS"
--	ax_pthread_save_LIBS="$LIBS"
--	CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
--	LIBS="$PTHREAD_LIBS $LIBS"
--
--	# Check for various functions.  We must include pthread.h,
--	# since some functions may be macros.  (On the Sequent, we
--	# need a special flag -Kthread to make this header compile.)
--	# We check for pthread_join because it is in -lpthread on IRIX
--	# while pthread_create is in libc.  We check for pthread_attr_init
--	# due to DEC craziness with -lpthreads.  We check for
--	# pthread_cleanup_push because it is one of the few pthread
--	# functions on Solaris that doesn't have a non-functional libc stub.
--	# We try pthread_create on general principles.
--
--	AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
--#			if $ax_pthread_check_cond
--#			 error "$ax_pthread_check_macro must be defined"
--#			endif
--			static void routine(void *a) { a = 0; }
--			static void *start_routine(void *a) { return a; }],
--		       [pthread_t th; pthread_attr_t attr;
--			pthread_create(&th, 0, start_routine, 0);
--			pthread_join(th, 0);
--			pthread_attr_init(&attr);
--			pthread_cleanup_push(routine, 0);
--			pthread_cleanup_pop(0) /* ; */])],
--	    [ax_pthread_ok=yes],
--	    [])
--
--	CFLAGS="$ax_pthread_save_CFLAGS"
--	LIBS="$ax_pthread_save_LIBS"
--
--	AC_MSG_RESULT([$ax_pthread_ok])
--	AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
--
--	PTHREAD_LIBS=""
--	PTHREAD_CFLAGS=""
--done
--fi
- 
- # Various other checks:
- if test "x$ax_pthread_ok" = "xyes"; then
--	ax_pthread_save_CFLAGS="$CFLAGS"
--	ax_pthread_save_LIBS="$LIBS"
--	CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
--	LIBS="$PTHREAD_LIBS $LIBS"
--
--	# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
--	AC_CACHE_CHECK([for joinable pthread attribute],
--	    [ax_cv_PTHREAD_JOINABLE_ATTR],
--	    [ax_cv_PTHREAD_JOINABLE_ATTR=unknown
--	     for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
--		 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
--						 [int attr = $ax_pthread_attr; return attr /* ; */])],
--				[ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
--				[])
--	     done
--	    ])
--	AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
--	       test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
--	       test "x$ax_pthread_joinable_attr_defined" != "xyes"],
--	      [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
--				  [$ax_cv_PTHREAD_JOINABLE_ATTR],
--				  [Define to necessary symbol if this constant
--				   uses a non-standard name on your system.])
--	       ax_pthread_joinable_attr_defined=yes
--	      ])
--
--	AC_CACHE_CHECK([whether more special flags are required for pthreads],
--	    [ax_cv_PTHREAD_SPECIAL_FLAGS],
--	    [ax_cv_PTHREAD_SPECIAL_FLAGS=no
--	     case $host_os in
--	     solaris*)
--	     ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
--	     ;;
--	     esac
--	    ])
--	AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
--	       test "x$ax_pthread_special_flags_added" != "xyes"],
--	      [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
--	       ax_pthread_special_flags_added=yes])
--
--	AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
--	    [ax_cv_PTHREAD_PRIO_INHERIT],
--	    [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
--					     [[int i = PTHREAD_PRIO_INHERIT;]])],
--			    [ax_cv_PTHREAD_PRIO_INHERIT=yes],
--			    [ax_cv_PTHREAD_PRIO_INHERIT=no])
--	    ])
--	AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
--	       test "x$ax_pthread_prio_inherit_defined" != "xyes"],
--	      [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
--	       ax_pthread_prio_inherit_defined=yes
--	      ])
--
--	CFLAGS="$ax_pthread_save_CFLAGS"
--	LIBS="$ax_pthread_save_LIBS"
--
--	# More AIX lossage: compile with *_r variant
--	if test "x$GCC" != "xyes"; then
--	    case $host_os in
--		aix*)
--		AS_CASE(["x/$CC"],
--		    [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
--		    [#handle absolute path differently from PATH based program lookup
--		     AS_CASE(["x$CC"],
--			 [x/*],
--			 [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
--			 [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
--		;;
--	    esac
--	fi
-+        ax_pthread_save_CFLAGS="$CFLAGS"
-+        ax_pthread_save_LIBS="$LIBS"
-+        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-+        LIBS="$PTHREAD_LIBS $LIBS"
-+
-+        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
-+        AC_CACHE_CHECK([for joinable pthread attribute],
-+            [ax_cv_PTHREAD_JOINABLE_ATTR],
-+            [ax_cv_PTHREAD_JOINABLE_ATTR=unknown
-+             for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
-+                 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
-+                                                 [int attr = $ax_pthread_attr; return attr /* ; */])],
-+                                [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
-+                                [])
-+             done
-+            ])
-+        AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
-+               test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
-+               test "x$ax_pthread_joinable_attr_defined" != "xyes"],
-+              [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
-+                                  [$ax_cv_PTHREAD_JOINABLE_ATTR],
-+                                  [Define to necessary symbol if this constant
-+                                   uses a non-standard name on your system.])
-+               ax_pthread_joinable_attr_defined=yes
-+              ])
-+
-+        AC_CACHE_CHECK([whether more special flags are required for pthreads],
-+            [ax_cv_PTHREAD_SPECIAL_FLAGS],
-+            [ax_cv_PTHREAD_SPECIAL_FLAGS=no
-+             case $host_os in
-+             solaris*)
-+             ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
-+             ;;
-+             esac
-+            ])
-+        AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
-+               test "x$ax_pthread_special_flags_added" != "xyes"],
-+              [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
-+               ax_pthread_special_flags_added=yes])
-+
-+        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
-+            [ax_cv_PTHREAD_PRIO_INHERIT],
-+            [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
-+                                             [[int i = PTHREAD_PRIO_INHERIT;
-+                                               return i;]])],
-+                            [ax_cv_PTHREAD_PRIO_INHERIT=yes],
-+                            [ax_cv_PTHREAD_PRIO_INHERIT=no])
-+            ])
-+        AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
-+               test "x$ax_pthread_prio_inherit_defined" != "xyes"],
-+              [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
-+               ax_pthread_prio_inherit_defined=yes
-+              ])
-+
-+        CFLAGS="$ax_pthread_save_CFLAGS"
-+        LIBS="$ax_pthread_save_LIBS"
-+
-+        # More AIX lossage: compile with *_r variant
-+        if test "x$GCC" != "xyes"; then
-+            case $host_os in
-+                aix*)
-+                AS_CASE(["x/$CC"],
-+                    [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
-+                    [#handle absolute path differently from PATH based program lookup
-+                     AS_CASE(["x$CC"],
-+                         [x/*],
-+                         [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
-+                         [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
-+                ;;
-+            esac
-+        fi
- fi
- 
- test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
-@@ -475,11 +497,11 @@ AC_SUBST([PTHREAD_CC])
- 
- # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
- if test "x$ax_pthread_ok" = "xyes"; then
--	ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
--	:
-+        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
-+        :
- else
--	ax_pthread_ok=no
--	$2
-+        ax_pthread_ok=no
-+        $2
- fi
- AC_LANG_POP
- ])dnl AX_PTHREAD
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.14.0.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.15.2.bb
similarity index 96%
rename from meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.14.0.bb
rename to meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.15.2.bb
index 00f1e99..0392f93 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.14.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_3.15.2.bb
@@ -10,14 +10,13 @@
 DEPENDS = "zlib"
 DEPENDS_append_class-target = " protobuf-native"
 
-SRCREV = "2514f0bd7da7e2af1bed4c5d1b84f031c4d12c10"
+SRCREV = "d7e943b8d2bc444a8c770644e73d090b486f8b37"
 
 SRC_URI = "git://github.com/protocolbuffers/protobuf.git \
            file://run-ptest \
            file://0001-protobuf-fix-configure-error.patch \
            file://0001-Makefile.am-include-descriptor.cc-when-building-libp.patch \
            file://0001-examples-Makefile-respect-CXX-LDFLAGS-variables-fix-.patch \
-           file://0001-fix-m4-pthread-update.patch \
 "
 S = "${WORKDIR}/git"
 
