| 1 | # Copyright 1999-2009 Gentoo Foundation |
1 | # Copyright 1999-2012 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.29 2011/04/25 08:36:51 graaff Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/ruby-fakegem.eclass,v 1.34 2012/08/13 22:21:26 flameeyes 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 | |
| 19 | inherit ruby-ng |
16 | inherit 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" |
| 40 | |
48 | |
| 41 | # @ECLASS-VARIABLE: RUBY_FAKEGEM_DOCDIR |
49 | # @ECLASS-VARIABLE: RUBY_FAKEGEM_DOCDIR |
| 42 | # @DESCRIPTION: |
50 | # @DESCRIPTION: |
| 43 | # Specify the directory under which the documentation is built; |
51 | # Specify the directory under which the documentation is built; |
| … | |
… | |
| 62 | # @ECLASS-VARIABLE: RUBY_FAKEGEM_GEMSPEC |
70 | # @ECLASS-VARIABLE: RUBY_FAKEGEM_GEMSPEC |
| 63 | # @DESCRIPTION: |
71 | # @DESCRIPTION: |
| 64 | # Filename of .gemspec file to install instead of generating a generic one. |
72 | # Filename of .gemspec file to install instead of generating a generic one. |
| 65 | # RUBY_FAKEGEM_GEMSPEC="" |
73 | # RUBY_FAKEGEM_GEMSPEC="" |
| 66 | |
74 | |
|
|
75 | # @ECLASS-VARIABLE: RUBY_FAKEGEM_EXTRAINSTALL |
|
|
76 | # @DESCRIPTION: |
|
|
77 | # List of files and directories relative to the top directory that also |
|
|
78 | # get installed. Some gems provide extra files such as version information, |
|
|
79 | # Rails generators, or data that needs to be installed as well. |
|
|
80 | # RUBY_FAKEGEM_EXTRAINSTALL="" |
|
|
81 | |
| 67 | RUBY_FAKEGEM_NAME="${RUBY_FAKEGEM_NAME:-${PN}}" |
82 | RUBY_FAKEGEM_NAME="${RUBY_FAKEGEM_NAME:-${PN}}" |
| 68 | RUBY_FAKEGEM_VERSION="${RUBY_FAKEGEM_VERSION:-${PV/_pre/.pre}}" |
83 | RUBY_FAKEGEM_VERSION="${RUBY_FAKEGEM_VERSION:-${PV/_pre/.pre}}" |
| 69 | RUBY_FAKEGEM_SUFFIX="${RUBY_FAKEGEM_SUFFIX:-}" |
84 | RUBY_FAKEGEM_SUFFIX="${RUBY_FAKEGEM_SUFFIX:-}" |
| 70 | |
85 | |
| 71 | RUBY_FAKEGEM_TASK_DOC="${RUBY_FAKEGEM_TASK_DOC-rdoc}" |
86 | RUBY_FAKEGEM_TASK_DOC="${RUBY_FAKEGEM_TASK_DOC-rdoc}" |
|
|
87 | RUBY_FAKEGEM_RECIPE_TEST="${RUBY_FAKEGEM_RECIPE_TEST-rake}" |
| 72 | RUBY_FAKEGEM_TASK_TEST="${RUBY_FAKEGEM_TASK_TEST-test}" |
88 | RUBY_FAKEGEM_TASK_TEST="${RUBY_FAKEGEM_TASK_TEST-test}" |
| 73 | |
89 | |
| 74 | RUBY_FAKEGEM_BINWRAP="${RUBY_FAKEGEM_BINWRAP-*}" |
90 | RUBY_FAKEGEM_BINWRAP="${RUBY_FAKEGEM_BINWRAP-*}" |
| 75 | |
91 | |
| 76 | if [[ ${RUBY_FAKEGEM_TASK_DOC} != "" ]]; then |
92 | if [[ ${RUBY_FAKEGEM_TASK_DOC} != "" ]]; then |
| … | |
… | |
| 80 | |
96 | |
| 81 | if [[ -n ${RUBY_FAKEGEM_DOCDIR} ]]; then |
97 | if [[ -n ${RUBY_FAKEGEM_DOCDIR} ]]; then |
| 82 | IUSE="$IUSE doc" |
98 | IUSE="$IUSE doc" |
| 83 | fi |
99 | fi |
| 84 | |
100 | |
| 85 | if [[ ${RUBY_FAKEGEM_TASK_TEST} != "" ]]; then |
101 | [[ ${RUBY_FAKEGEM_TASK_TEST} == "" ]] && RUBY_FAKEGEM_RECIPE_TEST="none" |
|
|
102 | |
|
|
103 | case ${RUBY_FAKEGEM_RECIPE_TEST} in |
|
|
104 | rake) |
| 86 | IUSE="$IUSE test" |
105 | IUSE+=" test" |
| 87 | ruby_add_bdepend "test? ( dev-ruby/rake )" |
106 | ruby_add_bdepend "test? ( dev-ruby/rake )" |
| 88 | fi |
107 | ;; |
|
|
108 | rspec) |
|
|
109 | IUSE+=" test" |
|
|
110 | ruby_add_bdepend "test? ( dev-ruby/rspec:2 )" |
|
|
111 | ;; |
|
|
112 | cucumber) |
|
|
113 | IUSE+=" test" |
|
|
114 | # Unfortunately as of August 2012, cucumber is not supported on |
|
|
115 | # JRuby. We work it around here to avoid repeating the same |
|
|
116 | # code over and over again. |
|
|
117 | USE_RUBY="${USE_RUBY/jruby/}" ruby_add_bdepend "test? ( dev-util/cucumber )" |
|
|
118 | ;; |
|
|
119 | *) |
|
|
120 | RUBY_FAKEGEM_RECIPE_TEST="none" |
|
|
121 | ;; |
|
|
122 | esac |
| 89 | |
123 | |
| 90 | SRC_URI="mirror://rubygems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}${RUBY_FAKEGEM_SUFFIX:+-${RUBY_FAKEGEM_SUFFIX}}.gem" |
124 | SRC_URI="mirror://rubygems/${RUBY_FAKEGEM_NAME}-${RUBY_FAKEGEM_VERSION}${RUBY_FAKEGEM_SUFFIX:+-${RUBY_FAKEGEM_SUFFIX}}.gem" |
| 91 | |
125 | |
| 92 | ruby_add_bdepend dev-ruby/rubygems |
126 | ruby_add_bdepend virtual/rubygems |
| 93 | ruby_add_rdepend dev-ruby/rubygems |
127 | ruby_add_rdepend virtual/rubygems |
| 94 | |
128 | |
| 95 | # @FUNCTION: ruby_fakegem_gemsdir |
129 | # @FUNCTION: ruby_fakegem_gemsdir |
| 96 | # @RETURN: Returns the gem data directory |
130 | # @RETURN: Returns the gem data directory |
| 97 | # @DESCRIPTION: |
131 | # @DESCRIPTION: |
| 98 | # This function returns the gems data directory for the ruby |
132 | # This function returns the gems data directory for the ruby |
| … | |
… | |
| 210 | # copies with different implementations; while for now we're using |
244 | # copies with different implementations; while for now we're using |
| 211 | # the same exact content, we might have differences in the future, |
245 | # the same exact content, we might have differences in the future, |
| 212 | # so better taking this into consideration. |
246 | # so better taking this into consideration. |
| 213 | local quoted_description=${DESCRIPTION//\"/\\\"} |
247 | local quoted_description=${DESCRIPTION//\"/\\\"} |
| 214 | cat - > $1 <<EOF |
248 | cat - > $1 <<EOF |
| 215 | # generated by ruby-fakegem.eclass $Revision: 1.29 $ |
249 | # generated by ruby-fakegem.eclass $Revision: 1.34 $ |
| 216 | Gem::Specification.new do |s| |
250 | Gem::Specification.new do |s| |
| 217 | s.name = "${RUBY_FAKEGEM_NAME}" |
251 | s.name = "${RUBY_FAKEGEM_NAME}" |
| 218 | s.version = "${RUBY_FAKEGEM_VERSION}" |
252 | s.version = "${RUBY_FAKEGEM_VERSION}" |
| 219 | s.summary = "${quoted_description}" |
253 | s.summary = "${quoted_description}" |
| 220 | s.homepage = "${HOMEPAGE}" |
254 | s.homepage = "${HOMEPAGE}" |
| … | |
… | |
| 260 | |
294 | |
| 261 | cat - > "${T}"/gembin-wrapper-${gembinary} <<EOF |
295 | cat - > "${T}"/gembin-wrapper-${gembinary} <<EOF |
| 262 | #!${rubycmd} |
296 | #!${rubycmd} |
| 263 | # This is a simplified version of the RubyGems wrapper |
297 | # This is a simplified version of the RubyGems wrapper |
| 264 | # |
298 | # |
| 265 | # Generated by ruby-fakegem.eclass $Revision: 1.29 $ |
299 | # Generated by ruby-fakegem.eclass $Revision: 1.34 $ |
| 266 | |
300 | |
| 267 | require 'rubygems' |
301 | require 'rubygems' |
| 268 | |
302 | |
| 269 | load Gem::default_path[-1] + "/gems/${relativegembinary}" |
303 | load Gem::default_path[-1] + "/gems/${relativegembinary}" |
| 270 | |
304 | |
| … | |
… | |
| 340 | |
374 | |
| 341 | # @FUNCTION: each_fakegem_test |
375 | # @FUNCTION: each_fakegem_test |
| 342 | # @DESCRIPTION: |
376 | # @DESCRIPTION: |
| 343 | # Run tests for the package for each ruby target if the test task is defined. |
377 | # Run tests for the package for each ruby target if the test task is defined. |
| 344 | each_fakegem_test() { |
378 | each_fakegem_test() { |
| 345 | local rubyflags= |
379 | case ${RUBY_FAKEGEM_RECIPE_TEST} in |
|
|
380 | rake) |
| 346 | ${RUBY} ${rubyflags} -S rake ${RUBY_FAKEGEM_TASK_TEST} || die "tests failed" |
381 | ${RUBY} -S rake ${RUBY_FAKEGEM_TASK_TEST} || die "tests failed" |
|
|
382 | ;; |
|
|
383 | rspec) |
|
|
384 | ruby-ng_rspec |
|
|
385 | ;; |
|
|
386 | cucumber) |
|
|
387 | ruby-ng_cucumber |
|
|
388 | ;; |
|
|
389 | none) |
|
|
390 | ewarn "each_fakegem_test called, but \${RUBY_FAKEGEM_RECIPE_TEST} is 'none'" |
|
|
391 | ;; |
|
|
392 | esac |
| 347 | } |
393 | } |
| 348 | |
394 | |
| 349 | if [[ ${RUBY_FAKEGEM_TASK_TEST} != "" ]]; then |
395 | if [[ ${RUBY_FAKEGEM_RECIPE_TEST} != none ]]; then |
| 350 | # @FUNCTION: each_ruby_test |
396 | # @FUNCTION: each_ruby_test |
| 351 | # @DESCRIPTION: |
397 | # @DESCRIPTION: |
| 352 | # Run the tests for this package. |
398 | # Run the tests for this package. |
| 353 | each_ruby_test() { |
399 | each_ruby_test() { |
| 354 | each_fakegem_test |
400 | each_fakegem_test |
| 355 | } |
401 | } |
| 356 | fi |
402 | fi |
| 357 | |
403 | |
| 358 | # @FUNCTION: each_fakegem_install |
404 | # @FUNCTION: each_fakegem_install |
| 359 | # @DESCRIPTION: |
405 | # @DESCRIPTION: |
| 360 | # Install the package for each ruby target. |
406 | # Install the package for each ruby target. |