Skip to content

Commit 2e5e2b5

Browse files
authored
bump deps & rework json bindings API (#285)
* as rapidjson becomes not maintained make option to choose main json binding library - boost, nlohmann and rapid * bump deps to recent versions * as msvc has strict rules for types stored in std::variant - force usage of nonstd::variant for msvc build * revive CI pipelines for master
1 parent 2053cfa commit 2e5e2b5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2343
-923
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ jobs:
3838

3939
steps:
4040
- name: Checkout repository
41-
uses: actions/checkout@v3
41+
uses: actions/checkout@v4
4242

4343
# Initializes the CodeQL tools for scanning.
4444
- name: Initialize CodeQL
45-
uses: github/codeql-action/init@v2
45+
uses: github/codeql-action/init@v3
4646
with:
4747
languages: ${{ matrix.language }}
4848
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -83,4 +83,4 @@ jobs:
8383
8484
8585
- name: Perform CodeQL Analysis
86-
uses: github/codeql-action/analyze@v2
86+
uses: github/codeql-action/analyze@v3

.github/workflows/linux-build.yml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,22 @@ jobs:
2626
fail-fast: false
2727
max-parallel: 8
2828
matrix:
29-
compiler: [g++-9, g++-10, g++-11, clang++-12, clang++-13, clang++-14]
29+
compiler: [g++-12, g++-13, g++-14, clang++-18, clang++-19, clang++-20]
3030
base-flags: ["", -DJINJA2CPP_CXX_STANDARD=17]
3131
build-config: [Release, Debug]
3232
build-shared: [TRUE, FALSE]
3333

3434
include:
35-
- compiler: g++-9
35+
- compiler: g++-12
3636
extra-flags: -DJINJA2CPP_STRICT_WARNINGS=OFF
37-
- compiler: g++-10
37+
- compiler: g++-13
3838
extra-flags: -DJINJA2CPP_STRICT_WARNINGS=OFF
39-
- compiler: g++-11
39+
- compiler: g++-14
4040
extra-flags: -DJINJA2CPP_STRICT_WARNINGS=OFF
4141

42+
4243
steps:
43-
- uses: actions/checkout@v3
44+
- uses: actions/checkout@v4
4445
- name: Setup environment
4546
env:
4647
INPUT_COMPILER: ${{ matrix.compiler }}

.github/workflows/windows-build.yml

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,26 @@ on:
1919
jobs:
2020
windows-msvc-build:
2121

22-
runs-on: ${{matrix.run-machine}}
22+
runs-on: windows-latest
2323

2424
strategy:
2525
fail-fast: false
2626
max-parallel: 20
2727
matrix:
28-
compiler: [msvc-2019]
2928
base-flags: ["", -DJINJA2CPP_CXX_STANDARD=17]
3029
build-config: [Release, Debug]
31-
build-platform: [x86, x64]
30+
build-platform: [x64]
3231
build-runtime: ["", /MT, /MD]
3332
build-shared: [FALSE, TRUE]
3433

35-
include:
36-
- compiler: msvc-2019
37-
build-platform: x86
38-
run-machine: windows-2019
39-
generator: Visual Studio 16 2019
40-
vc_vars: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat
41-
- compiler: msvc-2019
42-
build-platform: x64
43-
run-machine: windows-2019
44-
generator: Visual Studio 16 2019
45-
vc_vars: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat
46-
47-
4834
steps:
49-
- uses: actions/checkout@v3
35+
- uses: actions/checkout@v4
36+
37+
# Setup MSVC environment
38+
- name: Setup MSVC
39+
uses: ilammy/msvc-dev-cmd@v1
40+
with:
41+
arch: ${{ matrix.build-platform }}
5042

5143
- name: Build
5244
shell: cmd
@@ -58,23 +50,17 @@ jobs:
5850
INPUT_EXTRA_FLAGS: ${{ matrix.extra_flags }}
5951
INPUT_BUILD_PLATFORM: ${{ matrix.build-platform }}
6052
INPUT_BUILD_RUNTIME: ${{ matrix.build-runtime }}
61-
INPUT_GENERATOR: ${{ matrix.generator }}
62-
VC_VARS: "${{ matrix.vc_vars }}"
6353
run: |
64-
call "%VC_VARS%"
6554
mkdir -p .build
6655
cd .build
6756
cmake --version
68-
cmake .. -G "%INPUT_GENERATOR%" -DCMAKE_BUILD_TYPE=%INPUT_BUILD_CONFIG% -DJINJA2CPP_MSVC_RUNTIME_TYPE="%INPUT_BUILD_RUNTIME%" -DJINJA2CPP_DEPS_MODE=internal -DJINJA2CPP_BUILD_SHARED=%INPUT_BUILD_SHARED% %INPUT_BASE_FLAGS% %INPUT_EXTRA_FLAGS%
57+
cmake .. -G "NMake Makefiles" -Dvariant_CONFIG_SELECT_VARIANT=variant_VARIANT_NONSTD -DCMAKE_BUILD_TYPE=%INPUT_BUILD_CONFIG% -DJINJA2CPP_MSVC_RUNTIME_TYPE="%INPUT_BUILD_RUNTIME%" -DJINJA2CPP_DEPS_MODE=internal -DJINJA2CPP_BUILD_SHARED=%INPUT_BUILD_SHARED% %INPUT_BASE_FLAGS% %INPUT_EXTRA_FLAGS%
6958
cmake --build . --config %INPUT_BUILD_CONFIG% --verbose
7059
7160
- name: Test
7261
shell: cmd
7362
env:
7463
INPUT_BUILD_CONFIG: ${{ matrix.build-config }}
75-
VC_VARS: "${{ matrix.vc_vars }}"
7664
run: |
7765
cd .build
78-
call "%VC_VARS%"
79-
set path=%BOOST_ROOT%\lib;%PATH%
8066
ctest -C %INPUT_BUILD_CONFIG% -V

CMakeLists.txt

Lines changed: 124 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.23.0)
1+
cmake_minimum_required(VERSION 3.23.0..4.0)
22

