1 | # Copyright 1999-2011 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-ng.eclass,v 1.42 2011/10/22 10:08:44 scarabeus Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/ruby-ng.eclass,v 1.50 2012/08/13 22:21:26 flameeyes Exp $ |
4 | |
4 | |
5 | # @ECLASS: ruby-ng.eclass |
5 | # @ECLASS: ruby-ng.eclass |
6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
7 | # Ruby herd <ruby@gentoo.org> |
7 | # Ruby herd <ruby@gentoo.org> |
8 | # @AUTHOR: |
8 | # @AUTHOR: |
… | |
… | |
67 | # is linked against libruby. There are cases were this is not the case |
67 | # is linked against libruby. There are cases were this is not the case |
68 | # and the shared object is generic code to be used in some other way |
68 | # and the shared object is generic code to be used in some other way |
69 | # (e.g. selenium's firefox driver extension). When set this argument is |
69 | # (e.g. selenium's firefox driver extension). When set this argument is |
70 | # passed to "grep -E" to remove reporting of these shared objects. |
70 | # passed to "grep -E" to remove reporting of these shared objects. |
71 | |
71 | |
72 | inherit eutils java-utils-2 toolchain-funcs |
72 | inherit eutils java-utils-2 multilib toolchain-funcs |
73 | |
73 | |
74 | EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install pkg_setup |
74 | EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_test src_install pkg_setup |
75 | |
75 | |
76 | case ${EAPI} in |
76 | case ${EAPI} in |
77 | 0|1) |
77 | 0|1) |
… | |
… | |
280 | for implementation in ${USE_RUBY}; do |
280 | for implementation in ${USE_RUBY}; do |
281 | t+=" ruby_targets_${implementation}" |
281 | t+=" ruby_targets_${implementation}" |
282 | done |
282 | done |
283 | echo $t |
283 | echo $t |
284 | } |
284 | } |
285 | |
|
|
286 | if [[ ${EAPI:-0} -ge 4 && ${RUBY_OPTIONAL} != "yes" ]]; then |
|
|
287 | REQUIRED_USE=" || ( $(ruby_get_use_targets) )" |
|
|
288 | fi |
|
|
289 | |
285 | |
290 | # @FUNCTION: ruby_implementations_depend |
286 | # @FUNCTION: ruby_implementations_depend |
291 | # @RETURN: Dependencies suitable for injection into DEPEND and RDEPEND. |
287 | # @RETURN: Dependencies suitable for injection into DEPEND and RDEPEND. |
292 | # @DESCRIPTION: |
288 | # @DESCRIPTION: |
293 | # Produces the dependency string for the various implementations of ruby |
289 | # Produces the dependency string for the various implementations of ruby |
… | |
… | |
309 | depend="${depend}${depend+ }ruby_targets_${_ruby_implementation}? ( $(ruby_implementation_depend $_ruby_implementation) )" |
305 | depend="${depend}${depend+ }ruby_targets_${_ruby_implementation}? ( $(ruby_implementation_depend $_ruby_implementation) )" |
310 | done |
306 | done |
311 | echo "${depend}" |
307 | echo "${depend}" |
312 | } |
308 | } |
313 | |
309 | |
314 | for _ruby_implementation in ${USE_RUBY}; do |
310 | IUSE+=" $(ruby_get_use_targets)" |
315 | IUSE="${IUSE} ruby_targets_${_ruby_implementation}" |
|
|
316 | done |
|
|
317 | # If you specify RUBY_OPTIONAL you also need to take care of |
311 | # If you specify RUBY_OPTIONAL you also need to take care of |
318 | # ruby useflag and dependency. |
312 | # ruby useflag and dependency. |
319 | if [[ ${RUBY_OPTIONAL} != yes ]]; then |
313 | if [[ ${RUBY_OPTIONAL} != yes ]]; then |
320 | DEPEND="${DEPEND} $(ruby_implementations_depend)" |
314 | DEPEND="${DEPEND} $(ruby_implementations_depend)" |
321 | RDEPEND="${RDEPEND} $(ruby_implementations_depend)" |
315 | RDEPEND="${RDEPEND} $(ruby_implementations_depend)" |
|
|
316 | |
|
|
317 | [[ ${EAPI:-0} -ge 4 ]] && REQUIRED_USE+=" || ( $(ruby_get_use_targets) )" |
322 | fi |
318 | fi |
323 | |
319 | |
324 | _ruby_invoke_environment() { |
320 | _ruby_invoke_environment() { |
325 | old_S=${S} |
321 | old_S=${S} |
326 | case ${EAPI} in |
322 | case ${EAPI} in |
… | |
… | |
386 | fi |
382 | fi |
387 | |
383 | |
388 | unset RUBY |
384 | unset RUBY |
389 | done |
385 | done |
390 | |
386 | |
391 | [[ ${invoked} == "no" ]] && die "You need to select at least one Ruby implementation by setting RUBY_TARGETS in /etc/make.conf." |
387 | if [[ ${invoked} == "no" ]]; then |
|
|
388 | eerror "You need to select at least one compatible Ruby installation target via RUBY_TARGETS in make.conf." |
|
|
389 | eerror "Compatible targets for this package are: ${USE_RUBY}" |
|
|
390 | eerror |
|
|
391 | eerror "See http://www.gentoo.org/proj/en/prog_lang/ruby/index.xml#doc_chap3 for more information." |
|
|
392 | eerror |
|
|
393 | die "No compatible Ruby target selected." |
|
|
394 | fi |
392 | } |
395 | } |
393 | |
396 | |
394 | # @FUNCTION: ruby-ng_pkg_setup |
397 | # @FUNCTION: ruby-ng_pkg_setup |
395 | # @DESCRIPTION: |
398 | # @DESCRIPTION: |
396 | # Check whether at least one ruby target implementation is present. |
399 | # Check whether at least one ruby target implementation is present. |
… | |
… | |
505 | # we have a Mach-O object here |
508 | # we have a Mach-O object here |
506 | [[ ${CHOST} == *-darwin ]] && scancmd=scanmacho |
509 | [[ ${CHOST} == *-darwin ]] && scancmd=scanmacho |
507 | |
510 | |
508 | has "${EAPI}" 2 && ! use prefix && EPREFIX= |
511 | has "${EAPI}" 2 && ! use prefix && EPREFIX= |
509 | |
512 | |
510 | local libruby_basename=$(${RUBY} -rrbconfig -e 'puts Config::CONFIG["LIBRUBY_SO"]') |
513 | local libruby_basename=$(${RUBY} -rrbconfig -e 'puts RbConfig::CONFIG["LIBRUBY_SO"]') |
511 | local libruby_soname=$(basename $(${scancmd} -F "%S#F" -qS "${EPREFIX}/usr/$(get_libdir)/${libruby_basename}") 2>/dev/null) |
514 | local libruby_soname=$(basename $(${scancmd} -F "%S#F" -qS "${EPREFIX}/usr/$(get_libdir)/${libruby_basename}") 2>/dev/null) |
512 | local sitedir=$(${RUBY} -rrbconfig -e 'puts Config::CONFIG["sitedir"]') |
515 | local sitedir=$(${RUBY} -rrbconfig -e 'puts RbConfig::CONFIG["sitedir"]') |
513 | local sitelibdir=$(${RUBY} -rrbconfig -e 'puts Config::CONFIG["sitelibdir"]') |
516 | local sitelibdir=$(${RUBY} -rrbconfig -e 'puts RbConfig::CONFIG["sitelibdir"]') |
514 | |
517 | |
515 | # Look for wrong files in sitedir |
518 | # Look for wrong files in sitedir |
516 | # if [[ -d "${D}${sitedir}" ]]; then |
519 | # if [[ -d "${D}${sitedir}" ]]; then |
517 | # local f=$(find "${D}${sitedir}" -mindepth 1 -maxdepth 1 -not -wholename "${D}${sitelibdir}") |
520 | # local f=$(find "${D}${sitedir}" -mindepth 1 -maxdepth 1 -not -wholename "${D}${sitelibdir}") |
518 | # if [[ -n ${f} ]]; then |
521 | # if [[ -n ${f} ]]; then |
… | |
… | |
558 | |
561 | |
559 | # @FUNCTION: ruby_rbconfig_value |
562 | # @FUNCTION: ruby_rbconfig_value |
560 | # @USAGE: rbconfig item |
563 | # @USAGE: rbconfig item |
561 | # @RETURN: Returns the value of the given rbconfig item of the Ruby interpreter in ${RUBY}. |
564 | # @RETURN: Returns the value of the given rbconfig item of the Ruby interpreter in ${RUBY}. |
562 | ruby_rbconfig_value() { |
565 | ruby_rbconfig_value() { |
563 | echo $(${RUBY} -rrbconfig -e "puts Config::CONFIG['$1']") |
566 | echo $(${RUBY} -rrbconfig -e "puts RbConfig::CONFIG['$1']") |
564 | } |
567 | } |
565 | |
568 | |
566 | # @FUNCTION: doruby |
569 | # @FUNCTION: doruby |
567 | # @USAGE: file [file...] |
570 | # @USAGE: file [file...] |
568 | # @DESCRIPTION: |
571 | # @DESCRIPTION: |
… | |
… | |
579 | } |
582 | } |
580 | |
583 | |
581 | # @FUNCTION: ruby_get_libruby |
584 | # @FUNCTION: ruby_get_libruby |
582 | # @RETURN: The location of libruby*.so belonging to the Ruby interpreter in ${RUBY}. |
585 | # @RETURN: The location of libruby*.so belonging to the Ruby interpreter in ${RUBY}. |
583 | ruby_get_libruby() { |
586 | ruby_get_libruby() { |
584 | ${RUBY} -rrbconfig -e 'puts File.join(Config::CONFIG["libdir"], Config::CONFIG["LIBRUBY"])' |
587 | ${RUBY} -rrbconfig -e 'puts File.join(RbConfig::CONFIG["libdir"], RbConfig::CONFIG["LIBRUBY"])' |
585 | } |
588 | } |
586 | |
589 | |
587 | # @FUNCTION: ruby_get_hdrdir |
590 | # @FUNCTION: ruby_get_hdrdir |
588 | # @RETURN: The location of the header files belonging to the Ruby interpreter in ${RUBY}. |
591 | # @RETURN: The location of the header files belonging to the Ruby interpreter in ${RUBY}. |
589 | ruby_get_hdrdir() { |
592 | ruby_get_hdrdir() { |
… | |
… | |
622 | *) |
625 | *) |
623 | echo "mri" |
626 | echo "mri" |
624 | ;; |
627 | ;; |
625 | esac |
628 | esac |
626 | } |
629 | } |
|
|
630 | |
|
|
631 | # @FUNCTION: ruby-ng_rspec |
|
|
632 | # @DESCRIPTION: |
|
|
633 | # This is simply a wrapper around the rspec command (executed by $RUBY}) |
|
|
634 | # which also respects TEST_VERBOSE and NOCOLOR environment variables. |
|
|
635 | ruby-ng_rspec() { |
|
|
636 | if [[ ${DEPEND} != *"dev-ruby/rspec"* ]]; then |
|
|
637 | ewarn "Missing dev-ruby/rspec in \${DEPEND}" |
|
|
638 | fi |
|
|
639 | |
|
|
640 | local rspec_params= |
|
|
641 | case ${NOCOLOR} in |
|
|
642 | 1|yes|true) |
|
|
643 | rspec_params+=" --no-color" |
|
|
644 | ;; |
|
|
645 | *) |
|
|
646 | rspec_params+=" --color" |
|
|
647 | ;; |
|
|
648 | esac |
|
|
649 | |
|
|
650 | case ${TEST_VERBOSE} in |
|
|
651 | 1|yes|true) |
|
|
652 | rspec_params+=" --format documentation" |
|
|
653 | ;; |
|
|
654 | *) |
|
|
655 | rspec_params+=" --format progress" |
|
|
656 | ;; |
|
|
657 | esac |
|
|
658 | |
|
|
659 | ${RUBY} -S rspec ${rspec_params} "$@" || die "rspec failed" |
|
|
660 | } |
|
|
661 | |
|
|
662 | # @FUNCTION: ruby-ng_cucumber |
|
|
663 | # @DESCRIPTION: |
|
|
664 | # This is simply a wrapper around the cucumber command (executed by $RUBY}) |
|
|
665 | # which also respects TEST_VERBOSE and NOCOLOR environment variables. |
|
|
666 | ruby-ng_cucumber() { |
|
|
667 | if [[ ${DEPEND} != *"dev-util/cucumber"* ]]; then |
|
|
668 | ewarn "Missing dev-util/cucumber in \${DEPEND}" |
|
|
669 | fi |
|
|
670 | |
|
|
671 | local cucumber_params= |
|
|
672 | case ${NOCOLOR} in |
|
|
673 | 1|yes|true) |
|
|
674 | cucumber_params+=" --no-color" |
|
|
675 | ;; |
|
|
676 | *) |
|
|
677 | cucumber_params+=" --color" |
|
|
678 | ;; |
|
|
679 | esac |
|
|
680 | |
|
|
681 | case ${TEST_VERBOSE} in |
|
|
682 | 1|yes|true) |
|
|
683 | cucumber_params+=" --format pretty" |
|
|
684 | ;; |
|
|
685 | *) |
|
|
686 | cucumber_params+=" --format progress" |
|
|
687 | ;; |
|
|
688 | esac |
|
|
689 | |
|
|
690 | if [[ ${RUBY} == *jruby ]]; then |
|
|
691 | ewarn "Skipping cucumber tests on JRuby (unsupported)." |
|
|
692 | return 0 |
|
|
693 | fi |
|
|
694 | |
|
|
695 | ${RUBY} -S cucumber ${cucumber_params} "$@" || die "cucumber failed" |
|
|
696 | } |
|
|
697 | |
|
|
698 | # @FUNCTION: ruby-ng_testrb-2 |
|
|
699 | # @DESCRIPTION: |
|
|
700 | # This is simply a replacement for the testrb command that load the test |
|
|
701 | # files and execute them, with test-unit 2.x. This actually requires |
|
|
702 | # either an old test-unit-2 version or 2.5.1-r1 or later, as they remove |
|
|
703 | # their script and we installed a broken wrapper for a while. |
|
|
704 | # This also respects TEST_VERBOSE and NOCOLOR environment variables. |
|
|
705 | ruby-ng_testrb-2() { |
|
|
706 | if [[ ${DEPEND} != *"dev-ruby/test-unit"* ]]; then |
|
|
707 | ewarn "Missing dev-ruby/test-unit in \${DEPEND}" |
|
|
708 | fi |
|
|
709 | |
|
|
710 | local testrb_params= |
|
|
711 | case ${NOCOLOR} in |
|
|
712 | 1|yes|true) |
|
|
713 | testrb_params+=" --no-use-color" |
|
|
714 | ;; |
|
|
715 | *) |
|
|
716 | testrb_params+=" --use-color=auto" |
|
|
717 | ;; |
|
|
718 | esac |
|
|
719 | |
|
|
720 | case ${TEST_VERBOSE} in |
|
|
721 | 1|yes|true) |
|
|
722 | testrb_params+=" --verbose=verbose" |
|
|
723 | ;; |
|
|
724 | *) |
|
|
725 | testrb_params+=" --verbose=normal" |
|
|
726 | ;; |
|
|
727 | esac |
|
|
728 | |
|
|
729 | ${RUBY} -S testrb-2 ${testrb_params} "$@" || die "testrb-2 failed" |
|
|
730 | } |