Skip to content

Commit 009c5c4

Browse files
committed
build: support multiple directories for libc++ includes
This is helpful if libc++ includes are installed following the debian layout, with platform specific includes in a separate directory.
1 parent 629f184 commit 009c5c4

File tree

1 file changed

+30
-28
lines changed

1 file changed

+30
-28
lines changed

CMakeLists.txt

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,15 @@ endif()
8989
find_package(LLVM REQUIRED CONFIG)
9090
find_package(Clang REQUIRED CONFIG)
9191

92-
set(LIBCXX_DIR "${LLVM_INCLUDE_DIR}/c++/v1" CACHE PATH
93-
"Path to libc++ include directory")
94-
message(STATUS "LIBCXX_DIR: ${LIBCXX_DIR}")
95-
if (NOT EXISTS "${LIBCXX_DIR}")
96-
message(FATAL_ERROR
97-
"LIBCXX_DIR (${LIBCXX_DIR}) does not exist.\n"
98-
"Please provide a LLVM with libc++ enabled\n")
99-
endif()
92+
set(LIBCXX_DIRS "${LLVM_INCLUDE_DIR}/c++/v1" CACHE STRING
93+
"Paths to libc++ include directories")
94+
message(STATUS "LIBCXX_DIRS: ${LIBCXX_DIRS}")
95+
96+
foreach(I IN LISTS LIBCXX_DIRS)
97+
if (NOT EXISTS "${I}")
98+
message(SEND_ERROR "LIBCXX_DIRS (${I}) does not exist.\n")
99+
endif()
100+
endforeach()
100101

101102
set(STDLIB_INCLUDE_DIR "${LLVM_BINARY_DIR}/lib/clang/${Clang_VERSION_MAJOR}/include"
102103
CACHE PATH "Path to the clang headers include directory")
@@ -363,35 +364,34 @@ if (MRDOCS_BUILD_TESTS)
363364
endif ()
364365
target_compile_definitions(mrdocs-test PRIVATE -DMRDOCS_TEST_FILES_DIR="${CMAKE_CURRENT_SOURCE_DIR}/test-files")
365366
add_test(NAME mrdocs-unit-tests COMMAND mrdocs-test --unit=true)
367+
368+
set(COMMON_TEST_COMMAND
369+
mrdocs-test
370+
--unit=false
371+
"${PROJECT_SOURCE_DIR}/test-files/golden-tests"
372+
"--addons=${CMAKE_SOURCE_DIR}/share/mrdocs/addons")
373+
foreach(I IN LISTS LIBCXX_DIRS)
374+
list(APPEND COMMON_TEST_COMMAND "--stdlib-includes=${I}")
375+
endforeach()
376+
list(APPEND COMMON_TEST_COMMAND
377+
"--stdlib-includes=${STDLIB_INCLUDE_DIR}"
378+
"--libc-includes=${CMAKE_SOURCE_DIR}/share/mrdocs/headers/libc-stubs"
379+
--log-level=warn)
380+
366381
foreach (testgenerator IN ITEMS xml adoc html)
367382
add_test(NAME mrdocs-golden-tests-${testgenerator}
368383
COMMAND
369-
mrdocs-test
370-
--unit=false
384+
${COMMON_TEST_COMMAND}
371385
--action=test
372-
"${PROJECT_SOURCE_DIR}/test-files/golden-tests"
373-
"--addons=${CMAKE_SOURCE_DIR}/share/mrdocs/addons"
374386
--generator=${testgenerator}
375-
"--stdlib-includes=${LIBCXX_DIR}"
376-
"--stdlib-includes=${STDLIB_INCLUDE_DIR}"
377-
"--libc-includes=${CMAKE_SOURCE_DIR}/share/mrdocs/headers/libc-stubs"
378-
--log-level=warn
379387
)
380388
foreach (action IN ITEMS test create update)
381389
add_custom_target(
382390
mrdocs-${action}-test-fixtures-${testgenerator}
383391
COMMAND
384-
mrdocs-test
385-
--unit=false
392+
${COMMON_TEST_COMMAND}
386393
--action=${action}
387-
"${PROJECT_SOURCE_DIR}/test-files/golden-tests"
388-
"--addons=${CMAKE_SOURCE_DIR}/share/mrdocs/addons"
389394
--generator=${testgenerator}
390-
"--stdlib-includes=${LIBCXX_DIR}"
391-
"--stdlib-includes=${STDLIB_INCLUDE_DIR}"
392-
"--libc-includes=${CMAKE_SOURCE_DIR}/share/mrdocs/headers/libc-stubs"
393-
--log-level=warn
394-
DEPENDS mrdocs-test
395395
)
396396
endforeach ()
397397
endforeach()
@@ -537,9 +537,11 @@ if (MRDOCS_INSTALL)
537537
#-------------------------------------------------
538538
# share
539539
#-------------------------------------------------
540-
install(DIRECTORY ${LIBCXX_DIR}/
541-
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mrdocs/headers/libcxx
542-
FILES_MATCHING PATTERN "*")
540+
foreach(I IN LISTS LIBCXX_DIRS)
541+
install(DIRECTORY ${I}/
542+
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mrdocs/headers/libcxx
543+
FILES_MATCHING PATTERN "*")
544+
endforeach()
543545
install(DIRECTORY ${STDLIB_INCLUDE_DIR}/
544546
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mrdocs/headers/clang
545547
FILES_MATCHING PATTERN "*")

0 commit comments

Comments
 (0)