| 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() |