This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[ada] Redo Make-lang.in rules to not always regenerate gnat_ug_*.texi
- From: Kelley Cook <kcook34 at ford dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Arnaud Charlet <charlet at ACT-Europe dot FR>, Nathanael Nerode <neroden at twcny dot rr dot com>
- Date: Fri, 12 Dec 2003 15:42:38 -0500
- Subject: [ada] Redo Make-lang.in rules to not always regenerate gnat_ug_*.texi
- Hop-count: 1
- Reply-to: Kelley Cook <kelleycook at wideopenwest dot com>
Since this hunk was unrelated to the bug that is present in rest of
PR/12744, I am now submitting it broken out for a seperate approval.
On my first attempt to fix PR/12744, Joseph Myers pointed out
(http://gcc.gnu.org/ml/gcc-patches/2003-11/msg00258.html) that both the
fortran77 and the ada directories have generated .texi files which are
required to still be in the CVS directory so a script can easily
generate current webpage documentation without requiring a complete
bootstrap.
However, it soon became obvious to me that the current gnat_ug_*.texi
rules cause them to be always be (identically) regenerated on any build,
since they each depend on the ada/doctools/xgnatug which does not exist
in the source tree, so that file will always be built and will of course
be newer than the .texi file.
Additionally, that executable was also missing a $(buildexe), so the
dependency likely wouldn't quite work under mingw32 or any other
environments which use extensions.
This is a perfect job for order-only dependencies, but unfortunately
that nifty feature didn't yet exist in gnu make 3.79.
So this patch fixes those bugs in the same way the fortran folks did by
punting and introducing a stamp file which contains the real dependency
of the .texi files. As a bonus ada/doctools/xgnatug($buildexe) will not
be built unless those dependency were touch thereby reducing bootstrap
times by a few seconds.
Bootstrapped numerous times on i686-pc-cygwin as part of testing larger
patch.
OK, assuming regtest with just this hunk passes?
Kelley Cook
contrib/
2003-12-04 Kelley Cook <kcook@gcc.gnu.org>
* gcc_update (files_generated): Add in gcc/ada/stamp-xgnatug and update
gcc/ada/gnat_ug_* to use it.
gcc/ada/
2003-12-04 Kelley Cook <kcook@gcc.gnu.org>
* stamp-xgnatug: New stamp file.
* Make-lang.in (stamp-xgnatug): New stamp file and comment.
(ada/doctools/xgnatug): Add $(build_exeext).
(ada/gnat_ug_unx.texi, ada/gnat_ug_vwx.texi, ada/gnat_ug_vms.texi
ada/gnat_ug_wnt.texi): Update to depend on stamp-xgnatug.
diff -Nrdup gcc-orig/contrib/gcc_update gcc-snapshot/contrib/gcc_update
--- gcc-orig/contrib/gcc_update 2003-12-12 14:42:05.607308000 -0500
+++ gcc-snapshot/contrib/gcc_update 2003-12-10 14:43:32.591760500 -0500
@@ -79,10 +79,11 @@ gcc/fixinc/fixincl.x: gcc/fixinc/fixincl
gcc/f/intdoc.texi: gcc/f/intdoc.in gcc/f/intdoc.c gcc/f/intrin.h gcc/f/intrin.def
gcc/cp/cfns.h: gcc/cp/cfns.gperf
gcc/java/keyword.h: gcc/java/keyword.gperf
-gcc/ada/gnat_ug_unx.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
-gcc/ada/gnat_ug_vms.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
-gcc/ada/gnat_ug_vxw.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
-gcc/ada/gnat_ug_wnt.texi: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
+gcc/ada/stamp-xgnatug: gcc/ada/gnat_ug.texi gcc/ada/xgnatug.adb gcc/ada/ug_words
+gcc/ada/gnat_ug_unx.texi: gcc/ada/stamp-xgnatug
+gcc/ada/gnat_ug_vms.texi: gcc/ada/stamp-xgnatug
+gcc/ada/gnat_ug_vxw.texi: gcc/ada/stamp-xgnatug
+gcc/ada/gnat_ug_wnt.texi: gcc/ada/stamp-xgnatug
# testsuite
# Without this, _Pragma3.c can have a false negative.
gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h
diff -Nrdup gcc-orig/gcc/ada/Make-lang.in gcc-snapshot/gcc/ada/Make-lang.in
--- gcc-orig/gcc/ada/Make-lang.in 2003-12-12 14:30:26.124526500 -0500
+++ gcc-snapshot/gcc/ada/Make-lang.in 2003-12-12 14:36:16.481809000 -0500
@@ -441,28 +441,48 @@ ada.generated-manpages:
# Generate documentation.
#
# The generated Texinfo files for the User Guide are stored in
-# $(srcdir), like the Info files.
+# $(srcdir). However, if the documentation files depended on
+# executables in the build tree, there'd be no way to ship a source
+# tree with the documentation already generated such that `make'
+# wouldn't attempt to rebuild it. So, we punt and arrange for the
+# documentation files to depend on a stamp file which has the
+# combined dependencies of the texi files and the generatator file.
+# This stamp file calls a submake to build the executable.
+#
+# If gnu make 3.80 is ever made a requirement to build, then
+# this dance could be avoided using an order-only dependency:
+#
+# $(srcdir)/ada/gnat_ug_unx.texi: \
+# ada/gnat_ug.texi ada/ug_words | ada/doctools/xgnatug$(build_exeext)
-ada/doctools/xgnatug : ada/xgnatug.adb
+$(srcdir)/ada/stamp-xgnatug: ada/xgnatug.adb ada/gnat_ug.texi ada/ug_words
+ $(MAKE) ada/doctools/xgnatug$(build_exeext)
+ $(STAMP) $(srcdir)/ada/stamp-xgnatug
+
+ada/doctools/xgnatug$(build_exeext): ada/xgnatug.adb
-$(MKDIR) ada/doctools
cp $^ ada/doctools
cd ada/doctools && gnatmake -q xgnatug
-$(srcdir)/ada/gnat_ug_unx.texi : ada/doctools/xgnatug \
- $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words
- ada/doctools/xgnatug unx $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words $(srcdir)/ada/gnat_ug_unx.texi
+$(srcdir)/ada/gnat_ug_unx.texi: $(srcdir)/ada/stamp-xgnatug
+ ada/doctools/xgnatug unx $(srcdir)/ada/gnat_ug.texi \
+ $(srcdir)/ada/ug_words \
+ $(srcdir)/ada/gnat_ug_unx.texi
-$(srcdir)/ada/gnat_ug_vms.texi : ada/doctools/xgnatug \
- $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words
- ada/doctools/xgnatug vms $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words $(srcdir)/ada/gnat_ug_vms.texi
+$(srcdir)/ada/gnat_ug_vms.texi: $(srcdir)/ada/stamp-xgnatug
+ ada/doctools/xgnatug vms $(srcdir)/ada/gnat_ug.texi \
+ $(srcdir)/ada/ug_words \
+ $(srcdir)/ada/gnat_ug_vms.texi
-$(srcdir)/ada/gnat_ug_vxw.texi : ada/doctools/xgnatug \
- $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words
- ada/doctools/xgnatug vxworks $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words $(srcdir)/ada/gnat_ug_vxw.texi
+$(srcdir)/ada/gnat_ug_vxw.texi: $(srcdir)/ada/stamp-xgnatug
+ ada/doctools/xgnatug vxworks $(srcdir)/ada/gnat_ug.texi \
+ $(srcdir)/ada/ug_words \
+ $(srcdir)/ada/gnat_ug_vxw.texi
-$(srcdir)/ada/gnat_ug_wnt.texi : ada/doctools/xgnatug \
- $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words
- ada/doctools/xgnatug wnt $(srcdir)/ada/gnat_ug.texi $(srcdir)/ada/ug_words $(srcdir)/ada/gnat_ug_wnt.texi
+$(srcdir)/ada/gnat_ug_wnt.texi: $(srcdir)/ada/stamp-xgnatug
+ ada/doctools/xgnatug wnt $(srcdir)/ada/gnat_ug.texi \
+ $(srcdir)/ada/ug_words \
+ $(srcdir)/ada/gnat_ug_wnt.texi
$(docobjdir)/gnat_ug_unx.info : $(srcdir)/ada/gnat_ug_unx.texi \
$(srcdir)/doc/include/fdl.texi $(srcdir)/doc/include/gcc-common.texi \
diff -Nrdup gcc-orig/gcc/ada/stamp-xgnatug gcc-snapshot/gcc/ada/stamp-xgnatug
--- gcc-orig/gcc/ada/stamp-xgnatug 2003-12-12 14:45:18.536650000 -0500
+++ gcc-snapshot/gcc/ada/stamp-xgnatug 2003-12-10 14:42:14.849197000 -0500
@@ -0,0 +1 @@
+timestamp