• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# run-and-compare.cmake -- Runs a command and compares its output to an expected value
2
3# Copyright (C) 2021 Nathan Moinvaziri
4# Licensed under the Zlib license, see LICENSE.md for details
5
6# Required Variables
7#   COMMAND             - Command to run
8#   OUTPUT              - Standard output
9#   COMPARE             - String to compare output against
10
11# Optional Variables
12#   INPUT               - Standard intput
13#   IGNORE_LINE_ENDINGS - Ignore line endings when comparing output
14
15if(NOT DEFINED OUTPUT OR NOT DEFINED COMPARE OR NOT DEFINED COMMAND)
16    message(FATAL_ERROR "Run and compare arguments missing")
17endif()
18
19if(INPUT)
20    # Run command with stdin input and redirect stdout to output
21    execute_process(COMMAND ${CMAKE_COMMAND}
22        "-DCOMMAND=${COMMAND}"
23        -DINPUT=${INPUT}
24        -DOUTPUT=${OUTPUT}
25        "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
26        -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
27        RESULT_VARIABLE CMD_RESULT)
28else()
29    # Run command and redirect stdout to output
30    execute_process(COMMAND ${CMAKE_COMMAND}
31        "-DCOMMAND=${COMMAND}"
32        -DOUTPUT=${OUTPUT}
33        "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
34        -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
35        RESULT_VARIABLE CMD_RESULT)
36endif()
37
38if(CMD_RESULT)
39    message(FATAL_ERROR "Run before compare failed: ${CMD_RESULT}")
40endif()
41
42# Use configure_file to normalize line-endings
43if(IGNORE_LINE_ENDINGS)
44    configure_file(${COMPARE} ${COMPARE}.cmp NEWLINE_STYLE LF)
45    set(COMPARE ${COMPARE}.cmp)
46    configure_file(${OUTPUT} ${OUTPUT}.cmp NEWLINE_STYLE LF)
47    set(OUTPUT ${OUTPUT}.cmp)
48endif()
49
50# Compare that output is equal to specified file
51execute_process(COMMAND ${CMAKE_COMMAND}
52    -E compare_files ${COMPARE} ${OUTPUT}
53    RESULT_VARIABLE CMD_RESULT)
54
55# Delete temporary files used to normalize line-endings
56if(IGNORE_LINE_ENDINGS)
57    file(REMOVE ${COMPARE} ${OUTPUT})
58endif()
59
60if(CMD_RESULT)
61    message(FATAL_ERROR "Run compare failed: ${CMD_RESULT}")
62endif()