Add support for building and testing with cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..5286f30
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,53 @@
+cmake_minimum_required(VERSION 3.13)
+project(log4cxx VERSION 0.10.0 LANGUAGES CXX)
+
+# Find Apache Runtime
+find_package(apr QUIET)
+# If APR find module sets the cache, the following will do nothing
+find_path(APR_INCLUDE_DIR apr.h)
+find_library(APR_LIBRARIES NAMES libapr-1 apr-1)
+
+# Find Apache Runtime Utilities
+find_package(apr-util QUIET)
+# If APR-UTIL find module sets the cache, the following will do nothing
+find_path(APR_UTIL_INCLUDE_DIR apu.h)
+find_library(APR_UTIL_LIBRARIES NAMES libaprutil-1 aprutil-1)
+
+## Testing
+option(TEST_LOG4CXX "Build log4cxx tests" ON)
+if(TEST_LOG4CXX)
+ enable_testing()
+endif()
+
+# Building
+add_subdirectory(src)
+
+## Installing
+install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/main/include/log4cxx
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ FILES_MATCHING PATTERN "*.h"
+)
+install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/main/include/log4cxx
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ FILES_MATCHING PATTERN "*.h"
+)
+
+install(TARGETS log4cxx EXPORT log4cxxTargets
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+)
+IF(LOG4CXX_INSTALL_PDB)
+ INSTALL(FILES log4cxx.pdb
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ CONFIGURATIONS RelWithDebInfo Debug
+ )
+ENDIF()
+
+# create export file which can be imported by other cmake projects
+install(EXPORT log4cxxTargets
+ FILE log4cxx-targets.cmake
+ NAMESPACE log4cxx::
+ DESTINATION lib/cmake/log4cxx
+)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..95e66e1
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,12 @@
+add_subdirectory(main)
+target_include_directories(log4cxx INTERFACE $<INSTALL_INTERFACE:include> PRIVATE ${APR_INCLUDE_DIR} ${APR_UTIL_INCLUDE_DIR})
+target_link_libraries(log4cxx PRIVATE ${APR_LIBRARIES} ${APR_UTIL_LIBRARIES})
+if(WIN32)
+# The ODBC appender is always enabled in the Windows configuration
+target_link_libraries(log4cxx PRIVATE odbc32.lib)
+option(LOG4CXX_INSTALL_PDB "Install .pdb files (if generated)" ON)
+endif()
+
+if(TEST_LOG4CXX)
+ add_subdirectory(test)
+endif()
diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt
new file mode 100644
index 0000000..12cb4c9
--- /dev/null
+++ b/src/main/CMakeLists.txt
@@ -0,0 +1,9 @@
+add_subdirectory(include)
+add_subdirectory(cpp)
+
+# setup include directories
+include(GNUInstallDirs)
+target_include_directories(log4cxx PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+)
diff --git a/src/main/cpp/CMakeLists.txt b/src/main/cpp/CMakeLists.txt
new file mode 100644
index 0000000..3571cf5
--- /dev/null
+++ b/src/main/cpp/CMakeLists.txt
@@ -0,0 +1,165 @@
+
+# Options
+option(LOG4CXX_BLOCKING_ASYNC_APPENDER "Async appender behaviour" ON)
+option(BUILD_SHARED_LIBS "Build shared libraries" ON)
+
+# Build the log4cxx library
+add_library(log4cxx action.cpp)
+if(BUILD_SHARED_LIBS)
+ target_compile_definitions(log4cxx PRIVATE LOG4CXX)
+else()
+ target_compile_definitions(log4cxx PUBLIC LOG4CXX_STATIC)
+endif()
+add_dependencies(log4cxx configure_log4cxx)
+target_sources(log4cxx
+ PRIVATE
+ andfilter.cpp
+ appenderattachableimpl.cpp
+ appenderskeleton.cpp
+ aprinitializer.cpp
+ $<IF:$<BOOL:LOG4CXX_BLOCKING_ASYNC_APPENDER>,asyncappender.cpp,asyncappender_nonblocking.cpp>
+ basicconfigurator.cpp
+ bufferedwriter.cpp
+ bytearrayinputstream.cpp
+ bytearrayoutputstream.cpp
+ bytebuffer.cpp
+ cacheddateformat.cpp
+ charsetdecoder.cpp
+ charsetencoder.cpp
+ class.cpp
+ classnamepatternconverter.cpp
+ classregistration.cpp
+ condition.cpp
+ configurator.cpp
+ consoleappender.cpp
+ cyclicbuffer.cpp
+ dailyrollingfileappender.cpp
+ datagrampacket.cpp
+ datagramsocket.cpp
+ date.cpp
+ dateformat.cpp
+ datelayout.cpp
+ datepatternconverter.cpp
+ defaultconfigurator.cpp
+ defaultloggerfactory.cpp
+ defaultrepositoryselector.cpp
+ domconfigurator.cpp
+ exception.cpp
+ fallbackerrorhandler.cpp
+ file.cpp
+ fileappender.cpp
+ filedatepatternconverter.cpp
+ fileinputstream.cpp
+ filelocationpatternconverter.cpp
+ fileoutputstream.cpp
+ filerenameaction.cpp
+ filewatchdog.cpp
+ filter.cpp
+ filterbasedtriggeringpolicy.cpp
+ fixedwindowrollingpolicy.cpp
+ formattinginfo.cpp
+ fulllocationpatternconverter.cpp
+ gzcompressaction.cpp
+ hierarchy.cpp
+ htmllayout.cpp
+ inetaddress.cpp
+ inputstream.cpp
+ inputstreamreader.cpp
+ integer.cpp
+ integerpatternconverter.cpp
+ layout.cpp
+ level.cpp
+ levelmatchfilter.cpp
+ levelpatternconverter.cpp
+ levelrangefilter.cpp
+ linelocationpatternconverter.cpp
+ lineseparatorpatternconverter.cpp
+ literalpatternconverter.cpp
+ loader.cpp
+ locale.cpp
+ locationinfo.cpp
+ logger.cpp
+ loggermatchfilter.cpp
+ loggerpatternconverter.cpp
+ loggingevent.cpp
+ loggingeventpatternconverter.cpp
+ loglog.cpp
+ logmanager.cpp
+ logstream.cpp
+ manualtriggeringpolicy.cpp
+ mdc.cpp
+ messagebuffer.cpp
+ messagepatternconverter.cpp
+ methodlocationpatternconverter.cpp
+ mutex.cpp
+ nameabbreviator.cpp
+ namepatternconverter.cpp
+ ndc.cpp
+ ndcpatternconverter.cpp
+ nteventlogappender.cpp
+ objectimpl.cpp
+ objectoutputstream.cpp
+ objectptr.cpp
+ obsoleterollingfileappender.cpp
+ odbcappender.cpp
+ onlyonceerrorhandler.cpp
+ optionconverter.cpp
+ outputdebugstringappender.cpp
+ outputstream.cpp
+ outputstreamwriter.cpp
+ patternconverter.cpp
+ patternlayout.cpp
+ patternparser.cpp
+ pool.cpp
+ properties.cpp
+ propertiespatternconverter.cpp
+ propertyconfigurator.cpp
+ propertyresourcebundle.cpp
+ propertysetter.cpp
+ reader.cpp
+ relativetimedateformat.cpp
+ relativetimepatternconverter.cpp
+ resourcebundle.cpp
+ rollingfileappender.cpp
+ rollingpolicy.cpp
+ rollingpolicybase.cpp
+ rolloverdescription.cpp
+ rootlogger.cpp
+ serversocket.cpp
+ simpledateformat.cpp
+ simplelayout.cpp
+ sizebasedtriggeringpolicy.cpp
+ smtpappender.cpp
+ socket.cpp
+ socketappender.cpp
+ socketappenderskeleton.cpp
+ sockethubappender.cpp
+ socketoutputstream.cpp
+ strftimedateformat.cpp
+ stringhelper.cpp
+ stringmatchfilter.cpp
+ stringtokenizer.cpp
+ synchronized.cpp
+ syslogappender.cpp
+ syslogwriter.cpp
+ system.cpp
+ systemerrwriter.cpp
+ systemoutwriter.cpp
+ telnetappender.cpp
+ threadcxx.cpp
+ threadlocal.cpp
+ threadpatternconverter.cpp
+ threadspecificdata.cpp
+ throwableinformationpatternconverter.cpp
+ timebasedrollingpolicy.cpp
+ timezone.cpp
+ transcoder.cpp
+ transform.cpp
+ triggeringpolicy.cpp
+ ttcclayout.cpp
+ writer.cpp
+ writerappender.cpp
+ xmllayout.cpp
+ xmlsocketappender.cpp
+ zipcompressaction.cpp
+)
diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt
new file mode 100644
index 0000000..680101d
--- /dev/null
+++ b/src/main/include/CMakeLists.txt
@@ -0,0 +1,97 @@
+# Configure
+if(WIN32)
+add_custom_target(configure_log4cxx
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different
+ ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/log4cxx.hw
+ ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/log4cxx.h
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different
+ ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/private/log4cxx_private.hw
+ ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/log4cxx_private.h
+ DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/log4cxx.hw
+ ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/private/log4cxx_private.hw
+ BYPRODUCTS
+ ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/log4cxx.h
+ ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/log4cxx_private.h
+)
+else()
+# Configure log4cxx.h
+set(LOG4CXX_CHAR "utf-8" CACHE STRING "Interal character representation, choice of utf-8 (default), wchar_t, unichar")
+set_property(CACHE LOG4CXX_CHAR PROPERTY STRINGS "utf-8" "wchar_t" "unichar")
+set(LOGCHAR_IS_UNICHAR 0)
+set(LOGCHAR_IS_WCHAR 0)
+set(LOGCHAR_IS_UTF8 0)
+if(${LOG4CXX_CHAR} STREQUAL "unichar")
+ set(LOGCHAR_IS_UNICHAR 1)
+elseif(${LOG4CXX_CHAR} STREQUAL "wchar_t")
+ set(LOGCHAR_IS_WCHAR 1)
+else()
+ set(LOGCHAR_IS_UTF8 1)
+endif()
+option(LOG4CXX_WCHAR_T "Enable wchar_t API methods" ON)
+option(LOG4CXX_UNICHAR "Enable UniChar API methods" OFF)
+if(APPLE)
+option(LOG4CXX_CFSTRING "Enable CFString API methods, requires Mac OS/X CoreFoundation" OFF)
+endif()
+set(CHAR_API 1)
+foreach(varName WCHAR_T UNICHAR CFSTRING )
+ if(${LOG4CXX_${varName}})
+ set("${varName}_API" 1)
+ else()
+ set("${varName}_API" 0)
+ endif()
+endforeach()
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/log4cxx.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/log4cxx.h
+ @ONLY
+)
+
+# Configure log4cxx_private.h
+set(LOG4CXX_CHARSET "locale" CACHE STRING "LogString characters, choice of locale (default), utf-8, ISO-8859-1, US-ASCII, EBCDIC")
+set_property(CACHE LOG4CXX_CHARSET PROPERTY STRINGS "locale" "utf-8" "ISO-8859-1" "US-ASCII" "EBCDIC")
+set(CHARSET_EBCDIC 0)
+set(CHARSET_USASCII 0)
+set(CHARSET_ISO88591 0)
+set(CHARSET_UTF8 0)
+if(${LOG4CXX_CHARSET} STREQUAL "EBCDIC")
+ set(CHARSET_EBCDIC 1)
+elseif(${LOG4CXX_CHARSET} STREQUAL "US-ASCII")
+ set(CHARSET_USASCII 1)
+elseif(${LOG4CXX_CHARSET} STREQUAL "ISO-8859-1")
+ set(CHARSET_ISO88591 1)
+elseif(${LOG4CXX_CHARSET} STREQUAL "utf-8")
+ set(CHARSET_UTF8 1)
+endif()
+
+option(LOG4CXX_HAS_STD_LOCALE "Is the standard locale header available?" OFF)
+option(LOG4CXX_HAS_ODBC "Build with ODBC appender?" OFF)
+option(LOG4CXX_HAS_MBSRTOWCS "Default character encoder converts multi-byte string to LogString using mbstowcs()?" OFF)
+option(LOG4CXX_HAS_WCSTOMBS "Default wide character encoder converts using wcstombs()?" OFF)
+option(LOG4CXX_HAS_FWIDE "Is the fwide(fd) function available?" OFF)
+option(LOG4CXX_HAS_LIBESMTP "Use libESMTP in SMTPAppender?" OFF)
+option(LOG4CXX_HAS_SYSLOG "Is the syslog function available?" OFF)
+
+foreach(varName HAS_STD_LOCALE HAS_ODBC HAS_MBSRTOWCS HAS_WCSTOMBS HAS_FWIDE HAS_LIBESMTP HAS_SYSLOG)
+ if(${LOG4CXX_${varName}})
+ set(${varName} 1)
+ else()
+ set(${varName} 0)
+ endif()
+endforeach()
+
+configure_file(${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/private/log4cxx_private.h.in
+ ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/log4cxx_private.h
+ @ONLY
+)
+
+# Provide the dependencies
+add_custom_target(configure_log4cxx
+ COMMAND "${CMAKE_COMMAND}" -E echo "Checking configuration"
+ DEPENDS
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/log4cxx/log4cxx.h.in
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/log4cxx/private/log4cxx_private.h.in
+ BYPRODUCTS
+ ${CMAKE_CURRENT_BINARY_DIR}/include/log4cxx/log4cxx.h
+ ${CMAKE_CURRENT_BINARY_DIR}/include/log4cxx/private/log4cxx_private.h
+)
+endif()
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
new file mode 100644
index 0000000..da8ed95
--- /dev/null
+++ b/src/test/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(cpp)
\ No newline at end of file
diff --git a/src/test/cpp/CMakeLists.txt b/src/test/cpp/CMakeLists.txt
new file mode 100644
index 0000000..ad3665f
--- /dev/null
+++ b/src/test/cpp/CMakeLists.txt
@@ -0,0 +1,63 @@
+# Components required by all tests
+add_library(testingFramework STATIC abts.cpp appenderskeletontestcase.cpp logunit.cpp vectorappender.cpp writerappendertestcase.cpp )
+target_include_directories(testingFramework PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES>)
+add_subdirectory(util)
+target_sources(testingUtilities PRIVATE xml/xlevel.cpp)
+
+# Tests defined in this directory
+set(ALL_LOG4CXX_TESTS
+ asyncappendertestcase
+ consoleappendertestcase
+ decodingtest
+ encodingtest
+ fileappendertest
+ filetestcase
+ hierarchytest
+ hierarchythresholdtestcase
+ l7dtestcase
+ leveltestcase
+ loggertestcase
+ mdctestcase
+ minimumtestcase
+ ndctestcase
+ patternlayouttest
+ propertyconfiguratortest
+ rollingfileappendertestcase
+ streamtestcase
+)
+foreach(fileName IN LISTS ALL_LOG4CXX_TESTS)
+ add_executable(${fileName} "${fileName}.cpp")
+endforeach()
+target_sources(rollingfileappendertestcase PRIVATE fileappendertestcase.cpp)
+
+# Tests defined in subdirectories
+add_subdirectory(helpers)
+add_subdirectory(customlogger)
+if(LOG4CXX_HAS_ODBC OR WIN32)
+ add_subdirectory(db)
+endif()
+add_subdirectory(defaultinit)
+add_subdirectory(filter)
+add_subdirectory(net)
+if(WIN32)
+ add_subdirectory(nt)
+endif()
+add_subdirectory(pattern)
+add_subdirectory(rolling)
+add_subdirectory(spi)
+add_subdirectory(varia)
+add_subdirectory(xml)
+
+foreach(testName IN LISTS ALL_LOG4CXX_TESTS)
+ target_include_directories(${testName} PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES>)
+ target_link_libraries(${testName} PRIVATE log4cxx testingFramework testingUtilities ${APR_LIBRARIES})
+ add_test(NAME ${testName}
+ COMMAND ${testName} -v
+ WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/../resources
+ )
+ if(WIN32)
+ set_tests_properties(${testName} PROPERTIES ENVIRONMENT
+ "PATH=$<SHELL_PATH:$<TARGET_FILE_DIR:log4cxx>>$<SEMICOLON>$ENV{PATH}"
+ )
+ endif()
+endforeach()
diff --git a/src/test/cpp/customlogger/CMakeLists.txt b/src/test/cpp/customlogger/CMakeLists.txt
new file mode 100644
index 0000000..76f02d6
--- /dev/null
+++ b/src/test/cpp/customlogger/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(xloggertestcase xloggertestcase.cpp xlogger.cpp)
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} xloggertestcase PARENT_SCOPE)
diff --git a/src/test/cpp/db/CMakeLists.txt b/src/test/cpp/db/CMakeLists.txt
new file mode 100644
index 0000000..3f34418
--- /dev/null
+++ b/src/test/cpp/db/CMakeLists.txt
@@ -0,0 +1,3 @@
+add_executable(odbcappendertestcase odbcappendertestcase.cpp)
+target_include_directories(odbcappendertestcase PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES>)
+target_link_libraries(odbcappendertestcase log4cxx testingFramework testingUtilities ${APR_LIBRARIES})
diff --git a/src/test/cpp/defaultinit/CMakeLists.txt b/src/test/cpp/defaultinit/CMakeLists.txt
new file mode 100644
index 0000000..a9d2ee8
--- /dev/null
+++ b/src/test/cpp/defaultinit/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(defaultinittestcase testcase1.cpp testcase2.cpp testcase3.cpp testcase4.cpp)
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} defaultinittestcase PARENT_SCOPE)
diff --git a/src/test/cpp/filter/CMakeLists.txt b/src/test/cpp/filter/CMakeLists.txt
new file mode 100644
index 0000000..83dc498
--- /dev/null
+++ b/src/test/cpp/filter/CMakeLists.txt
@@ -0,0 +1,9 @@
+add_executable(filtertests
+ andfiltertest.cpp
+ denyallfiltertest.cpp
+ levelmatchfiltertest.cpp
+ levelrangefiltertest.cpp
+ loggermatchfiltertest.cpp
+ stringmatchfiltertest.cpp
+)
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} filtertests PARENT_SCOPE)
diff --git a/src/test/cpp/helpers/CMakeLists.txt b/src/test/cpp/helpers/CMakeLists.txt
new file mode 100644
index 0000000..bb27546
--- /dev/null
+++ b/src/test/cpp/helpers/CMakeLists.txt
@@ -0,0 +1,28 @@
+set(HELPER_TESTS
+ absolutetimedateformattestcase
+ cacheddateformattestcase
+ charsetdecodertestcase
+ charsetencodertestcase
+ cyclicbuffertestcase
+ datetimedateformattestcase
+ filewatchdogtest
+ inetaddresstestcase
+ iso8601dateformattestcase
+ messagebuffertest
+ optionconvertertestcase
+ propertiestestcase
+ relativetimedateformattestcase
+ stringhelpertestcase
+ stringtokenizertestcase
+ syslogwritertest
+ threadtestcase
+ timezonetestcase
+ transcodertestcase
+)
+foreach(fileName IN LISTS HELPER_TESTS)
+ add_executable(${fileName} "${fileName}.cpp")
+ target_include_directories(${fileName} PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES> ${APR_INCLUDE_DIR})
+endforeach()
+target_sources(cacheddateformattestcase PRIVATE localechanger.cpp)
+target_sources(datetimedateformattestcase PRIVATE localechanger.cpp)
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} ${HELPER_TESTS} PARENT_SCOPE)
diff --git a/src/test/cpp/net/CMakeLists.txt b/src/test/cpp/net/CMakeLists.txt
new file mode 100644
index 0000000..6bc5847
--- /dev/null
+++ b/src/test/cpp/net/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+# Tests defined in this directory
+set(NET_TESTS
+ smtpappendertestcase
+ socketappendertestcase
+ sockethubappendertestcase
+ socketservertestcase
+ syslogappendertestcase
+ telnetappendertestcase
+ xmlsocketappendertestcase
+)
+foreach(fileName IN LISTS NET_TESTS)
+ add_executable(${fileName} "${fileName}.cpp")
+endforeach()
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} ${NET_TESTS} PARENT_SCOPE)
diff --git a/src/test/cpp/nt/CMakeLists.txt b/src/test/cpp/nt/CMakeLists.txt
new file mode 100644
index 0000000..0b8a825
--- /dev/null
+++ b/src/test/cpp/nt/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(eventlogtests nteventlogappendertestcase.cpp)
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} eventlogtests PARENT_SCOPE)
diff --git a/src/test/cpp/pattern/CMakeLists.txt b/src/test/cpp/pattern/CMakeLists.txt
new file mode 100644
index 0000000..cd00697
--- /dev/null
+++ b/src/test/cpp/pattern/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(patternparsertestcase patternparsertestcase.cpp num343patternconverter.cpp)
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} patternparsertestcase PARENT_SCOPE)
diff --git a/src/test/cpp/rolling/CMakeLists.txt b/src/test/cpp/rolling/CMakeLists.txt
new file mode 100644
index 0000000..2b2c650
--- /dev/null
+++ b/src/test/cpp/rolling/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Tests defined in this directory
+set(ROLLING_TESTS
+ filenamepatterntestcase
+ filterbasedrollingtest
+ manualrollingtest
+ obsoletedailyrollingfileappendertest
+ obsoleterollingfileappendertest
+ sizebasedrollingtest
+ timebasedrollingtest
+)
+foreach(fileName IN LISTS ROLLING_TESTS)
+ add_executable(${fileName} "${fileName}.cpp")
+endforeach()
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} ${ROLLING_TESTS} PARENT_SCOPE)
diff --git a/src/test/cpp/spi/CMakeLists.txt b/src/test/cpp/spi/CMakeLists.txt
new file mode 100644
index 0000000..380269f
--- /dev/null
+++ b/src/test/cpp/spi/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(spitestcase loggingeventtest.cpp)
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} spitestcase PARENT_SCOPE)
diff --git a/src/test/cpp/util/CMakeLists.txt b/src/test/cpp/util/CMakeLists.txt
new file mode 100644
index 0000000..dd25dd7
--- /dev/null
+++ b/src/test/cpp/util/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Components required by all tests
+add_library(testingUtilities STATIC
+ serializationtesthelper.cpp
+ absolutedateandtimefilter.cpp
+ absolutetimefilter.cpp
+ binarycompare.cpp
+ compare.cpp
+ controlfilter.cpp
+ filenamefilter.cpp
+ iso8601filter.cpp
+ linenumberfilter.cpp
+ relativetimefilter.cpp
+ threadfilter.cpp
+ transformer.cpp
+ utilfilter.cpp
+ xmlfilenamefilter.cpp
+ xmllineattributefilter.cpp
+ xmlthreadfilter.cpp
+ xmltimestampfilter.cpp
+)
+target_include_directories(testingUtilities PRIVATE ${CMAKE_CURRENT_LIST_DIR} $<TARGET_PROPERTY:log4cxx,INCLUDE_DIRECTORIES>)
diff --git a/src/test/cpp/varia/CMakeLists.txt b/src/test/cpp/varia/CMakeLists.txt
new file mode 100644
index 0000000..aeaeeb4
--- /dev/null
+++ b/src/test/cpp/varia/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Tests defined in this directory
+set(VARIA_TESTS
+ errorhandlertestcase
+ levelmatchfiltertestcase
+ levelrangefiltertestcase
+)
+foreach(fileName IN LISTS VARIA_TESTS)
+ add_executable(${fileName} "${fileName}.cpp")
+endforeach()
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} ${VARIA_TESTS} PARENT_SCOPE)
diff --git a/src/test/cpp/xml/CMakeLists.txt b/src/test/cpp/xml/CMakeLists.txt
new file mode 100644
index 0000000..cd8bcf5
--- /dev/null
+++ b/src/test/cpp/xml/CMakeLists.txt
@@ -0,0 +1,7 @@
+add_executable(xmltests
+ domtestcase
+ xmllayouttest
+ xmllayouttestcase
+)
+target_link_libraries(xmltests PRIVATE ${APR_UTIL_LIBRARIES})
+set(ALL_LOG4CXX_TESTS ${ALL_LOG4CXX_TESTS} xmltests PARENT_SCOPE)