automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] {maint} tests: improve 'pkg-config' requirement


From: Stefano Lattarini
Subject: [PATCH] {maint} tests: improve 'pkg-config' requirement
Date: Thu, 13 Dec 2012 20:20:57 +0100

This improves (and unifies among different tests) the detection of
both the 'pkg-config' program and m4 macros provided by it; they are
needed in particular by tests on Vala support.

Before this, some Vala-related tests were failing spuriously when the
pkg-config program was available but the macros from pkg.m4 were not
made explicitly available in ACLOCAL_PATH.  These tests were:

    vala-mix vala-mix2 vala-parallel vala-vapi vala-vpath

See also similar commit 'v1.11-581-gb7d67d5' of 2011-12-22,
"tests: better handling of gettext and libtool requirements".

* t/ax/am-test-lib.sh (process_requirements): If a requirement
matches the 'pkg-config*' wildcard, try to make available to it
the pkg-config m4 macros, and skip it if it's not possible.
This is done by sourcing the 'get.sh' fragment generated by ...
* t/pkg-config-macros.sh: ... this new test, which looks in
advance for the 'pkg-config' program and the m4 macros that
comes with it.
* t/list-of-tests.mk: Add the new test.
* gen-testsuite-part (%deps_extractor): Tests requiring pkg-config
will need the m4 macros coming with it; so these tests should be
run after the 'pkg-config-macros.sh' test.  Automatically generate
proper declarations for such dependencies.
* t/vala-header.sh: No need to explicitly check that the macro
PKG_CHECK_MODULES has been expanded by autoconf.
* t/vala-libs.sh: Likewise.
* t/vala-non-recursive-setup.sh: Likewise.
* t/vala-per-target-flags.sh: Likewise.
* t/vala-recursive-setup.sh: Likewise.

Signed-off-by: Stefano Lattarini <address@hidden>
---

 I will push this by tomorrow.  Reviews are welcome.

 Regards,
   Stefano

 gen-testsuite-part            |  5 +++
 t/ax/am-test-lib.sh           | 14 +++----
 t/list-of-tests.mk            |  3 +-
 t/pkg-config-macros.sh        | 94 +++++++++++++++++++++++++++++++++++++++++++
 t/vala-headers.sh             |  2 -
 t/vala-libs.sh                |  2 -
 t/vala-non-recursive-setup.sh |  2 -
 t/vala-per-target-flags.sh    |  2 -
 t/vala-recursive-setup.sh     |  2 -
 9 files changed, 108 insertions(+), 18 deletions(-)
 create mode 100755 t/pkg-config-macros.sh

diff --git a/gen-testsuite-part b/gen-testsuite-part
index 96f43cc..a95fb04 100755
--- a/gen-testsuite-part
+++ b/gen-testsuite-part
@@ -154,6 +154,11 @@ my %deps_extractor =
         line_matcher => qr/^\s*required=.*\bgettext/,
         nodist_prereqs => "$testdir/gettext-macros.log",
       },
+    pkgconfig_macros =>
+      {
+        line_matcher => qr/^\s*required=.*\bpkg-config/,
+        nodist_prereqs => "$testdir/pkg-config-macros.log",
+      },
     use_trivial_test_driver =>
       {
         line_matcher => qr/\btrivial-test-driver\b/,
diff --git a/t/ax/am-test-lib.sh b/t/ax/am-test-lib.sh
index 5725f28..29ed61a 100644
--- a/t/ax/am-test-lib.sh
+++ b/t/ax/am-test-lib.sh
@@ -800,14 +800,14 @@ process_requirements ()
   for am_tool in $*; do
     require_tool $am_tool
   done
+  # We might need extra m4 macros, e.g., for Libtool or Gettext.
+  for am_tool in gettext libtool pkg-config; do
+    case " $required " in
+      # The lack of whitespace after $am_tool is intended.
+      *" $am_tool"*) . ./t/$am_tool-macros.dir/get.sh;;
+    esac
+  done
   am_tool=; unset am_tool
-  # We might need extra macros, e.g., from Libtool or Gettext.
-  case " $required " in
-    *\ libtool*) . ./t/libtool-macros.dir/get.sh;;
-  esac
-  case " $required " in
-    *\ gettext*) . ./t/gettext-macros.dir/get.sh;;
-  esac
 }
 
 ## ---------------------------------------------------------------- ##
diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk
index 8b58c2f..1771ef6 100644
--- a/t/list-of-tests.mk
+++ b/t/list-of-tests.mk
@@ -1279,7 +1279,8 @@ t/yflags-force-conditional.sh \
 t/yflags-force-override.sh \
 t/yflags-var-expand.sh \
 t/libtool-macros.sh \
-t/gettext-macros.sh
+t/gettext-macros.sh \
+t/pkg-config-macros.sh
 
 print-list-of-tests:
        @echo $(handwritten_TESTS)
