Skip to content

Commit d41ca94

Browse files
authored
Adjust CMake minimal version (#4709)
* 🔧 adjust CMake versions Signed-off-by: Niels Lohmann <[email protected]> * 🔧 install OpenSSL for CMake Signed-off-by: Niels Lohmann <[email protected]> * 🔧 install OpenSSL for CMake Signed-off-by: Niels Lohmann <[email protected]> * 🔧 install OpenSSL for CMake Signed-off-by: Niels Lohmann <[email protected]> * 🔧 install OpenSSL for CMake Signed-off-by: Niels Lohmann <[email protected]> * 🔧 install OpenSSL for CMake Signed-off-by: Niels Lohmann <[email protected]> * 🔨 clean up Signed-off-by: Niels Lohmann <[email protected]> * 📝 update documentation Signed-off-by: Niels Lohmann <[email protected]> --------- Signed-off-by: Niels Lohmann <[email protected]>
1 parent 3a57039 commit d41ca94

File tree

12 files changed

+47
-30
lines changed

12 files changed

+47
-30
lines changed

.github/workflows/ubuntu.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
steps:
2424
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
2525
- name: Get latest CMake and ninja
26-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
26+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
2727
- name: Run CMake
2828
run: cmake -S . -B build -DJSON_CI=On
2929
- name: Build
@@ -54,7 +54,7 @@ jobs:
5454
run: sudo apt-get update ; sudo apt-get install -y valgrind
5555
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
5656
- name: Get latest CMake and ninja
57-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
57+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
5858
- name: Run CMake
5959
run: cmake -S . -B build -DJSON_CI=On
6060
- name: Build
@@ -71,7 +71,7 @@ jobs:
7171
run: apt-get update ; apt-get install -y git clang-tools iwyu unzip
7272
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
7373
- name: Get latest CMake and ninja
74-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
74+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
7575
- name: Run CMake
7676
run: cmake -S . -B build -DJSON_CI=On
7777
- name: Build
@@ -85,10 +85,10 @@ jobs:
8585
target: [ci_cmake_flags, ci_test_diagnostics, ci_test_diagnostic_positions, ci_test_noexceptions, ci_test_noimplicitconversions, ci_test_legacycomparison, ci_test_noglobaludls]
8686
steps:
8787
- name: Install build-essential
88-
run: apt-get update ; apt-get install -y build-essential unzip wget git
88+
run: apt-get update ; apt-get install -y build-essential unzip wget git libssl-dev
8989
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
9090
- name: Get latest CMake and ninja
91-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
91+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
9292
- name: Run CMake
9393
run: cmake -S . -B build -DJSON_CI=On
9494
- name: Build
@@ -148,7 +148,7 @@ jobs:
148148
steps:
149149
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
150150
- name: Get latest CMake and ninja
151-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
151+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
152152
- name: Run CMake
153153
run: cmake -S . -B build -DJSON_CI=On
154154
- name: Build
@@ -165,7 +165,7 @@ jobs:
165165
run: apt-get update ; apt-get install -y unzip git
166166
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
167167
- name: Get latest CMake and ninja
168-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
168+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
169169
- name: Set env FORCE_STDCPPFS_FLAG for clang 7 / 8 / 9 / 10
170170
run: echo "JSON_FORCED_GLOBAL_COMPILE_OPTIONS=-DJSON_HAS_FILESYSTEM=0;-DJSON_HAS_EXPERIMENTAL_FILESYSTEM=0" >> "$GITHUB_ENV"
171171
if: ${{ matrix.compiler == '7' || matrix.compiler == '8' || matrix.compiler == '9' || matrix.compiler == '10' }}
@@ -183,7 +183,7 @@ jobs:
183183
steps:
184184
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
185185
- name: Get latest CMake and ninja
186-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
186+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
187187
- name: Run CMake
188188
run: cmake -S . -B build -DJSON_CI=On
189189
- name: Build
@@ -201,7 +201,7 @@ jobs:
201201
run: apt-get update ; apt-get install -y git unzip
202202
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
203203
- name: Get latest CMake and ninja
204-
uses: lukka/get-cmake@56d043d188c3612951d8755da8f4b709ec951ad6 # v3.31.6
204+
uses: lukka/get-cmake@28983e0d3955dba2bb0a6810caae0c6cf268ec0c # v4.0.0
205205
- name: Run CMake
206206
run: cmake -S . -B build -DJSON_CI=On
207207
- name: Build with libc++

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.1...3.14)
1+
cmake_minimum_required(VERSION 3.5...4.0)
22

