bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] master: build: fix the generation of the documentation.


From: Akim Demaille
Subject: [PATCH] master: build: fix the generation of the documentation.
Date: Wed, 12 Aug 2009 14:47:08 +0200

Some of our targets use "bison --help", but they can't depend on
"bison" itself (to avoid additional requirements on the user), so
they used to call "make src/bison" in the commands.  Then
concurrent builds may fail: one make might be aiming one of its
jobs at compiling src/bison, and another job at generating the man
page.  If the latter is faster than the former, then we have two
makes that concurrently try to compile src/bison.

This might also be a more convincing explanation for the failure
described in the patch "build: fix paths".

        * Makefile.am (SUFFIXES): Initialize.
        * build-aux/move-if-change: New, symlink to gnulib's.
        * build-aux/local.mk: Ship it.
        * doc/common.x: Remove, merged into...
        * doc/bison.x: here.
        * doc/local.mk (doc/bison.help): New.
        ($(CROSS_OPTIONS_TEXI)): Depend on it.
        Use src/bison.
        (.x.1): Replace with...
        (doc/bison.1): this explicit, simpler, target.
        (common_dep): Remove, inlined where appropriate.
        (SUFFIXES, PREPATH): Remove, unused.
---
 ChangeLog                |   27 +++++++++++++++++
 Makefile.am              |    1 +
 build-aux/local.mk       |    7 ++--
 build-aux/move-if-change |    1 +
 doc/.cvsignore           |    1 +
 doc/.gitignore           |    1 +
 doc/bison.x              |    5 +++
 doc/common.x             |    4 --
 doc/local.mk             |   73 +++++++++++++++++++++++++++-------------------
 9 files changed, 83 insertions(+), 37 deletions(-)
 create mode 120000 build-aux/move-if-change
 delete mode 100644 doc/common.x

diff --git a/ChangeLog b/ChangeLog
index 5668c72..7f3e157 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,32 @@
 2009-08-12  Akim Demaille  <address@hidden>
 
+       build: fix the generation of the documentation.
+       Some of our targets use "bison --help", but they can't depend on
+       "bison" itself (to avoid additional requirements on the user), so
+       they used to call "make src/bison" in the commands.  Then
+       concurrent builds may fail: one make might be aiming one of its
+       jobs at compiling src/bison, and another job at generating the man
+       page.  If the latter is faster than the former, then we have two
+       makes that concurrently try to compile src/bison.
+
+       This might also be a more convincing explanation for the failure
+       described in the patch "build: fix paths".
+
+       * Makefile.am (SUFFIXES): Initialize.
+       * build-aux/move-if-change: New, symlink to gnulib's.
+       * build-aux/local.mk: Ship it.
+       * doc/common.x: Remove, merged into...
+       * doc/bison.x: here.
+       * doc/local.mk (doc/bison.help): New.
+       ($(CROSS_OPTIONS_TEXI)): Depend on it.
+       Use src/bison.
+       (.x.1): Replace with...
+       (doc/bison.1): this explicit, simpler, target.
+       (common_dep): Remove, inlined where appropriate.
+       (SUFFIXES, PREPATH): Remove, unused.
+
+2009-08-12  Akim Demaille  <address@hidden>
+
        gnulib: improve prefixing.
        * configure.ac (gl_PREFIXED_LIBOBJS): Don't rename it, rather,
        change the value of...
diff --git a/Makefile.am b/Makefile.am
index 1bd4401..c507cc8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -36,6 +36,7 @@ AM_CPPFLAGS =
 BUILT_SOURCES =
 DISTCLEANFILES =
 MOSTLYCLEANFILES =
+SUFFIXES =
 include build-aux/local.mk
 include data/local.mk
 include djgpp/local.mk
diff --git a/build-aux/local.mk b/build-aux/local.mk
index c914172..141081e 100644
--- a/build-aux/local.mk
+++ b/build-aux/local.mk
@@ -1,4 +1,5 @@
 EXTRA_DIST +=                                  \
