Skip to content

Commit 16b7aca

Browse files
klemens-morgensternvinniefalco
authored andcommitted
mrdox cmake script for self-test.
close #41
1 parent 4028540 commit 16b7aca

File tree

3 files changed

+83
-2
lines changed

3 files changed

+83
-2
lines changed

CMakeLists.txt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,26 @@ if (MRDOX_BUILD_TESTS)
189189
target_link_libraries(mrdox-test PRIVATE mrdox-api ${llvm_libs})
190190
target_include_directories(mrdox-test PRIVATE ${PROJECT_SOURCE_DIR}/source/tests)
191191
add_test(NAME mrdox-test COMMAND mrdox-test
192-
"${PROJECT_SOURCE_DIR}/tests/old-tests"
193-
)
192+
"${PROJECT_SOURCE_DIR}/tests/old-tests"
193+
)
194194
source_group(TREE ${PROJECT_SOURCE_DIR} PREFIX "" FILES CMakeLists.txt)
195195
source_group(TREE ${PROJECT_SOURCE_DIR}/source/tests PREFIX "source" FILES ${TEST_SOURCES})
196+
197+
if (CMAKE_EXPORT_COMPILE_COMMANDS)
198+
# test run
199+
include(mrdox.cmake)
200+
set(TESTFILES
201+
testfiles/decl-only/attributes_1.cpp
202+
testfiles/decl-only/canonical_1.cpp
203+
testfiles/decl-only/record_1.cpp
204+
testfiles/decl-only/record_2.cpp)
205+
206+
mrdox(FORMAT adoc CONFIG mrdox.yml SOURCES ${TESTFILES})
207+
mrdox(FORMAT xml CONFIG mrdox.yml SOURCES ${TESTFILES})
208+
209+
add_custom_target(reference_adoc DEPENDS reference.adoc)
210+
add_custom_target(reference_xml DEPENDS reference.xml)
211+
endif()
196212
endif()
197213

198214
#-------------------------------------------------

mrdox.cmake

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#
2+
# Licensed under the Apache License v2.0 with LLVM Exceptions.
3+
# See https://llvm.org/LICENSE.txt for license information.
4+
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5+
#
6+
# Copyright (c) 2023 Vinnie Falco ([email protected])
7+
#
8+
# Official repository: https://github.com/cppalliance/mrdox
9+
#
10+
11+
macro(_mrdox_prep_vars)
12+
if (NOT DEFINED MRDOX_EXECUTABLE)
13+
set(MRDOX_EXECUTABLE $<TARGET_FILE:mrdox>)
14+
set(MRDOX_EXECUTABLE_DEPENDENCY mrdox)
15+
endif()
16+
17+
if (NOT DEFINED MRDOX_COMPILE_COMMANDS)
18+
if (NOT CMAKE_EXPORT_COMPILE_COMMANDS)
19+
message(FATAL_ERROR "MrDox build script requires either CMAKE_EXPORT_COMPILE_COMMANDS=ON or MRDOX_COMPILE_COMMANDS to be set")
20+
else()
21+
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
22+
endif()
23+
set(MRDOX_COMPILE_COMMANDS ${CMAKE_BINARY_DIR}/compile_commands.json)
24+
endif()
25+
endmacro()
26+
27+
28+
function(mrdox)
29+
30+
cmake_parse_arguments(
31+
MRDOX_TARGET
32+
"" # options
33+
"OUTPUT;FORMAT;CONFIG" # one_value_keywords
34+
"SOURCES"
35+
${ARGN}
36+
)
37+
38+
_mrdox_prep_vars()
39+
40+
if (NOT MRDOX_TARGET_CONFIG)
41+
set(MRDOX_TARGET_CONFIG mrdox.yml)
42+
endif()
43+
44+
if (NOT MRDOX_TARGET_OUTPUT)
45+
set(MRDOX_TARGET_OUTPUT ${CMAKE_CURRENT_SOURCE_DIR})
46+
endif()
47+
48+
if (NOT MRDOX_TARGET_FORMAT)
49+
set(MRDOX_TARGET_FORMAT xml)
50+
endif()
51+
52+
set(MRDOX_OUTPUT_FILE ${MRDOX_TARGET_OUTPUT}/reference.${MRDOX_TARGET_FORMAT})
53+
add_custom_command(
54+
OUTPUT ${MRDOX_OUTPUT_FILE}
55+
COMMAND
56+
mrdox --config=${CMAKE_CURRENT_SOURCE_DIR}/${MRDOX_TARGET_CONFIG}
57+
-p ${MRDOX_COMPILE_COMMANDS} ${ARGN}
58+
--format=${MRDOX_TARGET_FORMAT}
59+
--output=${MRDOX_TARGET_OUTPUT}
60+
MAIN_DEPENDENCY ${MRDOX_TARGET_CONFIG} # scanner!
61+
DEPENDS ${MRDOX_EXECUTABLE_DEPENDENCY} ${MRDOX_TARGET_SOURCES}
62+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
63+
)
64+
endfunction()

tests/mrdox.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
verbose: true

0 commit comments

Comments
 (0)