53 lines
1.5 KiB
CMake
53 lines
1.5 KiB
CMake
|
|
# 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()
|