classes/externalsrc: create symlinks for workdir and logs

Auto-create symlinks in the source directory to the work directory
(${WORKDIR}) and logs directory (${T}) so that they are easier for the
user to find. This is particularly useful within the extensible SDK
where the user is less likely to be familiar enough with the structure
of the build system to know where to find these things, but otherwise
they are a useful shortcut for anyone.

(From OE-Core rev: 58adb3904c18acefd0da319e32f66ebca72eeaac)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2016-02-11 14:13:27 +13:00 committed by Richard Purdie
parent 20034c3f7a
commit e36cb6c718
1 changed files with 20 additions and 0 deletions

View File

@ -25,6 +25,7 @@
#
SRCTREECOVEREDTASKS ?= "do_patch do_unpack do_fetch"
EXTERNALSRC_SYMLINKS ?= "oe-workdir:${WORKDIR} oe-logs:${T}"
python () {
externalsrc = d.getVar('EXTERNALSRC', True)
@ -82,6 +83,7 @@ python () {
bb.build.deltask(task, d)
d.prependVarFlag('do_compile', 'prefuncs', "externalsrc_compile_prefunc ")
d.prependVarFlag('do_configure', 'prefuncs', "externalsrc_configure_prefunc ")
# Ensure compilation happens every time
d.setVarFlag('do_compile', 'nostamp', '1')
@ -101,6 +103,24 @@ python () {
d.setVarFlag('do_configure', 'file-checksums', configstamp + ':True')
}
python externalsrc_configure_prefunc() {
# Create desired symlinks
symlinks = (d.getVar('EXTERNALSRC_SYMLINKS', True) or '').split()
for symlink in symlinks:
symsplit = symlink.split(':', 1)
lnkfile = os.path.join(d.getVar('S', True), symsplit[0])
target = d.expand(symsplit[1])
if len(symsplit) > 1:
if os.path.islink(lnkfile):
# Link already exists, leave it if it points to the right location already
if os.readlink(lnkfile) == target:
continue
elif os.path.exists(lnkfile):
# File/dir exists with same name as link, just leave it alone
continue
os.symlink(target, lnkfile)
}
python externalsrc_compile_prefunc() {
# Make it obvious that this is happening, since forgetting about it could lead to much confusion
bb.plain('NOTE: %s: compiling from external source tree %s' % (d.getVar('PN', True), d.getVar('EXTERNALSRC', True)))