Tweak sysutils/healthd version 0.7.9_2
[dports.git] / Mk / bsd.database.mk
1 # $FreeBSD$
2 #
3
4 .if defined(_POSTMKINCLUDED) && !defined(Database_Post_Include)
5
6 Database_Post_Include=          bsd.database.mk
7 Database_Include_MAINTAINER=    ports@FreeBSD.org
8
9 # This file contains some routines to interact with different databases, such
10 # as MySQL, PostgreSQL, and Berkley DB.  To include this file, define macro
11 # USE_[DATABASE], for example USE_MYSQL.  Defining macro like
12 # USE_[DATABASE]_VER or WANT_[DATABASE]_VER will include this file as well.
13 #
14 ##
15 # USE_MYSQL             - Add MySQL (client/server/embedded) dependency (default:
16 #                         client).
17 #                         If no version is given (by the maintainer via the port or
18 #                         by the user via defined variable), try to find the
19 #                         currently installed version.  Fall back to default if
20 #                         necessary (MySQL-5.5 = 55).
21 # DEFAULT_MYSQL_VER
22 #                       - MySQL default version.  Can be overridden within a port.
23 #                         Default: 55.
24 # WANT_MYSQL_VER
25 #                       - Maintainer can set an arbitrary version of MySQL to always
26 #                         build this port with (overrides WITH_MYSQL_VER).
27 # IGNORE_WITH_MYSQL
28 #                       - This variable can be defined if the ports does not support
29 #                         one or more versions of MySQL.
30 # WITH_MYSQL_VER
31 #                       - User defined variable to set MySQL version.
32 # MYSQL_VER
33 #                       - Detected MySQL version.
34 ##
35 # USE_PGSQL             - Do not use this-- instead use USES=pgsql
36 ##
37 # USE_BDB       - Add Berkeley DB library dependency.
38 #                         If no version is given (by the maintainer via the port or
39 #                         by the user via defined variable), try to find the
40 #                         currently installed version.  Fall back to default if
41 #                         necessary (db5 if compatible).
42 #                         This adds a "debug-bdb" make target which will dump the
43 #                         related data.
44 # INVALID_BDB_VER
45 #                       - This variable can be defined when the port does not
46 #                         support one or more versions of Berkeley DB.
47 # WANT_BDB_VER
48 #                       - Maintainer can set a version of Berkeley DB to always
49 #                         build this port with (overrides WITH_BDB_VER).
50 # WITH_BDB_VER
51 #                       - User defined global variable to set Berkeley DB version.
52 # <UNIQUENAME>_WITH_BDB_VER
53 #                       - User defined port specific variable to set Berkeley DB
54 #                         version.
55 # WITH_BDB_HIGHEST
56 #                       - Use the highest installed version of Berkeley DB.
57 # WITH_BDB6_PERMITTED
58 #                       - If defined, BerkeleyDB 6 is added to the
59 #                         default version set, making it eligible even
60 #                         if not already installed. This is due to its
61 #                         stricter Affero GNU Public License.
62 #
63 # These variables will then be filled in by this .mk file:
64 #
65 # BDB_LIB_NAME
66 #                       - This variable is automatically set to the name of the
67 #                         Berkeley DB library (default: db41).
68 # BDB_LIB_CXX_NAME
69 #                       - This variable is automatically set to the name of the
70 #                         Berkeley DB C++ library (default: db41_cxx).
71 # BDB_INCLUDE_DIR
72 #                       - This variable is automatically set to the location of
73 #                         the Berkeley DB include directory (default:
74 #                         ${LOCALBASE}/include/db41).
75 # BDB_LIB_DIR
76 #                       - This variable is automatically set to the location of
77 #                         the Berkeley DB library directory.
78 # BDB_VER
79 #                       - Detected Berkeley DB version.
80 ##
81 # USE_SQLITE            - Add dependency on SQLite library.  Valid values are:
82 #                         3 and 2.  If version is not specified directly then
83 #                         SQLite-3 is used (if USE_SQLITE= yes).
84 # SQLITE_VER
85 #                       - Detected SQLite version.
86 ##
87 # USE_FIREBIRD          - Add dependency on Firebird library.  Valid values are:
88 #                         2 and 1.  If no version is given by the maintainer (if
89 #                         USE_FIREBIRD= yes) and the user did not define
90 #                         WITH_FIREBIRD_VER variable, fall back to default "2".
91 # WITH_FIREBIRD_VER
92 #                       - User defined variable to set Firebird version.
93 # FIREBIRD_VER
94 #                       - Detected Firebird version.
95
96 .include "${PORTSDIR}/Mk/bsd.default-versions.mk"
97
98 .if defined(DEFAULT_MYSQL_VER)
99 WARNING+=       "DEFAULT_MYSQL_VER is defined, consider using DEFAULT_VERSIONS=mysql=${DEFAULT_MYSQL_VER} instead"
100 .endif
101
102 .if defined(DEFAULT_PGSQL_VER)
103 WARNING+=       "DEFAULT_PGSQL_VER is defined, consider using DEFAULT_VERSIONS=pgsql=${DEFAULT_PGSQL_VER} instead"
104 .endif
105
106 .if defined(USE_MYSQL)
107 DEFAULT_MYSQL_VER?=     ${MYSQL_DEFAULT:S/.//}
108 # MySQL client version currently supported.
109 MYSQL51_LIBVER=         16
110 MYSQL53m_LIBVER=        16
111 MYSQL55_LIBVER=         18
112 MYSQL55m_LIBVER=        18
113 MYSQL55p_LIBVER=        18
114 MYSQL56_LIBVER=         18
115 MYSQL56p_LIBVER=        18
116 MYSQL100m_LIBVER=       18
117
118 # Setting/finding MySQL version we want.
119 .if exists(${LOCALBASE}/bin/mysql)
120 _MYSQL!=        ${LOCALBASE}/bin/mysql --version | ${SED} -e 's/.*Distrib \([0-9]\{1,2\}\)\.\([0-9]*\).*/\1\2/'
121 _PERCONA!=      ${LOCALBASE}/bin/mysql --version | ${GREP} Percona | wc -l
122 _MARIADB!=      ${LOCALBASE}/bin/mysql --version | ${GREP} MariaDB | wc -l
123
124 .if ${_PERCONA} == 1
125 _MYSQL_VER=     ${_MYSQL}p
126 .elif ${_MARIADB} == 1
127 _MYSQL_VER=     ${_MYSQL}m
128 .else
129 _MYSQL_VER=     ${_MYSQL}
130 .endif
131 .endif
132
133 .if defined(WANT_MYSQL_VER)
134 .if defined(WITH_MYSQL_VER) && ${WITH_MYSQL_VER} != ${WANT_MYSQL_VER}
135 IGNORE=         cannot install: the port wants mysql${WANT_MYSQL_VER}-client and you try to install mysql${WITH_MYSQL_VER}-client
136 .endif
137 MYSQL_VER=      ${WANT_MYSQL_VER}
138 .elif defined(WITH_MYSQL_VER)
139 MYSQL_VER=      ${WITH_MYSQL_VER}
140 .else
141 .if defined(_MYSQL_VER)
142 MYSQL_VER=      ${_MYSQL_VER}
143 .else
144 MYSQL_VER=      ${DEFAULT_MYSQL_VER}
145 .endif
146 .endif # WANT_MYSQL_VER
147
148 .if defined(_MYSQL_VER)
149 .if ${_MYSQL_VER} != ${MYSQL_VER}
150 IGNORE=         cannot install: MySQL versions mismatch: mysql${_MYSQL_VER}-client is installed and wanted version is mysql${MYSQL_VER}-client
151 .endif
152 .endif
153
154 .if (${MYSQL_VER} == "53m")
155 _MYSQL_CLIENT=  databases/mariadb-client
156 _MYSQL_SERVER=  databases/mariadb-server
157 .elif (${MYSQL_VER} == "55m")
158 _MYSQL_CLIENT=  databases/mariadb55-client
159 _MYSQL_SERVER=  databases/mariadb55-server
160 .elif (${MYSQL_VER} == "100m")
161 _MYSQL_CLIENT=  databases/mariadb100-client
162 _MYSQL_SERVER=  databases/mariadb100-server
163 .elif (${MYSQL_VER} == "55p")
164 _MYSQL_CLIENT=  databases/percona55-client
165 _MYSQL_SERVER=  databases/percona55-server
166 .elif (${MYSQL_VER} == "56p")
167 _MYSQL_CLIENT=  databases/percona56-client
168 _MYSQL_SERVER=  databases/percona56-server
169 .else
170 _MYSQL_CLIENT=  databases/mysql${MYSQL_VER}-client
171 _MYSQL_SERVER=  databases/mysql${MYSQL_VER}-server
172 .endif
173
174 # And now we are checking if we can use it
175 .if defined(MYSQL${MYSQL_VER}_LIBVER)
176 .if defined(IGNORE_WITH_MYSQL)
177 .       for VER in ${IGNORE_WITH_MYSQL}
178 .               if (${MYSQL_VER} == "${VER}")
179 IGNORE=         cannot install: does not work with MySQL version ${MYSQL_VER} (MySQL ${IGNORE_WITH_MYSQL} not supported)
180 .               endif
181 .       endfor
182 .endif # IGNORE_WITH_MYSQL
183 .if (${USE_MYSQL} == "server" || ${USE_MYSQL} == "embedded")
184 RUN_DEPENDS+=   ${LOCALBASE}/libexec/mysqld:${PORTSDIR}/${_MYSQL_SERVER}
185 .if (${USE_MYSQL} == "embedded")
186 BUILD_DEPENDS+= ${LOCALBASE}/lib/mysql/libmysqld.a:${PORTSDIR}/${_MYSQL_SERVER}
187 .endif
188 .else
189 LIB_DEPENDS+=   libmysqlclient.so.${MYSQL${MYSQL_VER}_LIBVER}:${PORTSDIR}/${_MYSQL_CLIENT}
190 .endif
191 .else
192 IGNORE=         cannot install: unknown MySQL version: ${MYSQL_VER}
193 .endif # Check for correct libs
194 .endif # USE_MYSQL
195
196 .if defined(USE_BDB)
197 # TODO: avoid malformed conditional with invalid USE_BDB/WITH_BDB_VER
198 # check if + works properly from test builds 01h12m23s
199
200 _USE_BDB_save:=${USE_BDB}
201 _WITH_BDB_VER_save:=${WITH_BDB_VER}
202
203 _DB_PORTS=              48 5 6
204 _DB_DEFAULTS=   48 5    # does not include 6 due to different licensing
205 #       but user can re-add it through WITH_BDB6_PERMITTED
206 . if defined(WITH_BDB6_PERMITTED)
207 _DB_DEFAULTS+=  6
208 . endif
209
210 # Dependency lines for different db versions
211 db48_DEPENDS=   libdb-4.8.so:${PORTSDIR}/databases/db48
212 db5_DEPENDS=    libdb-5.3.so:${PORTSDIR}/databases/db5
213 db6_DEPENDS=    libdb-6.1.so:${PORTSDIR}/databases/db6
214 # Detect db versions by finding some files
215 db48_FIND=      ${LOCALBASE}/include/db48/db.h
216 db5_FIND=       ${LOCALBASE}/include/db5/db.h
217 db6_FIND=       ${LOCALBASE}/include/db6/db.h
218
219 # Override the global WITH_BDB_VER with the
220 # port specific <UNIQUENAME>_WITH_BDB_VER
221 .if defined(${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER)
222 WITH_BDB_VER=   ${${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER}
223 .endif
224
225 # Override USE_BDB with global WITH_BDB_VER
226 .if defined(WITH_BDB_VER)
227 . if ${WITH_BDB_VER} != 1
228 USE_BDB=        ${WITH_BDB_VER}
229 . endif
230 .endif
231
232 # Override USE_BDB with maintainer's WANT_BDB_VER
233 .if defined(WANT_BDB_VER)
234 USE_BDB=        ${WANT_BDB_VER}
235 .endif
236
237 # Compatiblity hack:
238 # upgrade older plussed versions to 48+
239 _BDB_OLDPLUSVERS=4+ 40+ 41+ 42+ 43+ 44+ 45+ 46+ 47+
240 .for i in ${USE_BDB}
241 . if ${_BDB_OLDPLUSVERS:M${i}}
242 USE_BDB:=       48+
243 . endif
244 .endfor
245
246 .if ${USE_BDB} == yes
247 USE_BDB:=       48+
248 .endif
249
250 # 1. detect installed versions
251 _INST_BDB_VER=
252 .for bdb in ${_DB_PORTS}
253 . if exists(${db${bdb}_FIND})
254 _INST_BDB_VER+=${bdb}
255 . endif
256 .endfor
257
258 # 2. parse supported versions:
259 # 2a. build list from USE_BDB
260 _SUPP_BDB_VER=
261 _USE_BDB:=${USE_BDB:C,\+$,,:C/(.)(.)$/\1.\2/}
262 .if !empty(USE_BDB:M*+)
263 . for bdb in ${_DB_PORTS:C/(.)(.)$/\1.\2/}
264 .  if ${_USE_BDB} <= ${bdb}
265 _SUPP_BDB_VER+=${bdb:C/\.//}
266 .  endif
267 . endfor
268 .else
269 _SUPP_BDB_VER=${USE_BDB}
270 .endif
271 # 2b. expand INVALID_BDB_VER if given with "+":
272 .if !empty(INVALID_BDB_VER:M*+)
273 _INV_BDB:=${INVALID_BDB_VER:C,\+$,,:C/(.)(.)$/\1.\2/}
274 _INV_BDB_VER:=
275 . for bdb in ${_DB_PORTS:C/(.)(.)$/\1.\2/}
276 .  if ${_INV_BDB} <= ${bdb}
277 _INV_BDB_VER+=${bdb:C/\.//}
278 .  endif
279 . endfor
280 .else
281 _INV_BDB_VER:=${INVALID_BDB_VER}
282 .endif
283 # 2c. strip versions from INVALID_BDB_VER out of _SUPP_BDB_VER
284 .for unsupp in ${_INV_BDB_VER}
285 _SUPP_BDB_VER:=${_SUPP_BDB_VER:N${unsupp}}
286 .endfor
287
288 # 3a. calculate intersection in _INST_BDB_VER to see if there
289 # is a usable installed version
290 .for i in ${_INST_BDB_VER}
291 . if empty(_SUPP_BDB_VER:M${i})
292 _INST_BDB_VER:= ${_INST_BDB_VER:N${i}}
293 . endif
294 .endfor
295 _ELIGIBLE_BDB_VER:=${_INST_BDB_VER}
296
297 # 3b. if there is no usable version installed, check defaults
298 .if empty(_INST_BDB_VER)
299 _DFLT_BDB_VER:=${_DB_DEFAULTS}
300 # make sure we use a reasonable version for package builds
301 _WITH_BDB_HIGHEST=yes
302 . for i in ${_DFLT_BDB_VER}
303 .  if empty(_SUPP_BDB_VER:M${i})
304 _DFLT_BDB_VER:= ${_DFLT_BDB_VER:N${i}}
305 .  endif
306 . endfor
307 _ELIGIBLE_BDB_VER:=${_DFLT_BDB_VER}
308 .endif
309
310 # 4. elect a version
311 _BDB_VER=
312 .for i in ${_ELIGIBLE_BDB_VER}
313 . if !empty(WITH_BDB_HIGHEST) || !empty(_WITH_BDB_HIGHEST) || empty(${_BDB_VER})
314 _BDB_VER:=${i}
315 . endif
316 .endfor
317
318 # 5. catch errors or set variables
319 .if empty(_BDB_VER)
320 IGNORE=         cannot install: no eligible BerkeleyDB version. Requested: ${USE_BDB}, incompatible: ${_INV_BDB_VER}. Try: make debug-bdb
321 .else
322 . if defined(BDB_BUILD_DEPENDS)
323 BUILD_DEPENDS+= ${db${_BDB_VER}_FIND}:${db${_BDB_VER}_DEPENDS:C/^libdb.*://}
324 . else
325 LIB_DEPENDS+=   ${db${_BDB_VER}_DEPENDS}
326 . endif
327 . if ${_BDB_VER} == 48
328 BDB_LIB_NAME=           db-4.8
329 BDB_LIB_CXX_NAME=       db_cxx-4.8
330 BDB_LIB_DIR=            ${LOCALBASE}/lib/db48
331 . elif ${_BDB_VER} == 5
332 BDB_LIB_NAME=           db-5.3
333 BDB_LIB_CXX_NAME=       db_cxx-5.3
334 BDB_LIB_DIR=            ${LOCALBASE}/lib/db5
335 . elif ${_BDB_VER} == 6
336 BDB_LIB_NAME=           db-6.1
337 BDB_LIB_CXX_NAME=       db_cxx-6.1
338 BDB_LIB_DIR=            ${LOCALBASE}/lib/db6
339 . endif
340 BDB_LIB_NAME?=          db${_BDB_VER}
341 BDB_LIB_CXX_NAME?=      db${_BDB_VER}_cxx
342 BDB_INCLUDE_DIR?=       ${LOCALBASE}/include/db${_BDB_VER}
343 BDB_LIB_DIR?=           ${LOCALBASE}/lib
344 .endif
345 BDB_VER=        ${_BDB_VER}
346
347 debug-bdb:
348         @${ECHO_CMD} "--INPUTS----------------------------------------------------"
349         @${ECHO_CMD} "${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER: ${${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER}"
350         @${ECHO_CMD} "WITH_BDB_VER: ${_WITH_BDB_VER_save}"
351         @${ECHO_CMD} "WANT_BDB_VER: ${WANT_BDB_VER}"
352         @${ECHO_CMD} "BDB_BUILD_DEPENDS: ${BDB_BUILD_DEPENDS}"
353         @${ECHO_CMD} "USE_BDB (original): ${_USE_BDB_save}"
354         @${ECHO_CMD} "WITH_BDB_HIGHEST (original): ${WITH_BDB_HIGHEST}"
355         @${ECHO_CMD} "--PROCESSING------------------------------------------------"
356         @${ECHO_CMD} "supported versions: ${_SUPP_BDB_VER}"
357         @${ECHO_CMD} "invalid versions: ${_INV_BDB_VER}"
358         @${ECHO_CMD} "installed versions: ${_INST_BDB_VER}"
359         @${ECHO_CMD} "eligible versions: ${_ELIGIBLE_BDB_VER}"
360         @${ECHO_CMD} "USE_BDB (effective): ${USE_BDB}"
361         @${ECHO_CMD} "WITH_BDB_HIGHEST (override): ${_WITH_BDB_HIGHEST}"
362         @${ECHO_CMD} "--OUTPUTS---------------------------------------------------"
363         @${ECHO_CMD} "IGNORE=${IGNORE}"
364         @${ECHO_CMD} "BDB_VER=${BDB_VER}"
365         @${ECHO_CMD} "BDB_INCLUDE_DIR=${BDB_INCLUDE_DIR}"
366         @${ECHO_CMD} "BDB_LIB_NAME=${BDB_LIB_NAME}"
367         @${ECHO_CMD} "BDB_LIB_CXX_NAME=${BDB_LIB_CXX_NAME}"
368         @${ECHO_CMD} "BDB_LIB_DIR=${BDB_LIB_DIR}"
369         @${ECHO_CMD} "BUILD_DEPENDS=${BUILD_DEPENDS:M*/databases/db*}"
370         @${ECHO_CMD} "LIB_DEPENDS=${LIB_DEPENDS:M*/databases/db*}"
371         @${ECHO_CMD} "------------------------------------------------------------"
372
373 # Obsolete variables - ports can define these to want users about
374 # variables that may be in /etc/make.conf but that are no longer
375 # effective:
376 .if defined(OBSOLETE_BDB_VAR)
377 . for var in ${OBSOLETE_BDB_VAR}
378 .  if defined(${var})
379 BAD_VAR+=       ${var},
380 .  endif
381 . endfor
382 . if defined(BAD_VAR)
383 _IGNORE_MSG=    Obsolete variable(s) ${BAD_VAR} use WITH_BDB_VER or ${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER to select Berkeley DB version
384 .  if defined(IGNORE)
385 IGNORE+= ${_IGNORE_MSG}
386 .  else
387 IGNORE= ${_IGNORE_MSG}
388 .  endif
389 . endif
390 .endif
391
392 .endif # USE_BDB
393
394 # Handling SQLite dependency
395 .if defined(USE_SQLITE)
396
397 .if ${USE_SQLITE:tl} == "yes"
398 _SQLITE_VER=    3
399 .else
400 _SQLITE_VER=     ${USE_SQLITE}
401 .endif
402
403 # USE_SQLITE is specified incorrectly, so mark this as IGNORE
404 .if ${_SQLITE_VER} == "3"
405 LIB_DEPENDS+=   libsqlite3.so:${PORTSDIR}/databases/sqlite${_SQLITE_VER}
406 SQLITE_VER=     ${_SQLITE_VER}
407 .elif ${_SQLITE_VER} == "2"
408 LIB_DEPENDS+=   libsqlite.so:${PORTSDIR}/databases/sqlite${_SQLITE_VER}
409 SQLITE_VER=     ${_SQLITE_VER}
410 .else
411 IGNORE=         cannot install: unknown SQLite version: ${_SQLITE_VER}
412 .endif
413
414 .endif # defined(USE_SQLITE)
415
416 .if defined(USE_FIREBIRD)
417
418 .if defined(WITH_FIREBIRD_VER)
419 USE_FIREBIRD=   ${WITH_FIREBIRD_VER}
420 .endif
421
422 .if ${USE_FIREBIRD:tl} == "yes"
423 FIREBIRD_VER=   ${FIREBIRD_DEFAULT:S/.//}
424 .else
425 FIREBIRD_VER=   ${USE_FIREBIRD}
426 .endif
427
428 .if ${FIREBIRD_VER} == "25"
429 LIB_DEPENDS+=   libfbclient.so:${PORTSDIR}/databases/firebird25-client
430 .else
431 IGNORE=         cannot install: unknown Firebird version: ${FIREBIRD_VER}
432 .endif
433
434 .endif # defined(USE_FIREBIRD)
435
436 .endif # defined(_POSTMKINCLUDED) && !defined(Database_Post_Include)