[oe] [PATCH 3/4] unpack.py: add SRC_URI parameter unpack=<bool> (default: true)
Andreas Oberritter
obi at opendreambox.org
Tue Jan 11 20:31:25 UTC 2011
Ping.
On 01/06/2011 01:48 PM, Andreas Oberritter wrote:
> * 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 at opendreambox.org>
> CC: Chris Larson <chris_larson at mentor.com>
> ---
> classes/base.bbclass | 3 +-
> docs/usermanual/reference/var_src_uri.xml | 13 ++++-
> lib/oe/unpack.py | 81 +++++++++++++++++------------
> 3 files changed, 61 insertions(+), 36 deletions(-)
>
> diff --git a/classes/base.bbclass b/classes/base.bbclass
> index c76b77d..25d72d4 100644
> --- a/classes/base.bbclass
> +++ b/classes/base.bbclass
> @@ -190,12 +190,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 706452f..521c7d5 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 e4fe5d8..8e8bf36 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
More information about the Openembedded-devel
mailing list