Skip to content

Commit 47e8f08

Browse files
authored
Merge pull request #5 from cropsinsilico/bug_fixes
Bug fixes
2 parents 32b6fb2 + 34eb982 commit 47e8f08

10 files changed

Lines changed: 306 additions & 136 deletions

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file.
33
This project adheres to [Semantic Versioning](http://semver.org/).
44
Because YggdrasilRapidJSON continues to merge updates from RapidJSON, the RapidJSON version is used with the addition of a EXTEN version after the PATCH version (i.e. MAJOR.MINOR.PATCH.EXTEN) to indicate the YggdrasilRapidJSON version. The EXTEN version will restart at 0 when/if RapidJSON increments their version.
55

6+
## X.X.X.X - XXXX-XX-XX
7+
8+
## 1.1.0.3 - 2026-05-29
9+
10+
### Maintenance
11+
* Added missing option for YGGDRASIL_RAPIDJSON_CHECK_PYREFS, YGGDRASIL_RAPIDJSON_PYTHON_WRAPPER, YGGDRASIL_RAPIDJSON_BUILD_ASAN, & YGGDRASIL_RAPIDJSON_ENABLE_INSTRUMENTATION_OPT
12+
* Read version from git tags and use it to set the cmake project version and the header version, bumping if there are commits after the last tag
13+
614
## 1.1.0.2 - 2026-05-28
715

816
### Bug fixes

CMakeLists.txt

Lines changed: 31 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,12 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1414
endif()
1515
endif()
1616

17-
set(LIB_MAJOR_VERSION "1")
18-
set(LIB_MINOR_VERSION "1")
19-
set(LIB_PATCH_VERSION "0")
20-
set(LIB_EXTEN_VERSION "1")
21-
set(LIB_VERSION_STRING "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_PATCH_VERSION}.${LIB_EXTEN_VERSION}")
17+
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)
18+
include(${CMAKE_CURRENT_SOURCE_DIR}/YggdrasilRapidJSONMacros.cmake)
19+
gitversion(LIB_VERSION_STRING "1.1.0.2")
2220

2321
PROJECT(YggdrasilRapidJSON VERSION "${LIB_VERSION_STRING}" LANGUAGES C CXX)
22+
set(PROJECT_NAME_UPPER "YGGDRASIL_RAPIDJSON")
2423
set(PROJECT_NAME_LOWER "yggdrasil_rapidjson")
2524
set(PROJECT_INCLUDE_DIR "include/yggdrasil_rapidjson")
2625

@@ -31,18 +30,20 @@ endif()
3130
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)
3231

3332
include(${CMAKE_CURRENT_SOURCE_DIR}/YggdrasilRapidJSONMacros.cmake)
34-
yggdrasil_options()
33+
yggdrasil_rapidjson_options_create()
3534

3635
option(YGGDRASIL_RAPIDJSON_NEST_HEADERS "Nest the headers during install under the package name (in addition to the directly containing the headers)" OFF)
3736
option(YGGDRASIL_RAPIDJSON_CREATE_METASCHEMA "Re-create the metaschema" OFF)
3837
option(YGGDRASIL_RAPIDJSON_CREATE_METASCHEMA_FULL "Re-create the metaschema and the full_schema.yaml file" OFF)
3938
option(YGGDRASIL_RAPIDJSON_SCHEMA_TESTS "Build tests using the yggdrasil schema" OFF)
4039

41-
set(INTERFACE_COMPILATION_OPTIONS -D_USE_MATH_DEFINES)
42-
set(INTERFACE_INCLUDE_DIRECTORIES)
40+
set(INTERFACE_PUBLIC_COMPILE_FLAGS -D_USE_MATH_DEFINES)
41+
set(INTERFACE_PUBLIC_LINK_FLAGS)
42+
set(INTERFACE_INCLUDE_DIRS)
4343
set(INTERFACE_LIBRARIES)
44-
set(LOCAL_COMPILATION_OPTIONS)
45-
set(LOCAL_INCLUDE_DIRECTORIES)
44+
set(LOCAL_PUBLIC_COMPILE_FLAGS)
45+
set(LOCAL_PUBLIC_LINK_FLAGS)
46+
set(LOCAL_INCLUDE_DIRS)
4647
set(LOCAL_LIBRARIES)
4748

