Let quilt setup handle zip archives referenced in spec files. --- quilt/scripts/inspect.in | 28 ++++++++++++++++++++++++++++ quilt/setup.in | 23 +++++++++++++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -251,6 +251,21 @@ cat <<-'EOF' > $tmpdir/bin/wrapper esac } + unzip_input_file() { + while [ $# -gt 0 ]; do + case "$1" in + -*) + shift + ;; + *) + echo "$1" + return + ;; + esac + done + return 1 + } + tar_opt_C() { case "$1" in *C*f*) @@ -270,6 +285,9 @@ cat <<-'EOF' > $tmpdir/bin/wrapper # For tar, file - means read from stdin [ "$inputfile" = "-" ] && inputfile= ;; + unzip) + inputfile=$(unzip_input_file "$@") + ;; esac if [ -z "$inputfile" ]; then # put data from stdin into tmpfile @@ -309,6 +327,14 @@ cat <<-'EOF' > $tmpdir/bin/wrapper dir=${dir// /\\ } echo "${0##*/} ${dir:-.} $unpackfile" >&3 ;; + unzip) + echo -n Z >&4 + dir=$PWD + dir=${dir/$RPM_BUILD_DIR} + dir=${dir##/} + dir=${dir// /\\ } + echo "${0##*/} ${dir:-.} $unpackfile" >&3 + ;; esac fi @@ -333,6 +359,7 @@ fi ln -s wrapper $tmpdir/bin/patch ln -s wrapper $tmpdir/bin/tar +ln -s wrapper $tmpdir/bin/unzip # let rpm do all the dirty specfile stuff ... echo -n "### rpmbuild: " >&4 @@ -343,6 +370,7 @@ rpmbuild --eval "%define _sourcedir $sou --eval "%define _builddir $tmpdir/build" \ --eval "%define __patch $tmpdir/bin/patch" \ --eval "%define __tar $tmpdir/bin/tar" \ + --eval "%define __unzip $tmpdir/bin/unzip" \ --eval "$DEFINE_FUZZ" \ --nodeps \ -bp "$specdir/$specfile" < /dev/null >&5 2>&5 --- a/quilt/setup.in +++ b/quilt/setup.in @@ -167,7 +167,15 @@ case "$1" in "# Source: "*) shift 2 source="$@" - echo "tar ${tar_dir:-.} ${source// /\\ }" + filetype="$(file -b "$source")" + case "$filetype" in + Zip*) + echo "unzip ${tar_dir:-.} ${source// /\\ }" + ;; + *) + echo "tar ${tar_dir:-.} ${source// /\\ }" + ;; + esac ;; "# Patchdir: "*) shift 2 @@ -198,6 +206,17 @@ do cat_file "$tarball" \ | tar xf - -C "$prefix$dir" ;; + unzip) + tarball=$sourcedir$arg1 + if [ ! -e "$tarball" ] + then + printf $"File %s not found\n" "$tarball" >&2 + exit 1 + fi + printf $"Unpacking archive %s\n" "$tarball" + mkdir -p "${prefix:-.}" "$prefix$dir" + unzip -qqo "$tarball" -d "$prefix$dir" + ;; esac done < $tmpfile @@ -212,7 +231,7 @@ fi while read tag dir arg1 arg2 do case "$tag" in - tar) + tar|unzip) tar_dir="$dir" [ "$tar_dir" = . ] && tar_dir= tar_file="$arg1"