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.
This commit is contained in:
Peter Eisentraut 2008-10-01 22:38:57 +00:00
parent dad4cb6258
commit feae7856af
12 changed files with 144 additions and 226 deletions

View File

@ -1,6 +1,6 @@
# PGXS: PostgreSQL extensions makefile
# $PostgreSQL: pgsql/src/makefiles/pgxs.mk,v 1.12 2008/04/07 14:15:58 petere Exp $
# $PostgreSQL: pgsql/src/makefiles/pgxs.mk,v 1.13 2008/10/01 22:38:56 petere Exp $
# This file contains generic rules to build many kinds of simple
# extension modules. You only need to set a few variables and include
@ -232,23 +232,6 @@ endif
# where to find psql for running the tests
PSQLDIR = $(bindir)
# When doing a VPATH build, must copy over the test .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
abs_builddir := $(shell pwd)
test_files_src := $(wildcard $(srcdir)/sql/*.sql) $(wildcard $(srcdir)/expected/*.out) $(wildcard $(srcdir)/data/*.data)
test_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(test_files_src))
all: $(test_files_build)
$(test_files_build): $(abs_builddir)/%: $(srcdir)/%
ln -s $< $@
endif # VPATH
.PHONY: submake
submake:
ifndef PGXS

View File

@ -1,5 +1,5 @@
# Makefile for PL/Perl
# $PostgreSQL: pgsql/src/pl/plperl/GNUmakefile,v 1.34 2008/04/07 14:15:58 petere Exp $
# $PostgreSQL: pgsql/src/pl/plperl/GNUmakefile,v 1.35 2008/10/01 22:38:56 petere Exp $
subdir = src/pl/plperl
top_builddir = ../../..
@ -50,27 +50,6 @@ all: all-lib
SPI.c: SPI.xs
$(PERL) $(perl_privlibexp)/ExtUtils/xsubpp -typemap $(perl_privlibexp)/ExtUtils/typemap $< >$@
# When doing a VPATH build, copy over the .sql and .out files so that the
# test script can find them. See comments in src/test/regress/GNUmakefile.
ifdef VPATH
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
test_files_src := $(wildcard $(srcdir)/sql/*.sql) $(wildcard $(srcdir)/expected/*.out)
test_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(test_files_src))
all: $(test_files_build)
$(test_files_build): $(abs_builddir)/%: $(srcdir)/%
ln -s $< $@
endif
install: all installdirs install-lib
installdirs: installdirs-lib

View File

@ -1,4 +1,4 @@
# $PostgreSQL: pgsql/src/pl/plpython/Makefile,v 1.29 2008/04/07 14:15:58 petere Exp $
# $PostgreSQL: pgsql/src/pl/plpython/Makefile,v 1.30 2008/10/01 22:38:56 petere Exp $
subdir = src/pl/plpython
top_builddir = ../../..
@ -66,27 +66,6 @@ include $(top_srcdir)/src/Makefile.shlib
all: all-lib
# When doing a VPATH build, copy over the .sql and .out files so that the
# test script can find them. See comments in src/test/regress/GNUmakefile.
ifdef VPATH
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
test_files_src := $(wildcard $(srcdir)/sql/*.sql) $(wildcard $(srcdir)/expected/*.out)
test_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(test_files_src))
all: $(test_files_build)
$(test_files_build): $(abs_builddir)/%: $(srcdir)/%
ln -s $< $@
endif
install: all installdirs install-lib
installdirs: installdirs-lib

View File

@ -2,7 +2,7 @@
#
# Makefile for the pltcl shared object
#
# $PostgreSQL: pgsql/src/pl/tcl/Makefile,v 1.51 2008/04/07 14:15:58 petere Exp $
# $PostgreSQL: pgsql/src/pl/tcl/Makefile,v 1.52 2008/10/01 22:38:56 petere Exp $
#
#-------------------------------------------------------------------------
@ -49,27 +49,6 @@ ifeq ($(TCL_SHARED_BUILD), 1)
all: all-lib
$(MAKE) -C modules $@
# When doing a VPATH build, copy over the .sql and .out files so that the
# test script can find them. See comments in src/test/regress/GNUmakefile.
ifdef VPATH
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
test_files_src := $(wildcard $(srcdir)/sql/*.sql) $(wildcard $(srcdir)/expected/*.out)
test_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(test_files_src))
all: $(test_files_build)
$(test_files_build): $(abs_builddir)/%: $(srcdir)/%
ln -s $< $@
endif
install: all installdirs install-lib
$(MAKE) -C modules $@

View File

@ -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)
input_files = $(patsubst $(srcdir)/input/%.source,sql/%.sql, $(wildcard $(srcdir)/input/*.source))
output_files := $(patsubst $(srcdir)/output/%.source,expected/%.out, $(wildcard $(srcdir)/output/*.source))
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
# 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.
# not installed by default
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))
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
all: $(remaining_files_build)
$(remaining_files_build): $(abs_builddir)/%: $(srcdir)/%
ln -s $< $@
endif
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

View File

@ -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';

View File

@ -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@';

View File

@ -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"

View File

@ -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@';

View File

@ -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
*/

View File

@ -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);

View File

@ -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);