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

Diff of /eclass/rpm.eclass

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

Revision 1.6 Revision 1.16
1# Copyright 1999-2003 Gentoo Technologies, Inc. 1# Copyright 1999-2006 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.6 2003/06/22 16:31:23 liquidx Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/rpm.eclass,v 1.16 2009/03/12 04:29:09 vapier 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
31ECLASS="rpm" 31inherit eutils
32INHERITED="$INHERITED $ECLASS"
33 32
34USE_RPMOFFSET_ONLY=${USE_RPMOFFSET_ONLY-""} 33USE_RPMOFFSET_ONLY=${USE_RPMOFFSET_ONLY-""}
35 34
36newdepend "app-arch/rpm2targz" 35DEPEND=">=app-arch/rpm2targz-9.0-r1"
37 36
38# extracts the contents of the RPM in ${WORKDIR} 37# extracts the contents of the RPM in ${WORKDIR}
39rpm_unpack() { 38rpm_unpack() {
40 local rpmfile 39 local rpmfile rpmoff decompcmd
41 rpmfile=$1 40 rpmfile=$1
42 if [ -z "${rpmfile}" ]; then 41 if [ -z "${rpmfile}" ]; then
43 return 1 42 return 1
44 fi 43 fi
45
46 cd ${WORKDIR}
47 if [ -x /usr/bin/rpm2cpio -a -z "${USE_RPMOFFSET_ONLY}" ]; then 44 if [ -x /usr/bin/rpm2cpio -a -z "${USE_RPMOFFSET_ONLY}" ]; then
48 rpm2cpio ${rpmfile} | cpio -idmu --no-preserve-owner --quiet || return 1 45 rpm2cpio ${rpmfile} | cpio -idmu --no-preserve-owner --quiet || return 1
49 else 46 else
47 rpmoff=`rpmoffset < ${rpmfile}`
48 [ -z "${rpmoff}" ] && return 1
49
50 decompcmd="gzip -dc"
51 if [ -n "`dd if=${rpmfile} skip=${rpmoff} bs=1 count=3 2>/dev/null | file - | grep bzip2`" ]; then
52 decompcmd="bzip2 -dc"
53 fi
50 dd ibs=`rpmoffset < ${rpmfile}` skip=1 if=${rpmfile} 2> /dev/null \ 54 dd ibs=${rpmoff} skip=1 if=${rpmfile} 2> /dev/null \
51 | gzip -dc \ 55 | ${decompcmd} \
52 | cpio -idmu --no-preserve-owner --quiet || return 1 56 | cpio -idmu --no-preserve-owner --quiet || return 1
53 fi 57 fi
54 58
55 return 0 59 return 0
56} 60}
57 61
58rpm_src_unpack() { 62rpm_src_unpack() {
59 local x prefix ext myfail OLD_DISTDIR 63 local x prefix ext myfail OLD_DISTDIR
60 64
61 for x in ${A}; do 65 for x in ${A}; do
62 myfail="failure unpacking ${x}" 66 myfail="failure unpacking ${x}"
63 ext=${x##*.} 67 ext=${x##*.}
64 case "$ext" in 68 case "$ext" in
65 rpm) 69 rpm)
66 echo ">>> Unpacking ${x}" 70 echo ">>> Unpacking ${x} to ${WORKDIR}"
67 prefix=${x%.rpm} 71 prefix=${x%.rpm}
68 cd ${WORKDIR} 72 cd ${WORKDIR}
69 rpm_unpack ${DISTDIR}/${x} || die "${myfail}" 73 rpm_unpack ${DISTDIR}/${x} || die "${myfail}"
70 74
71 # find all tar.gz files and extract for srpms 75 # find all tar.gz files and extract for srpms
72 if [ "${prefix##*.}" = "src" ]; then 76 if [ "${prefix##*.}" = "src" ]; then
73 OLD_DISTDIR=${DISTDIR} 77 OLD_DISTDIR=${DISTDIR}
74 DISTDIR=${WORKDIR} 78 DISTDIR=${WORKDIR}
75 findopts="* -maxdepth 0 -name *.tar" 79 findopts="* -maxdepth 0 -name *.tar"
79 for t in $(find ${findopts} | xargs); do 83 for t in $(find ${findopts} | xargs); do
80 unpack ${t} 84 unpack ${t}
81 rm -f ${t} 85 rm -f ${t}
82 done 86 done
83 DISTDIR=${OLD_DISTDIR} 87 DISTDIR=${OLD_DISTDIR}
84 fi 88 fi
85 ;; 89 ;;
86 *) 90 *)
87 unpack ${x} 91 unpack ${x}
88 ;; 92 ;;
89 esac 93 esac
90 done 94 done
91 95}
96
97# @FUNCTION: rpm_spec_epatch
98# @USAGE: [spec]
99# @DESCRIPTION:
100# Read the specified spec (defaults to ${PN}.spec) and attempt to apply
101# all the patches listed in it. If the spec does funky things like moving
102# files around, well this won't handle that.
103rpm_spec_epatch() {
104 local p spec=${1:-${PN}.spec}
105 local dir=${spec%/*}
106 grep '^%patch' "${spec}" | \
107 while read line ; do
108 set -- ${line}
109 p=$1
110 shift
111 EPATCH_OPTS="$*"
112 set -- $(grep "^P${p#%p}: " "${spec}")
113 shift
114 epatch "${dir:+${dir}/}$*"
115 done
92} 116}
93 117
94EXPORT_FUNCTIONS src_unpack 118EXPORT_FUNCTIONS src_unpack

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.20