diff --git a/t/pkg-config-macros.sh b/t/pkg-config-macros.sh
new file mode 100755
index 0000000..06a65e3
--- /dev/null
+++ b/t/pkg-config-macros.sh
@@ -0,0 +1,94 @@
+#! /bin/sh
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Try to find the pkg-config '.m4' files and make them easily accessed
+# to the test cases requiring them.
+
+. ./defs || exit 1
+
+echo "# Automatically generated by $me." > get.sh
+echo : >> get.sh
+
+if ver=$(pkg-config --version) && test -n "$ver"; then
+   echo "printf 'pkg-config version: %s\\n' '$ver'" >> get.sh
+else
+   echo "skip_all_ \"'pkg-config' not available\"" >> get.sh
+fi
+
+cat > configure.ac <<'END'
+AC_INIT([pkg], [1.0])
+PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.4])
+END
+
+have_pkg_config_macros ()
+{
+  $AUTOCONF && ! $FGREP PKG_CHECK_MODULES configure
+}
+
+if have_pkg_config_macros; then
+  # The pkg-config macros are already available, nothing to do.
+  exit 0
+fi
+
+# Usual locations where pkg.m4 *might* be installed.
+XT_ACLOCAL_PATH=/usr/local/share/aclocal:/usr/share/aclocal
+
+# Find the location of the pkg-config executable.
+oIFS=$IFS dir=
+for d in $PATH; do
+  IFS=$oIFS
+  if test -f $dir/pkg-config || test -f $dir/pkg-config.exe; then
+    dir=$d
+    break
+  fi
+done
+IFS=$oIFS
+
+# Now try to use the location of the pkg-config executable to guess
+# where the corresponding pkg.m4 might be installed.
+if test -n "$dir"; then
+  # Only support standard installation layouts.
+  XT_ACLOCAL_PATH=${dir%/bin}/share/alocal:$XT_ACLOCAL_PATH
+fi
+
+XT_ACLOCAL_PATH=$XT_ACLOCAL_PATH${ACLOCAL_PATH+":$ACLOCAL_PATH"}
+
+# Try once again to fetch the pkg-config macros.
+mkdir m4
+ACLOCAL_PATH=$XT_ACLOCAL_PATH $ACLOCAL --install -I m4
+if test -f m4/pkg.m4 && have_pkg_config_macros; then
+   echo "ACLOCAL_PATH='$(pwd)/m4':\$ACLOCAL_PATH" >> get.sh
+   echo "export ACLOCAL_PATH" >> get.sh
+   echo "sed 20q '$(pwd)/m4/pkg.m4' # For debugging." >> get.sh
+else
+   echo "skip_all_ \"pkg-config m4 macros not found\"" >> get.sh
+fi
+
+ACLOCAL_PATH=; unset ACLOCAL_PATH
+. ./get.sh
+
+$ACLOCAL --force -I m4 || cat >> get.sh <<'END'
+# We need to use '-Wno-syntax', since we do not want our test suite
+# to fail merely because some third-party '.m4' file is underquoted.
+ACLOCAL="$ACLOCAL -Wno-syntax"
+END
+
+# The pkg-config m4 file(s) we might fetched will be copied in the
+# 'm4' subdirectory of the test directory are going to be needed by
+# other tests, so we must not remove the test directory.
+keep_testdirs=yes
+
+:
diff --git a/t/vala-headers.sh b/t/vala-headers.sh
index 79a7b27..9d2f95f 100755
--- a/t/vala-headers.sh
+++ b/t/vala-headers.sh
@@ -62,8 +62,6 @@ $ACLOCAL
 $AUTOCONF
 $AUTOMAKE -a
 
-grep PKG_CHECK_MODULES configure && skip_ "pkg-config m4 macros not found"
-
 ./configure
 $MAKE
 
diff --git a/t/vala-libs.sh b/t/vala-libs.sh
index 852051b..8739448 100755
--- a/t/vala-libs.sh
+++ b/t/vala-libs.sh
@@ -49,8 +49,6 @@ $ACLOCAL
 $AUTOCONF
 $AUTOMAKE -a
 
-grep PKG_CHECK_MODULES configure && skip_ "pkg-config m4 macros not found"
-
 ./configure
 
 cat > mu2.c << 'END'
diff --git a/t/vala-non-recursive-setup.sh b/t/vala-non-recursive-setup.sh
index 96135d3..67c7920 100755
--- a/t/vala-non-recursive-setup.sh
+++ b/t/vala-non-recursive-setup.sh
@@ -50,8 +50,6 @@ $ACLOCAL
 $AUTOCONF
 $AUTOMAKE -a
 
-grep PKG_CHECK_MODULES configure && skip_ "pkg-config m4 macros not found"
-
 ./configure
 $MAKE
 test -f src/zardoz.c
diff --git a/t/vala-per-target-flags.sh b/t/vala-per-target-flags.sh
index 5eae281..f73b587 100755
--- a/t/vala-per-target-flags.sh
+++ b/t/vala-per-target-flags.sh
@@ -68,8 +68,6 @@ $ACLOCAL
 $AUTOCONF
 $AUTOMAKE -a
 
-grep PKG_CHECK_MODULES configure && skip_ "pkg-config m4 macros not found"
-
 ./configure
 $MAKE
 
diff --git a/t/vala-recursive-setup.sh b/t/vala-recursive-setup.sh
index 2543c78..a0cc438 100755
--- a/t/vala-recursive-setup.sh
+++ b/t/vala-recursive-setup.sh
@@ -56,8 +56,6 @@ $ACLOCAL
 $AUTOCONF
 $AUTOMAKE -a
 
-grep PKG_CHECK_MODULES configure && skip_ "pkg-config m4 macros not found"
-
 ./configure
 $MAKE
 
-- 
1.8.0.1.347.gf94c325




reply via email to

[Prev in Thread] Current Thread [Next in Thread]