Hi, The current ruby eclasses work fairly well for ruby-only packages, but support for packages where ruby is only part of the package are not well served. As a start the ruby team proposes the following new eclass, ruby-single.eclass. The purpose of this eclass is to provide support for the case where a working ruby version needs to be accessed via /usr/bin/ruby. Examples of such packages are net-libs/webkit-gtk and sys-block/thin-provisioning-tools.
The eclass is loosely modeled after the python-single eclass-r1, although not all the functionality available there can be or has been provided for ruby at the moment. We've tried to keep variable and method names compatible, though. Also contained in this email is a new ruby-utils eclass which contains code factored out of the current ruby-ng eclass, so that it can used by both eclasses. ruby-utils.eclass is not meant to be used in ebuilds. Full example code including an ebuild (app-admin/pwstore) is available in the "ruby" repository. Thanks, Hans
# Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/eclass/python-single-r1.eclass,v 1.26 2014/05/26 16:13:35 mgorny Exp $ # @ECLASS: ruby-single # @MAINTAINER: # Ruby team <[email protected]> # @AUTHOR: # Author: Hans de Graaff <[email protected]> # Based on python-single-r1 by: Michał Górny <[email protected]> # @BLURB: An eclass for Ruby packages not installed for multiple implementations. # @DESCRIPTION: # An eclass for packages which don't support being installed for # multiple Ruby implementations. This mostly includes ruby-based # scripts. case "${EAPI:-0}" in 0|1|2|3) die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}" ;; 4|5) ;; *) die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" ;; esac inherit ruby-utils # @ECLASS-VARIABLE: USE_RUBY # @DEFAULT_UNSET # @REQUIRED # @DESCRIPTION: # This variable contains a space separated list of targets (see above) a package # is compatible to. It must be set before the `inherit' call. There is no # default. All ebuilds are expected to set this variable. # @ECLASS-VARIABLE: RUBY_DEPS # @DESCRIPTION: # # This is an eclass-generated Ruby dependency string for all # implementations listed in USE_RUBY. Any one of the supported ruby # targets will satisfy this dependency. # # Example use: # @CODE # RDEPEND="${RUBY_DEPS} # dev-foo/mydep" # BDEPEND="${RDEPEND}" # @ # # Example value: # @CODE # || ( dev-lang/ruby:2.0 dev-lang/ruby:1.9 ) # @CODE _ruby_single_implementations_depend() { local depend for _ruby_implementation in ${RUBY_TARGETS_PREFERENCE}; do if [[ ${USE_RUBY} =~ ${_ruby_implementation} ]]; then depend="${depend} $(_ruby_implementation_depend $_ruby_implementation)" fi done echo "|| ( ${depend} )" } _ruby_single_set_globals() { RUBY_DEPS=$(_ruby_single_implementations_depend) } _ruby_single_set_globals
# Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/eclass/ruby-ng.eclass,v 1.53 2013/12/26 07:11:48 graaff Exp $ # @ECLASS: ruby-utils.eclass # @MAINTAINER: # Ruby team <[email protected]> # @AUTHOR: # Author: Hans de Graaff <[email protected]> # @BLURB: An eclass for supporting ruby scripts and bindings in non-ruby packages # @DESCRIPTION: # The ruby-utils eclass is designed to allow an easier installation of # Ruby scripts and bindings for non-ruby packages. # # This eclass does not set any metadata variables nor export any phase # functions. It can be inherited safely. case ${EAPI} in 0|1|2) die "Unsupported EAPI=${EAPI} (too old) for ${ECLASS}" ;; 3|4|5) ;; *) die "Unknown EAPI=${EAPI} for ${ECLASS}" esac if [[ ! ${_RUBY_UTILS} ]]; then # @ECLASS-VARIABLE: RUBY_TARGETS_PREFERENCE # @DESCRIPTION: # This variable lists all the known ruby targets in preference of use as # determined by the ruby team. By using this ordering rather than the # USE_RUBY mandated ordering we have more control over which ruby # implementation will be installed first (and thus eselected). This will # provide for a better first installation experience. # All RUBY_TARGETS RUBY_TARGETS_PREFERENCE="ruby20 ruby19 " # All other active ruby targets RUBY_TARGETS_PREFERENCE+="ruby21 rbx jruby " _ruby_implementation_depend() { local rubypn= local rubyslot= case $1 in ruby18) rubypn="dev-lang/ruby" rubyslot=":1.8" ;; ruby19) rubypn="dev-lang/ruby" rubyslot=":1.9" ;; ruby20) rubypn="dev-lang/ruby" rubyslot=":2.0" ;; ruby21) rubypn="dev-lang/ruby" rubyslot=":2.1" ;; ree18) rubypn="dev-lang/ruby-enterprise" rubyslot=":1.8" ;; jruby) rubypn="dev-java/jruby" rubyslot="" ;; rbx) rubypn="dev-lang/rubinius" rubyslot="" ;; *) die "$1: unknown Ruby implementation" esac echo "$2${rubypn}$3${rubyslot}" } _RUBY_UTILS=1 fi
signature.asc
Description: This is a digitally signed message part
