ADD_CORE_FILES(CMakeLists.txt)

FIND_PACKAGE(CppUnit REQUIRED)

MACRO(UNIT_TEST)
  SET(TEST_NAME ${ARGV0})
  UNSET(TEST_SRCS)
  FOREACH(loop_var ${ARGN})
    STRING(REGEX MATCH ".*\\.cpp" TEST_SRC_FILE ${loop_var})
    IF(TEST_SRC_FILE)
      SET(TEST_SRCS ${TEST_SRCS} ${loop_var})
    ENDIF(TEST_SRC_FILE)
  ENDFOREACH()
  # this is a cpp[unit] test
  IF(TEST_SRCS)
    INCLUDE_DIRECTORIES(${TulipCoreBuildInclude} ${TulipCoreInclude} ${CppUnit_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/tests/include)
    LINK_DIRECTORIES(${CppUnit_LIBRARY_DIRS})
    ADD_EXECUTABLE(${TEST_NAME} ${TEST_SRCS})
    ADD_DEPENDENCIES(runTests ${TEST_NAME})
    TARGET_LINK_LIBRARIES(${TEST_NAME} ${LibTulipCoreName} ${CppUnit_LIBRARIES})
    ADD_TEST(NAME ${TEST_NAME} COMMAND ${TEST_NAME} ${TEST_NAME})
  # otherwise this is a Python test
  ELSEIF(TULIP_BUILD_PYTHON_COMPONENTS)
    SET(PYTHON_TEST_MODULE ${ARGV1})
    FILE(COPY ${PYTHON_TEST_MODULE}.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
    ADD_TEST(NAME ${TEST_NAME} COMMAND ${Python_EXECUTABLE} -m unittest ${PYTHON_TEST_MODULE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
  ENDIF()
  # In order to run the tests on windows, we need to add the paths of the dll dependencies (cppunit, tulip, gzstream, yajl)
  # in the PATH environment variable
  IF(WIN32)
    IF(MINGW)
      STRING(REGEX MATCH ".*dll\\.a" IMPORT_LIBRARY ${CppUnit_LIBRARIES})
      STRING(REGEX MATCH ".*dll" DLL_LIBRARY ${CppUnit_LIBRARIES})
      IF(IMPORT_LIBRARY)
        TULIP_GET_DLL_NAME_FROM_IMPORT_LIBRARY(${CppUnit_LIBRARIES} CppUnitDllName)
      ELSEIF(DLL_LIBRARY)
        GET_FILENAME_COMPONENT(CppUnitDllName ${CppUnit_LIBRARIES} NAME)
      ENDIF()
    ELSE(MINGW)
      TULIP_GET_DLL_NAME_FROM_IMPORT_LIBRARY(${CppUnit_LIBRARIES} CppUnitDllName)
    ENDIF(MINGW)
    IF(CppUnitDllName)
      TULIP_FIND_EXTERNAL_LIB(${CppUnitDllName} CppUnitDllPath)
      IF(CppUnitDllPath)
        GET_FILENAME_COMPONENT(CppUnitDllDir ${CppUnitDllPath} DIRECTORY)
      ENDIF(CppUnitDllPath)
    ENDIF()
    SET(NEWPATH "${CppUnitDllDir};${CMAKE_LIBRARY_PATH};${QT_BINARY_DIR};${PYTHON_HOME_PATH};${CMAKE_BINARY_DIR}/thirdparty/gzstream/;${CMAKE_BINARY_DIR}/thirdparty/yajl/src;${CMAKE_BINARY_DIR}/thirdparty/ftgl")
    SET(NEWPATH "${NEWPATH};${CMAKE_BINARY_DIR}/library/tulip-core/src;${CMAKE_BINARY_DIR}/library/tulip-ogl/src;${CMAKE_BINARY_DIR}/library/tulip-gui/src;$ENV{PATH}")
    SET(NEWPATH "${NEWPATH};${CMAKE_BINARY_DIR}/thirdparty/libtess2;${CMAKE_BINARY_DIR}/thirdparty/OGDF;${CMAKE_BINARY_DIR}/library/tulip-ogdf;${CMAKE_BINARY_DIR}/library/tulip-python/src;$ENV{PATH}")
    STRING(REPLACE "\\;" ";" NEWPATH "${NEWPATH}")
    STRING(REPLACE ";" "\\;" NEWPATH "${NEWPATH}")
  ELSE(WIN32)
    SET(NEWPATH "$ENV{PATH}")
  ENDIF(WIN32)
  # add Tulip modules path to PYTHONPATH in order to run the Python tests
  SET(PYTHONPATH "${CMAKE_BINARY_DIR}/library/tulip-python/modules/;${TULIP_PYTHON_ROOT_FOLDER};${TULIPGUI_PYTHON_ROOT_FOLDER};${CMAKE_BINARY_DIR}/thirdparty/sip-${SIP_VERSION_STR}/siplib")
  IF(WIN32)
    STRING(REPLACE "\\;" ";" PYTHONPATH "${PYTHONPATH}")
    STRING(REPLACE ";" "\\;" PYTHONPATH "${PYTHONPATH}")
  ELSE(WIN32)
    STRING(REPLACE ";" ":" PYTHONPATH "${PYTHONPATH}")
  ENDIF(WIN32)
  # set tests environment
  SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES ENVIRONMENT "TULIP_BUILD_DIR=${CMAKE_BINARY_DIR};PYTHONPATH=${PYTHONPATH};PATH=${NEWPATH}")
ENDMACRO(UNIT_TEST)

ADD_SUBDIRECTORY(library)

IF(TULIP_BUILD_PYTHON_COMPONENTS)
  ADD_DEPENDENCIES(runTests copyTulipPluginsPyInBuild)
ENDIF(TULIP_BUILD_PYTHON_COMPONENTS)

IF(NOT TULIP_BUILD_CORE_ONLY)
  ADD_SUBDIRECTORY(plugins)
ENDIF(NOT TULIP_BUILD_CORE_ONLY)

IF(TULIP_BUILD_PYTHON_COMPONENTS)
  ADD_SUBDIRECTORY(python)
ENDIF(TULIP_BUILD_PYTHON_COMPONENTS)

ADD_SUBDIRECTORY(external_plugins_build)
