QAR-1619: Finish replacing RunBuildTest.cmake with run_build_test.py.
Because the details of RunBuildTest.cmake versus run_build_test.py had to be changed in so many different places, introduce LL_TEST_COMMAND CMake macro (in LLTestCommand.cmake) to encapsulate construction of the actual command line. Use LL_TEST_COMMAND in LL_ADD_PROJECT_UNIT_TESTS, LL_ADD_INTEGRATION_TEST, the big indra/test monolith and the various LslCompilerMacros. Fix run_build_test.py to pass through the test executable's own options (e.g. --touch, --output) without inspection. Defend it against the case when the platform-specific library path environment variable doesn't yet exist. Make it report errors only on nonzero test-program rc. Remove RunBuildTest.cmake.master
parent
369f5ba524
commit
b9546a33e9
|
|
@ -53,6 +53,7 @@ set(cmake_SOURCE_FILES
|
|||
LLPrimitive.cmake
|
||||
LLRender.cmake
|
||||
LLScene.cmake
|
||||
LLTestCommand.cmake
|
||||
LLUI.cmake
|
||||
LLVFS.cmake
|
||||
LLWindow.cmake
|
||||
|
|
@ -69,7 +70,6 @@ set(cmake_SOURCE_FILES
|
|||
PNG.cmake
|
||||
Python.cmake
|
||||
Prebuilt.cmake
|
||||
RunBuildTest.cmake
|
||||
TemplateCheck.cmake
|
||||
Tut.cmake
|
||||
UI.cmake
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# -*- cmake -*-
|
||||
include(LLTestCommand)
|
||||
|
||||
MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
|
||||
# Given a project name and a list of sourcefiles (with optional properties on each),
|
||||
|
|
@ -126,17 +127,14 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
|
|||
set(LD_LIBRARY_PATH ${ARCH_PREBUILT_DIRS}:${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}:/usr/lib)
|
||||
ENDIF(WINDOWS)
|
||||
|
||||
LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${TEST_CMD})
|
||||
SET(TEST_SCRIPT_CMD ${LL_TEST_COMMAND_value})
|
||||
IF(LL_TEST_VERBOSE)
|
||||
MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script = ${TEST_SCRIPT_CMD}")
|
||||
ENDIF(LL_TEST_VERBOSE)
|
||||
# Add test
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${TEST_OUTPUT}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
ARGS
|
||||
-DLD_LIBRARY_PATH=${LD_LIBRARY_PATH}
|
||||
"-DTEST_CMD:STRING=\"${TEST_CMD}\""
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/RunBuildTest.cmake
|
||||
COMMAND ${TEST_SCRIPT_CMD}
|
||||
DEPENDS PROJECT_${project}_TEST_${name}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
|
|
@ -216,12 +214,8 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
|
|||
set(LD_LIBRARY_PATH ${ARCH_PREBUILT_DIRS}:${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}:/usr/lib)
|
||||
ENDIF(WINDOWS)
|
||||
|
||||
SET(TEST_SCRIPT_CMD
|
||||
${CMAKE_COMMAND}
|
||||
-DLD_LIBRARY_PATH="${LD_LIBRARY_PATH}"
|
||||
-DTEST_CMD:STRING="${test_command}"
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/RunBuildTest.cmake
|
||||
)
|
||||
LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${test_command})
|
||||
SET(TEST_SCRIPT_CMD ${LL_TEST_COMMAND_value})
|
||||
|
||||
if(TEST_DEBUG)
|
||||
message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
MACRO(LL_TEST_COMMAND LD_LIBRARY_PATH)
|
||||
# nat wonders how Kitware can use the term 'function' for a construct that
|
||||
# cannot return a value. And yet, variables you set inside a FUNCTION are
|
||||
# local. Try a MACRO instead.
|
||||
SET(LL_TEST_COMMAND_value
|
||||
${PYTHON_EXECUTABLE}
|
||||
"${CMAKE_SOURCE_DIR}/cmake/run_build_test.py")
|
||||
IF(LD_LIBRARY_PATH)
|
||||
LIST(APPEND LL_TEST_COMMAND_value "-l${LD_LIBRARY_PATH}")
|
||||
ENDIF(LD_LIBRARY_PATH)
|
||||
LIST(APPEND LL_TEST_COMMAND_value ${ARGN})
|
||||
##MESSAGE(STATUS "Will run: ${LL_TEST_COMMAND_value}")
|
||||
ENDMACRO(LL_TEST_COMMAND)
|
||||
|
|
@ -60,22 +60,35 @@ def main(command, libpath=[], vars={}):
|
|||
raise NotImplemented("run_build_test: unknown platform %s" % sys.platform)
|
||||
lpvars = []
|
||||
for var in lpvars:
|
||||
# Split the existing path
|
||||
dirs = os.environ[var].split(os.pathsep)
|
||||
# Split the existing path. Bear in mind that the variable in question
|
||||
# might not exist; instead of KeyError, just use an empty string.
|
||||
dirs = os.environ.get(var, "").split(os.pathsep)
|
||||
# Append the sequence in libpath
|
||||
## print "%s += %r" % (var, libpath)
|
||||
dirs.extend(libpath)
|
||||
# Now rebuild the path string. This way we use a minimum of separators
|
||||
# -- and we avoid adding a pointless separator when libpath is empty.
|
||||
os.environ[var] = os.pathsep.join(dirs)
|
||||
# Now handle arbitrary environment variables. The tricky part is ensuring
|
||||
# that all the keys and values we try to pass are actually strings.
|
||||
## if vars:
|
||||
## print "Setting:"
|
||||
## for key, value in vars.iteritems():
|
||||
## print "%s=%s" % (key, value)
|
||||
os.environ.update(dict([(str(key), str(value)) for key, value in vars.iteritems()]))
|
||||
# Run the child process.
|
||||
## print "Running: %s" % " ".join(command)
|
||||
return subprocess.call(command)
|
||||
|
||||
if __name__ == "__main__":
|
||||
from optparse import OptionParser
|
||||
parser = OptionParser(usage="usage: %prog [options] command args...")
|
||||
# We want optparse support for the options we ourselves handle -- but we
|
||||
# DO NOT want it looking at options for the executable we intend to run,
|
||||
# rejecting them as invalid because we don't define them. So configure the
|
||||
# parser to stop looking for options as soon as it sees the first
|
||||
# positional argument (traditional Unix syntax).
|
||||
parser.disable_interspersed_args()
|
||||
parser.add_option("-D", "--define", dest="vars", default=[], action="append",
|
||||
metavar="VAR=value",
|
||||
help="Add VAR=value to the env variables defined")
|
||||
|
|
@ -92,6 +105,7 @@ if __name__ == "__main__":
|
|||
# want.
|
||||
rc = main(command=args, libpath=opts.libpath,
|
||||
vars=dict([(pair.split('=', 1) + [""])[:2] for pair in opts.vars]))
|
||||
print >>sys.stderr, "Failure running: %s" % " ".join(args)
|
||||
print >>sys.stderr, "Error: %s" % rc
|
||||
if rc not in (None, 0):
|
||||
print >>sys.stderr, "Failure running: %s" % " ".join(args)
|
||||
print >>sys.stderr, "Error: %s" % rc
|
||||
sys.exit((rc < 0) and 255 or rc)
|
||||
|
|
|
|||
|
|
@ -153,16 +153,11 @@ ELSE(WINDOWS)
|
|||
set(LD_LIBRARY_PATH ${ARCH_PREBUILT_DIRS}:${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}:/usr/lib)
|
||||
ENDIF(WINDOWS)
|
||||
|
||||
SET(TEST_CMD ${TEST_EXE} --output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt --touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt)
|
||||
|
||||
LL_TEST_COMMAND("${LD_LIBRARY_PATH}"
|
||||
"${TEST_EXE}" "--output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt" "--touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt")
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
ARGS
|
||||
-DLD_LIBRARY_PATH=${LD_LIBRARY_PATH}
|
||||
"-DTEST_CMD:STRING=\"${TEST_CMD}\""
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/RunBuildTest.cmake
|
||||
|
||||
COMMAND ${LL_TEST_COMMAND_value}
|
||||
DEPENDS test
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT "C++ unit tests"
|
||||
|
|
|
|||
Loading…
Reference in New Issue