diff --git a/src/interfaces/ecpg/test/Makefile b/src/interfaces/ecpg/test/Makefile index 10f53c708c..d7a7d1d1ca 100644 --- a/src/interfaces/ecpg/test/Makefile +++ b/src/interfaces/ecpg/test/Makefile @@ -59,24 +59,16 @@ pg_regress_ecpg.o: pg_regress_ecpg.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 -# When doing a VPATH build, copy over the .pgc, .stdout and .stderr -# 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)/*/*.pgc) $(wildcard $(srcdir)/expected/*.c) $(wildcard $(srcdir)/expected/*.stdout) $(wildcard $(srcdir)/expected/*.stderr) -remaining_files_build := $(patsubst $(srcdir)/%, $(abs_builddir)/%, $(remaining_files_src)) - -all: $(remaining_files_build) -$(remaining_files_build): $(abs_builddir)/%: $(srcdir)/% - ln -s $< $@ -endif - -# Common options for tests. Also pick up anything passed in EXTRA_REGRESS_OPTS -REGRESS_OPTS = --dbname=ecpg1_regression,ecpg2_regression --create-role=regress_ecpg_user1,regress_ecpg_user2 $(EXTRA_REGRESS_OPTS) +# Common options for tests +# +# Need to specify expecteddir explicitly, as the inputdir is located in the +# build directory, because the files need to be compiled. Other pg_regress +# style tests have the expecteddir in the source directory. +# +# Also pick up anything passed in EXTRA_REGRESS_OPTS. +REGRESS_OPTS = --expecteddir=$(srcdir) \ + --dbname=ecpg1_regression,ecpg2_regression --create-role=regress_ecpg_user1,regress_ecpg_user2 \ + $(EXTRA_REGRESS_OPTS) check: all $(with_temp_install) ./pg_regress $(REGRESS_OPTS) --temp-instance=./tmp_check $(TEMP_CONF) --bindir= $(pg_regress_locale_flags) $(THREAD) --schedule=$(srcdir)/ecpg_schedule sql/twophase diff --git a/src/interfaces/ecpg/test/pg_regress_ecpg.c b/src/interfaces/ecpg/test/pg_regress_ecpg.c index f920af4560..84e45ceebe 100644 --- a/src/interfaces/ecpg/test/pg_regress_ecpg.c +++ b/src/interfaces/ecpg/test/pg_regress_ecpg.c @@ -164,7 +164,7 @@ ecpg_start_test(const char *testname, char *appnameenv; snprintf(inprg, sizeof(inprg), "%s/%s", inputdir, testname); - snprintf(insource, sizeof(insource), "%s.c", testname); + snprintf(insource, sizeof(insource), "%s/%s.c", inputdir, testname); /* make a version of the test name that has dashes in place of slashes */ initStringInfo(&testname_dash); @@ -177,13 +177,13 @@ ecpg_start_test(const char *testname, snprintf(expectfile_stdout, sizeof(expectfile_stdout), "%s/expected/%s.stdout", - outputdir, testname_dash.data); + expecteddir, testname_dash.data); snprintf(expectfile_stderr, sizeof(expectfile_stderr), "%s/expected/%s.stderr", - outputdir, testname_dash.data); + expecteddir, testname_dash.data); snprintf(expectfile_source, sizeof(expectfile_source), "%s/expected/%s.c", - outputdir, testname_dash.data); + expecteddir, testname_dash.data); snprintf(outfile_stdout, sizeof(outfile_stdout), "%s/results/%s.stdout", diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index 9ca1a8d906..a803355f8e 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -73,6 +73,7 @@ _stringlist *dblist = NULL; bool debug = false; char *inputdir = "."; char *outputdir = "."; +char *expecteddir = "."; char *bindir = PGBINDIR; char *launcher = NULL; static _stringlist *loadextension = NULL; @@ -1975,6 +1976,7 @@ help(void) printf(_(" --debug turn on debug mode in programs that are run\n")); printf(_(" --dlpath=DIR look for dynamic libraries in DIR\n")); printf(_(" --encoding=ENCODING use ENCODING as the encoding\n")); + printf(_(" --expecteddir=DIR take expected files from DIR (default \".\")\n")); printf(_(" -h, --help show this help, then exit\n")); printf(_(" --inputdir=DIR take input files from DIR (default \".\")\n")); printf(_(" --launcher=CMD use CMD as launcher of psql\n")); @@ -2038,6 +2040,7 @@ regression_main(int argc, char *argv[], {"load-extension", required_argument, NULL, 22}, {"config-auth", required_argument, NULL, 24}, {"max-concurrent-tests", required_argument, NULL, 25}, + {"expecteddir", required_argument, NULL, 26}, {NULL, 0, NULL, 0} }; @@ -2164,6 +2167,9 @@ regression_main(int argc, char *argv[], case 25: max_concurrent_tests = atoi(optarg); break; + case 26: + expecteddir = pg_strdup(optarg); + break; default: /* getopt_long already emitted a complaint */ fprintf(stderr, _("\nTry \"%s -h\" for more information.\n"), @@ -2203,6 +2209,7 @@ regression_main(int argc, char *argv[], inputdir = make_absolute_path(inputdir); outputdir = make_absolute_path(outputdir); + expecteddir = make_absolute_path(expecteddir); dlpath = make_absolute_path(dlpath); /* diff --git a/src/test/regress/pg_regress.h b/src/test/regress/pg_regress.h index 2143ee0e72..d8772fec8e 100644 --- a/src/test/regress/pg_regress.h +++ b/src/test/regress/pg_regress.h @@ -53,6 +53,7 @@ extern _stringlist *dblist; extern bool debug; extern char *inputdir; extern char *outputdir; +extern char *expecteddir; extern char *launcher; extern const char *basic_diff_opts;