scripts/cp-noerror: Add a special copy function to fix autotools issues
authorRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 29 May 2012 12:28:48 +0000 (13:28 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Wed, 30 May 2012 11:04:49 +0000 (12:04 +0100)
Currently we copy the aclocal directory to the build so that autotools
doesn't see .m4 files disappear when its processing them. This can happen
if for example, package X is being rebuilt at the same time as Y and it
gets uninstalled from sstate (assuming there are no dependencies between
X and Y). This code making the copy was added to avoid races but introduces
a race of its own, namely that the files can disappear during the copy.

This patch adds a cp-noerror script which silently ignores such errors
and gives the behaviour we need in this case. It hence fixes issues which
crop up for users and the autobuilder occasionally.

[YOCTO #2485]

(From OE-Core rev: 0f81fbc0df73675aeb79c724858799a3b6a02f85)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
meta/classes/autotools.bbclass
scripts/cp-noerror [new file with mode: 0755]

index 941c06d..9b36f3c 100644 (file)
@@ -124,10 +124,9 @@ autotools_do_configure() {
                        # uninstalling data from the sysroot. See Yocto #861 for details.
                        # We avoid this by taking a copy here and then files cannot disappear.
                        if [ -d ${STAGING_DATADIR}/aclocal ]; then
-                               mkdir -p ${B}/aclocal-copy/
                                # for scratch build this directory can be empty
                                # so avoid cp's no files to copy error
-                               cp -r ${STAGING_DATADIR}/aclocal/. ${B}/aclocal-copy/
+                               cp-noerror ${STAGING_DATADIR}/aclocal ${B}/aclocal-copy/
                                acpaths="$acpaths -I ${B}/aclocal-copy/"
                        fi
                        # autoreconf is too shy to overwrite aclocal.m4 if it doesn't look
diff --git a/scripts/cp-noerror b/scripts/cp-noerror
new file mode 100755 (executable)
index 0000000..fdb3d2d
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+#
+# Allow copying of $1 to $2 but if files in $1 disappear during the copy operation,
+# don't error.
+#
+
+import sys
+import shutil
+
+try:
+    shutil.copytree(sys.argv[1], sys.argv[2])
+except shutil.Error:
+   pass
+
+