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

Diff of /eclass/mysql.eclass

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

Revision 1.142 Revision 1.156
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.142 2010/03/24 20:37:54 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.156 2010/11/28 21:55:54 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>
59# Upstream MySQL considers the first two parts of the version number to be the 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 60# major version. Upgrades that change major version should always run
61# mysql_upgrade. 61# mysql_upgrade.
62MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})" 62MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
63 63
64# Cluster is a special case...
65if [[ "${PN}" == "mysql-cluster" ]]; then
66 case $PV in
67 6.1*|7.0*|7.1*) MYSQL_PV_MAJOR=5.1 ;;
68 esac
69fi
70
71
64# @ECLASS-VARIABLE: MYSQL_VERSION_ID 72# @ECLASS-VARIABLE: MYSQL_VERSION_ID
65# @DESCRIPTION: 73# @DESCRIPTION:
66# MYSQL_VERSION_ID will be: 74# MYSQL_VERSION_ID will be:
67# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 75# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
68# This is an important part, because many of the choices the MySQL ebuild will do 76# This is an important part, because many of the choices the MySQL ebuild will do
95 MYSQL_COMMUNITY_FEATURES=1 103 MYSQL_COMMUNITY_FEATURES=1
96elif [ "${PV#5.4}" != "${PV}" ] ; then 104elif [ "${PV#5.4}" != "${PV}" ] ; then
97 MYSQL_COMMUNITY_FEATURES=1 105 MYSQL_COMMUNITY_FEATURES=1
98elif [ "${PV#5.5}" != "${PV}" ] ; then 106elif [ "${PV#5.5}" != "${PV}" ] ; then
99 MYSQL_COMMUNITY_FEATURES=1 107 MYSQL_COMMUNITY_FEATURES=1
100elif [ "${PV#6.0}" != "${PV}" ] ; then 108elif [ "${PV#6}" != "${PV}" ] ; then
109 MYSQL_COMMUNITY_FEATURES=1
110elif [ "${PV#7}" != "${PV}" ] ; then
101 MYSQL_COMMUNITY_FEATURES=1 111 MYSQL_COMMUNITY_FEATURES=1
102else 112else
103 MYSQL_COMMUNITY_FEATURES=0 113 MYSQL_COMMUNITY_FEATURES=0
104fi 114fi
105 115
124 134
125[[ "${PN}" == "mariadb" ]] \ 135[[ "${PN}" == "mariadb" ]] \
126&& DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )" 136&& DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
127 137
128# Having different flavours at the same time is not a good idea 138# Having different flavours at the same time is not a good idea
129for i in "mysql" "mysql-community" "mariadb" ; do 139for i in "mysql" "mysql-community" "mysql-cluster" "mariadb" ; do
130 [[ "${i}" == ${PN} ]] || 140 [[ "${i}" == ${PN} ]] ||
131 DEPEND="${DEPEND} !dev-db/${i}" 141 DEPEND="${DEPEND} !dev-db/${i}"
132done 142done
133 143
134RDEPEND="${DEPEND} 144RDEPEND="${DEPEND}
152# Work out the default SERVER_URI correctly 162# Work out the default SERVER_URI correctly
153if [ -z "${SERVER_URI}" ]; then 163if [ -z "${SERVER_URI}" ]; then
154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}" 164 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
155 if [ "${PN}" == "mariadb" ]; then 165 if [ "${PN}" == "mariadb" ]; then
156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})" 166 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
167 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
168 SERVER_URI="
169 http://ftp.osuosl.org/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
170 http://ftp.rediris.es/mirror/MariaDB/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
171 http://maria.llarian.net/download/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
157 SERVER_URI="http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/mariadb-${MARIA_FULL_PV}.tar.gz" 172 http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/${MARIA_FULL_P}.tar.gz
173 http://mirrors.fe.up.pt/pub/${PN}/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
174 http://ftp-stud.hs-esslingen.de/pub/Mirrors/${PN}/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
175 "
158 # The community build is on the mirrors 176 # The community and cluster builds are on the mirrors
159 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 177 elif [[ "${MYSQL_COMMUNITY_FEATURES}" == "1" || ${PN} == "mysql-cluster" ]] ; then
160 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz" 178 if [[ "${PN}" == "mysql-cluster" ]] ; then
179 URI_DIR="MySQL-Cluster"
180 URI_FILE="mysql-cluster-gpl"
181 else
182 URI_DIR="MySQL"
183 URI_FILE="mysql"
184 fi
185 URI_A="${URI_FILE}-${MY_PV}.tar.gz"
186 MIRROR_PV=$(get_version_component_range 1-2 ${PV})
187 # Recently upstream switched to an archive site, and not on mirrors
188 SERVER_URI="http://downloads.mysql.com/archives/${URI_FILE}-${MIRROR_PV}/${URI_A}
189 mirror://mysql/Downloads/${URI_DIR}-${PV%.*}/${URI_A}"
161 # The (old) enterprise source is on the primary site only 190 # The (old) enterprise source is on the primary site only
162 elif [ "${PN}" == "mysql" ]; then 191 elif [ "${PN}" == "mysql" ]; then
163 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz" 192 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz"
164 fi 193 fi
165fi 194fi
188IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test" 217IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
189 218
190mysql_version_is_at_least "4.1" \ 219mysql_version_is_at_least "4.1" \
191&& IUSE="${IUSE} latin1" 220&& IUSE="${IUSE} latin1"
192 221
193mysql_version_is_at_least "4.1.3" \ 222if mysql_version_is_at_least "4.1.3" ; then
194&& IUSE="${IUSE} cluster extraengine" 223 IUSE="${IUSE} extraengine"
224 if [[ "${PN}" != "mysql-cluster" ]] ; then
225 IUSE="${IUSE} cluster"
226 fi
227fi
195 228
196mysql_version_is_at_least "5.0" \ 229mysql_version_is_at_least "5.0" \
197|| IUSE="${IUSE} raid" 230|| IUSE="${IUSE} raid"
198 231
199mysql_version_is_at_least "5.0.18" \ 232mysql_version_is_at_least "5.0.18" \
232 && mysql_version_is_at_least "5.1.26" \ 265 && mysql_version_is_at_least "5.1.26" \
233 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] 266 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
234 return $? 267 return $?
235} 268}
236 269
270
237pbxt_patch_available \ 271pbxt_patch_available \
238&& PBXT_P="pbxt-${PBXT_VERSION}" \ 272&& PBXT_P="pbxt-${PBXT_VERSION}" \
239&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \ 273&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
240&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \ 274&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
241 275
276# PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
277# vs. built outside the dir
242pbxt_available \ 278pbxt_available \
243&& IUSE="${IUSE} pbxt" 279&& IUSE="${IUSE} pbxt" \
280&& mysql_version_is_at_least "5.1.40" \
281&& PBXT_NEWSTYLE=1
244 282
245xtradb_patch_available \ 283xtradb_patch_available \
246&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ 284&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
247&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ 285&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
248&& XTRADB_SRC_URI1="http://www.percona.com/percona-builds/xtradb/${XTRADB_SRC_URI_COMMON}" \ 286&& XTRADB_SRC_B1="http://www.percona.com/" \
287&& XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/" \
288&& XTRADB_SRC_URI1="${XTRADB_SRC_B2}/Percona-Server/Percona-Server-${XTRADB_SRC_URI_COMMON}" \
249&& XTRADB_SRC_URI2="http://www.percona.com/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \ 289&& XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}" \
290&& XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
250&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \ 291&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )" \
251&& IUSE="${IUSE} xtradb" 292&& IUSE="${IUSE} xtradb"
252 293
253# 294#
254# HELPER FUNCTIONS: 295# HELPER FUNCTIONS:
255# 296#
260mysql_disable_test() { 301mysql_disable_test() {
261 local rawtestname testname testsuite reason mysql_disable_file 302 local rawtestname testname testsuite reason mysql_disable_file
262 rawtestname="${1}" ; shift 303 rawtestname="${1}" ; shift
263 reason="${@}" 304 reason="${@}"
264 ewarn "test '${rawtestname}' disabled: '${reason}'" 305 ewarn "test '${rawtestname}' disabled: '${reason}'"
265 306
266 testsuite="${rawtestname/.*}" 307 testsuite="${rawtestname/.*}"
267 testname="${rawtestname/*.}" 308 testname="${rawtestname/*.}"
268 mysql_disable_file="${S}/mysql-test/t/disabled.def" 309 mysql_disable_file="${S}/mysql-test/t/disabled.def"
269 #einfo "rawtestname=${rawtestname} testname=${testname} testsuite=${testsuite}" 310 #einfo "rawtestname=${rawtestname} testname=${testname} testsuite=${testsuite}"
270 echo ${testname} : ${reason} >> "${mysql_disable_file}" 311 echo ${testname} : ${reason} >> "${mysql_disable_file}"
352 MY_DATADIR="${new_MY_DATADIR}" 393 MY_DATADIR="${new_MY_DATADIR}"
353 fi 394 fi
354 fi 395 fi
355 fi 396 fi
356 397
398 if [ "${MY_SOURCEDIR:-unset}" == "unset" ]; then
357 MY_SOURCEDIR=${SERVER_URI##*/} 399 MY_SOURCEDIR=${SERVER_URI##*/}
358 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*} 400 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
401 fi
359 402
360 export MY_SHAREDSTATEDIR MY_SYSCONFDIR 403 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
361 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR 404 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
362 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR 405 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
363} 406}
410 if use debug ; then 453 if use debug ; then
411 myconf="${myconf} --with-debug=full" 454 myconf="${myconf} --with-debug=full"
412 else 455 else
413 myconf="${myconf} --without-debug" 456 myconf="${myconf} --without-debug"
414 mysql_version_is_at_least "4.1.3" \ 457 mysql_version_is_at_least "4.1.3" \
415 && use cluster \ 458 && ( use cluster || [[ "${PN}" == "mysql-cluster" ]] ) \
416 && myconf="${myconf} --without-ndb-debug" 459 && myconf="${myconf} --without-ndb-debug"
417 fi 460 fi
418 461
419 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then 462 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
420 ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}" 463 ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
477 myconf="${myconf} --without-berkeley-db" 520 myconf="${myconf} --without-berkeley-db"
478 fi 521 fi
479 522
480 if mysql_version_is_at_least "4.1.3" ; then 523 if mysql_version_is_at_least "4.1.3" ; then
481 myconf="${myconf} --with-geometry" 524 myconf="${myconf} --with-geometry"
525 if [[ "${PN}" != "mysql-cluster" ]] ; then
482 myconf="${myconf} $(use_with cluster ndbcluster)" 526 myconf="${myconf} $(use_with cluster ndbcluster)"
527 fi
483 fi 528 fi
484 529
485 if mysql_version_is_at_least "4.1.3" && use extraengine ; then 530 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
486 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html 531 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
487 myconf="${myconf} --with-archive-storage-engine" 532 myconf="${myconf} --with-archive-storage-engine"
524 myconf="${myconf} --enable-assembler" 569 myconf="${myconf} --enable-assembler"
525 myconf="${myconf} --with-geometry" 570 myconf="${myconf} --with-geometry"
526 myconf="${myconf} --with-readline" 571 myconf="${myconf} --with-readline"
527 myconf="${myconf} --with-zlib-dir=/usr/" 572 myconf="${myconf} --with-zlib-dir=/usr/"
528 myconf="${myconf} --without-pstack" 573 myconf="${myconf} --without-pstack"
574 myconf="${myconf} --with-plugindir=/usr/$(get_libdir)/mysql/plugin"
575
576 # This is an explict die here, because if we just forcibly disable it, then the
577 # user's data is not accessible.
578 use max-idx-128 && die "Bug #336027: upstream has a corruption issue with max-idx-128 presently"
529 use max-idx-128 && myconf="${myconf} --with-max-indexes=128" 579 #use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
530 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 580 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
531 myconf="${myconf} $(use_enable community community-features)" 581 myconf="${myconf} $(use_enable community community-features)"
532 if use community; then 582 if use community; then
533 myconf="${myconf} $(use_enable profiling)" 583 myconf="${myconf} $(use_enable profiling)"
534 else 584 else
535 myconf="${myconf} --disable-profiling" 585 myconf="${myconf} --disable-profiling"
536 fi 586 fi
537 fi 587 fi
538 588
589 # Scan for all available plugins
590 local plugins_avail="$(
591 LANG=C \
592 find "${S}" \
593 \( \
594 -name 'plug.in' \
595 -o -iname 'configure.in' \
596 -o -iname 'configure.ac' \
597 \) \
598 -print0 \
599 | xargs -0 sed -r -n \
600 -e '/^MYSQL_STORAGE_ENGINE/{
601 s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ;
602 s~^([^ ]+).*~\1~gp;
603 }' \
604 | tr -s '\n' ' '
605 )"
606
539 # 5.1 introduces a new way to manage storage engines (plugins) 607 # 5.1 introduces a new way to manage storage engines (plugins)
540 # like configuration=none 608 # like configuration=none
541 # This base set are required, and will always be statically built. 609 # This base set are required, and will always be statically built.
542 local plugins="csv,myisam,myisammrg,heap" 610 local plugins_sta="csv myisam myisammrg heap"
611 local plugins_dyn=""
612 local plugins_dis="example ibmdb2i"
613
614 # These aren't actually required by the base set, but are really useful:
615 plugins_sta="${plugins_sta} archive blackhole"
616
617 # default in 5.5.4
618 if mysql_version_is_at_least "5.5.4" ; then
619 plugins_sta="${plugins_sta} partition"
620 fi
621 # Now the extras
543 if use extraengine ; then 622 if use extraengine ; then
544 # like configuration=max-no-ndb, archive and example removed in 5.1.11 623 # like configuration=max-no-ndb, archive and example removed in 5.1.11
545 # not added yet: ibmdb2i 624 # not added yet: ibmdb2i
546 # Not supporting as examples: example,daemon_example,ftexample 625 # Not supporting as examples: example,daemon_example,ftexample
547 plugins="${plugins},archive,blackhole,federated,partition" 626 plugins_sta="${plugins_sta} partition"
627 plugins_dyn="${plugins_sta} federated"
548 628
549 if [[ "${PN}" != "mariadb" ]] ; then 629 if [[ "${PN}" != "mariadb" ]] ; then
550 elog "Before using the Federated storage engine, please be sure to read" 630 elog "Before using the Federated storage engine, please be sure to read"
551 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 631 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
552 else 632 else
553 elog "MariaDB includes the FederatedX engine. Be sure to read" 633 elog "MariaDB includes the FederatedX engine. Be sure to read"
554 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine" 634 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
555 fi 635 fi
636 else
637 plugins_dis="${plugins_dis} partition federated"
556 fi 638 fi
557 639
558 # Upstream specifically requests that InnoDB always be built: 640 # Upstream specifically requests that InnoDB always be built:
559 # - innobase, innodb_plugin 641 # - innobase, innodb_plugin
560 # Build falcon if available for 6.x series. 642 # Build falcon if available for 6.x series.
561 for i in innobase innodb_plugin falcon ; do 643 for i in innobase falcon ; do
562 [ -e "${S}"/storage/${i} ] && plugins="${plugins},${i}" 644 [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
563 done 645 done
646 for i in innodb_plugin ; do
647 [ -e "${S}"/storage/${i} ] && plugins_dyn="${plugins_dyn} ${i}"
648 done
564 649
565 # like configuration=max-no-ndb 650 # like configuration=max-no-ndb
566 if use cluster ; then 651 if ( use cluster || [[ "${PN}" == "mysql-cluster" ]] ) ; then
567 plugins="${plugins},ndbcluster" 652 plugins_sta="${plugins_sta} ndbcluster partition"
653 plugins_dis="${plugins_dis//partition}"
568 myconf="${myconf} --with-ndb-binlog" 654 myconf="${myconf} --with-ndb-binlog"
655 else
656 plugins_dis="${plugins_dis} ndbcluster"
569 fi 657 fi
570 658
571 if [[ "${PN}" == "mariadb" ]] ; then 659 if [[ "${PN}" == "mariadb" ]] ; then
572 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not 660 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
573 # caught above. 661 # caught above.
574 plugins="${plugins},maria,innobase" 662 plugins_sta="${plugins_sta} maria"
575 if use pbxt ; then 663
576 plugins="${plugins},pbxt" 664 [ -e "${S}"/storage/innobase ] || [ -e "${S}"/storage/xtradb ] ||
577 else 665 die "The ${P} package doesn't provide innobase nor xtradb"
578 myconf="${myconf} --without-plugin-pbxt" 666
579 fi 667 for i in innobase xtradb ; do
668 [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
669 done
670
580 myconf="${myconf} $(use_with libevent)" 671 myconf="${myconf} $(use_with libevent)"
581 # This is not optional, without it several upstream testcases fail. 672 # This is not optional, without it several upstream testcases fail.
582 # Also strongly recommended by upstream. 673 # Also strongly recommended by upstream.
583 myconf="${myconf} --with-maria-tmp-tables" 674 myconf="${myconf} --with-maria-tmp-tables"
584 fi 675 fi
585 676
677 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
678 use pbxt \
679 && plugins_dyn="${plugins_dyn} pbxt" \
680 || plugins_dis="${plugins_dis} pbxt"
681 fi
682
683 use static && \
684 plugins_sta="${plugins_sta} ${plugins_dyn}" && \
685 plugins_dyn=""
686
687 einfo "Available plugins: ${plugins_avail}"
688 einfo "Dynamic plugins: ${plugins_dyn}"
689 einfo "Static plugins: ${plugins_sta}"
690 einfo "Disabled plugins: ${plugins_dis}"
691
692 # These are the static plugins
586 myconf="${myconf} --with-plugins=${plugins}" 693 myconf="${myconf} --with-plugins=${plugins_sta// /,}"
694 # And the disabled ones
695 for i in ${plugins_dis} ; do
696 myconf="${myconf} --without-plugin-${i}"
697 done
587} 698}
588 699
589pbxt_src_configure() { 700pbxt_src_configure() {
590 mysql_init_vars 701 mysql_init_vars
591 702
592 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null 703 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
593 704
594 einfo "Reconfiguring dir '${PWD}'" 705 einfo "Reconfiguring dir '${PWD}'"
595 AT_GNUCONF_UPDATE="yes" eautoreconf 706 eautoreconf
596 707
597 local myconf="" 708 local myconf=""
598 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)" 709 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
599 use debug && myconf="${myconf} --with-debug=full" 710 use debug && myconf="${myconf} --with-debug=full"
600 econf ${myconf} || die "Problem configuring PBXT storage engine" 711 econf ${myconf} || die "Problem configuring PBXT storage engine"
601} 712}
602 713
603pbxt_src_compile() { 714pbxt_src_compile() {
715
604 # Be backwards compatible for now 716 # Be backwards compatible for now
605 if [[ $EAPI != 2 ]]; then 717 if [[ $EAPI != 2 ]]; then
606 pbxt_src_configure 718 pbxt_src_configure
607 fi 719 fi
608 # TODO: is it safe/needed to use emake here ? 720 # TODO: is it safe/needed to use emake here ?
637 fi 749 fi
638 fi 750 fi
639 751
640 # Check for USE flag problems in pkg_setup 752 # Check for USE flag problems in pkg_setup
641 if use static && use ssl ; then 753 if use static && use ssl ; then
642 eerror "MySQL does not support being built statically with SSL support enabled!"
643 die "MySQL does not support being built statically with SSL support enabled!" 754 M="MySQL does not support being built statically with SSL support enabled!"
755 eerror "${M}"
756 die "${M}"
757 fi
758
759 if mysql_version_is_at_least "5.1.51" \
760 && ! mysql_version_is_at_least "5.2" \
761 && use debug ; then
762 # Also in package.use.mask
763 die "Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51"
644 fi 764 fi
645 765
646 if ! mysql_version_is_at_least "5.0" \ 766 if ! mysql_version_is_at_least "5.0" \
647 && use raid \ 767 && use raid \
648 && use static ; then 768 && use static ; then
650 eerror "with RAID support enabled." 770 eerror "with RAID support enabled."
651 die "USE flags 'raid' and 'static' conflict!" 771 die "USE flags 'raid' and 'static' conflict!"
652 fi 772 fi
653 773
654 if mysql_version_is_at_least "4.1.3" \ 774 if mysql_version_is_at_least "4.1.3" \
655 && ( use cluster || use extraengine ) \ 775 && ( use cluster || use extraengine || use embedded ) \
656 && use minimal ; then 776 && use minimal ; then
657 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
658 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 777 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
778 eerror "${M}"
779 die "${M}"
659 fi 780 fi
660 781
661 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
662 if mysql_version_is_at_least "5.0.83" ; then 782 if mysql_version_is_at_least "5.1" \
783 && xtradb_patch_available \
784 && use xtradb \
785 && use embedded ; then
786 M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
787 eerror "${M}"
788 die "${M}"
789 fi
790
791 # Bug #290570, 284946, 307251
792 # Upstream changes made us need a fairly new GCC4.
793 # But only for 5.0.8[3-6]!
794 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
663 GCC_VER=$(gcc-version) 795 GCC_VER=$(gcc-version)
664 case ${GCC_VER} in 796 case ${GCC_VER} in
665 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; 797 2*|3*|4.0|4.1|4.2)
798 eerror "Some releases of MySQL required a very new GCC, and then"
799 eerror "later release relaxed that requirement again. Either pick a"
800 eerror "MySQL >=5.0.87, or use a newer GCC."
801 die "Active GCC too old!" ;;
666 esac 802 esac
667 fi 803 fi
668 804
669 # This should come after all of the die statements 805 # This should come after all of the die statements
670 enewgroup mysql 60 || die "problem adding 'mysql' group" 806 enewgroup mysql 60 || die "problem adding 'mysql' group"
720 mysql_mv_patches 856 mysql_mv_patches
721 # And apply 857 # And apply
722 epatch 858 epatch
723 859
724 # last -fPIC fixup, per bug #305873 860 # last -fPIC fixup, per bug #305873
725 i="${S}"/storage/innodb_plugin/plug.in 861 i="${S}"/storage/innodb_plugin/plug.in
726 [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}" 862 [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}"
727 863
728 # Additional checks, remove bundled zlib 864 # Additional checks, remove bundled zlib (Cluster needs this, for static
865 # memory management in zlib, leave available for Cluster)
866 if [[ "${PN}" != "mysql-cluster" ]] ; then
729 rm -f "${S}/zlib/"*.[ch] 867 rm -f "${S}/zlib/"*.[ch]
730 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in" 868 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
869 fi
731 rm -f "scripts/mysqlbug" 870 rm -f "scripts/mysqlbug"
732 871
733 # Make charsets install in the right place 872 # Make charsets install in the right place
734 find . -name 'Makefile.am' \ 873 find . -name 'Makefile.am' \
735 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \; 874 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
746 fi 885 fi
747 886
748 local rebuilddirlist d 887 local rebuilddirlist d
749 888
750 if xtradb_patch_available && use xtradb ; then 889 if xtradb_patch_available && use xtradb ; then
751 einfo "Replacing InnoDB with Percona XtraDB" 890 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
752 pushd "${S}"/storage 891 pushd "${S}"/storage >/dev/null
753 i="innobase" 892 i="innobase"
754 o="${WORKDIR}/storage-${i}.mysql-upstream" 893 o="${WORKDIR}/storage-${i}.mysql-upstream"
755 # Have we been here already? 894 # Have we been here already?
756 [ -d "${o}" ] && rm -f "${i}" 895 [ -d "${o}" ] && rm -f "${i}"
757 # Or maybe we haven't 896 # Or maybe we haven't
758 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 897 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
759 cp -ra "${WORKDIR}/${XTRADB_P}" "${i}" 898 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
760 popd 899 popd >/dev/null
900 fi
901
902 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
903 einfo "Adding storage engine: PBXT"
904 pushd "${S}"/storage >/dev/null
905 i='pbxt'
906 [ -d "${i}" ] && rm -rf "${i}"
907 cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
908 popd >/dev/null
761 fi 909 fi
762 910
763 if mysql_version_is_at_least "5.1.12" ; then 911 if mysql_version_is_at_least "5.1.12" ; then
764 rebuilddirlist="." 912 rebuilddirlist="."
765 # This does not seem to be needed presently. robbat2 2010/02/23 913 # This does not seem to be needed presently. robbat2 2010/02/23
774 fi 922 fi
775 923
776 for d in ${rebuilddirlist} ; do 924 for d in ${rebuilddirlist} ; do
777 einfo "Reconfiguring dir '${d}'" 925 einfo "Reconfiguring dir '${d}'"
778 pushd "${d}" &>/dev/null 926 pushd "${d}" &>/dev/null
779 AT_GNUCONF_UPDATE="yes" eautoreconf 927 eautoreconf
780 popd &>/dev/null 928 popd &>/dev/null
781 done 929 done
782 930
783 if mysql_check_version_range "4.1 to 5.0.99.99" \ 931 if mysql_check_version_range "4.1 to 5.0.99.99" \
784 && use berkdb ; then 932 && use berkdb ; then
839 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 987 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
840 export CXXFLAGS 988 export CXXFLAGS
841 989
842 # bug #283926, with GCC4.4, this is required to get correct behavior. 990 # bug #283926, with GCC4.4, this is required to get correct behavior.
843 append-flags -fno-strict-aliasing 991 append-flags -fno-strict-aliasing
992
993 # bug #335185, #335995, with >= GCC4.3.3 on x86 only, omit-frame-pointer
994 # causes a mis-compile.
995 # Upstream bugs:
996 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38562
997 # http://bugs.mysql.com/bug.php?id=45205
998 use x86 && version_is_at_least "4.3.3" "$(gcc-fullversion)" && \
999 append-flags -fno-omit-frame-pointer && \
1000 filter-flags -fomit-frame-pointer
844 1001
845 econf \ 1002 econf \
846 --libexecdir="/usr/sbin" \ 1003 --libexecdir="/usr/sbin" \
847 --sysconfdir="${MY_SYSCONFDIR}" \ 1004 --sysconfdir="${MY_SYSCONFDIR}" \
848 --localstatedir="${MY_LOCALSTATEDIR}" \ 1005 --localstatedir="${MY_LOCALSTATEDIR}" \
859 # TODO: Move this before autoreconf !!! 1016 # TODO: Move this before autoreconf !!!
860 find . -type f -name Makefile -print0 \ 1017 find . -type f -name Makefile -print0 \
861 | xargs -0 -n100 sed -i \ 1018 | xargs -0 -n100 sed -i \
862 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 1019 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
863 1020
864 if [[ $EAPI == 2 ]]; then 1021 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
865 pbxt_patch_available && use pbxt && pbxt_src_configure 1022 pbxt_patch_available && use pbxt && pbxt_src_configure
866 fi 1023 fi
867} 1024}
868 1025
869# @FUNCTION: mysql_src_compile 1026# @FUNCTION: mysql_src_compile
876 0 | 1) mysql_src_configure ;; 1033 0 | 1) mysql_src_configure ;;
877 esac 1034 esac
878 1035
879 emake || die "emake failed" 1036 emake || die "emake failed"
880 1037
1038 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
881 pbxt_patch_available && use pbxt && pbxt_src_compile 1039 pbxt_patch_available && use pbxt && pbxt_src_compile
1040 fi
882} 1041}
883 1042
884# @FUNCTION: mysql_src_install 1043# @FUNCTION: mysql_src_install
885# @DESCRIPTION: 1044# @DESCRIPTION:
886# Install mysql. 1045# Install mysql.
892 DESTDIR="${D}" \ 1051 DESTDIR="${D}" \
893 benchdir_root="${MY_SHAREDSTATEDIR}" \ 1052 benchdir_root="${MY_SHAREDSTATEDIR}" \
894 testroot="${MY_SHAREDSTATEDIR}" \ 1053 testroot="${MY_SHAREDSTATEDIR}" \
895 || die "emake install failed" 1054 || die "emake install failed"
896 1055
1056 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
897 pbxt_patch_available && use pbxt && pbxt_src_install 1057 pbxt_patch_available && use pbxt && pbxt_src_install
1058 fi
898 1059
899 # Convenience links 1060 # Convenience links
900 einfo "Making Convenience links for mysqlcheck multi-call binary" 1061 einfo "Making Convenience links for mysqlcheck multi-call binary"
901 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 1062 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
902 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 1063 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
926 if use !test ; then 1087 if use !test ; then
927 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test 1088 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
928 fi 1089 fi
929 1090
930 # Configuration stuff 1091 # Configuration stuff
931 if mysql_version_is_at_least "5.1" ; then 1092 case ${MYSQL_PV_MAJOR} in
932 mysql_mycnf_version="5.1"
933 elif mysql_version_is_at_least "4.1" ; then
934 mysql_mycnf_version="4.1"
935 else
936 mysql_mycnf_version="4.0" 1093 3*|4.0) mysql_mycnf_version="4.0" ;;
937 fi 1094 4.[1-9]|5.0) mysql_mycnf_version="4.1" ;;
938 einfo "Building default my.cnf" 1095 5.[1-9]|6*|7*) mysql_mycnf_version="5.1" ;;
1096 esac
1097 einfo "Building default my.cnf (${mysql_mycnf_version})"
939 insinto "${MY_SYSCONFDIR}" 1098 insinto "${MY_SYSCONFDIR}"
940 doins scripts/mysqlaccess.conf 1099 doins scripts/mysqlaccess.conf
1100 mycnf_src="my.cnf-${mysql_mycnf_version}"
941 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 1101 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
942 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 1102 "${FILESDIR}/${mycnf_src}" \
943 > "${TMPDIR}/my.cnf.ok" 1103 > "${TMPDIR}/my.cnf.ok"
944 if mysql_version_is_at_least "4.1" && use latin1 ; then 1104 if use latin1 ; then
945 sed -i \ 1105 sed -i \
946 -e "/character-set/s|utf8|latin1|g" \ 1106 -e "/character-set/s|utf8|latin1|g" \
947 "${TMPDIR}/my.cnf.ok" 1107 "${TMPDIR}/my.cnf.ok"
948 fi 1108 fi
949 newins "${TMPDIR}/my.cnf.ok" my.cnf 1109 newins "${TMPDIR}/my.cnf.ok" my.cnf
1043 1203
1044 einfo 1204 einfo
1045 elog "You might want to run:" 1205 elog "You might want to run:"
1046 elog "\"emerge --config =${CATEGORY}/${PF}\"" 1206 elog "\"emerge --config =${CATEGORY}/${PF}\""
1047 elog "if this is a new install." 1207 elog "if this is a new install."
1208 einfo
1209
1210 einfo
1211 elog "If you are upgrading major versions, you should run the"
1212 elog "mysql_upgrade tool."
1048 einfo 1213 einfo
1049 fi 1214 fi
1050 1215
1051 if pbxt_available && use pbxt ; then 1216 if pbxt_available && use pbxt ; then
1052 # TODO: explain it better 1217 # TODO: explain it better
1168 # Figure out which options we need to disable to do the setup 1333 # Figure out which options we need to disable to do the setup
1169 helpfile="${TMPDIR}/mysqld-help" 1334 helpfile="${TMPDIR}/mysqld-help"
1170 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null 1335 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1171 for opt in grant-tables host-cache name-resolve networking slave-start bdb \ 1336 for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1172 federated innodb ssl log-bin relay-log slow-query-log external-locking \ 1337 federated innodb ssl log-bin relay-log slow-query-log external-locking \
1338 ndbcluster \
1173 ; do 1339 ; do
1174 optexp="--(skip-)?${opt}" optfull="--skip-${opt}" 1340 optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1175 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}" 1341 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1176 done 1342 done
1177 # But some options changed names 1343 # But some options changed names
1185 1351
1186 if [[ -r "${help_tables}" ]] ; then 1352 if [[ -r "${help_tables}" ]] ; then
1187 cat "${help_tables}" >> "${sqltmp}" 1353 cat "${help_tables}" >> "${sqltmp}"
1188 fi 1354 fi
1189 fi 1355 fi
1190 1356
1191 einfo "Creating the mysql database and setting proper" 1357 einfo "Creating the mysql database and setting proper"
1192 einfo "permissions on it ..." 1358 einfo "permissions on it ..."
1193 1359
1194 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock" 1360 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1195 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid" 1361 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1198 --user=mysql \ 1364 --user=mysql \
1199 --basedir=${ROOT}/usr \ 1365 --basedir=${ROOT}/usr \
1200 --datadir=${ROOT}/${MY_DATADIR} \ 1366 --datadir=${ROOT}/${MY_DATADIR} \
1201 --max_allowed_packet=8M \ 1367 --max_allowed_packet=8M \
1202 --net_buffer_length=16K \ 1368 --net_buffer_length=16K \
1369 --default-storage-engine=MyISAM \
1203 --socket=${socket} \ 1370 --socket=${socket} \
1204 --pid-file=${pidfile}" 1371 --pid-file=${pidfile}"
1205 #einfo "About to start mysqld: ${mysqld}" 1372 #einfo "About to start mysqld: ${mysqld}"
1206 ebegin "Starting mysqld" 1373 ebegin "Starting mysqld"
1207 ${mysqld} & 1374 ${mysqld} &

Legend:
Removed from v.1.142  
changed lines
  Added in v.1.156

  ViewVC Help
Powered by ViewVC 1.1.20