diff --git a/modules/ECMGeneratePkgConfigFile.cmake b/modules/ECMGeneratePkgConfigFile.cmake
index 11f043d..09d7e2b 100644
--- a/modules/ECMGeneratePkgConfigFile.cmake
+++ b/modules/ECMGeneratePkgConfigFile.cmake
@@ -1,179 +1,199 @@
#.rst:
# ECMGeneratePkgConfigFile
# ------------------------
#
# Generate a `pkg-config `_
# file for the benefit of
# `autotools `_-based
# projects.
#
# ::
#
# ecm_generate_pkgconfig_file(BASE_NAME
# [LIB_NAME ]
# [DEPS " [ [...]]"]
# [FILENAME_VAR ]
# [INCLUDE_INSTALL_DIR ]
# [LIB_INSTALL_DIR ]
# [DEFINES -D...]
+# [DESCRIPTION ]
# [INSTALL])
#
# ``BASE_NAME`` is the name of the module. It's the name projects will use to
# find the module.
#
# ``LIB_NAME`` is the name of the library that is being exported. If undefined,
# it will default to the ``BASE_NAME``. That means the ``LIB_NAME`` will be set
# as the name field as well as the library to link to.
#
# ``FILENAME_VAR`` is specified with a variable name. This variable will
# receive the location of the generated file will be set, within the build
# directory. This way it can be used in case some processing is required. See
# also ``INSTALL``.
#
# ``INCLUDE_INSTALL_DIR`` specifies where the includes will be installed. If
# it's not specified, it will default to ``INSTALL_INCLUDEDIR``,
# ``CMAKE_INSTALL_INCLUDEDIR`` or just "include/" in case they are specified,
# with the BASE_NAME postfixed.
#
# ``LIB_INSTALL_DIR`` specifies where the library is being installed. If it's
# not specified, it will default to ``LIB_INSTALL_DIR``,
# ``CMAKE_INSTALL_LIBDIR`` or just "lib/" in case they are specified.
#
# ``DEFINES`` is a list of preprocessor defines that it is recommended users of
# the library pass to the compiler when using it.
#
+# ``DESCRIPTION`` describes what this library is. If it's not specified, CMake
+# will first try to get the description from the metainfo.yaml file or will
+# create one based on ``LIB_NAME``.
+#
# ``INSTALL`` will cause the module to be installed to the ``pkgconfig``
# subdirectory of ``LIB_INSTALL_DIR``, unless the ``ECM_PKGCONFIG_INSTALL_DIR``
# cache variable is set to something different. Note that the first call to
# ecm_generate_pkgconfig_file with the ``INSTALL`` argument will cause
# ``ECM_PKGCONFIG_INSTALL_DIR`` to be set to the cache, and will be used in any
# subsequent calls.
#
# To properly use this macro a version needs to be set. To retrieve it,
# ``ECM_PKGCONFIG_INSTALL_DIR`` uses ``PROJECT_VERSION``. To set it, use the
# project() command (only available since CMake 3.0) or the ecm_setup_version()
# macro.
#
# Example usage:
#
# .. code-block:: cmake
#
# ecm_generate_pkgconfig_file(
# BASE_NAME KF5Archive
# DEPS Qt5Core
# FILENAME_VAR pkgconfig_filename
# INSTALL
# )
#
# Since 1.3.0.
+# ``DESCRIPTION`` available since 5.1.41
+#
#=============================================================================
# Copyright 2014 Aleix Pol Gonzalez
# Copyright 2014 David Faure
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
function(ECM_GENERATE_PKGCONFIG_FILE)
set(options INSTALL)
- set(oneValueArgs BASE_NAME LIB_NAME FILENAME_VAR INCLUDE_INSTALL_DIR LIB_INSTALL_DIR)
+ set(oneValueArgs BASE_NAME LIB_NAME FILENAME_VAR INCLUDE_INSTALL_DIR LIB_INSTALL_DIR DESCRIPTION)
set(multiValueArgs DEPS DEFINES)
cmake_parse_arguments(EGPF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(EGPF_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown keywords given to ECM_GENERATE_PKGCONFIG_FILE(): \"${EGPF_UNPARSED_ARGUMENTS}\"")
endif()
if(NOT EGPF_BASE_NAME)
message(FATAL_ERROR "Required argument BASE_NAME missing in ECM_GENERATE_PKGCONFIG_FILE() call")
endif()
if(NOT PROJECT_VERSION)
message(FATAL_ERROR "Required variable PROJECT_VERSION not set before ECM_GENERATE_PKGCONFIG_FILE() call. Did you call ecm_setup_version or project with the VERSION argument?")
endif()
if(NOT EGPF_LIB_NAME)
set(EGPF_LIB_NAME ${EGPF_BASE_NAME})
endif()
if(NOT EGPF_INCLUDE_INSTALL_DIR)
if(INCLUDE_INSTALL_DIR)
set(EGPF_INCLUDE_INSTALL_DIR "${INCLUDE_INSTALL_DIR}/${EGPF_BASE_NAME}")
elseif(CMAKE_INSTALL_INCLUDEDIR)
set(EGPF_INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${EGPF_BASE_NAME}")
else()
set(EGPF_INCLUDE_INSTALL_DIR "include/${EGPF_BASE_NAME}")
endif()
endif()
if(NOT EGPF_LIB_INSTALL_DIR)
if(LIB_INSTALL_DIR)
set(EGPF_LIB_INSTALL_DIR "${LIB_INSTALL_DIR}")
elseif(CMAKE_INSTALL_LIBDIR)
set(EGPF_LIB_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
else()
set(EGPF_LIB_INSTALL_DIR "lib")
endif()
endif()
+ if(NOT EGPF_DESCRIPTION)
+ if(EXISTS ${CMAKE_SOURCE_DIR}/metainfo.yaml)
+ file(STRINGS "${CMAKE_SOURCE_DIR}/metainfo.yaml" _EGPF_METAINFO_DESCRIPTION_STRING REGEX "^description:.*$")
+ if(_EGPF_METAINFO_DESCRIPTION_STRING)
+ string(REGEX REPLACE "^description:[ ]*(.*)" "\\1" EGPF_DESCRIPTION ${_EGPF_METAINFO_DESCRIPTION_STRING})
+ endif()
+ endif()
+ if("${EGPF_DESCRIPTION}" STREQUAL "")
+ set(EGPF_DESCRIPTION "${EGPF_LIB_NAME} library.")
+ endif()
+ endif()
set(PKGCONFIG_TARGET_BASENAME ${EGPF_BASE_NAME})
set(PKGCONFIG_TARGET_LIBNAME ${EGPF_LIB_NAME})
if (DEFINED EGPF_DEPS)
string(REPLACE ";" " " PKGCONFIG_TARGET_DEPS "${EGPF_DEPS}")
endif ()
if(IS_ABSOLUTE "${EGPF_INCLUDE_INSTALL_DIR}")
set(PKGCONFIG_TARGET_INCLUDES "-I${EGPF_INCLUDE_INSTALL_DIR}")
else()
set(PKGCONFIG_TARGET_INCLUDES "-I${CMAKE_INSTALL_PREFIX}/${EGPF_INCLUDE_INSTALL_DIR}")
endif()
if(IS_ABSOLUTE "${EGPF_LIB_INSTALL_DIR}")
set(PKGCONFIG_TARGET_LIBS "${EGPF_LIB_INSTALL_DIR}")
else()
set(PKGCONFIG_TARGET_LIBS "${CMAKE_INSTALL_PREFIX}/${EGPF_LIB_INSTALL_DIR}")
endif()
+ set(PKGCONFIG_TARGET_DESCRIPTION "${EGPF_DESCRIPTION}")
set(PKGCONFIG_TARGET_DEFINES "")
if(EGPF_DEFINES)
set(PKGCONFIG_TARGET_DEFINES "${EGPF_DEFINE}")
endif()
set(PKGCONFIG_FILENAME ${CMAKE_CURRENT_BINARY_DIR}/${PKGCONFIG_TARGET_BASENAME}.pc)
if (EGPF_FILENAME_VAR)
set(${EGPF_FILENAME_VAR} ${PKGCONFIG_FILENAME} PARENT_SCOPE)
endif()
file(WRITE ${PKGCONFIG_FILENAME}
"
Name: ${PKGCONFIG_TARGET_LIBNAME}
+Description: ${PKGCONFIG_TARGET_DESCRIPTION}
Version: ${PROJECT_VERSION}
Libs: -L${CMAKE_INSTALL_PREFIX}/${EGPF_LIB_INSTALL_DIR} -l${PKGCONFIG_TARGET_LIBNAME}
Cflags: ${PKGCONFIG_TARGET_INCLUDES} ${PKGCONFIG_TARGET_DEFINES}
Requires: ${PKGCONFIG_TARGET_DEPS}
"
)
if(EGPF_INSTALL)
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
set(ECM_PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/libdata/pkgconfig" CACHE PATH "The directory where pkgconfig will be installed to.")
else()
set(ECM_PKGCONFIG_INSTALL_DIR "${EGPF_LIB_INSTALL_DIR}/pkgconfig" CACHE PATH "The directory where pkgconfig will be installed to.")
endif()
install(FILES ${PKGCONFIG_FILENAME} DESTINATION ${ECM_PKGCONFIG_INSTALL_DIR})
endif()
endfunction()
diff --git a/tests/ECMGeneratePkgConfigFile/KF5CoreAddons.pc b/tests/ECMGeneratePkgConfigFile/KF5CoreAddons.pc
index 68e0004..adfee6f 100644
--- a/tests/ECMGeneratePkgConfigFile/KF5CoreAddons.pc
+++ b/tests/ECMGeneratePkgConfigFile/KF5CoreAddons.pc
@@ -1,6 +1,7 @@
Name: KF5CoreAddons
+Description: KF5CoreAddons test
Version: 5.43
Libs: -L/usr/lib -lKF5CoreAddons
Cflags: -I/usr/KCoreAddons
Requires: Qt5Core
diff --git a/tests/ECMGeneratePkgConfigFile/KF5CoreAddons2.pc b/tests/ECMGeneratePkgConfigFile/KF5CoreAddons2.pc
new file mode 100644
index 0000000..132a7aa
--- /dev/null
+++ b/tests/ECMGeneratePkgConfigFile/KF5CoreAddons2.pc
@@ -0,0 +1,7 @@
+
+Name: KF5CoreAddons2
+Description: Addons to QtCore
+Version: 5.43
+Libs: -L/usr/lib -lKF5CoreAddons2
+Cflags: -I/usr/KCoreAddons
+Requires: Qt5Core
diff --git a/tests/ECMGeneratePkgConfigFile/KF5CoreAddons3.pc b/tests/ECMGeneratePkgConfigFile/KF5CoreAddons3.pc
new file mode 100644
index 0000000..1f9d345
--- /dev/null
+++ b/tests/ECMGeneratePkgConfigFile/KF5CoreAddons3.pc
@@ -0,0 +1,7 @@
+
+Name: KF5CoreAddons3
+Description: KF5CoreAddons3 library.
+Version: 5.43
+Libs: -L/usr/lib -lKF5CoreAddons3
+Cflags: -I/usr/KCoreAddons
+Requires: Qt5Core
diff --git a/tests/ECMGeneratePkgConfigFile/metainfo_with_description.yaml b/tests/ECMGeneratePkgConfigFile/metainfo_with_description.yaml
new file mode 100644
index 0000000..0c0d33f
--- /dev/null
+++ b/tests/ECMGeneratePkgConfigFile/metainfo_with_description.yaml
@@ -0,0 +1,21 @@
+maintainer: mpyne
+description: Addons to QtCore
+tier: 1
+type: functional
+platforms:
+ - name: Linux
+ - name: FreeBSD
+ - name: Windows
+ - name: MacOSX
+ - name: Android
+portingAid: false
+deprecated: false
+release: true
+libraries:
+ - qmake: KCoreAddons
+ cmake: "KF5::CoreAddons"
+cmakename: KF5CoreAddons
+
+public_lib: true
+group: Frameworks
+subgroup: Tier 1
diff --git a/tests/ECMGeneratePkgConfigFile/metainfo_with_empty_description.yaml b/tests/ECMGeneratePkgConfigFile/metainfo_with_empty_description.yaml
new file mode 100644
index 0000000..c46465d
--- /dev/null
+++ b/tests/ECMGeneratePkgConfigFile/metainfo_with_empty_description.yaml
@@ -0,0 +1,21 @@
+maintainer: mpyne
+description:
+tier: 1
+type: functional
+platforms:
+ - name: Linux
+ - name: FreeBSD
+ - name: Windows
+ - name: MacOSX
+ - name: Android
+portingAid: false
+deprecated: false
+release: true
+libraries:
+ - qmake: KCoreAddons
+ cmake: "KF5::CoreAddons"
+cmakename: KF5CoreAddons
+
+public_lib: true
+group: Frameworks
+subgroup: Tier 1
diff --git a/tests/ECMGeneratePkgConfigFile/metainfo_without_description.yaml b/tests/ECMGeneratePkgConfigFile/metainfo_without_description.yaml
new file mode 100644
index 0000000..b7f094c
--- /dev/null
+++ b/tests/ECMGeneratePkgConfigFile/metainfo_without_description.yaml
@@ -0,0 +1,20 @@
+maintainer: mpyne
+tier: 1
+type: functional
+platforms:
+ - name: Linux
+ - name: FreeBSD
+ - name: Windows
+ - name: MacOSX
+ - name: Android
+portingAid: false
+deprecated: false
+release: true
+libraries:
+ - qmake: KCoreAddons
+ cmake: "KF5::CoreAddons"
+cmakename: KF5CoreAddons
+
+public_lib: true
+group: Frameworks
+subgroup: Tier 1
diff --git a/tests/ECMGeneratePkgConfigFile/run_test.cmake.config b/tests/ECMGeneratePkgConfigFile/run_test.cmake.config
index dad4369..5885c97 100644
--- a/tests/ECMGeneratePkgConfigFile/run_test.cmake.config
+++ b/tests/ECMGeneratePkgConfigFile/run_test.cmake.config
@@ -1,54 +1,109 @@
set(CMAKE_MODULE_PATH "@MODULES_DIR@")
set(CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
set(CMAKE_CURRENT_BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@")
set(CMAKE_INSTALL_PREFIX "/usr")
include(ECMGeneratePkgConfigFile)
include(ECMSetupVersion)
include(CMakeParseArguments)
function (compare_files)
set(options)
set(oneValueArgs GENERATED ORIGINALS)
set(multiValueArgs)
cmake_parse_arguments(CF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
list(LENGTH CF_GENERATED count)
foreach(i RANGE ${count})
list(GET CF_GENERATED 0 generated_file)
if (NOT EXISTS "${generated_file}")
message(FATAL_ERROR "${generated_file} was not generated")
endif()
file(READ "${generated_file}" file_contents)
string(STRIP "${file_contents}" file_contents)
list(GET CF_ORIGINALS 0 original_file)
if (NOT EXISTS "${original_file}")
message(FATAL_ERROR "Original ${original_file} was not found")
endif()
file(READ "${original_file}" original_contents)
string(STRIP "${original_contents}" original_contents)
if(NOT original_contents STREQUAL file_contents)
message(FATAL_ERROR "Different files: ${original_file} ${generated_file}")
endif()
endforeach()
endfunction()
###########################################################
ecm_setup_version(5.43 VARIABLE_PREFIX KCOREADDONS
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kcoreaddons_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5CoreAddonsConfigVersion.cmake"
SOVERSION 5)
message(STATUS "Test 1: no optional arguments")
set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddons.pc")
-ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons DEPS Qt5Core INCLUDE_INSTALL_DIR /usr/KCoreAddons FILENAME_VAR OutputFile)
+ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons
+ DESCRIPTION "KF5CoreAddons test"
+ DEPS Qt5Core
+ INCLUDE_INSTALL_DIR /usr/KCoreAddons
+ FILENAME_VAR OutputFile)
compare_files(GENERATED ${OutputFile}
ORIGINALS ${origfiles})
file(REMOVE ${OutputFile})
+
+message(STATUS "Test2: no description parameter, metainfo.yaml with description found")
+set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddons2.pc")
+
+file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/metainfo_with_description.yaml
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/metainfo_with_description.yaml ${CMAKE_CURRENT_BINARY_DIR}/metainfo.yaml)
+
+ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons2
+ DEPS Qt5Core
+ INCLUDE_INSTALL_DIR /usr/KCoreAddons
+ FILENAME_VAR OutputFile)
+
+compare_files(GENERATED ${OutputFile}
+ ORIGINALS ${origfiles})
+file(REMOVE ${OutputFile})
+file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/metainfo.yaml)
+
+message(STATUS "Test3: no description parameter, metainfo.yaml with empty description found")
+set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddons3.pc")
+
+file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/metainfo_with_empty_description.yaml
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/metainfo_with_empty_description.yaml ${CMAKE_CURRENT_BINARY_DIR}/metainfo.yaml)
+
+ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons3
+ DEPS Qt5Core
+ INCLUDE_INSTALL_DIR /usr/KCoreAddons
+ FILENAME_VAR OutputFile)
+
+compare_files(GENERATED ${OutputFile}
+ ORIGINALS ${origfiles})
+file(REMOVE ${OutputFile})
+file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/metainfo.yaml)
+
+message(STATUS "Test4: no description parameter, metainfo.yaml without description")
+set(origfiles "${CMAKE_CURRENT_SOURCE_DIR}/KF5CoreAddons3.pc")
+
+file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/metainfo_without_description.yaml
+ DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
+file(RENAME ${CMAKE_CURRENT_BINARY_DIR}/metainfo_without_description.yaml ${CMAKE_CURRENT_BINARY_DIR}/metainfo.yaml)
+
+ecm_generate_pkgconfig_file(BASE_NAME KF5CoreAddons3
+ DEPS Qt5Core
+ INCLUDE_INSTALL_DIR /usr/KCoreAddons
+ FILENAME_VAR OutputFile)
+
+compare_files(GENERATED ${OutputFile}
+ ORIGINALS ${origfiles})
+file(REMOVE ${OutputFile})
+file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/metainfo.yaml)