Fixup fromcvs/togit conversion
[pkgsrcv2.git] / lang / ruby / rubyversion.mk
1 # $NetBSD: rubyversion.mk,v 1.47 2009/06/14 22:58:03 joerg Exp $
2 #
3
4 .if !defined(_RUBYVERSION_MK)
5 _RUBYVERSION_MK=        # defined
6
7 .include "../../mk/bsd.prefs.mk"
8
9 # current supported Ruby's version
10 RUBY18_VERSION=         1.8.7
11
12 # patch
13 RUBY18_PATCHLEVEL=      174
14
15 # RUBY_VERSION_DEFAULT defines default version for Ruby related
16 #       packages and user can define in mk.conf.  (1.6 or 1.8)
17 #
18 RUBY_VERSION_DEFAULT?=  1.8
19
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.
23 #
24 #       Default value is set to ${RUBY_VERSION_DEFAULT}
25 #
26 .if ${RUBY_VERSION_DEFAULT} == "1.8"
27 RUBY_VERSION?=          ${RUBY18_VERSION}
28 RUBY_PATCH_LEVEL?=      ${RUBY18_PATCHLEVEL}
29 .endif
30
31 .if !empty(RUBY_PATCH_LEVEL)
32 RUBY_VERSION_SUFFIX=    ${RUBY_VERSION}.${RUBY_PATCH_LEVEL}
33 .else
34 RUBY_VERSION_SUFFIX=    ${RUBY_VERSION}
35 .endif
36
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.
40 #
41 RUBY_VERSION_SUPPORTED?= 18
42
43 # RUBY_VERSION_LIST defines the list of ${RUBY_VER} which is known to
44 #       this framework.
45 #
46 RUBY_VERSION_LIST= 18
47
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.
53 #
54 #       It also affects to RUBY_DOCDIR, RUBY_EXAMPLESDIR...
55 #
56 RUBY_NOVERSION?=        No
57
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'
60 # Makefile.
61 #
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/(.*-)//}
68 .endif
69
70 # RUBY_VER defines Ruby base release.
71 #
72 RUBY_VER=               ${_RUBY_VER_MAJOR}${_RUBY_VER_MINOR}
73
74 #
75 # RUBY_HAS_ARCHLIB      This package contains machine dependent binaries.
76 # RUBY_REQD             Minimum required Ruby's version
77 #
78 .if defined(RUBY_HAS_ARCHLIB) && empty(RUBY_HAS_ARCHLIB:M[nN][oO])
79 .if ${RUBY_VER} == "18"
80 RUBY_REQD?=             ${RUBY18_VERSION}
81 .endif
82 .else
83 .if ${RUBY_VER} == "18"
84 RUBY_REQD?=             1.8.1
85 .endif
86 .endif
87
88 # RUBY_SUFFIX is appended to Ruby's commands; ruby, irb and so on.
89 #
90 RUBY_SUFFIX?=           ${RUBY_VER}
91
92 # RUBY_NAME defines executable's name of Ruby itself.
93 #
94 RUBY_NAME?=             ruby${RUBY_SUFFIX}
95
96 # RUBY_BASE is base of ruby package's name
97 #
98 RUBY_BASE=              ruby${RUBY_VER}-base
99
100 # RUBY_PKGPREFIX is prefix part for ruby based packages.
101 #
102 RUBY_PKGPREFIX?=        ${RUBY_NAME}
103
104 # RUBY_VER_DIR is used as part of  Ruby's library directories.
105 #
106 RUBY_VER_DIR?=          ${_RUBY_VER_MAJOR}.${_RUBY_VER_MINOR}
107
108 # Simple check for package availability with Ruby's version.
109 #
110 .if empty(RUBY_VERSION_SUPPORTED:M${RUBY_VER})
111 PKG_FAIL_REASON+= "This package isn't supported by ${RUBY_NAME}."
112 .endif
113
114 # RUBY_NOVERSION specifies that package dosen't depends on any
115 # version of Ruby.
116 #
117 .if empty(RUBY_NOVERSION:M[nN][oO])
118 RUBY_SUFFIX=
119 RUBY_NAME=              ruby
120 .endif
121
122 # RUBY related command's full pathname.
123 #
124 RUBY?=                  ${PREFIX}/bin/${RUBY_NAME}
125 RDOC?=                  ${PREFIX}/bin/rdoc${RUBY_VER}
126
127 #
128 # RUBY_ARCH is used as architecture-dependent directory name.
129 #
130 RUBY_ARCH?= ${LOWER_ARCH}-${LOWER_OPSYS}${APPEND_ELF}${LOWER_OPSYS_VERSUFFIX}
131
132 #
133 # Ruby shared library version handling.
134 #
135 RUBY_SHLIBMAJOR?=       ${_RUBY_VER_MAJOR}
136 RUBY_SHLIBVER?=         ${RUBY_VERSION}
137
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}
151 .endif
152
153 .if empty(RUBY_SHLIBMAJOR)
154 RUBY_NOSHLIBMAJOR=      "@comment "
155 .else
156 RUBY_NOSHLIBMAJOR=
157 .endif
158
159
160 #
161 # RUBY_DLEXT is suffix of extention library.
162 #
163 .if ${OPSYS} == "Darwin"
164 RUBY_DLEXT=     bundle
165 .else
166 RUBY_DLEXT=     so
167 .endif
168
169 #
170 # Use pthread library with Ruby
171 #
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
178 .else
179 RUBY_USE_PTHREAD?=      yes
180 PTHREAD_OPTS+=          native
181 PTHREAD_AUTO_VARS=      yes
182 .endif
183
184 #
185 # Dynamic PLIST directories
186 #
187 RUBY_DYNAMIC_DIRS?=     # empty
188
189 #
190 # source directory
191 #
192 RUBY_SRCDIR?=   ${_PKGSRC_TOPDIR}/lang/${RUBY_BASE}
193
194 #
195 # common paths
196 #
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}
207
208 #
209 # These will be discontinued in near future.
210 #
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}
219
220 #
221 # ri database relative path
222 #
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
227
228 #
229 # MAKE_ENV
230 #
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}
234
235 MAKEFLAGS+=             RUBY_VERSION=${RUBY_VERSION:Q} \
236                         RUBY_VERSION_DEFAULT=${RUBY_VERSION_DEFAULT:Q}
237
238 # PLIST
239 #
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}"
260
261 #
262 # substitutions
263 #
264 FILES_SUBST+=           RUBY=${RUBY:Q} RUBY_NAME=${RUBY_NAME:Q} \
265                         RUBY_PKGPREFIX=${RUBY_PKGPREFIX:Q} \
266                         RUBY_VER=${RUBY_VER:Q} \
267                         ${PLIST_RUBY_DIRS}
268
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=",}
273
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=",}
280
281 #
282 # make dynamic PLIST
283 #
284 .if !empty(RUBY_DYNAMIC_DIRS)
285
286 RUBY_PLIST_DYNAMIC=     ${WRKDIR}/PLIST.work
287
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
293 .  endif
294
295 PLIST_SRC+=             ${RUBY_PLIST_DYNAMIC}
296
297 .  if exists(${PKGDIR}/PLIST.common_end)
298 PLIST_SRC+=             ${PKGDIR}/PLIST.common_end
299 .  endif
300
301 .endif
302
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 ) | \
307         ${SORT} -u
308 RUBY_GENERATE_PLIST =   ( \
309         ${RUBY_PLIST_COMMENT_CMD}; \
310         ${RUBY_PLIST_FILES_CMD} ) > ${RUBY_PLIST_DYNAMIC}
311 .endif
312
313 .if !empty(RUBY_NOVERSION:M[nN][oO])
314 .if empty(RUBY_USE_PTHREAD:M[nN][oO])
315 .include "../../mk/pthread.buildlink3.mk"
316 .endif
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"
322 .endif
323
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}"); \
328                         print; next; }
329 PRINT_PLIST_AWK+=       /^${RUBY_VENDORARCHLIB:S|/|\\/|g}/ \
330                         { gsub(/${RUBY_VENDORARCHLIB:S|/|\\/|g}/, "$${RUBY_VENDORARCHLIB}"); \
331                         print; next; }
332 PRINT_PLIST_AWK+=       /^${RUBY_VENDORLIB:S|/|\\/|g}/ \
333                         { gsub(/${RUBY_VENDORLIB:S|/|\\/|g}/, "$${RUBY_VENDORLIB}"); \
334                         print; next; }
335 PRINT_PLIST_AWK+=       /^${RUBY_SITEARCHLIB:S|/|\\/|g}/ \
336                         { gsub(/${RUBY_SITEARCHLIB:S|/|\\/|g}/, "$${RUBY_SITEARCHLIB}"); \
337                         print; next; }
338 PRINT_PLIST_AWK+=       /^${RUBY_SITELIB:S|/|\\/|g}/ \
339                         { gsub(/${RUBY_SITELIB:S|/|\\/|g}/, "$${RUBY_SITELIB}"); \
340                         print; next; }
341 PRINT_PLIST_AWK+=       /^${RUBY_SITELIB_BASE:S|/|\\/|g}$$/ \
342                         { gsub(/${RUBY_SITELIB_BASE:S|/|\\/|g}/, "$${RUBY_SITELIB_BASE}"); \
343                         print; next; }
344 PRINT_PLIST_AWK+=       /^${RUBY_VENDORLIB_BASE:S|/|\\/|g}$$/ \
345                         { gsub(/${RUBY_VENDORLIB_BASE:S|/|\\/|g}/, "$${RUBY_VENDORLIB_BASE}"); \
346                         print; next; }
347 PRINT_PLIST_AWK+=       /^${RUBY_LIB:S|/|\\/|g}/ \
348                         { gsub(/${RUBY_LIB:S|/|\\/|g}/, "$${RUBY_LIB}"); \
349                         print; next; }
350 PRINT_PLIST_AWK+=       /^${RUBY_DOC:S|/|\\/|g}/ \
351                         { gsub(/${RUBY_DOC:S|/|\\/|g}/, "$${RUBY_DOC}"); \
352                         print; next; }
353 PRINT_PLIST_AWK+=       /^${RUBY_EG:S|/|\\/|g}/ \
354                         { gsub(/${RUBY_EG:S|/|\\/|g}/, "$${RUBY_EG}"); \
355                         print; next; }
356 PRINT_PLIST_AWK+=       /^${RUBY_SITERIDIR:S|/|\\/|g}/ \
357                         { gsub(/${RUBY_SITERIDIR:S|/|\\/|g}/, "$${RUBY_SITERIDIR}"); \
358                         print; next; }
359 PRINT_PLIST_AWK+=       /^${RUBY_SYSRIDIR:S|/|\\/|g}/ \
360                         { gsub(/${RUBY_SYSRIDIR:S|/|\\/|g}/, "$${RUBY_SYSRIDIR}"); \
361                         print; next; }
362
363 .endif # _RUBY_MK