diff --git a/meta/classes/src_distribute.bbclass b/meta/classes/src_distribute.bbclass index 17d6c09895..fbfbdf0094 100644 --- a/meta/classes/src_distribute.bbclass +++ b/meta/classes/src_distribute.bbclass @@ -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 diff --git a/meta/classes/src_distribute_local.bbclass b/meta/classes/src_distribute_local.bbclass index 5f0cef5bec..17b67e3d16 100644 --- a/meta/classes/src_distribute_local.bbclass +++ b/meta/classes/src_distribute_local.bbclass @@ -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 }