4849
if(DISABLE_YGGDRASIL_RAPIDJSON)
@@ -117,7 +118,7 @@ if(NOT (YGGDRASIL_DISABLE_PYTHON_C_API OR DISABLE_YGGDRASIL_RAPIDJSON))
117118
endif()
118119

119120
# Handle option dependencies and set compilation options for tests
120-
yggdrasil_options_config(LOCAL)
121+
yggdrasil_rapidjson_options_config(LOCAL)
121122

122123
# Generate the metaschema header file
123124
if(YGGDRASIL_RAPIDJSON_CREATE_METASCHEMA_FULL)
@@ -169,11 +170,6 @@ if(YGGDRASIL_RAPIDJSON_BUILD_CXXMIN)
169170
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
170171
endif()
171172

172-
option(YGGDRASIL_RAPIDJSON_BUILD_ASAN "Build yggdrasil_rapidjson with address sanitizer (gcc/clang)" OFF)
173-
option(YGGDRASIL_RAPIDJSON_BUILD_UBSAN "Build yggdrasil_rapidjson with undefined behavior sanitizer (gcc/clang)" OFF)
174-
175-
option(YGGDRASIL_RAPIDJSON_ENABLE_INSTRUMENTATION_OPT "Build yggdrasil_rapidjson with -march or -mcpu options" ON)
176-
177173
find_program(CCACHE_FOUND ccache)
178174
if(CCACHE_FOUND)
179175
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
@@ -186,14 +182,6 @@ endif(CCACHE_FOUND)
186182
find_program(VALGRIND_FOUND valgrind)
187183

