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