Index: Mk/Uses/mysql.mk =================================================================== --- /dev/null +++ Mk/Uses/mysql.mk @@ -0,0 +1,178 @@ +# $FreeBSD$ +# +# Provide support for MySQL/MariaDB/Percona (mysql) +# +# Feature: mysql +# Usage: USES= mysql[:version] +# +# Maintainer can set version required. Minimum and maximum +# versions can be specified; e.g. 5.6-, 5.7+ +# MySQL flavours MariaDB and Percona are identified by the +# m and p version suffixes respectively, eg 10.0m+ +# +# WANT_MYSQL= server[:fetch] +# +# Add MySQL component dependency, using +# WANT_MYSQL= component[:target]. +# For the full list use make -V _USE_MYSQL_DEP +# +# If no version is given (by the maintainer via the port or +# by the user via defined variable), try to find the +# currently installed version. Fall back to default if +# necessary. +# +# MAINTAINER: brnrd@FreeBSD.org + +.if !defined(_INCLUDE_USES_MYSQL_MK) + +_INCLUDE_USES_MYSQL_MK= yes + +# Variables set by mysql.mk: +# +# MYSQL_VER +# Detected PostgreSQL version. Do *not* use this +# to add dependencies; use WANT_MYSQL as explained above +# + +VALID_MYSQL_VER= 5.5 5.6 5.7 5.5m 10.0m 10.1m 5.5p 5.6p + +# Override non-default LIBVERS like this: +#MYSQL60_LIBVER=19 + +MYSQL_LIBVER= 18 +.for v in ${VALID_MYSQL_VER:S,.,,} +MYSQL$v_LIBVER?= ${MYSQL_LIBVER} +.endfor +MYSQL57_LIBVER= 20 + +.include "${PORTSDIR}/Mk/bsd.default-versions.mk" + +.for v in ${MYSQL_DEFAULT} +. if ! ${VALID_MYSQL_VER:M$v} +IGNORE= Invalid MYSQL default version ${MYSQL_DEFAULT}; valid versions are ${VALID_MYSQL_VER} +. endif +.endfor + +.for w in WITH DEFAULT +. ifdef $w_MYSQL_VER +WARNING+= "$w_MYSQL_VER is defined, consider using DEFAULT_VERSIONS=mysql=${$w_MYSQL_VER:C,^.,&.,} instead" +MYSQL_DEFAULT?= ${$w_MYSQL_VER:C,^.,&.,} +. endif +.endfor + +.ifdef DEFAULT_MYSYQL_VER && WITH_MYSQL_VER +IGNORE= will not allow setting both DEFAULT_MYSQL_VER and WITH_MYSQL_VER. Use DEFAULT_VERSIONS=mysql=5.6 instead +.endif + +# Setting/finding MySQL version and flavour we want. +MYSQL_CLI?= ${LOCALBASE}/bin/mysql +.if exists(${MYSQL_CLI}) +_MYSQL_CLI_VER!= ${MYSQL_CLI} --version | ${SED} -e 's/.*Distrib \([0-9]\{1,2\}\)\.\([0-9]*\).*/\1.\2/' +_MARIADB!= ${MYSQL_CLI} --version | ${GREP} MariaDB | wc -l +_PERCONA!= ${MYSQL_CLI} --version | ${GREP} Percona | wc -l +. if ${_MARIADB} == 1 +_MYSQL_FLAVOUR= MariaDB +_MYSQL_VER= ${_MYSQL_CLI_VER}m +. elif ${_PERCONA} == 1 +_MYSQL_FLAVOUR= Percona +_MYSQL_VER= ${_MYSQL_CLI_VER}p +. else +_MYSQL_FLAVOUR= MySQL +_MYSQL_VER= ${_MYSQL_CLI_VER} +. endif +.endif + +# Handle the + and - version stuff +.if !empty(mysql_ARGS) +. if ${mysql_ARGS:M*+} +. for version in ${VALID_MYSQL_VER} +. if ${mysql_ARGS:S/+//} <= ${version} +_WANT_MYSQL_VER+=${version} +. endif +. endfor +. elif ${mysql_ARGS:M*-} +. for version in ${VALID_MYSQL_VER} +. if ${mysql_ARGS:S/-//} >= ${version} +_WANT_MYSQL_VER+=${version} +. endif +. endfor +. endif +_WANT_MYSQL_VER?= ${mysql_ARGS} +.endif + +# Try to match default version, otherwise just take the first version +# that matches +.if !empty(_WANT_MYSQL_VER) +. for version in ${_WANT_MYSQL_VER} +. if ${MYSQL_DEFAULT} == ${version} +MYSQL_VER= ${version} +. endif +MYSQL_VER?= ${version} +. endfor +.endif +# Derive MySQL flavour from version +.if !empty(${MYSQL_VER:M[0-9.]*m}) +MYSQL_FLAVOUR= MariaDB +.elif !empty(${MYSQL_VER:M[0-9.]*p}) +MYSQL_FLAVOUR= Percona +.else +MYSQL_FLAVOUR= MySQL +.endif +# Now we can generate a proper message +.if !empty(_WANT_MYSQL_VER) +. if defined(_MYSQL_VER) && ${_MYSQL_VER} != ${MYSQL_VER} +IGNORE?= cannot install: the port wants ${MYSQL_FLAVOUR}-client version ${_WANT_MYSQL_VER} and you have ${_MYSQL_FLAVOUR} version ${_MYSQL_VER} installed +. endif +.endif + +# OK, so the port is ambivalent, we'll just take what's on the system. +MYSQL_VER?= ${_MYSQL_VER} +MYSQL_FLAVOUR?= ${_MYSQL_FLAVOUR} + +# After all that, we still have found nothing! +.if empty(MYSQL_VER) +MYSQL_VER= ${MYSQL_DEFAULT} +MYSQL_FLAVOUR= MySQL +.endif + +# We don't want to be :S,.,, the whole time when doing port version checks +MYSQL_VER_NODOT= ${MYSQL_VER:S,.,,} + +# And now we are checking if we can use it +.if defined(MYSQL${MYSQL_VER_NODOT}_LIBVER) +# Compat. Please DO NOT use IGNORE_WITH_MYSQL! +. if defined(IGNORE_WITH_MYSQL) +DEV_WARNING+= "Do not set IGNORE_WITH_MYSQL, use the version argument to USES=mysql" +. for ver in ${IGNORE_WITH_MYSQL} +. if (${MYSQL_VER} == ${ver}) +IGNORE?= cannot install: does not work with ${_MYSQL_FLAVOUR:tl}${MYSQL_VER_NODOT:C/[mp//]}-client (${_MYSQL_FLAVOUR} ${IGNORE_WITH_MYSQL} not supported) +. endif +. endfor +. endif # IGNORE_WITH_MYSQL + +MYSQL_CLIENT_PORT=${PORTSDIR}/databases/${MYSQL_FLAVOUR:tl}${MYSQL_VER_NODOT:C/[mp]//}-client +MYSQL_SERVER_PORT=${PORTSDIR}/databases/${MYSQL_FLAVOUR:tl}${MYSQL_VER_NODOT:C/[mp]//}-server + +_USE_MYSQL_DEP= client embedded lib server +. if defined(WANT_MYSQL) +. if ${WANT_MYSQL:Mclient} +RUN_DEPENDS+= ${LOCALBASE}/bin/mysql:${MYSQL_CLIENT_PORT} +. elif ${WANT_MYSQL:Membedded} +BUILD_DEPENDS+= ${LOCALBASE}/lib/mysql/libmysqld.a:${MYSQL_SERVER_PORT} +RUN_DEPENDS+= ${LOCALBASE}/libexec/mysqld:${MYSQL_SERVER_PORT} +. elif ${WANT_MYSQL:Mlib} +LIB_DEPENDS+= libmysqlclient.so.${MYSQL${MYSQL_VER_NODOT}_LIBVER}:${MYSQL_CLIENT_PORT} +. elif ${WANT_MYSQL:Mserver} +RUN_DEPENDS+= ${LOCALBASE}/libexec/mysqld:${MYSQL_SERVER_PORT} +. endif +. else # WANT_MYSQL undefined +LIB_DEPENDS+= libmysqlclient.so.${MYSQL${MYSQL_VER_NODOT}_LIBVER}:${MYSQL_CLIENT_PORT} +. endif + +.else +IGNORE?= cannot install: unknown MySQL version: ${MYSQL_VER} +.endif # Check for correct version +CPPFLAGS+= -I${LOCALBASE}/include +LDFLAGS+= -L${LOCALBASE}/lib + +.endif # !defined(_INCLUDE_USES_MYSQL_MK) Index: Mk/bsd.database.mk =================================================================== --- Mk/bsd.database.mk +++ Mk/bsd.database.mk @@ -12,25 +12,7 @@ # USE_[DATABASE]_VER or WANT_[DATABASE]_VER will include this file as well. # ## -# USE_MYSQL - Add MySQL (client/server/embedded) dependency (default: -# client). -# If no version is given (by the maintainer via the port or -# by the user via defined variable), try to find the -# currently installed version. Fall back to default if -# necessary (MySQL-5.6 = 56). -# DEFAULT_MYSQL_VER -# - MySQL default version. Can be overridden within a port. -# Default: 56. -# WANT_MYSQL_VER -# - Maintainer can set an arbitrary version of MySQL to always -# build this port with (overrides WITH_MYSQL_VER). -# IGNORE_WITH_MYSQL -# - This variable can be defined if the ports does not support -# one or more versions of MySQL. -# WITH_MYSQL_VER -# - User defined variable to set MySQL version. -# MYSQL_VER -# - Detected MySQL version. +# USE_MYSQL - Do not use this-- instead USES=mysql ## # USE_BDB - Add Berkeley DB library dependency. # If no version is given (by the maintainer via the port or @@ -93,90 +75,6 @@ .include "${PORTSDIR}/Mk/bsd.default-versions.mk" -.if defined(DEFAULT_MYSQL_VER) -WARNING+= "DEFAULT_MYSQL_VER is defined, consider using DEFAULT_VERSIONS=mysql=${DEFAULT_MYSQL_VER} instead" -.endif - -.if defined(USE_MYSQL) -DEFAULT_MYSQL_VER?= ${MYSQL_DEFAULT:S/.//} -# MySQL client version currently supported. -MYSQL51_LIBVER= 16 -MYSQL55_LIBVER= 18 -MYSQL55m_LIBVER= 18 -MYSQL55p_LIBVER= 18 -MYSQL56_LIBVER= 18 -MYSQL56p_LIBVER= 18 -MYSQL100m_LIBVER= 18 - -# Setting/finding MySQL version we want. -.if exists(${LOCALBASE}/bin/mysql) -_MYSQL!= ${LOCALBASE}/bin/mysql --version | ${SED} -e 's/.*Distrib \([0-9]\{1,2\}\)\.\([0-9]*\).*/\1\2/' -_PERCONA!= ${LOCALBASE}/bin/mysql --version | ${GREP} Percona | wc -l -_MARIADB!= ${LOCALBASE}/bin/mysql --version | ${GREP} MariaDB | wc -l - -.if ${_PERCONA} == 1 -_MYSQL_VER= ${_MYSQL}p -.elif ${_MARIADB} == 1 -_MYSQL_VER= ${_MYSQL}m -.else -_MYSQL_VER= ${_MYSQL} -.endif -.endif - -.if defined(WANT_MYSQL_VER) -.if defined(WITH_MYSQL_VER) && ${WITH_MYSQL_VER} != ${WANT_MYSQL_VER} -IGNORE= cannot install: the port wants mysql${WANT_MYSQL_VER}-client and you try to install mysql${WITH_MYSQL_VER}-client -.endif -MYSQL_VER= ${WANT_MYSQL_VER} -.elif defined(WITH_MYSQL_VER) -MYSQL_VER= ${WITH_MYSQL_VER} -.else -.if defined(_MYSQL_VER) -MYSQL_VER= ${_MYSQL_VER} -.else -MYSQL_VER= ${DEFAULT_MYSQL_VER} -.endif -.endif # WANT_MYSQL_VER - -.if defined(_MYSQL_VER) -.if ${_MYSQL_VER} != ${MYSQL_VER} -IGNORE= cannot install: MySQL versions mismatch: mysql${_MYSQL_VER}-client is installed and wanted version is mysql${MYSQL_VER}-client -.endif -.endif - -.if (${MYSQL_VER:C/[0-9]*//} == "m") -_MYSQL_FLAVOUR= mariadb -.elif (${MYSQL_VER:C/[0-9]*//} == "p") -_MYSQL_FLAVOUR= percona -.else -_MYSQL_FLAVOUR= mysql -.endif - -_MYSQL_CLIENT= databases/${_MYSQL_FLAVOUR}${MYSQL_VER:C/[mp]//}-client -_MYSQL_SERVER= databases/${_MYSQL_FLAVOUR}${MYSQL_VER:C/[mp]//}-server - -# And now we are checking if we can use it -.if defined(MYSQL${MYSQL_VER}_LIBVER) -.if defined(IGNORE_WITH_MYSQL) -. for VER in ${IGNORE_WITH_MYSQL} -. if (${MYSQL_VER} == "${VER}") -IGNORE= cannot install: does not work with MySQL version ${MYSQL_VER} (MySQL ${IGNORE_WITH_MYSQL} not supported) -. endif -. endfor -.endif # IGNORE_WITH_MYSQL -.if (${USE_MYSQL} == "server" || ${USE_MYSQL} == "embedded") -RUN_DEPENDS+= ${LOCALBASE}/libexec/mysqld:${PORTSDIR}/${_MYSQL_SERVER} -.if (${USE_MYSQL} == "embedded") -BUILD_DEPENDS+= ${LOCALBASE}/lib/mysql/libmysqld.a:${PORTSDIR}/${_MYSQL_SERVER} -.endif -.else -LIB_DEPENDS+= libmysqlclient.so.${MYSQL${MYSQL_VER}_LIBVER}:${PORTSDIR}/${_MYSQL_CLIENT} -.endif -.else -IGNORE= cannot install: unknown MySQL version: ${MYSQL_VER} -.endif # Check for correct libs -.endif # USE_MYSQL - .if defined(USE_BDB) # TODO: avoid malformed conditional with invalid USE_BDB/WITH_BDB_VER # check if + works properly from test builds 01h12m23s