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

Contents of /eclass/rpm.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (show annotations) (download)
Sun Jun 22 16:31:23 2003 UTC (11 years, 3 months ago) by liquidx
Branch: MAIN
Changes since 1.5: +2 -2 lines
fix comments

1 # Copyright 1999-2003 Gentoo Technologies, Inc.
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /home/cvsroot/gentoo-x86/eclass/rpm.eclass,v 1.5 2003/06/22 16:29:32 liquidx Exp $
4
5 # Author : Alastair Tse <liquidx@gentoo.org> (21 Jun 2003)
6 #
7 # Convienence class for extracting RPMs
8 #
9 # Basically, rpm_src_unpack does:
10 #
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,
13 # .zip, .ZIP and unpacks them using unpack() (with a little hackery)
14 # 3. deletes all the unpacked tarballs and zip files from ${WORKDIR}
15 #
16 # This ebuild now re-defines a utility function called rpm_unpack which
17 # basically does what rpm2targz does, except faster. It does not gzip the
18 # output tar again but directly extracts to ${WORKDIR}
19 #
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
22 # particular rpm cannot be read using rpmoffset, you just need to put :
23 #
24 # DEPEND="app-arch/rpm"
25 #
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:
28 #
29 # USE_RPMOFFSET_ONLY="1"
30
31 ECLASS="rpm"
32 INHERITED="$INHERITED $ECLASS"
33
34 USE_RPMOFFSET_ONLY=${USE_RPMOFFSET_ONLY-""}
35
36 newdepend "app-arch/rpm2targz"
37
38 # extracts the contents of the RPM in ${WORKDIR}
39 rpm_unpack() {
40 local rpmfile
41 rpmfile=$1
42 if [ -z "${rpmfile}" ]; then
43 return 1
44 fi
45
46 cd ${WORKDIR}
47 if [ -x /usr/bin/rpm2cpio -a -z "${USE_RPMOFFSET_ONLY}" ]; then
48 rpm2cpio ${rpmfile} | cpio -idmu --no-preserve-owner --quiet || return 1
49 else
50 dd ibs=`rpmoffset < ${rpmfile}` skip=1 if=${rpmfile} 2> /dev/null \
51 | gzip -dc \
52 | cpio -idmu --no-preserve-owner --quiet || return 1
53 fi
54
55 return 0
56 }
57
58 rpm_src_unpack() {
59 local x prefix ext myfail OLD_DISTDIR
60
61 for x in ${A}; do
62 myfail="failure unpacking ${x}"
63 ext=${x##*.}
64 case "$ext" in
65 rpm)
66 echo ">>> Unpacking ${x}"
67 prefix=${x%.rpm}
68 cd ${WORKDIR}
69 rpm_unpack ${DISTDIR}/${x} || die "${myfail}"
70
71 # find all tar.gz files and extract for srpms
72 if [ "${prefix##*.}" = "src" ]; then
73 OLD_DISTDIR=${DISTDIR}
74 DISTDIR=${WORKDIR}
75 findopts="* -maxdepth 0 -name *.tar"
76 for t in *.tar.gz *.tgz *.tbz2 *.tar.bz2 *.zip *.ZIP; do
77 findopts="${findopts} -o -name ${t}"
78 done
79 for t in $(find ${findopts} | xargs); do
80 unpack ${t}
81 rm -f ${t}
82 done
83 DISTDIR=${OLD_DISTDIR}
84 fi
85 ;;
86 *)
87 unpack ${x}
88 ;;
89 esac
90 done
91
92 }
93
94 EXPORT_FUNCTIONS src_unpack

  ViewVC Help
Powered by ViewVC 1.1.20