Spaces:
Runtime error
Runtime error
# Inputs: | |
# | |
# Variable | Type | Doc | |
# ---------------------|----------|-------------------------------------- | |
# EXAMPLE_EXECUTABLE | FilePath | Path to example executable | |
# FILECHECK_ENABLED | Boolean | Run FileCheck comparison test | |
# FILECHECK_EXECUTABLE | FilePath | Path to the LLVM FileCheck utility | |
# REFERENCE_FILE | FilePath | Path to the FileCheck reference file | |
if (FILECHECK_ENABLED) | |
if (NOT EXISTS "${REFERENCE_FILE}") | |
message(FATAL_ERROR | |
"FileCheck requested for '${EXAMPLE_EXECUTABLE}', but reference file " | |
"does not exist at '${REFERENCE_FILE}`." | |
) | |
endif() | |
# If the reference file is empty, validate that the example doesn't | |
# produce any output. | |
file(SIZE "${REFERENCE_FILE}" file_size) | |
message("${REFERENCE_FILE}: ${file_size} bytes") | |
if (file_size EQUAL 0) | |
set(check_empty_output TRUE) | |
set(filecheck_command) | |
else() | |
set(check_empty_output FALSE) | |
set(filecheck_command COMMAND "${FILECHECK_EXECUTABLE}" "${REFERENCE_FILE}") | |
endif() | |
endif() | |
execute_process( | |
COMMAND "${EXAMPLE_EXECUTABLE}" | |
${filecheck_command} | |
RESULT_VARIABLE exit_code | |
OUTPUT_VARIABLE stdout | |
ERROR_VARIABLE stderr | |
) | |
if (NOT 0 EQUAL exit_code) | |
message(FATAL_ERROR "${EXAMPLE_EXECUTABLE} failed (${exit_code}):\n${stderr}") | |
endif() | |
if (check_empty_output) | |
string(LENGTH "${stdout}" stdout_size) | |
if (NOT stdout_size EQUAL 0) | |
message(FATAL_ERROR "${EXAMPLE_EXECUTABLE}: output received, but not expected:\n${stdout}") | |
endif() | |
endif() | |