set(PROJECT_NAME common-cdm)

option(BUILD_SHARED_LIBS "Build shared libraries" ON)

file(GLOB SRC *.cpp)
list(FILTER SRC EXCLUDE REGEX "cdm_bindings.cpp")
#set(COMMON_CDM_SRC ${SRC} PARENT_SCOPE)

file(GLOB HDR *.hpp)
#set(COMMON_CDM_HDR ${HDR} PARENT_SCOPE)

find_program(LSB_RELEASE lsb-release)
if(EXISTS ${LSB_RELEASE})
	execute_process(
		COMMAND lsb-release -i -s
		OUTPUT_VARIABLE DISTRO
		OUTPUT_STRIP_TRAILING_WHITESPACE)
else()
	set(USE_CONAN TRUE)
endif()

message("Distro is \"${DISTRO}\"")
if("${DISTRO}" STREQUAL "Gentoo")
	set(USE_CONAN FALSE)
else()
	set(USE_CONAN TRUE)
endif()

find_package(cppzmq REQUIRED)
find_package(fmt REQUIRED)
find_package(Poco REQUIRED Zip)
find_package(spdlog REQUIRED)
find_package(Arrow REQUIRED)
find_package(Parquet REQUIRED)

# Ugly hack for conan
if(USE_CONAN)
    include_directories(${fmt_INCLUDE_DIRS})
endif()

if(BUILD_SHARED_LIBS)
    set(COMMON_CDM_ARROW_TARGET Arrow::arrow_shared)
    set(COMMON_CDM_PARQUET_TARGET Parquet::parquet_shared)
    set(COMMON_CDM_CPPZMQ_TARGET cppzmq)
else()
    set(COMMON_CDM_ARROW_TARGET Arrow::arrow_static)
    set(COMMON_CDM_PARQUET_TARGET Parquet::parquet_static)
    set(COMMON_CDM_CPPZMQ_TARGET cppzmq-static)
endif()

if(NOT TARGET ${COMMON_CDM_ARROW_TARGET}
   OR NOT TARGET ${COMMON_CDM_PARQUET_TARGET}
   OR NOT TARGET ${COMMON_CDM_CPPZMQ_TARGET})
    message(FATAL_ERROR "Required dependency target is unavailable")
endif()

add_library(${PROJECT_NAME} ${SRC})
target_link_libraries(${PROJECT_NAME}
    PUBLIC ${COMMON_CDM_CPPZMQ_TARGET} ifae-libs spdlog::spdlog
           ${COMMON_CDM_ARROW_TARGET} ${COMMON_CDM_PARQUET_TARGET}
    PRIVATE fmt::fmt Poco::Zip)
install(TARGETS ${PROJECT_NAME}
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
