/[gentoo-x86]/eclass/ruby-ng.eclass
Gentoo

Diff of /eclass/ruby-ng.eclass

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

Revision 1.4 Revision 1.17
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2009 Gentoo Foundation
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# $Header: /var/cvsroot/gentoo-x86/eclass/ruby-ng.eclass,v 1.4 2009/12/05 11:33:10 flameeyes Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/ruby-ng.eclass,v 1.17 2010/05/22 12:31:03 flameeyes Exp $
4# 4#
5# @ECLASS: ruby-ng.eclass 5# @ECLASS: ruby-ng.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Ruby herd <ruby@gentoo.org> 7# Ruby herd <ruby@gentoo.org>
8# 8#
110 done 110 done
111 111
112 echo "[${res%,}]" 112 echo "[${res%,}]"
113} 113}
114 114
115_ruby_implementation_depend() { 115_ruby_atoms_samelib_generic() {
116 echo "ruby_targets_${1}? ( ${2}[ruby_targets_${1}] )" 116 echo "RUBYTARGET? ("
117 for token in $*; do
118 case "$token" in
119 "||" | "(" | ")" | *"?")
120 echo "${token}" ;;
121 *)
122 # TODO we need to deal with merging USE-based
123 # dependencies
124 echo "${token}[RUBYTARGET]" ;;
125 esac
126 done
127 echo ")"
117} 128}
118 129
119_ruby_add_bdepend() { 130_ruby_atoms_samelib() {
120 local atom=$1 131 local atoms=$(_ruby_atoms_samelib_generic "$*")
132
133 for _ruby_implementation in $USE_RUBY; do
134 echo "${atoms//RUBYTARGET/ruby_targets_${_ruby_implementation}}"
135 done
136}
137
138_ruby_wrap_conditions() {
121 local conditions=$2 139 local conditions="$1"
140 local atoms="$2"
122 141
123 for condition in $conditions; do 142 for condition in $conditions; do
143 hasq $condition "$IUSE" || IUSE="${IUSE} $condition"
124 atom="${condition}? ( ${atom} )" 144 atoms="${condition}? ( ${atoms} )"
125 done 145 done
126 146
127 DEPEND="${DEPEND} ${atom}" 147 echo "$atoms"
128 RDEPEND="${RDEPEND}"
129}
130
131_ruby_add_rdepend() {
132 local atom=$1
133 local conditions=$2
134
135 for condition in $conditions; do
136 atom="${condition}? ( ${atom} )"
137 done
138
139 RDEPEND="${RDEPEND} ${atom}"
140 _ruby_add_bdepend "$atom" test
141} 148}
142 149
143# @FUNCTION: ruby_add_rdepend 150# @FUNCTION: ruby_add_rdepend
144# @USAGE: [conditions] atom 151# @USAGE: dependencies
145# @DESCRIPTION: 152# @DESCRIPTION:
146# Adds the specified atom(s) with optional use condition(s) to 153# Adds the specified dependencies, with use condition(s) to RDEPEND,
147# RDEPEND, taking the current set of ruby targets into account. This 154# taking the current set of ruby targets into account. This makes sure
148# makes sure that all ruby dependencies of the package are installed 155# that all ruby dependencies of the package are installed for the same
149# for the same ruby targets. Use this function for all ruby 156# ruby targets. Use this function for all ruby dependencies instead of
150# dependencies instead of setting RDEPEND yourself. Both atom and 157# setting RDEPEND yourself. The list of atoms uses the same syntax as
151# conditions can be a space-separated list of atoms or conditions. 158# normal dependencies.
159#
160# Note: runtime dependencies are also added as build-time test
161# dependencies.
152ruby_add_rdepend() { 162ruby_add_rdepend() {
153 local atoms=
154 local conditions=
155 case $# in 163 case $# in
156 1) 164 1) ;;
157 atoms=$1
158 ;;
159 2) 165 2)
160 conditions=$1 166 [[ "${GENTOO_DEV}" == "yes" ]] && eqawarn "You can now use the usual syntax in ruby_add_rdepend for $CATEGORY/$PF"
161 atoms=$2 167 ruby_add_rdepend "$(_ruby_wrap_conditions "$1" "$2")"
168 return
162 ;; 169 ;;
163 *) 170 *)
164 die "bad number of arguments to $0" 171 die "bad number of arguments to $0"
165 ;; 172 ;;
166 esac 173 esac
167 174
168 for atom in $atoms; do 175 local dependency=$(_ruby_atoms_samelib "$1")
169 _ruby_add_rdepend "${atom}$(ruby_samelib)" "$conditions" 176
170 done 177 RDEPEND="${RDEPEND} $dependency"
178
179 # Add the dependency as a test-dependency since we're going to
180 # execute the code during test phase.
181 DEPEND="${DEPEND} $(_ruby_wrap_conditions test "${dependency}")"
171} 182}
172 183
173# @FUNCTION: ruby_add_bdepend 184# @FUNCTION: ruby_add_bdepend
174# @USAGE: [conditions] atom 185# @USAGE: dependencies
175# @DESCRIPTION: 186# @DESCRIPTION:
176# Adds the specified atom(s) with optional use condition(s) to both 187# Adds the specified dependencies, with use condition(s) to DEPEND,
177# DEPEND and RDEPEND, taking the current set of ruby targets into 188# taking the current set of ruby targets into account. This makes sure
178# account. This makes sure that all ruby dependencies of the package 189# that all ruby dependencies of the package are installed for the same
179# are installed for the same ruby targets. Use this function for all 190# ruby targets. Use this function for all ruby dependencies instead of
180# ruby dependencies instead of setting DEPEND and RDEPEND 191# setting DEPEND yourself. The list of atoms uses the same syntax as
181# yourself. Both atom and conditions can be a space-separated list of 192# normal dependencies.
182# atoms or conditions.
183ruby_add_bdepend() { 193ruby_add_bdepend() {
184 local atoms=
185 local conditions=
186 case $# in 194 case $# in
187 1) 195 1) ;;
188 atoms=$1
189 ;;
190 2) 196 2)
191 conditions=$1 197 [[ "${GENTOO_DEV}" == "yes" ]] && eqawarn "You can now use the usual syntax in ruby_add_bdepend for $CATEGORY/$PF"
192 atoms=$2 198 ruby_add_bdepend "$(_ruby_wrap_conditions "$1" "$2")"
199 return
193 ;; 200 ;;
194 *) 201 *)
195 die "bad number of arguments to $0" 202 die "bad number of arguments to $0"
196 ;; 203 ;;
197 esac 204 esac
198 205
199 for atom in $atoms; do 206 local dependency=$(_ruby_atoms_samelib "$1")
200 _ruby_add_bdepend "${atom}$(ruby_samelib)" "$conditions" 207
201 done 208 DEPEND="${DEPEND} $dependency"
202} 209}
203 210
204for _ruby_implementation in $USE_RUBY; do 211for _ruby_implementation in $USE_RUBY; do
205 IUSE="${IUSE} ruby_targets_${_ruby_implementation}" 212 IUSE="${IUSE} ruby_targets_${_ruby_implementation}"
206 213
212 fi 219 fi
213done 220done
214 221
215_ruby_invoke_environment() { 222_ruby_invoke_environment() {
216 old_S=${S} 223 old_S=${S}
217 sub_S=${S#${WORKDIR}} 224 sub_S=${S#${WORKDIR}/}
225
226 # Special case, for the always-lovely GitHub fetches. With this,
227 # we allow the star glob to just expand to whatever directory it's
228 # called.
229 if [[ ${sub_S} = *"*" ]]; then
230 pushd "${WORKDIR}"/all &>/dev/null
231 sub_S=$(eval ls -d ${sub_S} 2>/dev/null)
232 popd &>/dev/null
233 fi
218 234
219 environment=$1; shift 235 environment=$1; shift
220 236
221 my_WORKDIR="${WORKDIR}"/${environment} 237 my_WORKDIR="${WORKDIR}"/${environment}
222 S="${my_WORKDIR}"/"${sub_S}" 238 S="${my_WORKDIR}"/"${sub_S}"
240 local invoked=no 256 local invoked=no
241 for _ruby_implementation in ${USE_RUBY}; do 257 for _ruby_implementation in ${USE_RUBY}; do
242 # only proceed if it's requested 258 # only proceed if it's requested
243 use ruby_targets_${_ruby_implementation} || continue 259 use ruby_targets_${_ruby_implementation} || continue
244 260
261 local _ruby_name=$_ruby_implementation
262
263 # Add all USE_RUBY values where the flag name diverts from the binary here
264 case $_ruby_implementation in
265 ree18)
266 _ruby_name=rubyee18
267 ;;
268 esac
269
245 RUBY=$(type -p $_ruby_implementation 2>/dev/null) 270 RUBY=$(type -p $_ruby_name 2>/dev/null)
246 invoked=yes 271 invoked=yes
247 272
248 if [[ -n "$1" ]]; then 273 if [[ -n "$1" ]]; then
249 _ruby_invoke_environment $_ruby_implementation "$@" 274 _ruby_invoke_environment $_ruby_implementation "$@"
250 fi 275 fi
265 _ruby_each_implementation 290 _ruby_each_implementation
266} 291}
267 292
268# @FUNCTION: ruby-ng_src_unpack 293# @FUNCTION: ruby-ng_src_unpack
269# @DESCRIPTION: 294# @DESCRIPTION:
270# Unpack the source archive, including gems. 295# Unpack the source archive.
271ruby-ng_src_unpack() { 296ruby-ng_src_unpack() {
272 mkdir "${WORKDIR}"/all 297 mkdir "${WORKDIR}"/all
273 pushd "${WORKDIR}"/all &>/dev/null 298 pushd "${WORKDIR}"/all &>/dev/null
274 299
275 # We don't support an each-unpack, it's either all or nothing! 300 # We don't support an each-unpack, it's either all or nothing!
316 # almost every other ebuild. 341 # almost every other ebuild.
317 find . -name '._*' -delete 342 find . -name '._*' -delete
318 343
319 _ruby_invoke_environment all _ruby_apply_patches 344 _ruby_invoke_environment all _ruby_apply_patches
320 345
346 _PHASE="source copy" \
321 _ruby_each_implementation _ruby_source_copy 347 _ruby_each_implementation _ruby_source_copy
322 348
323 if type each_ruby_prepare &>/dev/null; then 349 if type each_ruby_prepare &>/dev/null; then
324 _ruby_each_implementation each_ruby_prepare 350 _ruby_each_implementation each_ruby_prepare
325 fi 351 fi
326} 352}
383 scanelf -qnR "${D}${sitedir}" \ 409 scanelf -qnR "${D}${sitedir}" \
384 | fgrep -v "${libruby_soname}" \ 410 | fgrep -v "${libruby_soname}" \
385 > "${T}"/ruby-ng-${_ruby_implementation}-mislink.log 411 > "${T}"/ruby-ng-${_ruby_implementation}-mislink.log
386 412
387 if [[ -s "${T}"/ruby-ng-${_ruby_implementation}-mislink.log ]]; then 413 if [[ -s "${T}"/ruby-ng-${_ruby_implementation}-mislink.log ]]; then
388 ewarn "Extensions installed for ${_ruby_implementation} with missing links to ${libruby}" 414 ewarn "Extensions installed for ${_ruby_implementation} with missing links to ${libruby_soname}"
389 ewarn $(< "${T}"/ruby-ng-${_ruby_implementation}-mislink.log ) 415 ewarn $(< "${T}"/ruby-ng-${_ruby_implementation}-mislink.log )
390 die "Missing links to ${libruby}" 416 die "Missing links to ${libruby_soname}"
391 fi 417 fi
392} 418}
393 419
394# @FUNCTION: ruby-ng_src_install 420# @FUNCTION: ruby-ng_src_install
395# @DESCRIPTION: 421# @DESCRIPTION:
404 430
405 _PHASE="check install" \ 431 _PHASE="check install" \
406 _ruby_each_implementation _each_ruby_check_install 432 _ruby_each_implementation _each_ruby_check_install
407} 433}
408 434
435# @FUNCTION: ruby_rbconfig_value
436# @USAGE: rbconfig item
437# @RETURN: Returns the value of the given rbconfig item of the Ruby interpreter in ${RUBY}.
438ruby_rbconfig_value() {
439 echo $(${RUBY} -rrbconfig -e "puts Config::CONFIG['$1']")
440}
441
409# @FUNCTION: doruby 442# @FUNCTION: doruby
410# @USAGE: file [file...] 443# @USAGE: file [file...]
411# @DESCRIPTION: 444# @DESCRIPTION:
412# Installs the specified file(s) into the sitelibdir of the Ruby interpreter in ${RUBY}. 445# Installs the specified file(s) into the sitelibdir of the Ruby interpreter in ${RUBY}.
413doruby() { 446doruby() {
414 [[ -z ${RUBY} ]] && die "\$RUBY is not set" 447 [[ -z ${RUBY} ]] && die "\$RUBY is not set"
415 ( # don't want to pollute calling env 448 ( # don't want to pollute calling env
416 insinto $(${RUBY} -rrbconfig -e 'print Config::CONFIG["sitelibdir"]') 449 insinto $(ruby_rbconfig_value 'sitelibdir')
417 insopts -m 0644 450 insopts -m 0644
418 doins "$@" 451 doins "$@"
419 ) || die "failed to install $@" 452 ) || die "failed to install $@"
420} 453}
421 454
426} 459}
427 460
428# @FUNCTION: ruby_get_hdrdir 461# @FUNCTION: ruby_get_hdrdir
429# @RETURN: The location of the header files belonging to the Ruby interpreter in ${RUBY}. 462# @RETURN: The location of the header files belonging to the Ruby interpreter in ${RUBY}.
430ruby_get_hdrdir() { 463ruby_get_hdrdir() {
431 local rubyhdrdir=$(${RUBY} -rrbconfig -e 'puts Config::CONFIG["rubyhdrdir"]') 464 local rubyhdrdir=$(ruby_rbconfig_value 'rubyhdrdir')
432 465
433 if [[ "${rubyhdrdir}" = "nil" ]] ; then 466 if [[ "${rubyhdrdir}" = "nil" ]] ; then
434 rubyhdrdir=$(${RUBY} -rrbconfig -e 'puts Config::CONFIG["archdir"]') 467 rubyhdrdir=$(ruby_rbconfig_value 'archdir')
435 fi 468 fi
436 469
437 echo "${rubyhdrdir}" 470 echo "${rubyhdrdir}"
438} 471}
472
473# @FUNCTION: ruby_get_version
474# @RETURN: The version of the Ruby interpreter in ${RUBY}, or what 'ruby' points to.
475ruby_get_version() {
476 local ruby=${RUBY:-$(type -p ruby 2>/dev/null)}
477
478 echo $(${ruby} -e 'puts RUBY_VERSION')
479}
480
481# @FUNCTION: ruby_get_implementation
482# @RETURN: The implementation of the Ruby interpreter in ${RUBY}, or what 'ruby' points to.
483ruby_get_implementation() {
484 local ruby=${RUBY:-$(type -p ruby 2>/dev/null)}
485
486 case $(${ruby} --version) in
487 *Enterprise*)
488 echo "ree"
489 ;;
490 *jruby*)
491 echo "jruby"
492 ;;
493 *)
494 echo "mri"
495 ;;
496 esac
497}

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.17

  ViewVC Help
Powered by ViewVC 1.1.20