
cmake_minimum_required(VERSION 3.4.3)

list(APPEND CMAKE_MODULE_PATH
     "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")

project(XCTest
        LANGUAGES
          C)

option(BUILD_SHARED_LIBS "Build shared libraries" ON)

option(XCTEST_PATH_TO_LIBDISPATCH_SOURCE "Path to libdispatch source" "")
option(XCTEST_PATH_TO_LIBDISPATCH_BUILD "Path to libdispatch build" "")

option(XCTEST_PATH_TO_FOUNDATION_BUILD "Path to Foundation build" "")

option(XCTEST_PATH_TO_COREFOUNDATION_BUILD "Path to CoreFoundation build" "")

find_package(LLVM CONFIG)
if(NOT LLVM_FOUND)
  message(SEND_ERROR "Could not find LLVM; configure with -DCMAKE_PREFIX_PATH=/path/to/llvm/install")
endif()
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")

include(${LLVM_DIR}/LLVMConfig.cmake)

list(APPEND CMAKE_MODULE_PATH ${LLVM_DIR})
include(AddLLVM)

include(SwiftSupport)
include(GNUInstallDirs)

set(swift_optimization_flags)
if(CMAKE_BUILD_TYPE MATCHES Release)
  set(swift_optimization_flags -O)
endif()

if(CMAKE_SYSTEM_NAME STREQUAL Android OR CMAKE_SYSTEM_NAME STREQUAL Linux)
  set(deployment_target -DDEPLOYMENT_TARGET_LINUX)
elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
  set(deployment_target -DDEPLOYMENT_TARGET_MACOSX)
elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
  set(deployment_target -DDEPLOYMENT_TARGET_FREEBSD)
elseif(CMAKE_SYSTEM_NAME STREQUAL Windows)
  set(deployment_target -DDEPLOYMENT_TARGET_WINDOWS)
  set(WORKAROUND_SR9138 -Xlinker;-ignore:4217)
  set(WORKAROUND_SR9995 -Xlinker;-nodefaultlib:libcmt)
endif()

