src_distribute.bbclass, src_distribute_local.bbclass: mostly rewritten

The code used to reference unavailable variables and mistakenly define
the tasks so fully demonstrating this have not been in use for a
while.

During the code rewrite, it was extended to copy also the patches into
the source distribution directory but using the PF as prefix to avoid
name colision among other recipes.

As 'distsrcall' task was not properly defined and noone noticed it,
until now, it got renamed to 'distribute_sources_all' as it is a
better and more meanful name for the task.

(From OE-Core rev: 6b6e0667871fb5f43b68440954c3ad629dfc92e7)

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Otavio Salvador 2011-10-17 13:04:43 +00:00 committed by Richard Purdie
parent f9257c3990
commit 6c0bf212b5
2 changed files with 52 additions and 30 deletions

View File

@ -2,28 +2,48 @@ SRC_DISTRIBUTECOMMAND[func] = "1"
python do_distribute_sources () {
l = bb.data.createCopy(d)
bb.data.update_data(l)
licenses = (bb.data.getVar('LICENSE', d, 1) or "unknown").split()
sources_dir = bb.data.getVar('SRC_DISTRIBUTEDIR', d, 1)
import re
for license in licenses:
for entry in license.split("|"):
for s in (bb.data.getVar('A', d, 1) or "").split():
s = re.sub(';.*$', '', s)
cmd = bb.data.getVar('SRC_DISTRIBUTECOMMAND', d, 1)
if not cmd:
raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not defined")
bb.data.setVar('SRC', s, d)
bb.data.setVar('SRC_DISTRIBUTEDIR', "%s/%s" % (sources_dir, entry), d)
bb.build.exec_func('SRC_DISTRIBUTECOMMAND', d)
src_uri = bb.data.getVar('SRC_URI', d, 1).split()
fetcher = bb.fetch2.Fetch(src_uri, d)
ud = fetcher.ud
licenses = bb.data.getVar('LICENSE', d, 1).replace('&', '|')
licenses = licenses.replace('(', '').replace(')', '')
clean_licenses = ""
for x in licenses.split():
if x.strip() == '' or x == 'CLOSED':
continue
if x != "|":
clean_licenses += x
for license in clean_licenses.split('|'):
for url in ud.values():
cmd = bb.data.getVar('SRC_DISTRIBUTECOMMAND', d, 1)
if not cmd:
raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not defined")
url.setup_localpath(d)
bb.data.setVar('SRC', url.localpath, d)
if url.type == 'file':
if url.basename == '*':
import os.path
dest_dir = os.path.basename(os.path.dirname(os.path.abspath(url.localpath)))
bb.data.setVar('DEST', "%s_%s/" % (bb.data.getVar('PF', d, 1), dest_dir), d)
else:
bb.data.setVar('DEST', "%s_%s" % (bb.data.getVar('PF', d, 1), url.basename), d)
else:
bb.data.setVar('DEST', '', d)
bb.data.setVar('SRC_DISTRIBUTEDIR', "%s/%s" % (sources_dir, license), d)
bb.build.exec_func('SRC_DISTRIBUTECOMMAND', d)
}
addtask distribute_sources before do_build after do_fetch
addtask distsrcall after do_distribute_sources
do_distall[recrdeptask] = "do_distribute_sources"
base_do_distsrcall() {
addtask distribute_sources_all after do_distribute_sources
do_distribute_sources_all[recrdeptask] = "do_distribute_sources"
do_distribute_sources_all[nostamp] = "1"
do_distribute_sources_all () {
:
}
EXPORT_FUNCTIONS do_distsrcall

View File

@ -1,31 +1,33 @@
inherit src_distribute
# SRC_DIST_LOCAL possible values:
# copy copies the files from ${A} to the distributedir
# symlink symlinks the files from ${A} to the distributedir
# copy copies the files to the distributedir
# symlink symlinks the files to the distributedir
# move+symlink moves the files into distributedir, and symlinks them back
SRC_DIST_LOCAL ?= "move+symlink"
SRC_DISTRIBUTEDIR ?= "${DEPLOY_DIR}/sources"
SRC_DISTRIBUTECOMMAND () {
s="${SRC}"
if [ ! -L "$s" ] && (echo "$s"|grep "^${DL_DIR}"); then
:
else
exit 0;
fi
d="${DEST}"
mkdir -p ${SRC_DISTRIBUTEDIR}
if echo $d | grep -q '/$'; then
mkdir -p ${SRC_DISTRIBUTEDIR}/$d
fi
case "${SRC_DIST_LOCAL}" in
copy)
test -e $s.md5 && cp -f $s.md5 ${SRC_DISTRIBUTEDIR}/
cp -f $s ${SRC_DISTRIBUTEDIR}/
test -e $s.md5 && cp -f $s.md5 ${SRC_DISTRIBUTEDIR}/$d.md5
cp -f $s ${SRC_DISTRIBUTEDIR}/$d
;;
symlink)
test -e $s.md5 && ln -sf $s.md5 ${SRC_DISTRIBUTEDIR}/
ln -sf $s ${SRC_DISTRIBUTEDIR}/
test -e $s.md5 && ln -sf $s.md5 ${SRC_DISTRIBUTEDIR}/$d.md5
ln -sf $s ${SRC_DISTRIBUTEDIR}/$d
;;
move+symlink)
mv $s ${SRC_DISTRIBUTEDIR}/
ln -sf ${SRC_DISTRIBUTEDIR}/`basename $s` $s
mv $s ${SRC_DISTRIBUTEDIR}/$d
ln -sf ${SRC_DISTRIBUTEDIR}/$d $s
;;
esac
}