Merge branch 'master' into documentation-updates
diff --git a/.github/workflows/log4cxx.yml b/.github/workflows/log4cxx.yml
index ef0dd8e..d7b821e 100644
--- a/.github/workflows/log4cxx.yml
+++ b/.github/workflows/log4cxx.yml
@@ -14,7 +14,7 @@
 # limitations under the License.
 name: log4cxx
 
-on: push
+on: [push, pull_request]
 
 jobs:
   job:
@@ -46,7 +46,7 @@
     steps:
     - uses: actions/checkout@v2
 
-    - uses: lukka/set-shell-env@v1
+    - uses: lukka/set-shell-env@v1.1
       with:
         CXX: ${{ matrix.cxx }}
         CC: ${{ matrix.cc }}
@@ -54,6 +54,7 @@
     - name: 'Configure Dependencies - Ubuntu'
       if: matrix.name == 'ubuntu18-gcc' || matrix.name == 'ubuntu18-clang'
       run: |
+        sudo apt-get update
         sudo apt-get install -y libapr1-dev libaprutil1-dev
         # note: sqlext.h exists on github VM, purge for now as we don't link correctly...
         sudo apt-get purge unixodbc-dev
@@ -68,7 +69,7 @@
 
     - name: 'Configure Dependencies - Windows'
       if: matrix.name == 'windows-2019' || matrix.name == 'windows-2016'
-      uses: lukka/run-vcpkg@v2
+      uses: lukka/run-vcpkg@v5
       id: runvcpkg
       with:
         vcpkgArguments: apr apr-util
@@ -77,7 +78,7 @@
         vcpkgTriplet: x64-windows
 
     - name: 'run cmake'
-      uses: lukka/run-cmake@v2
+      uses: lukka/run-cmake@v3
       with:
         cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
         buildDirectory: ${{ runner.workspace }}/build
diff --git a/src/main/cpp/mapfilter.cpp b/src/main/cpp/mapfilter.cpp
index b164ae7..5ea3110 100644
--- a/src/main/cpp/mapfilter.cpp
+++ b/src/main/cpp/mapfilter.cpp
@@ -82,10 +82,10 @@
 
 	if (acceptOnMatch)
 	{
-		return matched ? Filter::ACCEPT : Filter::DENY;
+		return matched ? Filter::ACCEPT : Filter::NEUTRAL;
 	}
 	else
 	{
-		return matched ? Filter::DENY : Filter::ACCEPT;
+		return matched ? Filter::DENY : Filter::NEUTRAL;
 	}
 }
diff --git a/src/main/cpp/odbcappender.cpp b/src/main/cpp/odbcappender.cpp
index 6bfa519..218df13 100644
--- a/src/main/cpp/odbcappender.cpp
+++ b/src/main/cpp/odbcappender.cpp
@@ -357,10 +357,12 @@
 	}
 }
 
+#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) || defined(_WIN32)
 void ODBCAppender::encode(wchar_t** dest, const LogString& src, Pool& p)
 {
 	*dest = Transcoder::wencode(src, p);
 }
+#endif
 
 void ODBCAppender::encode(unsigned short** dest,
 	const LogString& src, Pool& p)
diff --git a/src/main/cpp/rollingfileappender.cpp b/src/main/cpp/rollingfileappender.cpp
index dfabb3b..90b5b48 100644
--- a/src/main/cpp/rollingfileappender.cpp
+++ b/src/main/cpp/rollingfileappender.cpp
@@ -340,11 +340,13 @@
 						}
 						else
 						{
+							closeWriter();
+							setFile(rollover1->getActiveFileName());
+							// Call activateOptions to create any intermediate directories(if required)
+							FileAppender::activateOptions(p);
 							OutputStreamPtr os(new FileOutputStream(
 									rollover1->getActiveFileName(), rollover1->getAppend()));
 							WriterPtr newWriter(createWriter(os));
-							closeWriter();
-							setFile(rollover1->getActiveFileName());
 							setWriter(newWriter);
 
 							bool success = true;
diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt
index a8b0f40..97f286d 100644
--- a/src/main/include/CMakeLists.txt
+++ b/src/main/include/CMakeLists.txt
@@ -10,9 +10,6 @@
   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
 )
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/version_info.h.in
                ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/version_info.h
