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()