summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHombourger, Cedric <Cedric_Hombourger@mentor.com>2020-11-18 16:36:13 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2020-11-24 15:26:12 +0000
commit53217b1121da0bc9895edce16cc483dd1f166cc0 (patch)
tree8e591c039447588b34f051a936e6596c650d9fda
parent7ae3a24079384573bb988bcd1f065548c05b13fd (diff)
downloadpoky-53217b1121da0bc9895edce16cc483dd1f166cc0.tar.gz
bitbake: fetch2: use relative symlinks for anything pulled from PREMIRRORS
try_mirror_url() creates a symlink named as the original file to make everything look like files specified in SRC_URI were downloaded from their original location. The link is however created as an absolute reference, this makes DL_DIR non-relocatable. This also causes issues with the Isar project since it bind mounts DL_DIR to /downloads to perform some of its build tasks in a chrooted environment (rendering all symbolic links from DL_DIR invalid). Modify ensure_symlink() to take an optional "relative" argument and have that function use os.path.relpath() to produce a relative symlink. (Bitbake rev: 481e66ea8fc2fc91903127d66b0f1b0fe86baedb) Signed-off-by: Cedric Hombourger <Cedric_Hombourger@mentor.com> Cc: Chris Larson <Chris_Larson@mentor.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/fetch2/__init__.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
index 07b7ae41b4..290773072f 100644
--- a/bitbake/lib/bb/fetch2/__init__.py
+++ b/bitbake/lib/bb/fetch2/__init__.py
@@ -1021,7 +1021,8 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
1021 origud.method.build_mirror_data(origud, ld) 1021 origud.method.build_mirror_data(origud, ld)
1022 return origud.localpath 1022 return origud.localpath
1023 # Otherwise the result is a local file:// and we symlink to it 1023 # Otherwise the result is a local file:// and we symlink to it
1024 ensure_symlink(ud.localpath, origud.localpath) 1024 ensure_symlink(ud.localpath, origud.localpath, relative=True)
1025
1025 update_stamp(origud, ld) 1026 update_stamp(origud, ld)
1026 return ud.localpath 1027 return ud.localpath
1027 1028
@@ -1055,7 +1056,7 @@ def try_mirror_url(fetch, origud, ud, ld, check = False):
1055 bb.utils.unlockfile(lf) 1056 bb.utils.unlockfile(lf)
1056 1057
1057 1058
1058def ensure_symlink(target, link_name): 1059def ensure_symlink(target, link_name, relative=False):
1059 if not os.path.exists(link_name): 1060 if not os.path.exists(link_name):
1060 if os.path.islink(link_name): 1061 if os.path.islink(link_name):
1061 # Broken symbolic link 1062 # Broken symbolic link
@@ -1066,6 +1067,8 @@ def ensure_symlink(target, link_name):
1066 # same time, in which case we do not want the second task to 1067 # same time, in which case we do not want the second task to
1067 # fail when the link has already been created by the first task. 1068 # fail when the link has already been created by the first task.
1068 try: 1069 try:
1070 if relative is True:
1071 target = os.path.relpath(target, os.path.dirname(link_name))
1069 os.symlink(target, link_name) 1072 os.symlink(target, link_name)
1070 except FileExistsError: 1073 except FileExistsError:
1071 pass 1074 pass