3 @brief Output a
boolean to JSON
5 Appends a condition as a JSON
boolean with the given dictionary
key name to the
18 string(APPEND
"${output}" "\"${name}\": ${val}, ")
24 @brief Output a
string list to JSON
26 Appends a variable as a JSON list of strings with the given dictionary
key name 27 to the given
string variable.
35 foreach (
value IN LISTS
"${var}")
36 string(APPEND list
"\"${value}\", ")
39 string(REPLACE ", ]" "]" list "${list}
") 40 string(APPEND "${output}
" "\
"${name}\": ${list}, ")
46 @ingroup module-support
47 @brief JSON metadata representation of modules
49 Information about the modules built and/or available may be dumped to a JSON
58 * `MODULES`: (Required) The modules to output information
for.
59 * `OUTPUT`: (Required) A JSON file describing the modules built will
60 be output to
this path. Relative paths are rooted to `CMAKE_BINARY_DIR`.
69 "library_name":
"...",
71 "implementable": <
bool>,
72 "third_party": <
bool>,
73 "wrap_exclude": <
bool>,
104 cmake_parse_arguments(_vtk_json
110 if (_vtk_json_UNPARSED_ARGUMENTS)
112 "Unparsed arguments for vtk_module_json: " 113 "${_vtk_json_UNPARSED_ARGUMENTS}")
116 if (NOT DEFINED _vtk_json_OUTPUT)
118 "The `OUTPUT` argument is required.")
121 if (NOT _vtk_json_MODULES)
122 message(FATAL_ERROR "No modules given to output.")
125 if (NOT IS_ABSOLUTE "${_vtk_json_OUTPUT}
") 126 set(_vtk_json_OUTPUT "${CMAKE_BINARY_DIR}/${_vtk_json_OUTPUT}
") 131 set(_vtk_json_contents "{
") 132 string(APPEND _vtk_json_contents "\
"modules\": {")
133 foreach (_vtk_json_module IN LISTS _vtk_json_MODULES)
134 get_property(_vtk_json_description GLOBAL
135 PROPERTY
"_vtk_module_${_vtk_json_module}_description")
136 get_property(_vtk_json_implementable GLOBAL
137 PROPERTY
"_vtk_module_${_vtk_json_module}_implementable")
138 get_property(_vtk_json_third_party GLOBAL
139 PROPERTY
"_vtk_module_${_vtk_json_module}_third_party")
140 get_property(_vtk_json_wrap_exclude GLOBAL
141 PROPERTY
"_vtk_module_${_vtk_json_module}_wrap_exclude")
142 get_property(_vtk_json_kit GLOBAL
143 PROPERTY
"_vtk_module_${_vtk_json_module}_kit")
144 get_property(_vtk_json_depends GLOBAL
145 PROPERTY
"_vtk_module_${_vtk_json_module}_depends")
146 get_property(_vtk_json_private_depends GLOBAL
147 PROPERTY
"_vtk_module_${_vtk_json_module}_private_depends")
148 get_property(_vtk_json_optional_depends GLOBAL
149 PROPERTY
"_vtk_module_${_vtk_json_module}_optional_depends")
150 get_property(_vtk_json_implements GLOBAL
151 PROPERTY
"_vtk_module_${_vtk_json_module}_implements")
152 get_property(_vtk_json_library_name GLOBAL
153 PROPERTY
"_vtk_module_${_vtk_json_module}_library_name")
154 get_property(_vtk_json_module_file GLOBAL
155 PROPERTY
"_vtk_module_${_vtk_json_module}_file")
157 set(_vtk_json_kit_name
"null")
159 list(APPEND _vtk_json_kits
161 set(_vtk_json_kit_name
"\"${_vtk_json_kit}\"")
163 set(_vtk_json_headers
"")
164 if (TARGET
"${_vtk_json_module}")
167 VARIABLE _vtk_json_headers)
168 get_filename_component(_vtk_json_module_dir
"${_vtk_json_module_file}" DIRECTORY)
169 file(RELATIVE_PATH _vtk_json_module_subdir
"${CMAKE_SOURCE_DIR}" "${_vtk_json_module_dir}")
170 string(REPLACE
"${CMAKE_SOURCE_DIR}/${_vtk_json_module_subdir}/" "" _vtk_json_headers
"${_vtk_json_headers}")
171 string(REPLACE
"${CMAKE_BINARY_DIR}/${_vtk_json_module_subdir}/" "" _vtk_json_headers
"${_vtk_json_headers}")
174 string(APPEND _vtk_json_contents "\"${_vtk_json_module}\
": {")
175 string(APPEND _vtk_json_contents
"\"library_name\": \"${_vtk_json_library_name}\", ")
176 string(APPEND _vtk_json_contents
"\"description\": \"${_vtk_json_description}\", ")
177 _vtk_json_bool(_vtk_json_contents
"enabled" "TARGET;${_vtk_json_module}")
178 _vtk_json_bool(_vtk_json_contents
"implementable" _vtk_json_implementable)
179 _vtk_json_bool(_vtk_json_contents
"third_party" _vtk_json_third_party)
180 _vtk_json_bool(_vtk_json_contents
"wrap_exclude" _vtk_json_wrap_exclude)
181 string(APPEND _vtk_json_contents
"\"kit\": ${_vtk_json_kit_name}, ")
187 string(APPEND _vtk_json_contents
"}, ")
189 string(APPEND _vtk_json_contents "}, ")
191 string(APPEND _vtk_json_contents "\"kits\": {
") 192 foreach (_vtk_json_kit IN LISTS _vtk_json_kits) 193 set(_vtk_json_library_name "null
") 194 if (TARGET "${_vtk_json_kit}
") 195 get_property(_vtk_json_library 196 TARGET "${_vtk_json_kit}
" 197 PROPERTY LIBRARY_OUTPUT_NAME) 198 set(_vtk_json_library_name "\
"${_vtk_json_library}\"")
201 string(APPEND _vtk_json_contents "\"${_vtk_json_kit}\
": {")
202 string(APPEND _vtk_json_contents
"\"library_name\": ${_vtk_json_library_name}, ")
203 _vtk_json_bool(_vtk_json_contents
"enabled" "TARGET;${_vtk_json_kit}")
204 string(APPEND _vtk_json_contents
"}, ")
206 string(APPEND _vtk_json_contents "}, ")
208 string(APPEND _vtk_json_contents "}")
209 string(REPLACE ", ]" "]" _vtk_json_contents "${_vtk_json_contents}
") 210 string(REPLACE ", }
" "}
" _vtk_json_contents "${_vtk_json_contents}
") 212 OUTPUT "${_vtk_json_OUTPUT}
" 213 CONTENT "${_vtk_json_contents}
") function _vtk_module_get_module_property(module)
Get a module property
macro _vtk_json_string_list(output, name, var)
Output a string list to JSON
macro _vtk_json_bool(output, name, cond)
Output a boolean to JSON
function vtk_module_json()
JSON metadata representation of modules