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