/[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.8
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.8 2002/12/01 12:34:23 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=""
61 95
62# This function is for bulk patching, or in theory for just one 96# This function is for bulk patching, or in theory for just one
63# or two patches. 97# or two patches.
64# 98#
65# It should work with .bz2, .gz, .zip and plain text patches. 99# It should work with .bz2, .gz, .zip and plain text patches.
93# <azarah@gentoo.org> (10 Nov 2002) 127# <azarah@gentoo.org> (10 Nov 2002)
94# 128#
95epatch() { 129epatch() {
96 local PIPE_CMD="" 130 local PIPE_CMD=""
97 local STDERR_TARGET="${T}/$$.out" 131 local STDERR_TARGET="${T}/$$.out"
132 local PATCH_TARGET="${T}/$$.patch"
133 local PATCH_SUFFIX=""
98 local SINGLE_PATCH="no" 134 local SINGLE_PATCH="no"
135 local x=""
99 136
100 if [ "$#" -gt 1 ] 137 if [ "$#" -gt 1 ]
101 then 138 then
102 eerror "Invalid arguments to epatch()" 139 eerror "Invalid arguments to epatch()"
103 die "Invalid arguments to epatch()" 140 die "Invalid arguments to epatch()"
105 142
106 if [ -n "$1" -a -f "$1" ] 143 if [ -n "$1" -a -f "$1" ]
107 then 144 then
108 SINGLE_PATCH="yes" 145 SINGLE_PATCH="yes"
109 146
110 EPATCH_SOURCE="$1" 147 local EPATCH_SOURCE="$1"
111 EPATCH_SUFFIX="${1##*\.}" 148 local EPATCH_SUFFIX="${1##*\.}"
112 149
113 elif [ -n "$1" -a -d "$1" ] 150 elif [ -n "$1" -a -d "$1" ]
114 then 151 then
115 EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}" 152 local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
116 else 153 else
154 if [ ! -d ${EPATCH_SOURCE} ]
155 then
156 echo
157 eerror "Cannot find \$EPATCH_SOURCE!"
158 echo
159 die "Cannot find \$EPATCH_SOURCE!"
160 fi
161
117 EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}" 162 local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
118 fi 163 fi
119 164
120 case ${EPATCH_SUFFIX##*\.} in 165 case ${EPATCH_SUFFIX##*\.} in
121 bz2) 166 bz2)
122 PIPE_CMD="bzip2 -dc" 167 PIPE_CMD="bzip2 -dc"
168 PATCH_SUFFIX="bz2"
123 ;; 169 ;;
124 gz) 170 gz|Z|z)
125 PIPE_CMD="gzip -dc" 171 PIPE_CMD="gzip -dc"
172 PATCH_SUFFIX="gz"
126 ;; 173 ;;
127 zip) 174 ZIP|zip)
128 PIPE_CMD="unzip -p" 175 PIPE_CMD="unzip -p"
176 PATCH_SUFFIX="zip"
129 ;; 177 ;;
130 *) 178 *)
131 PIPE_CMD="cat" 179 PIPE_CMD="cat"
180 PATCH_SUFFIX="patch"
132 ;; 181 ;;
133 esac 182 esac
134 183
135 if [ "${SINGLE_PATCH}" = "no" ] 184 if [ "${SINGLE_PATCH}" = "no" ]
136 then 185 then
145 if [ -f ${x} ] && \ 194 if [ -f ${x} ] && \
146 [ -n "$1" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ] 195 [ -n "$1" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ]
147 then 196 then
148 local count=0 197 local count=0
149 local popts="${EPATCH_OPTS}" 198 local popts="${EPATCH_OPTS}"
199
200 if [ -n "${EPATCH_EXCLUDE}" ]
201 then
202 if [ "${EPATCH_EXCLUDE/${x##*/}}" != "${EPATCH_EXCLUDE}" ]
203 then
204 continue
205 fi
206 fi
150 207
151 if [ "${SINGLE_PATCH}" = "yes" ] 208 if [ "${SINGLE_PATCH}" = "yes" ]
152 then 209 then
153 einfo "Applying ${x##*/}..." 210 einfo "Applying ${x##*/}..."
154 else 211 else
155 einfo " ${x##*/}..." 212 einfo " ${x##*/}..."
156 fi 213 fi
157 214
158 echo "*** Patch ${x##*/} ***" > ${STDERR_TARGET} 215 echo "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
216 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
159 217
160 # Allow for prefix to differ ... im lazy, so shoot me :/ 218 # Allow for prefix to differ ... im lazy, so shoot me :/
161 while [ "${count}" -lt 5 ] 219 while [ "${count}" -lt 5 ]
162 do 220 do
163 if eval ${PIPE_CMD} ${x} | patch ${popts} --dry-run -f -p${count} 2>&1 >> ${STDERR_TARGET} 221 # Generate some useful debug info ...
222 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
223 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
224
225 if [ "${PATCH_SUFFIX}" != "patch" ]
164 then 226 then
165 eval ${PIPE_CMD} ${x} | patch ${popts} -p${count} 2>&1 >> ${STDERR_TARGET} 227 echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
228 echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
229 else
230 PATCH_TARGET="${x}"
231 fi
232
233 echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
234 echo "patch ${popts} -p${count} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
235
236 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
237 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
238
239 if [ "${PATCH_SUFFIX}" != "patch" ]
240 then
241 if ! (${PIPE_CMD} ${x} > ${PATCH_TARGET}) >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
242 then
243 echo
244 eerror "Could not extract patch!"
245 #die "Could not extract patch!"
246 count=5
247 break
248 fi
249 fi
250
251 if patch ${popts} --dry-run -f -p${count} < ${PATCH_TARGET} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/} 2>&1
252 then
253 draw_line "***** ${x##*/} *****" > ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
254 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
255 echo "ACTUALLY APPLYING ${x##*/}..." >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
256 echo >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
257 draw_line "***** ${x##*/} *****" >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
258
259 patch ${popts} -p${count} < ${PATCH_TARGET} >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real 2>&1
260
261 if [ "$?" -ne 0 ]
262 then
263 cat ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
264 echo
265 eerror "A dry-run of patch command succeeded, but actually"
266 eerror "applying the patch failed!"
267 #die "Real world sux compared to the dreamworld!"
268 count=5
269 fi
270
271 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}.real
272
166 break 273 break
167 fi 274 fi
168 275
169 count=$((count + 1)) 276 count=$((count + 1))
170 done 277 done
171 278
279 if [ "${PATCH_SUFFIX}" != "patch" ]
280 then
281 rm -f ${PATCH_TARGET}
282 fi
283
172 if [ "${count}" -eq 5 ] 284 if [ "${count}" -eq 5 ]
173 then 285 then
286 echo
174 eerror "Failed Patch: ${x##*/}!" 287 eerror "Failed Patch: ${x##*/}!"
175 eerror 288 eerror
176 eerror "Include in your bugreport the contents of:" 289 eerror "Include in your bugreport the contents of:"
177 eerror 290 eerror
178 eerror " ${STDERR_TARGET}" 291 eerror " ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}"
179 eerror 292 echo
180 die "Failed Patch: ${x##*/}!" 293 die "Failed Patch: ${x##*/}!"
181 fi 294 fi
295
296 rm -f ${STDERR_TARGET%/*}/${x##*/}-${STDERR_TARGET##*/}
182 297
183 eend 0 298 eend 0
184 fi 299 fi
185 done 300 done
186 if [ "${SINGLE_PATCH}" = "no" ] 301 if [ "${SINGLE_PATCH}" = "no" ]

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

  ViewVC Help
Powered by ViewVC 1.1.20