if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
  message(STATUS "adding GCC/Clang options ")
  add_definitions(-std=gnu99 -Wall -Wextra -pedantic)
  if(COSE_C_FATAL_WARNINGS)
    add_definitions(-Werror)
  endif()
  if(COSE_C_OPTIMIZE)
    add_definitions(-Os)
    add_definitions(-DNDEBUG)
  endif()
elseif(MSVC)
  add_definitions(/W4)
  if(COSE_C_FATAL_WARNINGS)
    add_definitions(/WX)
  endif()
  if(COSE_C_OPTIMIZE)
    add_definitions(-DNDEBUG)
  endif()
else()
  message(FATAL_ERROR "unhandled compiler id: ${CMAKE_C_COMPILER_ID}")
endif()

add_library(${PROJECT_NAME})

# some structs look differently depending on the crypto lib used
# therefore we create the config header file at configure time.
configure_file(${CMAKE_CURRENT_LIST_DIR}/../include/cose/cose_configure.h.in
               ${CMAKE_BINARY_DIR}/include/cose/cose_configure.h)

if(COSE_C_USE_MBEDTLS)
  set(cose_crypto mbedtls.c)
else()
  set(cose_crypto openssl.c)
endif()

set(cose_sources
    ${PROJECT_SOURCE_DIR}/include/cose/cose.h
    ${CMAKE_BINARY_DIR}/include/cose/cose_configure.h
    cose_crypto.h
    cose_int.h
    Cose.c
    CounterSign.c
    CounterSign0.c
    MacMessage.c
    MacMessage0.c
    Sign.c
    Sign1.c
    cbor.c
    Encrypt.c
    Encrypt0.c
    Recipient.c
    SignerInfo.c
    ${cose_crypto})

target_sources(${PROJECT_NAME} PRIVATE ${cose_sources})

target_include_directories(
  ${PROJECT_NAME}
  PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
         $<INSTALL_INTERFACE:include>
  PRIVATE ../src)
target_link_libraries(${PROJECT_NAME} PRIVATE cn-cbor::cn-cbor)

if(COSE_C_USE_MBEDTLS)
  target_link_libraries(${PROJECT_NAME} PRIVATE mbedtls)
else()
  target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
  target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENSSL_LIBRARIES})
endif()

if(MSVC)
  target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32)
endif()

if(CLANG_TIDY_EXE)
  set_target_properties(${PROJECT_NAME} PROPERTIES C_CLANG_TIDY "${CLANG_TIDY_EXE}")
endif()

add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})

if(COSE_C_COVERALLS)
  include(Coveralls)
  coveralls_turn_on_coverage()

  set(COVERAGE_SRC "")
  foreach(S ${cose_sources})
    get_filename_component(S_ABS ${S} ABSOLUTE)
    list(APPEND COVERAGE_SRCS ${S_ABS})
  endforeach()

  # Create the coveralls target. If we should upload
  coveralls_setup("${COVERAGE_SRCS}" ${COSE_C_COVERALLS_SEND})
endif()

###############################################################################
#INSTALL LIBRARY
###############################################################################

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

set(COSE_C_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})

if(COSE_C_EXPORT_TARGETS)
  install(
    TARGETS ${PROJECT_NAME}
    EXPORT ${PROJECT_NAME}Targets
    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT dev
    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
  install(
    EXPORT ${PROJECT_NAME}Targets
    DESTINATION "${COSE_C_CONFIG_INSTALL_DIR}"
    NAMESPACE ${PROJECT_NAME}::
    COMPONENT dev)
endif()

configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in ${PROJECT_NAME}Config.cmake
                              INSTALL_DESTINATION ${COSE_C_CONFIG_INSTALL_DIR})
write_basic_package_version_file(${PROJECT_NAME}ConfigVersion.cmake COMPATIBILITY SameMajorVersion)
install(
  FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
        ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
  DESTINATION ${COSE_C_CONFIG_INSTALL_DIR}
  COMPONENT dev)

install(
  DIRECTORY ${PROJECT_SOURCE_DIR}/include/cose
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  COMPONENT dev
  FILES_MATCHING
  PATTERN "*.h")
install(
  DIRECTORY ${CMAKE_BINARY_DIR}/include/cose
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  COMPONENT dev
  FILES_MATCHING
  PATTERN "*.h")
