cmake_minimum_required(VERSION 3.16)
project(cedar_sdk_library VERSION 1.0.0 LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

find_package(CURL REQUIRED)
find_package(OpenSSL REQUIRED)

add_library(cedar_sdk_cpp STATIC
  src/cedar_sdk.cpp
)
add_library(cedar::sdk_cpp ALIAS cedar_sdk_cpp)

target_include_directories(cedar_sdk_cpp PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)
target_link_libraries(cedar_sdk_cpp PUBLIC CURL::libcurl OpenSSL::Crypto)

add_library(cedar_sdk_c STATIC
  src/cedar_sdk_c.cpp
)
add_library(cedar::sdk_c ALIAS cedar_sdk_c)

target_include_directories(cedar_sdk_c PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)
target_link_libraries(cedar_sdk_c PUBLIC cedar_sdk_cpp)

add_executable(cedar_sdk_cpp_example examples/cpp_example.cpp)
target_link_libraries(cedar_sdk_cpp_example PRIVATE cedar_sdk_cpp)

include(CMakePackageConfigHelpers)
write_basic_package_version_file(
  "${CMAKE_CURRENT_BINARY_DIR}/CedarSDKConfigVersion.cmake"
  VERSION ${PROJECT_VERSION}
  COMPATIBILITY SameMajorVersion
)

configure_package_config_file(
  "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CedarSDKConfig.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/CedarSDKConfig.cmake"
  INSTALL_DESTINATION lib/cmake/CedarSDK
)

install(TARGETS cedar_sdk_cpp cedar_sdk_c
  EXPORT CedarSDKTargets
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib
  RUNTIME DESTINATION bin
)

install(DIRECTORY include/ DESTINATION include)

install(EXPORT CedarSDKTargets
  FILE CedarSDKTargets.cmake
  NAMESPACE cedar::
  DESTINATION lib/cmake/CedarSDK
)

install(FILES
  "${CMAKE_CURRENT_BINARY_DIR}/CedarSDKConfig.cmake"
  "${CMAKE_CURRENT_BINARY_DIR}/CedarSDKConfigVersion.cmake"
  DESTINATION lib/cmake/CedarSDK
)
