|
8 | 8 | endif(CSV_CXX_STANDARD) |
9 | 9 |
|
10 | 10 | option(BUILD_PYTHON "Build Python Binding" OFF) |
| 11 | +option(CSV_BUILD_SINGLE_INCLUDE_TEST "Build single-header smoke test (requires Python)" OFF) |
11 | 12 | option(ENABLE_CODE_COVERAGE "Enable code coverage instrumentation" OFF) |
12 | 13 |
|
13 | 14 | message("Building CSV library using C++${CMAKE_CXX_STANDARD}") |
@@ -92,15 +93,44 @@ if (CSV_DEVELOPER) |
92 | 93 | find_package(Python3 COMPONENTS Interpreter) |
93 | 94 | endif() |
94 | 95 | if(Python3_Interpreter_FOUND OR PYTHONINTERP_FOUND) |
95 | | - add_custom_target(generate_single_header |
96 | | - COMMAND ${Python3_EXECUTABLE} single_header.py > single_include/csv.hpp |
97 | | - COMMAND ${Python3_EXECUTABLE} single_header.py > single_include_test/csv.hpp |
| 96 | + if(Python3_Interpreter_FOUND) |
| 97 | + set(CSV_PYTHON_EXECUTABLE ${Python3_EXECUTABLE}) |
| 98 | + else() |
| 99 | + set(CSV_PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) |
| 100 | + endif() |
| 101 | + |
| 102 | + set(CSV_SINGLE_INCLUDE_GENERATED_DIR ${CSV_BUILD_DIR}/single_include_generated) |
| 103 | + set(CSV_SINGLE_INCLUDE_GENERATED_HEADER ${CSV_SINGLE_INCLUDE_GENERATED_DIR}/csv.hpp) |
| 104 | + file(GLOB_RECURSE CSV_SINGLE_HEADER_INPUTS CONFIGURE_DEPENDS |
| 105 | + ${CSV_INCLUDE_DIR}/*.hpp |
| 106 | + ${CSV_INCLUDE_DIR}/*.h |
| 107 | + ${CSV_INCLUDE_DIR}/*.cpp |
| 108 | + ) |
| 109 | + |
| 110 | + add_custom_command( |
| 111 | + OUTPUT ${CSV_SINGLE_INCLUDE_GENERATED_HEADER} |
| 112 | + COMMAND ${CMAKE_COMMAND} -E make_directory ${CSV_SINGLE_INCLUDE_GENERATED_DIR} |
| 113 | + COMMAND ${CSV_PYTHON_EXECUTABLE} single_header.py ${CSV_SINGLE_INCLUDE_GENERATED_HEADER} |
98 | 114 | WORKING_DIRECTORY ${CSV_ROOT_DIR} |
| 115 | + DEPENDS ${CSV_ROOT_DIR}/single_header.py ${CSV_SINGLE_HEADER_INPUTS} |
| 116 | + COMMENT "Generating single-header csv.hpp" |
99 | 117 | ) |
100 | | - # Single header compilation test |
101 | | - add_subdirectory(single_include_test) |
| 118 | + |
| 119 | + add_custom_target(generate_single_header |
| 120 | + DEPENDS ${CSV_SINGLE_INCLUDE_GENERATED_HEADER} |
| 121 | + ) |
| 122 | + |
| 123 | + # Single header compilation test (optional, mainly for validation) |
| 124 | + if(CSV_BUILD_SINGLE_INCLUDE_TEST) |
| 125 | + # Keep this target out of the default "all" build so CI can run it |
| 126 | + # explicitly in its dedicated smoke-test step. |
| 127 | + add_subdirectory(single_include_test EXCLUDE_FROM_ALL) |
| 128 | + endif() |
102 | 129 | else() |
103 | 130 | message(WARNING "Python3 not found, skipping target 'generate_single_header'.") |
| 131 | + if(CSV_BUILD_SINGLE_INCLUDE_TEST) |
| 132 | + message(FATAL_ERROR "CSV_BUILD_SINGLE_INCLUDE_TEST=ON requires a Python 3 interpreter for single-header generation.") |
| 133 | + endif() |
104 | 134 | endif() |
105 | 135 |
|
106 | 136 | # Documentation |
|
0 commit comments