123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- #[==[
- @ingroup module-impl
- @brief Output a boolean to JSON
- Appends a condition as a JSON boolean with the given dictionary key name to the
- given string variable.
- ~~~
- _vtk_json_bool(<output> <name> <cond>)
- ~~~
- #]==]
- macro (_vtk_json_bool output name cond)
- if (${cond})
- set(val "true")
- else ()
- set(val "false")
- endif ()
- string(APPEND "${output}" "\"${name}\": ${val}, ")
- unset(val)
- endmacro ()
- #[==[
- @ingroup module-impl
- @brief Output a string list to JSON
- Appends a variable as a JSON list of strings with the given dictionary key name
- to the given string variable.
- ~~~
- _vtk_json_string_list(<output> <name> <cond>)
- ~~~
- #]==]
- macro (_vtk_json_string_list output name var)
- set(list "[")
- foreach (value IN LISTS "${var}")
- string(APPEND list "\"${value}\", ")
- endforeach ()
- string(APPEND list "]")
- string(REPLACE ", ]" "]" list "${list}")
- string(APPEND "${output}" "\"${name}\": ${list}, ")
- unset(value)
- unset(list)
- endmacro ()
- #[==[
- @ingroup module-support
- @brief JSON metadata representation of modules
- Information about the modules built and/or available may be dumped to a JSON
- file.
- ~~~
- vtk_module_json(
- MODULES <module>...
- OUTPUT <path>)
- ~~~
- * `MODULES`: (Required) The modules to output information for.
- * `OUTPUT`: (Required) A JSON file describing the modules built will
- be output to this path. Relative paths are rooted to `CMAKE_BINARY_DIR`.
- Example output:
- ~~~{.json}
- {
- "modules": [
- {
- "name": "...",
- "library_name": "...",
- "enabled": <bool>,
- "implementable": <bool>,
- "third_party": <bool>,
- "wrap_exclude": <bool>,
- "kit": "...",
- "depends": [
- "..."
- ],
- "optional_depends": [
- "..."
- ],
- "private_depends": [
- "..."
- ],
- "implements": [
- "..."
- ],
- "headers": [
- "..."
- ]
- }
- ],
- "kits": [
- {
- "name": "...",
- "enabled": <bool>,
- "modules": [
- ]
- }
- ]
- }
- ~~~
- #]==]
- function (vtk_module_json)
- cmake_parse_arguments(_vtk_json
- ""
- "OUTPUT"
- "MODULES"
- ${ARGN})
- if (_vtk_json_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR
- "Unparsed arguments for vtk_module_json: "
- "${_vtk_json_UNPARSED_ARGUMENTS}")
- endif ()
- if (NOT DEFINED _vtk_json_OUTPUT)
- message(FATAL_ERROR
- "The `OUTPUT` argument is required.")
- endif ()
- if (NOT _vtk_json_MODULES)
- message(FATAL_ERROR "No modules given to output.")
- endif ()
- if (NOT IS_ABSOLUTE "${_vtk_json_OUTPUT}")
- set(_vtk_json_OUTPUT "${CMAKE_BINARY_DIR}/${_vtk_json_OUTPUT}")
- endif ()
- set(_vtk_json_kits)
- set(_vtk_json_contents "{")
- string(APPEND _vtk_json_contents "\"modules\": {")
- foreach (_vtk_json_module IN LISTS _vtk_json_MODULES)
- get_property(_vtk_json_description GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_description")
- get_property(_vtk_json_implementable GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_implementable")
- get_property(_vtk_json_third_party GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_third_party")
- get_property(_vtk_json_wrap_exclude GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_wrap_exclude")
- get_property(_vtk_json_kit GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_kit")
- get_property(_vtk_json_depends GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_depends")
- get_property(_vtk_json_private_depends GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_private_depends")
- get_property(_vtk_json_optional_depends GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_optional_depends")
- get_property(_vtk_json_implements GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_implements")
- get_property(_vtk_json_library_name GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_library_name")
- get_property(_vtk_json_module_file GLOBAL
- PROPERTY "_vtk_module_${_vtk_json_module}_file")
- set(_vtk_json_kit_name "null")
- if (_vtk_json_kit)
- list(APPEND _vtk_json_kits
- "${_vtk_json_kit}")
- set(_vtk_json_kit_name "\"${_vtk_json_kit}\"")
- endif ()
- set(_vtk_json_headers "")
- if (TARGET "${_vtk_json_module}")
- _vtk_module_get_module_property("${_vtk_json_module}"
- PROPERTY "headers"
- VARIABLE _vtk_json_headers)
- get_filename_component(_vtk_json_module_dir "${_vtk_json_module_file}" DIRECTORY)
- file(RELATIVE_PATH _vtk_json_module_subdir "${CMAKE_SOURCE_DIR}" "${_vtk_json_module_dir}")
- string(REPLACE "${CMAKE_SOURCE_DIR}/${_vtk_json_module_subdir}/" "" _vtk_json_headers "${_vtk_json_headers}")
- string(REPLACE "${CMAKE_BINARY_DIR}/${_vtk_json_module_subdir}/" "" _vtk_json_headers "${_vtk_json_headers}")
- endif ()
- string(APPEND _vtk_json_contents "\"${_vtk_json_module}\": {")
- string(APPEND _vtk_json_contents "\"library_name\": \"${_vtk_json_library_name}\", ")
- string(APPEND _vtk_json_contents "\"description\": \"${_vtk_json_description}\", ")
- _vtk_json_bool(_vtk_json_contents "enabled" "TARGET;${_vtk_json_module}")
- _vtk_json_bool(_vtk_json_contents "implementable" _vtk_json_implementable)
- _vtk_json_bool(_vtk_json_contents "third_party" _vtk_json_third_party)
- _vtk_json_bool(_vtk_json_contents "wrap_exclude" _vtk_json_wrap_exclude)
- string(APPEND _vtk_json_contents "\"kit\": ${_vtk_json_kit_name}, ")
- _vtk_json_string_list(_vtk_json_contents "depends" _vtk_json_depends)
- _vtk_json_string_list(_vtk_json_contents "optional_depends" _vtk_json_optional_depends)
- _vtk_json_string_list(_vtk_json_contents "private_depends" _vtk_json_private_depends)
- _vtk_json_string_list(_vtk_json_contents "implements" _vtk_json_implements)
- _vtk_json_string_list(_vtk_json_contents "headers" _vtk_json_headers)
- string(APPEND _vtk_json_contents "}, ")
- endforeach ()
- string(APPEND _vtk_json_contents "}, ")
- string(APPEND _vtk_json_contents "\"kits\": {")
- foreach (_vtk_json_kit IN LISTS _vtk_json_kits)
- set(_vtk_json_library_name "null")
- if (TARGET "${_vtk_json_kit}")
- get_property(_vtk_json_library
- TARGET "${_vtk_json_kit}"
- PROPERTY LIBRARY_OUTPUT_NAME)
- set(_vtk_json_library_name "\"${_vtk_json_library}\"")
- endif ()
- string(APPEND _vtk_json_contents "\"${_vtk_json_kit}\": {")
- string(APPEND _vtk_json_contents "\"library_name\": ${_vtk_json_library_name}, ")
- _vtk_json_bool(_vtk_json_contents "enabled" "TARGET;${_vtk_json_kit}")
- string(APPEND _vtk_json_contents "}, ")
- endforeach ()
- string(APPEND _vtk_json_contents "}, ")
- string(APPEND _vtk_json_contents "}")
- string(REPLACE ", ]" "]" _vtk_json_contents "${_vtk_json_contents}")
- string(REPLACE ", }" "}" _vtk_json_contents "${_vtk_json_contents}")
- file(GENERATE
- OUTPUT "${_vtk_json_OUTPUT}"
- CONTENT "${_vtk_json_contents}")
- endfunction ()
|