DISABLE_COMPILER_WARNINGS()

ADD_CORE_FILES(CMakeLists.txt)

ADD_SUBDIRECTORY(gzstream)
ADD_SUBDIRECTORY(OGDF)
ADD_SUBDIRECTORY(libqhull)
ADD_SUBDIRECTORY(yajl)
IF(NOT BUILD_CORE_ONLY)
ADD_SUBDIRECTORY(ftgl)
ADD_SUBDIRECTORY(libtess2)
IF(NOT QUAZIP_FOUND)
  ADD_SUBDIRECTORY(quazip)
ENDIF(NOT QUAZIP_FOUND)
ADD_SUBDIRECTORY(qxt)
ADD_SUBDIRECTORY(QtAwesome)

IF(PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND)
  IF(SIP_OK AND NOT SIP_FOUND)
    ADD_SUBDIRECTORY(sip-${SIP_VERSION_THIRDPARTY})
  ENDIF(SIP_OK AND NOT SIP_FOUND)
ENDIF(PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND)
ENDIF(NOT BUILD_CORE_ONLY)

## -----------------------------------------------------------------------------------------------
## Install external libraries.
## Each external library is defined in its own component to ensure easy modifications of the CPack component dependency tree
## -----------------------------------------------------------------------------------------------

IF(WIN32)
## -----------------------------------------------------------------------------------------------
## Windows
## -----------------------------------------------------------------------------------------------

# Note: On Win32 systems, CMake variables doesn't provide the right libraries that have to be included in the bundle. (For instance, Qt variables redirect to .lib and not .dll)
#       We have to manually find those libs by invoking the FIND_LIBRARY_GLOB macro

