diff --git a/configure b/configure
index bfa00366f66..53d2e08e74e 100755
--- a/configure
+++ b/configure
@@ -728,6 +728,7 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
+enable_tap_tests
enable_dtrace
DTRACEFLAGS
DTRACE
@@ -806,6 +807,7 @@ enable_debug
enable_profiling
enable_coverage
enable_dtrace
+enable_tap_tests
with_blocksize
with_segsize
with_wal_blocksize
@@ -1474,6 +1476,7 @@ Optional Features:
--enable-profiling build with profiling enabled
--enable-coverage build with coverage testing instrumentation
--enable-dtrace build with DTrace support
+ --enable-tap-tests enable TAP tests (requires Perl and IPC::Run)
--enable-depend turn on automatic dependency tracking
--enable-cassert enable assertion checks (for debugging)
--disable-thread-safety disable thread-safety in client libraries
@@ -3436,6 +3439,34 @@ fi
+#
+# TAP tests
+#
+
+
+# Check whether --enable-tap-tests was given.
+if test "${enable_tap_tests+set}" = set; then :
+ enableval=$enable_tap_tests;
+ case $enableval in
+ yes)
+ :
+ ;;
+ no)
+ :
+ ;;
+ *)
+ as_fn_error $? "no argument expected for --enable-tap-tests option" "$LINENO" 5
+ ;;
+ esac
+
+else
+ enable_tap_tests=no
+
+fi
+
+
+
+
#
# Block size
#
@@ -14655,7 +14686,8 @@ done
#
# Check for test tools
#
-for ac_prog in prove
+if test "$enable_tap_tests" = yes; then
+ for ac_prog in prove
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -14697,6 +14729,13 @@ fi
test -n "$PROVE" && break
done
+ if test -z "$PROVE"; then
+ as_fn_error $? "prove not found" "$LINENO" 5
+ fi
+ if test -z "$PERL"; then
+ as_fn_error $? "Perl not found" "$LINENO" 5
+ fi
+fi
# Thread testing
diff --git a/configure.in b/configure.in
index 59614dac53d..617e7158eec 100644
--- a/configure.in
+++ b/configure.in
@@ -223,6 +223,13 @@ fi
AC_SUBST(DTRACEFLAGS)])
AC_SUBST(enable_dtrace)
+#
+# TAP tests
+#
+PGAC_ARG_BOOL(enable, tap-tests, no,
+ [enable TAP tests (requires Perl and IPC::Run)])
+AC_SUBST(enable_tap_tests)
+
#
# Block size
#
@@ -1908,7 +1915,15 @@ AC_CHECK_PROGS(OSX, [osx sgml2xml sx])
#
# Check for test tools
#
-AC_CHECK_PROGS(PROVE, prove)
+if test "$enable_tap_tests" = yes; then
+ AC_CHECK_PROGS(PROVE, prove)
+ if test -z "$PROVE"; then
+ AC_MSG_ERROR([prove not found])
+ fi
+ if test -z "$PERL"; then
+ AC_MSG_ERROR([Perl not found])
+ fi
+fi
# Thread testing
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index ec9d0593eca..72e8979fff4 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -1271,6 +1271,16 @@ su - postgres
+
+
+
+
+ Enable tests using the Perl TAP tools. This requires a Perl
+ installation and the Perl module IPC::Run.
+ See for more information.
+
+
+
diff --git a/doc/src/sgml/regress.sgml b/doc/src/sgml/regress.sgml
index 13802e8f419..71196a1aca3 100644
--- a/doc/src/sgml/regress.sgml
+++ b/doc/src/sgml/regress.sgml
@@ -676,7 +676,7 @@ make -C src/bin check PROVE_FLAGS='--reverse'
The tests written in Perl require the Perl
- module IPC::Run, otherwise most tests will be skipped.
+ module IPC::Run.
This module is available from CPAN or an operating system package.
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 8c1ee2e0858..aa54f94763e 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -174,6 +174,7 @@ enable_nls = @enable_nls@
enable_debug = @enable_debug@
enable_dtrace = @enable_dtrace@
enable_coverage = @enable_coverage@
+enable_tap_tests = @enable_tap_tests@
enable_thread_safety = @enable_thread_safety@
python_enable_shared = @python_enable_shared@
@@ -310,6 +311,8 @@ define ld_library_path_var
$(if $(filter $(PORTNAME),darwin),DYLD_LIBRARY_PATH,$(if $(filter $(PORTNAME),aix),LIBPATH,LD_LIBRARY_PATH))
endef
+ifeq ($(enable_tap_tests),yes)
+
define prove_installcheck
cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl
endef
@@ -320,6 +323,11 @@ $(MAKE) -C $(top_builddir) DESTDIR='$(CURDIR)'/tmp_check/install install >'$(CUR
cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(CURDIR)/tmp_check/install$(bindir):$$PATH" $(call add_to_path,$(ld_library_path_var),$(CURDIR)/tmp_check/install$(libdir)) PGPORT='6$(DEF_PGPORT)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) t/*.pl
endef
+else
+prove_installcheck = @echo "TAP tests not enabled"
+prove_check = $(prove_installcheck)
+endif
+
# Installation.
install_bin = @install_bin@
diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index cdb5e31c362..46a8bece1e5 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -25,19 +25,9 @@ our @EXPORT = qw(
use Cwd;
use File::Spec;
use File::Temp ();
+use IPC::Run qw(run start);
use Test::More;
-BEGIN
-{
- eval {
- require IPC::Run;
- import IPC::Run qw(run start);
- 1;
- } or do
- {
- plan skip_all => "IPC::Run not available";
- };
-}
# Set to untranslated messages, to be able to compare program output
# with expected strings.