project(link C CXX)
cmake_minimum_required(VERSION 3.1)
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})

include(CheckCXXSourceCompiles)

find_package(GFlags REQUIRED)
find_package(Glog REQUIRED)
find_package(Threads REQUIRED)
find_package(Wangle REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(OnedataHelpers REQUIRED)
find_package(Boost COMPONENTS filesystem log thread context system iostreams regex REQUIRED)
find_library(PROXYGEN_LIBRARY proxygenlib REQUIRED)

add_subdirectory(proto)

set(SOURCES
  src/authCache.cpp
  src/client.cpp
  src/controlService.cpp
  src/fetchManager.cpp
  src/handleCache.cpp
  src/main.cpp
  src/reader.cpp
  src/server.cpp
  src/serverSideLink.cpp
  src/service.cpp
  src/shaper.cpp
  src/shaperMap.cpp
  src/shaperTimer.cpp
  src/ssl.cpp
  src/storage.cpp)

execute_process(
  COMMAND pkg-config --libs glusterfs-api botan-1.10 tbb fuse
  OUTPUT_VARIABLE PKG_CONFIG_RESULTS)
string(REGEX REPLACE "[^a-zA-Z0-9\\.\\-]" ";"
  PKG_CONFIG_RESULTS ${PKG_CONFIG_RESULTS})

add_executable(link ${SOURCES})
target_compile_options(link PRIVATE "-std=c++14" "-pthread" "-fno-omit-frame-pointer")
target_compile_definitions(link PUBLIC
  "-DASIO_STANDALONE"
  "-D_FILE_OFFSET_BITS=64")
target_include_directories(link PUBLIC
  ${ONEDATA_HELPERS_INCLUDE_DIR}
  ${DOUBLE_CONVERSION_INCLUDE_DIR}
  ${FOLLY_INCLUDE_DIR}
  ${GFLAGS_INCLUDE_DIR}
  ${LIBGLOG_INCLUDE_DIR}
  ${WANGLE_INCLUDE_DIR}
  ${Boost_INCLUDE_DIRS})
target_link_libraries(link
  ${ONEDATA_HELPERS_LIBRARY}
  ${DOUBLE_CONVERSION_LIBARY}
  ${FOLLY_LIBRARIES}
  ${GFLAGS_LIBRARIES}
  ${LIBGLOG_LIBRARY}
  ${WANGLE_LIBRARIES}
  ${PROXYGEN_LIBRARY}
  ${CMAKE_THREAD_LIBS_INIT}
  ${OPENSSL_LIBRARIES}
  ${Boost_LIBRARIES}
  -laws-cpp-sdk-s3 -laws-cpp-sdk-core -lcurl -lrados -lradosstriper
  -lSwift -lPocoUtil -lPocoXML -lPocoNet -lPocoFoundation
  -lnss3 -lnspr4 -liberty -levent -ldouble-conversion -ldl
  -ljemalloc -lunwind -lprofiler -lz
  ${PKG_CONFIG_RESULTS}
  proto)
