diff options
| -rw-r--r-- | meta/classes/src_distribute.bbclass | 54 | ||||
| -rw-r--r-- | meta/classes/src_distribute_local.bbclass | 28 |
2 files changed, 52 insertions, 30 deletions
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" | |||
| 2 | python do_distribute_sources () { | 2 | python do_distribute_sources () { |
| 3 | l = bb.data.createCopy(d) | 3 | l = bb.data.createCopy(d) |
| 4 | bb.data.update_data(l) | 4 | bb.data.update_data(l) |
| 5 | licenses = (bb.data.getVar('LICENSE', d, 1) or "unknown").split() | ||
| 6 | 5 | ||
| 7 | sources_dir = bb.data.getVar('SRC_DISTRIBUTEDIR', d, 1) | 6 | sources_dir = bb.data.getVar('SRC_DISTRIBUTEDIR', d, 1) |
| 8 | import re | 7 | src_uri = bb.data.getVar('SRC_URI', d, 1).split() |
| 9 | for license in licenses: | 8 | fetcher = bb.fetch2.Fetch(src_uri, d) |
| 10 | for entry in license.split("|"): | 9 | ud = fetcher.ud |
| 11 | for s in (bb.data.getVar('A', d, 1) or "").split(): | 10 | |
| 12 | s = re.sub(';.*$', '', s) | 11 | licenses = bb.data.getVar('LICENSE', d, 1).replace('&', '|') |
| 13 | cmd = bb.data.getVar('SRC_DISTRIBUTECOMMAND', d, 1) | 12 | licenses = licenses.replace('(', '').replace(')', '') |
| 14 | if not cmd: | 13 | clean_licenses = "" |
| 15 | raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not defined") | 14 | for x in licenses.split(): |
| 16 | bb.data.setVar('SRC', s, d) | 15 | if x.strip() == '' or x == 'CLOSED': |
| 17 | bb.data.setVar('SRC_DISTRIBUTEDIR', "%s/%s" % (sources_dir, entry), d) | 16 | continue |
| 18 | bb.build.exec_func('SRC_DISTRIBUTECOMMAND', d) | 17 | |
| 18 | if x != "|": | ||
| 19 | clean_licenses += x | ||
| 20 | |||
| 21 | for license in clean_licenses.split('|'): | ||
| 22 | for url in ud.values(): | ||
| 23 | cmd = bb.data.getVar('SRC_DISTRIBUTECOMMAND', d, 1) | ||
| 24 | if not cmd: | ||
| 25 | raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not defined") | ||
| 26 | url.setup_localpath(d) | ||
| 27 | bb.data.setVar('SRC', url.localpath, d) | ||
| 28 | if url.type == 'file': | ||
| 29 | if url.basename == '*': | ||
| 30 | import os.path | ||
| 31 | dest_dir = os.path.basename(os.path.dirname(os.path.abspath(url.localpath))) | ||
| 32 | bb.data.setVar('DEST', "%s_%s/" % (bb.data.getVar('PF', d, 1), dest_dir), d) | ||
| 33 | else: | ||
| 34 | bb.data.setVar('DEST', "%s_%s" % (bb.data.getVar('PF', d, 1), url.basename), d) | ||
| 35 | else: | ||
| 36 | bb.data.setVar('DEST', '', d) | ||
| 37 | |||
| 38 | bb.data.setVar('SRC_DISTRIBUTEDIR', "%s/%s" % (sources_dir, license), d) | ||
| 39 | bb.build.exec_func('SRC_DISTRIBUTECOMMAND', d) | ||
| 19 | } | 40 | } |
| 20 | 41 | ||
| 21 | addtask distribute_sources before do_build after do_fetch | 42 | addtask distribute_sources before do_build after do_fetch |
| 22 | 43 | ||
| 23 | addtask distsrcall after do_distribute_sources | 44 | addtask distribute_sources_all after do_distribute_sources |
| 24 | do_distall[recrdeptask] = "do_distribute_sources" | 45 | do_distribute_sources_all[recrdeptask] = "do_distribute_sources" |
| 25 | base_do_distsrcall() { | 46 | do_distribute_sources_all[nostamp] = "1" |
| 47 | do_distribute_sources_all () { | ||
| 26 | : | 48 | : |
| 27 | } | 49 | } |
| 28 | |||
| 29 | 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 @@ | |||
| 1 | inherit src_distribute | 1 | inherit src_distribute |
| 2 | 2 | ||
| 3 | # SRC_DIST_LOCAL possible values: | 3 | # SRC_DIST_LOCAL possible values: |
| 4 | # copy copies the files from ${A} to the distributedir | 4 | # copy copies the files to the distributedir |
| 5 | # symlink symlinks the files from ${A} to the distributedir | 5 | # symlink symlinks the files to the distributedir |
| 6 | # move+symlink moves the files into distributedir, and symlinks them back | 6 | # move+symlink moves the files into distributedir, and symlinks them back |
| 7 | SRC_DIST_LOCAL ?= "move+symlink" | 7 | SRC_DIST_LOCAL ?= "move+symlink" |
| 8 | SRC_DISTRIBUTEDIR ?= "${DEPLOY_DIR}/sources" | 8 | SRC_DISTRIBUTEDIR ?= "${DEPLOY_DIR}/sources" |
| 9 | SRC_DISTRIBUTECOMMAND () { | 9 | SRC_DISTRIBUTECOMMAND () { |
| 10 | s="${SRC}" | 10 | s="${SRC}" |
| 11 | if [ ! -L "$s" ] && (echo "$s"|grep "^${DL_DIR}"); then | 11 | d="${DEST}" |
| 12 | : | 12 | |
| 13 | else | ||
| 14 | exit 0; | ||
| 15 | fi | ||
| 16 | mkdir -p ${SRC_DISTRIBUTEDIR} | 13 | mkdir -p ${SRC_DISTRIBUTEDIR} |
| 14 | |||
| 15 | if echo $d | grep -q '/$'; then | ||
| 16 | mkdir -p ${SRC_DISTRIBUTEDIR}/$d | ||
| 17 | fi | ||
| 18 | |||
| 17 | case "${SRC_DIST_LOCAL}" in | 19 | case "${SRC_DIST_LOCAL}" in |
| 18 | copy) | 20 | copy) |
| 19 | test -e $s.md5 && cp -f $s.md5 ${SRC_DISTRIBUTEDIR}/ | 21 | test -e $s.md5 && cp -f $s.md5 ${SRC_DISTRIBUTEDIR}/$d.md5 |
| 20 | cp -f $s ${SRC_DISTRIBUTEDIR}/ | 22 | cp -f $s ${SRC_DISTRIBUTEDIR}/$d |
| 21 | ;; | 23 | ;; |
| 22 | symlink) | 24 | symlink) |
| 23 | test -e $s.md5 && ln -sf $s.md5 ${SRC_DISTRIBUTEDIR}/ | 25 | test -e $s.md5 && ln -sf $s.md5 ${SRC_DISTRIBUTEDIR}/$d.md5 |
| 24 | ln -sf $s ${SRC_DISTRIBUTEDIR}/ | 26 | ln -sf $s ${SRC_DISTRIBUTEDIR}/$d |
| 25 | ;; | 27 | ;; |
| 26 | move+symlink) | 28 | move+symlink) |
| 27 | mv $s ${SRC_DISTRIBUTEDIR}/ | 29 | mv $s ${SRC_DISTRIBUTEDIR}/$d |
| 28 | ln -sf ${SRC_DISTRIBUTEDIR}/`basename $s` $s | 30 | ln -sf ${SRC_DISTRIBUTEDIR}/$d $s |
| 29 | ;; | 31 | ;; |
| 30 | esac | 32 | esac |
| 31 | } | 33 | } |
