|
|
|
|
@@ -84,26 +84,8 @@ macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp)
|
|
|
|
|
endif()
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
#[========================================[.rst:
|
|
|
|
|
.. command:: pkg_get_variable
|
|
|
|
|
|
|
|
|
|
Retrieves the value of a pkg-config variable ``varName`` and stores it in the
|
|
|
|
|
result variable ``resultVar`` in the calling scope.
|
|
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
|
|
pkg_get_variable(<resultVar> <moduleName> <varName>)
|
|
|
|
|
|
|
|
|
|
If ``pkg-config`` returns multiple values for the specified variable,
|
|
|
|
|
``resultVar`` will contain a :ref:`;-list <CMake Language Lists>`.
|
|
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
|
|
pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
|
|
|
|
|
#]========================================]
|
|
|
|
|
function (pkg_get_variable result pkg variable)
|
|
|
|
|
# Internal version of pkg_get_variable; expects PKG_CONFIG_PATH to already be set
|
|
|
|
|
function (_pkg_get_variable result pkg variable)
|
|
|
|
|
_pkgconfig_invoke("${pkg}" "prefix" "result" "" "--variable=${variable}")
|
|
|
|
|
set("${result}"
|
|
|
|
|
"${prefix_result}"
|
|
|
|
|
@@ -278,6 +260,102 @@ macro(_pkg_recalculate _prefix _no_cmake_path _no_cmake_environment_path _imp_ta
|
|
|
|
|
endif()
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
macro(_pkg_set_path_internal)
|
|
|
|
|
set(_extra_paths)
|
|
|
|
|
|
|
|
|
|
if(NOT _no_cmake_path)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths CMAKE_PREFIX_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths CMAKE_FRAMEWORK_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths CMAKE_APPBUNDLE_PATH)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT _no_cmake_environment_path)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths ENV CMAKE_PREFIX_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths ENV CMAKE_FRAMEWORK_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths ENV CMAKE_APPBUNDLE_PATH)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT _extra_paths STREQUAL "")
|
|
|
|
|
# Save the PKG_CONFIG_PATH environment variable, and add paths
|
|
|
|
|
# from the CMAKE_PREFIX_PATH variables
|
|
|
|
|
set(_pkgconfig_path_old "$ENV{PKG_CONFIG_PATH}")
|
|
|
|
|
set(_pkgconfig_path "${_pkgconfig_path_old}")
|
|
|
|
|
if(NOT _pkgconfig_path STREQUAL "")
|
|
|
|
|
file(TO_CMAKE_PATH "${_pkgconfig_path}" _pkgconfig_path)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Create a list of the possible pkgconfig subfolder (depending on
|
|
|
|
|
# the system
|
|
|
|
|
set(_lib_dirs)
|
|
|
|
|
if(NOT DEFINED CMAKE_SYSTEM_NAME
|
|
|
|
|
OR (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
|
|
|
|
|
AND NOT CMAKE_CROSSCOMPILING))
|
|
|
|
|
if(EXISTS "/etc/debian_version") # is this a debian system ?
|
|
|
|
|
if(CMAKE_LIBRARY_ARCHITECTURE)
|
|
|
|
|
list(APPEND _lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
else()
|
|
|
|
|
# not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties
|
|
|
|
|
get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS)
|
|
|
|
|
if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
|
|
|
list(APPEND _lib_dirs "lib32/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
|
|
|
|
|
if(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
|
|
|
list(APPEND _lib_dirs "lib64/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS)
|
|
|
|
|
if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32")
|
|
|
|
|
list(APPEND _lib_dirs "libx32/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT CMAKE_CROSSCOMPILING)
|
|
|
|
|
list(APPEND _lib_dirs "libdata/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
list(APPEND _lib_dirs "lib/pkgconfig")
|
|
|
|
|
list(APPEND _lib_dirs "share/pkgconfig")
|
|
|
|
|
|
|
|
|
|
# Check if directories exist and eventually append them to the
|
|
|
|
|
# pkgconfig path list
|
|
|
|
|
foreach(_prefix_dir ${_extra_paths})
|
|
|
|
|
foreach(_lib_dir ${_lib_dirs})
|
|
|
|
|
if(EXISTS "${_prefix_dir}/${_lib_dir}")
|
|
|
|
|
list(APPEND _pkgconfig_path "${_prefix_dir}/${_lib_dir}")
|
|
|
|
|
list(REMOVE_DUPLICATES _pkgconfig_path)
|
|
|
|
|
endif()
|
|
|
|
|
endforeach()
|
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
|
|
# Prepare and set the environment variable
|
|
|
|
|
if(NOT _pkgconfig_path STREQUAL "")
|
|
|
|
|
# remove empty values from the list
|
|
|
|
|
list(REMOVE_ITEM _pkgconfig_path "")
|
|
|
|
|
file(TO_NATIVE_PATH "${_pkgconfig_path}" _pkgconfig_path)
|
|
|
|
|
if(UNIX)
|
|
|
|
|
string(REPLACE ";" ":" _pkgconfig_path "${_pkgconfig_path}")
|
|
|
|
|
string(REPLACE "\\ " " " _pkgconfig_path "${_pkgconfig_path}")
|
|
|
|
|
endif()
|
|
|
|
|
set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Unset variables
|
|
|
|
|
unset(_lib_dirs)
|
|
|
|
|
unset(_pkgconfig_path)
|
|
|
|
|
endif()
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
macro(_pkg_restore_path_internal)
|
|
|
|
|
if(NOT _extra_paths STREQUAL "")
|
|
|
|
|
# Restore the environment variable
|
|
|
|
|
set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path_old}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
unset(_extra_paths)
|
|
|
|
|
unset(_pkgconfig_path_old)
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
###
|
|
|
|
|
macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global _prefix)
|
|
|
|
|
_pkgconfig_unset(${_prefix}_FOUND)
|
|
|
|
|
@@ -318,88 +396,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma
|
|
|
|
|
set(_pkg_check_modules_packages)
|
|
|
|
|
set(_pkg_check_modules_failed)
|
|
|
|
|
|
|
|
|
|
set(_extra_paths)
|
|
|
|
|
|
|
|
|
|
if(NOT _no_cmake_path)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths CMAKE_PREFIX_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths CMAKE_FRAMEWORK_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths CMAKE_APPBUNDLE_PATH)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT _no_cmake_environment_path)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths ENV CMAKE_PREFIX_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths ENV CMAKE_FRAMEWORK_PATH)
|
|
|
|
|
_pkgconfig_add_extra_path(_extra_paths ENV CMAKE_APPBUNDLE_PATH)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT "${_extra_paths}" STREQUAL "")
|
|
|
|
|
# Save the PKG_CONFIG_PATH environment variable, and add paths
|
|
|
|
|
# from the CMAKE_PREFIX_PATH variables
|
|
|
|
|
set(_pkgconfig_path_old "$ENV{PKG_CONFIG_PATH}")
|
|
|
|
|
set(_pkgconfig_path "${_pkgconfig_path_old}")
|
|
|
|
|
if(NOT "${_pkgconfig_path}" STREQUAL "")
|
|
|
|
|
file(TO_CMAKE_PATH "${_pkgconfig_path}" _pkgconfig_path)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Create a list of the possible pkgconfig subfolder (depending on
|
|
|
|
|
# the system
|
|
|
|
|
set(_lib_dirs)
|
|
|
|
|
if(NOT DEFINED CMAKE_SYSTEM_NAME
|
|
|
|
|
OR (CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
|
|
|
|
|
AND NOT CMAKE_CROSSCOMPILING))
|
|
|
|
|
if(EXISTS "/etc/debian_version") # is this a debian system ?
|
|
|
|
|
if(CMAKE_LIBRARY_ARCHITECTURE)
|
|
|
|
|
list(APPEND _lib_dirs "lib/${CMAKE_LIBRARY_ARCHITECTURE}/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
else()
|
|
|
|
|
# not debian, check the FIND_LIBRARY_USE_LIB32_PATHS and FIND_LIBRARY_USE_LIB64_PATHS properties
|
|
|
|
|
get_property(uselib32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS)
|
|
|
|
|
if(uselib32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
|
|
|
|
|
list(APPEND _lib_dirs "lib32/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
get_property(uselib64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
|
|
|
|
|
if(uselib64 AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
|
|
|
list(APPEND _lib_dirs "lib64/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
get_property(uselibx32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS)
|
|
|
|
|
if(uselibx32 AND CMAKE_INTERNAL_PLATFORM_ABI STREQUAL "ELF X32")
|
|
|
|
|
list(APPEND _lib_dirs "libx32/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND NOT CMAKE_CROSSCOMPILING)
|
|
|
|
|
list(APPEND _lib_dirs "libdata/pkgconfig")
|
|
|
|
|
endif()
|
|
|
|
|
list(APPEND _lib_dirs "lib/pkgconfig")
|
|
|
|
|
list(APPEND _lib_dirs "share/pkgconfig")
|
|
|
|
|
|
|
|
|
|
# Check if directories exist and eventually append them to the
|
|
|
|
|
# pkgconfig path list
|
|
|
|
|
foreach(_prefix_dir ${_extra_paths})
|
|
|
|
|
foreach(_lib_dir ${_lib_dirs})
|
|
|
|
|
if(EXISTS "${_prefix_dir}/${_lib_dir}")
|
|
|
|
|
list(APPEND _pkgconfig_path "${_prefix_dir}/${_lib_dir}")
|
|
|
|
|
list(REMOVE_DUPLICATES _pkgconfig_path)
|
|
|
|
|
endif()
|
|
|
|
|
endforeach()
|
|
|
|
|
endforeach()
|
|
|
|
|
|
|
|
|
|
# Prepare and set the environment variable
|
|
|
|
|
if(NOT "${_pkgconfig_path}" STREQUAL "")
|
|
|
|
|
# remove empty values from the list
|
|
|
|
|
list(REMOVE_ITEM _pkgconfig_path "")
|
|
|
|
|
file(TO_NATIVE_PATH "${_pkgconfig_path}" _pkgconfig_path)
|
|
|
|
|
if(UNIX)
|
|
|
|
|
string(REPLACE ";" ":" _pkgconfig_path "${_pkgconfig_path}")
|
|
|
|
|
string(REPLACE "\\ " " " _pkgconfig_path "${_pkgconfig_path}")
|
|
|
|
|
endif()
|
|
|
|
|
set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Unset variables
|
|
|
|
|
unset(_lib_dirs)
|
|
|
|
|
unset(_pkgconfig_path)
|
|
|
|
|
endif()
|
|
|
|
|
_pkg_set_path_internal()
|
|
|
|
|
|
|
|
|
|
# iterate through module list and check whether they exist and match the required version
|
|
|
|
|
foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list})
|
|
|
|
|
@@ -502,13 +499,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma
|
|
|
|
|
_pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global})
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(NOT "${_extra_paths}" STREQUAL "")
|
|
|
|
|
# Restore the environment variable
|
|
|
|
|
set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path_old}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
unset(_extra_paths)
|
|
|
|
|
unset(_pkgconfig_path_old)
|
|
|
|
|
_pkg_restore_path_internal()
|
|
|
|
|
else()
|
|
|
|
|
if (${_is_required})
|
|
|
|
|
message(SEND_ERROR "pkg-config tool not found")
|
|
|
|
|
@@ -712,6 +703,34 @@ macro(pkg_search_module _prefix _module0)
|
|
|
|
|
endif()
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
#[========================================[.rst:
|
|
|
|
|
.. command:: pkg_get_variable
|
|
|
|
|
|
|
|
|
|
Retrieves the value of a pkg-config variable ``varName`` and stores it in the
|
|
|
|
|
result variable ``resultVar`` in the calling scope.
|
|
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
|
|
pkg_get_variable(<resultVar> <moduleName> <varName>)
|
|
|
|
|
|
|
|
|
|
If ``pkg-config`` returns multiple values for the specified variable,
|
|
|
|
|
``resultVar`` will contain a :ref:`;-list <CMake Language Lists>`.
|
|
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
|
|
.. code-block:: cmake
|
|
|
|
|
|
|
|
|
|
pkg_get_variable(GI_GIRDIR gobject-introspection-1.0 girdir)
|
|
|
|
|
#]========================================]
|
|
|
|
|
function (pkg_get_variable result pkg variable)
|
|
|
|
|
_pkg_set_path_internal()
|
|
|
|
|
_pkgconfig_invoke("${pkg}" "prefix" "result" "" "--variable=${variable}")
|
|
|
|
|
set("${result}"
|
|
|
|
|
"${prefix_result}"
|
|
|
|
|
PARENT_SCOPE)
|
|
|
|
|
_pkg_restore_path_internal()
|
|
|
|
|
endfunction ()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[========================================[.rst:
|
|
|
|
|
Variables Affecting Behavior
|
|
|
|
|
|