/[gentoo-x86]/eclass/unpacker.eclass
Gentoo

Diff of /eclass/unpacker.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.2 Revision 1.9
1# Copyright 1999-2012 Gentoo Foundation 1# Copyright 1999-2012 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/unpacker.eclass,v 1.2 2012/02/05 05:48:00 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/unpacker.eclass,v 1.9 2012/05/11 07:46:44 vapier Exp $
4 4
5# @ECLASS: unpacker.eclass 5# @ECLASS: unpacker.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# base-system@gentoo.org 7# base-system@gentoo.org
8# @BLURB: helpers for extraneous file formats and consistent behavior across EAPIs 8# @BLURB: helpers for extraneous file formats and consistent behavior across EAPIs
194 ;; 194 ;;
195 2.1.3) 195 2.1.3)
196 skip=`grep -a ^offset= "${src}" | awk '{print $3}'` 196 skip=`grep -a ^offset= "${src}" | awk '{print $3}'`
197 (( skip++ )) 197 (( skip++ ))
198 ;; 198 ;;
199 2.1.4|2.1.5) 199 2.1.4|2.1.5|2.1.6)
200 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1) 200 skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1)
201 skip=$(head -n ${skip} "${src}" | wc -c) 201 skip=$(head -n ${skip} "${src}" | wc -c)
202 exe="dd" 202 exe="dd"
203 ;; 203 ;;
204 *) 204 *)
251 251
252 local deb=$(find_unpackable_file "$1") 252 local deb=$(find_unpackable_file "$1")
253 253
254 unpack_banner "${deb}" 254 unpack_banner "${deb}"
255 255
256 # on AIX ar doesn't work out as their ar used a different format
257 # from what GNU ar (and thus what .deb files) produce
258 if [[ -n ${EPREFIX} ]] ; then
259 {
260 read # global header
261 [[ ${REPLY} = "!<arch>" ]] || die "${deb} does not seem to be a deb archive"
262 local f timestamp uid gid mode size magic
263 while read f timestamp uid gid mode size magic ; do
264 [[ -n ${f} && -n ${size} ]] || continue # ignore empty lines
265 if [[ ${f} = "data.tar"* ]] ; then
266 head -c "${size}" > "${f}"
267 else
268 head -c "${size}" > /dev/null # trash it
269 fi
270 done
271 } < "${deb}"
272 else
256 ar x "${deb}" 273 ar x "${deb}"
274 fi
275
257 unpack ./data.tar* 276 unpacker ./data.tar*
258} 277}
259 278
260# @FUNCTION: _unpacker 279# @FUNCTION: _unpacker
261# @USAGE: <one archive to unpack> 280# @USAGE: <one archive to unpack>
262# @INTERNAL 281# @INTERNAL
271 a=$(find_unpackable_file "${a}") 290 a=$(find_unpackable_file "${a}")
272 291
273 # first figure out the decompression method 292 # first figure out the decompression method
274 case ${m} in 293 case ${m} in
275 *.bz2|*.tbz|*.tbz2) 294 *.bz2|*.tbz|*.tbz2)
276 local bzcmd=${PORTAGE_BZIP2_COMMAND:-$(type -P pbzip2 || bzip2)} 295 local bzcmd=${PORTAGE_BZIP2_COMMAND:-$(type -P pbzip2 || type -P bzip2)}
277 local bzuncmd=${PORTAGE_BUNZIP2_COMMAND:-${PORTAGE_BZIP2_COMMAND} -d} 296 local bzuncmd=${PORTAGE_BUNZIP2_COMMAND:-${bzcmd} -d}
278 : ${UNPACKER_BZ2:=${bzuncmd}} 297 : ${UNPACKER_BZ2:=${bzuncmd}}
279 comp="${UNPACKER_BZ2} -c" 298 comp="${UNPACKER_BZ2} -c"
280 ;; 299 ;;
281 *.z|*.gz|*.tgz) 300 *.z|*.gz|*.tgz)
282 comp="gzip -dc" ;; 301 comp="gzip -dc" ;;
284 comp="xz -dc" ;; 303 comp="xz -dc" ;;
285 *) comp="" ;; 304 *) comp="" ;;
286 esac 305 esac
287 306
288 # then figure out if there are any archiving aspects 307 # then figure out if there are any archiving aspects
308 arch=""
289 case ${m} in 309 case ${m} in
290 *.tgz|*.tbz|*.tbz2|*.txz|*.tar.*|*.tar) 310 *.tgz|*.tbz|*.tbz2|*.txz|*.tar.*|*.tar)
291 arch="tar --no-same-owner -xof" ;; 311 arch="tar --no-same-owner -xof" ;;
292 *.deb) 312 *.deb)
293 arch="unpack_deb" ;; 313 arch="unpack_deb" ;;
294 *.run) 314 *.run)
295 arch="unpack_makeself" ;; 315 arch="unpack_makeself" ;;
296 *) arch="" ;; 316 *.sh)
317 # Not all shell scripts are makeself
318 if head -n 30 "${a}" | grep -qs '#.*Makeself' ; then
319 arch="unpack_makeself"
320 fi
321 ;;
322 *.bin)
323 # Makeself archives can be annoyingly named
324 if head -c 100 "${a}" | grep -qs '#.*Makeself' ; then
325 arch="unpack_makeself"
326 fi
327 ;;
297 esac 328 esac
298 329
299 # finally do the unpack 330 # finally do the unpack
300 if [[ -z ${arch}${comp} ]] ; then 331 if [[ -z ${arch}${comp} ]] ; then
301 unpack "${a}" 332 unpack "$1"
302 return $? 333 return $?
303 fi 334 fi
304 335
305 [[ ${arch} != unpack_* ]] && unpack_banner "${a}" 336 [[ ${arch} != unpack_* ]] && unpack_banner "${a}"
306 337
307 if [[ -z ${arch} ]] ; then 338 if [[ -z ${arch} ]] ; then
339 # Need to decompress the file into $PWD #408801
340 local _a=${a%.*}
308 ${comp} "${a}" > "${a%.*}" 341 ${comp} "${a}" > "${_a##*/}"
309 elif [[ -z ${comp} ]] ; then 342 elif [[ -z ${comp} ]] ; then
310 ${arch} "${a}" 343 ${arch} "${a}"
311 else 344 else
312 ${comp} "${a}" | ${arch} - 345 ${comp} "${a}" | ${arch} -
313 fi 346 fi

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.9

  ViewVC Help
Powered by ViewVC 1.1.20