Switch CMake testing over to use Daniels new(er) Python-based infrastructure.

llvm-svn: 72977
This commit is contained in:
Douglas Gregor 2009-06-05 23:57:17 +00:00
parent dedc0968cf
commit 30018a6860
4 changed files with 54 additions and 87 deletions

View File

@ -1,51 +0,0 @@
# Project that runs the Clang regression tests for a given glob pattern.
#
# There are several CMake cache variabes that must be set for this
# project to work:
#
# CLANG_TEST_RUNNER: The TestRunner.sh shell script, which is used to test
# Clang.
#
# CLANG_TEST_GLOB_PATTERNS: Set to a GLOB pattern to identify the kind of
# tests, e.g., *.cpp for C++ tests.
#
# LLVM_TOOLS_PATH: The directory where the Clang and LLVM tool
# executables (such as opt) are generated.
#
# LLVM_SCRIPTS_PATH: The directory where the LLVM test scripts are
# located.
cmake_minimum_required(VERSION 2.6)
project(ClangTest)
enable_testing()
# Computes the normalized name of a test from its path name.
macro(compute_test_name var filename)
get_filename_component(test_name ${filename} NAME_WE)
get_filename_component(test_path ${filename} PATH)
get_filename_component(test_lastpath ${test_path} NAME_WE)
set(${var} "${test_lastpath}-${test_name}")
endmacro()
# FIXME: This is a hack to make sure that there is a proper "clean" target.
# There must be a better way.
file(WRITE dummy.c "int dummy() { return 0; }")
add_library(dummy dummy.c)
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "dummy.c")
# Set the path appropriately
set(PATH $ENV{PATH})
set(PATH "${LLVM_TOOLS_PATH}:${LLVM_SCRIPTS_PATH}:${PATH}")
# Find the test files
string(REPLACE ":" ";" CLANG_TEST_GLOB_PATTERNS ${CLANG_TEST_GLOB_PATTERNS})
separate_arguments(CLANG_TEST_GLOB_PATTERNS)
file(GLOB_RECURSE tests ${CLANG_TEST_GLOB_PATTERNS})
# Add individual tests for each file we found.
foreach(test ${tests})
compute_test_name(testname ${test})
add_test(${testname} ${CLANG_TEST_RUNNER} ${test})
set_tests_properties(${testname} PROPERTIES
ENVIRONMENT "PATH=${PATH}")
endforeach(test ${tests})

View File

@ -1 +0,0 @@
int dummy() { return 0; }

View File

@ -2,40 +2,52 @@ find_file(CLANG_TEST_RUNNER TestRunner.sh PATHS ${CMAKE_CURRENT_SOURCE_DIR}
DOC "Clang's regression testing script")
mark_as_advanced(CLANG_TEST_RUNNER)
get_target_property(LLVM_TOOLS_PATH clang RUNTIME_OUTPUT_DIRECTORY)
set(CLANG_TEST_DIRECTORIES
"Analysis"
"CodeGen"
"CodeGenCXX"
"CodeGenObjC"
"Coverage"
"Driver"
"FixIt"
"Frontend"
"Lexer"
"Misc"
"PCH"
"Parser"
"Preprocessor"
"Rewriter"
"Sema"
"SemaCXX"
"SemaObjC"
"SemaObjCXX"
"SemaTemplate")
macro(add_clang_test_suite language target)
set(PATTERNS)
foreach (extension ${ARGN})
set(PATTERNS "${PATTERNS}:${CMAKE_CURRENT_SOURCE_DIR}/*.${extension}")
include(FindPythonInterp)
if(PYTHONINTERP_FOUND)
get_target_property(LLVM_TOOLS_PATH clang RUNTIME_OUTPUT_DIRECTORY)
set(TESTING_EXTRA_PATHS
"${LLVM_TOOLS_PATH}/${CMAKE_CFG_INTDIR}:${LLVM_SOURCE_DIR}/test/Scripts")
set(all_testdirs)
foreach(testdir ${CLANG_TEST_DIRECTORIES})
add_custom_target(clang-test-${testdir}
${PYTHON_EXECUTABLE}
${LLVM_SOURCE_DIR}/tools/clang/utils/test/MultiTestRunner.py
-s
"--path=${TESTING_EXTRA_PATHS}"
${CMAKE_CURRENT_SOURCE_DIR}/${testdir}/
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Running Clang regression tests in ${testdir}")
list(APPEND all_testdirs ${CMAKE_CURRENT_SOURCE_DIR}/${testdir}/)
endforeach()
if (${language} STREQUAL "ALL")
set(TEST_COMMENT "Running Clang regression tests")
else()
set(TEST_COMMENT "Running Clang ${language} regression tests")
endif ()
add_custom_target(${target}
${CMAKE_CTEST_COMMAND}
--build-and-test
${LLVM_SOURCE_DIR}/tools/clang/CMake/RunTests
${CMAKE_CURRENT_BINARY_DIR}/${target}
--build-generator ${CMAKE_GENERATOR}
--build-makeprogram ${CMAKE_MAKE_PROGRAM}
--build-project ClangTest
--build-target test
--build-options
"-DCLANG_TEST_RUNNER=${CLANG_TEST_RUNNER}"
"-DCLANG_TEST_GLOB_PATTERNS=${PATTERNS}"
"-DLLVM_TOOLS_PATH=${LLVM_TOOLS_PATH}"
"-DLLVM_SCRIPTS_PATH=${LLVM_SOURCE_DIR}/test/Scripts"
COMMENT ${TEST_COMMENT})
endmacro(add_clang_test_suite)
add_clang_test_suite(C clang-test-c c)
add_clang_test_suite(Objective-C clang-test-objc m)
add_clang_test_suite(C++ clang-test-cxx cpp)
add_clang_test_suite(Objective-C++ clang-test-objcxx mm)
add_clang_test_suite(Assembler clang-test-asm S)
add_clang_test_suite(ALL clang-test c m cpp mm S)
add_custom_target(clang-test
${PYTHON_EXECUTABLE}
${LLVM_SOURCE_DIR}/tools/clang/utils/test/MultiTestRunner.py
"--path=${TESTING_EXTRA_PATHS}"
${all_testdirs}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS clang clang-cc
COMMENT "Running Clang regression tests")
endif()

View File

@ -249,6 +249,10 @@ def main():
parser.add_option("", "--debug-do-not-test", dest="debugDoNotTest",
help="DEBUG: Skip running actual test script",
action="store_true", default=False)
parser.add_option("", "--path", dest="path",
help="Additional paths to add to testing environment",
action="store", type=str, default=None)
(opts, args) = parser.parse_args()
if not args:
@ -269,7 +273,10 @@ def main():
random.shuffle(tests)
if opts.maxTests is not None:
tests = tests[:opts.maxTests]
if opts.path is not None:
os.environ["PATH"] = opts.path + ":" + os.environ["PATH"];
print "Current PATH is: ", os.environ["PATH"]
extra = ''
if len(tests) != len(allTests):
extra = ' of %d'%(len(allTests),)