Subject: bug#20186: Failure to create directory during info-building phase of "make distcheck"

From: James Youngman <[email-masked]>
Date: Tue, 24 Mar 2015 22:46:45 +0000

On Tue, Mar 24, 2015 at 10:49 AM, Peter Breitenlohner <[email-masked]> wrote:
> On Tue, 24 Mar 2015, James Youngman wrote:
>
>> I'm seeing a failure of "make distcheck" which I think is caused by
>> the fact that Automake 1.14.1's rule for .texi.info is trying to
>> create a backup directory in a read-only directory:
>
>
> Hi James,
>
> the .info file in the read-only directory should not be older than the .texi
> file (and other dependencies), thus the rule for .texi.info should never be
> used during "make distcheck".

The timestamps look OK to me:

$ ls -ltri --full-time $( find
/home/james/source/GNU/findutils/git/gnu/findutils
/home/james/source/GNU/findutils/git/gnu/compile/64 \( -name
find.info\* -o -name find.texi \) )
3967808 -r--r--r-- 1 james lp 220524 2015-03-23 09:45:58.000000000
+0000 /home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/find.texi
2983056 -rw-r--r-- 1 james lp 220524 2015-03-23 09:45:58.424857809
+0000 /home/james/source/GNU/findutils/git/gnu/findutils/doc/find.texi
3967801 -r--r--r-- 1 james lp  11671 2015-03-23 22:39:18.000000000
+0000 /home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/find.info-2
3965120 -r--r--r-- 1 james lp 302487 2015-03-23 22:39:18.000000000
+0000 /home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/find.info-1
3967805 -r--r--r-- 1 james lp   6293 2015-03-23 22:39:18.000000000
+0000 /home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/find.info
2983128 -rw-r--r-- 1 james lp 302487 2015-03-23 22:39:18.595150555
+0000 /home/james/source/GNU/findutils/git/gnu/findutils/doc/find.info-1
2983129 -rw-r--r-- 1 james lp  11671 2015-03-23 22:39:18.659148601
+0000 /home/james/source/GNU/findutils/git/gnu/findutils/doc/find.info-2
2983130 -rw-r--r-- 1 james lp   6293 2015-03-23 22:39:18.667148357
+0000 /home/james/source/GNU/findutils/git/gnu/findutils/doc/find.info

$ make -C  /home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc
-n  find.info
make: Entering directory
'/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc'
make: 'find.info' is up to date.
make: Leaving directory
'/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc'

Perhaps the cause is this rule, though:

dblocation.texi: ../locate/dblocation.texi
        cp ../locate/dblocation.texi $@

This will clearly update the mtime of dblocation.texi.

However, this rule is intended as a workaround for what would
otherwise be a failure in "make dvi".   The texi file is changed:

$ git diff doc/find.texi  | cat
diff --git a/doc/find.texi b/doc/find.texi
index 7aa20e5..fe0b2ce 100644
--- a/doc/find.texi
+++ b/doc/find.texi
@@ -7,7 +7,7 @@
 @c %**end of header

 @include version.texi
-@include ../locate/dblocation.texi
+@include dblocation.texi

 @iftex
 @finalout

However, the old version of this code no longer works with the
combination of TeX and texinfo I have installed.   Reverting the
change, rebuilding the makefiles (i.e. re-running gnulib-tool etc.)
and doing make dist again we see the failure that I made the above
change to evade:

make[2]: Entering directory
'/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/_build/doc'
TEXINPUTS="../../build-aux:$TEXINPUTS" \
MAKEINFO='/bin/sh
/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/build-aux/missing
makeinfo   -I ../../doc' \
texi2dvi  --build-dir=find.t2d -o find.dvi  \
../../doc/find.texi
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live
2015/dev/Debian) (preloaded format=etex)
 restricted \write18 enabled.
entering extended mode

(/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/f
ind.texi
(/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/t
exinfo.tex Loading texinfo [version 2014-05-05.10]: pdf, fonts, markup,
glyphs, page headings, tables, conditionals, indexing, sectioning, toc,
environments, defuns, macros, cross references, insertions,
(/usr/share/texlive/texmf-dist/tex/generic/epsf/epsf.tex
This is `epsf.tex' v2.7.4 <14 February 2011>
) localization, formatting, and turning on texinfo input format.)
(/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/v
ersion.texi)
/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/fi
nd.texi:10: I can't find file `../locate/dblocation.texi'.
@temp ->@input ../locate/dblocation.texi

@includezzz ...and @input #1 }@expandafter }@temp
                                                  @popthisfilestack
l.10 @include ../locate/dblocation.texi

(Press Enter to retry, or Control-D to exit)
Please type another input file name:
/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/fi
nd.texi:10: I can't find file `../locate/dblocation.texi'.
@temp ->@input ../locate/dblocation.texi

@includezzz ...and @input #1 }@expandafter }@temp
                                                  @popthisfilestack
l.10 @include ../locate/dblocation.texi

(Press Enter to retry, or Control-D to exit)
Please type another input file name:
/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/doc/fi
nd.texi:10: Emergency stop.
@temp ->@input ../locate/dblocation.texi

@includezzz ...and @input #1 }@expandafter }@temp
                                                  @popthisfilestack
l.10 @include ../locate/dblocation.texi

No pages of output.
Transcript written on find.log.
/usr/bin/texi2dvi: etex exited with bad status, quitting.
make[2]: *** [find.dvi] Error 1
Makefile:1670: recipe for target 'find.dvi' failed
make[2]: Leaving directory
'/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/_build/doc'
Makefile:1695: recipe for target 'dvi-recursive' failed
make[1]: *** [dvi-recursive] Error 1
make[1]: Leaving directory
'/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/_build'
make: *** [distcheck] Error 1
Makefile:1910: recipe for target 'distcheck' failed

$ find /home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/
-name dblocation.texi
/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/locate/dblocation.texi
/home/james/source/GNU/findutils/git/gnu/compile/64/findutils-4.5.15-git/_build/locate/dblocation.texi

I suspect the problem here is the texio2dvi argument
--build-dir=find.t2d - in other words, the generated makefile now uses
texi2dvi in "tidy" mode, and that changes the current directory of the
TeX formatter; it can no longer find ../locate/dblocation.texi.
Certainly strace shows that the program tries to open the file using
exactly " ../locate/dblocation.texi" and cannot because that's not any
longer the correct relative path to the input (though it is the
correct relative path to the input if the working directory were the
same directory as contains find.texi).

It looks to me as if the relevant change was introduced by Stefano
Lattarini in commit 205c7572497789676bea3167b9cdeede69236a16.

James.