33
if(POLICY CMP0135)
44
cmake_policy(SET CMP0135 NEW)
@@ -19,9 +19,9 @@ set_property(CACHE JINJA2CPP_WITH_SANITIZERS PROPERTY STRINGS ${JINJA2CPP_SANITI
1919
set(JINJA2CPP_SUPPORTED_REGEX std boost)
2020
set(JINJA2CPP_USE_REGEX boost CACHE STRING "Use regex parser in lexer, boost works faster on most platforms")
2121
set_property(CACHE JINJA2CPP_USE_REGEX PROPERTY STRINGS ${JINJA2CPP_SUPPORTED_REGEX})
22-
set(JINJA2CPP_WITH_JSON_BINDINGS boost nlohmann rapid all none)
23-
set(JINJA2CPP_WITH_JSON_BINDINGS boost CACHE STRING "Build with json support(boost|rapid)")
24-
set_property(CACHE JINJA2CPP_WITH_JSON_BINDINGS PROPERTY STRINGS ${JINJA2CPP_WITH_JSON_BINDINGS})
22+
set(JINJA2CPP_WITH_JSON_SUPPORTED_BINDINGS boost nlohmann rapid)
23+
set(JINJA2CPP_WITH_JSON_BINDINGS boost CACHE STRING "Build with json support(boost|rapid|nlohmann) for serialization operations, like tojson filter. 'boost' is default.")
24+
set_property(CACHE JINJA2CPP_WITH_JSON_BINDINGS PROPERTY STRINGS ${JINJA2CPP_WITH_JSON_SUPPORTED_BINDINGS})
2525
set (JINJA2CPP_DEPS_MODE "internal" CACHE STRING "Jinja2Cpp dependency management mode (internal | external | external-boost | conan-build). See documentation for details. 'interal' is default.")
2626
option(JINJA2CPP_BUILD_TESTS "Build Jinja2Cpp unit tests" ${JINJA2CPP_IS_MAIN_PROJECT})
2727
option(JINJA2CPP_STRICT_WARNINGS "Enable additional warnings and treat them as errors" ON)
@@ -144,13 +144,29 @@ include(collect_sources)
144144

145145
set (LIB_TARGET_NAME jinja2cpp)
146146

147-
CollectSources(Sources Headers ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src)
147+
set(JINJA2CPP_SOURCES
148+
src/error_info.cpp
149+
src/expression_evaluator.cpp
150+
src/expression_parser.cpp
151+
src/filesystem_handler.cpp
152+
src/filters.cpp
153+
src/generic_list.cpp
154+
src/internal_value.cpp
155+
src/lexer.cpp
156+
src/serialize_filters.cpp
157+
src/statements.cpp
158+
src/string_converter_filter.cpp
159+
src/template.cpp
160+
src/template_env.cpp
161+
src/template_parser.cpp
162+
src/testers.cpp
163+
src/value.cpp
164+
)
165+
148166
CollectSources(PublicSources PublicHeaders ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include)
149167

150168
add_library(${LIB_TARGET_NAME} ${LIB_LINK_TYPE}
151-
${Sources}
152-
${Headers}
153-
${PublicHeaders}
169+
${JINJA2CPP_SOURCES}
154170
)
155171

156172
target_sources(${LIB_TARGET_NAME}
@@ -185,19 +201,6 @@ endif()
185201
set(JINJA2CPP_PRIVATE_LIBS "${JINJA2CPP_PRIVATE_LIBS}")
186202
include(thirdparty/CMakeLists.txt)
187203

188-
target_link_libraries(
189-
${LIB_TARGET_NAME}
190-
PUBLIC
191-
${JINJA2CPP_PUBLIC_LIBS}
192-
PRIVATE
193-
${JINJA2CPP_PRIVATE_LIBS}
194-
)
195-
196-
target_include_directories(${LIB_TARGET_NAME}
197-
PUBLIC
198-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
199-
$<INSTALL_INTERFACE:include>
200-
)
201204

202205
if (JINJA2CPP_STRICT_WARNINGS)
203206
if (UNIX)
@@ -218,19 +221,59 @@ endif ()
218221
if ("${JINJA2CPP_USE_REGEX}" STREQUAL "boost")
219222
set(_regex_define "-DJINJA2CPP_USE_REGEX_BOOST")
220223
endif()
224+
221225
if ("${JINJA2CPP_WITH_JSON_BINDINGS}" STREQUAL "boost")
222226
set(_bindings_define "-DJINJA2CPP_WITH_JSON_BINDINGS_BOOST")
227+
target_sources(${LIB_TARGET_NAME}
228+
PRIVATE
229+
src/binding/boost_json_serializer.cpp
230+
)
231+
list(APPEND JINJA2CPP_PRIVATE_LIBS Boost::json)
223232
elseif("${JINJA2CPP_WITH_JSON_BINDINGS}" STREQUAL "rapid")
224233
set(_bindings_define "-DJINJA2CPP_WITH_JSON_BINDINGS_RAPID")
234+
target_sources(${LIB_TARGET_NAME}
235+
PRIVATE
236+
src/binding/rapid_json_serializer.cpp
237+
)
238+
list(APPEND JINJA2CPP_PRIVATE_LIBS RapidJson)
239+
else()
240+
set(_bindings_define "-DJINJA2CPP_WITH_JSON_BINDINGS_NLOHMANN")
241+
target_sources(${LIB_TARGET_NAME}
242+
PRIVATE
243+
src/binding/nlohmann_json_serializer.cpp
244+
)
245+
list(APPEND JINJA2CPP_PRIVATE_LIBS nlohmann_json::nlohmann_json)
225246
endif()
226-
target_compile_definitions(${LIB_TARGET_NAME}
247+
248+
target_link_libraries(
249+
${LIB_TARGET_NAME}
250+
PUBLIC
251+
${JINJA2CPP_PUBLIC_LIBS}
252+
PRIVATE
253+
${JINJA2CPP_PRIVATE_LIBS}
254+
)
255+
256+
target_include_directories(
257+
${LIB_TARGET_NAME}
258+
PUBLIC
259+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
260+
$<INSTALL_INTERFACE:include>
261+
)
262+
263+
target_compile_definitions(
264+
${LIB_TARGET_NAME}
227265
PUBLIC
228266
-DBOOST_SYSTEM_NO_DEPRECATED
229267
-DBOOST_ERROR_CODE_HEADER_ONLY
230268
${_regex_define}
231269
${_bindings_define}
232270
)
233-
271+
# force nonstd variant option for msvc compiler
272+
target_compile_definitions(
273+
${LIB_TARGET_NAME}
274+
PUBLIC
275+
$<$<CXX_COMPILER_ID:MSVC>:variant_CONFIG_SELECT_VARIANT=variant_VARIANT_NONSTD>
276+
)
234277
if (JINJA2CPP_BUILD_SHARED)
235278
target_compile_definitions(${LIB_TARGET_NAME} PRIVATE -DJINJA2CPP_BUILD_AS_SHARED PUBLIC -DJINJA2CPP_LINK_AS_SHARED)
236279
endif ()
@@ -251,8 +294,30 @@ if (JINJA2CPP_BUILD_TESTS)
251294
enable_testing()
252295

253296
CollectSources(TestSources TestHeaders ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/test)
254-
add_executable(jinja2cpp_tests ${TestSources} ${TestHeaders})
255-
target_link_libraries(jinja2cpp_tests gtest gtest_main
297+
set(JINJA2CPP_TEST_SOURCES
298+
test/basic_tests.cpp
299+
test/errors_test.cpp
300+
test/expressions_test.cpp
301+
test/extends_test.cpp
302+
test/filesystem_handler_test.cpp
303+
test/filters_test.cpp
304+
test/forloop_test.cpp
305+
test/helpers_tests.cpp
306+
test/if_test.cpp
307+
test/import_test.cpp
308+
test/includes_test.cpp
309+
test/macro_test.cpp
310+
test/metadata_test.cpp
311+
test/perf_test.cpp
312+
test/statements_tets.cpp
313+
test/test_data
314+
test/test_tools.h
315+
test/testers_test.cpp
316+
test/tojson_filter_test.cpp
317+
test/user_callable_test.cpp
318+
)
319+
add_executable(jinja2cpp_tests ${JINJA2CPP_TEST_SOURCES})
320+
target_link_libraries(jinja2cpp_tests gtest gmock gtest_main
256321
nlohmann_json::nlohmann_json ${LIB_TARGET_NAME} ${EXTRA_TEST_LIBS} ${JINJA2CPP_PRIVATE_LIBS})
257322

258323
set_target_properties(jinja2cpp_tests PROPERTIES
@@ -277,6 +342,39 @@ if (JINJA2CPP_BUILD_TESTS)
277342
add_dependencies(jinja2cpp_tests CopyTestData)
278343

279344
add_test(NAME jinja2cpp_tests COMMAND jinja2cpp_tests)
345+
346+
if ("${JINJA2CPP_WITH_JSON_BINDINGS}" STREQUAL "boost")
347+
set(_bindings_define "-DJINJA2CPP_WITH_JSON_BINDINGS_BOOST")
348+
set(_bindings_test_source test/binding/boost_json_binding_test.cpp)
349+
350+
target_sources(jinja2cpp_tests
351+
PRIVATE
352+
src/binding/boost_json_serializer.cpp
353+
)
354+
endif()
355+
if("${JINJA2CPP_WITH_JSON_BINDINGS}" STREQUAL "rapid")
356+
set(_bindings_define "-DJINJA2CPP_WITH_JSON_BINDINGS_RAPID")
357+
target_sources(jinja2cpp_tests
358+
PRIVATE
359+
test/binding/rapid_json_binding_test.cpp
360+
test/binding/rapid_json_serializer_test.cpp
361+
)
362+
endif()
363+
if("${JINJA2CPP_WITH_JSON_BINDINGS}" STREQUAL "nlohmann")
364+
set(_bindings_define "-DJINJA2CPP_WITH_JSON_BINDINGS_RAPID")
365+
target_sources(jinja2cpp_tests
366+
PRIVATE
367+
test/binding/nlohmann_json_binding_test.cpp
368+
)
369+
endif()
370+
target_compile_definitions(jinja2cpp_tests
371+
PUBLIC
372+
-DBOOST_SYSTEM_NO_DEPRECATED
373+
-DBOOST_ERROR_CODE_HEADER_ONLY
374+
${_regex_define}
375+
${_bindings_define}
376+
)
377+
280378
endif ()
281379

282380
set (JINJA2CPP_INSTALL_CONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/${LIB_TARGET_NAME}")
@@ -353,4 +451,4 @@ if(JINJA2CPP_INSTALL)
353451
DESTINATION
354452
${JINJA2CPP_INSTALL_CONFIG_DIR}
355453
)
356-
endif()
454+
endif()
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
From c5e3f11d98aa3116001361ef108c7bd4fa5e3a7f Mon Sep 17 00:00:00 2001
2+
Date: Fri, 13 Jun 2025 14:46:05 +0300
3+
Subject: [PATCH] fix custom_command error
4+
5+
---
6+
CMakeLists.txt | 3 +--
7+
1 file changed, 1 insertion(+), 2 deletions(-)
8+
9+
diff --git a/CMakeLists.txt b/CMakeLists.txt
10+
index be860c93..73f067c9 100644
11+
--- a/CMakeLists.txt
12+
+++ b/CMakeLists.txt
13+
@@ -161,8 +161,7 @@ if(RAPIDJSON_BUILD_DOC)
14+
add_subdirectory(doc)
15+
endif()
16+
17+
-add_custom_target(travis_doc)
18+
-add_custom_command(TARGET travis_doc
19+
+add_custom_target(TARGET travis_doc
20+
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/travis-doxygen.sh)
21+
22+
if(RAPIDJSON_BUILD_EXAMPLES)
23+
--
24+

0 commit comments

Comments
 (0)