CMAKE_MINIMUM_REQUIRED(VERSION 3.16)

set(crypt-lib octo-encryption-cpp)

if (${CMAKE_BUILD_TYPE} MATCHES "Debug")
    set(crypt-lib ${crypt-lib}d)
endif()

PROJECT(${crypt-lib})

# Add CMake options to path
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/)
INCLUDE(ConfigOptions)

# set libray dimention_name accessible to outer cmake files
set(ENCRYPT-LIB ${PROJECT_NAME} CACHE INTERNAL "")

#FIND_PACKAGE(OpenSSL REQUIRED CONFIG)
FIND_PACKAGE(OpenSSL REQUIRED)

# Library definition
ADD_LIBRARY(${PROJECT_NAME} STATIC
    src/base64.cpp
    src/secure-random.cpp
    src/digests/ssl/ssl-digest.cpp
    src/encryptors/encryptor.cpp
    src/encryptors/sym-encrypt-layer-strategy.cpp
    src/encryptors/ssl/ssl-cipher.cpp
    src/encryptors/ssl/ssl-encryptor.cpp
)

if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
    set(OS "Windows")

    set(lib_path C:/msys64/mingw64/lib)

    file(GLOB libraries
            ${lib_path}/libssl.dll.a
            ${lib_path}/libcrypto.dll.a
    )
endif()

# Alias
ADD_LIBRARY(core::${PROJECT_NAME} ALIAS ${PROJECT_NAME})

# Properties
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17 POSITION_INDEPENDENT_CODE ON)

TARGET_COMPILE_OPTIONS(${PROJECT_NAME}
    PRIVATE
        $<$<NOT:$<PLATFORM_ID:Windows>>:-Werror=return-type>
        $<$<NOT:$<PLATFORM_ID:Windows>>:-Werror=switch>
)

TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME}
    PUBLIC
        # Logger includes
        ${CMAKE_CURRENT_SOURCE_DIR}/include
)

TARGET_LINK_LIBRARIES(${PROJECT_NAME}
    # System libraries
        ${libraries}
    OpenSSL::SSL
    OpenSSL::Crypto

)

# Installation of the logger
#INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
#    DESTINATION include
#)

#INSTALL(TARGETS ${PROJECT_NAME}
#    LIBRARY DESTINATION lib
#    ARCHIVE DESTINATION lib
#)

# Unittests
#ADD_SUBDIRECTORY(unittests)
#IF(DISABLE_TESTS AND NOT WIN32)
#    message(STATUS "-- TESTS ENABLED")
#    ENABLE_TESTING()
#    ADD_SUBDIRECTORY(unittests)
#ENDIF()
