[bugfix]"make installcheck" could not work in PGXS
Hello,
I found that "make installcheck" could not work in PGXS.
--[/src/foo_project/Makefile]--
SUBDIRS = foo
TAP_TESTS = 1
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
$(recurse)
$(recurse_always)
--[/src/foo_project/t/001_foo_test.pl]
use strict;
use warnings;
use PostgresNode;
use TestLib;
# Replace with the number of tests to execute:
use Test::More tests => 1;
my $node = PostgresNode->get_new_node('primary');
$node->init; ## --> Bailout called in PostgresNode.pm that refers PG_REGRESS environment variable.
--[log]--
cd /src/foo_project
make installcheck
:
:
rm -rf '/src/foo_project'/tmp_check
/bin/mkdir -p '/src/foo_project'/tmp_check
cd ./ && TESTDIR='/src/foo_project' PATH="/installdir/bin:$PATH" PGPORT='65432' top_builddir='/src/foo_project//installdir/lib/pgxs/src/makefiles/../..' PG_REGRESS='/src/foo_project//installdir/lib/pgxs/src/makefiles/../../src/test/regress/pg_regress' REGRESS_SHLIB='/src/test/regress/regress.so' /bin/prove -I /installdir/lib/pgxs/src/makefiles/../../src/test/perl/ -I ./ t/*.pl
t/001_foo_test.pl .... Bailout called. Further testing stopped: system /src/foo_project//installdir/lib/pgxs/src/makefiles/../../src/test/regress/pg_regress failed
FAILED--Further testing stopped: system /src/foo_project//installdir/lib/pgxs/src/makefiles/../../src/test/regress/pg_regress failed
make: *** [installcheck] Error 255
The cause is in [Makefile.global.in].
Althogh $(CURDIR) is '/src/foo_project' and $(top_builddir) is '/installdir/lib/pgxs',
the code concatenates them for setting PG_REGRESS.
``
define prove_installcheck
rm -rf '$(CURDIR)'/tmp_check
$(MKDIR_P) '$(CURDIR)'/tmp_check
cd $(srcdir) && TESTDIR='$(CURDIR)' PATH="$(bindir):$$PATH" PGPORT='6$(DEF_PGPORT)' top_builddir='$(CURDIR)/$(top_builddir)' PG_REGRESS='$(CURDIR)/$(top_builddir)/src/test/regress/pg_regress' REGRESS_SHLIB='$(abs_top_builddir)/src/test/regress/regress$(DLSUFFIX)' $(PROVE) $(PG_PROVE_FLAGS) $(PROVE_FLAGS) $(if $(PROVE_TESTS),$(PROVE_TESTS),t/*.pl)
endef
``
In non-PGXS environment, top_builddir is a relative path against the top of postgresql source tree.
But, in PGXS, top_builddir is a absolute path like /installdir/lib/pgxs/src/makefiles intentionally.
The existing code of [Makefile.global.in] does not consider it.
I make a patch. (It may not to be smart.)
Please your comments.
Regards
Ryo Matsumura
Attachments:
bug_pgxs_installcheck.v1.patchapplication/octet-stream; name=bug_pgxs_installcheck.v1.patchDownload+7-0
On Fri, Jul 31, 2020 at 08:31:56AM +0000, matsumura.ryo@fujitsu.com wrote:
I found that "make installcheck" could not work in PGXS.
Yeah, that's a known problem. One way to counter that is for example
to grab the path of pg_regress from pg_config --libdir and set
$ENV{PG_REGRESS} to it, but that's hacky. So I agree that it would be
good to do something.
In non-PGXS environment, top_builddir is a relative path against the top of postgresql source tree.
But, in PGXS, top_builddir is a absolute path like /installdir/lib/pgxs/src/makefiles intentionally.
The existing code of [Makefile.global.in] does not consider it.I make a patch. (It may not to be smart.)
Please your comments.
Not sure that this goes completely to the right direction. It seems
to me that we should have room to set and use PG_REGRESS also for
pg_regress_check and pg_regress_installcheck.
--
Michael
Hello,
On Fri, Aug 5, 2020 at 10:57:56 +0000, Michael Paquier <michael(at)paquier(dot)xyz> wrote:
Yeah, that's a known problem. One way to counter that is for example
to grab the path of pg_regress from pg_config --libdir and set
$ENV{PG_REGRESS} to it, but that's hacky. So I agree that it would be
good to do something.
Thank you.
I attach a new patch.
Not sure that this goes completely to the right direction. It seems
to me that we should have room to set and use PG_REGRESS also for
pg_regress_check and pg_regress_installcheck.
I understand that PG_REGRESS is an environment variable for each test program.
So I add a gmake variable PG_REGRESS_PATH.
The followings are other changings.
- Change REGRESS_SHLIB like as PG_REGRESS.
- Replace $(CURDIR)/$(top_builddir) to $(abs_top_builddir).
- Remove setting of environment variable 'top_builddir' in command line for prove_installcheck.
I wonder what I should set to it and then I remove it.
Because top_builddir is used for gmake genellaly not for test programs and PostgreSQL's test framework doesn't use it.
Is it going too far?
Regards
Ryo Matsumura