Re: pgsql: Require version 0.98 of Test::More for TAP tests - Mailing list pgsql-committers

From Tom Lane
Subject Re: pgsql: Require version 0.98 of Test::More for TAP tests
Date
Msg-id 3468629.1637516814@sss.pgh.pa.us
Whole thread Raw
In response to Re: pgsql: Require version 0.98 of Test::More for TAP tests  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: pgsql: Require version 0.98 of Test::More for TAP tests  (Andrew Dunstan <andrew@dunslane.net>)
List pgsql-committers
I wrote:
> Seems reasonable to me, although it's not entirely clear how to hook
> the output into configure's practices --- in particular, people using
> "./configure -q" might not be pleased by unwanted diagnostic output.
> But that could probably be dealt with.

Here's a draft patch based on Andrew's script.  I'm not entirely
satisfied with it, because I couldn't get the output to go where
I wanted.  I think that the reports of actual module versions should
go to config.log, and not appear in configure's user-visible output,
because (a) 99% of people won't care, and (b) otherwise we don't have
a good way to silence them under -q, where 100% of people won't care.

However, the only way I could get that to happen was to redirect
prove's stderr to config.log (&AS_MESSAGE_LOG_FD), which is not great
because it means that in the failure case the only place where any useful
info appears is config.log.  I tried printing the version reports to
STDOUT instead of using diag(), but that seems to get redirected to
/dev/null somewhere.  Anybody know how to get prove to not do that?

            regards, tom lane

diff --git a/config/check_modules.pl b/config/check_modules.pl
new file mode 100644
index 0000000000..55b522c6a7
--- /dev/null
+++ b/config/check_modules.pl
@@ -0,0 +1,20 @@
+#
+# Verify that required Perl modules are available,
+# in at least the required minimum versions.
+# (The required minimum versions are all quite ancient now,
+# but specify them anyway for documentation's sake.)
+#
+use IPC::Run 0.79;
+# While here, we might as well report exactly what versions we found.
+diag("IPC::Run::VERSION: $IPC::Run::VERSION");
+
+# Test::More and Time::HiRes are supposed to be part of core Perl,
+# but some distros omit them in a minimal installation.
+use Test::More 0.98;
+diag("Test::More::VERSION: $Test::More::VERSION");
+
+use Time::HiRes 1.52;
+diag("Time::HiRes::VERSION: $Time::HiRes::VERSION");
+
+ok(1);
+done_testing();
diff --git a/configure b/configure
index 977b4d3df5..c58c9ca051 100755
--- a/configure
+++ b/configure
@@ -19410,98 +19410,7 @@ fi
 # Check for test tools
 #
 if test "$enable_tap_tests" = yes; then
-  # Check for necessary modules, unless user has specified the "prove" to use;
-  # in that case it's her responsibility to have a working configuration.
-  # (prove might be part of a different Perl installation than perl, eg on
-  # MSys, so the result of AX_PROG_PERL_MODULES could be irrelevant anyway.)
-  if test -z "$PROVE"; then
-    # Test::More and Time::HiRes are supposed to be part of core Perl,
-    # but some distros omit them in a minimal installation.
-    # The required minimum versions are all quite ancient now, but specify
-    # them anyway for documentation's sake.
-
-
-
-
-
-
-
-
-
-
-# Make sure we have perl
-if test -z "$PERL"; then
-# Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PERL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$PERL"; then
-  ac_cv_prog_PERL="$PERL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_PERL="perl"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-PERL=$ac_cv_prog_PERL
-if test -n "$PERL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-
-if test "x$PERL" != x; then
-  ax_perl_modules_failed=0
-  for ax_perl_module in 'IPC::Run 0.79' 'Test::More 0.98' 'Time::HiRes 1.52' ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl module $ax_perl_module" >&5
-$as_echo_n "checking for perl module $ax_perl_module... " >&6; }
-
-    # Would be nice to log result here, but can't rely on autoconf internals
-    modversion=`$PERL -e "use $ax_perl_module; my \\\$x=q($ax_perl_module); \\\$x =~ s/ .*//; \\\$x .= q(::VERSION);
evalqq{print \\\\$\\\$x\\n}; exit;" 2>/dev/null` 
-    if test $? -ne 0; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; };
-      ax_perl_modules_failed=1
-   else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $modversion" >&5
-$as_echo "$modversion" >&6; };
-    fi
-  done
-
-  # Run optional shell commands
-  if test "$ax_perl_modules_failed" = 0; then
-    :
-
-  else
-    :
-    as_fn_error $? "Additional Perl modules are required to run TAP tests" "$LINENO" 5
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find perl" >&5
-$as_echo "$as_me: WARNING: could not find perl" >&2;}
-fi
-  fi
-  # Now make sure we know where prove is
+  # Make sure we know where prove is.
   if test -z "$PROVE"; then
   for ac_prog in prove
 do
