[gnome-continuous-yocto/gnomeostree-3.28-rocko: 4315/8267] staging: Handle overlapping files for build-sysroot



commit da114c7d7d69b5795cd574d117d961599f72f4cc
Author: Richard Purdie <richard purdie linuxfoundation org>
Date:   Thu Jan 26 10:06:35 2017 +0000

    staging: Handle overlapping files for build-sysroot
    
    The use of bb.fatal means build-sysroots fails as soon as multiple gdb's are
    built with overlapping files, or multiple recipes with overlapping headers
    exist.
    
    Change the fatal call into an exception which we can then trap. Also
    avoid trying to call readlink on something with isn't a symlink.
    
    This allows build-sysroots to work better under various scenarios.
    
    (From OE-Core rev: e20343a90e401bc92167867729076d321081d120)
    
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 meta/classes/staging.bbclass |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)
---
diff --git a/meta/classes/staging.bbclass b/meta/classes/staging.bbclass
index b97f261..1fe60ac 100644
--- a/meta/classes/staging.bbclass
+++ b/meta/classes/staging.bbclass
@@ -260,9 +260,11 @@ def staging_copyfile(c, target, fixme, postinsts, stagingdir):
     if os.path.islink(c):
         linkto = os.readlink(c)
         if os.path.lexists(dest):
+            if not os.path.islink(dest):
+                raise OSError(errno.EEXIST, "Link %s already exists as a file" % dest, dest)
             if os.readlink(dest) == linkto:
                 return dest
-            bb.fatal("Link %s already exists to a different location?" % dest)
+            raise OSError(errno.EEXIST, "Link %s already exists to a different location? (%s vs %s)" % 
(dest, os.readlink(dest), linkto), dest)
         os.symlink(linkto, dest)
         #bb.warn(c)
     else:
@@ -331,7 +333,10 @@ def staging_populate_sysroot_dir(targetsysroot, nativesysroot, native, d):
                     if l.endswith("/"):
                         staging_copydir(l, targetdir, stagingdir)
                         continue
-                    staging_copyfile(l, targetdir, fixme, postinsts, stagingdir)
+                    try:
+                        staging_copyfile(l, targetdir, fixme, postinsts, stagingdir)
+                    except FileExistsError:
+                        continue
 
     staging_processfixme(fixme, targetdir, targetsysroot, nativesysroot, d)
     for p in postinsts:


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