include(LLVMParseArguments)

# add_clang_unittest(test_dirname file1.cpp file2.cpp ...
#                    [USED_LIBS lib1 lib2]
#                    [LINK_COMPONENTS component1 component2])
#
# Will compile the list of files together and link against the clang
# libraries in the USED_LIBS list and the llvm-config components in
# the LINK_COMPONENTS list.  Produces a binary named
# 'basename(test_dirname)Tests'.
function(add_clang_unittest)
  PARSE_ARGUMENTS(CLANG_UNITTEST "USED_LIBS;LINK_COMPONENTS" "" ${ARGN})
  set(LLVM_LINK_COMPONENTS ${CLANG_UNITTEST_LINK_COMPONENTS})
  set(LLVM_USED_LIBS ${CLANG_UNITTEST_USED_LIBS})
  list(GET CLANG_UNITTEST_DEFAULT_ARGS 0 test_dirname)
  list(REMOVE_AT CLANG_UNITTEST_DEFAULT_ARGS 0)

  string(REGEX MATCH "([^/]+)$" test_name ${test_dirname})
  if (CMAKE_BUILD_TYPE)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
      ${CLANG_BINARY_DIR}/unittests/${test_dirname}/${CMAKE_BUILD_TYPE})
  else()
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
      ${CLANG_BINARY_DIR}/unittests/${test_dirname})
  endif()
  if( NOT LLVM_BUILD_TESTS )
    set(EXCLUDE_FROM_ALL ON)
  endif()
  add_clang_executable(${test_name}Tests ${CLANG_UNITTEST_DEFAULT_ARGS})
  add_dependencies(ClangUnitTests ${test_name}Tests)
  set_target_properties(${test_name}Tests PROPERTIES FOLDER "Clang tests")
endfunction()

add_custom_target(ClangUnitTests)
set_target_properties(ClangUnitTests PROPERTIES FOLDER "Clang tests")

include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include)
add_definitions(-DGTEST_HAS_RTTI=0)
if( LLVM_COMPILER_IS_GCC_COMPATIBLE )
  llvm_replace_compiler_option(CMAKE_CXX_FLAGS "-frtti" "-fno-rtti")
elseif( MSVC )
  llvm_replace_compiler_option(CMAKE_CXX_FLAGS "/GR" "/GR-")
endif()

if (NOT LLVM_ENABLE_THREADS)
  add_definitions(-DGTEST_HAS_PTHREAD=0)
endif()

if(SUPPORTS_NO_VARIADIC_MACROS_FLAG)
  add_definitions("-Wno-variadic-macros")
endif()

add_clang_unittest(AST
  AST/APValueTest.cpp
  USED_LIBS gtest gtest_main clangAST
 )

add_clang_unittest(Basic
  Basic/FileManagerTest.cpp
  USED_LIBS gtest gtest_main clangBasic
 )

add_clang_unittest(Frontend
  Frontend/FrontendActionTest.cpp
  USED_LIBS gtest gtest_main clangFrontend
 )
