cmake_minimum_required(VERSION 2.6.4)
project (cryptoauthlib)

# Set the current release version
set(VERSION "2018.10.26")
set(VERSION_MAJOR 2028)
set(VERSION_MINOR 10)
set(VERSION_PATCH 26)

# Build Options
option(BUILD_TESTS "Create Test Application with library" OFF)
set(ATCA_PKCS11 ON CACHE INTERNAL "")

# Default install root which is normally /usr/local/
set(CMAKE_INSTALL_PREFIX "/" CACHE INTERNAL "")

# If including certificate definitions into the library then include them as ATCACERT_DEF_SRC
#file(GLOB ATCACERT_DEF_SRC ABSOLUTE "app/*.c")

if(WIN32)
string(REPLACE "\\" "/" LOCAL_APP_DATA "$ENV{LOCALAPPDATA}/Microchip")
set(DEFAULT_LIB_PATH "${LOCAL_APP_DATA}" CACHE
    STRING "The default absolute library path")
set(DEFAULT_CONF_PATH "${LOCAL_APP_DATA}" CACHE
    STRING "The default location of ${PROJECT_NAME}.conf")
set(DEFAULT_STORE_PATH "${LOCAL_APP_DATA}/${PROJECT_NAME}" CACHE
    STRING "The default location of the filestore directory")
else()
include(GNUInstallDirs)
set(DEFAULT_LIB_PATH "${CMAKE_INSTALL_FULL_LIBDIR}" CACHE
    STRING "The default absolute library path")
set(DEFAULT_CONF_PATH "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${PROJECT_NAME}" CACHE
    STRING "The default location of ${PROJECT_NAME}.conf")
set(DEFAULT_STORE_PATH "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/${PROJECT_NAME}" CACHE
    STRING "The default location of the filestore directory")
endif()

set(DEFAULT_CONF_FILE_NAME "${PROJECT_NAME}.conf" CACHE 
    STRING "The default file for library configuration")

if(NOT CMAKE_BUILD_TYPE)
if(WIN32)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Default build type" FORCE)
else()
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Default build type" FORCE)
endif()
endif()

# Set up a default configuration file to install
configure_file(${PROJECT_SOURCE_DIR}/app/pkcs11/cryptoauthlib.conf.in ${PROJECT_BINARY_DIR}/${DEFAULT_CONF_FILE_NAME})

message(STATUS "Building Configuration: ${CMAKE_BUILD_TYPE}")

# Packaging
set(CPACK_PACKAGE_VENDOR "Microchip Technology Inc")
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
set(CPACK_GENERATOR "TGZ")
set(CPACK_SOURCE_GENERATOR "TGZ")
set(CPACK_SOURCE_IGNORE_FILES "build/*;\\.git/*")

include(CPack)

add_subdirectory(lib)

# Tests
if(BUILD_TESTS)
    add_subdirectory(test)
endif(BUILD_TESTS)

# Installation
install(DIRECTORY DESTINATION ${DEFAULT_CONF_PATH})
install(CODE "
        if(NOT EXISTS ${DEFAULT_CONF_PATH}/${DEFAULT_CONF_FILE_NAME})
            file(INSTALL ${PROJECT_BINARY_DIR}/${DEFAULT_CONF_FILE_NAME}
                 DESTINATION ${DEFAULT_CONF_PATH})
        endif()
        ")
install(DIRECTORY DESTINATION ${DEFAULT_STORE_PATH})
install(CODE "execute_process(COMMAND chmod 1777 ${DEFAULT_STORE_PATH})")
install(CODE "
        if(NOT EXISTS ${DEFAULT_STORE_PATH}/slot.conf.tmpl)
            file(INSTALL ${PROJECT_SOURCE_DIR}/app/pkcs11/slot.conf.tmpl
                 DESTINATION ${DEFAULT_STORE_PATH})
        endif()
        ")