postgres.git / summary / log / commit / refs

commit    5af2e976d72aa345337596cc986237c57e1146b2
Author:   Andres Freund <andres@anarazel.de>
Date:     Tue May 21 22:03:27 2019 +0000

    pg_upgrade: Avoid check target accidentally breaking make's --output-sync.
    
    When $(MAKE) is present in a rule, make assumes that target is a
    submake, and it doesn't need to buffer its output. But in this case
    it's a shell script that needs buffered output. Avoid that heuristic,
    by referring to $(MAKE) via an indirection.
    
    Discussion: https://postgr.es/m/20190521004717.qsktdsugj3shagco@alap3.anarazel.de


src/bin/pg_upgrade/Makefile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_upgrade/Makefile b/src/bin/pg_upgrade/Makefile index 073b23b09a9..5b322ce8261 100644 --- a/src/bin/pg_upgrade/Makefile +++ b/src/bin/pg_upgrade/Makefile @@ -35,8 +35,17 @@ clean distclean maintainer-clean: pg_upgrade_dump_globals.sql \ pg_upgrade_dump_*.custom pg_upgrade_*.log +# When $(MAKE) is present, make automatically infers that this is a +# recursive make. which is not actually what we want here, as that +# e.g. prevents output synchronization from working (as make thinks +# that the subsidiary make knows how to deal with that itself, but +# we're invoking a shell script that doesn't know). Referencing +# $(MAKE) indirectly avoids that behaviour. +# See https://www.gnu.org/software/make/manual/html_node/MAKE-Variable.html#MAKE-Variable +NOTSUBMAKEMAKE=$(MAKE) + check: test.sh all temp-install - MAKE=$(MAKE) $(with_temp_install) bindir=$(abs_top_builddir)/tmp_install/$(bindir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) $< + MAKE=$(NOTSUBMAKEMAKE) $(with_temp_install) bindir=$(abs_top_builddir)/tmp_install/$(bindir) EXTRA_REGRESS_OPTS="$(EXTRA_REGRESS_OPTS)" $(SHELL) # installcheck is not supported because there's no meaningful way to test # pg_upgrade against a single already-running server [parent: 7005389b2ad1]