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

Diff of /eclass/eutils.eclass

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

Revision 1.1 Revision 1.3
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.1 2002/10/26 09:16:03 azarah Exp $ 4# $Header: /var/cvsroot/gentoo-x86/eclass/eutils.eclass,v 1.3 2002/11/11 19:51:20 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 themselfs.
7# 7#
8# NB: If you add anything, please comment it! 8# NB: If you add anything, please comment it!
9 9
49END_LDSCRIPT 49END_LDSCRIPT
50 50
51 dosed "s:libxxx:$1:" /usr/lib/$1 51 dosed "s:libxxx:$1:" /usr/lib/$1
52} 52}
53 53
54
55# Default directory where patches are located
56EPATCH_SOURCE="${WORKDIR}/patch"
57# Default extension for patches
58EPATCH_SUFFIX="patch.bz2"
59# Default options for patch
60EPATCH_OPTS=""
61
62# This function is for bulk patching, or in theory for just one
63# or two patches.
64#
65# It should work with .bz2, .gz, .zip and plain text patches.
66# Currently all patches should be the same format.
67#
68# You do not have to specify '-p' option to patch, as it will
69# try with -p0 to -p5 until it succeed, or fail at -p5.
70#
71# Above EPATCH_* variables can be used to control various defaults,
72# bug they should be left as is to ensure an ebuild can rely on
73# them for.
74#
75# Patches are applied in current directory.
76#
77# Bulk Patches should preferibly have the form of:
78#
79# ??_${ARCH}_foo.${EPATCH_SUFFIX}
80#
81# For example:
82#
83# 01_all_misc-fix.patch.bz2
84# 02_sparc_another-fix.patch.bz2
85#
86# This ensures that there are a set order, and you can have ARCH
87# specific patches.
88#
89# If you however give an argument to epatch(), it will treat it as a
90# single patch that need to be applied if its a file. If on the other
91# hand its a directory, it will set EPATCH_SOURCE to this.
92#
93# <azarah@gentoo.org> (10 Nov 2002)
94#
95epatch() {
96 local PIPE_CMD=""
97 local STDERR_TARGET="${T}/$$.out"
98 local SINGLE_PATCH="no"
99
100 if [ "$#" -gt 1 ]
101 then
102 eerror "Invalid arguments to epatch()"
103 die "Invalid arguments to epatch()"
104 fi
105
106 if [ -n "$1" -a -f "$1" ]
107 then
108 SINGLE_PATCH="yes"
109
110 EPATCH_SOURCE="$1"
111 EPATCH_SUFFIX="${1##*\.}"
112
113 elif [ -n "$1" -a -d "$1" ]
114 then
115 EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"
116 else
117 EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"
118 fi
119
120 case ${EPATCH_SUFFIX##*\.} in
121 bz2)
122 PIPE_CMD="bzip2 -dc"
123 ;;
124 gz)
125 PIPE_CMD="gzip -dc"
126 ;;
127 zip)
128 PIPE_CMD="unzip -p"
129 ;;
130 *)
131 PIPE_CMD="cat"
132 ;;
133 esac
134
135 if [ "${SINGLE_PATCH}" = "no" ]
136 then
137 einfo "Applying various patches (bugfixes/updates)..."
138 fi
139 for x in ${EPATCH_SOURCE}
140 do
141 # New ARCH dependant patch naming scheme...
142 #
143 # ???_arch_foo.patch
144 #
145 if [ -f ${x} ] && \
146 [ -n "$1" -o "${x/_all_}" != "${x}" -o "`eval echo \$\{x/_${ARCH}_\}`" != "${x}" ]
147 then
148 local count=0
149 local popts="${EPATCH_OPTS}"
150
151 if [ "${SINGLE_PATCH}" = "yes" ]
152 then
153 einfo "Applying ${x##*/}..."
154 else
155 einfo " ${x##*/}..."
156 fi
157
158 echo "*** Patch ${x##*/} ***" > ${STDERR_TARGET}
159
160 # Allow for prefix to differ ... im lazy, so shoot me :/
161 while [ "${count}" -lt 5 ]
162 do
163 if eval ${PIPE_CMD} ${x} | patch ${popts} --dry-run -f -p${count} 2>&1 >> ${STDERR_TARGET}
164 then
165 eval ${PIPE_CMD} ${x} | patch ${popts} -p${count} 2>&1 >> ${STDERR_TARGET}
166 break
167 fi
168
169 count=$((count + 1))
170 done
171
172 if [ "${count}" -eq 5 ]
173 then
174 eerror "Failed Patch: ${x##*/}!"
175 eerror
176 eerror "Include in your bugreport the contents of:"
177 eerror
178 eerror " ${STDERR_TARGET}"
179 eerror
180 die "Failed Patch: ${x##*/}!"
181 fi
182
183 eend 0
184 fi
185 done
186 if [ "${SINGLE_PATCH}" = "no" ]
187 then
188 einfo "Done with patching"
189 fi
190}
191

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

  ViewVC Help
Powered by ViewVC 1.1.20