summaryrefslogtreecommitdiff
path: root/src/test/regress
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2008-10-01 22:38:57 +0000
committerPeter Eisentraut <peter_e@gmx.net>2008-10-01 22:38:57 +0000
commitfeae7856af12ba183465b0fbbe3a586fddbd7715 (patch)
tree25c42c567ebe9b3e1921f427078bbfb9250e9fd9 /src/test/regress
parentdad4cb6258382e99409c3e0673f1a5ec5b8bf03f (diff)
downloadpostgresql-feae7856af12ba183465b0fbbe3a586fddbd7715.tar.gz
Allow pg_regress to be run outside the build tree. Look for input files
in both input and output dir, to handle vpath builds more simply.
Diffstat (limited to 'src/test/regress')
-rw-r--r--src/test/regress/GNUmakefile73
-rw-r--r--src/test/regress/input/create_function_1.source22
-rw-r--r--src/test/regress/input/create_function_2.source14
-rw-r--r--src/test/regress/output/create_function_1.source24
-rw-r--r--src/test/regress/output/create_function_2.source14
-rw-r--r--src/test/regress/pg_regress.c114
-rw-r--r--src/test/regress/pg_regress.h3
-rw-r--r--src/test/regress/pg_regress_main.c20
8 files changed, 141 insertions, 143 deletions
diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile
index deef2c60f6..835e55861f 100644
--- a/src/test/regress/GNUmakefile
+++ b/src/test/regress/GNUmakefile
@@ -6,7 +6,7 @@
# Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
# Portions Copyright (c) 1994, Regents of the University of California
#
-# $PostgreSQL: pgsql/src/test/regress/GNUmakefile,v 1.74 2008/05/30 00:04:32 tgl Exp $
+# $PostgreSQL: pgsql/src/test/regress/GNUmakefile,v 1.75 2008/10/01 22:38:57 petere Exp $
#
#-------------------------------------------------------------------------
@@ -65,9 +65,12 @@ pg_regress.o: pg_regress.c $(top_builddir)/src/port/pg_config_paths.h
$(top_builddir)/src/port/pg_config_paths.h: $(top_builddir)/src/Makefile.global
$(MAKE) -C $(top_builddir)/src/port pg_config_paths.h
-install: pg_regress$(X)
+install: all installdirs
$(INSTALL_PROGRAM) pg_regress$(X) '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
+installdirs:
+ $(mkinstalldirs) '$(DESTDIR)$(pgxsdir)/$(subdir)'
+
uninstall:
rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
@@ -83,34 +86,28 @@ all: all-lib
# Test input and expected files. These are created by pg_regress itself, so we
# don't have a rule to create them. We do need rules to clean them however.
-ifile_list := $(subst .source,, $(notdir $(wildcard $(top_srcdir)/$(subdir)/input/*.source)))
-input_files := $(foreach file, $(ifile_list), sql/$(file).sql)
-ofile_list := $(subst .source,, $(notdir $(wildcard $(top_srcdir)/$(subdir)/output/*.source)))
-output_files := $(foreach file, $(ofile_list), expected/$(file).out)
-
-ifneq ($(PORTNAME),win32)
-abs_srcdir := $(shell cd $(srcdir) && pwd)
-abs_builddir := $(shell pwd)
-else
-abs_srcdir := $(shell cd $(srcdir) && pwd -W)
-abs_builddir := $(shell pwd -W)
-endif
+input_files = $(patsubst $(srcdir)/input/%.source,sql/%.sql, $(wildcard $(srcdir)/input/*.source))
+output_files := $(patsubst $(srcdir)/output/%.source,expected/%.out, $(wildcard $(srcdir)/output/*.source))
-# When doing a VPATH build, copy over the remaining .sql and .out
-# files so that the driver script can find them. We have to use an
-# absolute path for the targets, because otherwise make will try to
-# locate the missing files using VPATH, and will find them in
-# $(srcdir), but the point here is that we want to copy them from
-# $(srcdir) to the build directory.
-ifdef VPATH
-remaining_files_src := $(wildcard $(srcdir)/sql/*.sql) $(wildcard $(srcdir)/expected/*.out) $(srcdir)/resultmap
-remaining_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(remaining_files_src))
+# not installed by default
-all: $(remaining_files_build)
-$(remaining_files_build): $(abs_builddir)/%: $(srcdir)/%
- ln -s $< $@
-endif
+regress_data_files = \
+ $(filter-out $(addprefix $(srcdir)/,$(output_files)),$(wildcard $(srcdir)/expected/*.out)) \
+ $(wildcard $(srcdir)/input/*.source) \
+ $(wildcard $(srcdir)/output/*.source) \
+ $(filter-out $(addprefix $(srcdir)/,$(input_files)),$(wildcard $(srcdir)/sql/*.sql)) \
+ $(wildcard $(srcdir)/data/*.data) \
+ $(srcdir)/parallel_schedule $(srcdir)/serial_schedule $(srcdir)/resultmap
+
+install-tests: all install install-lib installdirs-tests
+ $(MAKE) -C $(top_builddir)/contrib/spi install
+ for file in $(regress_data_files); do \
+ $(INSTALL_DATA) $$file '$(DESTDIR)$(pkglibdir)/regress/'$$file; \
+ done
+
+installdirs-tests: installdirs
+ $(mkinstalldirs) $(patsubst $(srcdir)/%/,'$(DESTDIR)$(pkglibdir)/regress/%',$(sort $(dir $(regress_data_files))))
# Get some extra C modules from contrib/spi...
@@ -144,14 +141,16 @@ tablespace-setup:
## Run tests
##
+pg_regress_call = ./pg_regress --inputdir=$(srcdir) --dlpath=. --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE)
+
check: all
- ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) --srcdir=$(abs_srcdir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) $(TEMP_CONF)
+ $(pg_regress_call) --temp-install=./tmp_check --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(TEMP_CONF)
installcheck: all
- ./pg_regress --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule --srcdir=$(abs_srcdir) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE)
+ $(pg_regress_call) --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule
installcheck-parallel: all
- ./pg_regress --psqldir=$(PSQLDIR) --schedule=$(srcdir)/parallel_schedule --srcdir=$(abs_srcdir) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE)
+ $(pg_regress_call) --psqldir=$(PSQLDIR) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT)
# old interfaces follow...
@@ -161,10 +160,10 @@ runtest: installcheck
runtest-parallel: installcheck-parallel
bigtest: all
- ./pg_regress --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule --srcdir=$(abs_srcdir) --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) numeric_big
+ $(pg_regress_call) --psqldir=$(PSQLDIR) --schedule=$(srcdir)/serial_schedule numeric_big
bigcheck: all
- ./pg_regress --temp-install=./tmp_check --top-builddir=$(top_builddir) --srcdir=$(abs_srcdir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) numeric_big
+ $(pg_regress_call) --temp-install=./tmp_check --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) numeric_big
##
@@ -173,15 +172,9 @@ bigcheck: all
clean distclean maintainer-clean: clean-lib
# things built by `all' target
- rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX)
- rm -f $(output_files) $(input_files) pg_regress_main.o pg_regress.o pg_regress$(X)
+ rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX) pg_regress_main.o pg_regress.o pg_regress$(X)
# things created by various check targets
+ rm -f $(output_files) $(input_files)
rm -rf testtablespace
rm -rf results tmp_check log
rm -f regression.diffs regression.out regress.out run_check.out
-ifeq ($(PORTNAME), cygwin)
- rm -f regress.def
-endif
-ifdef VPATH
- rm -f $(remaining_files_build)
-endif
diff --git a/src/test/regress/input/create_function_1.source b/src/test/regress/input/create_function_1.source
index 15de37ca26..a72dd9861c 100644
--- a/src/test/regress/input/create_function_1.source
+++ b/src/test/regress/input/create_function_1.source
@@ -4,52 +4,52 @@
CREATE FUNCTION widget_in(cstring)
RETURNS widget
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
CREATE FUNCTION widget_out(widget)
RETURNS cstring
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
CREATE FUNCTION int44in(cstring)
RETURNS city_budget
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
CREATE FUNCTION int44out(city_budget)
RETURNS cstring
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
CREATE FUNCTION check_primary_key ()
RETURNS trigger
- AS '@abs_builddir@/refint@DLSUFFIX@'
+ AS '@libdir@/refint@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION check_foreign_key ()
RETURNS trigger
- AS '@abs_builddir@/refint@DLSUFFIX@'
+ AS '@libdir@/refint@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION autoinc ()
RETURNS trigger
- AS '@abs_builddir@/autoinc@DLSUFFIX@'
+ AS '@libdir@/autoinc@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION funny_dup17 ()
RETURNS trigger
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION ttdummy ()
RETURNS trigger
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION set_ttdummy (int4)
RETURNS int4
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
-- Things that shouldn't work:
@@ -73,7 +73,7 @@ CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
AS 'nosuchfile';
CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
- AS '@abs_builddir@/regress@DLSUFFIX@', 'nosuchsymbol';
+ AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol';
CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal
AS 'nosuch';
diff --git a/src/test/regress/input/create_function_2.source b/src/test/regress/input/create_function_2.source
index 98ecfe855f..b1289e83a4 100644
--- a/src/test/regress/input/create_function_2.source
+++ b/src/test/regress/input/create_function_2.source
@@ -36,36 +36,36 @@ CREATE FUNCTION user_relns()
CREATE FUNCTION pt_in_widget(point, widget)
RETURNS bool
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION overpaid(emp)
RETURNS bool
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION boxarea(box)
RETURNS float8
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION interpt_pp(path, path)
RETURNS point
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION reverse_name(name)
RETURNS name
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION oldstyle_length(int4, text)
RETURNS int4
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
--
-- Function dynamic loading
--
-LOAD '@abs_builddir@/regress@DLSUFFIX@';
+LOAD '@libdir@/regress@DLSUFFIX@';
diff --git a/src/test/regress/output/create_function_1.source b/src/test/regress/output/create_function_1.source
index d3abca0caa..d2f2843a45 100644
--- a/src/test/regress/output/create_function_1.source
+++ b/src/test/regress/output/create_function_1.source
@@ -3,49 +3,49 @@
--
CREATE FUNCTION widget_in(cstring)
RETURNS widget
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
NOTICE: type "widget" is not yet defined
DETAIL: Creating a shell type definition.
CREATE FUNCTION widget_out(widget)
RETURNS cstring
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
NOTICE: argument type widget is only a shell
CREATE FUNCTION int44in(cstring)
RETURNS city_budget
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
NOTICE: type "city_budget" is not yet defined
DETAIL: Creating a shell type definition.
CREATE FUNCTION int44out(city_budget)
RETURNS cstring
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
NOTICE: argument type city_budget is only a shell
CREATE FUNCTION check_primary_key ()
RETURNS trigger
- AS '@abs_builddir@/refint@DLSUFFIX@'
+ AS '@libdir@/refint@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION check_foreign_key ()
RETURNS trigger
- AS '@abs_builddir@/refint@DLSUFFIX@'
+ AS '@libdir@/refint@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION autoinc ()
RETURNS trigger
- AS '@abs_builddir@/autoinc@DLSUFFIX@'
+ AS '@libdir@/autoinc@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION funny_dup17 ()
RETURNS trigger
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION ttdummy ()
RETURNS trigger
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION set_ttdummy (int4)
RETURNS int4
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C STRICT;
-- Things that shouldn't work:
CREATE FUNCTION test1 (int) RETURNS int LANGUAGE SQL
@@ -75,8 +75,8 @@ CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
AS 'nosuchfile';
ERROR: could not access file "nosuchfile": No such file or directory
CREATE FUNCTION test1 (int) RETURNS int LANGUAGE C
- AS '@abs_builddir@/regress@DLSUFFIX@', 'nosuchsymbol';
-ERROR: could not find function "nosuchsymbol" in file "@abs_builddir@/regress@DLSUFFIX@"
+ AS '@libdir@/regress@DLSUFFIX@', 'nosuchsymbol';
+ERROR: could not find function "nosuchsymbol" in file "@libdir@/regress@DLSUFFIX@"
CREATE FUNCTION test1 (int) RETURNS int LANGUAGE internal
AS 'nosuch';
ERROR: there is no built-in function named "nosuch"
diff --git a/src/test/regress/output/create_function_2.source b/src/test/regress/output/create_function_2.source
index 57802a4f7e..0feb975355 100644
--- a/src/test/regress/output/create_function_2.source
+++ b/src/test/regress/output/create_function_2.source
@@ -29,29 +29,29 @@ CREATE FUNCTION user_relns()
LANGUAGE SQL;
CREATE FUNCTION pt_in_widget(point, widget)
RETURNS bool
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION overpaid(emp)
RETURNS bool
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION boxarea(box)
RETURNS float8
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION interpt_pp(path, path)
RETURNS point
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION reverse_name(name)
RETURNS name
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
CREATE FUNCTION oldstyle_length(int4, text)
RETURNS int4
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '@libdir@/regress@DLSUFFIX@'
LANGUAGE C;
--
-- Function dynamic loading
--
-LOAD '@abs_builddir@/regress@DLSUFFIX@';
+LOAD '@libdir@/regress@DLSUFFIX@';
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index caff42b366..93f99eba71 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -11,7 +11,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.47 2008/08/05 05:16:08 tgl Exp $
+ * $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.48 2008/10/01 22:38:57 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -47,6 +47,10 @@ typedef struct _resultmap
* out where "make install" will put stuff under the temp_install directory.
* In non-temp_install mode, the only thing we need is the location of psql,
* which we expect to find in psqldir, or in the PATH if psqldir isn't given.
+ *
+ * XXX Because pg_regress is not installed in bindir, we can't support
+ * this for relocatable trees as it is. --psqldir would need to be
+ * specified in those cases.
*/
char *bindir = PGBINDIR;
char *libdir = LIBDIR;
@@ -70,7 +74,7 @@ _stringlist *dblist = NULL;
bool debug = false;
char *inputdir = ".";
char *outputdir = ".";
-char *psqldir = NULL;
+char *psqldir = PGBINDIR;
static _stringlist *loadlanguage = NULL;
static int max_connections = 0;
static char *encoding = NULL;
@@ -83,8 +87,8 @@ static int temp_port = 65432;
static bool nolocale = false;
static char *hostname = NULL;
static int port = -1;
+static char *dlpath = PKGLIBDIR;
static char *user = NULL;
-static char *srcdir = NULL;
static _stringlist *extraroles = NULL;
/* internal variables */
@@ -391,10 +395,8 @@ replace_string(char *string, char *replace, char *replacement)
* the given suffix.
*/
static void
-convert_sourcefiles_in(char *source, char *dest, char *suffix)
+convert_sourcefiles_in(char *source_subdir, char *dest_subdir, char *suffix)
{
- char abs_srcdir[MAXPGPATH];
- char abs_builddir[MAXPGPATH];
char testtablespace[MAXPGPATH];
char indir[MAXPGPATH];
struct stat st;
@@ -403,27 +405,7 @@ convert_sourcefiles_in(char *source, char *dest, char *suffix)
char **names;
int count = 0;
-#ifdef WIN32
- char *c;
-#endif
-
- if (!getcwd(abs_builddir, sizeof(abs_builddir)))
- {
- fprintf(stderr, _("%s: could not get current directory: %s\n"),
- progname, strerror(errno));
- exit_nicely(2);
- }
-
- /*
- * in a VPATH build, use the provided source directory; otherwise, use the
- * current directory.
- */
- if (srcdir)
- strlcpy(abs_srcdir, srcdir, MAXPGPATH);
- else
- strlcpy(abs_srcdir, abs_builddir, MAXPGPATH);
-
- snprintf(indir, MAXPGPATH, "%s/%s", abs_srcdir, source);
+ snprintf(indir, MAXPGPATH, "%s/%s", inputdir, source_subdir);
/* Check that indir actually exists and is a directory */
ret = stat(indir, &st);
@@ -441,17 +423,7 @@ convert_sourcefiles_in(char *source, char *dest, char *suffix)
/* Error logged in pgfnames */
exit_nicely(2);
-#ifdef WIN32
- /* in Win32, replace backslashes with forward slashes */
- for (c = abs_builddir; *c; c++)
- if (*c == '\\')
- *c = '/';
- for (c = abs_srcdir; *c; c++)
- if (*c == '\\')
- *c = '/';
-#endif
-
- snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", abs_builddir);
+ snprintf(testtablespace, MAXPGPATH, "%s/testtablespace", outputdir);
#ifdef WIN32
/*
@@ -490,7 +462,7 @@ convert_sourcefiles_in(char *source, char *dest, char *suffix)
/* build the full actual paths to open */
snprintf(prefix, strlen(*name) - 6, "%s", *name);
snprintf(srcfile, MAXPGPATH, "%s/%s", indir, *name);
- snprintf(destfile, MAXPGPATH, "%s/%s.%s", dest, prefix, suffix);
+ snprintf(destfile, MAXPGPATH, "%s/%s.%s", dest_subdir, prefix, suffix);
infile = fopen(srcfile, "r");
if (!infile)
@@ -508,9 +480,10 @@ convert_sourcefiles_in(char *source, char *dest, char *suffix)
}
while (fgets(line, sizeof(line), infile))
{
- replace_string(line, "@abs_srcdir@", abs_srcdir);
- replace_string(line, "@abs_builddir@", abs_builddir);
+ replace_string(line, "@abs_srcdir@", inputdir);
+ replace_string(line, "@abs_builddir@", outputdir);
replace_string(line, "@testtablespace@", testtablespace);
+ replace_string(line, "@libdir@", dlpath);
replace_string(line, "@DLSUFFIX@", DLSUFFIX);
fputs(line, outfile);
}
@@ -520,7 +493,7 @@ convert_sourcefiles_in(char *source, char *dest, char *suffix)
/*
* If we didn't process any files, complain because it probably means
- * somebody neglected to pass the needed --srcdir argument.
+ * somebody neglected to pass the needed --inputdir argument.
*/
if (count <= 0)
{
@@ -1087,7 +1060,7 @@ file_line_count(const char *file)
return l;
}
-static bool
+bool
file_exists(const char *file)
{
FILE *f = fopen(file, "r");
@@ -1792,6 +1765,34 @@ create_role(const char *rolename, const _stringlist * granted_dbs)
}
}
+static char *
+make_absolute_path(const char *in)
+{
+ char *result;
+
+ if (is_absolute_path(in))
+ result = strdup(in);
+ else
+ {
+ static char cwdbuf[MAXPGPATH];
+
+ if (!cwdbuf[0])
+ {
+ if (!getcwd(cwdbuf, sizeof(cwdbuf)))
+ {
+ fprintf(stderr, _("could not get current working directory: %s\n"), strerror(errno));
+ exit_nicely(2);
+ }
+ }
+
+ result = malloc(strlen(cwdbuf) + strlen(in) + 2);
+ sprintf(result, "%s/%s", cwdbuf, in);
+ }
+
+ canonicalize_path(result);
+ return result;
+}
+
static void
help(void)
{
@@ -1812,7 +1813,7 @@ help(void)
printf(_(" --outputdir=DIR place output files in DIR (default \".\")\n"));
printf(_(" --schedule=FILE use test ordering schedule from FILE\n"));
printf(_(" (can be used multiple times to concatenate)\n"));
- printf(_(" --srcdir=DIR absolute path to source directory (for VPATH builds)\n"));
+ printf(_(" --dlpath=DIR look for dynamic libraries in DIR\n"));
printf(_(" --temp-install=DIR create a temporary installation in DIR\n"));
printf(_("\n"));
printf(_("Options for \"temp-install\" mode:\n"));
@@ -1861,7 +1862,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
{"port", required_argument, NULL, 14},
{"user", required_argument, NULL, 15},
{"psqldir", required_argument, NULL, 16},
- {"srcdir", required_argument, NULL, 17},
+ {"dlpath", required_argument, NULL, 17},
{"create-role", required_argument, NULL, 18},
{"temp-config", required_argument, NULL, 19},
{NULL, 0, NULL, 0}
@@ -1922,22 +1923,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
add_stringlist_item(&schedulelist, optarg);
break;
case 9:
- /* temp_install must be absolute path */
- if (is_absolute_path(optarg))
- temp_install = strdup(optarg);
- else
- {
- char cwdbuf[MAXPGPATH];
-
- if (!getcwd(cwdbuf, sizeof(cwdbuf)))
- {
- fprintf(stderr, _("could not get current working directory: %s\n"), strerror(errno));
- exit_nicely(2);
- }
- temp_install = malloc(strlen(cwdbuf) + strlen(optarg) + 2);
- sprintf(temp_install, "%s/%s", cwdbuf, optarg);
- }
- canonicalize_path(temp_install);
+ temp_install = make_absolute_path(optarg);
break;
case 10:
nolocale = true;
@@ -1969,7 +1955,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
psqldir = strdup(optarg);
break;
case 17:
- srcdir = strdup(optarg);
+ dlpath = strdup(optarg);
break;
case 18:
split_to_stringlist(strdup(optarg), ", ", &extraroles);
@@ -1997,6 +1983,10 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
if (temp_install)
port = temp_port;
+ inputdir = make_absolute_path(inputdir);
+ outputdir = make_absolute_path(outputdir);
+ dlpath = make_absolute_path(dlpath);
+
/*
* Initialization
*/
diff --git a/src/test/regress/pg_regress.h b/src/test/regress/pg_regress.h
index 43ca898325..1af1095095 100644
--- a/src/test/regress/pg_regress.h
+++ b/src/test/regress/pg_regress.h
@@ -4,7 +4,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/test/regress/pg_regress.h,v 1.3 2008/01/01 19:46:00 momjian Exp $
+ * $PostgreSQL: pgsql/src/test/regress/pg_regress.h,v 1.4 2008/10/01 22:38:57 petere Exp $
*-------------------------------------------------------------------------
*/
@@ -57,3 +57,4 @@ void add_stringlist_item(_stringlist ** listhead, const char *str);
PID_TYPE spawn_process(const char *cmdline);
void exit_nicely(int code);
void replace_string(char *string, char *replace, char *replacement);
+bool file_exists(const char *file);
diff --git a/src/test/regress/pg_regress_main.c b/src/test/regress/pg_regress_main.c
index a1c160aaf8..255c97e31d 100644
--- a/src/test/regress/pg_regress_main.c
+++ b/src/test/regress/pg_regress_main.c
@@ -11,7 +11,7 @@
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/test/regress/pg_regress_main.c,v 1.3 2008/01/01 19:46:00 momjian Exp $
+ * $PostgreSQL: pgsql/src/test/regress/pg_regress_main.c,v 1.4 2008/10/01 22:38:57 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -34,12 +34,26 @@ psql_start_test(const char *testname,
char expectfile[MAXPGPATH];
char psql_cmd[MAXPGPATH * 3];
+ /*
+ * Look for files in the output dir first, consistent with a vpath
+ * search. This is mainly to create more reasonable error
+ * messages if the file is not found. It also allows local test
+ * overrides when running pg_regress outside of the source tree.
+ */
snprintf(infile, sizeof(infile), "%s/sql/%s.sql",
- inputdir, testname);
+ outputdir, testname);
+ if (!file_exists(infile))
+ snprintf(infile, sizeof(infile), "%s/sql/%s.sql",
+ inputdir, testname);
+
snprintf(outfile, sizeof(outfile), "%s/results/%s.out",
outputdir, testname);
+
snprintf(expectfile, sizeof(expectfile), "%s/expected/%s.out",
- inputdir, testname);
+ outputdir, testname);
+ if (!file_exists(expectfile))
+ snprintf(expectfile, sizeof(expectfile), "%s/expected/%s.out",
+ inputdir, testname);
add_stringlist_item(resultfiles, outfile);
add_stringlist_item(expectfiles, expectfile);