diff mbox series

[1/1] package/log4cxx: needs boost or C++17

Message ID 20211026195353.4055090-1-fontaine.fabrice@gmail.com
State Accepted
Headers show
Series [1/1] package/log4cxx: needs boost or C++17 | expand

Commit Message

Fabrice Fontaine Oct. 26, 2021, 7:53 p.m. UTC
log4cxx needs boost or C++17 since bump to version 0.12.0 in
commit 83a0e8dea203dc37c6c207a36b3f46160578dcc2 (see
https://github.com/apache/logging-log4cxx/commit/2ab3b78b9aa36524287764a129fa6ad96e89ca02):

In file included from /home/buildroot/autobuild/instance-3/output-1/build/log4cxx-0.12.0/src/main/cpp/action.cpp:18:0:
/home/buildroot/autobuild/instance-3/output-1/build/log4cxx-0.12.0/src/main/include/log4cxx/rolling/action.h:51:8: error: 'mutex' in namespace 'std' does not name a type
   std::mutex mutex;
        ^

Fixes:
 - http://autobuild.buildroot.org/results/71e/71eb8c4f69a2505242b3224bd79f4a96eb3b68a4/build-end.log

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 package/log4cxx/0001-LOGCXX-528.patch | 189 ++++++++++++++++++++++++++
 package/log4cxx/Config.in             |  14 ++
 package/log4cxx/log4cxx.mk            |   4 +
 3 files changed, 207 insertions(+)
 create mode 100644 package/log4cxx/0001-LOGCXX-528.patch

Comments

Arnout Vandecappelle Nov. 9, 2021, 10:17 p.m. UTC | #1
On 26/10/2021 21:53, Fabrice Fontaine wrote:
> log4cxx needs boost or C++17 since bump to version 0.12.0 in
> commit 83a0e8dea203dc37c6c207a36b3f46160578dcc2 (see
> https://github.com/apache/logging-log4cxx/commit/2ab3b78b9aa36524287764a129fa6ad96e89ca02):
> 
> In file included from /home/buildroot/autobuild/instance-3/output-1/build/log4cxx-0.12.0/src/main/cpp/action.cpp:18:0:
> /home/buildroot/autobuild/instance-3/output-1/build/log4cxx-0.12.0/src/main/include/log4cxx/rolling/action.h:51:8: error: 'mutex' in namespace 'std' does not name a type
>     std::mutex mutex;
>          ^
> 
> Fixes:
>   - http://autobuild.buildroot.org/results/71e/71eb8c4f69a2505242b3224bd79f4a96eb3b68a4/build-end.log
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

  Applied to master, thanks.

  Regards,
  Arnout

> ---
>   package/log4cxx/0001-LOGCXX-528.patch | 189 ++++++++++++++++++++++++++
>   package/log4cxx/Config.in             |  14 ++
>   package/log4cxx/log4cxx.mk            |   4 +
>   3 files changed, 207 insertions(+)
>   create mode 100644 package/log4cxx/0001-LOGCXX-528.patch
> 
> diff --git a/package/log4cxx/0001-LOGCXX-528.patch b/package/log4cxx/0001-LOGCXX-528.patch
> new file mode 100644
> index 0000000000..d1d3189024
> --- /dev/null
> +++ b/package/log4cxx/0001-LOGCXX-528.patch
> @@ -0,0 +1,189 @@
> +From 249dd85494a430d95fd69d89f42b02fd950cda51 Mon Sep 17 00:00:00 2001
> +From: Robert Middleton <rm5248@users.noreply.github.com>
> +Date: Thu, 22 Jul 2021 15:27:50 -0700
> +Subject: [PATCH] LOGCXX-528 (#66)
> +
> +Fixes for checking that C++11 is available.  Fix for older compilers.
> +
> +[Retrieved from:
> +https://github.com/apache/logging-log4cxx/commit/249dd85494a430d95fd69d89f42b02fd950cda51]
> +Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> +---
> + CMakeLists.txt                                | 10 +++++++++
> + src/cmake/boost-fallback/boost-fallback.cmake | 21 ++++++++++---------
> + src/main/cpp/hierarchy.cpp                    |  4 ++--
> + src/main/include/CMakeLists.txt               |  2 +-
> + .../log4cxx/helpers/appenderattachableimpl.h  |  1 +
> + .../include/log4cxx/helpers/aprinitializer.h  |  1 +
> + src/main/include/log4cxx/helpers/loglog.h     |  1 +
> + .../include/log4cxx/helpers/serversocket.h    |  1 +
> + src/main/include/log4cxx/level.h              |  1 +
> + src/main/include/log4cxx/rolling/action.h     |  1 +
> + 10 files changed, 30 insertions(+), 13 deletions(-)
> +
> +diff --git a/CMakeLists.txt b/CMakeLists.txt
> +index e5b44ef1a..9c6e63902 100644
> +--- a/CMakeLists.txt
> ++++ b/CMakeLists.txt
> +@@ -41,6 +41,9 @@ if( NOT "${CMAKE_CXX_STANDARD}")
> +     set(CMAKE_CXX_STANDARD 17)
> + endif()
> +
> ++# Don't allow for compiler-specific extensions
> ++set(CMAKE_CXX_EXTENSIONS OFF)
> ++
> + # Building
> + add_subdirectory(src)
> +
> +@@ -185,6 +188,13 @@ if(APACHE_MAINTAINER)
> + 	)
> + endif()
> +
> ++#
> ++# Check for any fatal configuration errors
> ++#
> ++if( "${SHARED_MUTEX_IMPL}" STREQUAL "NONE" )
> ++    message( FATAL_ERROR "No shared_mutex implementation found.  Requires Boost or C++17" )
> ++endif()
> ++
> + #
> + # Output configuration information
> + # Similar to APR CMake configuration
> +diff --git a/src/cmake/boost-fallback/boost-fallback.cmake b/src/cmake/boost-fallback/boost-fallback.cmake
> +index a8d7d441b..8285b0b99 100644
> +--- a/src/cmake/boost-fallback/boost-fallback.cmake
> ++++ b/src/cmake/boost-fallback/boost-fallback.cmake
> +@@ -56,16 +56,17 @@ try_compile(STD_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> +     "${CMAKE_CURRENT_LIST_DIR}/test-stdatomic.cpp")
> +
> + find_package(Boost COMPONENTS thread)
> +-try_compile(Boost_SHARED_PTR_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> +-    "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedptr.cpp")
> +-try_compile(Boost_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> +-    "${CMAKE_CURRENT_LIST_DIR}/test-boostmutex.cpp")
> +-try_compile(Boost_SHARED_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> +-    "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedmutex.cpp"
> +-    LINK_LIBRARIES Threads::Threads
> +-)
> +-try_compile(Boost_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> +-    "${CMAKE_CURRENT_LIST_DIR}/test-boostatomic.cpp")
> ++if( ${Boost_FOUND} )
> ++    try_compile(Boost_SHARED_PTR_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> ++        "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedptr.cpp")
> ++    try_compile(Boost_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> ++        "${CMAKE_CURRENT_LIST_DIR}/test-boostmutex.cpp")
> ++    try_compile(Boost_SHARED_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> ++        "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedmutex.cpp"
> ++        LINK_LIBRARIES Threads::Threads Boost::thread)
> ++    try_compile(Boost_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
> ++        "${CMAKE_CURRENT_LIST_DIR}/test-boostatomic.cpp")
> ++endif( ${Boost_FOUND} )
> +
> + # Link the target with the appropriate boost libraries(if required)
> + function(boostfallback_link target)
> +diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
> +index 4f5174448..c70d39dbb 100644
> +--- a/src/main/cpp/hierarchy.cpp
> ++++ b/src/main/cpp/hierarchy.cpp
> +@@ -223,7 +223,7 @@ LoggerPtr Hierarchy::getLogger(const LogString& name,
> + 	else
> + 	{
> + 		LoggerPtr logger(factory->makeNewLoggerInstance(pool, name));
> +-		logger->setHierarchy(weak_from_this());
> ++		logger->setHierarchy(shared_from_this());
> + 		loggers->insert(LoggerMap::value_type(name, logger));
> +
> + 		ProvisionNodeMap::iterator it2 = provisionNodes->find(name);
> +@@ -423,6 +423,6 @@ void Hierarchy::configureRoot(){
> + 	// LOGCXX-322 we need to turn the repositroy into a weak_ptr, and we
> + 	// can't use weak_from_this() in the constructor.
> + 	if( !root->getLoggerRepository().lock() ){
> +-		root->setHierarchy(weak_from_this());
> ++		root->setHierarchy(shared_from_this());
> + 	}
> + }
> +diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt
> +index 8183660a5..584941c97 100644
> +--- a/src/main/include/CMakeLists.txt
> ++++ b/src/main/include/CMakeLists.txt
> +@@ -133,7 +133,7 @@ if( ${STD_SHARED_MUTEX_FOUND} )
> + elseif( ${Boost_SHARED_MUTEX_FOUND} )
> +     set( SHARED_MUTEX_IMPL "boost::shared_mutex" )
> + else()
> +-    set( SMART_PTR_IMPL "NONE" )
> ++    set( SHARED_MUTEX_IMPL "NONE" )
> + endif()
> +
> + if( ${STD_ATOMIC_FOUND} )
> +diff --git a/src/main/include/log4cxx/helpers/appenderattachableimpl.h b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
> +index 40e77d93c..b80b5aade 100644
> +--- a/src/main/include/log4cxx/helpers/appenderattachableimpl.h
> ++++ b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
> +@@ -28,6 +28,7 @@
> + #include <log4cxx/helpers/object.h>
> + #include <log4cxx/helpers/pool.h>
> + #include <log4cxx/log4cxx.h>
> ++#include <mutex>
> +
> + namespace log4cxx
> + {
> +diff --git a/src/main/include/log4cxx/helpers/aprinitializer.h b/src/main/include/log4cxx/helpers/aprinitializer.h
> +index 6f3f55070..fccd18e0f 100644
> +--- a/src/main/include/log4cxx/helpers/aprinitializer.h
> ++++ b/src/main/include/log4cxx/helpers/aprinitializer.h
> +@@ -30,6 +30,7 @@ extern "C" {
> + }
> +
> + #include <apr_time.h>
> ++#include <mutex>
> +
> + namespace log4cxx
> + {
> +diff --git a/src/main/include/log4cxx/helpers/loglog.h b/src/main/include/log4cxx/helpers/loglog.h
> +index d54785ddc..a4c92416a 100644
> +--- a/src/main/include/log4cxx/helpers/loglog.h
> ++++ b/src/main/include/log4cxx/helpers/loglog.h
> +@@ -20,6 +20,7 @@
> +
> + #include <log4cxx/logstring.h>
> + #include <exception>
> ++#include <mutex>
> +
> + namespace log4cxx
> + {
> +diff --git a/src/main/include/log4cxx/helpers/serversocket.h b/src/main/include/log4cxx/helpers/serversocket.h
> +index e6e6d475e..7da75b969 100644
> +--- a/src/main/include/log4cxx/helpers/serversocket.h
> ++++ b/src/main/include/log4cxx/helpers/serversocket.h
> +@@ -19,6 +19,7 @@
> + #define _LOG4CXX_HELPERS_SERVER_SOCKET_H
> +
> + #include <log4cxx/helpers/socket.h>
> ++#include <mutex>
> +
> + namespace log4cxx
> + {
> +diff --git a/src/main/include/log4cxx/level.h b/src/main/include/log4cxx/level.h
> +index 4ca4bf28c..7848c902a 100644
> +--- a/src/main/include/log4cxx/level.h
> ++++ b/src/main/include/log4cxx/level.h
> +@@ -22,6 +22,7 @@
> + #include <log4cxx/logstring.h>
> + #include <limits.h>
> + #include <log4cxx/helpers/object.h>
> ++#include <mutex>
> +
> + #if defined(_MSC_VER)
> + 	#pragma warning ( push )
> +diff --git a/src/main/include/log4cxx/rolling/action.h b/src/main/include/log4cxx/rolling/action.h
> +index 0e8d55f36..fc4497813 100644
> +--- a/src/main/include/log4cxx/rolling/action.h
> ++++ b/src/main/include/log4cxx/rolling/action.h
> +@@ -21,6 +21,7 @@
> + #include <log4cxx/portability.h>
> + #include <log4cxx/helpers/object.h>
> + #include <log4cxx/helpers/pool.h>
> ++#include <mutex>
> +
> + namespace log4cxx
> + {
> diff --git a/package/log4cxx/Config.in b/package/log4cxx/Config.in
> index bf739a43ca..6f1956f829 100644
> --- a/package/log4cxx/Config.in
> +++ b/package/log4cxx/Config.in
> @@ -5,8 +5,14 @@ config BR2_PACKAGE_LOG4CXX
>   	depends on BR2_INSTALL_LIBSTDCPP
>   	depends on BR2_TOOLCHAIN_HAS_THREADS
>   	depends on BR2_USE_MMU # apr
> +	depends on BR2_USE_WCHAR || BR2_TOOLCHAIN_GCC_AT_LEAST_7 # boost
> +	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS || BR2_TOOLCHAIN_GCC_AT_LEAST_7 # boost-thread
> +	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 || BR2_TOOLCHAIN_GCC_AT_LEAST_7 # boost-thread
>   	select BR2_PACKAGE_APR
>   	select BR2_PACKAGE_APR_UTIL
> +	select BR2_PACKAGE_BOOST if !BR2_TOOLCHAIN_GCC_AT_LEAST_7
> +	select BR2_PACKAGE_BOOST_ATOMIC if !BR2_TOOLCHAIN_GCC_AT_LEAST_7
> +	select BR2_PACKAGE_BOOST_THREAD if !BR2_TOOLCHAIN_GCC_AT_LEAST_7
>   	help
>   	  Apache log4cxx is a logging framework for C++ patterned
>   	  after Apache log4j.
> @@ -17,3 +23,11 @@ comment "log4cxx needs a toolchain w/ C++, threads, dynamic library"
>   	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \
>   		BR2_STATIC_LIBS
>   	depends on BR2_USE_MMU
> +
> +comment "log4cxx needs a toolchain w/ wchar or gcc >= 7"
> +	depends on !(BR2_USE_WCHAR || BR2_TOOLCHAIN_GCC_AT_LEAST_7)
> +	depends on BR2_USE_MMU
> +
> +comment "log4cxx needs a toolchain not affected by GCC bug 64735"
> +	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_7
> +	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735
> diff --git a/package/log4cxx/log4cxx.mk b/package/log4cxx/log4cxx.mk
> index 8a7ca8ef17..e799b0fb16 100644
> --- a/package/log4cxx/log4cxx.mk
> +++ b/package/log4cxx/log4cxx.mk
> @@ -17,6 +17,10 @@ LOG4CXX_CONF_OPTS = \
>   
>   LOG4CXX_DEPENDENCIES = apr apr-util
>   
> +ifeq ($(BR2_PACKAGE_BOOST),y)
> +LOG4CXX_DEPENDENCIES += boost
> +endif
> +
>   ifeq ($(BR2_PACKAGE_LIBESMTP),y)
>   LOG4CXX_DEPENDENCIES += libesmtp
>   endif
>
diff mbox series

Patch

diff --git a/package/log4cxx/0001-LOGCXX-528.patch b/package/log4cxx/0001-LOGCXX-528.patch
new file mode 100644
index 0000000000..d1d3189024
--- /dev/null
+++ b/package/log4cxx/0001-LOGCXX-528.patch
@@ -0,0 +1,189 @@ 
+From 249dd85494a430d95fd69d89f42b02fd950cda51 Mon Sep 17 00:00:00 2001
+From: Robert Middleton <rm5248@users.noreply.github.com>
+Date: Thu, 22 Jul 2021 15:27:50 -0700
+Subject: [PATCH] LOGCXX-528 (#66)
+
+Fixes for checking that C++11 is available.  Fix for older compilers.
+
+[Retrieved from:
+https://github.com/apache/logging-log4cxx/commit/249dd85494a430d95fd69d89f42b02fd950cda51]
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ CMakeLists.txt                                | 10 +++++++++
+ src/cmake/boost-fallback/boost-fallback.cmake | 21 ++++++++++---------
+ src/main/cpp/hierarchy.cpp                    |  4 ++--
+ src/main/include/CMakeLists.txt               |  2 +-
+ .../log4cxx/helpers/appenderattachableimpl.h  |  1 +
+ .../include/log4cxx/helpers/aprinitializer.h  |  1 +
+ src/main/include/log4cxx/helpers/loglog.h     |  1 +
+ .../include/log4cxx/helpers/serversocket.h    |  1 +
+ src/main/include/log4cxx/level.h              |  1 +
+ src/main/include/log4cxx/rolling/action.h     |  1 +
+ 10 files changed, 30 insertions(+), 13 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e5b44ef1a..9c6e63902 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -41,6 +41,9 @@ if( NOT "${CMAKE_CXX_STANDARD}")
+     set(CMAKE_CXX_STANDARD 17)
+ endif()
+ 
++# Don't allow for compiler-specific extensions
++set(CMAKE_CXX_EXTENSIONS OFF)
++
+ # Building
+ add_subdirectory(src)
+ 
+@@ -185,6 +188,13 @@ if(APACHE_MAINTAINER)
+ 	)
+ endif()
+ 
++#
++# Check for any fatal configuration errors
++#
++if( "${SHARED_MUTEX_IMPL}" STREQUAL "NONE" )
++    message( FATAL_ERROR "No shared_mutex implementation found.  Requires Boost or C++17" )
++endif()
++
+ #
+ # Output configuration information
+ # Similar to APR CMake configuration
+diff --git a/src/cmake/boost-fallback/boost-fallback.cmake b/src/cmake/boost-fallback/boost-fallback.cmake
+index a8d7d441b..8285b0b99 100644
+--- a/src/cmake/boost-fallback/boost-fallback.cmake
++++ b/src/cmake/boost-fallback/boost-fallback.cmake
+@@ -56,16 +56,17 @@ try_compile(STD_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+     "${CMAKE_CURRENT_LIST_DIR}/test-stdatomic.cpp")
+ 
+ find_package(Boost COMPONENTS thread)
+-try_compile(Boost_SHARED_PTR_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+-    "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedptr.cpp")
+-try_compile(Boost_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+-    "${CMAKE_CURRENT_LIST_DIR}/test-boostmutex.cpp")
+-try_compile(Boost_SHARED_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+-    "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedmutex.cpp"
+-    LINK_LIBRARIES Threads::Threads
+-)
+-try_compile(Boost_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+-    "${CMAKE_CURRENT_LIST_DIR}/test-boostatomic.cpp")
++if( ${Boost_FOUND} )
++    try_compile(Boost_SHARED_PTR_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
++        "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedptr.cpp")
++    try_compile(Boost_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
++        "${CMAKE_CURRENT_LIST_DIR}/test-boostmutex.cpp")
++    try_compile(Boost_SHARED_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
++        "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedmutex.cpp"
++        LINK_LIBRARIES Threads::Threads Boost::thread)
++    try_compile(Boost_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
++        "${CMAKE_CURRENT_LIST_DIR}/test-boostatomic.cpp")
++endif( ${Boost_FOUND} )
+ 
+ # Link the target with the appropriate boost libraries(if required)
+ function(boostfallback_link target)
+diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
+index 4f5174448..c70d39dbb 100644
+--- a/src/main/cpp/hierarchy.cpp
++++ b/src/main/cpp/hierarchy.cpp
+@@ -223,7 +223,7 @@ LoggerPtr Hierarchy::getLogger(const LogString& name,
+ 	else
+ 	{
+ 		LoggerPtr logger(factory->makeNewLoggerInstance(pool, name));
+-		logger->setHierarchy(weak_from_this());
++		logger->setHierarchy(shared_from_this());
+ 		loggers->insert(LoggerMap::value_type(name, logger));
+ 
+ 		ProvisionNodeMap::iterator it2 = provisionNodes->find(name);
+@@ -423,6 +423,6 @@ void Hierarchy::configureRoot(){
+ 	// LOGCXX-322 we need to turn the repositroy into a weak_ptr, and we
+ 	// can't use weak_from_this() in the constructor.
+ 	if( !root->getLoggerRepository().lock() ){
+-		root->setHierarchy(weak_from_this());
++		root->setHierarchy(shared_from_this());
+ 	}
+ }
+diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt
+index 8183660a5..584941c97 100644
+--- a/src/main/include/CMakeLists.txt
++++ b/src/main/include/CMakeLists.txt
+@@ -133,7 +133,7 @@ if( ${STD_SHARED_MUTEX_FOUND} )
+ elseif( ${Boost_SHARED_MUTEX_FOUND} )
+     set( SHARED_MUTEX_IMPL "boost::shared_mutex" )
+ else()
+-    set( SMART_PTR_IMPL "NONE" )
++    set( SHARED_MUTEX_IMPL "NONE" )
+ endif()
+ 
+ if( ${STD_ATOMIC_FOUND} )
+diff --git a/src/main/include/log4cxx/helpers/appenderattachableimpl.h b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
+index 40e77d93c..b80b5aade 100644
+--- a/src/main/include/log4cxx/helpers/appenderattachableimpl.h
++++ b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
+@@ -28,6 +28,7 @@
+ #include <log4cxx/helpers/object.h>
+ #include <log4cxx/helpers/pool.h>
+ #include <log4cxx/log4cxx.h>
++#include <mutex>
+ 
+ namespace log4cxx
+ {
+diff --git a/src/main/include/log4cxx/helpers/aprinitializer.h b/src/main/include/log4cxx/helpers/aprinitializer.h
+index 6f3f55070..fccd18e0f 100644
+--- a/src/main/include/log4cxx/helpers/aprinitializer.h
++++ b/src/main/include/log4cxx/helpers/aprinitializer.h
+@@ -30,6 +30,7 @@ extern "C" {
+ }
+ 
+ #include <apr_time.h>
++#include <mutex>
+ 
+ namespace log4cxx
+ {
+diff --git a/src/main/include/log4cxx/helpers/loglog.h b/src/main/include/log4cxx/helpers/loglog.h
+index d54785ddc..a4c92416a 100644
+--- a/src/main/include/log4cxx/helpers/loglog.h
++++ b/src/main/include/log4cxx/helpers/loglog.h
+@@ -20,6 +20,7 @@
+ 
+ #include <log4cxx/logstring.h>
+ #include <exception>
++#include <mutex>
+ 
+ namespace log4cxx
+ {
+diff --git a/src/main/include/log4cxx/helpers/serversocket.h b/src/main/include/log4cxx/helpers/serversocket.h
+index e6e6d475e..7da75b969 100644
+--- a/src/main/include/log4cxx/helpers/serversocket.h
++++ b/src/main/include/log4cxx/helpers/serversocket.h
+@@ -19,6 +19,7 @@
+ #define _LOG4CXX_HELPERS_SERVER_SOCKET_H
+ 
+ #include <log4cxx/helpers/socket.h>
++#include <mutex>
+ 
+ namespace log4cxx
+ {
+diff --git a/src/main/include/log4cxx/level.h b/src/main/include/log4cxx/level.h
+index 4ca4bf28c..7848c902a 100644
+--- a/src/main/include/log4cxx/level.h
++++ b/src/main/include/log4cxx/level.h
+@@ -22,6 +22,7 @@
+ #include <log4cxx/logstring.h>
+ #include <limits.h>
+ #include <log4cxx/helpers/object.h>
++#include <mutex>
+ 
+ #if defined(_MSC_VER)
+ 	#pragma warning ( push )
+diff --git a/src/main/include/log4cxx/rolling/action.h b/src/main/include/log4cxx/rolling/action.h
+index 0e8d55f36..fc4497813 100644
+--- a/src/main/include/log4cxx/rolling/action.h
++++ b/src/main/include/log4cxx/rolling/action.h
+@@ -21,6 +21,7 @@
+ #include <log4cxx/portability.h>
+ #include <log4cxx/helpers/object.h>
+ #include <log4cxx/helpers/pool.h>
++#include <mutex>
+ 
+ namespace log4cxx
+ {
diff --git a/package/log4cxx/Config.in b/package/log4cxx/Config.in
index bf739a43ca..6f1956f829 100644
--- a/package/log4cxx/Config.in
+++ b/package/log4cxx/Config.in
@@ -5,8 +5,14 @@  config BR2_PACKAGE_LOG4CXX
 	depends on BR2_INSTALL_LIBSTDCPP
 	depends on BR2_TOOLCHAIN_HAS_THREADS
 	depends on BR2_USE_MMU # apr
+	depends on BR2_USE_WCHAR || BR2_TOOLCHAIN_GCC_AT_LEAST_7 # boost
+	depends on BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS || BR2_TOOLCHAIN_GCC_AT_LEAST_7 # boost-thread
+	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_64735 || BR2_TOOLCHAIN_GCC_AT_LEAST_7 # boost-thread
 	select BR2_PACKAGE_APR
 	select BR2_PACKAGE_APR_UTIL
+	select BR2_PACKAGE_BOOST if !BR2_TOOLCHAIN_GCC_AT_LEAST_7
+	select BR2_PACKAGE_BOOST_ATOMIC if !BR2_TOOLCHAIN_GCC_AT_LEAST_7
+	select BR2_PACKAGE_BOOST_THREAD if !BR2_TOOLCHAIN_GCC_AT_LEAST_7
 	help
 	  Apache log4cxx is a logging framework for C++ patterned
 	  after Apache log4j.
@@ -17,3 +23,11 @@  comment "log4cxx needs a toolchain w/ C++, threads, dynamic library"
 	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \
 		BR2_STATIC_LIBS
 	depends on BR2_USE_MMU
+
+comment "log4cxx needs a toolchain w/ wchar or gcc >= 7"
+	depends on !(BR2_USE_WCHAR || BR2_TOOLCHAIN_GCC_AT_LEAST_7)
+	depends on BR2_USE_MMU
+
+comment "log4cxx needs a toolchain not affected by GCC bug 64735"
+	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_7
+	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_64735
diff --git a/package/log4cxx/log4cxx.mk b/package/log4cxx/log4cxx.mk
index 8a7ca8ef17..e799b0fb16 100644
--- a/package/log4cxx/log4cxx.mk
+++ b/package/log4cxx/log4cxx.mk
@@ -17,6 +17,10 @@  LOG4CXX_CONF_OPTS = \
 
 LOG4CXX_DEPENDENCIES = apr apr-util
 
+ifeq ($(BR2_PACKAGE_BOOST),y)
+LOG4CXX_DEPENDENCIES += boost
+endif
+
 ifeq ($(BR2_PACKAGE_LIBESMTP),y)
 LOG4CXX_DEPENDENCIES += libesmtp
 endif