Skip to content

Commit eea9026

Browse files
committed
refactor: config options target
1 parent 9060f86 commit eea9026

20 files changed

+2118
-1194
lines changed

CMakeLists.txt

Lines changed: 77 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ if (NOT DUKTAPE_FOUND)
110110
find_package(duktape REQUIRED CONFIG)
111111
endif()
112112

113+
# python
114+
find_program(PYTHON_EXECUTABLE python3 python)
115+
if (NOT PYTHON_EXECUTABLE)
116+
message(FATAL_ERROR "Python is needed to configure mrdocs")
117+
endif()
118+
113119
unset(CMAKE_FOLDER)
114120

115121
#-------------------------------------------------
@@ -136,14 +142,48 @@ configure_file(
136142
@ONLY
137143
)
138144

145+
# Config files for mrdocs-core
146+
add_custom_command(
147+
COMMAND
148+
${PYTHON_EXECUTABLE}
149+
${CMAKE_CURRENT_SOURCE_DIR}/util/generate-config-info.py
150+
src/lib/Lib/ConfigOptions.json
151+
${CMAKE_CURRENT_BINARY_DIR}
152+
VERBATIM
153+
DEPENDS
154+
${CMAKE_CURRENT_SOURCE_DIR}/util/generate-config-info.py
155+
src/lib/Lib/ConfigOptions.json
156+
OUTPUT
157+
${CMAKE_CURRENT_BINARY_DIR}/include/mrdocs/PublicSettings.hpp
158+
${CMAKE_CURRENT_BINARY_DIR}/src/lib/Lib/PublicSettings.cpp
159+
${CMAKE_CURRENT_BINARY_DIR}/src/tool/PublicToolArgs.hpp
160+
${CMAKE_CURRENT_BINARY_DIR}/src/tool/PublicToolArgs.cpp
161+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
162+
COMMENT "Generating Config Source Files"
163+
)
164+
165+
166+
# Main library
139167
file(
140168
GLOB_RECURSE LIB_SOURCES CONFIGURE_DEPENDS
141-
src/lib/*.cpp src/lib/*.hpp src/lib/*.ipp
169+
# Public
170+
include/*.hpp
171+
include/*.inc
172+
include/*.ipp
173+
# Private
174+
src/lib/*.cpp
175+
src/lib/*.hpp
176+
src/lib/*.ipp
142177
src/lib/*.natvis
143-
include/*.hpp include/*.inc include/*.ipp
144-
${CMAKE_CURRENT_BINARY_DIR}/src/lib/*.hpp
178+
# Natvis
145179
include/*.natvis
146-
SourceFileNames.cpp)
180+
SourceFileNames.cpp
181+
)
182+
list(APPEND LIB_SOURCES
183+
${CMAKE_CURRENT_BINARY_DIR}/include/mrdocs/Version.hpp
184+
${CMAKE_CURRENT_BINARY_DIR}/include/mrdocs/PublicSettings.hpp
185+
${CMAKE_CURRENT_BINARY_DIR}/src/lib/Lib/PublicSettings.cpp
186+
)
147187
add_library(mrdocs-core ${LIB_SOURCES})
148188
target_compile_features(mrdocs-core PUBLIC cxx_std_20)
149189
target_include_directories(mrdocs-core
@@ -153,7 +193,7 @@ target_include_directories(mrdocs-core
153193
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
154194
PRIVATE
155195
"${PROJECT_SOURCE_DIR}/src"
156-
"${PROJECT_SOURCE_DIR}/include")
196+
"${PROJECT_BINARY_DIR}/src")
157197
target_compile_definitions(
158198
mrdocs-core
159199
PUBLIC
@@ -162,7 +202,7 @@ target_compile_definitions(
162202
-DMRDOCS_TOOL
163203
)
164204

165-
# Deps
205+
# Dependencies
166206
target_include_directories(mrdocs-core SYSTEM PUBLIC ${LLVM_INCLUDE_DIRS})
167207
target_include_directories(mrdocs-core SYSTEM PUBLIC ${CLANG_INCLUDE_DIRS})
168208
target_link_libraries(mrdocs-core PUBLIC fmt::fmt)
@@ -174,7 +214,7 @@ if (CLANG_SIMPLE_LIBS)
174214
target_link_libraries(mrdocs-core PUBLIC LLVM clang clang-cpp)
175215
else()
176216
target_link_libraries(mrdocs-core
177-
PUBLIC
217+
PUBLIC
178218
clangAST
179219
clangBasic
180220
clangFrontend
@@ -232,7 +272,13 @@ endif ()
232272
#
233273
#-------------------------------------------------
234274

235-
file(GLOB_RECURSE TOOL_SOURCES CONFIGURE_DEPENDS src/tool/*.cpp src/tool/*.hpp)
275+
file(GLOB_RECURSE TOOL_SOURCES CONFIGURE_DEPENDS
276+
src/tool/*.cpp
277+
src/tool/*.hpp)
278+
list(APPEND TOOL_SOURCES
279+
${CMAKE_CURRENT_BINARY_DIR}/src/tool/PublicToolArgs.hpp
280+
${CMAKE_CURRENT_BINARY_DIR}/src/tool/PublicToolArgs.cpp)
281+
236282
add_executable(mrdocs ${TOOL_SOURCES})
237283
target_compile_definitions(mrdocs PRIVATE -DMRDOCS_TOOL)
238284

@@ -243,6 +289,7 @@ target_include_directories(mrdocs
243289
PRIVATE
244290
"${PROJECT_SOURCE_DIR}/include"
245291
"${PROJECT_SOURCE_DIR}/src"
292+
"${PROJECT_BINARY_DIR}/src"
246293
)
247294

248295
target_compile_definitions(mrdocs PRIVATE -DMRDOCS_TOOL)
@@ -284,11 +331,22 @@ if (MRDOCS_BUILD_TESTS)
284331
endif ()
285332
target_compile_definitions(mrdocs-test PRIVATE -DMRDOCS_TEST_FILES_DIR="${CMAKE_CURRENT_SOURCE_DIR}/test-files")
286333
add_test(NAME mrdocs-unit-tests COMMAND mrdocs-test --unit=true)
287-
add_test(NAME mrdocs-golden-tests COMMAND mrdocs-test --unit=false --action=test "${PROJECT_SOURCE_DIR}/test-files/golden-tests" --addons="${CMAKE_SOURCE_DIR}/share/mrdocs/addons")
334+
add_test(NAME mrdocs-golden-tests
335+
COMMAND
336+
mrdocs-test
337+
--unit=false
338+
--action=test
339+
"${PROJECT_SOURCE_DIR}/test-files/golden-tests"
340+
--addons="${CMAKE_SOURCE_DIR}/share/mrdocs/addons")
288341
foreach (action IN ITEMS create update)
289342
add_custom_target(
290343
mrdocs-${action}-test-fixtures
291-
COMMAND mrdocs-test --unit=false --action=${action} "${PROJECT_SOURCE_DIR}/test-files/golden-tests" --addons="${CMAKE_SOURCE_DIR}/share/mrdocs/addons"
344+
COMMAND
345+
mrdocs-test
346+
--unit=false
347+
--action=${action}
348+
"${PROJECT_SOURCE_DIR}/test-files/golden-tests"
349+
--addons="${CMAKE_SOURCE_DIR}/share/mrdocs/addons"
292350
DEPENDS mrdocs-test
293351
)
294352
endforeach ()
@@ -421,23 +479,15 @@ if (MRDOCS_INSTALL)
421479
#-------------------------------------------------
422480
# include
423481
#-------------------------------------------------
424-
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/mrdocs
425-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
426-
COMPONENT development
427-
FILES_MATCHING
428-
PATTERN "*.[hi]pp")
429-
430-
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/mrdocs
431-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
432-
COMPONENT development
433-
FILES_MATCHING
434-
PATTERN "*.inc")
435-
436-
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/mrdocs
437-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
438-
COMPONENT development
439-
FILES_MATCHING
440-
PATTERN "*.[hi]pp")
482+
foreach(MRDOCS_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include/mrdocs ${CMAKE_CURRENT_BINARY_DIR}/include/mrdocs)
483+
foreach(MRDOCS_FILE_PATTERN "*.hpp" "*.ipp" "*.inc")
484+
install(DIRECTORY ${MRDOCS_INCLUDE_DIR}
485+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
486+
COMPONENT development
487+
FILES_MATCHING
488+
PATTERN ${MRDOCS_FILE_PATTERN})
489+
endforeach()
490+
endforeach()
441491

442492
#-------------------------------------------------
443493
# share

0 commit comments

Comments
 (0)