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

Diff of /eclass/rpm.eclass

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

Revision 1.13 Revision 1.14
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2004 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/rpm.eclass,v 1.13 2005/07/06 20:23:20 agriffis Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/rpm.eclass,v 1.14 2005/07/11 15:08:06 swegener Exp $
4 4
5# Author : Alastair Tse <liquidx@gentoo.org> (21 Jun 2003) 5# Author : Alastair Tse <liquidx@gentoo.org> (21 Jun 2003)
6# 6#
7# Convienence class for extracting RPMs 7# Convienence class for extracting RPMs
8# 8#
9# Basically, rpm_src_unpack does: 9# Basically, rpm_src_unpack does:
10# 10#
11# 1. uses rpm_unpack to unpack a rpm file using rpmoffset and cpio 11# 1. uses rpm_unpack to unpack a rpm file using rpmoffset and cpio
12# 2. if it is a source rpm, it finds all .tar .tar.gz, .tgz, .tbz2, .tar.bz2, 12# 2. if it is a source rpm, it finds all .tar .tar.gz, .tgz, .tbz2, .tar.bz2,
13# .zip, .ZIP and unpacks them using unpack() (with a little hackery) 13# .zip, .ZIP and unpacks them using unpack() (with a little hackery)
19# 19#
20# It will autodetect for rpm2cpio (included in app-arch/rpm) and if it exists 20# It will autodetect for rpm2cpio (included in app-arch/rpm) and if it exists
21# it will use that instead of the less reliable rpmoffset. This means if a 21# it will use that instead of the less reliable rpmoffset. This means if a
22# particular rpm cannot be read using rpmoffset, you just need to put : 22# particular rpm cannot be read using rpmoffset, you just need to put :
23# 23#
24# DEPEND="app-arch/rpm" 24# DEPEND="app-arch/rpm"
25# 25#
26# in your ebuild and it will install and use rpm2cpio instead. If you wish 26# in your ebuild and it will install and use rpm2cpio instead. If you wish
27# to force your ebuild to use rpmoffset in the presence of rpm2cpio, define: 27# to force your ebuild to use rpmoffset in the presence of rpm2cpio, define:
28# 28#
29# USE_RPMOFFSET_ONLY="1" 29# USE_RPMOFFSET_ONLY="1"
30 30
31 31
32USE_RPMOFFSET_ONLY=${USE_RPMOFFSET_ONLY-""} 32USE_RPMOFFSET_ONLY=${USE_RPMOFFSET_ONLY-""}
33 33
43 if [ -x /usr/bin/rpm2cpio -a -z "${USE_RPMOFFSET_ONLY}" ]; then 43 if [ -x /usr/bin/rpm2cpio -a -z "${USE_RPMOFFSET_ONLY}" ]; then
44 rpm2cpio ${rpmfile} | cpio -idmu --no-preserve-owner --quiet || return 1 44 rpm2cpio ${rpmfile} | cpio -idmu --no-preserve-owner --quiet || return 1
45 else 45 else
46 rpmoff=`rpmoffset < ${rpmfile}` 46 rpmoff=`rpmoffset < ${rpmfile}`
47 [ -z "${rpmoff}" ] && return 1 47 [ -z "${rpmoff}" ] && return 1
48 48
49 decompcmd="gzip -dc" 49 decompcmd="gzip -dc"
50 if [ -n "`dd if=${rpmfile} skip=${rpmoff} bs=1 count=3 2>/dev/null | file - | grep bzip2`" ]; then 50 if [ -n "`dd if=${rpmfile} skip=${rpmoff} bs=1 count=3 2>/dev/null | file - | grep bzip2`" ]; then
51 decompcmd="bzip2 -dc" 51 decompcmd="bzip2 -dc"
52 fi 52 fi
53 dd ibs=${rpmoff} skip=1 if=${rpmfile} 2> /dev/null \ 53 dd ibs=${rpmoff} skip=1 if=${rpmfile} 2> /dev/null \
54 | ${decompcmd} \ 54 | ${decompcmd} \
55 | cpio -idmu --no-preserve-owner --quiet || return 1 55 | cpio -idmu --no-preserve-owner --quiet || return 1
56 fi 56 fi
57 57
58 return 0 58 return 0
59} 59}
60 60
61rpm_src_unpack() { 61rpm_src_unpack() {
62 local x prefix ext myfail OLD_DISTDIR 62 local x prefix ext myfail OLD_DISTDIR
63 63
64 for x in ${A}; do 64 for x in ${A}; do
65 myfail="failure unpacking ${x}" 65 myfail="failure unpacking ${x}"
66 ext=${x##*.} 66 ext=${x##*.}
67 case "$ext" in 67 case "$ext" in
68 rpm) 68 rpm)
69 echo ">>> Unpacking ${x}" 69 echo ">>> Unpacking ${x}"
70 prefix=${x%.rpm} 70 prefix=${x%.rpm}
71 cd ${WORKDIR} 71 cd ${WORKDIR}
72 rpm_unpack ${DISTDIR}/${x} || die "${myfail}" 72 rpm_unpack ${DISTDIR}/${x} || die "${myfail}"
73 73
74 # find all tar.gz files and extract for srpms 74 # find all tar.gz files and extract for srpms
75 if [ "${prefix##*.}" = "src" ]; then 75 if [ "${prefix##*.}" = "src" ]; then
76 OLD_DISTDIR=${DISTDIR} 76 OLD_DISTDIR=${DISTDIR}
77 DISTDIR=${WORKDIR} 77 DISTDIR=${WORKDIR}
78 findopts="* -maxdepth 0 -name *.tar" 78 findopts="* -maxdepth 0 -name *.tar"
82 for t in $(find ${findopts} | xargs); do 82 for t in $(find ${findopts} | xargs); do
83 unpack ${t} 83 unpack ${t}
84 rm -f ${t} 84 rm -f ${t}
85 done 85 done
86 DISTDIR=${OLD_DISTDIR} 86 DISTDIR=${OLD_DISTDIR}
87 fi 87 fi
88 ;; 88 ;;
89 *) 89 *)
90 unpack ${x} 90 unpack ${x}
91 ;; 91 ;;
92 esac 92 esac
93 done 93 done
94
95} 94}
96 95
97EXPORT_FUNCTIONS src_unpack 96EXPORT_FUNCTIONS src_unpack

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.20