Fix: change libts to export a CMake package

libts install content was not compatible to find_module() which made
using a pre-built libts binary from CMake less than ideal.

This change adds the missing files and updates export and install
commands to make libts generate a proper CMake package.

From now on an external project will be able to use find_module() to
integrate libts into its build.

Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
Change-Id: I9e86e02030f6fb3c86af45252110f939cb82670c
diff --git a/tools/cmake/common/ExportLibrary.cmake b/tools/cmake/common/ExportLibrary.cmake
index fed4e75..c171c5b 100644
--- a/tools/cmake/common/ExportLibrary.cmake
+++ b/tools/cmake/common/ExportLibrary.cmake
@@ -1,5 +1,5 @@
 #-------------------------------------------------------------------------------
-# Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
+# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
 #
 # SPDX-License-Identifier: BSD-3-Clause
 #
@@ -10,7 +10,7 @@
 
 	.. code:: cmake
 
-		export_library(TARGET LIB_NAME INTERFACE_FILES)
+		export_library(TARGET <target name> LIB_NAME <library name> PKG_CONFIG_FILE <file name>)
 
 	INPUTS:
 
@@ -20,23 +20,30 @@
 	``LIB_NAME``
 	The name of the library.
 
-	``INTERFACE_FILES``
-	List of header files to declare the library's public interface.
+	``PKG_CONFIG_FILE``
+	Name of the package configuration file to generate.
 
 #]===]
 function(export_library)
 	set(options  )
-	set(oneValueArgs TARGET LIB_NAME)
-	set(multiValueArgs INTERFACE_FILES)
+	set(oneValueArgs TARGET LIB_NAME PKG_CONFIG_FILE)
+	set(multiValueArgs)
 	cmake_parse_arguments(MY_PARAMS "${options}" "${oneValueArgs}"
 						"${multiValueArgs}" ${ARGN} )
 
-	if(NOT DEFINED MY_PARAMS_TARGET)
-		message(FATAL_ERROR "export_library: mandatory parameter TARGET not defined!")
+	foreach(_param IN ITEMS MY_PARAMS_TARGET MY_PARAMS_LIB_NAME MY_PARAMS_PKG_CONFIG_FILE)
+		if(NOT DEFINED ${_param})
+			list(APPEND _miss_params "${_param}" )
+		endif()
+	endforeach()
+
+	if (_miss_params)
+		string(REPLACE ";" ", " _miss_params "${_miss_params}")
+		message(FATAL_ERROR "export_library: mandatory parameter(s) ${_miss_params} not defined!")
 	endif()
-	if(NOT DEFINED MY_PARAMS_LIB_NAME)
-		message(FATAL_ERROR "export_library: mandatory parameter LIB_NAME not defined!")
-	endif()
+
+
+	string(TOLOWER "${MY_PARAMS_LIB_NAME}" LC_LIB_NAME)
 
 	# Set default install location if none specified
 	if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
@@ -55,18 +62,56 @@
 			DESTINATION ${TS_ENV}/include
 	)
 
-	# Install library header files files
-	install(
-		FILES ${MY_PARAMS_INTERFACE_FILES}
-		DESTINATION ${TS_ENV}/include
+	# Create targets file.
+	export(
+		EXPORT
+			${MY_PARAMS_LIB_NAME}_targets
+		FILE
+			"${CMAKE_CURRENT_BINARY_DIR}/${MY_PARAMS_LIB_NAME}Targets.cmake"
+		NAMESPACE
+			${MY_PARAMS_LIB_NAME}::
+	)
+
+	# Create a config file package.
+	include(CMakePackageConfigHelpers)
+	get_target_property(_ver ${MY_PARAMS_TARGET} VERSION)
+	write_basic_package_version_file(
+		"${CMAKE_CURRENT_BINARY_DIR}/${LC_LIB_NAME}ConfigVersion.cmake"
+		VERSION "${_ver}"
+		COMPATIBILITY SameMajorVersion
+	)
+
+	# Finalize config file.
+	# Config package location relative to install root.
+	set(ConfigPackageLocation ${TS_ENV}/lib/cmake/${MY_PARAMS_LIB_NAME})
+
+	get_filename_component(_configured_pkgcfg_name "${MY_PARAMS_PKG_CONFIG_FILE}" NAME_WLE)
+	set(_configured_pkgcfg_name "${CMAKE_CURRENT_BINARY_DIR}/${_configured_pkgcfg_name}")
+	configure_package_config_file(
+			"${MY_PARAMS_PKG_CONFIG_FILE}"
+			"${_configured_pkgcfg_name}"
+		INSTALL_DESTINATION
+			${ConfigPackageLocation}
 	)
 
 	# Install the export details
 	install(
 		EXPORT ${MY_PARAMS_LIB_NAME}_targets
-		FILE ${MY_PARAMS_LIB_NAME}_targets.cmake
+		FILE ${MY_PARAMS_LIB_NAME}Targets.cmake
 		NAMESPACE ${MY_PARAMS_LIB_NAME}::
-		DESTINATION ${TS_ENV}/lib/cmake
+		DESTINATION ${ConfigPackageLocation}
 		COMPONENT ${MY_PARAMS_LIB_NAME}
 	)
+
+
+	# install config and version files
+	install(
+		FILES
+			"${_configured_pkgcfg_name}"
+			"${CMAKE_CURRENT_BINARY_DIR}/${LC_LIB_NAME}ConfigVersion.cmake"
+		DESTINATION
+			${ConfigPackageLocation}
+		COMPONENT
+			${MY_PARAMS_LIB_NAME}
+	)
 endfunction()