@@ -19559,6 +19468,20 @@ fi
   if test -z "$PROVE"; then
     as_fn_error $? "prove not found" "$LINENO" 5
   fi
+  # Check for necessary Perl modules.  You might think we should use
+  # AX_PROG_PERL_MODULES here, but prove might be part of a different Perl
+  # installation than perl, eg on MSys, so we have to check using prove.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Perl modules required for TAP tests" >&5
+$as_echo_n "checking for Perl modules required for TAP tests... " >&6; }
+  "$PROVE" "$srcdir/config/check_modules.pl" >&5 2>&1
+  if test $? -eq 0; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    as_fn_error $? "Additional Perl modules are required to run TAP tests" "$LINENO" 5
+  fi
 fi

 # If compiler will take -Wl,--as-needed (or various platform-specific
diff --git a/configure.ac b/configure.ac
index 95e5169c4f..90fed2f33b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2377,23 +2377,22 @@ PGAC_PATH_PROGS(DBTOEPUB, dbtoepub)
 # Check for test tools
 #
 if test "$enable_tap_tests" = yes; then
-  # Check for necessary modules, unless user has specified the "prove" to use;
-  # in that case it's her responsibility to have a working configuration.
-  # (prove might be part of a different Perl installation than perl, eg on
-  # MSys, so the result of AX_PROG_PERL_MODULES could be irrelevant anyway.)
-  if test -z "$PROVE"; then
-    # Test::More and Time::HiRes are supposed to be part of core Perl,
-    # but some distros omit them in a minimal installation.
-    # The required minimum versions are all quite ancient now, but specify
-    # them anyway for documentation's sake.
-    AX_PROG_PERL_MODULES([IPC::Run=0.79 Test::More=0.98 Time::HiRes=1.52], ,
-      [AC_MSG_ERROR([Additional Perl modules are required to run TAP tests])])
-  fi
-  # Now make sure we know where prove is
+  # Make sure we know where prove is.
   PGAC_PATH_PROGS(PROVE, prove)
   if test -z "$PROVE"; then
     AC_MSG_ERROR([prove not found])
   fi
+  # Check for necessary Perl modules.  You might think we should use
+  # AX_PROG_PERL_MODULES here, but prove might be part of a different Perl
+  # installation than perl, eg on MSys, so we have to check using prove.
+  AC_MSG_CHECKING(for Perl modules required for TAP tests)
+  "$PROVE" "$srcdir/config/check_modules.pl" >&AS_MESSAGE_LOG_FD 2>&1
+  if test $? -eq 0; then
+    AC_MSG_RESULT(yes)
+  else
+    AC_MSG_RESULT(no)
+    AC_MSG_ERROR([Additional Perl modules are required to run TAP tests])
+  fi
 fi

 # If compiler will take -Wl,--as-needed (or various platform-specific

pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Doc: update some things relevant to minimum Test::More version.
Next
From: Tom Lane
Date:
Subject: pgsql: pg_receivewal, pg_recvlogical: allow canceling initial password