1 # $NetBSD: rubyversion.mk,v 1.47 2009/06/14 22:58:03 joerg Exp $
4 .if !defined(_RUBYVERSION_MK)
5 _RUBYVERSION_MK= # defined
7 .include "../../mk/bsd.prefs.mk"
9 # current supported Ruby's version
13 RUBY18_PATCHLEVEL= 174
15 # RUBY_VERSION_DEFAULT defines default version for Ruby related
16 # packages and user can define in mk.conf. (1.6 or 1.8)
18 RUBY_VERSION_DEFAULT?= 1.8
20 # RUBY_VERSION defines the specific Ruby's version which is supported
21 # by the package. It should be defined by packages whose distfiles
22 # are contained by Ruby's release distribution.
24 # Default value is set to ${RUBY_VERSION_DEFAULT}
26 .if ${RUBY_VERSION_DEFAULT} == "1.8"
27 RUBY_VERSION?= ${RUBY18_VERSION}
28 RUBY_PATCH_LEVEL?= ${RUBY18_PATCHLEVEL}
31 .if !empty(RUBY_PATCH_LEVEL)
32 RUBY_VERSION_SUFFIX= ${RUBY_VERSION}.${RUBY_PATCH_LEVEL}
34 RUBY_VERSION_SUFFIX= ${RUBY_VERSION}
37 # RUBY_VERSION_SUPPORTED defines the list of ${RUBY_VER} which is
38 # supported by the package. It should be defined by the packages
39 # for specific Ruby versions.
41 RUBY_VERSION_SUPPORTED?= 18
43 # RUBY_VERSION_LIST defines the list of ${RUBY_VER} which is known to
48 # RUBY_NOVERSION should be set to "Yes" if the package dosen't depend on
49 # any specific version of ruby command. In this case, package's
50 # name begin with "ruby-".
51 # If RUBY_NOVERSION is "No" (default), the package's name is begin
52 # with ${RUBY_NAME}; "ruby18", "ruby19", and so on.
54 # It also affects to RUBY_DOCDIR, RUBY_EXAMPLESDIR...
58 # _RUBY_VER_MAJOR, _RUBY_VER_MINOR, _RUBY_VER_TEENY and _RUBY_PATCHLEVEL
59 # is defined from version of Ruby. It should not be used in packages'
62 _RUBY_VER= ${RUBY_VERSION:C/(-.*)//}
63 _RUBY_VER_MAJOR= ${_RUBY_VER:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\1/}
64 _RUBY_VER_MINOR= ${_RUBY_VER:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\2/}
65 _RUBY_VER_TEENY= ${_RUBY_VER:C/([0-9]+)\.([0-9]+)\.([0-9]+)/\3/}
66 .if !empty(RUBY_PATCH_LEVEL)
67 _RUBY_PATCHLEVEL= ${RUBY_VERSION:C/(.*-)//}
70 # RUBY_VER defines Ruby base release.
72 RUBY_VER= ${_RUBY_VER_MAJOR}${_RUBY_VER_MINOR}
75 # RUBY_HAS_ARCHLIB This package contains machine dependent binaries.
76 # RUBY_REQD Minimum required Ruby's version
78 .if defined(RUBY_HAS_ARCHLIB) && empty(RUBY_HAS_ARCHLIB:M[nN][oO])
79 .if ${RUBY_VER} == "18"
80 RUBY_REQD?= ${RUBY18_VERSION}
83 .if ${RUBY_VER} == "18"
88 # RUBY_SUFFIX is appended to Ruby's commands; ruby, irb and so on.
90 RUBY_SUFFIX?= ${RUBY_VER}
92 # RUBY_NAME defines executable's name of Ruby itself.
94 RUBY_NAME?= ruby${RUBY_SUFFIX}
96 # RUBY_BASE is base of ruby package's name
98 RUBY_BASE= ruby${RUBY_VER}-base
100 # RUBY_PKGPREFIX is prefix part for ruby based packages.
102 RUBY_PKGPREFIX?= ${RUBY_NAME}
104 # RUBY_VER_DIR is used as part of Ruby's library directories.
106 RUBY_VER_DIR?= ${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}
108 # Simple check for package availability with Ruby's version.
110 .if empty(RUBY_VERSION_SUPPORTED:M${RUBY_VER})
111 PKG_FAIL_REASON+= "This package isn't supported by ${RUBY_NAME}."
114 # RUBY_NOVERSION specifies that package dosen't depends on any
117 .if empty(RUBY_NOVERSION:M[nN][oO])
122 # RUBY related command's full pathname.
124 RUBY?= ${PREFIX}/bin/${RUBY_NAME}
125 RDOC?= ${PREFIX}/bin/rdoc${RUBY_VER}
128 # RUBY_ARCH is used as architecture-dependent directory name.
130 RUBY_ARCH?= ${LOWER_ARCH}-${LOWER_OPSYS}${APPEND_ELF}${LOWER_OPSYS_VERSUFFIX}
133 # Ruby shared library version handling.
135 RUBY_SHLIBMAJOR?= ${_RUBY_VER_MAJOR}
136 RUBY_SHLIBVER?= ${RUBY_VERSION}
138 .if ${OPSYS} == "NetBSD" || ${OPSYS} == "Interix"
139 RUBY_SHLIBMAJOR= ${RUBY_VER}
140 RUBY_SHLIBVER= ${RUBY_VER}.${_RUBY_VER_TEENY}
141 .elif ${OPSYS} == "FreeBSD" || ${OPSYS} == "DragonFly"
142 RUBY_SHLIBMAJOR= # unused
143 RUBY_SHLIBVER= ${RUBY_VER}
144 .elif ${OPSYS} == "OpenBSD"
145 RUBY_SHLIBMAJOR= # unused
146 RUBY_SHLIBVER= ${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}${_RUBY_VER_TEENY}
147 .elif ${OPSYS} == "IRIX"
148 RUBY_SHLIBMAJOR= # unused
149 .elif ${OPSYS} == "Linux"
150 RUBY_SHLIBMAJOR= ${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}
153 .if empty(RUBY_SHLIBMAJOR)
154 RUBY_NOSHLIBMAJOR= "@comment "
161 # RUBY_DLEXT is suffix of extention library.
163 .if ${OPSYS} == "Darwin"
170 # Use pthread library with Ruby
172 .if ${OPSYS} == "NetBSD" && !empty(OS_VERSION:M1.[0-9].*)
173 RUBY_USE_PTHREAD?= no
174 .elif !empty(MACHINE_PLATFORM:MDarwin-9.*-powerpc)
175 # Workaround for Ruby Bug #193
176 # http://redmine.ruby-lang.org/issues/show/193
177 RUBY_USE_PTHREAD?= no
179 RUBY_USE_PTHREAD?= yes
180 PTHREAD_OPTS+= native
181 PTHREAD_AUTO_VARS= yes
185 # Dynamic PLIST directories
187 RUBY_DYNAMIC_DIRS?= # empty
192 RUBY_SRCDIR?= ${_PKGSRC_TOPDIR}/lang/${RUBY_BASE}
197 RUBY_LIB?= lib/ruby/${RUBY_VER_DIR}
198 RUBY_ARCHLIB?= ${RUBY_LIB}/${RUBY_ARCH}
199 RUBY_SITELIB_BASE?= lib/ruby/site_ruby
200 RUBY_SITELIB?= ${RUBY_SITELIB_BASE}/${RUBY_VER_DIR}
201 RUBY_SITEARCHLIB?= ${RUBY_SITELIB}/${RUBY_ARCH}
202 RUBY_VENDORLIB_BASE?= lib/ruby/vendor_ruby
203 RUBY_VENDORLIB?= ${RUBY_VENDORLIB_BASE}/${RUBY_VER_DIR}
204 RUBY_VENDORARCHLIB?= ${RUBY_VENDORLIB}/${RUBY_ARCH}
205 RUBY_DOC?= share/doc/${RUBY_NAME}
206 RUBY_EG?= share/examples/${RUBY_NAME}
209 # These will be discontinued in near future.
211 RUBY_LIBDIR= ${PREFIX}/${RUBY_LIB}
212 RUBY_ARCHLIBDIR= ${PREFIX}/${RUBY_ARCHLIB}
213 RUBY_SITELIBDIR= ${PREFIX}/${RUBY_SITELIB}
214 RUBY_SITEARCHLIBDIR= ${PREFIX}/${RUBY_SITEARCHLIB}
215 RUBY_VENDORLIBDIR= ${PREFIX}/${RUBY_VENDORLIB}
216 RUBY_VENDORARCHLIBDIR= ${PREFIX}/${RUBY_VENDORARCHLIB}
217 RUBY_DOCDIR= ${PREFIX}/${RUBY_DOC}
218 RUBY_EXAMPLESDIR= ${PREFIX}/${RUBY_EG}
221 # ri database relative path
223 RUBY_RIDIR?= share/ri
224 RUBY_BASERIDIR?= ${RUBY_RIDIR}/${RUBY_VER_DIR}
225 RUBY_SYSRIDIR?= ${RUBY_BASERIDIR}/system
226 RUBY_SITERIDIR?= ${RUBY_BASERIDIR}/site
231 MAKE_ENV+= RUBY=${RUBY:Q} RUBY_VER=${RUBY_VER:Q} \
232 RUBY_VERSION=${RUBY_VERSION:Q} \
233 RUBY_VERSION_DEFAULT=${RUBY_VERSION_DEFAULT:Q}
235 MAKEFLAGS+= RUBY_VERSION=${RUBY_VERSION:Q} \
236 RUBY_VERSION_DEFAULT=${RUBY_VERSION_DEFAULT:Q}
240 PLIST_RUBY_DIRS= RUBY_LIB="${RUBY_LIB}" \
241 RUBY_ARCHLIB="${RUBY_ARCHLIB}" \
242 RUBY_SITELIB_BASE=${RUBY_SITELIB_BASE:Q} \
243 RUBY_SITELIB="${RUBY_SITELIB}" \
244 RUBY_SITEARCHLIB="${RUBY_SITEARCHLIB}" \
245 RUBY_VENDORLIB_BASE=${RUBY_VENDORLIB_BASE:Q} \
246 RUBY_VENDORLIB=${RUBY_VENDORLIB:Q} \
247 RUBY_VENDORARCHLIB=${RUBY_VENDORARCHLIB:Q} \
248 RUBY_DOC="${RUBY_DOC}" \
249 RUBY_EG="${RUBY_EG}" \
250 RUBY_LIBDIR="${RUBY_LIBDIR}" \
251 RUBY_ARCHLIBDIR="${RUBY_ARCHLIBDIR}" \
252 RUBY_SITELIBDIR="${RUBY_SITELIBDIR}" \
253 RUBY_SITEARCHLIBDIR="${RUBY_SITEARCHLIBDIR}" \
254 RUBY_DOCDIR="${RUBY_DOCDIR}" \
255 RUBY_EXAMPLESDIR="${RUBY_EXAMPLESDIR}" \
256 RUBY_RIDIR="${RUBY_RIDIR}" \
257 RUBY_BASERIDIR="${RUBY_BASERIDIR}" \
258 RUBY_SYSRIDIR="${RUBY_SYSRIDIR}" \
259 RUBY_SITERIDIR="${RUBY_SITERIDIR}"
264 FILES_SUBST+= RUBY=${RUBY:Q} RUBY_NAME=${RUBY_NAME:Q} \
265 RUBY_PKGPREFIX=${RUBY_PKGPREFIX:Q} \
266 RUBY_VER=${RUBY_VER:Q} \
269 MESSAGE_SUBST+= RUBY="${RUBY}" RUBY_VER="${RUBY_VER}" \
270 RUBY_VERSION="${RUBY_VERSION}" \
271 RUBY_PKGPREFIX="${RUBY_PKGPREFIX}" \
272 ${PLIST_RUBY_DIRS:S,DIR="${PREFIX}/,DIR=",}
274 PLIST_SUBST+= RUBY=${RUBY:Q} RUBY_VER=${RUBY_VER:Q} \
275 RUBY_VERSION=${RUBY_VERSION:Q} \
276 RUBY_VER_DIR=${RUBY_VER_DIR:Q} \
277 RUBY_DLEXT=${RUBY_DLEXT:Q} \
278 RUBY_ARCH=${RUBY_ARCH:Q} \
279 ${PLIST_RUBY_DIRS:S,DIR="${PREFIX}/,DIR=",}
284 .if !empty(RUBY_DYNAMIC_DIRS)
286 RUBY_PLIST_DYNAMIC= ${WRKDIR}/PLIST.work
288 .if !defined(PLIST_SRC)
289 . if exists(${PKGDIR}/PLIST.common)
290 PLIST_SRC+= ${PKGDIR}/PLIST.common
291 . elif exists(${PKGDIR}/PLIST)
292 PLIST_SRC+= ${PKGDIR}/PLIST
295 PLIST_SRC+= ${RUBY_PLIST_DYNAMIC}
297 . if exists(${PKGDIR}/PLIST.common_end)
298 PLIST_SRC+= ${PKGDIR}/PLIST.common_end
303 RUBY_PLIST_COMMENT_CMD= \
304 ${ECHO} "@comment The following lines are automatically generated"
305 RUBY_PLIST_FILES_CMD= ( cd ${DESTDIR}${PREFIX}; \
306 ${FIND} ${RUBY_DYNAMIC_DIRS} \( -type f -o -type l \) -print ) | \
308 RUBY_GENERATE_PLIST = ( \
309 ${RUBY_PLIST_COMMENT_CMD}; \
310 ${RUBY_PLIST_FILES_CMD} ) > ${RUBY_PLIST_DYNAMIC}
313 .if !empty(RUBY_NOVERSION:M[nN][oO])
314 .if empty(RUBY_USE_PTHREAD:M[nN][oO])
315 .include "../../mk/pthread.buildlink3.mk"
317 .include "../../mk/bdb.buildlink3.mk"
318 .include "../../converters/libiconv/buildlink3.mk"
319 .include "../../devel/zlib/buildlink3.mk"
320 .include "../../security/openssl/buildlink3.mk"
321 .include "../../mk/dlopen.buildlink3.mk"
324 PRINT_PLIST_AWK+= /\.${RUBY_DLEXT}$$/ \
325 { gsub(/${RUBY_DLEXT}$$/, "$${RUBY_DLEXT}") }
326 PRINT_PLIST_AWK+= /^${RUBY_ARCHLIB:S|/|\\/|g}/ \
327 { gsub(/${RUBY_ARCHLIB:S|/|\\/|g}/, "$${RUBY_ARCHLIB}"); \
329 PRINT_PLIST_AWK+= /^${RUBY_VENDORARCHLIB:S|/|\\/|g}/ \
330 { gsub(/${RUBY_VENDORARCHLIB:S|/|\\/|g}/, "$${RUBY_VENDORARCHLIB}"); \
332 PRINT_PLIST_AWK+= /^${RUBY_VENDORLIB:S|/|\\/|g}/ \
333 { gsub(/${RUBY_VENDORLIB:S|/|\\/|g}/, "$${RUBY_VENDORLIB}"); \
335 PRINT_PLIST_AWK+= /^${RUBY_SITEARCHLIB:S|/|\\/|g}/ \
336 { gsub(/${RUBY_SITEARCHLIB:S|/|\\/|g}/, "$${RUBY_SITEARCHLIB}"); \
338 PRINT_PLIST_AWK+= /^${RUBY_SITELIB:S|/|\\/|g}/ \
339 { gsub(/${RUBY_SITELIB:S|/|\\/|g}/, "$${RUBY_SITELIB}"); \
341 PRINT_PLIST_AWK+= /^${RUBY_SITELIB_BASE:S|/|\\/|g}$$/ \
342 { gsub(/${RUBY_SITELIB_BASE:S|/|\\/|g}/, "$${RUBY_SITELIB_BASE}"); \
344 PRINT_PLIST_AWK+= /^${RUBY_VENDORLIB_BASE:S|/|\\/|g}$$/ \
345 { gsub(/${RUBY_VENDORLIB_BASE:S|/|\\/|g}/, "$${RUBY_VENDORLIB_BASE}"); \
347 PRINT_PLIST_AWK+= /^${RUBY_LIB:S|/|\\/|g}/ \
348 { gsub(/${RUBY_LIB:S|/|\\/|g}/, "$${RUBY_LIB}"); \
350 PRINT_PLIST_AWK+= /^${RUBY_DOC:S|/|\\/|g}/ \
351 { gsub(/${RUBY_DOC:S|/|\\/|g}/, "$${RUBY_DOC}"); \
353 PRINT_PLIST_AWK+= /^${RUBY_EG:S|/|\\/|g}/ \
354 { gsub(/${RUBY_EG:S|/|\\/|g}/, "$${RUBY_EG}"); \
356 PRINT_PLIST_AWK+= /^${RUBY_SITERIDIR:S|/|\\/|g}/ \
357 { gsub(/${RUBY_SITERIDIR:S|/|\\/|g}/, "$${RUBY_SITERIDIR}"); \
359 PRINT_PLIST_AWK+= /^${RUBY_SYSRIDIR:S|/|\\/|g}/ \
360 { gsub(/${RUBY_SYSRIDIR:S|/|\\/|g}/, "$${RUBY_SYSRIDIR}"); \