automake-patches
[Top][All Lists]
Advanced

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

Re: info files deleted by "make"


From: Alexandre Duret-Lutz
Subject: Re: info files deleted by "make"
Date: Mon, 24 Feb 2003 23:08:35 +0100
User-agent: Gnus/5.090008 (Oort Gnus v0.08) Emacs/21.2 (i386-pc-linux-gnu)

>>> "Bruno" == Bruno Haible <address@hidden> writes:

[...]

 >> +     test -f $$f && mv $$f $$backupdir; \

 Bruno> ...

 >> +   test $$rc != 0 && mv $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \

 Bruno> Around 1999/2000, such constructs used to fail on FreeBSD with BSD
 Bruno> 'make'. 

They still do, for the reason you gave.  Thanks for catching that.
Failures of `makeinfo' should be protected for the same reason.

I'm checking in the following on HEAD.  This time I tested
it with all the three makes I have on this box (GNU make, an old
copy of OpenBSD make, and a recent version of FreeBSD make).

This also makes sure we don't run `mv $$backupdir/* .' when
`$$backupdir/*' is empty, otherwise mv would complain.

2003-02-22  Bruno Haible  <address@hidden>
            Alexandre Duret-Lutz  <address@hidden>

        * lib/am/texibuild.am: Don't remove the target info files. Instead,
        back up and restore them if makeinfo fails.
        * tests/txinfo20.test: New file.
        * tests/Makefile.am (TESTS): Add txinfo20.test.

Index: NEWS
===================================================================
RCS file: /cvs/automake/automake/NEWS,v
retrieving revision 1.203
diff -u -r1.203 NEWS
--- NEWS        1 Feb 2003 23:17:22 -0000       1.203
+++ NEWS        24 Feb 2003 21:46:44 -0000
@@ -51,6 +51,8 @@
   versions of Automake, because AC_PROG_CC defines this variable since
   Autoconf 2.54.)
 
+* Texinfo rules back up and restore info files when makeinfo fails.
+
 
 New in 1.7:
 * Autoconf 2.54 is required.
Index: lib/am/texibuild.am
===================================================================
RCS file: /cvs/automake/automake/lib/am/texibuild.am,v
retrieving revision 1.14
diff -u -r1.14 texibuild.am
--- lib/am/texibuild.am 20 Feb 2003 16:49:44 -0000      1.14
+++ lib/am/texibuild.am 24 Feb 2003 21:46:46 -0000
@@ -20,19 +20,38 @@
 
 ?GENERIC_INFO?%SOURCE_SUFFIX%%DEST_SUFFIX%:
 ?!GENERIC_INFO?%DEST_PREFIX%%DEST_SUFFIX%: %SOURCE_INFO% %DEPS%
-## Note that we also remove the possible output files before running
-## makeinfo.  Otherwise, if the texinfo file shrinks (or if you start
-## using --no-split), you'll be left with some dead info files lying
-## around -- dead files which will end up in the distribution.
-## *.iNN files are used on DJGPP.  See the comments in install-info-am
-       @rm -f $@ address@hidden address@hidden $(@:.info=).i[0-9] 
$(@:.info=).i[0-9][0-9]
 ## It is wrong to have `info' files dependent on %DIRSTAMP%, because
 ## `info' files are distributed and %DIRSTAMP% isn't: a distributed file
 ## should never be dependent upon a non-distributed built file.
 ## Therefore we ensure that %DIRSTAMP% exists in the rule.
 ?DIRSTAMP?     @test -f %DIRSTAMP% || $(MAKE) %DIRSTAMP%
-       $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) %MAKEINFOFLAGS% \
-        -o $@ `test -f '%SOURCE_INFO%' || echo '$(srcdir)/'`%SOURCE_INFO%
+## Back up the info files before running makeinfo. This is the cheapest
+## way to ensure that
+## 1) If the texinfo file shrinks (or if you start using --no-split),
+##    you'll not be left with some dead info files lying around -- dead
+##    files which would end up in the distribution.
+## 2) If the texinfo file has some minor mistakes which cause makeinfo
+##    to fail, the info files are not removed.  (They are needed by the
+##    developer while he writes documentation.)
+## *.iNN files are used on DJGPP.  See the comments in install-info-am
+       restore=: && \
+       backupdir="$(am__leading_dot)am$$$$" && \
+       rm -rf $$backupdir && mkdir $$backupdir && \
+       for f in $@ address@hidden address@hidden $(@:.info=).i[0-9] 
$(@:.info=).i[0-9][0-9]; do \
+         if test -f $$f; then \
+           mv $$f $$backupdir; \
+           restore=mv; \
+         fi; \
+       done; \
+       if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) %MAKEINFOFLAGS% \
+        -o $@ `test -f '%SOURCE_INFO%' || echo '$(srcdir)/'`%SOURCE_INFO%; \
+       then rc=0; else \
+         rc=$$?; \
+## Beware that backup info files might come from a subdirectory.
+         $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+       fi; \
+       rm -rf $$backupdir; \
+       exit $$rc
 
 ?GENERIC?%SOURCE_SUFFIX%.dvi:
 ?!GENERIC?%DEST_PREFIX%.dvi: %SOURCE% %DEPS% %DIRSTAMP%
Index: tests/Makefile.am
===================================================================
RCS file: /cvs/automake/automake/tests/Makefile.am,v
retrieving revision 1.471
diff -u -r1.471 Makefile.am
--- tests/Makefile.am   19 Feb 2003 19:12:56 -0000      1.471
+++ tests/Makefile.am   24 Feb 2003 21:46:46 -0000
@@ -425,6 +425,7 @@
 txinfo17.test \
 txinfo18.test \
 txinfo19.test \
+txinfo20.test \
 transform.test \
 unused.test \
 vars.test \
Index: tests/txinfo20.test
===================================================================
RCS file: tests/txinfo20.test
diff -N tests/txinfo20.test
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ tests/txinfo20.test 24 Feb 2003 21:46:47 -0000
@@ -0,0 +1,82 @@
+#! /bin/sh
+# Copyright (C) 2003  Free Software Foundation, Inc.
+#
+# This file is part of GNU Automake.
+#
+# GNU Automake is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# GNU Automake is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Automake; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# Make sure info files survive makeinfo errors.
+
+required=makeinfo
+. ./defs || exit 1
+
+set -e
+
+echo AC_OUTPUT >> configure.in
+
+cat > Makefile.am << 'END'
+info_TEXINFOS = main.texi sub/main.texi
+END
+
+mkdir sub
+
+cat > main.texi << 'END'
+\input texinfo
address@hidden main
address@hidden main
address@hidden Top
+Hello walls.
address@hidden
+END
+
+cp main.texi sub/main.texi
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOCONF
+
+./configure
+$MAKE
+
+# Feign more info files.
+: > main-1
+: > sub/main-1
+
+# Break main.texi
+$sleep
+cp main.texi main.old
+cat > main.texi << 'END'
+\input texinfo
address@hidden main
address@hidden main
address@hidden Top
address@hidden walls.}
address@hidden
+END
+
+# makeinfo will bail out, but we should conserve the old info files.
+$MAKE && exit 1
+test -f main
+test -f main-1
+
+# Restore main.texi, and break sub/main.texi
+cp main.texi sub/main.texi
+mv main.old main.texi
+$MAKE && exit 1
+test -f main
+test ! -f main-1
+test -f sub/main
+test -f sub/main-1

-- 
Alexandre Duret-Lutz





reply via email to

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