# CMake tests for libtiff (common functionality) # # Copyright © 2015 Open Microscopy Environment / University of Dundee # Written by Roger Leigh # # Permission to use, copy, modify, distribute, and sell this software and # its documentation for any purpose is hereby granted without fee, provided # that (i) the above copyright notices and this permission notice appear in # all copies of the software and related documentation, and (ii) the names of # Sam Leffler and Silicon Graphics may not be used in any advertising or # publicity relating to the software without the specific, prior written # permission of Sam Leffler and Silicon Graphics. # # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. # # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE # OF THIS SOFTWARE. # Run a test command, and print out any observed output discrepancies macro(test_command command) file(MAKE_DIRECTORY "${OBSERVED_DIR}") if(STDIN) set(input INPUT_FILE "${STDIN}") endif() string(REGEX REPLACE ";" " " display_args "${ARGN}") message(STATUS "Running ${command} ${display_args}") set(ENV{XERCESC_NLS_HOME} "${NLS_HOME}") execute_process( COMMAND "${command}" ${ARGN} RESULT_VARIABLE TEST_STATUS ${input} OUTPUT_FILE "${OBSERVED_DIR}/${NAME}.log" ERROR_FILE "${OBSERVED_DIR}/${NAME}.log" WORKING_DIRECTORY "${WORKDIR}") if(TEST_STATUS AND NOT EXPECT_FAIL) message(FATAL_ERROR "Returned failed status ${TEST_STATUS}") endif() if(NOT TEST_STATUS AND EXPECT_FAIL) message(FATAL_ERROR "Unexpected success") endif() # Replace timings in output, and convert newlines for safe comparison file(READ "${OBSERVED_DIR}/${NAME}.log" output) string(REGEX REPLACE " *[0-9]+ *ms *" "{timing removed}" output "${output}") file(WRITE "${OBSERVED_DIR}/${NAME}-mod.log" "${output}") configure_file("${OBSERVED_DIR}/${NAME}-mod.log" "${OBSERVED_DIR}/${NAME}.log" @ONLY NEWLINE_STYLE UNIX) configure_file("${EXPECTED_DIR}/${NAME}.log" "${OBSERVED_DIR}/${NAME}-exp.log" @ONLY NEWLINE_STYLE UNIX) file(REMOVE "${OBSERVED_DIR}/${NAME}-mod.log") file(READ "${OBSERVED_DIR}/${NAME}.log" observed) file(READ "${OBSERVED_DIR}/${NAME}-exp.log" expected) # If the observed and expected logs differ, output a diff and fail if(NOT observed STREQUAL expected) if(DIFF) execute_process(COMMAND ${DIFF} -u "${OBSERVED_DIR}/${NAME}-exp.log" "${OBSERVED_DIR}/${NAME}.log") endif() file(REMOVE "${OBSERVED_DIR}/${NAME}-exp.log") message(FATAL_ERROR "Observed output does not match expected output") endif() file(REMOVE "${OBSERVED_DIR}/${NAME}-exp.log") endmacro() # Add the directory containing libxerces-c to the PATH (Windows only) if(WIN32) get_filename_component(LIBXERCES_C_DIR "${LIBXERCES_C}" DIRECTORY) file(TO_NATIVE_PATH "${LIBXERCES_C_DIR}" LIBXERCES_C_DIR) set(ENV{PATH} "${LIBXERCES_C_DIR};$ENV{PATH}") endif() if(CYGWIN) get_filename_component(LIBXERCES_C_DIR "${LIBXERCES_C}" DIRECTORY) file(TO_NATIVE_PATH "${LIBXERCES_C_DIR}" LIBXERCES_C_DIR) set(ENV{PATH} "${LIBXERCES_C_DIR}:$ENV{PATH}") endif() test_command("${PROGRAM}" ${ARGS})