/[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.154
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.154 2010/10/28 20:46:11 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}"
644 fi 757 fi
645 758
646 if ! mysql_version_is_at_least "5.0" \ 759 if ! mysql_version_is_at_least "5.0" \
647 && use raid \ 760 && use raid \
648 && use static ; then 761 && use static ; then
650 eerror "with RAID support enabled." 763 eerror "with RAID support enabled."
651 die "USE flags 'raid' and 'static' conflict!" 764 die "USE flags 'raid' and 'static' conflict!"
652 fi 765 fi
653 766
654 if mysql_version_is_at_least "4.1.3" \ 767 if mysql_version_is_at_least "4.1.3" \
655 && ( use cluster || use extraengine ) \ 768 && ( use cluster || use extraengine || use embedded ) \
656 && use minimal ; then 769 && 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!" 770 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
771 eerror "${M}"
772 die "${M}"
659 fi 773 fi
660 774
661 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
662 if mysql_version_is_at_least "5.0.83" ; then 775 if mysql_version_is_at_least "5.1" \
776 && xtradb_patch_available \
777 && use xtradb \
778 && use embedded ; then
779 M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
780 eerror "${M}"
781 die "${M}"
782 fi
783
784 # Bug #290570, 284946, 307251
785 # Upstream changes made us need a fairly new GCC4.
786 # But only for 5.0.8[3-6]!
787 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
663 GCC_VER=$(gcc-version) 788 GCC_VER=$(gcc-version)
664 case ${GCC_VER} in 789 case ${GCC_VER} in
665 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; 790 2*|3*|4.0|4.1|4.2)
791 eerror "Some releases of MySQL required a very new GCC, and then"
792 eerror "later release relaxed that requirement again. Either pick a"
793 eerror "MySQL >=5.0.87, or use a newer GCC."
794 die "Active GCC too old!" ;;
666 esac 795 esac
667 fi 796 fi
668 797
669 # This should come after all of the die statements 798 # This should come after all of the die statements
670 enewgroup mysql 60 || die "problem adding 'mysql' group" 799 enewgroup mysql 60 || die "problem adding 'mysql' group"
720 mysql_mv_patches 849 mysql_mv_patches
721 # And apply 850 # And apply
722 epatch 851 epatch
723 852
724 # last -fPIC fixup, per bug #305873 853 # last -fPIC fixup, per bug #305873
725 i="${S}"/storage/innodb_plugin/plug.in 854 i="${S}"/storage/innodb_plugin/plug.in
726 [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}" 855 [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}"
727 856
728 # Additional checks, remove bundled zlib 857 # Additional checks, remove bundled zlib (Cluster needs this, for static
858 # memory management in zlib, leave available for Cluster)
859 if [[ "${PN}" != "mysql-cluster" ]] ; then
729 rm -f "${S}/zlib/"*.[ch] 860 rm -f "${S}/zlib/"*.[ch]
730 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in" 861 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
862 fi
731 rm -f "scripts/mysqlbug" 863 rm -f "scripts/mysqlbug"
732 864
733 # Make charsets install in the right place 865 # Make charsets install in the right place
734 find . -name 'Makefile.am' \ 866 find . -name 'Makefile.am' \
735 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \; 867 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
746 fi 878 fi
747 879
748 local rebuilddirlist d 880 local rebuilddirlist d
749 881
750 if xtradb_patch_available && use xtradb ; then 882 if xtradb_patch_available && use xtradb ; then
751 einfo "Replacing InnoDB with Percona XtraDB" 883 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
752 pushd "${S}"/storage 884 pushd "${S}"/storage >/dev/null
753 i="innobase" 885 i="innobase"
754 o="${WORKDIR}/storage-${i}.mysql-upstream" 886 o="${WORKDIR}/storage-${i}.mysql-upstream"
755 # Have we been here already? 887 # Have we been here already?
756 [ -d "${o}" ] && rm -f "${i}" 888 [ -d "${o}" ] && rm -f "${i}"
757 # Or maybe we haven't 889 # Or maybe we haven't
758 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 890 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
759 cp -ra "${WORKDIR}/${XTRADB_P}" "${i}" 891 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
760 popd 892 popd >/dev/null
893 fi
894
895 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
896 einfo "Adding storage engine: PBXT"
897 pushd "${S}"/storage >/dev/null
898 i='pbxt'
899 [ -d "${i}" ] && rm -rf "${i}"
900 cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
901 popd >/dev/null
761 fi 902 fi
762 903
763 if mysql_version_is_at_least "5.1.12" ; then 904 if mysql_version_is_at_least "5.1.12" ; then
764 rebuilddirlist="." 905 rebuilddirlist="."
765 # This does not seem to be needed presently. robbat2 2010/02/23 906 # This does not seem to be needed presently. robbat2 2010/02/23
774 fi 915 fi
775 916
776 for d in ${rebuilddirlist} ; do 917 for d in ${rebuilddirlist} ; do
777 einfo "Reconfiguring dir '${d}'" 918 einfo "Reconfiguring dir '${d}'"
778 pushd "${d}" &>/dev/null 919 pushd "${d}" &>/dev/null
779 AT_GNUCONF_UPDATE="yes" eautoreconf 920 eautoreconf
780 popd &>/dev/null 921 popd &>/dev/null
781 done 922 done
782 923
783 if mysql_check_version_range "4.1 to 5.0.99.99" \ 924 if mysql_check_version_range "4.1 to 5.0.99.99" \
784 && use berkdb ; then 925 && use berkdb ; then
839 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 980 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
840 export CXXFLAGS 981 export CXXFLAGS
841 982
842 # bug #283926, with GCC4.4, this is required to get correct behavior. 983 # bug #283926, with GCC4.4, this is required to get correct behavior.
843 append-flags -fno-strict-aliasing 984 append-flags -fno-strict-aliasing
985
986 # bug #335185, with GCC4.5 on x86 only, omit-frame-pointer causes a
987 # mis-compile
988 use x86 && [[ "$(gcc-version)" == "4.5" ]] && \
989 append-flags -fno-omit-frame-pointer && \
990 filter-flags -fomit-frame-pointer
844 991
845 econf \ 992 econf \
846 --libexecdir="/usr/sbin" \ 993 --libexecdir="/usr/sbin" \
847 --sysconfdir="${MY_SYSCONFDIR}" \ 994 --sysconfdir="${MY_SYSCONFDIR}" \
848 --localstatedir="${MY_LOCALSTATEDIR}" \ 995 --localstatedir="${MY_LOCALSTATEDIR}" \
859 # TODO: Move this before autoreconf !!! 1006 # TODO: Move this before autoreconf !!!
860 find . -type f -name Makefile -print0 \ 1007 find . -type f -name Makefile -print0 \
861 | xargs -0 -n100 sed -i \ 1008 | xargs -0 -n100 sed -i \
862 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 1009 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
863 1010
864 if [[ $EAPI == 2 ]]; then 1011 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
865 pbxt_patch_available && use pbxt && pbxt_src_configure 1012 pbxt_patch_available && use pbxt && pbxt_src_configure
866 fi 1013 fi
867} 1014}
868 1015
869# @FUNCTION: mysql_src_compile 1016# @FUNCTION: mysql_src_compile
876 0 | 1) mysql_src_configure ;; 1023 0 | 1) mysql_src_configure ;;
877 esac 1024 esac
878 1025
879 emake || die "emake failed" 1026 emake || die "emake failed"
880 1027
1028 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
881 pbxt_patch_available && use pbxt && pbxt_src_compile 1029 pbxt_patch_available && use pbxt && pbxt_src_compile
1030 fi
882} 1031}
883 1032
884# @FUNCTION: mysql_src_install 1033# @FUNCTION: mysql_src_install
885# @DESCRIPTION: 1034# @DESCRIPTION:
886# Install mysql. 1035# Install mysql.
892 DESTDIR="${D}" \ 1041 DESTDIR="${D}" \
893 benchdir_root="${MY_SHAREDSTATEDIR}" \ 1042 benchdir_root="${MY_SHAREDSTATEDIR}" \
894 testroot="${MY_SHAREDSTATEDIR}" \ 1043 testroot="${MY_SHAREDSTATEDIR}" \
895 || die "emake install failed" 1044 || die "emake install failed"
896 1045
1046 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
897 pbxt_patch_available && use pbxt && pbxt_src_install 1047 pbxt_patch_available && use pbxt && pbxt_src_install
1048 fi
898 1049
899 # Convenience links 1050 # Convenience links
900 einfo "Making Convenience links for mysqlcheck multi-call binary" 1051 einfo "Making Convenience links for mysqlcheck multi-call binary"
901 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 1052 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
902 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 1053 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
926 if use !test ; then 1077 if use !test ; then
927 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test 1078 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
928 fi 1079 fi
929 1080
930 # Configuration stuff 1081 # Configuration stuff
931 if mysql_version_is_at_least "5.1" ; then 1082 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" 1083 3*|4.0) mysql_mycnf_version="4.0" ;;
937 fi 1084 4.[1-9]|5.0) mysql_mycnf_version="4.1" ;;
938 einfo "Building default my.cnf" 1085 5.[1-9]|6*|7*) mysql_mycnf_version="5.1" ;;
1086 esac
1087 einfo "Building default my.cnf (${mysql_mycnf_version})"
939 insinto "${MY_SYSCONFDIR}" 1088 insinto "${MY_SYSCONFDIR}"
940 doins scripts/mysqlaccess.conf 1089 doins scripts/mysqlaccess.conf
1090 mycnf_src="my.cnf-${mysql_mycnf_version}"
941 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 1091 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
942 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 1092 "${FILESDIR}/${mycnf_src}" \
943 > "${TMPDIR}/my.cnf.ok" 1093 > "${TMPDIR}/my.cnf.ok"
944 if mysql_version_is_at_least "4.1" && use latin1 ; then 1094 if use latin1 ; then
945 sed -i \ 1095 sed -i \
946 -e "/character-set/s|utf8|latin1|g" \ 1096 -e "/character-set/s|utf8|latin1|g" \
947 "${TMPDIR}/my.cnf.ok" 1097 "${TMPDIR}/my.cnf.ok"
948 fi 1098 fi
949 newins "${TMPDIR}/my.cnf.ok" my.cnf 1099 newins "${TMPDIR}/my.cnf.ok" my.cnf
1043 1193
1044 einfo 1194 einfo
1045 elog "You might want to run:" 1195 elog "You might want to run:"
1046 elog "\"emerge --config =${CATEGORY}/${PF}\"" 1196 elog "\"emerge --config =${CATEGORY}/${PF}\""
1047 elog "if this is a new install." 1197 elog "if this is a new install."
1198 einfo
1199
1200 einfo
1201 elog "If you are upgrading major versions, you should run the"
1202 elog "mysql_upgrade tool."
1048 einfo 1203 einfo
1049 fi 1204 fi
1050 1205
1051 if pbxt_available && use pbxt ; then 1206 if pbxt_available && use pbxt ; then
1052 # TODO: explain it better 1207 # TODO: explain it better
1168 # Figure out which options we need to disable to do the setup 1323 # Figure out which options we need to disable to do the setup
1169 helpfile="${TMPDIR}/mysqld-help" 1324 helpfile="${TMPDIR}/mysqld-help"
1170 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null 1325 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1171 for opt in grant-tables host-cache name-resolve networking slave-start bdb \ 1326 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 \ 1327 federated innodb ssl log-bin relay-log slow-query-log external-locking \
1328 ndbcluster \
1173 ; do 1329 ; do
1174 optexp="--(skip-)?${opt}" optfull="--skip-${opt}" 1330 optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1175 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}" 1331 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1176 done 1332 done
1177 # But some options changed names 1333 # But some options changed names
1185 1341
1186 if [[ -r "${help_tables}" ]] ; then 1342 if [[ -r "${help_tables}" ]] ; then
1187 cat "${help_tables}" >> "${sqltmp}" 1343 cat "${help_tables}" >> "${sqltmp}"
1188 fi 1344 fi
1189 fi 1345 fi
1190 1346
1191 einfo "Creating the mysql database and setting proper" 1347 einfo "Creating the mysql database and setting proper"
1192 einfo "permissions on it ..." 1348 einfo "permissions on it ..."
1193 1349
1194 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock" 1350 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1195 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid" 1351 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1198 --user=mysql \ 1354 --user=mysql \
1199 --basedir=${ROOT}/usr \ 1355 --basedir=${ROOT}/usr \
1200 --datadir=${ROOT}/${MY_DATADIR} \ 1356 --datadir=${ROOT}/${MY_DATADIR} \
1201 --max_allowed_packet=8M \ 1357 --max_allowed_packet=8M \
1202 --net_buffer_length=16K \ 1358 --net_buffer_length=16K \
1359 --default-storage-engine=MyISAM \
1203 --socket=${socket} \ 1360 --socket=${socket} \
1204 --pid-file=${pidfile}" 1361 --pid-file=${pidfile}"
1205 #einfo "About to start mysqld: ${mysqld}" 1362 #einfo "About to start mysqld: ${mysqld}"
1206 ebegin "Starting mysqld" 1363 ebegin "Starting mysqld"
1207 ${mysqld} & 1364 ${mysqld} &

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

  ViewVC Help
Powered by ViewVC 1.1.20