[oe-commits] Chris Larson : src_distribute*.bbclass: cleanup, revamp parts, distribute all sources.

git version control git at git.openembedded.org
Wed Aug 19 21:57:06 UTC 2009


Module: openembedded.git
Branch: org.openembedded.dev
Commit: ee09ed852dd3e6a831a9ae5c31f260a4a9057645
URL:    http://gitweb.openembedded.net/?p=openembedded.git&a=commit;h=ee09ed852dd3e6a831a9ae5c31f260a4a9057645

Author: Chris Larson <clarson at mvista.com>
Date:   Thu May 28 15:27:31 2009 -0700

src_distribute*.bbclass: cleanup, revamp parts, distribute all sources.

- Kill the big shell function with the case statement used in _local in
  favor of a set of bitbake variables, with the appropriate one selected
  as SRC_DISTRIBUTECOMMAND.
- Add and use SRC_DISTRIBUTE_DLONLY to toggle distribution of all sources
  versus just those downloaded to DL_DIR.  This variable expects to be set
  to an integer, anything but 0 will enable dlonly operation.  This is
  disabled by default.
- Add a more sanely named distribute_sources_all, and make distsrcall
  depend on it, for compatibility.
- By default, distributes the sources into
  ${SRC_DISTRIBUTEDIR}/${LIC}/${PN}/.
- Move some _local specific bits, like use of SRC_DISTRIBUTEDIR, out of
  the main class.
- Set a "LIC" var along with the "SRC" when running SRC_DISTRIBUTECOMMAND,
  to facilitate the above.

Signed-off-by: Chris Larson <clarson at mvista.com>

---

 classes/src_distribute.bbclass       |   41 ++++++++++++++++-------
 classes/src_distribute_local.bbclass |   58 ++++++++++++++++++---------------
 2 files changed, 60 insertions(+), 39 deletions(-)

diff --git a/classes/src_distribute.bbclass b/classes/src_distribute.bbclass
index 30b2670..3a033b9 100644
--- a/classes/src_distribute.bbclass
+++ b/classes/src_distribute.bbclass
@@ -1,29 +1,44 @@
+SRC_DISTRIBUTE_DLONLY ?= "0"
 SRC_DISTRIBUTECOMMAND[func] = "1"
+
+addtask distribute_sources before do_build after do_fetch
 python do_distribute_sources () {
+	import os, re, bb
+
 	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
+	licenses = (bb.data.getVar('LICENSE', d, 1) or "unknown").split()
 	for license in licenses:
 		for entry in license.split("|"):
 			for url in ((bb.data.getVar('SRC_URI', d, 1) or '').split()):
 				bb.fetch.init([url], d)
 				s = bb.fetch.localpath(url, d)
 				s = re.sub(';.*$', '', s)
+
+				try:
+					dlonly = int(d.getVar("SRC_DISTRIBUTE_DLONLY", 1))
+				except ValueError:
+					raise bb.build.FuncFailed("Invalid value for SRC_DISTRIBUTE_DLONLY: expected integer.")
+				if dlonly:
+					dldir = os.path.realpath(d.getVar("DL_DIR", 1) or "")
+					if dldir and not \
+					   os.path.realpath(s).startswith(dldir + os.path.sep):
+							continue
+
 				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)
+					raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not set")
+				bb.debug(2, "srcdist: running %s" % cmd)
+				bb.data.setVar('SRC', os.path.normpath(s), l)
+				bb.data.setVar('LIC', entry, l)
+				bb.build.exec_func('SRC_DISTRIBUTECOMMAND', l)
 }
 
-addtask distribute_sources before do_build after do_fetch
+addtask distribute_sources_all after do_distribute_sources
+do_distribute_sources_all[recrdeptask] = "do_distribute_sources"
+do_distribute_sources_all[nostamp] = "1"
 
-addtask distsrcall after do_distribute_sources
-do_distsrcall[recrdeptask] = "do_distribute_sources"
-base_do_distsrcall() {
-	:
-}
+# compatability wrapper
+addtask distsrcall after do_distribute_sources_all
+do_distsrcall[nostamp] = "1"
diff --git a/classes/src_distribute_local.bbclass b/classes/src_distribute_local.bbclass
index 5f0cef5..ed58ed1 100644
--- a/classes/src_distribute_local.bbclass
+++ b/classes/src_distribute_local.bbclass
@@ -1,31 +1,37 @@
 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
-# 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
-	mkdir -p ${SRC_DISTRIBUTEDIR}
-	case "${SRC_DIST_LOCAL}" in
-		copy)
-			test -e $s.md5 && cp -f $s.md5 ${SRC_DISTRIBUTEDIR}/
-			cp -f $s ${SRC_DISTRIBUTEDIR}/
-			;;
-		symlink)
-			test -e $s.md5 && ln -sf $s.md5 ${SRC_DISTRIBUTEDIR}/
-			ln -sf $s ${SRC_DISTRIBUTEDIR}/
-			;;
-		move+symlink)
-			mv $s ${SRC_DISTRIBUTEDIR}/
-			ln -sf ${SRC_DISTRIBUTEDIR}/`basename $s` $s
-			;;
-	esac
+SRC_DISTRIBUTECOMMAND[dirs] = "${SRC_DISTRIBUTEDIR}/${LIC}/${PN}"
+
+# symlinks the files to the SRC_DISTRIBUTEDIR
+SRC_DISTRIBUTECOMMAND-symlink () {
+    test -e ${SRC}.md5 && ln -sf ${SRC}.md5 .
+    ln -sf ${SRC} .
+}
+
+# copies the files to the SRC_DISTRIBUTEDIR
+SRC_DISTRIBUTECOMMAND-copy () {
+    test -e ${SRC}.md5 && cp -f ${SRC}.md5 .
+    cp -f ${SRC} .
+}
+
+# moves the files to the SRC_DISTRIBUTEDIR and symlinks them back
+SRC_DISTRIBUTECOMMAND-move+symlink () {
+    if ! [ -L ${SRC} ]; then
+        mv ${SRC} .
+        ln -sf $PWD/`basename ${SRC}` ${SRC}
+        if [ -e ${SRC}.md5 ]; then
+            mv ${SRC}.md5 .
+            ln -sf $PWD/`basename ${SRC}.md5` ${SRC}.md5
+        fi
+    fi
+}
+
+#SRC_DISTRIBUTECOMMAND = "${@str(d.getVar('SRC_DISTRIBUTECOMMAND-%s' % d.getVar('SRC_DIST_LOCAL', 1), 1))}"
+python () {
+    if d.getVar("SRC_DISTRIBUTECOMMAND", 1) is None:
+        cmd = d.getVar("SRC_DISTRIBUTECOMMAND-%s" % d.getVar("SRC_DIST_LOCAL", 1), 0)
+        if cmd:
+            d.setVar("SRC_DISTRIBUTECOMMAND", cmd)
 }





More information about the Openembedded-commits mailing list