188184
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
189-
if(YGGDRASIL_RAPIDJSON_ENABLE_INSTRUMENTATION_OPT AND NOT CMAKE_CROSSCOMPILING)
190-
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le")
191-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native")
192-
else()
193-
#FIXME: x86 is -march=native, but doesn't mean every arch is this option. To keep original project's compatibility, I leave this except POWER.
194-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
195-
endif()
196-
endif()
197185
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
198186
set(EXTRA_CXX_FLAGS -Weffc++ -Wswitch-default -Wfloat-equal -Wconversion -Wsign-conversion)
199187
if (YGGDRASIL_RAPIDJSON_BUILD_CXXMIN)
@@ -209,24 +197,6 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
209197
elseif (YGGDRASIL_RAPIDJSON_BUILD_CXX20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0")
210198
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
211199
endif()
212-
if (YGGDRASIL_RAPIDJSON_BUILD_ASAN)
213-
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.0")
214-
message(FATAL_ERROR "GCC < 4.8 doesn't support the address sanitizer")
215-
else()
216-
add_compile_options(-fsanitize=address)
217-
add_link_options(-fsanitize=address)
218-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
219-
endif()
220-
endif()
221-
if (YGGDRASIL_RAPIDJSON_BUILD_UBSAN)
222-
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9.0")
223-
message(FATAL_ERROR "GCC < 4.9 doesn't support the undefined behavior sanitizer")
224-
else()
225-
add_compile_options(-fsanitize=undefined)
226-
add_link_options(-fsanitize=undefined)
227-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
228-
endif()
229-
endif()
230200
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
231201
if(NOT CMAKE_CROSSCOMPILING)
232202
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "ppc64le")
@@ -251,24 +221,8 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
251221
elseif (YGGDRASIL_RAPIDJSON_BUILD_CXX20 AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10.0")
252222
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20")
253223
endif()
254-
if (YGGDRASIL_RAPIDJSON_BUILD_ASAN)
255-
add_compile_options(-fsanitize=address)
256-
add_link_options(-fsanitize=address)
257-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
258-
endif()
259-
if (YGGDRASIL_RAPIDJSON_BUILD_UBSAN)
260-
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
261-
add_compile_options(-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error)
262-
add_link_options(-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error)
263-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error")
264-
else()
265-
add_compile_options(-fsanitize=undefined)
266-
add_link_options(-fsanitize=undefined)
267-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
268-
endif()
269-
endif()
270224
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
271-
list(APPEND INTERFACE_COMPILATION_OPTIONS
225+
list(APPEND INTERFACE_PUBLIC_COMPILE_FLAGS
272226
-D_CRT_SECURE_NO_WARNINGS=1 -DNOMINMAX)
273227
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /bigobj /Zm10")
274228
# CMake >= 3.10 should handle the above CMAKE_CXX_STANDARD fine, otherwise use /std:c++XX with MSVC >= 19.10
@@ -307,6 +261,14 @@ SET(CMAKE_INSTALL_DIR "${_CMAKE_INSTALL_DIR}" CACHE PATH "The directory cmake fi
307261
# Interface for export
308262
# ===============================
309263

264+
# Version header
265+
generate_version_header(
266+
${PROJECT_NAME_UPPER}
267+
${PROJECT_VERSION}
268+
${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME_LOWER}/${PROJECT_NAME_LOWER}_version.h.in
269+
${CMAKE_CURRENT_SOURCE_DIR}/include/${PROJECT_NAME_LOWER}/${PROJECT_NAME_LOWER}_version.h
270+
)
271+
310272
add_library(${PROJECT_NAME} INTERFACE)
311273

312274
if (YGGDRASIL_RAPIDJSON_NEST_HEADERS)
@@ -323,31 +285,25 @@ else()
323285
)
324286
endif()
325287
target_compile_options(
326-
${PROJECT_NAME} INTERFACE ${INTERFACE_COMPILATION_OPTIONS}
288+
${PROJECT_NAME} INTERFACE ${INTERFACE_PUBLIC_COMPILE_FLAGS}
289+
)
290+
target_link_options(
291+
${PROJECT_NAME} INTERFACE ${INTERFACE_PUBLIC_LINK_FLAGS}
327292
)
328293
target_include_directories(
329-
${PROJECT_NAME} INTERFACE ${INTERFACE_INCLUDE_DIRECTORIES}
294+
${PROJECT_NAME} INTERFACE ${INTERFACE_INCLUDE_DIRS}
330295
)
331296
target_link_libraries(
332297
${PROJECT_NAME} INTERFACE ${INTERFACE_LIBRARIES}
333298
)
334299

335300
# Set after interface library created
336301

337-
# include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
338-
include_directories(
339-
# ${INTERFACE_INCLUDE_DIRECTORIES}
340-
${LOCAL_INCLUDE_DIRECTORIES}
341-
)
342-
add_definitions(
343-
# ${INTERFACE_COMPILATION_OPTIONS}
344-
${LOCAL_COMPILATION_OPTIONS}
345-
)
346-
link_libraries(
347-
# ${INTERFACE_LIBRARIES}
348-
${PROJECT_NAME}
349-
${LOCAL_LIBRARIES}
350-
)
302+
list(APPEND EXTRA_CXX_FLAGS ${LOCAL_PUBLIC_COMPILE_FLAGS})
303+
add_compile_options(${LOCAL_PUBLIC_COMPILE_FLAGS})
304+
add_link_options(${LOCAL_PUBLIC_LINK_FLAGS})
305+
include_directories(${LOCAL_INCLUDE_DIRS})
306+
link_libraries(${PROJECT_NAME} ${LOCAL_LIBRARIES})
351307

352308
if(YGGDRASIL_RAPIDJSON_BUILD_DOC)
353309
add_subdirectory(doc)

YggdrasilRapidJSONConfig.cmake.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ if(NOT (YGGDRASIL_DISABLE_PYTHON_C_API OR DISABLE_YGGDRASIL_RAPIDJSON))
3535
find_dependency(Python3 COMPONENTS Interpreter Development NumPy)
3636
endif()
3737

38-
yggdrasil_options_config(INTERFACE)
38+
yggdrasil_rapidjson_options_config(INTERFACE)
3939

4040
if(INTERFACE_LIBRARIES)
4141
target_link_libraries(

0 commit comments

Comments
 (0)