[CMake] Test Script problems

Allen D Byrne byrn at hdfgroup.org
Fri Apr 30 14:52:20 EDT 2010


I have a test script that works on linux but fails to work properly on Windows. It runs a command, captures the standard out and compares it to a reference file.

On linux everything works 99% of the time (issue with '=' or '--' in a parameter argument - later question). On windows, the execution of the test program fails with;
            "The process cannot access the file because it is being used by another process"

Any suggestions would be welcomed. As a fallback I will need to create a windows batch file.

Allen


The Script - runTest.cmake :
####################################
# process arguments for the test program
SET (arg_list)
FOREACH (arg ${TEST_ARGS})
  SET (arg_list ${arg_list} ${arg})
ENDFOREACH (arg ${TEST_ARGS})

# run the test program, capture the stdout/stderr and the result var
EXECUTE_PROCESS (
    COMMAND ${TEST_PROGRAM} ${arg_list}
    WORKING_DIRECTORY ${TEST_FOLDER}
    RESULT_VARIABLE TEST_RESULT
    OUTPUT_FILE ${TEST_OUTPUT}
    ERROR_FILE ${TEST_OUTPUT}
    OUTPUT_VARIABLE TEST_ERROR
    ERROR_VARIABLE TEST_ERROR
)

# if the return value is !=0 bail out
IF (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT})
  MESSAGE ( FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != 0.\n${TEST_ERROR}")
ENDIF (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT})

# now compare the output with the reference
EXECUTE_PROCESS (
    COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_OUTPUT} ${TEST_REFERENCE}
    RESULT_VARIABLE TEST_RESULT
)

# again, if return value is !=0 scream and shout
IF (TEST_RESULT)
  MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not match ${TEST_REFERENCE}")
ENDIF (TEST_RESULT)
#############################################

The CMakeLists.txt :
#################################
...
  MACRO (ADD_CMP_TEST resultfile resultcode)
    ADD_TEST (
        NAME TOOL-${resultfile}
        COMMAND "${CMAKE_COMMAND}"
            -D "TEST_PROGRAM=$<TARGET_FILE:tool>"
            -D "TEST_ARGS=${ARGN}"
            -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
            -D "TEST_OUTPUT=${resultfile}.out"
            -D "TEST_EXPECT=${resultcode}"
            -D "TEST_REFERENCE=${resultfile}.txt"
            -D "TEST_APPEND=EXIT CODE:"
            -P "runTest.cmake"
    )
  ENDMACRO (ADD_CMP_TEST file)

...

ADD_CMP_TEST (tool_11 1  tool_param1 tool_param2 tool_paramN)

...
#################################


More information about the CMake mailing list