# Base System
# Libs needed to provide sufficient runtime under Windows environments
  IF(MINGW)



    # base runtime
    INSTALL_EXTERNAL_LIB("libgcc_s_*.dll" runtime)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("libgcc_s_*.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("libstdc++-*.dll" runtime)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("libstdc++-*.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    # install libintl and its dependency libiconv if found in the MinGW build environment
    IF(LIBINTL_FOUND)
      INSTALL_EXTERNAL_LIB("libintl*.dll" intl)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("libintl*.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

      INSTALL_EXTERNAL_LIB("*iconv.dll" iconv)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("*iconv.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    ENDIF(LIBINTL_FOUND)

    # install pthread lib in all cases as it is a frequent dependency
    INSTALL_EXTERNAL_LIB("*pthread*.dll" runtime)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("*pthread*.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    # OpenMP runtime
    IF(OPENMP_FOUND)
      INSTALL_EXTERNAL_LIB("libgomp-*.dll" runtime)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("libgomp-*.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    ENDIF(OPENMP_FOUND)

    # dependencies for old MinGW compilers
    IF(GCXX_VERSION VERSION_LESS 4.8)
      INSTALL_EXTERNAL_LIB("mingwm*.dll" runtime)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("mingwm*.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

      INSTALL_EXTERNAL_LIB("libiconv-2.dll" iconv)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("libiconv-2.dll" ${TULIP_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    ENDIF(GCXX_VERSION VERSION_LESS 4.8)

  ENDIF(MINGW)

  INSTALL_EXTERNAL_LIB_IF_NEEDED(${ZLIB_LIBRARY} zlib)
  IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    COPY_EXTERNAL_LIB_IF_NEEDED(${ZLIB_LIBRARY} ${TULIP_PYTHON_NATIVE_FOLDER})
  ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

IF(NOT BUILD_CORE_ONLY)
  INSTALL_EXTERNAL_LIB_IF_NEEDED(${GLEW_LIBRARY} glew)
  IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    COPY_EXTERNAL_LIB_IF_NEEDED(${GLEW_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
  ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

  INSTALL_EXTERNAL_LIB_IF_NEEDED(${FREETYPE_LIBRARY} freetype)
  IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    COPY_EXTERNAL_LIB_IF_NEEDED(${FREETYPE_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
  ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

  INSTALL_EXTERNAL_LIB_IF_NEEDED(${JPEG_LIBRARY} jpeg)
  IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    COPY_EXTERNAL_LIB_IF_NEEDED(${JPEG_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
  ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

  INSTALL_EXTERNAL_LIB_IF_NEEDED(${PNG_LIBRARY} png)
  IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
    COPY_EXTERNAL_LIB_IF_NEEDED(${PNG_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
  ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

  IF(USE_QT4)
    INSTALL_EXTERNAL_LIB("QtCore4.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("QtCore4.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("QtGui4.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("QtGui4.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("QtNetwork4.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("QtNetwork4.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("QtOpenGL4.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("QtOpenGL4.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("QtXml4.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("QtXml4.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("QtWebKit4.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("QtWebKit4.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    IF(CMAKE_DEBUG_MODE OR MSVC)
      INSTALL_EXTERNAL_LIB("QtCored4.dll" qt)
      INSTALL_EXTERNAL_LIB("QtGuid4.dll" qt)
      INSTALL_EXTERNAL_LIB("QtNetworkd4.dll" qt)
      INSTALL_EXTERNAL_LIB("QtOpenGLd4.dll" qt)
      INSTALL_EXTERNAL_LIB("QtXmld4.dll" qt)
      INSTALL_EXTERNAL_LIB("QtWebKitd4.dll" qt)
    ENDIF(CMAKE_DEBUG_MODE OR MSVC)

    IF(QT_PHONON_LIBRARY)
      INSTALL_EXTERNAL_LIB("phonon4.dll" qt)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("phonon4.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

      IF(CMAKE_DEBUG_MODE OR MSVC)
        INSTALL_EXTERNAL_LIB("phonond4.dll" qt)
      ENDIF(CMAKE_DEBUG_MODE OR MSVC)
    ENDIF(QT_PHONON_LIBRARY)
  ENDIF(USE_QT4)

  IF(USE_QT5)
    INSTALL_EXTERNAL_LIB("Qt5Core.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Core.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Gui.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Gui.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Network.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Network.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5OpenGL.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5OpenGL.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Xml.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Xml.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5WebKit.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5WebKit.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5WebKitWidgets.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5WebKitWidgets.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Widgets.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Widgets.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Multimedia.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Multimedia.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5MultimediaWidgets.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5MultimediaWidgets.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5PrintSupport.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5PrintSupport.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Sensors.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Sensors.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Sql.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Sql.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Quick.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Quick.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("Qt5Qml.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("Qt5Qml.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    IF(CMAKE_DEBUG_MODE OR MSVC)
      INSTALL_EXTERNAL_LIB("Qt5Cored.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Guid.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Networkd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5OpenGLd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Xmld.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5WebKitd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5WebKitWidgetsd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Widgetsd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Multimediad.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5MultimediaWidgetsd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5PrintSupportd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Sensorsd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Sqld.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Quickd.dll" qt)
      INSTALL_EXTERNAL_LIB("Qt5Qmld.dll" qt)
    ENDIF(CMAKE_DEBUG_MODE OR MSVC)

    INSTALL_EXTERNAL_LIB("icuin*.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("icuin*.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("icuuc*.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("icuuc*.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    INSTALL_EXTERNAL_LIB("icudt*.dll" qt)
    IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
      COPY_EXTERNAL_LIB("icudt*.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
    ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

    IF(QT_VERSION VERSION_LESS 5.2)
      INSTALL_EXTERNAL_LIB("Qt5V8.dll" qt)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("Qt5V8.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

      IF(CMAKE_DEBUG_MODE OR MSVC)
        INSTALL_EXTERNAL_LIB("Qt5V8d.dll" qt)
      ENDIF(CMAKE_DEBUG_MODE OR MSVC)
    ELSE(QT_VERSION VERSION_LESS 5.2)
      INSTALL_EXTERNAL_LIB("Qt5Positioning.dll" qt)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("Qt5Positioning.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

      IF(CMAKE_DEBUG_MODE OR MSVC)
        INSTALL_EXTERNAL_LIB("Qt5Positioningd.dll" qt)
      ENDIF(CMAKE_DEBUG_MODE OR MSVC)
    ENDIF(QT_VERSION VERSION_LESS 5.2)

    IF(QT_VERSION VERSION_GREATER 5.3)
      INSTALL_EXTERNAL_LIB("Qt5WebChannel.dll" qt)
      IF(ACTIVATE_PYTHON_WHEELS_TARGETS)
        COPY_EXTERNAL_LIB("Qt5WebChannel.dll" ${TULIPGUI_PYTHON_NATIVE_FOLDER})
      ENDIF(ACTIVATE_PYTHON_WHEELS_TARGETS)

      IF(CMAKE_DEBUG_MODE OR MSVC)
        INSTALL_EXTERNAL_LIB("Qt5WebChanneld.dll" qt)
      ENDIF(CMAKE_DEBUG_MODE OR MSVC)
    ENDIF(QT_VERSION VERSION_GREATER 5.3)


  ENDIF(USE_QT5)
ENDIF(NOT BUILD_CORE_ONLY)

ENDIF(WIN32)

# Copy dependencies dylibs in Tulip Python wheels folders
# They will be distributed and relinked when generating the wheels.
IF(APPLE AND ACTIVATE_PYTHON_WHEELS_TARGETS)
COPY_REAL_LIB(${FREETYPE_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${GLEW_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${JPEG_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${PNG_LIBRARY_RELEASE} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${FREETYPE_LIBRARY} ${TULIPOGL_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTCORE_LIBRARY}/QtCore ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTGUI_LIBRARY}/QtGui ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTNETWORK_LIBRARY}/QtNetwork ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTXML_LIBRARY}/QtXml ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTOPENGL_LIBRARY}/QtOpenGL ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTWEBKIT_LIBRARY}/QtWebKit ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTXMLPATTERNS_LIBRARY}/QtXmlPatterns ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_PHONON_LIBRARY}/phonon ${TULIPGUI_PYTHON_NATIVE_FOLDER})
COPY_REAL_LIB(${QT_QTDBUS_LIBRARY}/QtDBus ${TULIPGUI_PYTHON_NATIVE_FOLDER})
ENDIF(APPLE AND ACTIVATE_PYTHON_WHEELS_TARGETS)
