| 1 | # Copyright 1999-2005 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/gems.eclass,v 1.23 2008/11/14 13:56:56 graaff Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/gems.eclass,v 1.32 2009/11/29 19:10:01 flameeyes Exp $ |
|
|
4 | |
|
|
5 | # @ECLASS: gems.eclass |
|
|
6 | # @MAINTAINER: |
|
|
7 | # ruby@gentoo.org |
| 4 | # |
8 | # |
| 5 | # Author: Rob Cakebread <pythonhead@gentoo.org> |
9 | # Original Author: Rob Cakebread <pythonhead@gentoo.org> |
| 6 | # Current Maintainer: Ruby Herd <ruby@gentoo.org> |
|
|
| 7 | # |
10 | # |
| 8 | # The gems eclass is designed to allow easier installation of |
11 | # @BLURB: Eclass helping with the installation of RubyGems |
| 9 | # gems-based ruby packagess and their incorporation into |
12 | # @DESCRIPTION: |
| 10 | # the Gentoo Linux system. |
|
|
| 11 | # |
|
|
| 12 | # - Features: |
|
|
| 13 | # gems_location() - Set ${GEMSDIR} with gem install dir and ${GEM_SRC} with path to gem to install |
|
|
| 14 | # gems_src_unpack() - Does nothing. |
|
|
| 15 | # gems_src_compile() - Does nothing. |
|
|
| 16 | # gems_src_install() - installs a gem into ${D} |
|
|
| 17 | # |
|
|
| 18 | # NOTE: |
|
|
| 19 | # See http://dev.gentoo.org/~pythonhead/ruby/gems.html for notes on using gems with portage |
13 | # See http://dev.gentoo.org/~pythonhead/ruby/gems.html for notes on using gems with Portage. |
| 20 | |
14 | |
|
|
15 | # @ECLASS-VARIABLE: USE_RUBY |
|
|
16 | # @DESCRIPTION: |
|
|
17 | # Ruby versions the gem is compatible to. The eclass will install the gem for |
|
|
18 | # versions that are compatible and installed on the system. Format: rubyDD where |
|
|
19 | # DD is the two-digit version suffix (e.g.: USE_RUBY="ruby19" for Ruby 1.9.1) |
| 21 | |
20 | |
| 22 | inherit eutils ruby |
21 | inherit eutils ruby |
| 23 | |
22 | |
| 24 | SRC_URI="http://gems.rubyforge.org/gems/${P}.gem" |
23 | SRC_URI="mirror://rubygems/${P}.gem" |
| 25 | |
24 | |
| 26 | IUSE="doc" |
25 | IUSE="doc" |
| 27 | |
26 | |
| 28 | DEPEND=" |
27 | DEPEND=" |
| 29 | >=dev-ruby/rubygems-0.9.4 |
28 | || ( >=dev-ruby/rubygems-1.3.1 =dev-lang/ruby-1.9* ) |
| 30 | !dev-ruby/rdoc |
29 | !<dev-ruby/rdoc-2 |
| 31 | " |
30 | " |
| 32 | RDEPEND="${DEPEND}" |
31 | RDEPEND="${DEPEND}" |
| 33 | |
32 | |
|
|
33 | # @FUNCTION: gems_location |
|
|
34 | # @USAGE: [Ruby binary] |
|
|
35 | # @DESCRIPTION: |
|
|
36 | # Exports GEMSDIR to the path Gems are installed to for the respective Ruby |
|
|
37 | # version |
| 34 | gems_location() { |
38 | gems_location() { |
| 35 | local sitelibdir |
39 | local ruby_version |
| 36 | sitelibdir=$(ruby -r rbconfig -e 'print Config::CONFIG["sitelibdir"]') |
40 | if [[ -z "$1" ]]; then |
| 37 | export GEMSDIR=${sitelibdir/site_ruby/gems} |
41 | ruby_version="gem" |
| 38 | |
42 | else |
|
|
43 | ruby_version=${1/ruby/gem} |
|
|
44 | fi |
|
|
45 | export GEMSDIR=$(/usr/bin/${ruby_version} env gemdir) |
| 39 | } |
46 | } |
| 40 | |
47 | |
|
|
48 | # @FUNCTION: gems_src_unpack |
|
|
49 | # @DESCRIPTION: |
|
|
50 | # does nothing |
| 41 | gems_src_unpack() { |
51 | gems_src_unpack() { |
| 42 | true |
52 | true |
| 43 | } |
53 | } |
| 44 | |
54 | |
|
|
55 | # @FUNCTION: gems_src_compile |
|
|
56 | # @DESCRIPTION: |
|
|
57 | # does nothing |
| 45 | gems_src_compile() { |
58 | gems_src_compile() { |
| 46 | true |
59 | true |
| 47 | } |
60 | } |
| 48 | |
61 | |
|
|
62 | # @FUNCTION: gems_src_install |
|
|
63 | # @DESCRIPTION: |
|
|
64 | # Installs the gem |
| 49 | gems_src_install() { |
65 | gems_src_install() { |
| 50 | gems_location |
|
|
| 51 | |
|
|
| 52 | if [[ -z "${MY_P}" ]]; then |
|
|
| 53 | [[ -z "${GEM_SRC}" ]] && GEM_SRC="${DISTDIR}/${P}" |
|
|
| 54 | spec_path="${D}/${GEMSDIR}/specifications/${P}.gemspec" |
|
|
| 55 | else |
|
|
| 56 | [[ -z "${GEM_SRC}" ]] && GEM_SRC="${DISTDIR}/${MY_P}" |
|
|
| 57 | spec_path="${D}/${GEMSDIR}/specifications/${MY_P}.gemspec" |
|
|
| 58 | fi |
|
|
| 59 | |
|
|
| 60 | local myconf |
66 | local myconf |
| 61 | if use doc; then |
67 | if use doc; then |
| 62 | myconf="--rdoc --ri" |
68 | myconf="--rdoc --ri" |
| 63 | else |
69 | else |
| 64 | myconf="--no-rdoc --no-ri" |
70 | myconf="--no-rdoc --no-ri" |
| 65 | fi |
71 | fi |
| 66 | |
72 | |
| 67 | dodir ${GEMSDIR} |
73 | if [[ -n "${GEMS_FORCE_INSTALL}" ]]; then |
| 68 | |
74 | myconf="${myconf} --force" |
| 69 | local gte13=$(${RUBY} -rubygems -e 'puts Gem::RubyGemsVersion >= "1.3.0"') |
|
|
| 70 | |
|
|
| 71 | if [[ "${gte13}" == "true" ]] ; then |
|
|
| 72 | gem install ${GEM_SRC} --version ${PV} ${myconf} \ |
|
|
| 73 | --local --install-dir "${D}/${GEMSDIR}" --sandbox-fix \ |
|
|
| 74 | || die "gem (>=1.3.0) install failed" |
|
|
| 75 | else |
|
|
| 76 | gem install ${GEM_SRC} --version ${PV} ${myconf} \ |
|
|
| 77 | --local --install-dir "${D}/${GEMSDIR}" || die "gem (<1.3.0) install failed" |
|
|
| 78 | fi |
75 | fi |
| 79 | |
76 | |
| 80 | if [[ -d "${D}/${GEMSDIR}/bin" ]] ; then |
77 | # I'm not sure how many ebuilds have correctly set USE_RUBY - let's assume |
| 81 | exeinto /usr/bin |
78 | # ruby18 if they haven't, since even pure Ruby gems that have been written |
| 82 | for exe in ${D}/${GEMSDIR}/bin/* ; do |
79 | # against 1.8 can explode under 1.9. |
| 83 | doexe ${exe} |
80 | if [[ -z "${USE_RUBY}" ]]; then |
| 84 | done |
81 | einfo "QA notice" |
|
|
82 | einfo "The ebuild doesn't set USE_RUBY explicitly. Defaulting to ruby18." |
|
|
83 | einfo "Please check compatibility and set USE_RUBY respectively." |
|
|
84 | |
|
|
85 | USE_RUBY="ruby18" |
|
|
86 | elif [[ "${USE_RUBY}" == "any" ]]; then |
|
|
87 | eerror "USE_RUBY=\"any\" is no longer supported. Please use explicit versions instead." |
|
|
88 | die "USE_RUBY=\"any\" is no longer supported." |
| 85 | fi |
89 | fi |
|
|
90 | |
|
|
91 | local num_ruby_slots=$(echo "${USE_RUBY}" | wc -w) |
|
|
92 | |
|
|
93 | for ruby_version in ${USE_RUBY} ; do |
|
|
94 | # Check that we have the version installed |
|
|
95 | [[ -e "/usr/bin/${ruby_version/ruby/gem}" ]] || continue |
|
|
96 | |
|
|
97 | einfo "Installing for ${ruby_version}..." |
|
|
98 | gems_location ${ruby_version} |
|
|
99 | dodir ${GEMSDIR} || die |
|
|
100 | |
|
|
101 | if [[ -z "${MY_P}" ]]; then |
|
|
102 | [[ -z "${GEM_SRC}" ]] && GEM_SRC="${DISTDIR}/${P}" |
|
|
103 | spec_path="${D}/${GEMSDIR}/specifications/${P}.gemspec" |
|
|
104 | else |
|
|
105 | [[ -z "${GEM_SRC}" ]] && GEM_SRC="${DISTDIR}/${MY_P}" |
|
|
106 | spec_path="${D}/${GEMSDIR}/specifications/${MY_P}.gemspec" |
|
|
107 | fi |
|
|
108 | |
|
|
109 | # >=1.3.0 needs a path fix |
|
|
110 | local gte13=$(/usr/bin/${ruby_version} -rubygems -e 'puts Gem::RubyGemsVersion >= "1.3.0"') |
|
|
111 | |
|
|
112 | /usr/bin/${ruby_version} /usr/bin/gem install ${GEM_SRC} \ |
|
|
113 | --version ${PV} ${myconf} --local --install-dir "${D}/${GEMSDIR}" \ |
|
|
114 | --sandbox-fix --no-user-install || die "gem (>=1.3.0) install failed" |
|
|
115 | |
|
|
116 | if [[ -d "${D}/${GEMSDIR}/bin" ]] ; then |
|
|
117 | exeinto /usr/bin |
|
|
118 | for exe in "${D}"/${GEMSDIR}/bin/* ; do |
|
|
119 | if [ "$num_ruby_slots" -ge 2 ] ; then |
|
|
120 | # Ensures that the exe file gets run using the currently |
|
|
121 | # selected version of ruby. |
|
|
122 | sed -i -e 's@^#!/usr/bin/ruby.*$@#!/usr/bin/ruby@' "${exe}" |
|
|
123 | fi |
|
|
124 | doexe "${exe}" || die |
|
|
125 | done |
|
|
126 | fi |
|
|
127 | done |
| 86 | } |
128 | } |
| 87 | |
129 | |
| 88 | EXPORT_FUNCTIONS src_unpack src_compile src_install |
130 | EXPORT_FUNCTIONS src_unpack src_compile src_install |