#
# CMakeLists for calyp lib component
#

INCLUDE(GNUInstallDirs)
SET(CMAKE_EXPORT_PACKAGE_REGISTRY ON)
EXPORT(PACKAGE MyLib)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..)

SET(Calyp_Lib_Frame_SRCS CalypPixel.cpp PixelFormats.h PixelFormats.cpp CalypFrame.h CalypFrame.cpp CalypPlane.h)

SET(Calyp_Lib_Stream_SRCS
    CalypStream.h
    CalypStream.cpp
    CalypStreamHandlerIf.h
    StreamHandlerRaw.h
    StreamHandlerRaw.cpp
    StreamHandlerPortableMap.h
    StreamHandlerPortableMap.cpp
)

SET(Calyp_Lib_OptionParser_SRCS CalypOptions.h CalypOptions.cpp)

SET(Calyp_Lib_Modules_SRCS CalypOptions.h CalypOptions.cpp)

SET(Calyp_Lib_SRCS CalypLib.h CalypDefs.h ${Calyp_Lib_Frame_SRCS} ${Calyp_Lib_Stream_SRCS} ${Calyp_Lib_OptionParser_SRCS} ${Calyp_Lib_Modules_SRCS})

LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})

IF(USE_FFMPEG)
  LIST(APPEND Calyp_Lib_SRCS StreamHandlerLibav.h)
  LIST(APPEND Calyp_Lib_SRCS StreamHandlerLibav.cpp)

  LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${FFMPEG_LIBRARIES})
  LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${FFMPEG_INCLUDE_DIRS})

  INCLUDE_DIRECTORIES(${FFMPEG_INCLUDE_DIRS})

  LIST(APPEND CALYP_LIB_LINKER_DEPENDENCIES ${FFMPEG_LIBRARIES})
ENDIF()

IF(USE_OPENCV)
  LIST(APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.h)
  LIST(APPEND Calyp_Lib_SRCS StreamHandlerOpenCV.cpp)

  LIST(APPEND Calyp_Lib_SRCS CalypOpenCVModuleIf.cpp)

  LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${OpenCV_LIBRARIES})
  LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${OpenCV_INCLUDE_DIRS})

  LIST(APPEND CMAKE_CFG_LINKER_LIBSS ${PROJECT_LIBRARY})
  LIST(APPEND CMAKE_CFG_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})

  INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})

  LIST(APPEND CALYP_LIB_LINKER_DEPENDENCIES ${OpenCV_LIBRARIES})
ENDIF()

SET(Calyp_Lib_HEADERS CalypDefs.h CalypFrame.h CalypStream.h CalypOptions.h CalypModuleIf.h CalypOpenCVModuleIf.h)

INCLUDE(CMakePackageConfigHelpers)

CONFIGURE_PACKAGE_CONFIG_FILE(CalypConfig.cmake.in CalypConfig.cmake INSTALL_DESTINATION share/calyp)

WRITE_BASIC_PACKAGE_VERSION_FILE(
  CalypConfigVersion.cmake
  VERSION ${CALYP_VERSION}
  COMPATIBILITY SameMajorVersion
)

# CONFIGURE_FILE(CalypConfig.cmake.in CalypConfig.cmake @ONLY)

IF(USE_STATIC)
  ADD_LIBRARY(${PROJECT_LIBRARY} STATIC ${Calyp_Lib_SRCS})
ELSE()
  ADD_LIBRARY(${PROJECT_LIBRARY} SHARED ${Calyp_Lib_SRCS})
ENDIF()

TARGET_LINK_LIBRARIES(${PROJECT_LIBRARY} ${CALYP_LIB_LINKER_DEPENDENCIES})
# TARGET_INCLUDE_DIRECTORIES(${PROJECT_LIBRARY} PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
SET_TARGET_PROPERTIES(${PROJECT_LIBRARY} PROPERTIES VERSION ${CALYP_VERSION} SOVERSION ${CALYP_VERSION_MAJOR})

EXPORT(TARGETS ${PROJECT_LIBRARY} FILE ${CMAKE_CURRENT_BINARY_DIR}/CalypTargets.cmake)
EXPORT(PACKAGE ${PROJECT_LIBRARY})

IF(NOT USE_STATIC)
  INSTALL(
    TARGETS ${PROJECT_LIBRARY}
    EXPORT "${PROJECT_LIBRARY}Targets"
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
  )
  INSTALL(FILES ${Calyp_Lib_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
  INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CalypConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/CalypConfigVersion.cmake DESTINATION share/calyp)
  INSTALL(EXPORT CalypTargets DESTINATION share/calyp)

ENDIF()

IF(BUILD_TESTS)
  ADD_SUBDIRECTORY(tests)
  ADD_SUBDIRECTORY(catch2)
ENDIF()
