aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua Lock <josh@linux.intel.com>2010-01-29 12:27:30 +0000
committerJoshua Lock <josh@linux.intel.com>2010-01-29 12:33:46 +0000
commit50ffb99417c768a9f5286bb69b37b9b7b57baa4f (patch)
tree17997859a1020e30e36b50ddcc025c360b376a8b
parent0e4111c7d9a6241854bfa6f69f41d200830b2558 (diff)
downloadopenembedded-core-contrib-50ffb99417c768a9f5286bb69b37b9b7b57baa4f.tar.gz
packaged-staging: basic support for pulling staging packages from a mirror
Add simple support for trying to fetch staging packages from a http, https or ftp mirror if they do not already exist in PSTAGE_DIR. As documented in local.conf.sample "Poky can try and fetch packaged-staging packages from a http, https or ftp mirror. Set this variable to the root of a pstage directory on a server." If the PSTAGE_MIRROR variable is not set, or the package cannot be found on the mirror it will be built as usual. Signed-off-by: Joshua Lock <josh@linux.intel.com>
-rw-r--r--build/conf/local.conf.sample4
-rw-r--r--meta/classes/packaged-staging.bbclass27
2 files changed, 30 insertions, 1 deletions
diff --git a/build/conf/local.conf.sample b/build/conf/local.conf.sample
index 149c73d664..14af548efd 100644
--- a/build/conf/local.conf.sample
+++ b/build/conf/local.conf.sample
@@ -159,3 +159,7 @@ ENABLE_BINARY_LOCALE_GENERATION = "1"
# on an x86_64 host.
# Supported values are i586 and x86_64
#SDKMACHINE="i586"
+
+# Poky can try and fetch packaged-staging packages from a http, https or ftp
+# mirror. Set this variable to the root of a pstage directory on a server.
+#PSTAGE_MIRROR ?= "http://someserver.tld/share/pstage"
diff --git a/meta/classes/packaged-staging.bbclass b/meta/classes/packaged-staging.bbclass
index 74855c4ab3..4789ecc3b1 100644
--- a/meta/classes/packaged-staging.bbclass
+++ b/meta/classes/packaged-staging.bbclass
@@ -135,7 +135,9 @@ do_clean_prepend() {
stagepkg = bb.data.expand("${PSTAGE_PKG}", d)
bb.note("Removing staging package %s" % stagepkg)
- os.system('rm -rf ' + stagepkg)
+ # Add a wildcard to the end of stagepkg to also get its md5
+ # if it's a fetched package
+ os.system('rm -rf ' + stagepkg + '*')
}
staging_helper () {
@@ -159,6 +161,27 @@ staging_helper () {
fi
}
+def staging_fetch(stagepkg, d):
+ import bb.fetch
+
+ # only try and fetch if the user has configured a mirror
+ if bb.data.getVar('PSTAGE_MIRROR', d) != "":
+ # Copy the data object and override DL_DIR and SRC_URI
+ pd = d.createCopy()
+ dldir = bb.data.expand("${PSTAGE_DIR}/${PSTAGE_PKGPATH}", pd)
+ mirror = bb.data.expand("${PSTAGE_MIRROR}/${PSTAGE_PKGPATH}/", pd)
+ srcuri = mirror + os.path.basename(stagepkg)
+ bb.data.setVar('DL_DIR', dldir, pd)
+ bb.data.setVar('SRC_URI', srcuri, pd)
+
+ # Try a fetch from the pstage mirror, if it fails just return and
+ # we will build the package
+ try:
+ bb.fetch.init([srcuri], pd)
+ bb.fetch.go(pd, [srcuri])
+ except:
+ return
+
PSTAGE_TASKS_COVERED = "fetch unpack munge patch configure qa_configure rig_locales compile sizecheck install deploy package populate_sysroot package_write_deb package_write_ipk package_write package_stage qa_staging"
SCENEFUNCS += "packagestage_scenefunc"
@@ -174,6 +197,8 @@ python packagestage_scenefunc () {
pstage_cleanpackage(removepkg, d)
stagepkg = bb.data.expand("${PSTAGE_PKG}", d)
+ if not os.path.exists(stagepkg):
+ staging_fetch(stagepkg, d)
if os.path.exists(stagepkg):
path = bb.data.getVar("PATH", d, 1)