diff -pruN 1.0.7-2/CMakeLists.txt 1.0.9-1/CMakeLists.txt
--- 1.0.7-2/CMakeLists.txt	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/CMakeLists.txt	2025-09-06 22:12:24.000000000 +0000
@@ -1,11 +1,11 @@
-cmake_minimum_required(VERSION 2.8.11)
+cmake_minimum_required(VERSION 3.10)
 
 # Default install location. Must be set here, before setting the project.
 if (NOT DEFINED CMAKE_INSTALL_PREFIX)
     set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "" FORCE)
 endif()
 
-project(persistent-cache-cpp C CXX)
+project(persistent-cache-cpp VERSION 1.0.9 LANGUAGES C CXX)
 
 option(BUILD_SHARED_LIBS "Build library as shared" OFF)
 
@@ -13,11 +13,6 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
 
 set(LIBNAME persistent-cache-cpp)
 
-set(VERSION_MAJOR 1)
-set(VERSION_MINOR 0)
-set(VERSION_MICRO 7)
-set(LIBVERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_MICRO}")
-
 string(TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_lower) # Build types should always be lower case
 
 set(ACCEPTED_BUILD_TYPES "" none release debug relwithdebinfo coverage)
@@ -28,7 +23,7 @@ endif()
 
 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
 
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++14 -Wall -pedantic -Wextra")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++17 -Wall -pedantic -Wextra")
 
 # Some additional warnings not included by the general flags set above.
 set(EXTRA_C_WARNINGS "-Wcast-align -Wcast-qual -Wformat -Wredundant-decls -Wswitch-default")
@@ -82,7 +77,6 @@ else()
 endif()
 
 include(CTest)
-enable_testing()
 
 find_package(CoverageReport)
 find_package(Boost COMPONENTS filesystem REQUIRED)
@@ -92,7 +86,9 @@ include_directories(include)
 
 add_subdirectory(src)
 add_subdirectory(include)
-add_subdirectory(tests)
+if(BUILD_TESTING)
+    add_subdirectory(tests)
+endif()
 add_subdirectory(data)
 add_subdirectory(examples)
 add_subdirectory(doc)
diff -pruN 1.0.7-2/ChangeLog 1.0.9-1/ChangeLog
--- 1.0.7-2/ChangeLog	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/ChangeLog	2025-09-06 22:12:24.000000000 +0000
@@ -1,6 +1,72 @@
+2025-09-07 Mike Gabriel
+
+        * Release 1.0.9 (HEAD -> main, tag: 1.0.9)
+
+2025-09-07 Ratchanan Srirattanamet
+
+        * Merge branch 'personal/sunweaver/cmake-4' into 'main' (48aa4e5)
+
+2025-09-06 Mike Gabriel
+
+        * CMakeLists.txt: Bump cmake_minimum_required() to version 3.10.
+          Support building with CMake 4. (aa9b228)
+
+2025-09-07 Ratchanan Srirattanamet
+
+        * Merge branch
+          'personal/sunweaver/ignore-Changelog-in-copyright-test'
+          into 'main' (8a319be)
+
+2025-09-06 Mike Gabriel
+
+        * tests/copyright/check_copyright.sh: Ignore ChangeLog file in
+          copyright test. (6881efa)
+        * Release 1.0.8 (7c7e0c8) (tag: 1.0.8)
+
+2025-08-10 Mike Gabriel
+
+        * Merge branch 'fix/gtest-1.17.0-compat' into 'main' (709cf2d)
+
+2025-07-17 OPNA2608
+
+        * CMakeLists.txt: Raise C++ standard to C++17 (8a93aa1)
+
+2024-08-14 Ratchanan Srirattanamet
+
+        * Merge branch 'personal/sunweaver/iomanip-missing-include' into
+          'main' (5b0b9bd)
+
+2024-08-14 Mike Gabriel
+
+        * tests/core/persistent_string_cache/speed_test.cpp: Add missing
+          include of <iomanip>. (6b8b158)
+        * Merge branch 'add/testOptout' into 'main' (27b9ee0)
+
+2023-11-29 OPNA2608
+
+        * Enable opting-out of tests (2eb1760)
+
+2024-05-02 Mike Gabriel
+
+        * Merge branch 'fix/libcxx-system_error-difference' into 'main'
+          (a846c6a)
+
+2023-11-29 OPNA2608
+
+        * persistent_string_cache_impl_test: Be more lenient about
+          std::system_error message (9913edf)
+
+2024-03-20 Ratchanan Srirattanamet
+
+        * Merge branch 'add/soversion' into 'main' (717f14b)
+
+2024-03-20 OPNA2608
+
+        * src/core: Add library versioning (5136a45)
+
 2024-01-28 Mike Gabriel
 
