]> granicus.if.org Git - clang/commitdiff
Switch CMake testing over to use Daniels new(er) Python-based infrastructure.
authorDouglas Gregor <dgregor@apple.com>
Fri, 5 Jun 2009 23:57:17 +0000 (23:57 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 5 Jun 2009 23:57:17 +0000 (23:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72977 91177308-0d34-0410-b5e6-96231b3b80d8

CMake/RunTests/CMakeLists.txt [deleted file]
CMake/RunTests/dummy.c [deleted file]
test/CMakeLists.txt
utils/test/MultiTestRunner.py

diff --git a/CMake/RunTests/CMakeLists.txt b/CMake/RunTests/CMakeLists.txt
deleted file mode 100644 (file)
index fe838ef..0000000
+++ /dev/null
@@ -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})
\ No newline at end of file
diff --git a/CMake/RunTests/dummy.c b/CMake/RunTests/dummy.c
deleted file mode 100644 (file)
index ddba74f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-int dummy() { return 0; }
\ No newline at end of file
index cdf45712c31a6b0d93577547e34332cf64a33bae..ba5a0252349a38c00739ef6adc047fe6ff053f0a 100644 (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}")
-  endforeach()
-
-  if (${language} STREQUAL "ALL")
-    set(TEST_COMMENT "Running Clang regression tests")
-  else()
-    set(TEST_COMMENT "Running Clang ${language} regression tests")
-  endif ()
+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}")
 
-  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)
+    list(APPEND all_testdirs ${CMAKE_CURRENT_SOURCE_DIR}/${testdir}/)
+  endforeach()
 
-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)
\ No newline at end of file
+  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()  
index 57650f9e275f9cda60821f305cc02cc4676d1ee8..5dde1bd7753b3ebbaae3a24b1a4e129358f188d7 100755 (executable)
@@ -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),)