FindPkgConfig: add a command to query arbitrary variables

This commit is contained in:
Ben Boeckel 2015-09-17 21:05:29 -04:00 committed by Brad King
parent 7f7f1eecfd
commit 51b83f1445
5 changed files with 45 additions and 3 deletions

View File

@ -0,0 +1,6 @@
pkg-config-variable-function
----------------------------
* The :module:`FindPkgConfig` learned a new :command:`pkg_get_variable`
command which may be used to query for arbitrary variables from a package
(such as for related tools or data and plugin install paths).

View File

@ -91,6 +91,26 @@ macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp)
endif() endif()
endmacro() endmacro()
#[========================================[.rst:
.. command:: pkg_get_variable
Retrieves the value of a variable from a package::
pkg_get_variable(<RESULT> <MODULE> <VARIABLE>)
For example:
.. code-block:: cmake
pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
#]========================================]
function (pkg_get_variable result pkg variable)
_pkgconfig_invoke("${pkg}" "prefix" "result" "" "--variable=${variable}")
set("${result}"
"${prefix_result}"
PARENT_SCOPE)
endfunction ()
# Invokes pkgconfig two times; once without '--static' and once with # Invokes pkgconfig two times; once without '--static' and once with
# '--static' # '--static'
macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp) macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp)
@ -356,9 +376,9 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma
endif() endif()
_pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion )
_pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix ) pkg_get_variable("${_pkg_check_prefix}_PREFIX" ${_pkg_check_modules_pkg} "prefix")
_pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir ) pkg_get_variable("${_pkg_check_prefix}_INCLUDEDIR" ${_pkg_check_modules_pkg} "includedir")
_pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" LIBDIR "" --variable=libdir ) pkg_get_variable("${_pkg_check_prefix}_LIBDIR" ${_pkg_check_modules_pkg} "libdir")
if (NOT ${_is_silent}) if (NOT ${_is_silent})
message(STATUS " Found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}") message(STATUS " Found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}")

View File

@ -0,0 +1 @@
-- g_ir_scanner: .*/g-ir-scanner

View File

@ -0,0 +1,9 @@
find_package(PkgConfig REQUIRED)
pkg_check_modules(GOBJECT_INTROSPECTION QUIET gobject-introspection-1.0)
if (GOBJECT_INTROSPECTION_FOUND)
pkg_get_variable(g_ir_scanner gobject-introspection-1.0 g_ir_scanner)
message(STATUS "g_ir_scanner: ${g_ir_scanner}")
else ()
message(STATUS "g_ir_scanner: skipping test; gobject-introspection-1.0 not found /g-ir-scanner")
endif ()

View File

@ -9,3 +9,9 @@ if(APPLE)
run_cmake(FindPkgConfig_CMAKE_FRAMEWORK_PATH) run_cmake(FindPkgConfig_CMAKE_FRAMEWORK_PATH)
run_cmake(FindPkgConfig_CMAKE_APPBUNDLE_PATH) run_cmake(FindPkgConfig_CMAKE_APPBUNDLE_PATH)
endif() endif()
# We need a real pkg-config to run the test for get_variable.
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
run_cmake(FindPkgConfig_GET_VARIABLE)
endif ()