-        * Release 1.0.7 (HEAD -> main, tag: 1.0.7)
+        * Release 1.0.7 (734d87f) (tag: 1.0.7)
 
 2024-01-02 Mike Gabriel
 
@@ -66,7 +132,7 @@
 
 2021-11-02 Ratchanan Srirattanamet
 
-        * Release 1.0.5 (9ae3109)
+        * Release 1.0.5 (9ae3109) (tag: 1.0.5)
         * Merge branch 'personal/peat-psuwit/skip-non-root-test' into
           'master' (fa809bf)
 
diff -pruN 1.0.7-2/data/CMakeLists.txt 1.0.9-1/data/CMakeLists.txt
--- 1.0.7-2/data/CMakeLists.txt	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/data/CMakeLists.txt	2025-09-06 22:12:24.000000000 +0000
@@ -1,7 +1,7 @@
 # Set up package config.
 set(PKGCONFIG_NAME ${LIBNAME})
 set(PKGCONFIG_DESCRIPTION "A cache of key-value pairs with persistent storage for C++")
-set(VERSION "1.0.7")
+set(VERSION "1.0.9")
 
 set(PROPAGATED_LINK_FLAGS "")
 if(NOT BUILD_SHARED_LIBS)
diff -pruN 1.0.7-2/data/libpersistent-cache-cpp.pc.in 1.0.9-1/data/libpersistent-cache-cpp.pc.in
--- 1.0.7-2/data/libpersistent-cache-cpp.pc.in	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/data/libpersistent-cache-cpp.pc.in	2025-09-06 22:12:24.000000000 +0000
@@ -4,6 +4,6 @@ libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
 
 Name: lib@LIBNAME@
 Description: Cache of key-value pairs with persistent storage for C++
-Version: @LIBVERSION@
+Version: @PROJECT_VERSION@
 Libs: -L${libdir} -l@LIBNAME@ @PROPAGATED_LINK_FLAGS@
 Cflags: -I${includedir}
