On 2013/03/05 15:15, Jeremy Evans wrote:
> This updates ruby.port.mk so that it builds packages for ruby 2.0
> using the ruby20 FLAVOR, and works after the upgrade of jruby to
> 1.7.
>
> Tested on amd64 and i386. Looking for OKs to commit this when
> ruby 2.0 and jruby 1.7 are committed.
The conditionals to check for mismatching flavours are getting a bit
unwieldy, what do you think about doing this? or is it too much magic?
(other minor change compared to your diff is that I lined up whitespace
in the block of lines like ".if ${MODRUBY_REV} == ... / MODYRUBY_LIBREV
/ MODRUBY_BINREV").
Index: ruby.port.mk
===================================================================
RCS file: /cvs/ports/lang/ruby/ruby.port.mk,v
retrieving revision 1.56
diff -u -p -r1.56 ruby.port.mk
--- ruby.port.mk 4 Mar 2013 18:39:06 -0000 1.56
+++ ruby.port.mk 7 Mar 2013 10:01:21 -0000
@@ -24,7 +24,7 @@ MODRUBY_HANDLE_FLAVORS ?= No
# If ruby.pork.mk should handle FLAVORs, define a separate FLAVOR
# for each ruby interpreter
. if !defined(FLAVORS)
-FLAVORS?= ruby18 ruby19 rbx jruby
+FLAVORS?= ruby18 ruby19 ruby20 rbx jruby
. endif
# Instead of adding flavors to the end of the package name, we use
@@ -47,40 +47,30 @@ SUBST_VARS+= GEM_BIN_SUFFIX GEM_MAN_SUF
FLAVOR?=
# Without a FLAVOR, assume the use of ruby 1.9.
-. if empty(FLAVOR)
+. if empty(FLAVOR)
FLAVOR = ruby19
-. endif
+. endif
# Check for conflicting FLAVORs and set MODRUBY_REV appropriately based
# on the FLAVOR.
-. if ${FLAVOR:Mruby18}
-. if ${FLAVOR:Mruby19} || ${FLAVOR:Mjruby} || ${FLAVOR:Mrbx}
-ERRORS+= "Fatal: Conflicting flavors used: ${FLAVOR}"
+. for i in ruby18 ruby19 ruby20 jruby rbx
+. if ${FLAVOR:M$i}
+MODRUBY_REV = ${i:C/ruby([0-9])/\1./}
+. if ${FLAVOR:N$i:Mruby18} || ${FLAVOR:N$i:Mruby19} || \
+ ${FLAVOR:N$i:Mruby20} || ${FLAVOR:N$i:Mjruby} || \
+ ${FLAVOR:N$i:Mrbx}
+ERRORS += "Fatal: Conflicting flavors used: ${FLAVOR}"
+. endif
. endif
-MODRUBY_REV= 1.8
+. endfor
+
+
+. if ${FLAVOR:Mruby18}
# Handle updates from older ruby 1.8 ports that didn't use the ruby18
# FLAVOR by adding a @pkgpath entry to the PLIST.
SUBST_VARS+= PKGPATH
PKG_ARGS+= -f ${PORTSDIR}/lang/ruby/ruby18.PLIST
-
-. elif ${FLAVOR:Mruby19}
-. if ${FLAVOR:Mruby18} || ${FLAVOR:Mjruby} || ${FLAVOR:Mrbx}
-ERRORS+= "Fatal: Conflicting flavors used: ${FLAVOR}"
-. endif
-MODRUBY_REV= 1.9
-
-. elif ${FLAVOR:Mjruby}
-. if ${FLAVOR:Mruby18} || ${FLAVOR:Mruby19} || ${FLAVOR:Mrbx}
-ERRORS+= "Fatal: Conflicting flavors used: ${FLAVOR}"
-. endif
-MODRUBY_REV= jruby
-
-. elif ${FLAVOR:Mrbx}
-. if ${FLAVOR:Mruby18} || ${FLAVOR:Mruby19} || ${FLAVOR:Mjruby}
-ERRORS+= "Fatal: Conflicting flavors used: ${FLAVOR}"
-. endif
-MODRUBY_REV= rbx
. endif
. endif
.endif
@@ -106,20 +96,25 @@ MODRUBY_PKG_PREFIX = ${MODRUBY_FLAVOR}
GEM_BIN_SUFFIX =
.if ${MODRUBY_REV} == 1.8
-MODRUBY_LIBREV= 1.8
-MODRUBY_BINREV= 18
-MODRUBY_PKG_PREFIX= ruby
+MODRUBY_LIBREV = 1.8
+MODRUBY_BINREV = 18
+MODRUBY_PKG_PREFIX = ruby
MODRUBY_FLAVOR = ruby18
-GEM_MAN_SUFFIX =
+GEM_MAN_SUFFIX =
.elif ${MODRUBY_REV} == 1.9
-MODRUBY_LIBREV= 1.9.1
-MODRUBY_BINREV= 19
+MODRUBY_LIBREV = 1.9.1
+MODRUBY_BINREV = 19
MODRUBY_FLAVOR = ruby19
-GEM_BIN_SUFFIX= 19
-# Have the ruby 1.9 manpage match the binary name.
+GEM_BIN_SUFFIX = 19
+GEM_MAN_SUFFIX = ${GEM_BIN_SUFFIX}
+.elif ${MODRUBY_REV} == 2.0
+MODRUBY_LIBREV = 2.0
+MODRUBY_BINREV = 20
+MODRUBY_FLAVOR = ruby20
+GEM_BIN_SUFFIX = 20
GEM_MAN_SUFFIX = ${GEM_BIN_SUFFIX}
.elif ${MODRUBY_REV} == jruby
-MODRUBY_LIBREV= 1.8
+MODRUBY_LIBREV = 1.8
# Set these during development of ruby.port.mk to make sure
# nothing is broken. However, turn them off before committing,
@@ -149,9 +144,6 @@ RAKE= ${RUBY} -S rake
RSPEC= ${RUBY} -S spec
MODRUBY_BIN_RSPEC = ${RUBY} -S rspec
MODRUBY_BIN_TESTRB = ${RUBY} -S testrb
-
-# Without this, JRuby often fails with a memory error.
-MAKE_ENV+= JAVA_MEM='-Xms256m -Xmx256m'
.elif ${MODRUBY_REV} == rbx
RUBY= ${LOCALBASE}/bin/rbx
RAKE= ${RUBY} -S rake
@@ -346,7 +338,7 @@ SUBST_VARS+= ^GEM_LIB ^GEM_BIN DISTNAME
. if ${MODRUBY_REV} == jruby
GEM= ${RUBY} -S gem
GEM_BIN = jruby/bin
-GEM_LIB = jruby/lib/ruby/gems/${MODRUBY_LIBREV}
+GEM_LIB = jruby/lib/ruby/gems/1.8
GEM_BASE_LIB= ${GEM_BASE}/jruby/${MODRUBY_LIBREV}
. elif ${MODRUBY_REV} == rbx
GEM= ${RUBY} -S gem
@@ -362,6 +354,7 @@ GEM_BASE_LIB= ${GEM_BASE}/ruby/${MODRUBY
GEM_BASE= ${WRKDIR}/gem-tmp/.gem
GEM_ABS_PATH= ${PREFIX}/${GEM_LIB}
GEM_BASE_BIN= ${GEM_BASE_LIB}/bin
+
# We purposely do not install documentation for ruby gems, because
# the filenames are generated differently on different ruby versions,
# and most use 1 file per method, which is insane.
@@ -394,7 +387,7 @@ MODRUBY_BUILD_TARGET = \
pax -wz -s '/^\.\///' -f ${_GEM_DATAFILE}; \
cd ${_GEM_CONTENT} && tar -cf ${WRKDIR}/${_GEM_PATCHED} *.gz; \
mkdir -p ${GEM_BASE}; \
- env -i ${MAKE_ENV} HOME=${GEM_BASE}/.. GEM_HOME=${GEM_BASE} \
+ env -i ${MAKE_ENV} HOME=`dirname ${GEM_BASE}` GEM_HOME=${GEM_BASE} \
make="make V=1" \
${GEM} install ${GEM_FLAGS} ${WRKDIR}/${_GEM_PATCHED} \
-- ${CONFIGURE_ARGS}
@@ -477,9 +470,7 @@ MODRUBY_REGRESS_TARGET ?= test
. endif
MODRUBY_REGRESS_ENV ?=
-. if ${MODRUBY_REV} == 1.9
MODRUBY_REGRESS_ENV += RUBYLIB=.:"$$RUBYLIB"
-. endif
MODRUBY_REGRESS_DIR ?= ${WRKSRC}
do-regress:
cd ${MODRUBY_REGRESS_DIR} && ${SETENV} ${MAKE_ENV} HOME=${WRKBUILD} \