-build-aux/update-b4-copyright                  \
-build-aux/prev-version.txt                     \
-build-aux/cross-options.pl
+  build-aux/cross-options.pl                   \
+  build-aux/move-if-change                     \
+  build-aux/prev-version.txt                   \
+  build-aux/update-b4-copyright
diff --git a/build-aux/move-if-change b/build-aux/move-if-change
new file mode 120000
index 0000000..2df61a6
--- /dev/null
+++ b/build-aux/move-if-change
@@ -0,0 +1 @@
+../gnulib/build-aux/move-if-change
\ No newline at end of file
diff --git a/doc/.cvsignore b/doc/.cvsignore
index a5a4f9d..7854e0a 100644
--- a/doc/.cvsignore
+++ b/doc/.cvsignore
@@ -6,6 +6,7 @@ bison.cps
 bison.dvi
 bison.fn
 bison.html
+bison.help
 bison.ky
 bison.log
 bison.pdf
diff --git a/doc/.gitignore b/doc/.gitignore
index 62a4e19..edd2e36 100644
--- a/doc/.gitignore
+++ b/doc/.gitignore
@@ -5,6 +5,7 @@
 /bison.cps
 /bison.dvi
 /bison.fn
+/bison.help
 /bison.html
 /bison.ky
 /bison.log
diff --git a/doc/bison.x b/doc/bison.x
index 1eaa9fd..c733515 100644
--- a/doc/bison.x
+++ b/doc/bison.x
@@ -53,3 +53,8 @@ are unique.  When a long option takes an argument, like
 .BR \-\-file-prefix ,
 connect the option name and the argument with
 .BR = .
