1 # $NetBSD: rubyversion.mk,v 1.81 2012/07/06 09:48:26 obache Exp $
4 # This file determines which Ruby version is used as a dependency for
8 # === User-settable variables ===
10 # RUBY_VERSION_DEFAULT
11 # The preferered Ruby version to use.
13 # Possible values: 18 192 193
17 # Build rdoc of this package and so that install formated
18 # documentation. It is also used in each package.
20 # Possible values: Yes No
24 # Build ri format of this package so that ri command would be
25 # display class/module definitions. It is also used in each package.
27 # Possible values: Yes No
31 # === Package-settable variables ===
33 # RUBY_VERSION_SUPPORTED
34 # The Ruby versions that are acceptable for the package.
36 # Possible values: 18 192 193
37 # Compatible values: 19 (= 192)
41 # The Ruby versions force to build (for pbulk).
44 # If "Yes", the package dosen't depend on any version of Ruby, such
45 # as editing mode for emacs. In this case, package's name would begin
46 # with "ruby-". Otherwise, the package's name is begin with
47 # ${RUBY_PKGPREFIX}; "ruby18", "ruby19" and "ruby193".
49 # Possible values: Yes No
53 # Build dynamic PLIST from directories.
59 # Optional encoding argument for shbang line.
63 # === Defined variables ===
66 # Really selected version of ruby. For compatibility, RUBY_VER
67 # would not set to 192 but 19.
69 # Possible values: 18 19 193
71 # Use this variable in pkgsrc's Makefile
74 # Prefix part for ruby based packages. It is recommended that to
75 # use RUBY_PKGPREFIX with ruby related packages since you can supply
76 # different binary packages as each version of Ruby.
82 # Suffix of extention library.
85 # Suffix of shared library.
88 # Full path of ruby command.
91 # Full path of rdoc command.
94 # Name of ruby command.
97 # Name of gem command.
100 # Name of rake command.
103 # Extra string for each ruby commands; ruby, irb and so on.
106 # Version of real Ruby's version excluding patchlevel.
109 # Version of Ruby including patchlevel.
112 # Name of ruby base package's name.
115 # Directory of base ruby package.
118 # Suffix of libruby shared library's version.
121 # String after libruby shared library.
124 # Symblic link with libruby shared library with major version only.
127 # Name of libruby static library.
130 # Name of version directory under each library (and more) directories.
133 # Name of architecture-dependent directory name.
136 # machine independent include directory of ruby.
139 # machine dependent include directory of ruby.
142 # common relative path of ruby's library.
145 # version specific relative path of ruby's library.
148 # version specific and machine dependent relative path of ruby's library.
151 # common site local directory.
154 # version specific site local directory.
157 # version specific and machine dependent site local directory.
159 # RUBY_VENDORLIB_BASE
160 # common vendor (pkgsrc) directory.
163 # version specific vendor local directory.
166 # version specific and machine dependent vendor local directory.
169 # version specific document direcotry.
172 # version specific examples direcotry.
175 # common GEM directory.
178 # version specific GEM directory.
181 # common ri directory.
184 # version specific ri directory.
187 # version specific system ri directory.
190 # version specific site ri directory.
195 .if !defined(_RUBYVERSION_MK)
196 _RUBYVERSION_MK= # defined
198 .include "../../mk/bsd.prefs.mk"
200 # current supported Ruby's version
201 RUBY18_VERSION= 1.8.7
202 RUBY19_VERSION= 1.9.2
203 RUBY193_VERSION= 1.9.3
206 RUBY18_PATCHLEVEL= pl370
207 RUBY19_PATCHLEVEL= pl320
208 RUBY193_PATCHLEVEL= p194
210 # current API compatible version; used for version of shared library
211 RUBY18_API_VERSION= 1.8.7
212 RUBY19_API_VERSION= 1.9.1
213 RUBY193_API_VERSION= 1.9.1
216 RUBY_VERSION_DEFAULT?= 193
218 RUBY_VERSION_SUPPORTED?= 18 192 193
219 RUBY_VER?= ${RUBY_VERSION_DEFAULT}
222 # If package support only one version, use it.
223 .if ${RUBY_VERSION_SUPPORTED:[\#]} == 1
224 RUBY_VER= ${RUBY_VERSION_SUPPORTED}
225 RUBY_VERSION_DEFAULT= ${RUBY_VERSION_SUPPORTED}
228 .if defined(RUBY_VERSION_REQD)
229 . for rv in ${RUBY_VERSION_SUPPORTED}
230 . if ${rv} == ${RUBY_VERSION_REQD}
236 RUBY_VER:= ${RUBY_VER_MAP.${RUBY_VER}:U${RUBY_VER}}
238 .if ${RUBY_VER} == "18"
239 RUBY_VERSION= ${RUBY18_VERSION}
240 RUBY_VERSION_FULL= ${RUBY_VERSION}${RUBY_PATCHLEVEL:S/pl/./}
241 RUBY_ABI_VERSION= ${RUBY18_API_VERSION}
242 .elif ${RUBY_VER} == "19"
243 RUBY_VERSION= ${RUBY19_VERSION}
244 RUBY_VERSION_FULL= ${RUBY_VERSION}${RUBY_PATCHLEVEL}
245 RUBY_ABI_VERSION= ${RUBY19_API_VERSION}
246 .elif ${RUBY_VER} == "193"
247 RUBY_VERSION= ${RUBY193_VERSION}
248 RUBY_VERSION_FULL= ${RUBY_VERSION}${RUBY_PATCHLEVEL}
249 RUBY_ABI_VERSION= ${RUBY_VERSION}
251 PKG_FAIL_REASON+= "Unknown Ruby version specified: ${RUBY_VER}."
254 RUBY_PATCHLEVEL= ${RUBY${RUBY_VER}_PATCHLEVEL}
255 RUBY_API_VERSION= ${RUBY${RUBY_VER}_API_VERSION}
257 # Variable assignment for multi-ruby packages
258 MULTI+= RUBY_VER=${RUBY_VERS:U${RUBY_VERSION_DEFAULT}}
260 # RUBY_NOVERSION should be set to "Yes" if the package dosen't depend on
261 # any specific version of ruby command. In this case, package's
262 # name begin with "ruby-".
263 # If RUBY_NOVERSION is "No" (default), the package's name is begin
264 # with ${RUBY_NAME}; "ruby18", "ruby19", and so on.
266 # It also affects to RUBY_DOC, RUBY_EG...
270 # _RUBY_VER_MAJOR, _RUBY_VER_MINOR, _RUBY_VER_TEENY and _RUBY_PATCHLEVEL
271 # is defined from version of Ruby. It should not be used in packages'
274 _RUBY_VER_MAJOR= ${RUBY_VERSION:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\1/}
275 _RUBY_VER_MINOR= ${RUBY_VERSION:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\2/}
276 _RUBY_VER_TEENY= ${RUBY_VERSION:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\3/}
278 _RUBY_API_MAJOR= ${RUBY_API_VERSION:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\1\2/}
279 _RUBY_API_MINOR= ${RUBY_API_VERSION:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\3/}
281 RUBY_SUFFIX= ${RUBY_VER}
283 RUBY_NAME= ruby${RUBY_SUFFIX}
284 RUBYGEM_NAME= gem${RUBY_SUFFIX}
285 RAKE_NAME= rake${RUBY_SUFFIX}
289 RUBY_BASE= ruby${RUBY_VER}-base
291 RUBY_PKGPREFIX?= ${RUBY_NAME}
293 .if ${RUBY_VER} == "18" || ${RUBY_VER} == "19"
294 RUBY_VER_DIR= ${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}
296 RUBY_VER_DIR= ${RUBY_VERSION}
299 .if empty(RUBY_NOVERSION:M[nN][oO])
304 RUBY_BUILD_RDOC?= Yes
307 RUBY?= ${PREFIX}/bin/${RUBY_NAME}
308 RDOC?= ${PREFIX}/bin/rdoc${RUBY_VER}
310 RUBY_ARCH?= ${LOWER_ARCH}-${LOWER_OPSYS}${APPEND_ELF}${LOWER_OPSYS_VERSUFFIX}
313 # Ruby shared and static library version handling.
315 RUBY_SHLIBVER?= ${RUBY_API_VERSION}
316 RUBY_SHLIB?= ${RUBY_VER}.${RUBY_SLEXT}.${RUBY_SHLIBVER}
317 RUBY_SHLIBALIAS?= @comment
318 RUBY_STATICLIB?= ${RUBY_VER}-static.a
320 .if ${OPSYS} == "NetBSD" || ${OPSYS} == "Interix"
321 RUBY_SHLIBVER= ${_RUBY_API_MAJOR}.${_RUBY_API_MINOR}
322 _RUBY_SHLIBALIAS= ${RUBY_VER}.${RUBY_SLEXT}.${_RUBY_API_MAJOR}
323 .elif ${OPSYS} == "FreeBSD" || ${OPSYS} == "DragonFly"
324 .if ${RUBY_VER} == "18" || ${RUBY_VER} == "19"
325 RUBY_SHLIBVER= ${RUBY_VER}
327 RUBY_SHLIBVER= ${_RUBY_VER_MAJOR}${_RUBY_VER_MINOR}${_RUBY_API_MINOR}
329 .elif ${OPSYS} == "OpenBSD"
330 RUBY_SHLIBVER= ${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}${_RUBY_API_MINOR}
331 .elif ${OPSYS} == "Darwin"
332 RUBY_SHLIB= ${RUBY_VER}.${RUBY_SHLIBVER}.${RUBY_SLEXT}
333 .if ${RUBY_VER} == "18"
334 _RUBY_SHLIBALIAS= ${RUBY_VER}.${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}.${RUBY_SLEXT}
336 _RUBY_SHLIBALIAS= .${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}.${RUBY_SLEXT}
337 RUBY_STATICLIB= ${RUBY_VER}.${RUBY_API_VERSION}-static.a
339 .elif ${OPSYS} == "Linux"
340 _RUBY_SHLIBALIAS= ${RUBY_VER}.${RUBY_SLEXT}.${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}
341 .elif ${OPSYS} == "SunOS"
342 RUBY_SHLIBVER= ${_RUBY_VER_MAJOR}
343 _RUBY_SHLIBALIAS= ${RUBY_VER}.${RUBY_SLEXT}.${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}.${_RUBY_API_MINOR}
346 .if !empty(_RUBY_SHLIBALIAS)
347 RUBY_SHLIBALIAS= lib/libruby${_RUBY_SHLIBALIAS}
350 .if ${_OPSYS_SHLIB_TYPE} == "dylib"
359 # Ruby distribution file, few package need it.
361 _RUBY_PATCHLEVEL= ${RUBY_PATCHLEVEL:S/pl/p/:S/pre/preview/}
363 .if !empty(_RUBY_PATCHLEVEL)
364 RUBY_DISTNAME?= ruby-${RUBY_VERSION}-${_RUBY_PATCHLEVEL}
366 RUBY_DISTNAME?= ruby-${RUBY_VERSION}
370 # Use pthread library with Ruby
372 .if !empty(MACHINE_PLATFORM:MDarwin-9.*-powerpc)
373 # Workaround for Ruby Bug #193
374 # http://redmine.ruby-lang.org/issues/show/193
375 RUBY_USE_PTHREAD?= no
377 RUBY_USE_PTHREAD?= yes
380 RUBY_DYNAMIC_DIRS?= # empty
382 RUBY_SRCDIR?= ${_PKGSRC_TOPDIR}/lang/${RUBY_BASE}
387 RUBY_INC= include/ruby-${RUBY_VER_DIR}
388 RUBY_ARCHINC= ${RUBY_INC}/${RUBY_ARCH}
389 RUBY_LIB_BASE= lib/ruby
390 RUBY_LIB?= ${RUBY_LIB_BASE}/${RUBY_VER_DIR}
391 RUBY_ARCHLIB?= ${RUBY_LIB}/${RUBY_ARCH}
392 RUBY_SITELIB_BASE?= ${RUBY_LIB_BASE}/site_ruby
393 RUBY_SITELIB?= ${RUBY_SITELIB_BASE}/${RUBY_VER_DIR}
394 RUBY_SITEARCHLIB?= ${RUBY_SITELIB}/${RUBY_ARCH}
395 RUBY_VENDORLIB_BASE?= ${RUBY_LIB_BASE}/vendor_ruby
396 RUBY_VENDORLIB?= ${RUBY_VENDORLIB_BASE}/${RUBY_VER_DIR}
397 RUBY_VENDORARCHLIB?= ${RUBY_VENDORLIB}/${RUBY_ARCH}
399 RUBY_DOC?= share/doc/${RUBY_NAME}
400 RUBY_EG?= share/examples/${RUBY_NAME}
403 RUBY_GEM_BASE?= ${RUBY_LIB_BASE}/gems
404 GEM_HOME?= ${RUBY_GEM_BASE}/${RUBY_VER_DIR}
407 # ri database relative path
409 RUBY_RIDIR?= share/ri
410 RUBY_BASERIDIR?= ${RUBY_RIDIR}/${RUBY_VER_DIR}
411 RUBY_SYSRIDIR?= ${RUBY_BASERIDIR}/system
412 RUBY_SITERIDIR?= ${RUBY_BASERIDIR}/site
417 MAKE_ENV+= RUBY=${RUBY:Q} RUBY_VER=${RUBY_VER:Q} \
418 RUBY_VERSION_DEFAULT=${RUBY_VERSION_DEFAULT:Q}
420 MAKEFLAGS+= RUBY_VERSION_DEFAULT=${RUBY_VERSION_DEFAULT:Q}
425 PLIST_VARS+= ruby18 ruby19 ruby192 ruby193
426 .if ${RUBY_VER} == "18"
428 .elif ${RUBY_VER} == "19"
431 .elif ${RUBY_VER} == "193"
436 PLIST_RUBY_DIRS= RUBY_INC=${RUBY_INC:Q} RUBY_ARCHINC=${RUBY_ARCHINC:Q} \
437 RUBY_LIB_BASE=${RUBY_LIB_BASE:Q} \
438 RUBY_LIB=${RUBY_LIB:Q} \
439 RUBY_ARCHLIB=${RUBY_ARCHLIB:Q} \
440 RUBY_SITELIB_BASE=${RUBY_SITELIB_BASE:Q} \
441 RUBY_SITELIB=${RUBY_SITELIB:Q} \
442 RUBY_SITEARCHLIB=${RUBY_SITEARCHLIB:Q} \
443 RUBY_VENDORLIB_BASE=${RUBY_VENDORLIB_BASE:Q} \
444 RUBY_VENDORLIB=${RUBY_VENDORLIB:Q} \
445 RUBY_VENDORARCHLIB=${RUBY_VENDORARCHLIB:Q} \
446 RUBY_DOC=${RUBY_DOC:Q} \
447 RUBY_EG=${RUBY_EG:Q} \
448 RUBY_GEM_BASE=${RUBY_GEM_BASE:Q} \
449 GEM_HOME=${GEM_HOME:Q} \
450 RUBY_RIDIR=${RUBY_RIDIR:Q} \
451 RUBY_BASERIDIR=${RUBY_BASERIDIR:Q} \
452 RUBY_SYSRIDIR=${RUBY_SYSRIDIR:Q} \
453 RUBY_SITERIDIR=${RUBY_SITERIDIR:Q}
458 FILES_SUBST+= RUBY=${RUBY:Q} RUBY_NAME=${RUBY_NAME:Q} \
459 RUBY_PKGPREFIX=${RUBY_PKGPREFIX:Q} \
460 RUBY_VER=${RUBY_VER:Q} \
463 MESSAGE_SUBST+= RUBY="${RUBY}" RUBY_VER="${RUBY_VER}" \
464 RUBY_VERSION="${RUBY_VERSION}" \
465 RUBY_PKGPREFIX="${RUBY_PKGPREFIX}" \
466 ${PLIST_RUBY_DIRS:S,DIR="${PREFIX}/,DIR=",}
468 PLIST_SUBST+= RUBY=${RUBY:Q} RUBY_VER=${RUBY_VER:Q} \
469 RUBY_PKGPREFIX=${RUBY_PKGPREFIX} \
470 RUBY_VERSION=${RUBY_VERSION:Q} \
471 RUBY_VER_DIR=${RUBY_VER_DIR:Q} \
472 RUBY_DLEXT=${RUBY_DLEXT:Q} RUBY_SLEXT=${RUBY_SLEXT:Q} \
473 RUBY_SHLIB=${RUBY_SHLIB:Q} \
474 RUBY_SHLIBALIAS=${RUBY_SHLIBALIAS:Q} \
475 RUBY_STATICLIB=${RUBY_STATICLIB:Q} \
476 RUBY_ARCH=${RUBY_ARCH:Q} \
477 ${PLIST_RUBY_DIRS:S,DIR="${PREFIX}/,DIR=",}
482 .if !empty(RUBY_DYNAMIC_DIRS)
484 RUBY_PLIST_DYNAMIC= ${WRKDIR}/PLIST.work
486 .if !defined(PLIST_SRC)
487 . if exists(${PKGDIR}/PLIST.common)
488 PLIST_SRC+= ${PKGDIR}/PLIST.common
489 . elif exists(${PKGDIR}/PLIST)
490 PLIST_SRC+= ${PKGDIR}/PLIST
493 PLIST_SRC+= ${RUBY_PLIST_DYNAMIC}
495 . if exists(${PKGDIR}/PLIST.common_end)
496 PLIST_SRC+= ${PKGDIR}/PLIST.common_end
501 RUBY_PLIST_COMMENT_CMD= \
502 ${ECHO} "@comment The following lines are automatically generated"
503 RUBY_PLIST_FILES_CMD= ( cd ${DESTDIR}${PREFIX}; \
504 ${FIND} ${RUBY_DYNAMIC_DIRS} \( -type f -o -type l \) -print ) | \
506 RUBY_GENERATE_PLIST = ( \
507 ${RUBY_PLIST_COMMENT_CMD}; \
508 ${RUBY_PLIST_FILES_CMD} ) > ${RUBY_PLIST_DYNAMIC}
511 PRINT_PLIST_AWK+= /lib\/libruby${RUBY_STATICLIB}$$/ \
512 { sub(/${RUBY_STATICLIB}/, "$${RUBY_STATICLIB}"); }
513 PRINT_PLIST_AWK+= /lib\/libruby${RUBY_VER}\.${RUBY_SLEXT}/ \
514 { sub(/${RUBY_VER}\.${RUBY_SLEXT}$$/, \
515 "$${RUBY_VER}.$${RUBY_SLEXT}"); }
516 PRINT_PLIST_AWK+= /${RUBY_SHLIB}$$/ \
517 { sub(/${RUBY_SHLIB}$$/, "$${RUBY_SHLIB}"); }
518 PRINT_PLIST_AWK+= /${RUBY_SLEXT}\.${RUBY_SHLIBVER}$$/ \
519 { sub(/${RUBY_SLEXT}\.${RUBY_SHLIBVER}$$/, \
520 "$${RUBY_SLEXT}.$${RUBY_SHLIBVER}"); }
521 .if ${RUBY_SHLIBALIAS} != "@comment"
522 PRINT_PLIST_AWK+= /${RUBY_SHLIBALIAS:S/\//\\\//}$$/ \
523 { sub(/${RUBY_SHLIBALIAS:S/\//\\\//}$$/, \
524 "$${RUBY_SHLIBALIAS}"); }
526 PRINT_PLIST_AWK+= /^${RUBY_ARCHINC:S|/|\\/|g}/ \
527 { gsub(/${RUBY_ARCHINC:S|/|\\/|g}/, "$${RUBY_ARCHINC}"); \
529 PRINT_PLIST_AWK+= /^${RUBY_INC:S|/|\\/|g}/ \
530 { gsub(/${RUBY_INC:S|/|\\/|g}/, "$${RUBY_INC}"); \
532 PRINT_PLIST_AWK+= /\.${RUBY_DLEXT}$$/ \
533 { gsub(/${RUBY_DLEXT}$$/, "$${RUBY_DLEXT}") }
534 PRINT_PLIST_AWK+= /^${RUBY_ARCHLIB:S|/|\\/|g}/ \
535 { gsub(/${RUBY_ARCHLIB:S|/|\\/|g}/, "$${RUBY_ARCHLIB}"); \
537 PRINT_PLIST_AWK+= /^${RUBY_VENDORARCHLIB:S|/|\\/|g}/ \
538 { gsub(/${RUBY_VENDORARCHLIB:S|/|\\/|g}/, "$${RUBY_VENDORARCHLIB}"); \
540 PRINT_PLIST_AWK+= /^${RUBY_VENDORLIB:S|/|\\/|g}/ \
541 { gsub(/${RUBY_VENDORLIB:S|/|\\/|g}/, "$${RUBY_VENDORLIB}"); \
543 PRINT_PLIST_AWK+= /^${RUBY_SITEARCHLIB:S|/|\\/|g}/ \
544 { gsub(/${RUBY_SITEARCHLIB:S|/|\\/|g}/, "$${RUBY_SITEARCHLIB}"); \
546 PRINT_PLIST_AWK+= /^${RUBY_SITELIB:S|/|\\/|g}/ \
547 { gsub(/${RUBY_SITELIB:S|/|\\/|g}/, "$${RUBY_SITELIB}"); \
549 PRINT_PLIST_AWK+= /^${RUBY_SITELIB_BASE:S|/|\\/|g}/ \
550 { gsub(/${RUBY_SITELIB_BASE:S|/|\\/|g}/, "$${RUBY_SITELIB_BASE}"); \
552 PRINT_PLIST_AWK+= /^${RUBY_VENDORLIB_BASE:S|/|\\/|g}/ \
553 { gsub(/${RUBY_VENDORLIB_BASE:S|/|\\/|g}/, "$${RUBY_VENDORLIB_BASE}"); \
555 PRINT_PLIST_AWK+= /^${RUBY_LIB:S|/|\\/|g}/ \
556 { gsub(/${RUBY_LIB:S|/|\\/|g}/, "$${RUBY_LIB}"); \
558 PRINT_PLIST_AWK+= /^${RUBY_DOC:S|/|\\/|g}/ \
559 { gsub(/${RUBY_DOC:S|/|\\/|g}/, "$${RUBY_DOC}"); \
561 PRINT_PLIST_AWK+= /^${RUBY_EG:S|/|\\/|g}/ \
562 { gsub(/${RUBY_EG:S|/|\\/|g}/, "$${RUBY_EG}"); \
564 PRINT_PLIST_AWK+= /^${RUBY_SITERIDIR:S|/|\\/|g}/ \
565 { gsub(/${RUBY_SITERIDIR:S|/|\\/|g}/, "$${RUBY_SITERIDIR}"); \
567 PRINT_PLIST_AWK+= /^${RUBY_SYSRIDIR:S|/|\\/|g}\// \
569 PRINT_PLIST_AWK+= /\/${RUBY_NAME}/ \
570 { sub(/${RUBY_NAME}/, "$${RUBY_NAME}"); }
571 PRINT_PLIST_AWK+= /^${GEM_HOME:S|/|\\/|g:S|.|\\.|g}/ \
572 { gsub(/${GEM_HOME:S|/|\\/|g}/, "$${GEM_HOME}"); }