33
##
44
## PROJECT

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1144,7 +1144,7 @@ The library is used in multiple projects, applications, operating systems, etc.
11441144
Though it's 2025 already, the support for C++11 is still a bit sparse. Currently, the following compilers are known to work:
11451145
11461146
- GCC 4.8 - 14.2 (and possibly later)
1147-
- Clang 3.4 - 20.0 (and possibly later)
1147+
- Clang 3.4 - 21.0 (and possibly later)
11481148
- Apple Clang 9.1 - 16.0 (and possibly later)
11491149
- Intel C++ Compiler 17.0.2 (and possibly later)
11501150
- Nvidia CUDA Compiler 11.0.221 (and possibly later)

cmake/ci.cmake

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -541,33 +541,42 @@ add_custom_target(ci_benchmarks
541541
# CMake flags
542542
###############################################################################
543543

544+
# we test the project with different CMake versions:
545+
# - CMake 3.5 (the earliest supported)
546+
# - CMake 3.31.6 (the latest 3.x release)
547+
# - CMake 4.0.0 (the latest release)
548+
544549
function(ci_get_cmake version var)
545550
set(${var} ${PROJECT_BINARY_DIR}/cmake-${version}/bin/cmake)
546551
add_custom_command(
547552
OUTPUT ${${var}}
548553
COMMAND wget -nc https://github.com/Kitware/CMake/releases/download/v${version}/cmake-${version}.tar.gz
549554
COMMAND tar xfz cmake-${version}.tar.gz
550555
COMMAND rm cmake-${version}.tar.gz
551-
COMMAND ${CMAKE_COMMAND} -S cmake-${version} -B cmake-${version}
552-
COMMAND ${CMAKE_COMMAND} --build cmake-${version} --parallel 10
556+
# -DCMAKE_POLICY_VERSION_MINIMUM=3.5 required to compile older CMake versions with CMake 4.0.0
557+
COMMAND cmake -S cmake-${version} -B cmake-${version} -DCMAKE_POLICY_VERSION_MINIMUM=3.5
558+
COMMAND cmake --build cmake-${version} --parallel 10
553559
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
554560
COMMENT "Download CMake ${version}"
555561
)
556562
set(${var} ${${var}} PARENT_SCOPE)
557563
endfunction()
558564

559-
ci_get_cmake(3.1.0 CMAKE_3_1_0_BINARY)
560-
ci_get_cmake(3.13.0 CMAKE_3_13_0_BINARY)
565+
ci_get_cmake(3.5.0 CMAKE_3_5_0_BINARY)
566+
ci_get_cmake(3.31.6 CMAKE_3_31_6_BINARY)
567+
ci_get_cmake(4.0.0 CMAKE_4_0_0_BINARY)
561568

562-
set(JSON_CMAKE_FLAGS_3_1_0 JSON_Diagnostics JSON_Diagnostic_Positions JSON_GlobalUDLs JSON_ImplicitConversions JSON_DisableEnumSerialization
569+
# the tests require CMake 3.13 or later, so they are excluded for CMake 3.5.0
570+
set(JSON_CMAKE_FLAGS_3_5_0 JSON_Diagnostics JSON_Diagnostic_Positions JSON_GlobalUDLs JSON_ImplicitConversions JSON_DisableEnumSerialization
563571
JSON_LegacyDiscardedValueComparison JSON_Install JSON_MultipleHeaders JSON_SystemInclude JSON_Valgrind)
564-
set(JSON_CMAKE_FLAGS_3_13_0 JSON_BuildTests)
572+
set(JSON_CMAKE_FLAGS_3_31_6 JSON_BuildTests ${JSON_CMAKE_FLAGS_3_31_6})
573+
set(JSON_CMAKE_FLAGS_4_0_0 JSON_BuildTests ${JSON_CMAKE_FLAGS_3_5_0})
565574

566575
function(ci_add_cmake_flags_targets flag min_version)
567576
string(TOLOWER "ci_cmake_flag_${flag}" flag_target)
568577
string(REPLACE . _ min_version_var ${min_version})
569578
set(cmake_binary ${CMAKE_${min_version_var}_BINARY})
570-
add_custom_target(${flag_target}
579+
add_custom_target(${flag_target}_${min_version}_2
571580
COMMENT "Check CMake flag ${flag} (CMake ${CMAKE_VERSION})"
572581
COMMAND ${CMAKE_COMMAND}
573582
-Werror=dev
@@ -587,12 +596,16 @@ function(ci_add_cmake_flags_targets flag min_version)
587596
set(JSON_CMAKE_FLAG_BUILD_DIRS ${JSON_CMAKE_FLAG_BUILD_DIRS} PARENT_SCOPE)
588597
endfunction()
589598

590-
foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_1_0})
591-
ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.1.0)
599+
foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_5_0})
600+
ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.5.0)
601+
endforeach()
602+
603+
foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_31_6})
604+
ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.31.6)
592605
endforeach()
593606