+
+[see also]
+.BR lex (1),
+.BR flex (1),
+.BR yacc (1).
diff --git a/doc/common.x b/doc/common.x
deleted file mode 100644
index 60224c3..0000000
--- a/doc/common.x
+++ /dev/null
@@ -1,4 +0,0 @@
-[see also]
-.BR lex (1),
-.BR flex (1),
-.BR yacc (1).
diff --git a/doc/local.mk b/doc/local.mk
index cb7d00d..f086084 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -26,16 +26,17 @@ CLEANDIRS = doc/*.t2d
 clean-local:
        rm -rf $(CLEANDIRS)
 
+MOSTLYCLEANFILES += $(top_srcdir)/doc/*.t
+
 CROSS_OPTIONS_PL = $(top_srcdir)/build-aux/cross-options.pl
 CROSS_OPTIONS_TEXI = $(top_srcdir)/doc/cross-options.texi
-$(CROSS_OPTIONS_TEXI): $(top_srcdir)/src/getargs.c $(CROSS_OPTIONS_PL)
+$(CROSS_OPTIONS_TEXI): doc/bison.help $(CROSS_OPTIONS_PL)
 # Create address@hidden which is the previous contents.  Don't use `mv' here so
 # that even if we are interrupted, the file is still available for
 # diff in the next run.  Note that $@ might not exist yet.
        { test ! -f $@ || cat $@; } >address@hidden
        test ! -f address@hidden || rm -f address@hidden
-       $(MAKE) $(AM_MAKEFLAGS) src/bison$(EXEEXT)
-       src/bison --help |                               \
+       src/bison$(EXEEXT) --help |                                      \
          perl $(CROSS_OPTIONS_PL) $(top_srcdir)/src/scan-gram.l >address@hidden
        diff -u address@hidden address@hidden || true
        mv address@hidden $@
@@ -54,49 +55,61 @@ doc/refcard.dvi: doc/refcard.tex
 doc/refcard.ps: doc/refcard.dvi
 
 
+## ---------------- ##
+## doc/bison.help.  ##
+## ---------------- ##
+
+# Some of our targets (cross-option.texi, bison.1) use "bison --help".
+# Since we want to ship the generated file to avoid additional
+# requirements over the user environment, we used not depend on
+# src/bison itself, but on src/getargs.c and other files.  Yet, we
+# need "bison --help" to work to make help2man happy, so we used to
+# include "make src/bison" in the commands.  Then we may have a
+# problem with concurrent builds, since one make might be aiming one
+# of its jobs at compiling src/bison, and another job at generating
+# the man page.  If the latter is faster than the former, then we have
+# two makes that concurrently try to compile src/bison.  Doomed to
+# failure.
+#
+# As a simple scheme to get our way out, make a stamp file,
+# bison.help, which contains --version then --help.  This file can
+# depend on bison, which ensures its correctness.  But update it
+# *only* if needed (content changes).  This way, we avoid useless
+# compilations of cross-option.texi and bison.1.  At the cost of
+# repeated builds of bison.help.
+
+EXTRA_DIST += $(top_srcdir)/doc/bison.help
+MAINTAINERCLEANFILES += $(top_srcdir)/doc/bison.help
+$(top_srcdir)/doc/bison.help: src/bison$(EXEEXT)
+       $< --version >doc/bison.help.t
+       $< --help   >>doc/bison.help.t
+       $(top_srcdir)/build-aux/move-if-change doc/bison.help.t $@
+
+
 ## ----------- ##
 ## Man Pages.  ##
 ## ----------- ##
 
 dist_man_MANS = $(top_srcdir)/doc/bison.1
 
-EXTRA_DIST += $(dist_man_MANS:.1=.x) doc/common.x
+EXTRA_DIST += $(dist_man_MANS:.1=.x)
 MAINTAINERCLEANFILES += $(dist_man_MANS)
 
-# Depend on configure to get version number changes.
-common_dep = $(top_srcdir)/configure $(top_srcdir)/doc/common.x
-$(top_srcdir)/doc/bison.1:      $(common_dep) $(top_srcdir)/src/getargs.c
-
 # Differences to ignore when comparing the man page (the date).
 remove_time_stamp = \
   sed 's/^\(\.TH[^"]*"[^"]*"[^"]*\)"[^"]*"/\1/'
 
-MOSTLYCLEANFILES += $(top_srcdir)/doc/*.t
-
-SUFFIXES = .x .1
-
-PREPATH = src
-.x.1:
-       @program=`expr "/$*" : '.*/\(.*\)'` &&                           \
-       save_IFS=$IFS;                                                   \
-       IFS=$(PATH_SEPARATOR);                                           \
-       for dir in $(PREPATH); do                                        \
-         IFS=$save_IFS;                                                 \
-         echo $(MAKE) $(AM_MAKEFLAGS) $$dir/$$program;                  \
-         $(MAKE) $(AM_MAKEFLAGS) $$dir/$$program || exit;               \
-       done
+# Depend on configure to get version number changes.
+$(top_srcdir)/doc/bison.1: doc/bison.help doc/bison.x $(top_srcdir)/configure
        @echo "Updating man page $@"
-       PATH="$(top_builddir)/$(PREPATH)$(PATH_SEPARATOR)$$PATH";        \
-       export PATH;                                                     \
-       $(HELP2MAN)                                                      \
-           --include=$*.x                                               \
-           --include=$(top_srcdir)/doc/common.x                         \
-           address@hidden `echo '$*' | sed 's,.*/,,'`
+       $(HELP2MAN)                                     \
+           --include=$(top_srcdir)/doc/bison.x         \
+           address@hidden src/bison$(EXEEXT)
        if $(remove_time_stamp) $@ >address@hidden 2>/dev/null &&               
 \
           $(remove_time_stamp) address@hidden | cmp address@hidden - 
>/dev/null 2>&1; then \
-               touch $@;                                                \
+         touch $@;                                                      \
        else                                                             \
-               mv address@hidden $@;                                           
 \
+         mv address@hidden $@;                                                 
 \
        fi
        rm -f address@hidden
 
-- 
1.6.4





reply via email to

[Prev in Thread] Current Thread [Next in Thread]