mirror of
https://github.com/postgres/postgres.git
synced 2025-11-22 00:10:07 -05:00
I'd hoped that commit 3b8f6e75f was sufficient to ensure parallel safety even when a build started in a subdirectory requires rebuilding of generated headers. This isn't so, because making submake-generated-headers a prerequisite of "all" isn't enough to ensure it's completed before starting on "all"'s other prerequisites. The explicit dependencies we put on the recursive make targets ensure safe ordering before we recurse into child directories, but they don't protect targets to be made in the current directory. Hence, put back some ordering dependencies in directories that we've traditionally expected to be starting points for "standalone" builds, to wit src/pl/plpython and src/test/regress. (The former needs this in order to minimize the work involved in building for both python 2 and python 3; the latter to support packagings that make the regression tests available for out-of-build-tree execution.) Adjust some other dependencies so that these two cases work correctly even at high -j settings. I'm not terribly happy with this partial solution, but I don't see a way to do better without massive makefile restructuring, which we surely aren't doing at this point in the development cycle. In any case, it's little if any worse than what we had in prior releases. Discussion: https://postgr.es/m/1523353963.8169.26.camel@gunduz.org
174 lines
5.3 KiB
Makefile
174 lines
5.3 KiB
Makefile
#-------------------------------------------------------------------------
|
|
#
|
|
# GNUmakefile--
|
|
# Makefile for src/test/regress (the regression tests)
|
|
#
|
|
# Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
|
|
# Portions Copyright (c) 1994, Regents of the University of California
|
|
#
|
|
# src/test/regress/GNUmakefile
|
|
#
|
|
#-------------------------------------------------------------------------
|
|
|
|
PGFILEDESC = "pg_regress - test driver"
|
|
PGAPPICON = win32
|
|
|
|
subdir = src/test/regress
|
|
top_builddir = ../../..
|
|
include $(top_builddir)/src/Makefile.global
|
|
|
|
# maximum simultaneous connections for parallel tests
|
|
MAXCONNOPT =
|
|
ifdef MAX_CONNECTIONS
|
|
MAXCONNOPT += --max-connections=$(MAX_CONNECTIONS)
|
|
endif
|
|
|
|
# stuff to pass into build of pg_regress
|
|
EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
|
|
'-DSHELLPROG="$(SHELL)"' \
|
|
'-DDLSUFFIX="$(DLSUFFIX)"'
|
|
|
|
##
|
|
## Prepare for tests
|
|
##
|
|
|
|
# Build regression test driver
|
|
|
|
all: pg_regress$(X)
|
|
|
|
pg_regress$(X): pg_regress.o pg_regress_main.o $(WIN32RES) | submake-libpgport
|
|
$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
|
|
|
|
# dependencies ensure that path changes propagate
|
|
pg_regress.o: pg_regress.c $(top_builddir)/src/port/pg_config_paths.h
|
|
pg_regress.o: override CPPFLAGS += -I$(top_builddir)/src/port $(EXTRADEFS)
|
|
|
|
# note: because of the submake dependency, this rule's action is really a no-op
|
|
$(top_builddir)/src/port/pg_config_paths.h: | submake-libpgport
|
|
$(MAKE) -C $(top_builddir)/src/port pg_config_paths.h
|
|
|
|
install: all installdirs
|
|
$(INSTALL_PROGRAM) pg_regress$(X) '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
|
|
|
|
installdirs:
|
|
$(MKDIR_P) '$(DESTDIR)$(pgxsdir)/$(subdir)'
|
|
|
|
uninstall:
|
|
rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress$(X)'
|
|
|
|
|
|
# Build dynamically-loaded object file for CREATE FUNCTION ... LANGUAGE C.
|
|
|
|
NAME = regress
|
|
OBJS = $(WIN32RES) regress.o
|
|
|
|
include $(top_srcdir)/src/Makefile.shlib
|
|
|
|
all: all-lib
|
|
|
|
# Ensure parallel safety if a build is started in this directory
|
|
$(OBJS): | submake-libpgport submake-generated-headers
|
|
|
|
# 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.
|
|
input_files = $(patsubst $(srcdir)/input/%.source,sql/%.sql, $(wildcard $(srcdir)/input/*.source))
|
|
output_files := $(patsubst $(srcdir)/output/%.source,expected/%.out, $(wildcard $(srcdir)/output/*.source))
|
|
|
|
|
|
# not installed by default
|
|
|
|
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 || exit; \
|
|
done
|
|
|
|
installdirs-tests: installdirs
|
|
$(MKDIR_P) $(patsubst $(srcdir)/%/,'$(DESTDIR)$(pkglibdir)/regress/%',$(sort $(dir $(regress_data_files))))
|
|
|
|
|
|
# Get some extra C modules from contrib/spi
|
|
|
|
all: refint$(DLSUFFIX) autoinc$(DLSUFFIX)
|
|
|
|
refint$(DLSUFFIX): $(top_builddir)/contrib/spi/refint$(DLSUFFIX)
|
|
cp $< $@
|
|
|
|
autoinc$(DLSUFFIX): $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX)
|
|
cp $< $@
|
|
|
|
$(top_builddir)/contrib/spi/refint$(DLSUFFIX): | submake-contrib-spi ;
|
|
|
|
$(top_builddir)/contrib/spi/autoinc$(DLSUFFIX): | submake-contrib-spi ;
|
|
|
|
submake-contrib-spi: | submake-libpgport submake-generated-headers
|
|
$(MAKE) -C $(top_builddir)/contrib/spi
|
|
|
|
.PHONY: submake-contrib-spi
|
|
|
|
# Tablespace setup
|
|
|
|
.PHONY: tablespace-setup
|
|
tablespace-setup:
|
|
rm -rf ./testtablespace
|
|
mkdir ./testtablespace
|
|
|
|
|
|
##
|
|
## Run tests
|
|
##
|
|
|
|
REGRESS_OPTS = --dlpath=. --max-concurrent-tests=20 $(EXTRA_REGRESS_OPTS)
|
|
|
|
check: all tablespace-setup
|
|
$(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS)
|
|
|
|
check-tests: all tablespace-setup | temp-install
|
|
$(pg_regress_check) $(REGRESS_OPTS) $(MAXCONNOPT) $(TESTS) $(EXTRA_TESTS)
|
|
|
|
installcheck: all tablespace-setup
|
|
$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule $(EXTRA_TESTS)
|
|
|
|
installcheck-parallel: all tablespace-setup
|
|
$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(EXTRA_TESTS)
|
|
|
|
installcheck-tests: all tablespace-setup
|
|
$(pg_regress_installcheck) $(REGRESS_OPTS) $(TESTS) $(EXTRA_TESTS)
|
|
|
|
standbycheck: all
|
|
$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/standby_schedule --use-existing
|
|
|
|
# old interfaces follow...
|
|
|
|
runcheck: check
|
|
runtest: installcheck
|
|
runtest-parallel: installcheck-parallel
|
|
|
|
bigtest: all tablespace-setup
|
|
$(pg_regress_installcheck) $(REGRESS_OPTS) --schedule=$(srcdir)/serial_schedule numeric_big
|
|
|
|
bigcheck: all tablespace-setup | temp-install
|
|
$(pg_regress_check) $(REGRESS_OPTS) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) numeric_big
|
|
|
|
|
|
##
|
|
## Clean up
|
|
##
|
|
|
|
clean distclean maintainer-clean: clean-lib
|
|
# things built by `all' target
|
|
rm -f $(OBJS) refint$(DLSUFFIX) autoinc$(DLSUFFIX)
|
|
rm -f 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 $(pg_regress_clean_files)
|