| cmake_policy(SET CMP0140 NEW) | |
| function(validate_json_schema schema_file input_files) | |
| if (NOT(Python_EXECUTABLE AND CMake_TEST_JSON_SCHEMA)) | |
| return() | |
| endif() | |
| cmake_parse_arguments(ARG_VS "" "EXPECTED_RESULT" "" ${ARGN}) | |
| if(NOT ARG_VS_EXPECTED_RESULT) | |
| set(ARG_VS_EXPECTED_RESULT 0) | |
| endif() | |
| set(_validate_py "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/validate_json_schema.py") | |
| cmake_path(SET _schema NORMALIZE "${schema_file}") | |
| set(_inputs) | |
| foreach(_input IN LISTS input_files) | |
| cmake_path(SET _input NORMALIZE "${_input}") | |
| list(APPEND _inputs "${_input}") | |
| endforeach() | |
| execute_process( | |
| COMMAND | |
| "${Python_EXECUTABLE}" "${_validate_py}" "${_schema}" | |
| "--input-files" ${_inputs} | |
| # Include "--verbose" here for local debugging as needed. | |
| RESULT_VARIABLE result | |
| ERROR_VARIABLE error | |
| ) | |
| if(NOT result MATCHES "${ARG_VS_EXPECTED_RESULT}") | |
| string(REPLACE "\n" "\n " error "${error}") | |
| string(APPEND RunCMake_TEST_FAILED "Failed to validate version JSON schema for file: ${json_file}\nOutput:\n${error}\nResult: ${result}\nExpected: ${ARG_VS_EXPECTED_RESULT}") | |
| endif() | |
| return(PROPAGATE RunCMake_TEST_FAILED) | |
| endfunction() |