]> code.ossystems Code Review - openembedded-core.git/commitdiff
src_distribute.bbclass, src_distribute_local.bbclass: mostly rewritten
authorOtavio Salvador <otavio@ossystems.com.br>
Mon, 17 Oct 2011 13:04:43 +0000 (13:04 +0000)
committerSaul Wold <sgw@linux.intel.com>
Thu, 20 Oct 2011 02:58:45 +0000 (19:58 -0700)
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.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
meta/classes/src_distribute.bbclass
meta/classes/src_distribute_local.bbclass

index 17d6c098950a53e09b4db914736e734557050c49..fbfbdf0094ee43777ef6b6a7b413f5d5384a5676 100644 (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
index 5f0cef5becdd1f9886ee216b73e0ec5f884e8119..17b67e3d16a0e4efc37d724e4daa0850d56aedf6 100644 (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
 }