Patchwork PATCH: import move-if-change from gnulib (was: PATCH: PR binutils/12283: bfd/doc doesn't support parallel build)

login
register
mail settings
Submitter Ralf Wildenhues
Date Jan. 28, 2011, 8:14 p.m.
Message ID <20110128201452.GM7234@gmx.de>
Download mbox | patch
Permalink /patch/80888/
State New
Headers show

Comments

Ralf Wildenhues - Jan. 28, 2011, 8:14 p.m.
[ adding gcc-patches ]

* Steve Ellcey wrote on Fri, Jan 28, 2011 at 12:57:25AM CET:
> I tried this patch and I think it works.  Before patching I got:
> 
> mv: cannot move `chew.13844' to `chew': Text file busy
> make[3]: *** [chew] Error 1
> make[2]: *** [bfdt.texi] Error 2
> make[2]: *** Waiting for unfinished jobs....
> make[2]: *** Waiting for unfinished jobs....
> make[1]: *** [info-recursive] Error 1
> make: *** [all-bfd] Error 2
> 
> After applying the patch and doing some builds, I still got the mv
> error message about 'cannot move' but the make did not fail.

Thank you for confirming this.

> Perhaps we should change move-if-needed to send the stderr of the mv
> -f to /dev/null like we do with cmpprog.

I don't think that it is generally useful to hide the error output:
in case of a full disk or a real write error, the message can provide
valuable help in diagnosing the cause.  It can otherwise be very tricky
to analyze parallel build failures.

I have meanwhile added an improved and fixed version of my proposed
patch to the (more complete) gnulib copy of move-if-change.  See here:
http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/24860/focus=24865

I hereby propose to just import the gnulib copy into GCC and src,
http://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/move-if-change
and document the change in status as below in patches to src/MAINTAINERS
and GCC www.  (The Autoconf copy of move-if-change has been updated from
the gnulib one anyway.)

Any reasons against doing so?

Thanks,
Ralf

ChangeLog:
2011-01-28  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* MAINTAINERS (mkinstalldirs): Comes from Automake.
	(move-if-change): Comes from gnulib.
Steve Ellcey - Jan. 28, 2011, 9:12 p.m.
On Fri, 2011-01-28 at 21:14 +0100, Ralf Wildenhues wrote:

> 
> I have meanwhile added an improved and fixed version of my proposed
> patch to the (more complete) gnulib copy of move-if-change.  See here:
> http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/24860/focus=24865
> 
> I hereby propose to just import the gnulib copy into GCC and src,
> http://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/move-if-change
> and document the change in status as below in patches to src/MAINTAINERS
> and GCC www.  (The Autoconf copy of move-if-change has been updated from
> the gnulib one anyway.)
> 
> Any reasons against doing so?
> 
> Thanks,
> Ralf

I have no objection to this change and I think it will fix things on
most platforms but I have found one platform where I still have a
problem.  On hppa*-*-hpux*, compiling the same program twice in a row
does not result in the exact same executable.  So even with this change
the cmp will fail and the build will still abort like it does now.
During a GCC bootstrap build we work around these issues by using:

cmp --ignore-initial=16

to compare stage2 and stage3 bits.  And we also have to do the GCC
compilation with -frandom-seed=fixed-seed to avoid other differences in
object files.

But for some reason doing both of these still didn't get this to work
for me on the hppa platform.  I was still getting failures in the cmp
check, even with the --ignore-initial flag and the use of -frandom-seed
when compiling chew.

I wonder if it would be reasonable to add a configure flag to bfd that
would enforce the chew dependency (--enable-parallel-doc or something
like that).  It would be off by default but if specified then we would
enforce the chew dependency and parallel builds would just work
normally.

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index a471c90..046c5ea 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -38,7 +38,7 @@  config.guess; config.sub; readline/support/config.{sub,guess}
 		binutils@sourceware.org
 		gdb-patches@sourceware.org
 
-depcomp
+depcomp; mkinstalldirs
         Send bug reports and patches to bug-automake@gnu.org.
 
 gdb/; readline/; sim/; GDB's part of include/
@@ -69,12 +69,8 @@  ltconfig; ltmain.sh; ltcf-*.sh
 	sources or submitted to the master file maintainer and brought
 	in via a merge.
 
-mkinstalldirs; move-if-change
-	autoconf: http://gnu.org
-	Patches to autoconf-patches@gnu.org.
-	Changes need to be done in tandem with the official AUTOCONF
-	sources or submitted to the master file maintainer and brought
-	in via a merge.
+move-if-change
+	Send bug reports and patches to bug-gnulib@gnu.org.
 
 symlink-tree
 	gcc: http://gcc.gnu.org




Index: codingconventions.html
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/codingconventions.html,v
retrieving revision 1.62
diff -u -r1.62 codingconventions.html
--- codingconventions.html	8 Jan 2011 12:12:42 -0000	1.62
+++ codingconventions.html	28 Jan 2011 20:13:41 -0000
@@ -490,6 +490,11 @@ 
 symlink-tree and ylwrap:  These are copied from mainline automake, using
 <code>automake --add-missing --copy --force-missing</code>.</li>
 
+<li>move-if-change:  gnulib hosts this now.  The latest version can be
+retrieved from
+<a href="http://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/move-if-change">http://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/move-if-change</a>.
+</li>
+
 <li>Top-level config.rpath:  This comes originally from gettext, but
 gnulib can be considered upstream.  The latest version can be retrieved
 from