4 .if defined(_POSTMKINCLUDED) && !defined(Database_Post_Include)
6 Database_Post_Include= bsd.database.mk
7 Database_Include_MAINTAINER= ports@FreeBSD.org
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.
15 # USE_MYSQL - Add MySQL (client/server/embedded) dependency (default:
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).
22 # - MySQL default version. Can be overridden within a port.
25 # - Maintainer can set an arbitrary version of MySQL to always
26 # build this port with (overrides WITH_MYSQL_VER).
28 # - This variable can be defined if the ports does not support
29 # one or more versions of MySQL.
31 # - User defined variable to set MySQL version.
33 # - Detected MySQL version.
35 # USE_PGSQL - Add PostgreSQL client dependency. Components can be depended
36 # on using USE_PGSQL= component[:target]. For the full list
37 # use make -V _USE_PGSQL_DEP
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 (PostgreSQL-9.0 = 90).
43 # - PostgreSQL default version, currently 90.
45 # - Maintainer can set an arbitrary version of PostgreSQL to
46 # always build this port with (overrides WITH_PGSQL_VER).
47 # Minimum and maximum versions can be set (e.g. 90+)
49 # - User defined variable to set PostgreSQL version.
51 # - Detected PostgreSQL version.
53 # USE_BDB - Add Berkeley DB library dependency.
54 # If no version is given (by the maintainer via the port or
55 # by the user via defined variable), try to find the
56 # currently installed version. Fall back to default if
57 # necessary (db5 if compatible).
58 # This adds a "debug-bdb" make target which will dump the
61 # - This variable can be defined when the port does not
62 # support one or more versions of Berkeley DB.
64 # - Maintainer can set a version of Berkeley DB to always
65 # build this port with (overrides WITH_BDB_VER).
67 # - User defined global variable to set Berkeley DB version.
68 # <UNIQUENAME>_WITH_BDB_VER
69 # - User defined port specific variable to set Berkeley DB
72 # - Use the highest installed version of Berkeley DB.
74 # - If defined, BerkeleyDB 6 is added to the
75 # default version set, making it eligible even
76 # if not already installed. This is due to its
77 # stricter Affero GNU Public License.
79 # These variables will then be filled in by this .mk file:
82 # - This variable is automatically set to the name of the
83 # Berkeley DB library (default: db41).
85 # - This variable is automatically set to the name of the
86 # Berkeley DB C++ library (default: db41_cxx).
88 # - This variable is automatically set to the location of
89 # the Berkeley DB include directory (default:
90 # ${LOCALBASE}/include/db41).
92 # - This variable is automatically set to the location of
93 # the Berkeley DB library directory.
95 # - Detected Berkeley DB version.
97 # USE_SQLITE - Add dependency on SQLite library. Valid values are:
98 # 3 and 2. If version is not specified directly then
99 # SQLite-3 is used (if USE_SQLITE= yes).
101 # - Detected SQLite version.
103 # USE_FIREBIRD - Add dependency on Firebird library. Valid values are:
104 # 2 and 1. If no version is given by the maintainer (if
105 # USE_FIREBIRD= yes) and the user did not define
106 # WITH_FIREBIRD_VER variable, fall back to default "2".
108 # - User defined variable to set Firebird version.
110 # - Detected Firebird version.
112 .include "${PORTSDIR}/Mk/bsd.default-versions.mk"
114 .if defined(DEFAULT_MYSQL_VER)
115 WARNING+= "DEFAULT_MYSQL_VER is defined, consider using DEFAULT_VERSIONS=mysql=${DEFAULT_MYSQL_VER} instead"
118 .if defined(DEFAULT_PGSQL_VER)
119 WARNING+= "DEFAULT_PGSQL_VER is defined, consider using DEFAULT_VERSIONS=pgsql=${DEFAULT_PGSQL_VER} instead"
122 .if defined(USE_MYSQL)
123 DEFAULT_MYSQL_VER?= ${MYSQL_DEFAULT:S/.//}
124 # MySQL client version currently supported.
133 # Setting/finding MySQL version we want.
134 .if exists(${LOCALBASE}/bin/mysql)
135 _MYSQL!= ${LOCALBASE}/bin/mysql --version | ${SED} -e 's/.*Distrib \([0-9]\)\.\([0-9]*\).*/\1\2/'
136 _PERCONA!= ${LOCALBASE}/bin/mysql --version | ${GREP} Percona | wc -l
137 _MARIADB!= ${LOCALBASE}/bin/mysql --version | ${GREP} MariaDB | wc -l
140 _MYSQL_VER= ${_MYSQL}p
141 .elif ${_MARIADB} == 1
142 _MYSQL_VER= ${_MYSQL}m
144 _MYSQL_VER= ${_MYSQL}
148 .if defined(WANT_MYSQL_VER)
149 .if defined(WITH_MYSQL_VER) && ${WITH_MYSQL_VER} != ${WANT_MYSQL_VER}
150 IGNORE= cannot install: the port wants mysql${WANT_MYSQL_VER}-client and you try to install mysql${WITH_MYSQL_VER}-client
152 MYSQL_VER= ${WANT_MYSQL_VER}
153 .elif defined(WITH_MYSQL_VER)
154 MYSQL_VER= ${WITH_MYSQL_VER}
156 .if defined(_MYSQL_VER)
157 MYSQL_VER= ${_MYSQL_VER}
159 MYSQL_VER= ${DEFAULT_MYSQL_VER}
161 .endif # WANT_MYSQL_VER
163 .if defined(_MYSQL_VER)
164 .if ${_MYSQL_VER} != ${MYSQL_VER}
165 IGNORE= cannot install: MySQL versions mismatch: mysql${_MYSQL_VER}-client is installed and wanted version is mysql${MYSQL_VER}-client
169 .if (${MYSQL_VER} == "53m")
170 _MYSQL_CLIENT= databases/mariadb-client
171 _MYSQL_SERVER= databases/mariadb-server
172 .elif (${MYSQL_VER} == "55m")
173 _MYSQL_CLIENT= databases/mariadb55-client
174 _MYSQL_SERVER= databases/mariadb55-server
175 .elif (${MYSQL_VER} == "55p")
176 _MYSQL_CLIENT= databases/percona55-client
177 _MYSQL_SERVER= databases/percona55-server
178 .elif (${MYSQL_VER} == "56p")
179 _MYSQL_CLIENT= databases/percona56-client
180 _MYSQL_SERVER= databases/percona56-server
182 _MYSQL_CLIENT= databases/mysql${MYSQL_VER}-client
183 _MYSQL_SERVER= databases/mysql${MYSQL_VER}-server
186 # And now we are checking if we can use it
187 .if defined(MYSQL${MYSQL_VER}_LIBVER)
188 .if defined(IGNORE_WITH_MYSQL)
189 . for VER in ${IGNORE_WITH_MYSQL}
190 . if (${MYSQL_VER} == "${VER}")
191 IGNORE= cannot install: does not work with MySQL version ${MYSQL_VER} (MySQL ${IGNORE_WITH_MYSQL} not supported)
194 .endif # IGNORE_WITH_MYSQL
195 .if (${USE_MYSQL} == "server" || ${USE_MYSQL} == "embedded")
196 RUN_DEPENDS+= ${LOCALBASE}/libexec/mysqld:${PORTSDIR}/${_MYSQL_SERVER}
197 .if (${USE_MYSQL} == "embedded")
198 BUILD_DEPENDS+= ${LOCALBASE}/lib/mysql/libmysqld.a:${PORTSDIR}/${_MYSQL_SERVER}
201 LIB_DEPENDS+= libmysqlclient.so.${MYSQL${MYSQL_VER}_LIBVER}:${PORTSDIR}/${_MYSQL_CLIENT}
204 IGNORE= cannot install: unknown MySQL version: ${MYSQL_VER}
205 .endif # Check for correct libs
208 .if defined(USE_PGSQL)
209 VALID_PGSQL_VER= 84 90 91 92 93 94
210 DEFAULT_PGSQL_VER?= ${PGSQL_DEFAULT:S/.//}
219 # Setting/finding PostgreSQL version we want.
220 . if exists(${LOCALBASE}/bin/pg_config)
221 _PGSQL_VER!= ${LOCALBASE}/bin/pg_config --version | ${SED} -n 's/PostgreSQL[^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\)[^0-9].*/\1\2/p'
222 WITH_PGSQL_VER?= ${_PGSQL_VER}
223 . if ${WITH_PGSQL_VER} != ${_PGSQL_VER}
224 IGNORE?= cannot install: you have set WITH_PGSQL_VER=${WITH_PGSQL_VER} in make.conf, but you have postgresql${_PGSQL_VER}-client installed
228 . if defined(WANT_PGSQL_VER)
229 . if ${WANT_PGSQL_VER:M*+}
230 . for version in ${VALID_PGSQL_VER}
231 . if ${WANT_PGSQL_VER:S/+//} <= ${version}
232 _WANT_PGSQL_VER+=${version}
235 . elif ${WANT_PGSQL_VER:M*-}
236 . for version in ${VALID_PGSQL_VER}
237 . if ${WANT_PGSQL_VER:S/-//} >= ${version}
238 _WANT_PGSQL_VER+=${version}
242 _WANT_PGSQL_VER?= ${WANT_PGSQL_VER}
243 DEV_WARNING+= "Do not use USE_PGSQL. This port should use USES+= pgsql:${WANT_PGSQL_VER:C,^[0-9],&.,}"
245 DEV_WARNING+= "Do not use USE_PGSQL. This port should use USES+= pgsql"
248 . if !empty(_WANT_PGSQL_VER)
249 . for version in ${_WANT_PGSQL_VER}
250 . if defined(WITH_PGSQL_VER)
251 . if ${WITH_PGSQL_VER} == ${version}
252 PGSQL_VER= ${WITH_PGSQL_VER}
254 . elif ${DEFAULT_PGSQL_VER} == ${version}
255 PGSQL_VER= ${version}
257 PGSQL_VER?= ${version}
259 . if defined(WITH_PGSQL_VER) && ${WITH_PGSQL_VER} != ${PGSQL_VER}
260 IGNORE?= cannot install: the port wants postgresql-client version ${WANT_PGSQL_VER} and you have version ${WITH_PGSQL_VER} installed or set in make.conf
264 .if !empty(WITH_PGSQL_VER)
265 PGSQL_VER?= ${WITH_PGSQL_VER}
267 PGSQL_VER?= ${DEFAULT_PGSQL_VER}
270 # And now we are checking if we can use it
271 .if defined(PGSQL${PGSQL_VER}_LIBVER)
272 .if defined(IGNORE_WITH_PGSQL)
273 . for ver in ${IGNORE_WITH_PGSQL}
274 . if (${PGSQL_VER} == ${ver})
275 IGNORE?= cannot install: does not work with postgresql${PGSQL_VER}-client (PostgresSQL ${IGNORE_WITH_PGSQL} not supported)
278 .endif # IGNORE_WITH_PGSQL
280 LIB_DEPENDS+= libpq.so.${PGSQL${PGSQL_VER}_LIBVER}:${PORTSDIR}/databases/postgresql${PGSQL_VER}-client
282 _USE_PGSQL_DEP= contrib docs pgtcl pltcl plperl server
283 _USE_PGSQL_DEP_contrib= pgbench
284 _USE_PGSQL_DEP_docs= postgresql${PGSQL_VER}-docs>0
285 _USE_PGSQL_DEP_pgtcl= ${LOCALBASE}/lib/pgtcl/pkgIndex.tcl
286 _USE_PGSQL_DEP_plperl= postgresql${PGSQL_VER}-plperl>0
287 _USE_PGSQL_DEP_pltcl= postgresql${PGSQL_VER}-pltcl>0
288 _USE_PGSQL_DEP_server= postgres
289 . for depend in ${_USE_PGSQL_DEP}
290 . if ${USE_PGSQL:M${depend}}
291 BUILD_DEPENDS+= ${_USE_PGSQL_DEP_${depend}}:${PORTSDIR}/databases/postgresql${PGSQL_VER}-${depend}
292 RUN_DEPENDS+= ${_USE_PGSQL_DEP_${depend}}:${PORTSDIR}/databases/postgresql${PGSQL_VER}-${depend}
293 _PGSQL_DEV_WARN+= ${depend}
294 . elif ${USE_PGSQL:M${depend}\:*}
295 BUILD_DEPENDS+= ${NONEXISTENT}:${PORTSDIR}/databases/postgresql${PGSQL_VER}-${depend}:${USE_PGSQL:M${depend}\:*:C,^[^:]*\:,,}
296 _PGSQL_DEV_WARN+= ${depend}:${USE_PGSQL:M${depend}\:*:C,^[^:]*\:,,}
300 . ifdef _PGSQL_DEV_WARN
301 DEV_WARNING+= "and WANT_PGSQL= ${_PGSQL_DEV_WARN}"
305 IGNORE?= cannot install: unknown PostgreSQL version: ${PGSQL_VER}
306 .endif # Check for correct version
307 CPPFLAGS+= -I${LOCALBASE}/include
308 LDFLAGS+= -L${LOCALBASE}/lib
312 # TODO: avoid malformed conditional with invalid USE_BDB/WITH_BDB_VER
313 # check if + works properly from test builds 01h12m23s
315 _USE_BDB_save:=${USE_BDB}
316 _WITH_BDB_VER_save:=${WITH_BDB_VER}
319 _DB_DEFAULTS= 48 5 # does not include 6 due to different licensing
320 # but user can re-add it through WITH_BDB6_PERMITTED
321 . if defined(WITH_BDB6_PERMITTED)
325 # Dependency lines for different db versions
326 db48_DEPENDS= libdb-4.8.so:${PORTSDIR}/databases/db48
327 db5_DEPENDS= libdb-5.3.so:${PORTSDIR}/databases/db5
328 db6_DEPENDS= libdb-6.1.so:${PORTSDIR}/databases/db6
329 # Detect db versions by finding some files
330 db48_FIND= ${LOCALBASE}/include/db48/db.h
331 db5_FIND= ${LOCALBASE}/include/db5/db.h
332 db6_FIND= ${LOCALBASE}/include/db6/db.h
334 # Override the global WITH_BDB_VER with the
335 # port specific <UNIQUENAME>_WITH_BDB_VER
336 .if defined(${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER)
337 WITH_BDB_VER= ${${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER}
340 # Override USE_BDB with global WITH_BDB_VER
341 .if defined(WITH_BDB_VER)
342 . if ${WITH_BDB_VER} != 1
343 USE_BDB= ${WITH_BDB_VER}
347 # Override USE_BDB with maintainer's WANT_BDB_VER
348 .if defined(WANT_BDB_VER)
349 USE_BDB= ${WANT_BDB_VER}
353 # upgrade older plussed versions to 48+
354 _BDB_OLDPLUSVERS=4+ 40+ 41+ 42+ 43+ 44+ 45+ 46+ 47+
356 . if ${_BDB_OLDPLUSVERS:M${i}}
361 .if ${USE_BDB} == yes
365 # 1. detect installed versions
367 .for bdb in ${_DB_PORTS}
368 . if exists(${db${bdb}_FIND})
369 _INST_BDB_VER+=${bdb}
373 # 2. parse supported versions:
374 # 2a. build list from USE_BDB
376 _USE_BDB:=${USE_BDB:C,\+$,,:C/(.)(.)$/\1.\2/}
377 .if !empty(USE_BDB:M*+)
378 . for bdb in ${_DB_PORTS:C/(.)(.)$/\1.\2/}
379 . if ${_USE_BDB} <= ${bdb}
380 _SUPP_BDB_VER+=${bdb:C/\.//}
384 _SUPP_BDB_VER=${USE_BDB}
386 # 2b. expand INVALID_BDB_VER if given with "+":
387 .if !empty(INVALID_BDB_VER:M*+)
388 _INV_BDB:=${INVALID_BDB_VER:C,\+$,,:C/(.)(.)$/\1.\2/}
390 . for bdb in ${_DB_PORTS:C/(.)(.)$/\1.\2/}
391 . if ${_INV_BDB} <= ${bdb}
392 _INV_BDB_VER+=${bdb:C/\.//}
396 _INV_BDB_VER:=${INVALID_BDB_VER}
398 # 2c. strip versions from INVALID_BDB_VER out of _SUPP_BDB_VER
399 .for unsupp in ${_INV_BDB_VER}
400 _SUPP_BDB_VER:=${_SUPP_BDB_VER:N${unsupp}}
403 # 3a. calculate intersection in _INST_BDB_VER to see if there
404 # is a usable installed version
405 .for i in ${_INST_BDB_VER}
406 . if empty(_SUPP_BDB_VER:M${i})
407 _INST_BDB_VER:= ${_INST_BDB_VER:N${i}}
410 _ELIGIBLE_BDB_VER:=${_INST_BDB_VER}
412 # 3b. if there is no usable version installed, check defaults
413 .if empty(_INST_BDB_VER)
414 _DFLT_BDB_VER:=${_DB_DEFAULTS}
415 # make sure we use a reasonable version for package builds
416 _WITH_BDB_HIGHEST=yes
417 . for i in ${_DFLT_BDB_VER}
418 . if empty(_SUPP_BDB_VER:M${i})
419 _DFLT_BDB_VER:= ${_DFLT_BDB_VER:N${i}}
422 _ELIGIBLE_BDB_VER:=${_DFLT_BDB_VER}
427 .for i in ${_ELIGIBLE_BDB_VER}
428 . if !empty(WITH_BDB_HIGHEST) || !empty(_WITH_BDB_HIGHEST) || empty(${_BDB_VER})
433 # 5. catch errors or set variables
435 IGNORE= cannot install: no eligible BerkeleyDB version. Requested: ${USE_BDB}, incompatible: ${_INV_BDB_VER}. Try: make debug-bdb
437 . if defined(BDB_BUILD_DEPENDS)
438 BUILD_DEPENDS+= ${db${_BDB_VER}_FIND}:${db${_BDB_VER}_DEPENDS:C/^libdb.*://}
440 LIB_DEPENDS+= ${db${_BDB_VER}_DEPENDS}
442 . if ${_BDB_VER} == 48
444 BDB_LIB_CXX_NAME= db_cxx-4.8
445 BDB_LIB_DIR= ${LOCALBASE}/lib/db48
446 . elif ${_BDB_VER} == 5
448 BDB_LIB_CXX_NAME= db_cxx-5.3
449 BDB_LIB_DIR= ${LOCALBASE}/lib/db5
450 . elif ${_BDB_VER} == 6
452 BDB_LIB_CXX_NAME= db_cxx-6.1
453 BDB_LIB_DIR= ${LOCALBASE}/lib/db6
455 BDB_LIB_NAME?= db${_BDB_VER}
456 BDB_LIB_CXX_NAME?= db${_BDB_VER}_cxx
457 BDB_INCLUDE_DIR?= ${LOCALBASE}/include/db${_BDB_VER}
458 BDB_LIB_DIR?= ${LOCALBASE}/lib
463 @${ECHO_CMD} "--INPUTS----------------------------------------------------"
464 @${ECHO_CMD} "${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER: ${${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER}"
465 @${ECHO_CMD} "WITH_BDB_VER: ${_WITH_BDB_VER_save}"
466 @${ECHO_CMD} "WANT_BDB_VER: ${WANT_BDB_VER}"
467 @${ECHO_CMD} "BDB_BUILD_DEPENDS: ${BDB_BUILD_DEPENDS}"
468 @${ECHO_CMD} "USE_BDB (original): ${_USE_BDB_save}"
469 @${ECHO_CMD} "WITH_BDB_HIGHEST (original): ${WITH_BDB_HIGHEST}"
470 @${ECHO_CMD} "--PROCESSING------------------------------------------------"
471 @${ECHO_CMD} "supported versions: ${_SUPP_BDB_VER}"
472 @${ECHO_CMD} "invalid versions: ${_INV_BDB_VER}"
473 @${ECHO_CMD} "installed versions: ${_INST_BDB_VER}"
474 @${ECHO_CMD} "eligible versions: ${_ELIGIBLE_BDB_VER}"
475 @${ECHO_CMD} "USE_BDB (effective): ${USE_BDB}"
476 @${ECHO_CMD} "WITH_BDB_HIGHEST (override): ${_WITH_BDB_HIGHEST}"
477 @${ECHO_CMD} "--OUTPUTS---------------------------------------------------"
478 @${ECHO_CMD} "IGNORE=${IGNORE}"
479 @${ECHO_CMD} "BDB_VER=${BDB_VER}"
480 @${ECHO_CMD} "BDB_INCLUDE_DIR=${BDB_INCLUDE_DIR}"
481 @${ECHO_CMD} "BDB_LIB_NAME=${BDB_LIB_NAME}"
482 @${ECHO_CMD} "BDB_LIB_CXX_NAME=${BDB_LIB_CXX_NAME}"
483 @${ECHO_CMD} "BDB_LIB_DIR=${BDB_LIB_DIR}"
484 @${ECHO_CMD} "BUILD_DEPENDS=${BUILD_DEPENDS:M*/databases/db*}"
485 @${ECHO_CMD} "LIB_DEPENDS=${LIB_DEPENDS:M*/databases/db*}"
486 @${ECHO_CMD} "------------------------------------------------------------"
488 # Obsolete variables - ports can define these to want users about
489 # variables that may be in /etc/make.conf but that are no longer
491 .if defined(OBSOLETE_BDB_VAR)
492 . for var in ${OBSOLETE_BDB_VAR}
497 . if defined(BAD_VAR)
498 _IGNORE_MSG= Obsolete variable(s) ${BAD_VAR} use WITH_BDB_VER or ${UNIQUENAME:tu:S,-,_,}_WITH_BDB_VER to select Berkeley DB version
500 IGNORE+= ${_IGNORE_MSG}
502 IGNORE= ${_IGNORE_MSG}
509 # Handling SQLite dependency
510 .if defined(USE_SQLITE)
512 .if ${USE_SQLITE:tl} == "yes"
515 _SQLITE_VER= ${USE_SQLITE}
518 # USE_SQLITE is specified incorrectly, so mark this as IGNORE
519 .if ${_SQLITE_VER} == "3"
520 LIB_DEPENDS+= libsqlite3.so:${PORTSDIR}/databases/sqlite${_SQLITE_VER}
521 SQLITE_VER= ${_SQLITE_VER}
522 .elif ${_SQLITE_VER} == "2"
523 LIB_DEPENDS+= libsqlite.so:${PORTSDIR}/databases/sqlite${_SQLITE_VER}
524 SQLITE_VER= ${_SQLITE_VER}
526 IGNORE= cannot install: unknown SQLite version: ${_SQLITE_VER}
529 .endif # defined(USE_SQLITE)
531 .if defined(USE_FIREBIRD)
533 .if defined(WITH_FIREBIRD_VER)
534 USE_FIREBIRD= ${WITH_FIREBIRD_VER}
537 .if ${USE_FIREBIRD:tl} == "yes"
538 FIREBIRD_VER= ${FIREBIRD_DEFAULT:S/.//}
540 FIREBIRD_VER= ${USE_FIREBIRD}
543 .if ${FIREBIRD_VER} == "25"
544 LIB_DEPENDS+= libfbclient.so:${PORTSDIR}/databases/firebird25-client
546 IGNORE= cannot install: unknown Firebird version: ${FIREBIRD_VER}
549 .endif # defined(USE_FIREBIRD)
551 .endif # defined(_POSTMKINCLUDED) && !defined(Database_Post_Include)