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

Contents of /eclass/bzr.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.20 - (show annotations) (download)
Thu Jul 11 18:38:59 2013 UTC (14 months, 1 week ago) by ulm
Branch: MAIN
CVS Tags: HEAD
Changes since 1.19: +11 -5 lines
New variable EBZR_UNPACK_DIR.

1 # Copyright 1999-2013 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/bzr.eclass,v 1.19 2012/09/18 06:41:45 ulm Exp $
4 #
5 # @ECLASS: bzr.eclass
6 # @MAINTAINER:
7 # Emacs team <emacs@gentoo.org>
8 # Bazaar team <bazaar@gentoo.org>
9 # @AUTHOR:
10 # Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
11 # Mark Lee <bzr-gentoo-overlay@lazymalevolence.com>
12 # Ulrich Müller <ulm@gentoo.org>
13 # Christian Faulhammer <fauli@gentoo.org>
14 # @BLURB: generic fetching functions for the Bazaar VCS
15 # @DESCRIPTION:
16 # The bzr.eclass provides functions to fetch, unpack, patch, and
17 # bootstrap sources from repositories of the Bazaar distributed version
18 # control system. The eclass was originally derived from git.eclass.
19 #
20 # Note: Just set EBZR_REPO_URI to the URI of the branch and src_unpack()
21 # of this eclass will export the branch to ${WORKDIR}/${P}.
22
23 inherit eutils
24
25 EBZR="bzr.eclass"
26
27 case "${EAPI:-0}" in
28 0|1) EXPORT_FUNCTIONS src_unpack ;;
29 *) EXPORT_FUNCTIONS src_unpack src_prepare ;;
30 esac
31
32 DEPEND=">=dev-vcs/bzr-2.0.1"
33 case "${EAPI:-0}" in
34 0|1) ;;
35 *) [[ ${EBZR_REPO_URI%%:*} = sftp ]] \
36 && DEPEND=">=dev-vcs/bzr-2.0.1[sftp]" ;;
37 esac
38
39 # @ECLASS-VARIABLE: EBZR_STORE_DIR
40 # @DESCRIPTION:
41 # The directory to store all fetched Bazaar live sources.
42 : ${EBZR_STORE_DIR:=${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/bzr-src}
43
44 # @ECLASS-VARIABLE: EBZR_UNPACK_DIR
45 # @DESCRIPTION:
46 # The working directory where the sources are copied to.
47 : ${EBZR_UNPACK_DIR:=${WORKDIR}/${P}}
48
49 # @ECLASS-VARIABLE: EBZR_INIT_REPO_CMD
50 # @DESCRIPTION:
51 # The Bazaar command to initialise a shared repository.
52 : ${EBZR_INIT_REPO_CMD:="bzr init-repository --no-trees"}
53
54 # @ECLASS-VARIABLE: EBZR_FETCH_CMD
55 # @DESCRIPTION:
56 # The Bazaar command to fetch the sources.
57 : ${EBZR_FETCH_CMD:="bzr branch --no-tree"}
58
59 # @ECLASS-VARIABLE: EBZR_UPDATE_CMD
60 # @DESCRIPTION:
61 # The Bazaar command to update the sources.
62 : ${EBZR_UPDATE_CMD:="bzr pull"}
63
64 # @ECLASS-VARIABLE: EBZR_EXPORT_CMD
65 # @DESCRIPTION:
66 # The Bazaar command to export a branch.
67 : ${EBZR_EXPORT_CMD:="bzr export"}
68
69 # @ECLASS-VARIABLE: EBZR_CHECKOUT_CMD
70 # @DESCRIPTION:
71 # The Bazaar command to checkout a branch.
72 : ${EBZR_CHECKOUT_CMD:="bzr checkout --lightweight -q"}
73
74 # @ECLASS-VARIABLE: EBZR_REVNO_CMD
75 # @DESCRIPTION:
76 # The Bazaar command to list a revision number of the branch.
77 : ${EBZR_REVNO_CMD:="bzr revno"}
78
79 # @ECLASS-VARIABLE: EBZR_OPTIONS
80 # @DEFAULT_UNSET
81 # @DESCRIPTION:
82 # The options passed to the fetch and update commands.
83
84 # @ECLASS-VARIABLE: EBZR_REPO_URI
85 # @DEFAULT_UNSET
86 # @REQUIRED
87 # @DESCRIPTION:
88 # The repository URI for the source package.
89 #
90 # Note: If the ebuild uses an sftp:// URI, then in EAPI 0 or 1 it must
91 # make sure that dev-vcs/bzr was built with USE="sftp". In EAPI 2 or
92 # later, the eclass will depend on dev-vcs/bzr[sftp].
93
94 # @ECLASS-VARIABLE: EBZR_INITIAL_URI
95 # @DEFAULT_UNSET
96 # @DESCRIPTION:
97 # The URI used for initial branching of the source repository. If this
98 # variable is set, the initial branch will be cloned from the location
99 # specified, followed by a pull from ${EBZR_REPO_URI}. This is intended
100 # for special cases, e.g. when download from the original repository is
101 # slow, but a fast mirror exists but may be out of date.
102 #
103 # Normally, this variable needs not be set.
104
105 # @ECLASS-VARIABLE: EBZR_BOOTSTRAP
106 # @DEFAULT_UNSET
107 # @DESCRIPTION:
108 # Bootstrap script or command like autogen.sh or etc.
109
110 # @ECLASS-VARIABLE: EBZR_PATCHES
111 # @DEFAULT_UNSET
112 # @DESCRIPTION:
113 # bzr.eclass can apply patches in bzr_bootstrap(). You can use regular
114 # expressions in this variable like *.diff or *.patch and the like.
115 # Note: These patches will be applied before EBZR_BOOTSTRAP is processed.
116 #
117 # Patches are searched both in ${PWD} and ${FILESDIR}. If not found in
118 # either location, the installation dies.
119
120 # @ECLASS-VARIABLE: EBZR_PROJECT
121 # @DESCRIPTION:
122 # The project name of your ebuild. Normally, the branch will be stored
123 # in the ${EBZR_STORE_DIR}/${EBZR_PROJECT} directory.
124 #
125 # If EBZR_BRANCH is set (see below), then a shared repository will be
126 # created in that directory, and the branch will be located in
127 # ${EBZR_STORE_DIR}/${EBZR_PROJECT}/${EBZR_BRANCH}.
128 : ${EBZR_PROJECT:=${PN}}
129
130 # @ECLASS-VARIABLE: EBZR_BRANCH
131 # @DEFAULT_UNSET
132 # @DESCRIPTION:
133 # The directory where to store the branch within a shared repository,
134 # relative to ${EBZR_STORE_DIR}/${EBZR_PROJECT}.
135 #
136 # This variable should be set if there are several live ebuilds for
137 # different branches of the same upstream project. The branches can
138 # then share the same repository in EBZR_PROJECT, which will save both
139 # data traffic volume and disk space.
140 #
141 # If there is only a live ebuild for one single branch, EBZR_BRANCH
142 # needs not be set. In this case, the branch will be stored in a
143 # stand-alone repository directly in EBZR_PROJECT.
144
145 # @ECLASS-VARIABLE: EBZR_REVISION
146 # @DEFAULT_UNSET
147 # @DESCRIPTION:
148 # Revision to fetch, defaults to the latest
149 # (see http://bazaar-vcs.org/BzrRevisionSpec or bzr help revisionspec).
150
151 # @ECLASS-VARIABLE: EBZR_OFFLINE
152 # @DESCRIPTION:
153 # Set this variable to a non-empty value to disable automatic updating
154 # of a bzr source tree. This is intended to be set outside the ebuild
155 # by users.
156 : ${EBZR_OFFLINE=${EVCS_OFFLINE}}
157
158 # @ECLASS-VARIABLE: EBZR_WORKDIR_CHECKOUT
159 # @DEFAULT_UNSET
160 # @DESCRIPTION:
161 # If this variable is set to a non-empty value, EBZR_CHECKOUT_CMD will
162 # be used instead of EBZR_EXPORT_CMD to copy the sources to WORKDIR.
163
164 # @FUNCTION: bzr_initial_fetch
165 # @USAGE: <repository URI> <branch directory>
166 # @DESCRIPTION:
167 # Internal function, retrieves the source code from a repository for the
168 # first time, using ${EBZR_FETCH_CMD}.
169 bzr_initial_fetch() {
170 local repo_uri=$1 branch_dir=$2
171
172 if [[ -n "${EBZR_OFFLINE}" ]]; then
173 ewarn "EBZR_OFFLINE cannot be used when there is no local branch yet."
174 fi
175
176 # fetch branch
177 einfo "bzr branch start -->"
178 einfo " repository: ${repo_uri} => ${branch_dir}"
179
180 ${EBZR_FETCH_CMD} ${EBZR_OPTIONS} "${repo_uri}" "${branch_dir}" \
181 || die "${EBZR}: can't branch from ${repo_uri}"
182 }
183
184 # @FUNCTION: bzr_update
185 # @USAGE: <repository URI> <branch directory>
186 # @DESCRIPTION:
187 # Internal function, updates the source code from a repository, using
188 # ${EBZR_UPDATE_CMD}.
189 bzr_update() {
190 local repo_uri=$1 branch_dir=$2
191
192 if [[ -n "${EBZR_OFFLINE}" ]]; then
193 einfo "skipping bzr pull -->"
194 einfo " repository: ${repo_uri}"
195 else
196 # update branch
197 einfo "bzr pull start -->"
198 einfo " repository: ${repo_uri}"
199
200 pushd "${branch_dir}" > /dev/null \
201 || die "${EBZR}: can't chdir to ${branch_dir}"
202 ${EBZR_UPDATE_CMD} ${EBZR_OPTIONS} "${repo_uri}" \
203 || die "${EBZR}: can't pull from ${repo_uri}"
204 popd > /dev/null
205 fi
206 }
207
208 # @FUNCTION: bzr_fetch
209 # @DESCRIPTION:
210 # Wrapper function to fetch sources from a Bazaar repository with
211 # bzr branch or bzr pull, depending on whether there is an existing
212 # working copy.
213 bzr_fetch() {
214 local repo_dir branch_dir
215 local save_sandbox_write=${SANDBOX_WRITE}
216
217 [[ -n ${EBZR_REPO_URI} ]] || die "${EBZR}: EBZR_REPO_URI is empty"
218
219 if [[ ! -d ${EBZR_STORE_DIR} ]] ; then
220 addwrite /
221 mkdir -p "${EBZR_STORE_DIR}" \
222 || die "${EBZR}: can't mkdir ${EBZR_STORE_DIR}"
223 SANDBOX_WRITE=${save_sandbox_write}
224 fi
225
226 pushd "${EBZR_STORE_DIR}" > /dev/null \
227 || die "${EBZR}: can't chdir to ${EBZR_STORE_DIR}"
228
229 repo_dir=${EBZR_STORE_DIR}/${EBZR_PROJECT}
230 branch_dir=${repo_dir}${EBZR_BRANCH:+/${EBZR_BRANCH}}
231
232 addwrite "${EBZR_STORE_DIR}"
233
234 if [[ ! -d ${branch_dir}/.bzr ]]; then
235 if [[ ${repo_dir} != "${branch_dir}" && ! -d ${repo_dir}/.bzr ]]; then
236 einfo "creating shared bzr repository: ${repo_dir}"
237 ${EBZR_INIT_REPO_CMD} "${repo_dir}" \
238 || die "${EBZR}: can't create shared repository"
239 fi
240
241 if [[ -z ${EBZR_INITIAL_URI} ]]; then
242 bzr_initial_fetch "${EBZR_REPO_URI}" "${branch_dir}"
243 else
244 # Workaround for faster initial download. This clones the
245 # branch from a fast server (which may be out of date), and
246 # subsequently pulls from the slow original repository.
247 bzr_initial_fetch "${EBZR_INITIAL_URI}" "${branch_dir}"
248 if [[ ${EBZR_REPO_URI} != "${EBZR_INITIAL_URI}" ]]; then
249 EBZR_UPDATE_CMD="${EBZR_UPDATE_CMD} --remember --overwrite" \
250 EBZR_OFFLINE="" \
251 bzr_update "${EBZR_REPO_URI}" "${branch_dir}"
252 fi
253 fi
254 else
255 bzr_update "${EBZR_REPO_URI}" "${branch_dir}"
256 fi
257
258 # Restore sandbox environment
259 SANDBOX_WRITE=${save_sandbox_write}
260
261 cd "${branch_dir}" || die "${EBZR}: can't chdir to ${branch_dir}"
262
263 # Save revision number in environment. #311101
264 export EBZR_REVNO=$(${EBZR_REVNO_CMD})
265
266 if [[ -n ${EBZR_WORKDIR_CHECKOUT} ]]; then
267 einfo "checking out ..."
268 ${EBZR_CHECKOUT_CMD} ${EBZR_REVISION:+-r ${EBZR_REVISION}} \
269 . "${EBZR_UNPACK_DIR}" || die "${EBZR}: checkout failed"
270 else
271 einfo "exporting ..."
272 ${EBZR_EXPORT_CMD} ${EBZR_REVISION:+-r ${EBZR_REVISION}} \
273 "${EBZR_UNPACK_DIR}" . || die "${EBZR}: export failed"
274 fi
275 einfo \
276 "revision ${EBZR_REVISION:-${EBZR_REVNO}} is now in ${EBZR_UNPACK_DIR}"
277
278 popd > /dev/null
279 }
280
281 # @FUNCTION: bzr_bootstrap
282 # @DESCRIPTION:
283 # Apply patches in ${EBZR_PATCHES} and run ${EBZR_BOOTSTRAP} if specified.
284 bzr_bootstrap() {
285 local patch lpatch
286
287 pushd "${S}" > /dev/null || die "${EBZR}: can't chdir to ${S}"
288
289 if [[ -n ${EBZR_PATCHES} ]] ; then
290 einfo "apply patches -->"
291
292 for patch in ${EBZR_PATCHES} ; do
293 if [[ -f ${patch} ]] ; then
294 epatch ${patch}
295 else
296 # This loop takes care of wildcarded patches given via
297 # EBZR_PATCHES in an ebuild
298 for lpatch in "${FILESDIR}"/${patch} ; do
299 if [[ -f ${lpatch} ]] ; then
300 epatch ${lpatch}
301 else
302 die "${EBZR}: ${patch} is not found"
303 fi
304 done
305 fi
306 done
307 fi
308
309 if [[ -n ${EBZR_BOOTSTRAP} ]] ; then
310 einfo "begin bootstrap -->"
311
312 if [[ -f ${EBZR_BOOTSTRAP} ]] && [[ -x ${EBZR_BOOTSTRAP} ]] ; then
313 einfo " bootstrap with a file: ${EBZR_BOOTSTRAP}"
314 "./${EBZR_BOOTSTRAP}" \
315 || die "${EBZR}: can't execute EBZR_BOOTSTRAP"
316 else
317 einfo " bootstrap with commands: ${EBZR_BOOTSTRAP}"
318 "${EBZR_BOOTSTRAP}" \
319 || die "${EBZR}: can't eval EBZR_BOOTSTRAP"
320 fi
321 fi
322
323 popd > /dev/null
324 }
325
326 # @FUNCTION: bzr_src_unpack
327 # @DESCRIPTION:
328 # Default src_unpack(), calls bzr_fetch. For EAPIs 0 and 1, also calls
329 # bzr_src_prepare.
330 bzr_src_unpack() {
331 bzr_fetch
332 case "${EAPI:-0}" in
333 0|1) bzr_src_prepare ;;
334 esac
335 }
336
337 # @FUNCTION: bzr_src_prepare
338 # @DESCRIPTION:
339 # Default src_prepare(), calls bzr_bootstrap.
340 bzr_src_prepare() {
341 bzr_bootstrap
342 }

  ViewVC Help
Powered by ViewVC 1.1.20