diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2008-10-01 22:38:57 +0000 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2008-10-01 22:38:57 +0000 |
commit | feae7856af12ba183465b0fbbe3a586fddbd7715 (patch) | |
tree | 25c42c567ebe9b3e1921f427078bbfb9250e9fd9 /src/test/regress | |
parent | dad4cb6258382e99409c3e0673f1a5ec5b8bf03f (diff) | |
download | postgresql-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/GNUmakefile | 73 | ||||
-rw-r--r-- | src/test/regress/input/create_function_1.source | 22 | ||||
-rw-r--r-- | src/test/regress/input/create_function_2.source | 14 | ||||
-rw-r--r-- | src/test/regress/output/create_function_1.source | 24 | ||||
-rw-r--r-- | src/test/regress/output/create_function_2.source | 14 | ||||
-rw-r--r-- | src/test/regress/pg_regress.c | 114 | ||||
-rw-r--r-- | src/test/regress/pg_regress.h | 3 | ||||
-rw-r--r-- | src/test/regress/pg_regress_main.c | 20 |
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); |