Browse Source

FindPkgConfig: return actual error when a package is not found (#15810)

In some cases, CMake returned the following error:

-- Checking for module 'foo'
--   Package 'foo' not found

When the actual error returned by pkg-config was:

  Package 'bar', required by 'foo', not found

Now, the actual error is forwarded to the user.

-- Checking for module 'foo'
--   Package 'bar', required by 'foo', not found

For the standard case (i.e. the package was indeed not found), the
CMake error was:

-- Checking for module 'foo'
--   Package 'foo' not found

But it now prints:

-- Checking for module 'foo'
--   No package 'foo' found

The associated test was also updated. ${last} refers to the last
CLI argument.
Benjamin Chrétien 10 years ago
parent
commit
1bfb527f56
2 changed files with 8 additions and 5 deletions
  1. 5 3
      Modules/FindPkgConfig.cmake
  2. 3 2
      Tests/RunCMake/FindPkgConfig/dummy-pkg-config.sh

+ 5 - 3
Modules/FindPkgConfig.cmake

@@ -328,7 +328,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma
       if (_pkg_check_modules_pkg_op)
         list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_ver}")
       else()
-        list(APPEND _pkg_check_modules_exist_query --exists)
+        list(APPEND _pkg_check_modules_exist_query --exists --print-errors --short-errors)
       endif()
 
       _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION)
@@ -342,12 +342,14 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma
       # execute the query
       execute_process(
         COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query}
-        RESULT_VARIABLE _pkgconfig_retval)
+        RESULT_VARIABLE _pkgconfig_retval
+        ERROR_VARIABLE _pkgconfig_error
+        ERROR_STRIP_TRAILING_WHITESPACE)
 
       # evaluate result and tell failures
       if (_pkgconfig_retval)
         if(NOT ${_is_silent})
-          message(STATUS "  Package '${_pkg_check_modules_pkg}' not found")
+          message(STATUS "  ${_pkgconfig_error}")
         endif()
 
         set(_pkg_check_modules_failed 1)

+ 3 - 2
Tests/RunCMake/FindPkgConfig/dummy-pkg-config.sh

@@ -10,9 +10,10 @@ case $1 in
     ;;
   --exists)
     shift
-    echo "Expected: $@"
+    eval last=\${$#}
+    echo "Expected: ${last}"
     echo "Found:    ${PKG_CONFIG_PATH}"
-    [ "$@" = "${PKG_CONFIG_PATH}" ] || exit 1
+    [ "${last}" = "${PKG_CONFIG_PATH}" ] || exit 1
     ;;
   *)
     exit 255