/[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.145
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.145 2010/04/27 05:45:55 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>
152# Work out the default SERVER_URI correctly 152# Work out the default SERVER_URI correctly
153if [ -z "${SERVER_URI}" ]; then 153if [ -z "${SERVER_URI}" ]; then
154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}" 154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
155 if [ "${PN}" == "mariadb" ]; then 155 if [ "${PN}" == "mariadb" ]; then
156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})" 156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
157 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
158 SERVER_URI="
159 http://ftp.rediris.es/mirror/MariaDB/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
160 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" 161 http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/${MARIA_FULL_P}.tar.gz
162 "
158 # The community build is on the mirrors 163 # The community build is on the mirrors
159 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 164 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
160 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz" 165 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz"
161 # The (old) enterprise source is on the primary site only 166 # The (old) enterprise source is on the primary site only
162 elif [ "${PN}" == "mysql" ]; then 167 elif [ "${PN}" == "mysql" ]; then
232 && mysql_version_is_at_least "5.1.26" \ 237 && mysql_version_is_at_least "5.1.26" \
233 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] 238 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
234 return $? 239 return $?
235} 240}
236 241
242
237pbxt_patch_available \ 243pbxt_patch_available \
238&& PBXT_P="pbxt-${PBXT_VERSION}" \ 244&& 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" \ 245&& 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} )" \ 246&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
241 247
248# PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
249# vs. built outside the dir
242pbxt_available \ 250pbxt_available \
243&& IUSE="${IUSE} pbxt" 251&& IUSE="${IUSE} pbxt" \
252&& mysql_version_is_at_least "5.1.40" \
253&& PBXT_NEWSTYLE=1
244 254
245xtradb_patch_available \ 255xtradb_patch_available \
246&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ 256&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
247&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ 257&& 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}" \ 258&& XTRADB_SRC_B1="http://www.percona.com/" \
259&& XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/" \
260&& 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}" \ 261&& XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}" \
262&& XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
250&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \ 263&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )" \
251&& IUSE="${IUSE} xtradb" 264&& IUSE="${IUSE} xtradb"
252 265
253# 266#
254# HELPER FUNCTIONS: 267# HELPER FUNCTIONS:
255# 268#
524 myconf="${myconf} --enable-assembler" 537 myconf="${myconf} --enable-assembler"
525 myconf="${myconf} --with-geometry" 538 myconf="${myconf} --with-geometry"
526 myconf="${myconf} --with-readline" 539 myconf="${myconf} --with-readline"
527 myconf="${myconf} --with-zlib-dir=/usr/" 540 myconf="${myconf} --with-zlib-dir=/usr/"
528 myconf="${myconf} --without-pstack" 541 myconf="${myconf} --without-pstack"
542 myconf="${myconf} --with-plugindir=/usr/$(get_libdir)/mysql/plugin"
543
529 use max-idx-128 && myconf="${myconf} --with-max-indexes=128" 544 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
530 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 545 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
531 myconf="${myconf} $(use_enable community community-features)" 546 myconf="${myconf} $(use_enable community community-features)"
532 if use community; then 547 if use community; then
533 myconf="${myconf} $(use_enable profiling)" 548 myconf="${myconf} $(use_enable profiling)"
534 else 549 else
535 myconf="${myconf} --disable-profiling" 550 myconf="${myconf} --disable-profiling"
536 fi 551 fi
537 fi 552 fi
538 553
554 # Scan for all available plugins
555 local plugins_avail="$(
556 LANG=C \
557 find "${S}" \
558 \( \
559 -name 'plug.in' \
560 -o -iname 'configure.in' \
561 -o -iname 'configure.ac' \
562 \) \
563 -print0 \
564 | xargs -0 sed -r -n \
565 -e '/^MYSQL_STORAGE_ENGINE/{
566 s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ;
567 s~^([^ ]+).*~\1~gp;
568 }' \
569 | tr -s '\n' ' '
570 )"
571
539 # 5.1 introduces a new way to manage storage engines (plugins) 572 # 5.1 introduces a new way to manage storage engines (plugins)
540 # like configuration=none 573 # like configuration=none
541 # This base set are required, and will always be statically built. 574 # This base set are required, and will always be statically built.
542 local plugins="csv,myisam,myisammrg,heap" 575 local plugins_sta="csv myisam myisammrg heap"
576 local plugins_dyn=""
577 local plugins_dis="example ibmdb2i"
578
579 # These aren't actually required by the base set, but are really useful:
580 plugins_sta="${plugins_sta} archive blackhole"
581
582 # default in 5.5.4
583 if mysql_version_is_at_least "5.5.4" ; then
584 plugins_sta="${plugins_sta} partition"
585 fi
586 # Now the extras
543 if use extraengine ; then 587 if use extraengine ; then
544 # like configuration=max-no-ndb, archive and example removed in 5.1.11 588 # like configuration=max-no-ndb, archive and example removed in 5.1.11
545 # not added yet: ibmdb2i 589 # not added yet: ibmdb2i
546 # Not supporting as examples: example,daemon_example,ftexample 590 # Not supporting as examples: example,daemon_example,ftexample
547 plugins="${plugins},archive,blackhole,federated,partition" 591 plugins_sta="${plugins_sta} partition"
592 plugins_dyn="${plugins_sta} federated"
548 593
549 if [[ "${PN}" != "mariadb" ]] ; then 594 if [[ "${PN}" != "mariadb" ]] ; then
550 elog "Before using the Federated storage engine, please be sure to read" 595 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" 596 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
552 else 597 else
553 elog "MariaDB includes the FederatedX engine. Be sure to read" 598 elog "MariaDB includes the FederatedX engine. Be sure to read"
554 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine" 599 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
555 fi 600 fi
601 else
602 plugins_dis="${plugins_dis} partition federated"
556 fi 603 fi
557 604
558 # Upstream specifically requests that InnoDB always be built: 605 # Upstream specifically requests that InnoDB always be built:
559 # - innobase, innodb_plugin 606 # - innobase, innodb_plugin
560 # Build falcon if available for 6.x series. 607 # Build falcon if available for 6.x series.
561 for i in innobase innodb_plugin falcon ; do 608 for i in innobase falcon ; do
562 [ -e "${S}"/storage/${i} ] && plugins="${plugins},${i}" 609 [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
610 done
611 for i in innodb_plugin ; do
612 [ -e "${S}"/storage/${i} ] && plugins_dyn="${plugins_dyn} ${i}"
563 done 613 done
564 614
565 # like configuration=max-no-ndb 615 # like configuration=max-no-ndb
566 if use cluster ; then 616 if use cluster ; then
567 plugins="${plugins},ndbcluster" 617 plugins_sta="${plugins_sta} ndbcluster"
568 myconf="${myconf} --with-ndb-binlog" 618 myconf="${myconf} --with-ndb-binlog"
619 else
620 plugins_dis="${plugins_dis} ndbcluster"
569 fi 621 fi
570 622
571 if [[ "${PN}" == "mariadb" ]] ; then 623 if [[ "${PN}" == "mariadb" ]] ; then
572 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not 624 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
573 # caught above. 625 # caught above.
574 plugins="${plugins},maria,innobase" 626 plugins_sta="${plugins_sta},maria,innobase"
575 if use pbxt ; then
576 plugins="${plugins},pbxt"
577 else
578 myconf="${myconf} --without-plugin-pbxt"
579 fi
580 myconf="${myconf} $(use_with libevent)" 627 myconf="${myconf} $(use_with libevent)"
581 # This is not optional, without it several upstream testcases fail. 628 # This is not optional, without it several upstream testcases fail.
582 # Also strongly recommended by upstream. 629 # Also strongly recommended by upstream.
583 myconf="${myconf} --with-maria-tmp-tables" 630 myconf="${myconf} --with-maria-tmp-tables"
584 fi 631 fi
632
633 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
634 use pbxt \
635 && plugins_dyn="${plugins_dyn} pbxt" \
636 || plugins_dis="${plugins_dis} pbxt"
637 fi
585 638
639 use static && \
640 plugins_sta="${plugins_sta} ${plugins_dyn}" && \
641 plugins_dyn=""
642
643 einfo "Available plugins: ${plugins_avail}"
644 einfo "Dynamic plugins: ${plugins_dyn}"
645 einfo "Static plugins: ${plugins_sta}"
646 einfo "Disabled plugins: ${plugins_dis}"
647
648 # These are the static plugins
586 myconf="${myconf} --with-plugins=${plugins}" 649 myconf="${myconf} --with-plugins=${plugins_sta// /,}"
650 # And the disabled ones
651 for i in ${plugins_dis} ; do
652 myconf="${myconf} --without-plugin-${i}"
653 done
587} 654}
588 655
589pbxt_src_configure() { 656pbxt_src_configure() {
590 mysql_init_vars 657 mysql_init_vars
591 658
599 use debug && myconf="${myconf} --with-debug=full" 666 use debug && myconf="${myconf} --with-debug=full"
600 econf ${myconf} || die "Problem configuring PBXT storage engine" 667 econf ${myconf} || die "Problem configuring PBXT storage engine"
601} 668}
602 669
603pbxt_src_compile() { 670pbxt_src_compile() {
671
604 # Be backwards compatible for now 672 # Be backwards compatible for now
605 if [[ $EAPI != 2 ]]; then 673 if [[ $EAPI != 2 ]]; then
606 pbxt_src_configure 674 pbxt_src_configure
607 fi 675 fi
608 # TODO: is it safe/needed to use emake here ? 676 # TODO: is it safe/needed to use emake here ?
637 fi 705 fi
638 fi 706 fi
639 707
640 # Check for USE flag problems in pkg_setup 708 # Check for USE flag problems in pkg_setup
641 if use static && use ssl ; then 709 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!" 710 M="MySQL does not support being built statically with SSL support enabled!"
711 eerror "${M}"
712 die "${M}"
644 fi 713 fi
645 714
646 if ! mysql_version_is_at_least "5.0" \ 715 if ! mysql_version_is_at_least "5.0" \
647 && use raid \ 716 && use raid \
648 && use static ; then 717 && use static ; then
650 eerror "with RAID support enabled." 719 eerror "with RAID support enabled."
651 die "USE flags 'raid' and 'static' conflict!" 720 die "USE flags 'raid' and 'static' conflict!"
652 fi 721 fi
653 722
654 if mysql_version_is_at_least "4.1.3" \ 723 if mysql_version_is_at_least "4.1.3" \
655 && ( use cluster || use extraengine ) \ 724 && ( use cluster || use extraengine || use embedded ) \
656 && use minimal ; then 725 && 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!" 726 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
727 eerror "${M}"
728 die "${M}"
659 fi 729 fi
660 730
661 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
662 if mysql_version_is_at_least "5.0.83" ; then 731 if mysql_version_is_at_least "5.1" \
732 && xtradb_patch_available \
733 && use xtradb \
734 && use embedded ; then
735 M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
736 eerror "${M}"
737 die "${M}"
738 fi
739
740 # Bug #290570, 284946, 307251
741 # Upstream changes made us need a fairly new GCC4.
742 # But only for 5.0.8[3-6]!
743 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
663 GCC_VER=$(gcc-version) 744 GCC_VER=$(gcc-version)
664 case ${GCC_VER} in 745 case ${GCC_VER} in
665 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; 746 2*|3*|4.0|4.1|4.2)
747 eerror "Some releases of MySQL required a very new GCC, and then"
748 eerror "later release relaxed that requirement again. Either pick a"
749 eerror "MySQL >=5.0.87, or use a newer GCC."
750 die "Active GCC too old!" ;;
666 esac 751 esac
667 fi 752 fi
668 753
669 # This should come after all of the die statements 754 # This should come after all of the die statements
670 enewgroup mysql 60 || die "problem adding 'mysql' group" 755 enewgroup mysql 60 || die "problem adding 'mysql' group"
746 fi 831 fi
747 832
748 local rebuilddirlist d 833 local rebuilddirlist d
749 834
750 if xtradb_patch_available && use xtradb ; then 835 if xtradb_patch_available && use xtradb ; then
751 einfo "Replacing InnoDB with Percona XtraDB" 836 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
752 pushd "${S}"/storage 837 pushd "${S}"/storage >/dev/null
753 i="innobase" 838 i="innobase"
754 o="${WORKDIR}/storage-${i}.mysql-upstream" 839 o="${WORKDIR}/storage-${i}.mysql-upstream"
755 # Have we been here already? 840 # Have we been here already?
756 [ -d "${o}" ] && rm -f "${i}" 841 [ -d "${o}" ] && rm -f "${i}"
757 # Or maybe we haven't 842 # Or maybe we haven't
758 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 843 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
759 cp -ra "${WORKDIR}/${XTRADB_P}" "${i}" 844 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
760 popd 845 popd >/dev/null
846 fi
847
848 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
849 einfo "Adding storage engine: PBXT"
850 pushd "${S}"/storage >/dev/null
851 i='pbxt'
852 [ -d "${i}" ] && rm -rf "${i}"
853 cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
854 popd >/dev/null
761 fi 855 fi
762 856
763 if mysql_version_is_at_least "5.1.12" ; then 857 if mysql_version_is_at_least "5.1.12" ; then
764 rebuilddirlist="." 858 rebuilddirlist="."
765 # This does not seem to be needed presently. robbat2 2010/02/23 859 # This does not seem to be needed presently. robbat2 2010/02/23
859 # TODO: Move this before autoreconf !!! 953 # TODO: Move this before autoreconf !!!
860 find . -type f -name Makefile -print0 \ 954 find . -type f -name Makefile -print0 \
861 | xargs -0 -n100 sed -i \ 955 | xargs -0 -n100 sed -i \
862 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 956 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
863 957
864 if [[ $EAPI == 2 ]]; then 958 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
865 pbxt_patch_available && use pbxt && pbxt_src_configure 959 pbxt_patch_available && use pbxt && pbxt_src_configure
866 fi 960 fi
867} 961}
868 962
869# @FUNCTION: mysql_src_compile 963# @FUNCTION: mysql_src_compile
876 0 | 1) mysql_src_configure ;; 970 0 | 1) mysql_src_configure ;;
877 esac 971 esac
878 972
879 emake || die "emake failed" 973 emake || die "emake failed"
880 974
975 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
881 pbxt_patch_available && use pbxt && pbxt_src_compile 976 pbxt_patch_available && use pbxt && pbxt_src_compile
977 fi
882} 978}
883 979
884# @FUNCTION: mysql_src_install 980# @FUNCTION: mysql_src_install
885# @DESCRIPTION: 981# @DESCRIPTION:
886# Install mysql. 982# Install mysql.
892 DESTDIR="${D}" \ 988 DESTDIR="${D}" \
893 benchdir_root="${MY_SHAREDSTATEDIR}" \ 989 benchdir_root="${MY_SHAREDSTATEDIR}" \
894 testroot="${MY_SHAREDSTATEDIR}" \ 990 testroot="${MY_SHAREDSTATEDIR}" \
895 || die "emake install failed" 991 || die "emake install failed"
896 992
993 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
897 pbxt_patch_available && use pbxt && pbxt_src_install 994 pbxt_patch_available && use pbxt && pbxt_src_install
995 fi
898 996
899 # Convenience links 997 # Convenience links
900 einfo "Making Convenience links for mysqlcheck multi-call binary" 998 einfo "Making Convenience links for mysqlcheck multi-call binary"
901 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 999 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
902 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 1000 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
1198 --user=mysql \ 1296 --user=mysql \
1199 --basedir=${ROOT}/usr \ 1297 --basedir=${ROOT}/usr \
1200 --datadir=${ROOT}/${MY_DATADIR} \ 1298 --datadir=${ROOT}/${MY_DATADIR} \
1201 --max_allowed_packet=8M \ 1299 --max_allowed_packet=8M \
1202 --net_buffer_length=16K \ 1300 --net_buffer_length=16K \
1301 --default-storage-engine=MyISAM \
1203 --socket=${socket} \ 1302 --socket=${socket} \
1204 --pid-file=${pidfile}" 1303 --pid-file=${pidfile}"
1205 #einfo "About to start mysqld: ${mysqld}" 1304 #einfo "About to start mysqld: ${mysqld}"
1206 ebegin "Starting mysqld" 1305 ebegin "Starting mysqld"
1207 ${mysqld} & 1306 ${mysqld} &

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

  ViewVC Help
Powered by ViewVC 1.1.20