option(BUILD_SHARED_LIBS "Build shared version of the library" ON)
option(Boost_USE_STATIC_LIBS "Use static version of Boost" OFF)

if(WIN32)
    add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_PROGRAM_OPTIONS_DYN_LINK -D_WIN32_WINNT=0x0501)
endif()

if(UNIX AND NOT APPLE)
    if(Boost_USE_STATIC_LIBS)
        set(ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
        set(CMAKE_FIND_LIBRARY_SUFFIXES .a )
    endif()

    find_library(RT_LIBRARY rt)

    if(Boost_USE_STATIC_LIBS)
        set(CMAKE_FIND_LIBRARY_SUFFIXES ${ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
    endif()

    mark_as_advanced(RT_LIBRARY)
    add_definitions(-DHAVE_LIBRT)
endif()

find_package(Boost COMPONENTS date_time program_options serialization system thread REQUIRED)
find_package(Eigen REQUIRED)
find_package(Threads REQUIRED)

set(Boost_INCLUDE_DIRS "${Boost_INCLUDE_DIRS}" PARENT_SCOPE)
set(Boost_LIBRARY_DIRS "${Boost_LIBRARY_DIRS}" PARENT_SCOPE)
set(Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}" PARENT_SCOPE)

include(GenerateExportHeader)

add_compiler_export_flags()

add_library(3dv device.cc error.cc ipm.cc pose_utils.cc detail/device_impl.cc)

include_directories(${Boost_INCLUDE_DIR} ${EIGEN_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR})

target_link_libraries(3dv
    ${Boost_DATE_TIME_LIBRARY}
    ${Boost_PROGRAM_OPTIONS_LIBRARY}
    ${Boost_SERIALIZATION_LIBRARY}
    ${Boost_SYSTEM_LIBRARY}
    ${Boost_THREAD_LIBRARY}
    ${CMAKE_THREAD_LIBS_INIT}
    ${RT_LIBRARY})

set_target_properties(3dv PROPERTIES DEFINE_SYMBOL  _3dv)
generate_export_header(3dv BASE_NAME LIB3DV EXPORT_FILE_NAME 3dv_export.h)

file(COPY 
    ${CMAKE_CURRENT_BINARY_DIR}/3dv_export.h 
    DESTINATION 
    ${PROJECT_SOURCE_DIR}/lib3dv)

configure_file(version.h.in ${PROJECT_SOURCE_DIR}/lib3dv/version.h)

export(TARGETS 3dv FILE "${PROJECT_BINARY_DIR}/Lib3DVTargets.cmake")
install(TARGETS 3dv EXPORT Lib3DVTargets DESTINATION ${LIBRARY_INSTALL_DIR})

install(FILES
    3dv.h
    calibration.h
    device.h
    error.h
    image.h
    ipm.h
    obstacle.h
    point.h
    stixel.h
    terrain.h
    motion.h
    pose.h
    pose_utils.h
    candidate.h
    classification.h
    version.h
    ${PROJECT_BINARY_DIR}/lib3dv/3dv_export.h
    DESTINATION ${INCLUDE_INSTALL_DIR})
