| if(NOT EXISTS "${RunCMake_TEST_BINARY_DIR}/compile_commands.json") |
| set(RunCMake_TEST_FAILED "compile_commands.json not generated") |
| return() |
| endif() |
| |
| file(READ "${RunCMake_TEST_BINARY_DIR}/compile_commands.json" compile_commands) |
| |
| macro(check_error) |
| if(error) |
| message(SEND_ERROR "Unexpected error \"${error}\"\nFor: ${compile_commands}") |
| endif() |
| endmacro() |
| |
| string(JSON num_commands ERROR_VARIABLE error LENGTH "${compile_commands}") |
| check_error() |
| |
| # Only one of the targets has the EXPORT_COMPILE_COMMANDS property enabled. |
| if(NOT num_commands STREQUAL 1) |
| message(SEND_ERROR "Expected 1 compile command, got ${num_commands} for ${compile_commands}") |
| endif() |
| |
| # Get the compile command generated. |
| string(JSON result ERROR_VARIABLE error GET "${compile_commands}" 0) |
| check_error() |
| string(JSON result ERROR_VARIABLE error GET "${result}" file) |
| check_error() |
| |
| # And ensure the correct target is in that compile command. |
| cmake_path(COMPARE "${result}" EQUAL "${RunCMake_TEST_SOURCE_DIR}/expected_file.c" good) |
| if(NOT good) |
| message(SEND_ERROR "Expected \"${result}\" in \"${RunCMake_TEST_SOURCE_DIR}/expected_file.c\"") |
| endif() |