]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
dist: avoid $(distdir) removal failure on MSYS/MinGW
authorStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 11 Jan 2012 17:09:07 +0000 (18:09 +0100)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Fri, 13 Jan 2012 11:41:03 +0000 (12:41 +0100)
This change fixes automake bug#10470.

On MSYS (1.0.17) it is not possible to remove a directory that is
in use, and this, together with timing issues, could cause spurious
failures in the cleanup code of the "distcheck" recipe.  In fact,
it should be noted that assuming a directory can be removed while
it the CWD of a running process is a POSIX violation:

  "If the directory is the root directory or the current working
   directory of any process, it is unspecified whether the function
   succeeds, or whether it shall fail and set errno to [EBUSY]."

* lib/am/distdir.am (am__remove_distdir): If rm fails, sleep some
seconds and retry, to give potential "pending" processes some time
to exit and "release" the directory.
* tests/Makefile.am (XFAIL_TESTS): Remove 'distcheck-pr10470.test'.

Report and suggestions by Peter Rosin and Eric Blake.

lib/am/distdir.am
tests/Makefile.am

index a681101e0a4dabc99b205427a735fb00e1d5bd28..cd2e4bf5ffe167f8ca2c1eb2841178f57dfe3ca8 100644 (file)
@@ -1,6 +1,6 @@
 ## automake - create Makefile.in from Makefile.am
 ## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-## 2010, 2011 Free Software Foundation, Inc.
+## 2010, 2011, 2012 Free Software Foundation, Inc.
 
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -23,10 +23,17 @@ distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
-
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+## On MSYS (1.0.17) it is not possible to remove a directory that is in
+## use; so, if the first rm fails, we sleep some seconds and retry, to
+## give pending processes some time to exit and "release" the directory
+## before we remove it.  The value of "some seconds" is 5 for the moment,
+## which is mostly an arbitrary value, but seems high enough in practice.
+## See automake bug#10470.
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
 endif %?TOPDIR_P%
 
 if %?SUBDIRS%
index e10dbd537d8dcbcfb1b4d5f715bb45f5ed5c5d88..e79c3beb42d92136a0eea725a7e45e5c493bbcec 100644 (file)
@@ -23,7 +23,6 @@ auxdir2.test \
 cond17.test \
 dist-auxfile.test \
 dist-auxfile-2.test \
-distcheck-pr10470.test \
 gcj6.test \
 java-nobase.test \
 objext-pr10128.test \