File size: 1,524 Bytes
28958dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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()