From 58e540b8a887d643c8141f5c9883fd1bcc59ab42 Mon Sep 17 00:00:00 2001 From: amodra Date: Wed, 7 Dec 2005 11:24:48 +0000 Subject: [PATCH] * Makefile.in: Document the use of stamps. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@108156 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 4 ++++ gcc/Makefile.in | 40 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1e698c0..366a605 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2005-12-07 Rafael Ávila de Espíndola + * Makefile.in: Document the use of stamps. + +2005-12-07 Rafael Ávila de Espíndola + * doc/gty.texi: Remove instructions for adding a dependency on s-gtype. * Makefile.in: Add code to compute some dependencies on s-gtype automatically. Remove the declaration of those dependencies. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index c70f249..0f6e82a 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1095,6 +1095,42 @@ endif # Rebuilding this configuration # ----------------------------- +# On the use of stamps: +# Consider the example of tree-check.h. It is constructed with build/gencheck. +# A simple rule to build tree-check.h would be +# tree-check.h: build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tree-check.h +# +# but tree-check.h doesn't change every time gencheck changes. It would the +# nice if targets that depend on tree-check.h wouldn't be rebuild +# unnecessarily when tree-check.h is unchanged. To make this, tree-check.h +# must not be overwritten with a identical copy. One solution is to use a +# temporary file +# tree-check.h: build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tree-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# +# This solution has a different problem. Since the time stamp of tree-check.h +# is unchanged, make will try to update tree-check.h every time it runs. +# To prevent this, one can add a stamp +# tree-check.h: s-check +# s-check : build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tree-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# $(STAMP) s-check +# +# The problem with this solution is that make thinks that tree-check.h is +# always unchanged. Make must be deceived into thinking that tree-check.h is +# rebuild by the "a: s-a" rule. To do this, add a dummy command: +# tree-check.h: s-check; @true +# s-check : build/gencheck$(build_exeext) +# $(RUN_GEN) build/gencheck$(build_exeext) > tree-check.h +# $(SHELL) $(srcdir)/../move-if-change tmp-check.h tree-check.h +# $(STAMP) s-check +# +# This is what is done in this makefile. Note that mkconfig.sh has a +# move-if-change built-in + Makefile: config.status $(srcdir)/Makefile.in $(LANG_MAKEFRAGS) LANGUAGES="$(CONFIG_LANGUAGES)" \ CONFIG_HEADERS= \ @@ -2700,9 +2736,7 @@ s-output : $(MD_DEPS) build/genoutput$(build_exeext) genrtl.o : genrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(GGC_H) -genrtl.c genrtl.h : s-genrtl - @true # force gnu make to recheck modification times. - +genrtl.c genrtl.h : s-genrtl; @true s-genrtl: build/gengenrtl$(build_exeext) $(RUN_GEN) build/gengenrtl$(build_exeext) -h > tmp-genrtl.h $(SHELL) $(srcdir)/../move-if-change tmp-genrtl.h genrtl.h -- 2.7.4