aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Oberritter <obi@opendreambox.org>2011-01-06 12:48:29 +0000
committerMartin Jansa <Martin.Jansa@gmail.com>2011-04-22 19:41:07 +0200
commite068af164391d56199f46c5c16927d025cc74518 (patch)
tree529fb77f3252a5ac78bc7a4befd9033da43721cb
parent5ec95b9a12527693f18537db953433628510fbc7 (diff)
downloadopenembedded-e068af164391d56199f46c5c16927d025cc74518.tar.gz
unpack.py: add SRC_URI parameter unpack=<bool> (default: true)
* This allows to download compressed files without extracting them * Use case: gcj requires ecj.jar, which must be downloaded separately and put into the gcc source directory before configure gets executed. Signed-off-by: Andreas Oberritter <obi@opendreambox.org> CC: Chris Larson <chris_larson@mentor.com> Reviewed-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-rw-r--r--classes/base.bbclass3
-rw-r--r--docs/usermanual/reference/var_src_uri.xml13
-rw-r--r--lib/oe/unpack.py81
3 files changed, 61 insertions, 36 deletions
diff --git a/classes/base.bbclass b/classes/base.bbclass
index 737e0edd3a..ffa9ab4436 100644
--- a/classes/base.bbclass
+++ b/classes/base.bbclass
@@ -189,12 +189,11 @@ def oe_unpack(d, local, urldata):
bb.mkdirhier(destdir)
else:
destdir = workdir
- dos = urldata.parm.get("dos")
bb.note("Unpacking %s to %s/" % (base_path_out(local, d),
base_path_out(destdir, d)))
try:
- unpack_file(local, destdir, env={"PATH": d.getVar("PATH", True)}, dos=dos)
+ unpack_file(local, destdir, urldata.parm, env={"PATH": d.getVar("PATH", True)})
except UnpackError, exc:
bb.fatal(str(exc))
diff --git a/docs/usermanual/reference/var_src_uri.xml b/docs/usermanual/reference/var_src_uri.xml
index c4f30a295b..4b8df9bbf8 100644
--- a/docs/usermanual/reference/var_src_uri.xml
+++ b/docs/usermanual/reference/var_src_uri.xml
@@ -91,7 +91,8 @@ SRC_URI[sha256sum] = &quot;36bdb85c97b39ac604bc58cb7857ee08295242c78a12848ef8a31
it is unpacked into the work directory, <command>${WORKDIR}</command>. The
unpacker recognises several archive and compression types and for these it
will decompress any compressed files and extract all of the files from
- archives into the work directory. The supported types are:</para>
+ archives into the work directory, unless the option <command>unpack=no</command>
+ is set for the given file. The supported types are:</para>
<variablelist>
<varlistentry>
@@ -192,6 +193,16 @@ SRC_URI[sha256sum] = &quot;36bdb85c97b39ac604bc58cb7857ee08295242c78a12848ef8a31
md5sum option provided.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term>unpack={yes|no}</term>
+
+ <listitem>
+ <para>If set to 'yes' (default) and the source file is an archive,
+ then the archive will be decompressed and unpacked into the ${WORKDIR}.
+ Otherwise, the archive will be copied into the ${WORKDIR}.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
<para>Related variables:</para>
diff --git a/lib/oe/unpack.py b/lib/oe/unpack.py
index e4fe5d8363..8e8bf36408 100644
--- a/lib/oe/unpack.py
+++ b/lib/oe/unpack.py
@@ -47,47 +47,62 @@ def subprocess_setup():
# non-Python subprocesses expect.
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
-def unpack_file(file, destdir, dos=False, env=None):
+def unpack_file(file, destdir, parameters, env=None):
import subprocess, shutil
+ try:
+ dos = to_boolean(parameters.get("dos"), False)
+ except ValueError, exc:
+ bb.fatal("Invalid value for 'dos' parameter for %s: %s" %
+ (filename, parameters.get("dos")))
+
+ try:
+ unpack = to_boolean(parameters.get("unpack"), True)
+ except ValueError, exc:
+ bb.fatal("Invalid value for 'unpack' parameter for %s: %s" %
+ (filename, parameters.get("unpack")))
+
dest = os.path.join(destdir, os.path.basename(file))
if os.path.exists(dest):
if os.path.samefile(file, dest):
return True
cmd = None
- if file.endswith('.tar'):
- cmd = 'tar x --no-same-owner -f %s' % file
- elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'):
- cmd = 'tar xz --no-same-owner -f %s' % file
- elif file.endswith('.tbz') or file.endswith('.tbz2') or file.endswith('.tar.bz2'):
- cmd = 'bzip2 -dc %s | tar x --no-same-owner -f -' % file
- elif file.endswith('.gz') or file.endswith('.Z') or file.endswith('.z'):
- root, ext = os.path.splitext(file)
- cmd = 'gzip -dc %s > %s' % (file, os.path.basename(root))
- elif file.endswith('.bz2'):
- root, ext = os.path.splitext(file)
- cmd = 'bzip2 -dc %s > %s' % (file, os.path.basename(root))
- elif file.endswith('.tar.xz'):
- cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
- elif file.endswith('.xz'):
- root, ext = os.path.splitext(file)
- cmd = 'xz -dc %s > %s' % (file, os.path.basename(root))
- elif file.endswith('.tar.lz'):
- cmd = 'lzip -dc %s | tar x --no-same-owner -f -' % file
- elif file.endswith('.lz'):
- root, ext = os.path.splitext(file)
- cmd = 'lzip -dc %s > %s' % (file, os.path.basename(root))
- elif file.endswith('.zip') or file.endswith('.jar'):
- cmd = 'unzip -q -o'
- if dos:
- cmd = '%s -a' % cmd
- cmd = "%s '%s'" % (cmd, file)
- elif os.path.isdir(file):
- shutil.rmtree(dest, True)
- shutil.copytree(file, dest, True)
- else:
- shutil.copy2(file, dest)
+ if unpack:
+ if file.endswith('.tar'):
+ cmd = 'tar x --no-same-owner -f %s' % file
+ elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'):
+ cmd = 'tar xz --no-same-owner -f %s' % file
+ elif file.endswith('.tbz') or file.endswith('.tbz2') or file.endswith('.tar.bz2'):
+ cmd = 'bzip2 -dc %s | tar x --no-same-owner -f -' % file
+ elif file.endswith('.gz') or file.endswith('.Z') or file.endswith('.z'):
+ root, ext = os.path.splitext(file)
+ cmd = 'gzip -dc %s > %s' % (file, os.path.basename(root))
+ elif file.endswith('.bz2'):
+ root, ext = os.path.splitext(file)
+ cmd = 'bzip2 -dc %s > %s' % (file, os.path.basename(root))
+ elif file.endswith('.tar.xz'):
+ cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
+ elif file.endswith('.xz'):
+ root, ext = os.path.splitext(file)
+ cmd = 'xz -dc %s > %s' % (file, os.path.basename(root))
+ elif file.endswith('.tar.lz'):
+ cmd = 'lzip -dc %s | tar x --no-same-owner -f -' % file
+ elif file.endswith('.lz'):
+ root, ext = os.path.splitext(file)
+ cmd = 'lzip -dc %s > %s' % (file, os.path.basename(root))
+ elif file.endswith('.zip') or file.endswith('.jar'):
+ cmd = 'unzip -q -o'
+ if dos:
+ cmd = '%s -a' % cmd
+ cmd = "%s '%s'" % (cmd, file)
+
+ if not unpack or not cmd:
+ if os.path.isdir(file):
+ shutil.rmtree(dest, True)
+ shutil.copytree(file, dest, True)
+ else:
+ shutil.copy2(file, dest)
if not cmd:
return