/[gentoo-x86]/eclass/mysql.eclass
Gentoo

Diff of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.136 Revision 1.137
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2009 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.136 2010/03/09 20:37:34 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.137 2010/03/15 18:50:43 robbat2 Exp $
4 4
5# @ECLASS: mysql.eclass 5# @ECLASS: mysql.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Author: Francesco Riosa (Retired) <vivo@gentoo.org> 7# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
8# Maintainers: MySQL Team <mysql-bugs@gentoo.org> 8# Maintainers: MySQL Team <mysql-bugs@gentoo.org>
51 ;; 51 ;;
52 *) 52 *)
53 die "Unsupported EAPI: ${EAPI}" ;; 53 die "Unsupported EAPI: ${EAPI}" ;;
54esac 54esac
55 55
56
57# @ECLASS-VARIABLE: MYSQL_PV_MAJOR
58# @DESCRIPTION:
59# Upstream MySQL considers the first two parts of the version number to be the
60# major version. Upgrades that change major version should always run
61# mysql_upgrade.
62MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
63
56# @ECLASS-VARIABLE: MYSQL_VERSION_ID 64# @ECLASS-VARIABLE: MYSQL_VERSION_ID
57# @DESCRIPTION: 65# @DESCRIPTION:
58# MYSQL_VERSION_ID will be: 66# MYSQL_VERSION_ID will be:
59# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 67# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
60# This is an important part, because many of the choices the MySQL ebuild will do 68# This is an important part, because many of the choices the MySQL ebuild will do
77# @DESCRIPTION: 85# @DESCRIPTION:
78# Specifiy if community features are available. Possible values are 1 (yes) 86# Specifiy if community features are available. Possible values are 1 (yes)
79# and 0 (no). 87# and 0 (no).
80# Community features are available in mysql-community 88# Community features are available in mysql-community
81# AND in the re-merged mysql-5.0.82 and newer 89# AND in the re-merged mysql-5.0.82 and newer
82if [ "${PN}" == "mysql-community" ]; then 90if [ "${PN}" == "mysql-community" -o "${PN}" == "mariadb" ]; then
83 MYSQL_COMMUNITY_FEATURES=1 91 MYSQL_COMMUNITY_FEATURES=1
84elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then 92elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
85 MYSQL_COMMUNITY_FEATURES=1 93 MYSQL_COMMUNITY_FEATURES=1
86elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then 94elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
87 MYSQL_COMMUNITY_FEATURES=1 95 MYSQL_COMMUNITY_FEATURES=1
112 >=sys-apps/sed-4 120 >=sys-apps/sed-4
113 >=sys-apps/texinfo-4.7-r1 121 >=sys-apps/texinfo-4.7-r1
114 >=sys-libs/readline-4.1 122 >=sys-libs/readline-4.1
115 >=sys-libs/zlib-1.2.3" 123 >=sys-libs/zlib-1.2.3"
116 124
125[[ "${PN}" == "mariadb" ]] \
126&& DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
127
117# Having different flavours at the same time is not a good idea 128# Having different flavours at the same time is not a good idea
118for i in "" "-community" ; do 129for i in "mysql" "mysql-community" "mariadb" ; do
119 [[ "${i}" == ${PN#mysql} ]] || 130 [[ "${i}" == ${PN} ]] ||
120 DEPEND="${DEPEND} !dev-db/mysql${i}" 131 DEPEND="${DEPEND} !dev-db/${i}"
121done 132done
122 133
123RDEPEND="${DEPEND} 134RDEPEND="${DEPEND}
124 !minimal? ( dev-db/mysql-init-scripts ) 135 !minimal? ( dev-db/mysql-init-scripts )
125 selinux? ( sec-policy/selinux-mysql )" 136 selinux? ( sec-policy/selinux-mysql )"
134 145
135# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 146# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
136PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 147PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
137 148
138# For other stuff to bring us in 149# For other stuff to bring us in
139PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})" 150PDEPEND="${PDEPEND} =virtual/mysql-${MYSQL_PV_MAJOR}"
140 151
141# Work out the default SERVER_URI correctly 152# Work out the default SERVER_URI correctly
142if [ -z "${SERVER_URI}" ]; then 153if [ -z "${SERVER_URI}" ]; then
143 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}" 154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
155 if [ "${PN}" == "mariadb" ]; then
156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
157 SERVER_URI="http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/mariadb-${MARIA_FULL_PV}.tar.gz"
144 # The community build is on the mirrors 158 # The community build is on the mirrors
145 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 159 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
146 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz" 160 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz"
147 # The (old) enterprise source is on the primary site only 161 # The (old) enterprise source is on the primary site only
148 elif [ "${PN}" == "mysql" ]; then 162 elif [ "${PN}" == "mysql" ]; then
149 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz" 163 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz"
150 fi 164 fi
160 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2 174 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
161 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" 175 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
162 176
163DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 177DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
164HOMEPAGE="http://www.mysql.com/" 178HOMEPAGE="http://www.mysql.com/"
179if [[ "${PN}" == "mariadb" ]]; then
180 HOMEPAGE="http://askmonty.org/"
181 DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged."
182fi
165LICENSE="GPL-2" 183LICENSE="GPL-2"
166SLOT="0" 184SLOT="0"
167IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test" 185IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
168 186
169mysql_version_is_at_least "4.1" \ 187mysql_version_is_at_least "4.1" \
182|| IUSE="${IUSE} berkdb" 200|| IUSE="${IUSE} berkdb"
183 201
184[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \ 202[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
185&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling" 203&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
186 204
187# PBXT engine 205[[ "${PN}" == "mariadb" ]] \
206&& IUSE="${IUSE} libevent"
207
208# MariaDB has integrated PBXT
209# PBXT_VERSION means that we have a PBXT patch for this PV
210# PBXT was only introduced after 5.1.12
211pbxt_patch_available() {
212 [[ "${PN}" != "mariadb" ]] \
188mysql_version_is_at_least "5.1.12" \ 213 && mysql_version_is_at_least "5.1.12" \
189&& [[ -n "${PBXT_VERSION}" ]] \ 214 && [[ -n "${PBXT_VERSION}" ]]
215 return $?
216}
217
218pbxt_available() {
219 pbxt_patch_available || [[ "${PN}" == "mariadb" ]]
220 return $?
221}
222
223# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
224# MariaDB has integrated XtraDB
225# XTRADB_VERS means that we have a XTRADB patch for this PV
226# XTRADB was only introduced after 5.1.26
227xtradb_patch_available() {
228 [[ "${PN}" != "mariadb" ]] \
229 && mysql_version_is_at_least "5.1.26" \
230 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
231 return $?
232}
233
234pbxt_patch_available \
190&& PBXT_P="pbxt-${PBXT_VERSION}" \ 235&& PBXT_P="pbxt-${PBXT_VERSION}" \
191&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \ 236&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
192&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \ 237&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
238
239pbxt_available \
193&& IUSE="${IUSE} pbxt" 240&& IUSE="${IUSE} pbxt"
194 241
195# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set 242xtradb_patch_available \
196mysql_version_is_at_least "5.1.26" \
197&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
198&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ 243&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
199&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ 244&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
200&& XTRADB_SRC_URI1="http://www.percona.com/percona-builds/xtradb/${XTRADB_SRC_URI_COMMON}" \ 245&& XTRADB_SRC_URI1="http://www.percona.com/percona-builds/xtradb/${XTRADB_SRC_URI_COMMON}" \
201&& XTRADB_SRC_URI2="http://www.percona.com/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \ 246&& XTRADB_SRC_URI2="http://www.percona.com/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
202&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \ 247&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \
495 # like configuration=max-no-ndb, archive and example removed in 5.1.11 540 # like configuration=max-no-ndb, archive and example removed in 5.1.11
496 # not added yet: ibmdb2i 541 # not added yet: ibmdb2i
497 # Not supporting as examples: example,daemon_example,ftexample 542 # Not supporting as examples: example,daemon_example,ftexample
498 plugins="${plugins},archive,blackhole,federated,partition" 543 plugins="${plugins},archive,blackhole,federated,partition"
499 544
545 if [[ "${PN}" != "mariadb" ]] ; then
500 elog "Before using the Federated storage engine, please be sure to read" 546 elog "Before using the Federated storage engine, please be sure to read"
501 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 547 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
548 else
549 elog "MariaDB includes the FederatedX engine. Be sure to read"
550 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
551 fi
502 fi 552 fi
503 553
504 # Upstream specifically requests that InnoDB always be built: 554 # Upstream specifically requests that InnoDB always be built:
505 # - innobase, innodb_plugin 555 # - innobase, innodb_plugin
506 # Build falcon if available for 6.x series. 556 # Build falcon if available for 6.x series.
512 if use cluster ; then 562 if use cluster ; then
513 plugins="${plugins},ndbcluster" 563 plugins="${plugins},ndbcluster"
514 myconf="${myconf} --with-ndb-binlog" 564 myconf="${myconf} --with-ndb-binlog"
515 fi 565 fi
516 566
567 if [[ "${PN}" == "mariadb" ]] ; then
568 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
569 # caught above.
570 plugins="${plugins},maria,innobase"
571 if use pbxt ; then
572 plugins="${plugins},pbxt"
573 else
574 myconf="${myconf} --without-plugin-pbxt"
575 fi
576 myconf="${myconf} $(use_with libevent)"
577 # This is not optional, without it several upstream testcases fail.
578 # Also strongly recommended by upstream.
579 myconf="${myconf} --with-maria-tmp-tables"
580 fi
581
517 myconf="${myconf} --with-plugins=${plugins}" 582 myconf="${myconf} --with-plugins=${plugins}"
518}
519
520xtradb_applicable() {
521 mysql_version_is_at_least "5.1.26" \
522 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
523 && use xtradb
524 return $?
525}
526
527pbxt_applicable() {
528 mysql_version_is_at_least "5.1.12" \
529 && [[ -n "${PBXT_VERSION}" ]] \
530 && use pbxt
531 return $?
532} 583}
533 584
534pbxt_src_configure() { 585pbxt_src_configure() {
535 mysql_init_vars 586 mysql_init_vars
536 587
691 rm -f "scripts/mysqlbug" 742 rm -f "scripts/mysqlbug"
692 fi 743 fi
693 744
694 local rebuilddirlist d 745 local rebuilddirlist d
695 746
696 if xtradb_applicable ; then 747 if xtradb_patch_available && use xtradb ; then
697 einfo "Replacing InnoDB with Percona XtraDB" 748 einfo "Replacing InnoDB with Percona XtraDB"
698 pushd "${S}"/storage 749 pushd "${S}"/storage
699 i="innobase" 750 i="innobase"
700 o="${WORKDIR}/storage-${i}.mysql-upstream" 751 o="${WORKDIR}/storage-${i}.mysql-upstream"
701 # Have we been here already? 752 # Have we been here already?
806 find . -type f -name Makefile -print0 \ 857 find . -type f -name Makefile -print0 \
807 | xargs -0 -n100 sed -i \ 858 | xargs -0 -n100 sed -i \
808 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 859 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
809 860
810 if [[ $EAPI == 2 ]]; then 861 if [[ $EAPI == 2 ]]; then
811 pbxt_applicable && pbxt_src_configure 862 pbxt_patch_available && use pbxt && pbxt_src_configure
812 fi 863 fi
813} 864}
814 865
815# @FUNCTION: mysql_src_compile 866# @FUNCTION: mysql_src_compile
816# @DESCRIPTION: 867# @DESCRIPTION:
817# Compile the mysql code. 868# Compile the mysql code.
818mysql_src_compile() { 869mysql_src_compile() {
819 # Be backwards compatible for now 870 # Be backwards compatible for now
820 case ${EAPI:-0} in 871 case ${EAPI:-0} in
821 2) : ;; 872 2) : ;;
822 0 | 1) mysql_src_configure ;; 873 0 | 1) mysql_src_configure ;;
823 esac 874 esac
824 875
825 emake || die "emake failed" 876 emake || die "emake failed"
826 877
827 pbxt_applicable && pbxt_src_compile 878 pbxt_patch_available && use pbxt && pbxt_src_compile
828} 879}
829 880
830# @FUNCTION: mysql_src_install 881# @FUNCTION: mysql_src_install
831# @DESCRIPTION: 882# @DESCRIPTION:
832# Install mysql. 883# Install mysql.
838 DESTDIR="${D}" \ 889 DESTDIR="${D}" \
839 benchdir_root="${MY_SHAREDSTATEDIR}" \ 890 benchdir_root="${MY_SHAREDSTATEDIR}" \
840 testroot="${MY_SHAREDSTATEDIR}" \ 891 testroot="${MY_SHAREDSTATEDIR}" \
841 || die "emake install failed" 892 || die "emake install failed"
842 893
843 pbxt_applicable && pbxt_src_install 894 pbxt_patch_available && use pbxt && pbxt_src_install
844 895
845 # Convenience links 896 # Convenience links
846 einfo "Making Convenience links for mysqlcheck multi-call binary" 897 einfo "Making Convenience links for mysqlcheck multi-call binary"
847 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 898 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
848 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 899 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
970 for script in \ 1021 for script in \
971 support-files/my-*.cnf \ 1022 support-files/my-*.cnf \
972 support-files/magic \ 1023 support-files/magic \
973 support-files/ndb-config-2-node.ini 1024 support-files/ndb-config-2-node.ini
974 do 1025 do
1026 [[ -f "${script}" ]] \
975 dodoc "${script}" 1027 && dodoc "${script}"
976 done 1028 done
977 1029
978 docinto "scripts" 1030 docinto "scripts"
979 for script in scripts/mysql* ; do 1031 for script in scripts/mysql* ; do
1032 [[ -f "${script}" ]] \
980 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 1033 && [[ "${script%.sh}" == "${script}" ]] \
1034 && dodoc "${script}"
981 done 1035 done
982 1036
983 einfo 1037 einfo
984 elog "You might want to run:" 1038 elog "You might want to run:"
985 elog "\"emerge --config =${CATEGORY}/${PF}\"" 1039 elog "\"emerge --config =${CATEGORY}/${PF}\""
986 elog "if this is a new install." 1040 elog "if this is a new install."
987 einfo 1041 einfo
988 fi 1042 fi
989 1043
990 if pbxt_applicable ; then 1044 if pbxt_available && use pbxt ; then
991 # TODO: explain it better 1045 # TODO: explain it better
992 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';" 1046 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
993 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;" 1047 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
994 elog "if, after that, you cannot start the MySQL server," 1048 elog "if, after that, you cannot start the MySQL server,"
995 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then" 1049 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"

Legend:
Removed from v.1.136  
changed lines
  Added in v.1.137

  ViewVC Help
Powered by ViewVC 1.1.20