changeset 11401:136e9616c097

GNUmakefile: disable parallelism only for multiple, recursive targets * top/GNUmakefile (ALL_RECURSIVE_TARGETS): New macro; allow user additions in the Makefile. (AM_RECURSIVE_TARGETS): New macro, override only if not provided by Automake. (.NOTPARALLEL): Only disable parallel builds if multiple targets are listed on the command line and at least one of them is listed in $(ALL_RECURSIVE_TARGETS). Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
author Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
date Sat, 14 Mar 2009 16:50:46 +0100
parents 63a0517b9840
children 0d3b0997a6df
files ChangeLog top/GNUmakefile
diffstat 2 files changed, 29 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-03-14  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+	GNUmakefile: disable parallelism only for multiple, recursive targets
+	* top/GNUmakefile (ALL_RECURSIVE_TARGETS): New macro; allow user
+	additions in the Makefile.
+	(AM_RECURSIVE_TARGETS): New macro, override only if not provided
+	by Automake.
+	(.NOTPARALLEL): Only disable parallel builds if multiple targets
+	are listed on the command line and at least one of them is
+	listed in $(ALL_RECURSIVE_TARGETS).
+
 2009-03-14  Bruno Haible  <bruno@clisp.org>
 
 	* modules/unilbrk/u8-possible-linebreaks (Depends-on): Replace
--- a/top/GNUmakefile
+++ b/top/GNUmakefile
@@ -5,7 +5,7 @@
 # It is necessary if you want to build targets usually of interest
 # only to the maintainer.
 
-# Copyright (C) 2001, 2003, 2006-2008 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2006-2009 Free Software Foundation, Inc.
 
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -38,6 +38,9 @@
 # Make tar archive easier to reproduce.
 export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
 
+# Allow the user to add to this in the Makefile.
+ALL_RECURSIVE_TARGETS =
+
 include Makefile
 
 # Some projects override e.g., _autoreconf here.
@@ -107,6 +110,18 @@
 endif
 
 # Tell version 3.79 and up of GNU make to not build goals in this
-# directory in parallel.  This is necessary in case someone tries to
-# build multiple targets on one command line.
+# directory in parallel, in case someone tries to build multiple
+# targets, and one of them can cause a recursive target to be invoked.
+
+# Only set this if Automake doesn't provide it.
+AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
+  $(RECURSIVE_CLEAN_TARGETS:-recursive=) \
+  dist distcheck tags ctags
+
+ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
+
+ifneq ($(word 2, $(MAKECMDGOALS)), )
+ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
 .NOTPARALLEL:
+endif
+endif