This is an automated email from the ASF dual-hosted git repository. rmiddleton pushed a commit to branch LOGCXX-518 in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git
commit 1649a22595f2bb4b13d4658efe2e2fc8741be970 Author: Robert Middleton <[email protected]> AuthorDate: Sat Oct 22 09:34:49 2022 -0400 Use std::filesystem --- CMakeLists.txt | 2 ++ src/cmake/boost-fallback/boost-fallback.cmake | 13 +++++++++++++ .../boost-fallback/boost-std-configuration.h.cmake | 18 ++++++++++++++++++ src/cmake/boost-fallback/test-boostfilesystem.cpp | 6 ++++++ src/cmake/boost-fallback/test-stdfilesystem.cpp | 5 +++++ src/main/cpp/CMakeLists.txt | 4 ++++ src/main/cpp/timebasedrollingpolicy.cpp | 13 ++++++++++--- src/main/include/CMakeLists.txt | 8 ++++++++ 8 files changed, 66 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7accac18..f67d1c6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,6 +186,7 @@ get_directory_property( SMART_PTR_IMPL DIRECTORY src/main/include DEFINITION SMA get_directory_property( MUTEX_IMPL DIRECTORY src/main/include DEFINITION MUTEX_IMPL ) get_directory_property( SHARED_MUTEX_IMPL DIRECTORY src/main/include DEFINITION SHARED_MUTEX_IMPL ) get_directory_property( ATOMIC_IMPL DIRECTORY src/main/include DEFINITION ATOMIC_IMPL ) +get_directory_property( FILESYSTEM_IMPL DIRECTORY src/main/include DEFINITION FILESYSTEM_IMPL ) foreach(varName HAS_STD_LOCALE HAS_ODBC HAS_MBSRTOWCS HAS_WCSTOMBS HAS_FWIDE HAS_LIBESMTP HAS_SYSLOG) if(${varName} EQUAL 0) @@ -265,6 +266,7 @@ message(STATUS " mutex implementation ............ : ${MUTEX_IMPL}") message(STATUS " shared_ptr implementation ....... : ${SMART_PTR_IMPL}") message(STATUS " shared_mutex implementation ..... : ${SHARED_MUTEX_IMPL}") message(STATUS " atomic implementation ........... : ${ATOMIC_IMPL}") +message(STATUS " filesystem implementation ....... : ${FILESYSTEM_IMPL}") if(BUILD_TESTING) message(STATUS "Applications required for tests:") diff --git a/src/cmake/boost-fallback/boost-fallback.cmake b/src/cmake/boost-fallback/boost-fallback.cmake index 7454c016..3a71c929 100644 --- a/src/cmake/boost-fallback/boost-fallback.cmake +++ b/src/cmake/boost-fallback/boost-fallback.cmake @@ -7,6 +7,7 @@ # thread # mutex # shared_mutex +# filesystem # # Variables set: # ${prefix}_ @@ -41,6 +42,10 @@ # Smart pointer variables set: # STD_SHARED_PTR_FOUND - if std::shared_ptr is found # Boost_SHARED_PTR_FOUND - if boost::shared_ptr is found +# +# Filesystem variables set: +# STD_FILESYSTEM_FOUND - if std::filesystem is found +# Boost_FILESYSTEM_FOUND - if boost::filesystem is found include(FindThreads) @@ -54,6 +59,8 @@ try_compile(STD_SHARED_PTR_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tes "${CMAKE_CURRENT_LIST_DIR}/test-stdsharedptr.cpp") try_compile(STD_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests" "${CMAKE_CURRENT_LIST_DIR}/test-stdatomic.cpp") +try_compile(STD_FILESYSTEM_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests" + "${CMAKE_CURRENT_LIST_DIR}/test-stdfilesystem.cpp") # We need to have all three boost components in order to run our tests # Boost thread requires chrono and atomic to work @@ -70,6 +77,12 @@ if( ${Boost_FOUND} ) "${CMAKE_CURRENT_LIST_DIR}/test-boostatomic.cpp") endif( ${Boost_FOUND} ) +find_package(Boost COMPONENTS filesystem) +if( ${Boost_FOUND} ) + try_compile(Boost_FILESYSTEM_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests" + "${CMAKE_CURRENT_LIST_DIR}/test-boostfilesystem.cpp") +endif( ${Boost_FOUND} ) + # Link the target with the appropriate boost libraries(if required) function(boostfallback_link target) if(NOT ${STD_THREAD_FOUND}) diff --git a/src/cmake/boost-fallback/boost-std-configuration.h.cmake b/src/cmake/boost-fallback/boost-std-configuration.h.cmake index cd0d8f7c..1e5dcf5a 100644 --- a/src/cmake/boost-fallback/boost-std-configuration.h.cmake +++ b/src/cmake/boost-fallback/boost-std-configuration.h.cmake @@ -3,6 +3,8 @@ #cmakedefine01 STD_SHARED_MUTEX_FOUND #cmakedefine01 Boost_SHARED_MUTEX_FOUND +#cmakedefine01 STD_FILESYSTEM_FOUND +#cmakedefine01 Boost_FILESYSTEM_FOUND #if STD_SHARED_MUTEX_FOUND #include <shared_mutex> @@ -20,4 +22,20 @@ namespace ${NAMESPACE_ALIAS} { } #endif +#if STD_FILESYSTEM_FOUND +#include <filesystem> +namespace ${NAMESPACE_ALIAS} { +namespace filesystem { + typedef std::filesystem::path path; +} +} +#elif Boost_FILESYSTEM_FOUND +#include <boost/filesystem.hpp> +namespace ${NAMESPACE_ALIAS} { +namespace filesystem { + typedef boost::filesystem::path path; +} +} +#endif + #endif /* BOOST_STD_CONFIGURATION_H */ diff --git a/src/cmake/boost-fallback/test-boostfilesystem.cpp b/src/cmake/boost-fallback/test-boostfilesystem.cpp new file mode 100644 index 00000000..137f8c96 --- /dev/null +++ b/src/cmake/boost-fallback/test-boostfilesystem.cpp @@ -0,0 +1,6 @@ +#include <boost/filesystem.hpp> + +int main(int argc, char** argv){ + boost::filesystem::path p; +} + diff --git a/src/cmake/boost-fallback/test-stdfilesystem.cpp b/src/cmake/boost-fallback/test-stdfilesystem.cpp new file mode 100644 index 00000000..6c45325f --- /dev/null +++ b/src/cmake/boost-fallback/test-stdfilesystem.cpp @@ -0,0 +1,5 @@ +#include <filesystem> + +int main(int argc, char** argv){ + std::filesystem::path p; +} diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt index 8837f1da..e1fa6ba4 100644 --- a/src/main/cpp/CMakeLists.txt +++ b/src/main/cpp/CMakeLists.txt @@ -193,6 +193,10 @@ set_target_properties(log4cxx PROPERTIES SOVERSION ${LIBLOG4CXX_LIB_SOVERSION} ) boostfallback_link(log4cxx) +get_directory_property( FILESYSTEM_IMPL DIRECTORY "${CMAKE_SOURCE_DIR}/src/main/include" DEFINITION FILESYSTEM_IMPL ) +if("${FILESYSTEM_IMPL}" STREQUAL "std::filesystem" ) + target_link_libraries(log4cxx PUBLIC $<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:stdc++fs>) +endif() if(LOG4CXX_ABI_CHECK) message("Getting dependencies for ABI compatability check...") diff --git a/src/main/cpp/timebasedrollingpolicy.cpp b/src/main/cpp/timebasedrollingpolicy.cpp index ec2d6a64..15ca7563 100644 --- a/src/main/cpp/timebasedrollingpolicy.cpp +++ b/src/main/cpp/timebasedrollingpolicy.cpp @@ -30,8 +30,8 @@ #include <log4cxx/helpers/stringhelper.h> #include <log4cxx/helpers/optionconverter.h> #include <log4cxx/fileappender.h> +#include <log4cxx/boost-std-configuration.h> #include <iostream> -#include <libgen.h> using namespace log4cxx; using namespace log4cxx::rolling; @@ -169,8 +169,10 @@ const std::string TimeBasedRollingPolicy::createFile(const std::string& fileName snprintf(szUid, MAX_FILE_LEN, "%u", uid); } - // TODO this should probably be using boost::filesystem or std::filesystem - return std::string(::dirname(szDirName)) + "/." + ::basename(szBaseName) + szUid + suffix; + log4cxx::filesystem::path path(fileName); + std::string newFilename = path.filename().string() + szUid + suffix; + log4cxx::filesystem::path retval = path.parent_path() / newFilename; + return retval.string(); } int TimeBasedRollingPolicy::createMMapFile(const std::string& fileName, log4cxx::helpers::Pool& pool) @@ -218,7 +220,10 @@ int TimeBasedRollingPolicy::lockMMapFile(int type) { LogLog::warn(LOG4CXX_STR("apr_file_lock for mmap failed.")); } + + return stat; } + int TimeBasedRollingPolicy::unLockMMapFile() { apr_status_t stat = apr_file_unlock(m_priv->_lock_file); @@ -227,6 +232,8 @@ int TimeBasedRollingPolicy::unLockMMapFile() { LogLog::warn(LOG4CXX_STR("apr_file_unlock for mmap failed.")); } + + return stat; } TimeBasedRollingPolicy::TimeBasedRollingPolicy() : diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt index caba4629..499ef852 100644 --- a/src/main/include/CMakeLists.txt +++ b/src/main/include/CMakeLists.txt @@ -206,6 +206,14 @@ else() set( ATOMIC_IMPL "NONE" ) endif() +if( ${STD_FILESYSTEM_FOUND} AND NOT ${PREFER_BOOST} ) + set( FILESYSTEM_IMPL "std::filesystem" ) +elseif( ${Boost_FILESYSTEM_FOUND} ) + set( FILESYSTEM_IMPL "boost::filesystem" ) +else() + set( FILESYSTEM_IMPL "NONE" ) +endif() + # Configure both our private header and our public header configure_file(${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/private/log4cxx_private.h.in ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/log4cxx_private.h
