From 4c1fdd892d1a2b701272fba402e5a612fcb3eb80 Mon Sep 17 00:00:00 2001 From: Daniel Kulp Date: Mon, 8 Nov 2021 14:48:26 -0500 Subject: [PATCH] Put log4cpp patch in place --- README.macOS | 2 +- patches/log4cpp.patch | 117 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 patches/log4cpp.patch diff --git a/README.macOS b/README.macOS index 92dcf90..b34f53e 100644 --- a/README.macOS +++ b/README.macOS @@ -133,7 +133,7 @@ unset LDFLAGS log4cpp: Download latest src release (current 1.1.3) -patch -p1 < ~/working/xLights-macos/patches/log4cpp.patch +patch -p1 < ~/working/xLights/macOS/patches/log4cpp.patch export CXXFLAGS="-g -O2 -flto=thin ${OSX_VERSION_MIN} ${XL_TARGETS} -std=c++11 -stdlib=libc++ -fvisibility-inlines-hidden" export LDFLAGS="-flto=thin ${XL_TARGETS} " ./configure --prefix=/opt/local -host ${BUILD_HOST} diff --git a/patches/log4cpp.patch b/patches/log4cpp.patch new file mode 100644 index 0000000..d743c21 --- /dev/null +++ b/patches/log4cpp.patch @@ -0,0 +1,117 @@ +diff -Naur log4cpp.orig/configure log4cpp/configure +--- log4cpp.orig/configure 2017-07-13 01:39:43.000000000 -0400 ++++ log4cpp/configure 2020-09-16 14:08:00.000000000 -0400 +@@ -15321,11 +15321,12 @@ + $as_echo_n "(cached) " >&6 + else + if test "$cross_compiling" = yes; then : +- ac_cv_func_snprintf=no ++ ac_cv_func_snprintf=yes + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include ++#include + int main () { int l = snprintf(NULL,0,"%d",100); exit (!((3 <= l) || (-1 == l))); } + + _ACEOF +diff -Naur log4cpp.orig/src/Appender.cpp log4cpp/src/Appender.cpp +--- log4cpp.orig/src/Appender.cpp 2017-07-13 01:39:11.000000000 -0400 ++++ log4cpp/src/Appender.cpp 2020-09-16 14:07:49.000000000 -0400 +@@ -13,15 +13,18 @@ + + namespace log4cpp { + static int appenders_nifty_counter; // zero initialized at load time +- static char appenderMapStorage_buf[sizeof(Appender::AppenderMapStorage)]; // memory for the nifty-counter singleton object +- Appender::AppenderMapStorage &Appender::_appenderMapStorageInstance = reinterpret_cast (appenderMapStorage_buf); // memory for placement new +- ++ //static char appenderMapStorage_buf[sizeof(Appender::AppenderMapStorage)*10]; // memory for the nifty-counter singleton object ++ Appender::AppenderMapStorage *_appenderMapStorageInstanceInternal; ++/* ++ Appender::AppenderMapStorage &Appender::_appenderMapStorageInstance = _appenderMapStorageInstanceInternal;// = reinterpret_cast (appenderMapStorage_buf); // memory for placement new ++*/ + Appender::AppenderMapStorage::AppenderMapStorage() { + _allAppenders = new AppenderMap(); + } + Appender::AppenderMapStorage::~AppenderMapStorage() { + _deleteAllAppenders(); +- delete _allAppenders; ++ delete _allAppenders; ++ _allAppenders = nullptr; + } + + Appender::AppenderMapStorageInitializer::AppenderMapStorageInitializer() { +@@ -31,7 +34,9 @@ + #pragma push_macro("new") + #define new new + #endif // MSVC_MEMORY_LEAK_CHECK +- new (&_appenderMapStorageInstance) AppenderMapStorage(); // placement new ++ //printf("Size %d %d\n", sizeof(Appender::AppenderMapStorage), sizeof(appenderMapStorage_buf)); ++ _appenderMapStorageInstanceInternal = new AppenderMapStorage(); ++ //new (&_appenderMapStorageInstance) AppenderMapStorage(); // placement new + #ifdef MSVC_MEMORY_LEAK_CHECK + #pragma pop_macro("new") + #endif // MSVC_MEMORY_LEAK_CHECK +@@ -39,17 +44,19 @@ + } + Appender::AppenderMapStorageInitializer::~AppenderMapStorageInitializer() { + if (--appenders_nifty_counter == 0) { +- (&_appenderMapStorageInstance)->~AppenderMapStorage (); ++ delete _appenderMapStorageInstanceInternal; ++ _appenderMapStorageInstanceInternal = nullptr; ++ //(&_appenderMapStorageInstance)->~AppenderMapStorage (); + } + } + + /* assume _appenderMapMutex locked */ + Appender::AppenderMap& Appender::_getAllAppenders() { +- return *_appenderMapStorageInstance._allAppenders; ++ return *_appenderMapStorageInstanceInternal->_allAppenders; + } + + Appender* Appender::getAppender(const std::string& name) { +- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); ++ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); + AppenderMap& allAppenders = Appender::_getAllAppenders(); + AppenderMap::iterator i = allAppenders.find(name); + return (allAppenders.end() == i) ? NULL : ((*i).second); +@@ -57,18 +64,18 @@ + + void Appender::_addAppender(Appender* appender) { + //REQUIRE(_allAppenders.find(appender->getName()) == _getAllAppenders().end()) +- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); ++ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); + _getAllAppenders()[appender->getName()] = appender; + } + + void Appender::_removeAppender(Appender* appender) { +- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); ++ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); + //private called from destructor only, but may be triggered by client code in several treads + _getAllAppenders().erase(appender->getName()); + } + + bool Appender::reopenAll() { +- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); ++ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); + bool result = true; + AppenderMap& allAppenders = _getAllAppenders(); + for(AppenderMap::iterator i = allAppenders.begin(); i != allAppenders.end(); i++) { +@@ -79,7 +86,7 @@ + } + + void Appender::closeAll() { +- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); ++ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); + AppenderMap& allAppenders = _getAllAppenders(); + for(AppenderMap::iterator i = allAppenders.begin(); i != allAppenders.end(); i++) { + ((*i).second)->close(); +@@ -90,7 +97,7 @@ + // deleting each appenders will cause a lock on Appender::_appenderMapMutex to be obtained again within destructor. to avoid nested locks: + std::vector appenders; + { +- threading::ScopedLock lock(_appenderMapStorageInstance._appenderMapMutex); ++ threading::ScopedLock lock(_appenderMapStorageInstanceInternal->_appenderMapMutex); + AppenderMap& allAppenders = _getAllAppenders(); + appenders.reserve(allAppenders.size()); + for(AppenderMap::iterator i = allAppenders.begin(); i != allAppenders.end(); ) {