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 ()
0 commit comments