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

Diff of /eclass/eutils.eclass

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

Revision 1.3 Revision 1.9
1# Copyright 1999-2002 Gentoo Technologies, Inc. 1# Copyright 1999-2002 Gentoo Technologies, Inc.
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# Author: Martin Schlemmer <azarah@gentoo.org> 3# Author: Martin Schlemmer <azarah@gentoo.org>
4# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.3 2002/11/11 19:51:20 azarah Exp $ 4# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.9 2002/12/01 15:48:27 azarah Exp $
5# This eclass is for general purpose functions that most ebuilds 5# This eclass is for general purpose functions that most ebuilds
6# have to implement themselfs. 6# have to implement themselves.
7# 7#
8# NB: If you add anything, please comment it! 8# NB: If you add anything, please comment it!
9 9
10ECLASS=eutils 10ECLASS=eutils
11INHERITED="$INHERITED $ECLASS" 11INHERITED="$INHERITED $ECLASS"
47 more info. */ 47 more info. */
48GROUP ( /lib/libxxx ) 48GROUP ( /lib/libxxx )
49END_LDSCRIPT 49END_LDSCRIPT
50 50
51 dosed "s:libxxx:$1:" /usr/lib/$1 51 dosed "s:libxxx:$1:" /usr/lib/$1
52
53 return 0
52} 54}
53 55
56# Simple function to draw a line consisting of '=' the same length as $*
57#
58# <azarah@gentoo.org> (11 Nov 2002)
59#
60draw_line() {
61 local i=0
62 local str_length=""
63
64 # Handle calls that do not have args, or wc not being installed ...
65 if [ -z "$1" -o ! -x "$(which wc 2>/dev/null)" ]
66 then
67 echo "==============================================================="
68 return 0
69 fi
70
71 # Get the length of $*
72 str_length="$(echo -n "$*" | wc -m)"
73
74 while [ "$i" -lt "${str_length}" ]
75 do
76 echo -n "="
77
78 i=$((i + 1))
79 done
80
81 echo
82
83 return 0
84}
54 85
55# Default directory where patches are located 86# Default directory where patches are located
56EPATCH_SOURCE="${WORKDIR}/patch" 87EPATCH_SOURCE="${WORKDIR}/patch"
57# Default extension for patches 88# Default extension for patches
58EPATCH_SUFFIX="patch.bz2" 89EPATCH_SUFFIX="patch.bz2"
59# Default options for patch 90# Default options for patch
60EPATCH_OPTS="" 91EPATCH_OPTS=""
92# List of patches not to apply. Not this is only file names,
93# and not the full path ..
94EPATCH_EXCLUDE=""
95# Change the printed message for a single patch.
96EPATCH_SINGLE_MSG=""
61 97
62# This function is for bulk patching, or in theory for just one 98# This function is for bulk patching, or in theory for just one
63# or two patches. 99# or two patches.
64# 100#
65# It should work with .bz2, .gz, .zip and plain text patches. 101# It should work with .bz2, .gz, .zip and plain text patches.
93# <azarah@gentoo.org> (10 Nov 2002) 129# <azarah@gentoo.org> (10 Nov 2002)
94# 130#
95epatch() { 131epatch() {
96 local PIPE_CMD="" 132 local PIPE_CMD=""
97 local STDERR_TARGET="${T}/$$.out" 133 local STDERR_TARGET="${T}/$$.out"
134 local PATCH_TARGET="${T}/$$.patch"
135 local PATCH_SUFFIX=""
98 local SINGLE_PATCH="no" 136 local SINGLE_PATCH="no"
137 local x=""
99 138
100 if [ "$#" -gt 1 ] 139 if [ "$#" -gt 1 ]
101 then 140 then
102 eerror "Invalid arguments to epatch()" 141 eerror "Invalid arguments to epatch()"
103 die "Invalid arguments to epatch()" 142 die "Invalid arguments to epatch()"
105 144
106 if [ -n "$1" -a -f "$1" ] 145 if [ -n "$1" -a -f "$1" ]
107 then 146 then
108 SINGLE_PATCH="yes" 147 SINGLE_PATCH="yes"
109 148
110 EPATCH_SOURCE="$1" 149 local EPATCH_SOURCE="$1"
111 EPATCH_SUFFIX="${1##*\.}" 150 local EPATCH_SUFFIX="${1##*\.}"
112 151
113 elif [ -n "$1" -a -d "$1" ] 152 elif [ -n "$1" -a -d "$1" ]
114 then 153 then
115 EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}" 154 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
116 else 155 else
156 if [ ! -d ${EPATCH_SOURCE} ]
157 then
158 echo
159 eerror "Cannot find \$EPATCH_SOURCE!"
160 echo
161 die "Cannot find \$EPATCH_SOURCE!"
162 fi
163
117 EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 164 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
118 fi 165 fi
119 166
120 case ${EPATCH_SUFFIX##*\.} in 167 case ${EPATCH_SUFFIX##*\.} in
121 bz2) 168 bz2)
122 PIPE_CMD="bzip2 -dc" 169 PIPE_CMD="bzip2 -dc"
170 PATCH_SUFFIX="bz2"
123 ;; 171 ;;
124 gz) 172 gz|Z|z)
125 PIPE_CMD="gzip -dc" 173 PIPE_CMD="gzip -dc"
174 PATCH_SUFFIX="gz"
126 ;; 175 ;;
127 zip) 176 ZIP|zip)
128 PIPE_CMD="unzip -p" 177 PIPE_CMD="unzip -p"
178 PATCH_SUFFIX="zip"
129 ;; 179 ;;
130 *) 180 *)
131 PIPE_CMD="cat" 181 PIPE_CMD="cat"
182 PATCH_SUFFIX="patch"
132 ;; 183 ;;
133 esac 184 esac
134 185
135 if [ "${SINGLE_PATCH}" = "no" ] 186 if [ "${SINGLE_PATCH}" = "no" ]
136 then 187 then
141 # New ARCH dependant patch naming scheme... 192 # New ARCH dependant patch naming scheme...
142 # 193 #
143 # ???_arch_foo.patch 194 # ???_arch_foo.patch
144 # 195 #
145 if [ -f ${x} ] && \ 196 if [ -f ${x} ] && \
146 [ -n "$1" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] 197 [ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ]
147 then 198 then
148 local count=0 199 local count=0
149 local popts="${EPATCH_OPTS}" 200 local popts="${EPATCH_OPTS}"
201
202 if [ -n "${EPATCH_EXCLUDE}" ]
203 then
204 if [ "`eval echo \$\{EPATCH_EXCLUDE/${x##*/}\}`" != "${EPATCH_EXCLUDE}" ]
205 then
206 continue
207 fi
208 fi
150 209
151 if [ "${SINGLE_PATCH}" = "yes" ] 210 if [ "${SINGLE_PATCH}" = "yes" ]
152 then 211 then
212 if [ -n "${EPATCH_SINGLE_MSG}" ]
213 then
214 einfo "${EPATCH_SINGLE_MSG}"
215 else
153 einfo "Applying ${x##*/}..." 216 einfo "Applying ${x##*/}..."
217 fi
154 else 218 else
155 einfo " ${x##*/}..." 219 einfo " ${x##*/}..."
156 fi 220 fi
157 221
158 echo "*** Patch ${x##*/} ***" > ${STDERR_TARGET} 222 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
223 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
159 224
160 # Allow for prefix to differ ... im lazy, so shoot me :/ 225 # Allow for prefix to differ ... im lazy, so shoot me :/
161 while [ "${count}" -lt 5 ] 226 while [ "${count}" -lt 5 ]
162 do 227 do
163 if eval ${PIPE_CMD} ${x} | patch ${popts} --dry-run -f -p${count} 2>&1 >> ${STDERR_TARGET} 228 # Generate some useful debug info ...
229 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
230 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
231
232 if [ "${PATCH_SUFFIX}" != "patch" ]
233 then
234 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
235 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
236 else
237 PATCH_TARGET="${x}"
238 fi
239
240 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
241 echo "patch ${popts} -p${count} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
242
243 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
244 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
245
246 if [ "${PATCH_SUFFIX}" != "patch" ]
247 then
248 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
164 then 249 then
165 eval ${PIPE_CMD} ${x} | patch ${popts} -p${count} 2>&1 >> ${STDERR_TARGET} 250 echo
251 eerror "Could not extract patch!"
252 #die "Could not extract patch!"
253 count=5
254 break
255 fi
256 fi
257
258 if patch ${popts} --dry-run -f -p${count} < ${PATCH_TARGET} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
259 then
260 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
261 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
262 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
263 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
264 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
265
266 patch ${popts} -p${count} < ${PATCH_TARGET} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
267
268 if [ "$?" -ne 0 ]
269 then
270 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
271 echo
272 eerror "A dry-run of patch command succeeded, but actually"
273 eerror "applying the patch failed!"
274 #die "Real world sux compared to the dreamworld!"
275 count=5
276 fi
277
278 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
279
166 break 280 break
167 fi 281 fi
168 282
169 count=$((count + 1)) 283 count=$((count + 1))
170 done 284 done
171 285
286 if [ "${PATCH_SUFFIX}" != "patch" ]
287 then
288 rm -f ${PATCH_TARGET}
289 fi
290
172 if [ "${count}" -eq 5 ] 291 if [ "${count}" -eq 5 ]
173 then 292 then
293 echo
174 eerror "Failed Patch: ${x##*/}!" 294 eerror "Failed Patch: ${x##*/}!"
175 eerror 295 eerror
176 eerror "Include in your bugreport the contents of:" 296 eerror "Include in your bugreport the contents of:"
177 eerror 297 eerror
178 eerror " ${STDERR_TARGET}" 298 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}"
179 eerror 299 echo
180 die "Failed Patch: ${x##*/}!" 300 die "Failed Patch: ${x##*/}!"
181 fi 301 fi
302
303 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
182 304
183 eend 0 305 eend 0
184 fi 306 fi
185 done 307 done
186 if [ "${SINGLE_PATCH}" = "no" ] 308 if [ "${SINGLE_PATCH}" = "no" ]

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

  ViewVC Help
Powered by ViewVC 1.1.20