add_swift_library(XCTest
                  MODULE_NAME
                    XCTest
                  MODULE_LINK_NAME
                    XCTest
                  MODULE_PATH
                    ${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule
                  LINK_FLAGS
                    -L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}
                    -L${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src -ldispatch
                    -L${XCTEST_PATH_TO_FOUNDATION_BUILD} -lFoundation

                    # compatibility with Foundation build_script.py
                    -L${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation

                    ${WORKAROUND_SR9138}
                    ${WORKAROUND_SR9995}
                  SOURCES
                    Sources/XCTest/Private/WallClockTimeMetric.swift
                    Sources/XCTest/Private/TestListing.swift
                    Sources/XCTest/Private/XCTestCaseSuite.swift
                    Sources/XCTest/Private/TestFiltering.swift
                    Sources/XCTest/Private/XCTestInternalObservation.swift
                    Sources/XCTest/Private/ObjectWrapper.swift
                    Sources/XCTest/Private/PerformanceMeter.swift
                    Sources/XCTest/Private/PrintObserver.swift
                    Sources/XCTest/Private/ArgumentParser.swift
                    Sources/XCTest/Private/SourceLocation.swift
                    Sources/XCTest/Private/WaiterManager.swift
                    Sources/XCTest/Public/XCTestRun.swift
                    Sources/XCTest/Public/XCTestMain.swift
                    Sources/XCTest/Public/XCTestCase.swift
                    Sources/XCTest/Public/XCTestSuite.swift
                    Sources/XCTest/Public/XCTestSuiteRun.swift
                    Sources/XCTest/Public/XCTestErrors.swift
                    Sources/XCTest/Public/XCTestObservation.swift
                    Sources/XCTest/Public/XCTestCaseRun.swift
                    Sources/XCTest/Public/XCAbstractTest.swift
                    Sources/XCTest/Public/XCTestObservationCenter.swift
                    Sources/XCTest/Public/XCTestCase+Performance.swift
                    Sources/XCTest/Public/XCTAssert.swift
                    Sources/XCTest/Public/Asynchronous/XCTNSNotificationExpectation.swift
                    Sources/XCTest/Public/Asynchronous/XCTNSPredicateExpectation.swift
                    Sources/XCTest/Public/Asynchronous/XCTWaiter+Validation.swift
                    Sources/XCTest/Public/Asynchronous/XCTWaiter.swift
                    Sources/XCTest/Public/Asynchronous/XCTestCase+Asynchronous.swift
                    Sources/XCTest/Public/Asynchronous/XCTestExpectation.swift
                  CFLAGS
                    ${deployment_target}
                  SWIFT_FLAGS
                    ${swift_optimization_flags}

                    -I${XCTEST_PATH_TO_LIBDISPATCH_SOURCE}
                    -I${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/swift
                    -Xcc -fblocks

                    -I${XCTEST_PATH_TO_FOUNDATION_BUILD}/swift
                    -Fsystem ${XCTEST_PATH_TO_COREFOUNDATION_BUILD}/System/Library/Frameworks

                    # compatibility with Foundation build_script.py
                    -I${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation
                    -I${XCTEST_PATH_TO_FOUNDATION_BUILD}/Foundation/usr/lib/swift)

# Temporary staging; the various swift projects that depend on XCTest all expect
# the swiftdoc and swiftmodule to be in the top level.
# So for now, make a copy so we don't have to do a coordinated commit across
# all the swift projects to change this assumption.
add_custom_command(TARGET
                    XCTest
                  POST_BUILD
                  COMMAND
                    ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftdoc ${CMAKE_CURRENT_BINARY_DIR}
                  COMMAND
                    ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule ${CMAKE_CURRENT_BINARY_DIR}
                  COMMENT
                    "Copying swiftmodule/swiftdoc to build directory")

if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py)
  set(LIT_COMMAND "${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py"
      CACHE STRING "command used to spawn llvm-lit")
else()
  find_program(LIT_COMMAND NAMES llvm-lit lit.py lit)
endif()
find_package(PythonInterp)
add_custom_target(check-xctest
                  COMMAND
                  ${CMAKE_COMMAND} -E env
                    BUILT_PRODUCTS_DIR=${CMAKE_BINARY_DIR}
                    CORE_FOUNDATION_BUILT_PRODUCTS_DIR=${XCTEST_PATH_TO_COREFOUNDATION_BUILD}
                    FOUNDATION_BUILT_PRODUCTS_DIR=${XCTEST_PATH_TO_FOUNDATION_BUILD}
                    LIBDISPATCH_SRC_DIR=${XCTEST_PATH_TO_LIBDISPATCH_SOURCE}
                    LIBDISPATCH_BUILD_DIR=${XCTEST_PATH_TO_LIBDISPATCH_BUILD}
                    LIBDISPATCH_OVERLAY_DIR=${XCTEST_PATH_TO_LIBDISPATCH_BUILD}/src/swift
                    SWIFT_EXEC=${CMAKE_SWIFT_COMPILER}
                    ${PYTHON_EXECUTABLE} ${LIT_COMMAND} -sv ${CMAKE_SOURCE_DIR}/Tests/Functional
                  COMMENT
                    "Running XCTest functional test suite"
                  DEPENDS
                    XCTest
                  USES_TERMINAL)

string(TOLOWER ${CMAKE_SYSTEM_NAME} swift_os)
get_swift_host_arch(swift_host_arch)

install(FILES
          ${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftdoc
          ${CMAKE_CURRENT_BINARY_DIR}/swift/XCTest.swiftmodule
        DESTINATION
          ${CMAKE_INSTALL_FULL_LIBDIR}/swift/${swift_os}/${swift_host_arch})
install(FILES
          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}XCTest${CMAKE_SHARED_LIBRARY_SUFFIX}
        DESTINATION
          ${CMAKE_INSTALL_FULL_LIBDIR})
# NOTE(compnerd) stage a compatibility copy in the swift resource dir
install(FILES
          ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}XCTest${CMAKE_SHARED_LIBRARY_SUFFIX}
        DESTINATION
          ${CMAKE_INSTALL_FULL_LIBDIR}/swift/${swift_os})

