--- /files/ebuild.sh 2006-06-18 10:49:40.000000000 +0200 +++ /usr/lib/portage/bin/ebuild.sh 2006-06-18 11:08:25.000000000 +0200 @@ -360,7 +360,7 @@ y=${y##*.} myfail="${x} does not exist" - if [ "${x:0:2}" = "./" ] ; then + if [ "${x:0:2}" = "./" -o "${x:0:1}" = "/" ] ; then srcdir="" else srcdir="${DISTDIR}/" @@ -371,7 +371,7 @@ myfail="failure unpacking ${x}" case "${x##*.}" in - tar) + tar|TAR) tar xf "${srcdir}${x}" ${tarvars} || die "$myfail" ;; tgz) @@ -401,20 +401,44 @@ ;; 7Z|7z) local my_output - my_output="$(7z x -y "${srcdir}/${x}")" + my_output="$(7z x -y "${srcdir}${x}")" if [ $? -ne 0 ]; then echo "${my_output}" >&2 die "$myfail" fi ;; RAR|rar) - unrar x -idq "${srcdir}/${x}" || die "$myfail" + unrar x -idq "${srcdir}${x}" || die "$myfail" ;; LHa|LHA|lha|lzh) - lha xqf "${srcdir}/${x}" || die "$myfail" + lha xqf "${srcdir}${x}" || die "$myfail" ;; a|deb) - ar x "${srcdir}/${x}" || die "$myfail" + ar x "${srcdir}${x}" || die "$myfail" + ;; + rpm) + local rpmoff decompcmd + if [ -x /usr/bin/rpm2cpio -a -z "${USE_RPMOFFSET_ONLY}" ]; then + rpm2cpio ${srcdir}${x} | cpio -idmu --no-preserve-owner --quiet || die "$myfail" + else + rpmoff=`rpmoffset < ${srcdir}${x}` + [ -z "${rpmoff}" ] && die "rpmoffset not found, $myfail" + + decompcmd="gzip -dc" + if [ -n "$(dd if=${srcdir}${x} skip=${rpmoff} bs=1 count=3 2>/dev/null | file - | grep bzip2)" ]; then + decompcmd="bzip2 -dc" + fi + dd ibs=${rpmoff} skip=1 if=${srcdir}${x} 2> /dev/null \ + | ${decompcmd} \ + | cpio -idmu --no-preserve-owner --quiet || die "$myfail" + fi + ;; + sh|bin|run) + if ! grep -aq '#.*Makeself' "${srcdir}${x}"; then + vecho "unpack ${x}: no Makeself packed file. Ignoring." + else + unmakeself "${srcdir}${x}" || die "$myfail" + fi ;; *) vecho "unpack ${x}: file format not recognized. Ignoring."