From a88fdc2ac3e9fb02fc1efd68dd8d40123b7ce4e3 Mon Sep 17 00:00:00 2001
From: Nicola Pero <nicola@gcc.gnu.org>
Date: Fri, 29 Apr 2011 17:31:51 +0000
Subject: [PATCH] In gcc/: 2011-04-29 Nicola Pero
 <nicola.pero@meta-innovation.com>

In gcc/:
2011-04-29  Nicola Pero  <nicola.pero@meta-innovation.com>

	* Makefile.in (ENABLE_MAINTAINER_RULES): New.

In gcc/cp/:
2011-04-29  Nicola Pero  <nicola.pero@meta-innovation.com>,
	    Mike Stump <mikestump@comcast.net>

	* Make-lang.in ($(srcdir)/cp/cfns.h): Enable the dependency only
	in maintainer mode.  Use the --output-file option of gperf instead
	of > to prevent creating an empty cp/cfns.h when gperf is not
	available.

From-SVN: r173178
---
 gcc/ChangeLog       |  4 ++++
 gcc/Makefile.in     | 11 +++++++++++
 gcc/cp/ChangeLog    |  8 ++++++++
 gcc/cp/Make-lang.in | 14 ++++++++++++--
 4 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ced5c1f13f6e..f097822601b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2011-04-29  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+	* Makefile.in (ENABLE_MAINTAINER_RULES): New.
+
 2011-04-27  Xinliang David Li  <davidxl@google.com>
 
 	* tree-profile.c (init_ic_make_global_vars): Set
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 618046c0b1a4..d6c176ad91b2 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -165,8 +165,19 @@ C_STRICT_WARN = @c_strict_warn@
 NOCOMMON_FLAG = @nocommon_flag@
 
 # This is set by --disable-maintainer-mode (default) to "#"
+# FIXME: 'MAINT' will always be set to an empty string, no matter if
+# --disable-maintainer-mode is used or not.  This is because the
+# following will expand to "MAINT := " in maintainer mode, and to
+# "MAINT := #" in non-maintainer mode, but because '#' starts a comment,
+# they mean exactly the same thing for make.
 MAINT := @MAINT@
 
+# The following provides the variable ENABLE_MAINTAINER_RULES that can
+# be used in language Make-lang.in makefile fragments to enable
+# maintainer rules.  So, ENABLE_MAINTAINER_RULES is 'true' in
+# maintainer mode, and '' otherwise.
+@MAINT@ ENABLE_MAINTAINER_RULES = true
+
 # These are set by --enable-checking=valgrind.
 RUN_GEN = @valgrind_command@
 VALGRIND_DRIVER_DEFINES = @valgrind_path_defines@
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e34f03f464fe..7cd5eb66bcfb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,11 @@
+2011-04-29  Nicola Pero  <nicola.pero@meta-innovation.com>,
+	    Mike Stump <mikestump@comcast.net>
+
+	* Make-lang.in ($(srcdir)/cp/cfns.h): Enable the dependency only
+	in maintainer mode.  Use the --output-file option of gperf instead
+	of > to prevent creating an empty cp/cfns.h when gperf is not
+	available.
+
 2011-04-28  Paolo Carlini  <paolo.carlini@oracle.com>
 
 	PR c++/48798
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index d8bd90549191..3aef055346cf 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -104,10 +104,20 @@ cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS)
 	+$(LINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
 	      $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
 
-# Special build rules.
+ifeq ($(ENABLE_MAINTAINER_RULES), true)
+# Special build rule.  This is a maintainer rule, that is only
+# available when GCC is configured with --enable-maintainer-mode.  In
+# other cases, it is not available to avoid triggering rebuilds if a
+# user has the source checked out with unusual timestamps.
 $(srcdir)/cp/cfns.h: $(srcdir)/cp/cfns.gperf
+else
+# We keep the rule so that you can still force a rebuild, even if you
+# didn't configure GCC with --enable-maintainer-mode, by manually
+# deleting the $(srcdir)/cp/cfns.h file.
+$(srcdir)/cp/cfns.h:
+endif
 	gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \
-		$(srcdir)/cp/cfns.gperf > $(srcdir)/cp/cfns.h
+		$(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h
 
 #
 # Build hooks:
-- 
GitLab