@@ -112,8 +109,5 @@
   DEPENDS
     ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/log4cxx.h.in
     ${CMAKE_CURRENT_SOURCE_DIR}/log4cxx/private/log4cxx_private.h.in
-  BYPRODUCTS
-    ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/log4cxx.h
-    ${CMAKE_CURRENT_BINARY_DIR}/log4cxx/private/log4cxx_private.h
 )
 endif()
diff --git a/src/main/include/log4cxx/db/odbcappender.h b/src/main/include/log4cxx/db/odbcappender.h
index a26bc35..fdc144f 100644
--- a/src/main/include/log4cxx/db/odbcappender.h
+++ b/src/main/include/log4cxx/db/odbcappender.h
@@ -300,8 +300,10 @@
 	private:
 		ODBCAppender(const ODBCAppender&);
 		ODBCAppender& operator=(const ODBCAppender&);
+#if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T || defined(WIN32) || defined(_WIN32)
 		static void encode(wchar_t** dest, const LogString& src,
 			log4cxx::helpers::Pool& p);
+#endif
 		static void encode(unsigned short** dest, const LogString& src,
 			log4cxx::helpers::Pool& p);
 }; // class ODBCAppender
diff --git a/src/test/cpp/filter/mapfiltertest.cpp b/src/test/cpp/filter/mapfiltertest.cpp
index bfb9e53..0b3d620 100644
--- a/src/test/cpp/filter/mapfiltertest.cpp
+++ b/src/test/cpp/filter/mapfiltertest.cpp
@@ -57,8 +57,8 @@
 	}
 
 	/**
-	 * Check that MapFilter.decide() returns Filter.ACCEPT or Filter.DENY
-	 *   based on Accept on Match setting when key/value does not match
+	 * Check that MapFilter.decide() returns Filter.NEUTRAL
+	 *   when key/value does not match
 	 */
 	void test2()
 	{
@@ -74,10 +74,10 @@
 		filter->activateOptions(p);
 
 		filter->setAcceptOnMatch(true);
-		LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));
+		LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
 
 		filter->setAcceptOnMatch(false);
-		LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));
+		LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));
 	}
 
 	/**
@@ -125,9 +125,9 @@
 		filter->activateOptions(p);
 
 		filter->setMustMatchAll(true);      // AND T/F
-		LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));      // does not match second
+		LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));   // does not match second
 
-		filter->setMustMatchAll(false); // OR T/F
+		filter->setMustMatchAll(false);     // OR T/F
 		LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));    // matches first
 
 		filter->setKeyValue(LOG4CXX_STR("my.name"), LOG4CXX_STR("Test"));
@@ -135,29 +135,26 @@
 		filter->setMustMatchAll(true);      // AND T/T
 		LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));    // matches all
 
-		filter->setMustMatchAll(false); // OR T/T
+		filter->setMustMatchAll(false);     // OR T/T
 		LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));    // matches first
 
 		filter->setKeyValue(LOG4CXX_STR("my.ip"), LOG4CXX_STR("localhost"));
 
 		filter->setMustMatchAll(true);      // AND F/T
-		LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));      // does not match first
+		LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));   // does not match first
 
-		filter->setMustMatchAll(false); // OR F/T
+		filter->setMustMatchAll(false);     // OR F/T
 		LOGUNIT_ASSERT_EQUAL(Filter::ACCEPT, filter->decide(event));    // matches second
 
 		filter->setKeyValue(LOG4CXX_STR("my.name"), LOG4CXX_STR("Unkonwn"));
 
 		filter->setMustMatchAll(true);      // AND F/F
-		LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));      // does not match first
+		LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));   // does not match first
 
-		filter->setMustMatchAll(false); // OR F/F
-		LOGUNIT_ASSERT_EQUAL(Filter::DENY, filter->decide(event));      // matches none
+		filter->setMustMatchAll(false);     // OR F/F
+		LOGUNIT_ASSERT_EQUAL(Filter::NEUTRAL, filter->decide(event));   // matches none
 	}
 
 };
 
-
 LOGUNIT_TEST_SUITE_REGISTRATION(MapFilterTest);
-
-