diff options
author | Andreas Oberritter <obi@opendreambox.org> | 2011-01-06 12:48:29 +0000 |
---|---|---|
committer | Martin Jansa <Martin.Jansa@gmail.com> | 2011-04-22 19:41:07 +0200 |
commit | e068af164391d56199f46c5c16927d025cc74518 (patch) | |
tree | 529fb77f3252a5ac78bc7a4befd9033da43721cb | |
parent | 5ec95b9a12527693f18537db953433628510fbc7 (diff) | |
download | openembedded-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.bbclass | 3 | ||||
-rw-r--r-- | docs/usermanual/reference/var_src_uri.xml | 13 | ||||
-rw-r--r-- | lib/oe/unpack.py | 81 |
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] = "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] = "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 |