#-------------------------------------------------------------------------------
# Copyright (c) 2020, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
#-------------------------------------------------------------------------------

#Read the version.txt file
get_filename_component(_MY_LOC ${CMAKE_CURRENT_LIST_FILE} DIRECTORY)
file(READ "${_MY_LOC}/version.txt" _VER_STRING)

#Extract the version number
string(REGEX MATCH "([0-9]+)\.([0-9]+)\.([0-9]+)" PACKAGE_VERSION ${_VER_STRING})

#Set some meta-data
set(TFACMF_VENDOR "Arm")
set(TFACMF_DESCRIPTION_SUMMARY "CMake framework for TF-A.")
set(PACKAGE_VERSION_MAJOR ${CMAKE_MATCH_1})
set(PACKAGE_VERSION_MINOR ${CMAKE_MATCH_2})
set(PACKAGE_VERSION_PATCH ${CMAKE_MATCH_3})
set(CPACK_RESOURCE_FILE_LICENSE "${_MY_LOC}/license.rst")
set(CPACK_RESOURCE_FILE_README "${_MY_LOC}/readme.rst")

#Compare requested version with ours and report result to find_package()
set(PACKAGE_VERSION_COMPATIBLE FALSE)
set(PACKAGE_VERSION_EXACT FALSE)

#Compare requested version to ours
if(PACKAGE_FIND_VERSION_MAJOR EQUAL PACKAGE_VERSION_MAJOR)
    set(_FIND_MP_VER "${PACKAGE_FIND_VERSION_MINOR}.${PACKAGE_FIND_VERSION_PATCH}")
    set(_MY_MP_VER "${PACKAGE_VERSION_MINOR}.${PACKAGE_VERSION_PATCH}")

    if (_FIND_MP_VER VERSION_EQUAL _MY_MP_VER)
       set(PACKAGE_VERSION_EXACT TRUE)
    elseif(_FIND_MP_VER VERSION_LESS _MY_MP_VER)
        set(PACKAGE_VERSION_COMPATIBLE TRUE)
    endif()
endif()
