# -*- cmake -*-

project (test)

include(00-Common)
include(LLCommon)
include(LLDatabase)
include(LLInventory)
include(LLMath)
include(LLMessage)
include(LLVFS)
include(LLXML)
include(LScript)
include(Linking)
include(Tut)

include_directories(
    ${LLCOMMON_INCLUDE_DIRS}
    ${LLDATABASE_INCLUDE_DIRS}
    ${LLMATH_INCLUDE_DIRS}
    ${LLMESSAGE_INCLUDE_DIRS}
    ${LLINVENTORY_INCLUDE_DIRS}
    ${LLVFS_INCLUDE_DIRS}
    ${LLXML_INCLUDE_DIRS}
    ${LSCRIPT_INCLUDE_DIRS}
    )

set(test_SOURCE_FILES
    common.cpp
    inventory.cpp
#    llapp_tut.cpp						# Temporarily removed until thread issues can be solved
    llbase64_tut.cpp
    llblowfish_tut.cpp
    llbuffer_tut.cpp
    lldate_tut.cpp
    llerror_tut.cpp
    llhost_tut.cpp
    llhttpdate_tut.cpp
    llhttpclient_tut.cpp
    llhttpnode_tut.cpp
    llinventoryparcel_tut.cpp
    lliohttpserver_tut.cpp
    lljoint_tut.cpp
    llmessageconfig_tut.cpp
    llmodularmath_tut.cpp
    llnamevalue_tut.cpp
    llpermissions_tut.cpp
    llpipeutil.cpp
    llquaternion_tut.cpp
    llrandom_tut.cpp
    llsaleinfo_tut.cpp
    llscriptresource_tut.cpp
    llsdmessagebuilder_tut.cpp
    llsdmessagereader_tut.cpp
    llsd_new_tut.cpp
    llsdserialize_tut.cpp
    llsdutil_tut.cpp
    llservicebuilder_tut.cpp
    llstreamtools_tut.cpp
    llstring_tut.cpp
    lltemplatemessagebuilder_tut.cpp
    lltimestampcache_tut.cpp
    lltiming_tut.cpp
    lltranscode_tut.cpp
    lltut.cpp
    lluri_tut.cpp
    lluuidhashmap_tut.cpp
    llxfer_tut.cpp
    math.cpp
    message_tut.cpp
    reflection_tut.cpp
    test.cpp
    v2math_tut.cpp
    v3color_tut.cpp
    v3dmath_tut.cpp
    v3math_tut.cpp
    v4color_tut.cpp
    v4coloru_tut.cpp
    v4math_tut.cpp
    )

set(test_HEADER_FILES
    CMakeLists.txt

    llpipeutil.h
    llsdtraits.h
    lltut.h
    )

if (NOT WINDOWS)
  list(APPEND test_SOURCE_FILES
       llmessagetemplateparser_tut.cpp
       )
endif (NOT WINDOWS)

if (NOT DARWIN)
  list(APPEND test_SOURCE_FILES
    )
endif (NOT DARWIN)

set_source_files_properties(${test_HEADER_FILES}
                            PROPERTIES HEADER_FILE_ONLY TRUE)

list(APPEND test_SOURC_FILES ${test_HEADER_FILES})

add_executable(test ${test_SOURCE_FILES})

target_link_libraries(test
    ${LLDATABASE_LIBRARIES}
    ${LLINVENTORY_LIBRARIES}
    ${LLMESSAGE_LIBRARIES}
    ${LLMATH_LIBRARIES}
    ${LLVFS_LIBRARIES}
    ${LLXML_LIBRARIES}
    ${LSCRIPT_LIBRARIES}
    ${LLCOMMON_LIBRARIES}
    ${APRICONV_LIBRARIES}
    ${PTHREAD_LIBRARY}
    ${WINDOWS_LIBRARIES}
    ${DL_LIBRARY}
    )

if (WINDOWS)
  set_target_properties(test
          PROPERTIES 
          LINK_FLAGS "/NODEFAULTLIB:LIBCMT"
          LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""
          )
endif (WINDOWS)

SET(TEST_EXE $<TARGET_FILE:test>)

add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt
  COMMAND ${TEST_EXE}
  ARGS
    --output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt
    --touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt
  DEPENDS test
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  COMMENT "C++ unit tests"
  )

set(test_results ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt)

if (EXISTS /etc/debian_version_FAIL)
  # The Python tests have all kinds of wacky non-portable assumptions
  # built in.

  add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/py_tests_ok.txt
    COMMAND ${PYTHON_EXECUTABLE}
    ARGS
      ${CMAKE_CURRENT_SOURCE_DIR}/test.py
      --mode=static
      --output=${CMAKE_CURRENT_BINARY_DIR}/py_test_results.txt
      --touch=${CMAKE_CURRENT_BINARY_DIR}/py_tests_ok.txt
      --mode=static
    DEPENDS test.py
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMENT "Python unit tests"
    )

  list(APPEND test_results ${CMAKE_CURRENT_BINARY_DIR}/py_tests_ok.txt)
endif (EXISTS /etc/debian_version_FAIL)
    
add_custom_target(tests_ok ALL DEPENDS ${test_results})
