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

Diff of /eclass/ruby-fakegem.eclass

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

Revision 1.15 Revision 1.42
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2014 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-fakegem.eclass,v 1.15 2010/02/19 08:47:36 flameeyes Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/ruby-fakegem.eclass,v 1.42 2014/12/07 07:23:12 graaff Exp $
4# 4
5# @ECLASS: ruby-fakegem.eclass 5# @ECLASS: ruby-fakegem.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Ruby herd <ruby@gentoo.org> 7# Ruby herd <ruby@gentoo.org>
8# 8# @AUTHOR:
9# Author: Diego E. Pettenò <flameeyes@gentoo.org> 9# Author: Diego E. Pettenò <flameeyes@gentoo.org>
10#
11# Author: Alex Legler <a3li@gentoo.org> 10# Author: Alex Legler <a3li@gentoo.org>
12#
13# @BLURB: An eclass for installing Ruby packages to behave like RubyGems. 11# @BLURB: An eclass for installing Ruby packages to behave like RubyGems.
14# @DESCRIPTION: 12# @DESCRIPTION:
15# This eclass allows to install arbitrary Ruby libraries (including Gems), 13# This eclass allows to install arbitrary Ruby libraries (including Gems),
16# providing integration into the RubyGems system even for "regular" packages. 14# providing integration into the RubyGems system even for "regular" packages.
17#
18 15
19inherit ruby-ng 16inherit ruby-ng
20 17
21# @ECLASS-VARIABLE: RUBY_FAKEGEM_NAME 18# @ECLASS-VARIABLE: RUBY_FAKEGEM_NAME
22# @DESCRIPTION: 19# @DESCRIPTION:
31# @ECLASS-VARIABLE: RUBY_FAKEGEM_TASK_DOC 28# @ECLASS-VARIABLE: RUBY_FAKEGEM_TASK_DOC
32# @DESCRIPTION: 29# @DESCRIPTION:
33# Specify the rake(1) task to run to generate documentation. 30# Specify the rake(1) task to run to generate documentation.
34# RUBY_FAKEGEM_TASK_DOC="rdoc" 31# RUBY_FAKEGEM_TASK_DOC="rdoc"
35 32
33# @ECLASS-VARIABLE: RUBY_FAKEGEM_RECIPE_TEST
34# @DESCRIPTION:
35# Specify one of the default testing function for ruby-fakegem:
36# - rake (default; see also RUBY_FAKEGEM_TASK_TEST)
37# - rspec (calls ruby-ng_rspec, adds dev-ruby/rspec:2 to the dependencies)
38# - cucumber (calls ruby-ng_cucumber, adds dev-util/cucumber to the
39# dependencies; does not work on JRuby).
40# - none
41# RUBY_FAKEGEM_RECIPE_TEST="rake"
42
36# @ECLASS-VARIABLE: RUBY_FAKEGEM_TASK_TEST 43# @ECLASS-VARIABLE: RUBY_FAKEGEM_TASK_TEST
37# @DESCRIPTION: 44# @DESCRIPTION:
38# Specify the rake(1) task used for executing tests. 45# Specify the rake(1) task used for executing tests. Only valid
46# if RUBY_FAKEGEM_RECIPE_TEST is set to "rake" (the default).
39# RUBY_FAKEGEM_TASK_TEST="test" 47# RUBY_FAKEGEM_TASK_TEST="test"
48
49# @ECLASS-VARIABLE: RUBY_FAKEGEM_RECIPE_DOC
50# @DESCRIPTION:
51# Specify one of the default API doc building function for ruby-fakegem:
52# - rake (default; see also RUBY_FAKEGEM_TASK_DOC)
53# - rdoc (calls `rdoc-2`, adds dev-ruby/rdoc to the dependencies);
54# - yard (calls `yard`, adds dev-ruby/yard to the dependencies);
55# - none
56# RUBY_FAKEGEM_RECIPE_DOC="rake"
40 57
41# @ECLASS-VARIABLE: RUBY_FAKEGEM_DOCDIR 58# @ECLASS-VARIABLE: RUBY_FAKEGEM_DOCDIR
42# @DESCRIPTION: 59# @DESCRIPTION:
43# Specify the directory under which the documentation is built; 60# Specify the directory under which the documentation is built;
44# if empty no documentation will be installed automatically. 61# if empty no documentation will be installed automatically.
62# Note: if RUBY_FAKEGEM_RECIPE_DOC is set to `rdoc`, this variable is
63# hardwired to `doc`.
45# RUBY_FAKEGEM_DOCDIR="" 64# RUBY_FAKEGEM_DOCDIR=""
46 65
47# @ECLASS-VARIABLE: RUBY_FAKEGEM_EXTRADOC 66# @ECLASS-VARIABLE: RUBY_FAKEGEM_EXTRADOC
48# @DESCRIPTION: 67# @DESCRIPTION:
49# Extra documentation to install (readme, changelogs, …). 68# Extra documentation to install (readme, changelogs, …).
50# RUBY_FAKEGEM_EXTRADOC="" 69# RUBY_FAKEGEM_EXTRADOC=""
51 70
71# @ECLASS-VARIABLE: RUBY_FAKEGEM_DOC_SOURCES
72# @DESCRIPTION:
73# Allow settings defined sources to scan for documentation.
74# This only applies if RUBY_FAKEGEM_DOC_TASK is set to `rdoc`.
75# RUBY_FAKEGEM_DOC_SOURCES="lib"
76
52# @ECLASS-VARIABLE: RUBY_FAKEGEM_BINWRAP 77# @ECLASS-VARIABLE: RUBY_FAKEGEM_BINWRAP
53# @DESCRIPTION: 78# @DESCRIPTION:
54# Binaries to wrap around (relative to the bin/ directory) 79# Binaries to wrap around (relative to the bin/ directory)
55# RUBY_FAKEGEM_BINWRAP="*" 80# RUBY_FAKEGEM_BINWRAP="*"
56 81
57# @ECLASS-VARIABLE: RUBY_FAKEGEM_REQUIRE_PATHS 82# @ECLASS-VARIABLE: RUBY_FAKEGEM_REQUIRE_PATHS
58# @DESCRIPTION: 83# @DESCRIPTION:
59# Extra require paths (beside lib) to add to the specification 84# Extra require paths (beside lib) to add to the specification
60# RUBY_FAKEGEM_REQUIRE_PATHS="" 85# RUBY_FAKEGEM_REQUIRE_PATHS=""
86
87# @ECLASS-VARIABLE: RUBY_FAKEGEM_GEMSPEC
88# @DESCRIPTION:
89# Filename of .gemspec file to install instead of generating a generic one.
90# RUBY_FAKEGEM_GEMSPEC=""
91
92# @ECLASS-VARIABLE: RUBY_FAKEGEM_EXTRAINSTALL
93# @DESCRIPTION:
94# List of files and directories relative to the top directory that also
95# get installed. Some gems provide extra files such as version information,
96# Rails generators, or data that needs to be installed as well.
97# RUBY_FAKEGEM_EXTRAINSTALL=""
61 98
62RUBY_FAKEGEM_NAME="${RUBY_FAKEGEM_NAME:-${PN}}" 99RUBY_FAKEGEM_NAME="${RUBY_FAKEGEM_NAME:-${PN}}"
63RUBY_FAKEGEM_VERSION="${RUBY_FAKEGEM_VERSION:-${PV/_pre/.pre}}" 100RUBY_FAKEGEM_VERSION="${RUBY_FAKEGEM_VERSION:-${PV/_pre/.pre}}"
64RUBY_FAKEGEM_SUFFIX="${RUBY_FAKEGEM_SUFFIX:-}" 101RUBY_FAKEGEM_SUFFIX="${RUBY_FAKEGEM_SUFFIX:-}"
65 102
103RUBY_FAKEGEM_RECIPE_DOC="${RUBY_FAKEGEM_RECIPE_DOC-rake}"
66RUBY_FAKEGEM_TASK_DOC="${RUBY_FAKEGEM_TASK_DOC-rdoc}" 104RUBY_FAKEGEM_TASK_DOC="${RUBY_FAKEGEM_TASK_DOC-rdoc}"
105RUBY_FAKEGEM_DOC_SOURCES="${RUBY_FAKEGEM_DOC_SOURCES-lib}"
106
107RUBY_FAKEGEM_RECIPE_TEST="${RUBY_FAKEGEM_RECIPE_TEST-rake}"
67RUBY_FAKEGEM_TASK_TEST="${RUBY_FAKEGEM_TASK_TEST-test}" 108RUBY_FAKEGEM_TASK_TEST="${RUBY_FAKEGEM_TASK_TEST-test}"
68 109
69RUBY_FAKEGEM_BINWRAP="${RUBY_FAKEGEM_BINWRAP-*}" 110RUBY_FAKEGEM_BINWRAP="${RUBY_FAKEGEM_BINWRAP-*}"
70 111
71if [[ ${RUBY_FAKEGEM_TASK_DOC} != "" ]]; then 112[[ ${RUBY_FAKEGEM_TASK_DOC} == "" ]] && RUBY_FAKEGEM_RECIPE_DOC="none"
113
114case ${RUBY_FAKEGEM_RECIPE_DOC} in
115 rake)
72 IUSE="$IUSE doc" 116 IUSE+=" doc"
73 ruby_add_bdepend doc "dev-ruby/rake" 117 ruby_add_bdepend "doc? ( dev-ruby/rake )"
74fi 118 RUBY_FAKEGEM_DOCDIR="doc"
119 ;;
120 rdoc)
121 IUSE+=" doc"
122 ruby_add_bdepend "doc? ( dev-ruby/rdoc )"
123 RUBY_FAKEGEM_DOCDIR="doc"
124 ;;
125 yard)
126 IUSE+="doc"
127 ruby_add_bdepend "doc? ( dev-ruby/yard )"
128 RUBY_FAKEGEM_DOCDIR="doc"
129 ;;
130 none)
131 [[ -n ${RUBY_FAKEGEM_DOCDIR} ]] && IUSE+=" doc"
132 ;;
133esac
75 134
76if [[ ${RUBY_FAKEGEM_TASK_TEST} != "" ]]; then 135[[ ${RUBY_FAKEGEM_TASK_TEST} == "" ]] && RUBY_FAKEGEM_RECIPE_TEST="none"
136
137case ${RUBY_FAKEGEM_RECIPE_TEST} in
138 rake)
77 IUSE="$IUSE test" 139 IUSE+=" test"
78 ruby_add_bdepend test "dev-ruby/rake" 140 ruby_add_bdepend "test? ( dev-ruby/rake )"
79fi 141 ;;
142 rspec)
143 IUSE+=" test"
144 ruby_add_bdepend "test? ( dev-ruby/rspec:2 )"
145 ;;
146 cucumber)
147 IUSE+=" test"
148 # Unfortunately as of August 2012, cucumber is not supported on
149 # JRuby. We work it around here to avoid repeating the same
150 # code over and over again.
151 USE_RUBY="${USE_RUBY/jruby/}" ruby_add_bdepend "test? ( dev-util/cucumber )"
152 ;;
153 *)
154 RUBY_FAKEGEM_RECIPE_TEST="none"
155 ;;
156esac
80 157
81SRC_URI="mirror://rubygems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}${RUBY_FAKEGEM_SUFFIX:+-${RUBY_FAKEGEM_SUFFIX}}.gem" 158SRC_URI="mirror://rubygems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}${RUBY_FAKEGEM_SUFFIX:+-${RUBY_FAKEGEM_SUFFIX}}.gem"
82 159
160ruby_add_bdepend virtual/rubygems
83ruby_add_rdepend virtual/rubygems 161ruby_add_rdepend virtual/rubygems
84 162
85# @FUNCTION: ruby_fakegem_gemsdir 163# @FUNCTION: ruby_fakegem_gemsdir
86# @RETURN: Returns the gem data directory 164# @RETURN: Returns the gem data directory
87# @DESCRIPTION: 165# @DESCRIPTION:
88# This function returns the gems data directory for the ruby 166# This function returns the gems data directory for the ruby
89# implementation in question. 167# implementation in question.
90ruby_fakegem_gemsdir() { 168ruby_fakegem_gemsdir() {
91 local _gemsitedir=$(${RUBY} -r rbconfig -e 'print Config::CONFIG["sitelibdir"]' | sed -e 's:site_ruby:gems:') 169 has "${EAPI}" 2 && ! use prefix && EPREFIX=
170
171 local _gemsitedir=$(ruby_rbconfig_value 'sitelibdir')
172 _gemsitedir=${_gemsitedir//site_ruby/gems}
173 _gemsitedir=${_gemsitedir#${EPREFIX}}
92 174
93 [[ -z ${_gemsitedir} ]] && { 175 [[ -z ${_gemsitedir} ]] && {
94 eerror "Unable to find the gems dir" 176 eerror "Unable to find the gems dir"
95 die "Unable to find the gems dir" 177 die "Unable to find the gems dir"
96 } 178 }
125 insinto $(ruby_fakegem_gemsdir)/gems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}${newdirname} 207 insinto $(ruby_fakegem_gemsdir)/gems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}${newdirname}
126 newins "$1" ${newbasename} 208 newins "$1" ${newbasename}
127 ) || die "failed $0 $@" 209 ) || die "failed $0 $@"
128} 210}
129 211
212# @FUNCTION: ruby_fakegem_install_gemspec
213# @DESCRIPTION:
214# Install a .gemspec file for this package. Either use the file indicated
215# by the RUBY_FAKEGEM_GEMSPEC variable, or generate one using
216# ruby_fakegem_genspec.
217ruby_fakegem_install_gemspec() {
218 local gemspec="${T}"/${RUBY_FAKEGEM_NAME}-${_ruby_implementation}
219
220 (
221 if [[ ${RUBY_FAKEGEM_GEMSPEC} != "" ]]; then
222 ruby_fakegem_gemspec_gemspec ${RUBY_FAKEGEM_GEMSPEC} ${gemspec}
223 else
224 local metadata="${WORKDIR}"/${_ruby_implementation}/metadata
225
226 if [[ -e ${metadata} ]]; then
227 ruby_fakegem_metadata_gemspec ${metadata} ${gemspec}
228 else
229 ruby_fakegem_genspec ${gemspec}
230 fi
231 fi
232 ) || die "Unable to generate gemspec file."
233
234 insinto $(ruby_fakegem_gemsdir)/specifications
235 newins ${gemspec} ${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}.gemspec || die "Unable to install gemspec file."
236}
237
238# @FUNCTION: ruby_fakegem_gemspec_gemspec
239# @USAGE: gemspec-input gemspec-output
240# @DESCRIPTION:
241# Generates an installable version of the specification indicated by
242# RUBY_FAKEGEM_GEMSPEC. This file is eval'ed to produce a final specification
243# in a way similar to packaging the gemspec file.
244ruby_fakegem_gemspec_gemspec() {
245 ${RUBY} -e "puts eval(File::open('$1').read).to_ruby" > $2
246}
247
248# @FUNCTION: ruby_fakegem_metadata_gemspec
249# @USAGE: gemspec-metadata gemspec-output
250# @DESCRIPTION:
251# Generates an installable version of the specification indicated by
252# the metadata distributed by the gem itself. This is similar to how
253# rubygems creates an installation from a .gem file.
254ruby_fakegem_metadata_gemspec() {
255 case ${RUBY} in
256 *jruby)
257 ${RUBY} -r yaml -e "puts Gem::Specification.from_yaml(File::open('$1').read).to_ruby" > $2
258 ;;
259 *)
260 ${RUBY} -r yaml -e "puts Gem::Specification.from_yaml(File::open('$1', :encoding => 'UTF-8').read).to_ruby" > $2
261 ;;
262 esac
263}
264
130# @FUNCTION: ruby_fakegem_genspec 265# @FUNCTION: ruby_fakegem_genspec
266# @USAGE: output-gemspec
131# @DESCRIPTION: 267# @DESCRIPTION:
132# Generates a gemspec for the package and places it into the "specifications" 268# Generates a gemspec for the package and places it into the "specifications"
133# directory of RubyGems. 269# directory of RubyGems.
270# If the metadata normally distributed with a gem is present then that is
271# used to generate the gemspec file.
272#
273# As a fallback we can generate our own version.
134# In the gemspec, the following values are set: name, version, summary, 274# In the gemspec, the following values are set: name, version, summary,
135# homepage, and require_paths=["lib"]. 275# homepage, and require_paths=["lib"].
136# See RUBY_FAKEGEM_NAME and RUBY_FAKEGEM_VERSION for setting name and version. 276# See RUBY_FAKEGEM_NAME and RUBY_FAKEGEM_VERSION for setting name and version.
137# See RUBY_FAKEGEM_REQUIRE_PATHS for setting extra require paths. 277# See RUBY_FAKEGEM_REQUIRE_PATHS for setting extra require paths.
138ruby_fakegem_genspec() { 278ruby_fakegem_genspec() {
139 (
140 local required_paths="'lib'" 279 local required_paths="'lib'"
141 for path in ${RUBY_FAKEGEM_REQUIRE_PATHS}; do 280 for path in ${RUBY_FAKEGEM_REQUIRE_PATHS}; do
142 required_paths="${required_paths}, '${path}'" 281 required_paths="${required_paths}, '${path}'"
143 done 282 done
144 283
145 # We use the _ruby_implementation variable to avoid having stray 284 # We use the _ruby_implementation variable to avoid having stray
146 # copies with different implementations; while for now we're using 285 # copies with different implementations; while for now we're using
147 # the same exact content, we might have differences in the future, 286 # the same exact content, we might have differences in the future,
148 # so better taking this into consideration. 287 # so better taking this into consideration.
149 local quoted_description=${DESCRIPTION//\"/\\\"} 288 local quoted_description=${DESCRIPTION//\"/\\\"}
150 cat - > "${T}"/${RUBY_FAKEGEM_NAME}-${_ruby_implementation} <<EOF 289 cat - > $1 <<EOF
290# generated by ruby-fakegem.eclass $Revision: 1.42 $
151Gem::Specification.new do |s| 291Gem::Specification.new do |s|
152 s.name = "${RUBY_FAKEGEM_NAME}" 292 s.name = "${RUBY_FAKEGEM_NAME}"
153 s.version = "${RUBY_FAKEGEM_VERSION}" 293 s.version = "${RUBY_FAKEGEM_VERSION}"
154 s.summary = "${quoted_description}" 294 s.summary = "${quoted_description}"
155 s.homepage = "${HOMEPAGE}" 295 s.homepage = "${HOMEPAGE}"
156 s.require_paths = [${required_paths}] 296 s.require_paths = [${required_paths}]
157end 297end
158EOF 298EOF
159
160 insinto $(ruby_fakegem_gemsdir)/specifications
161 newins "${T}"/${RUBY_FAKEGEM_NAME}-${_ruby_implementation} ${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}.gemspec
162 ) || die "Unable to install fake gemspec"
163} 299}
164 300
165# @FUNCTION: ruby_fakegem_binwrapper 301# @FUNCTION: ruby_fakegem_binwrapper
166# @USAGE: command [path] 302# @USAGE: command [path] [content]
167# @DESCRIPTION: 303# @DESCRIPTION:
168# Creates a new binary wrapper for a command installed by the RubyGem. 304# Creates a new binary wrapper for a command installed by the RubyGem.
169# path defaults to /usr/bin/$command 305# path defaults to /usr/bin/$command content is optional and can be used
306# to inject additional ruby code into the wrapper. This may be useful to
307# e.g. force a specific version using the gem command.
170ruby_fakegem_binwrapper() { 308ruby_fakegem_binwrapper() {
171 ( 309 (
172 local gembinary=$1 310 local gembinary=$1
173 local newbinary=${2:-/usr/bin/$gembinary} 311 local newbinary=${2:-/usr/bin/$gembinary}
312 local content=$3
174 local relativegembinary=${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}/bin/${gembinary} 313 local relativegembinary=${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}/bin/${gembinary}
175 local binpath=$(dirname $newbinary) 314 local binpath=$(dirname $newbinary)
176 [[ ${binpath} = . ]] && binpath=/usr/bin 315 [[ ${binpath} = . ]] && binpath=/usr/bin
177 316
317 # Try to find out whether the package is going to install for
318 # one or multiple implementations; if we're installing for a
319 # *single* implementation, no need to use “/usr/bin/env ruby”
320 # in the shebang, and we can actually avoid errors when
321 # calling the script by default (see for instance the
322 # JRuby-specific commands).
323 local rubycmd=
324 for implementation in ${USE_RUBY}; do
325 # ignore non-enabled implementations
326 use ruby_targets_${implementation} || continue
327 if [ -z $rubycmd ]; then
328 # if no other implementation was set before, set it.
329 rubycmd="$(ruby_implementation_command ${implementation})"
330 else
331 # if another implementation already arrived, then make
332 # it generic and break out of the loop. This ensures
333 # that we do at most two iterations.
334 rubycmd="/usr/bin/env ruby"
335 break
336 fi
337 done
338
178 cat - > "${T}"/gembin-wrapper-${gembinary} <<EOF 339 cat - > "${T}"/gembin-wrapper-${gembinary} <<EOF
179#!/usr/bin/env ruby 340#!${rubycmd}
180# This is a simplified version of the RubyGems wrapper 341# This is a simplified version of the RubyGems wrapper
181# 342#
182# Generated by ruby-fakegem.eclass 343# Generated by ruby-fakegem.eclass $Revision: 1.42 $
183 344
184require 'rubygems' 345require 'rubygems'
185 346
347${content}
186load Gem::default_path[-1] + "/gems/${relativegembinary}" 348load Gem::default_path[-1] + "/gems/${relativegembinary}"
187 349
188EOF 350EOF
189 351
190 exeinto ${binpath:-/usr/bin} 352 exeinto ${binpath:-/usr/bin}
195# @FUNCTION: all_fakegem_compile 357# @FUNCTION: all_fakegem_compile
196# @DESCRIPTION: 358# @DESCRIPTION:
197# Build documentation for the package if indicated by the doc USE flag 359# Build documentation for the package if indicated by the doc USE flag
198# and if there is a documetation task defined. 360# and if there is a documetation task defined.
199all_fakegem_compile() { 361all_fakegem_compile() {
200 if [[ ${RUBY_FAKEGEM_TASK_DOC} != "" ]] && use doc; then 362 if [[ -n ${RUBY_FAKEGEM_DOCDIR} ]] && use doc; then
363 case ${RUBY_FAKEGEM_RECIPE_DOC} in
364 rake)
201 rake ${RUBY_FAKEGEM_TASK_DOC} || die "failed to (re)build documentation" 365 rake ${RUBY_FAKEGEM_TASK_DOC} || die "failed to (re)build documentation"
366 ;;
367 rdoc)
368 rdoc ${RUBY_FAKEGEM_DOC_SOURCES} || die "failed to (re)build documentation"
369 ;;
370 yard)
371 yard doc ${RUBY_FAKEGEM_DOC_SOURCES} || die "failed to (re)build documentation"
372 ;;
373 esac
202 fi 374 fi
203} 375}
204 376
205# @FUNCTION: all_ruby_unpack 377# @FUNCTION: all_ruby_unpack
206# @DESCRIPTION: 378# @DESCRIPTION:
207# Unpack the source archive, including support for unpacking gems. 379# Unpack the source archive, including support for unpacking gems.
208all_ruby_unpack() { 380all_ruby_unpack() {
209 # Special support for extracting .gem files; the file need to be 381 # Special support for extracting .gem files; the file need to be
210 # extracted twice and the mtime from the archive _has_ to be 382 # extracted twice and the mtime from the archive _has_ to be
211 # ignored (it's always set to epoch 0). 383 # ignored (it's always set to epoch 0).
212 # 384 for archive in ${A}; do
213 # This only works if there is exactly one archive and that archive 385 case "${archive}" in
214 # is a .gem file! 386 *.gem)
215 if [[ $(wc -w <<< ${A}) == 1 ]] && 387 # Make sure that we're not running unpack for more than
216 [[ ${A} == *.gem ]]; then 388 # one .gem file, since we won't support that at all.
389 [[ -d "${S}" ]] && die "Unable to unpack ${archive}, ${S} exists"
390
217 ebegin "Unpacking .gem file..." 391 ebegin "Unpacking .gem file..."
218 tar -mxf ${DISTDIR}/${A} || die 392 tar -mxf "${DISTDIR}"/${archive} || die
219 eend $? 393 eend $?
220 394
395 ebegin "Uncompressing metadata"
396 gunzip metadata.gz || die
397 eend $?
398
221 mkdir "${S}" 399 mkdir "${S}"
222 pushd "${S}" &>/dev/null 400 pushd "${S}" &>/dev/null
223 401
224 ebegin "Unpacking data.tar.gz" 402 ebegin "Unpacking data.tar.gz"
225 tar -mxf "${my_WORKDIR}"/data.tar.gz || die 403 tar -mxf "${my_WORKDIR}"/data.tar.gz || die
226 eend $? 404 eend $?
405
227 popd &>/dev/null 406 popd &>/dev/null
228 else 407 ;;
229 [[ -n ${A} ]] && unpack ${A} 408 *.patch.bz2)
230 fi 409 # We apply the patches with RUBY_PATCHES directly from DISTDIR,
410 # as the WORKDIR variable changes value between the global-scope
411 # and the time all_ruby_unpack/_prepare are called. Since we can
412 # simply decompress them when applying, this is much easier to
413 # deal with for us.
414 einfo "Keeping ${archive} as-is"
415 ;;
416 *)
417 unpack ${archive}
418 ;;
419 esac
420 done
231} 421}
232 422
233# @FUNCTION: all_ruby_compile 423# @FUNCTION: all_ruby_compile
234# @DESCRIPTION: 424# @DESCRIPTION:
235# Compile the package. 425# Compile the package.
239 429
240# @FUNCTION: each_fakegem_test 430# @FUNCTION: each_fakegem_test
241# @DESCRIPTION: 431# @DESCRIPTION:
242# Run tests for the package for each ruby target if the test task is defined. 432# Run tests for the package for each ruby target if the test task is defined.
243each_fakegem_test() { 433each_fakegem_test() {
244 local rubyflags= 434 case ${RUBY_FAKEGEM_RECIPE_TEST} in
435 rake)
245 ${RUBY} ${rubyflags} -S rake ${RUBY_FAKEGEM_TASK_TEST} || die "tests failed" 436 ${RUBY} -S rake ${RUBY_FAKEGEM_TASK_TEST} || die "tests failed"
437 ;;
438 rspec)
439 ruby-ng_rspec
440 ;;
441 cucumber)
442 ruby-ng_cucumber
443 ;;
444 none)
445 ewarn "each_fakegem_test called, but \${RUBY_FAKEGEM_RECIPE_TEST} is 'none'"
446 ;;
447 esac
246} 448}
247 449
248if [[ ${RUBY_FAKEGEM_TASK_TEST} != "" ]]; then 450if [[ ${RUBY_FAKEGEM_RECIPE_TEST} != none ]]; then
249 # @FUNCTION: each_ruby_test 451 # @FUNCTION: each_ruby_test
250 # @DESCRIPTION: 452 # @DESCRIPTION:
251 # Run the tests for this package. 453 # Run the tests for this package.
252 each_ruby_test() { 454 each_ruby_test() {
253 each_fakegem_test 455 each_fakegem_test
254 } 456 }
255fi 457fi
256 458
257# @FUNCTION: each_fakegem_install 459# @FUNCTION: each_fakegem_install
258# @DESCRIPTION: 460# @DESCRIPTION:
259# Install the package for each ruby target. 461# Install the package for each ruby target.
260each_fakegem_install() { 462each_fakegem_install() {
261 ruby_fakegem_genspec 463 ruby_fakegem_install_gemspec
262 464
263 local _gemlibdirs="${RUBY_FAKEGEM_EXTRAINSTALL}" 465 local _gemlibdirs="${RUBY_FAKEGEM_EXTRAINSTALL}"
264 for directory in bin lib; do 466 for directory in bin lib; do
265 [[ -d ${directory} ]] && _gemlibdirs="${_gemlibdirs} ${directory}" 467 [[ -d ${directory} ]] && _gemlibdirs="${_gemlibdirs} ${directory}"
266 done 468 done
278 480
279# @FUNCTION: all_fakegem_install 481# @FUNCTION: all_fakegem_install
280# @DESCRIPTION: 482# @DESCRIPTION:
281# Install files common to all ruby targets. 483# Install files common to all ruby targets.
282all_fakegem_install() { 484all_fakegem_install() {
283 if [[ -n ${RUBY_FAKEGEM_DOCDIR} ]] && [[ ${RUBY_FAKEGEM_TASK_DOC} != "" ]] && use doc; then 485 if [[ -n ${RUBY_FAKEGEM_DOCDIR} ]] && use doc; then
284 for dir in ${RUBY_FAKEGEM_DOCDIR}; do 486 for dir in ${RUBY_FAKEGEM_DOCDIR}; do
487 [[ -d ${dir} ]] || continue
488
285 pushd ${dir} &>/dev/null 489 pushd ${dir} &>/dev/null
286 dohtml -r * || die "failed to install documentation" 490 dohtml -r * || die "failed to install documentation"
287 popd &>/dev/null 491 popd &>/dev/null
288 done 492 done
289 fi 493 fi

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.42

  ViewVC Help
Powered by ViewVC 1.1.20