diff -pruN 1.0.7-2/debian/changelog 1.0.9-1/debian/changelog
--- 1.0.7-2/debian/changelog	2024-08-14 17:14:12.000000000 +0000
+++ 1.0.9-1/debian/changelog	2025-09-06 22:13:11.000000000 +0000
@@ -1,3 +1,30 @@
+persistent-cache-cpp (1.0.9-1) unstable; urgency=medium
+
+  * New upstream release.
+  * debian/patches:
+    + Drop 1001_CMakeLists.txt-Bump-cmake_minimum_required-to-versio.patch.
+      Applied upstream.
+
+ -- Mike Gabriel <sunweaver@debian.org>  Sun, 07 Sep 2025 00:13:11 +0200
+
+persistent-cache-cpp (1.0.8-1) unstable; urgency=medium
+
+  * New upstream release.
+    - Support building against GTest/GMock >= 1.17.0. (Closes: #1114258).
+  * debian/patches:
+    + Drop 1001_fix-setfill-not-defined-in-scope.patch. Applied upstream.
+    + Add 1001_CMakeLists.txt-Bump-cmake_minimum_required-to-versio.patch.
+      Support building with CMake 4. (Closes: #1113398).
+  * debian/control:
+    + Bump Standards-Version: to 4.7.2. No changes needed.
+    + In B-D, switch from pkg-config to pkgconf. Thanks, lintian.
+    + In D (persistent-cache-cpp-dev), switch from pkg-config to pkgconf.
+      Thanks, lintian.
+  * debian/copyright:
+    + Update copyright attributions for debian/.
+
+ -- Mike Gabriel <sunweaver@debian.org>  Sat, 06 Sep 2025 11:16:47 +0200
+
 persistent-cache-cpp (1.0.7-2) unstable; urgency=medium
 
   * debian/watch:
diff -pruN 1.0.7-2/debian/control 1.0.9-1/debian/control
--- 1.0.7-2/debian/control	2023-11-10 08:41:59.000000000 +0000
+++ 1.0.9-1/debian/control	2025-09-06 09:25:26.000000000 +0000
@@ -14,9 +14,9 @@ Build-Depends: cmake,
                libgtest-dev,
                libleveldb-dev,
                lsb-release,
-               pkg-config,
+               pkgconf,
                python3 <!nocheck>,
-Standards-Version: 4.6.2
+Standards-Version: 4.7.2
 Rules-Requires-Root: no
 Homepage: https://gitlab.com/ubports/development/core/lib-cpp/persistent-cache-cpp
 Vcs-Git: https://salsa.debian.org/ubports-team/persistent-cache-cpp.git
@@ -29,7 +29,7 @@ Multi-Arch: same
 Depends: ${misc:Depends},
          libboost-dev,
          libleveldb-dev,
-         pkg-config,
+         pkgconf,
 Description: Cache of key-value pairs with persistent storage for C++ 11
  This API provides a cache of key-value pairs with a backing store. It is
  intended for caching arbitrary (possibly large) amounts of data, such as
diff -pruN 1.0.7-2/debian/copyright 1.0.9-1/debian/copyright
--- 1.0.7-2/debian/copyright	2024-02-01 14:12:05.000000000 +0000
+++ 1.0.9-1/debian/copyright	2025-09-06 09:15:46.000000000 +0000
@@ -71,7 +71,7 @@ License: LGPL-3
 
 Files: debian/*
 Copyright: 2015, Canonical Ltd.
-           2021-2024, Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+           2021-2025, Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
 License: LGPL-3 or GPL-3
 
 License: LGPL-3
diff -pruN 1.0.7-2/debian/patches/1001_fix-setfill-not-defined-in-scope.patch 1.0.9-1/debian/patches/1001_fix-setfill-not-defined-in-scope.patch
--- 1.0.7-2/debian/patches/1001_fix-setfill-not-defined-in-scope.patch	2024-08-14 17:14:12.000000000 +0000
+++ 1.0.9-1/debian/patches/1001_fix-setfill-not-defined-in-scope.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,66 +0,0 @@
-From 6b8b158202a9be0c8c6e8ef14f13a306842102d6 Mon Sep 17 00:00:00 2001
-From: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
-Date: Wed, 14 Aug 2024 19:20:58 +0200
-Subject: [PATCH] tests/core/persistent_string_cache/speed_test.cpp: Add
- missing include of <iomanip>.
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This resolves the following issue, recently having occurred in Debian unstable (possibly due to GCC-14 bump):
-
-```
-[ 84%] Building CXX object tests/core/persistent_string_cache/CMakeFiles/speed_test.dir/speed_test.cpp.o
-cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/tests/core/persistent_string_cache && /usr/bin/c++ -DGTEST_VERSION_MAJOR=1 -DGTEST_VERSION_MINOR=15 -DGTEST_VERSION_PATCH=0 -DTEST_DIR=\"/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/tests/core/persistent_string_cache\" -I/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/tests/core/persistent_string_cache -I/<<PKGBUILDDIR>>/tests/core/persistent_string_cache -I/<<PKGBUILDDIR>>/include -isystem /usr/src/googletest/googlemock/include -isystem /usr/src/googletest/googletest/include -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -Wdate-time -D_FORTIFY_SOURCE=2 --std=c++14 -Wall -pedantic -Wextra -Wcast-align -Wcast-qual -Wformat -Wredundant-decls -Wswitch-default -Wnon-virtual-dtor -Wctor-dtor-privacy -Wold-style-cast -MD -MT tests/core/persistent_string_cache/CMakeFiles/speed_test.dir/speed_test.cpp.o -MF CMakeFiles/speed_test.dir/speed_test.cpp.o.d -o CMakeFiles/speed_test.dir/speed_test.cpp.o -c /<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/persistent_string_cache_test.cpp: In member function ‘virtual void PersistentStringCache_stats_Test::TestBody()’:
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/persistent_string_cache_test.cpp:372:53: warning: moving a temporary object prevents copy elision [-Wpessimizing-move]
-  372 |             PersistentCacheStats s4(move(c->stats()));
-      |                                                     ^
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/persistent_string_cache_test.cpp:372:53: note: remove ‘std::move’ call
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp: In function ‘std::string make_key(int, int)’:
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:99:10: error: ‘setfill’ was not declared in this scope
-   99 |     s << setfill('0') << setw(keylen) << random_int(0, max_key);
-      |          ^~~~~~~
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:32:1: note: ‘std::setfill’ is defined in header ‘<iomanip>’; this is probably fixable by adding ‘#include <iomanip>’
-   31 | #include <thread>
-  +++ |+#include <iomanip>
-   32 |
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:99:26: error: ‘setw’ was not declared in this scope
-   99 |     s << setfill('0') << setw(keylen) << random_int(0, max_key);
-      |                          ^~~~
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:99:26: note: ‘std::setw’ is defined in header ‘<iomanip>’; this is probably fixable by adding ‘#include <iomanip>’
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp: In member function ‘virtual void PersistentStringCache_basic_Test::TestBody()’:
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:151:14: error: ‘setfill’ was not declared in this scope
-  151 |         s << setfill('0') << setw(keylen) << i;
-      |              ^~~~~~~
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:151:14: note: ‘std::setfill’ is defined in header ‘<iomanip>’; this is probably fixable by adding ‘#include <iomanip>’
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:151:30: error: ‘setw’ was not declared in this scope
-  151 |         s << setfill('0') << setw(keylen) << i;
-      |                              ^~~~
-/<<PKGBUILDDIR>>/tests/core/persistent_string_cache/speed_test.cpp:151:30: note: ‘std::setw’ is defined in header ‘<iomanip>’; this is probably fixable by adding ‘#include <iomanip>’
-make[3]: *** [tests/core/persistent_string_cache/CMakeFiles/speed_test.dir/build.make:79: tests/core/persistent_string_cache/CMakeFiles/speed_test.dir/speed_test.cpp.o] Error 1
-make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu'
-make[2]: *** [CMakeFiles/Makefile2:1270: tests/core/persistent_string_cache/CMakeFiles/speed_test.dir/all] Error 2
-make[2]: *** Waiting for unfinished jobs....
-```
-
-Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
----
- tests/core/persistent_string_cache/speed_test.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tests/core/persistent_string_cache/speed_test.cpp b/tests/core/persistent_string_cache/speed_test.cpp
-index a816d0e..76417be 100644
---- a/tests/core/persistent_string_cache/speed_test.cpp
-+++ b/tests/core/persistent_string_cache/speed_test.cpp
-@@ -26,6 +26,7 @@
- #pragma GCC diagnostic pop
- 
- #include <chrono>
-+#include <iomanip>
- #include <iostream>
- #include <random>
- #include <thread>
--- 
-2.39.2
-
diff -pruN 1.0.7-2/debian/patches/series 1.0.9-1/debian/patches/series
--- 1.0.7-2/debian/patches/series	2024-08-14 17:11:46.000000000 +0000
+++ 1.0.9-1/debian/patches/series	1970-01-01 00:00:00.000000000 +0000
@@ -1 +0,0 @@
-1001_fix-setfill-not-defined-in-scope.patch
diff -pruN 1.0.7-2/src/core/CMakeLists.txt 1.0.9-1/src/core/CMakeLists.txt
--- 1.0.7-2/src/core/CMakeLists.txt	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/src/core/CMakeLists.txt	2025-09-06 22:12:24.000000000 +0000
@@ -11,5 +11,13 @@ set(CACHE_SRC
 add_library(${LIBNAME} ${CACHE_SRC})
 target_link_libraries(${LIBNAME} ${LEVELDB})
 
+set_target_properties(
+    ${LIBNAME}
+
+    PROPERTIES
+    VERSION "${PROJECT_VERSION}"
+    SOVERSION "${PROJECT_VERSION_MAJOR}"
+)
+
 install(TARGETS ${LIBNAME}
         DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE})
diff -pruN 1.0.7-2/tests/copyright/check_copyright.sh 1.0.9-1/tests/copyright/check_copyright.sh
--- 1.0.7-2/tests/copyright/check_copyright.sh	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/tests/copyright/check_copyright.sh	2025-09-06 22:12:24.000000000 +0000
@@ -35,7 +35,7 @@ distro=$(lsb_release -c -s)
     exit 0
 }
 
-ignore_pat="\\.gitignore|\\.git/.*|\\.pc/.*|\\.sci$|debian|AUTHOR|HACKING|README|\\.txt$|\\.in$|\\.pm$"
+ignore_pat="\\.gitignore|\\.git/.*|\\.pc/.*|\\.sci$|ChangeLog|debian|AUTHOR|HACKING|README|\\.txt$|\\.in$|\\.pm$"
 
 #
 # We don't use the -i option of licensecheck to add ignore_dir to the pattern because Jenkins creates directories
diff -pruN 1.0.7-2/tests/core/internal/persistent_string_cache_impl/persistent_string_cache_impl_test.cpp 1.0.9-1/tests/core/internal/persistent_string_cache_impl/persistent_string_cache_impl_test.cpp
--- 1.0.7-2/tests/core/internal/persistent_string_cache_impl/persistent_string_cache_impl_test.cpp	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/tests/core/internal/persistent_string_cache_impl/persistent_string_cache_impl_test.cpp	2025-09-06 22:12:24.000000000 +0000
@@ -1295,9 +1295,12 @@ TEST(PersistentStringCacheImpl, exceptio
             }
             catch (system_error const& e)
             {
-                EXPECT_EQ("PersistentStringCache: check_version(): bad version: \"nan\" (cache_path: " + TEST_DB +
-                          "): Unknown error 666",
-                          e.what());
+                string msg = e.what();
+                EXPECT_TRUE(boost::starts_with(
+                    msg,
+                    "PersistentStringCache: check_version(): "
+                    "bad version: \"nan\" (cache_path: " +
+                    TEST_DB + "): ")) << msg;
             }
         }
 
diff -pruN 1.0.7-2/tests/core/persistent_string_cache/speed_test.cpp 1.0.9-1/tests/core/persistent_string_cache/speed_test.cpp
--- 1.0.7-2/tests/core/persistent_string_cache/speed_test.cpp	2024-01-28 11:05:19.000000000 +0000
+++ 1.0.9-1/tests/core/persistent_string_cache/speed_test.cpp	2025-09-06 22:12:24.000000000 +0000
@@ -26,6 +26,7 @@
 #pragma GCC diagnostic pop
 
 #include <chrono>
+#include <iomanip>
 #include <iostream>
 #include <random>
 #include <thread>