594-
foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_3_13_0})
595-
ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 3.13.0)
607+
foreach(JSON_CMAKE_FLAG ${JSON_CMAKE_FLAGS_4_0_0})
608+
ci_add_cmake_flags_targets(${JSON_CMAKE_FLAG} 4.0.0)
596609
endforeach()
597610

598611
add_custom_target(ci_cmake_flags
@@ -695,6 +708,6 @@ add_custom_target(ci_test_build_documentation
695708
###############################################################################
696709

697710
add_custom_target(ci_clean
698-
COMMAND rm -fr ${PROJECT_BINARY_DIR}/build_* cmake-3.1.0-Darwin64 ${JSON_CMAKE_FLAG_BUILD_DIRS} ${single_binaries}
711+
COMMAND rm -fr ${PROJECT_BINARY_DIR}/build_* cmake-3.5.0-Darwin64 ${JSON_CMAKE_FLAG_BUILD_DIRS} ${single_binaries}
699712
COMMENT "Clean generated directories"
700713
)

docs/mkdocs/docs/community/quality_assurance.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,4 +208,7 @@ violations will result in a failed build.
208208
All library functions are exposed and usable by CMake.
209209

210210
- [x] All library options are exposed as [CMake options](https://json.nlohmann.me/integration/cmake/) and tested.
211-
- [x] The library is tested against the earliest supported CMake version.
211+
- [x] The library is tested against relevant CMake versions:
212+
- CMake 3.5 (the earliest supported)
213+
- CMake 3.31.6 (the latest 3.x release)
214+
- CMake 4.0.0 (a very recent release)

docs/mkdocs/docs/home/customers.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ the result of an internet search. If you know further customers of the library,
111111
- [**Autodesk Desktop**](https://damassets.autodesk.net/content/dam/autodesk/www/Company/legal-notices-trademarks/autodesk-desktop-platform-components/internal-autodesk-components-web-page-2023.pdf), a software platform developed by Autodesk for creating and managing desktop applications and services
112112
- [**Check Point**](https://www.checkpoint.com/about-us/copyright-and-trademarks/): a cybersecurity company specializing in threat prevention and network security solutions, offering a range of products designed to protect enterprises from cyber threats and ensure data integrity
113113
- [**Microsoft Office for Mac**](https://officecdnmac.microsoft.com/pr/legal/mac/OfficeforMacAttributions.html), a suite of productivity applications developed by Microsoft for macOS, including tools for word processing, spreadsheets, and presentations
114+
- [**Microsoft Teams**](https://www.microsoft.com/microsoft-teams/), a team collaboration application offering workspace chat and video conferencing, file storage, and integration of proprietary and third-party applications and services
114115
- [**Nexthink Infinity**](https://docs.nexthink.com/legal/services-terms/experience-open-source-software-licenses/infinity-2022.8-software-licenses): a digital employee experience management platform for monitoring and improving IT performance
115116
- [**Sophos Connect Client**](https://docs.sophos.com/nsg/licenses/SophosConnect/SophosConnectAttribution.html): a secure VPN client from Sophos that allows remote users to connect to their corporate network, ensuring secure access to resources and data
116117
- [**Stonebranch**](https://stonebranchdocs.atlassian.net/wiki/spaces/UA77/pages/799545647/Licenses+for+Third-Party+Libraries): a cloud-based cybersecurity solution that integrates backup, disaster recovery, and cybersecurity features to protect data and ensure business continuity for organizations

docs/mkdocs/docs/images/customers.png

6.15 KB
Loading

docs/mkdocs/docs/integration/cmake.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ and use the namespaced imported target from the generated package configuration:
1515
!!! example
1616

1717
```cmake title="CMakeLists.txt"
18-
cmake_minimum_required(VERSION 3.1)
18+
cmake_minimum_required(VERSION 3.5)
1919
project(ExampleProject LANGUAGES CXX)
2020

2121
find_package(nlohmann_json 3.11.3 REQUIRED)
@@ -35,7 +35,7 @@ To embed the library directly into an existing CMake project, place the entire s
3535
!!! example
3636

3737
```cmake title="CMakeLists.txt"
38-
cmake_minimum_required(VERSION 3.1)
38+
cmake_minimum_required(VERSION 3.5)
3939
project(ExampleProject LANGUAGES CXX)
4040

4141
# If you only include this third party in PRIVATE source files, you do not need to install it

tests/cmake_add_subdirectory/project/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.1...3.14)
1+
cmake_minimum_required(VERSION 3.5...3.14)
22

33
project(DummyImport CXX)
44

tests/cmake_import/project/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.1...3.14)
1+
cmake_minimum_required(VERSION 3.5...3.14)
22

33
project(DummyImport CXX)
44

0 commit comments

Comments
 (0)