/[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.146
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.146 2010/05/13 19:45:47 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 partition"
618 plugins_dis="${plugins_dis//partition}"
568 myconf="${myconf} --with-ndb-binlog" 619 myconf="${myconf} --with-ndb-binlog"
620 else
621 plugins_dis="${plugins_dis} ndbcluster"
569 fi 622 fi
570 623
571 if [[ "${PN}" == "mariadb" ]] ; then 624 if [[ "${PN}" == "mariadb" ]] ; then
572 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not 625 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
573 # caught above. 626 # caught above.
574 plugins="${plugins},maria,innobase" 627 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)" 628 myconf="${myconf} $(use_with libevent)"
581 # This is not optional, without it several upstream testcases fail. 629 # This is not optional, without it several upstream testcases fail.
582 # Also strongly recommended by upstream. 630 # Also strongly recommended by upstream.
583 myconf="${myconf} --with-maria-tmp-tables" 631 myconf="${myconf} --with-maria-tmp-tables"
584 fi 632 fi
633
634 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
635 use pbxt \
636 && plugins_dyn="${plugins_dyn} pbxt" \
637 || plugins_dis="${plugins_dis} pbxt"
638 fi
585 639
640 use static && \
641 plugins_sta="${plugins_sta} ${plugins_dyn}" && \
642 plugins_dyn=""
643
644 einfo "Available plugins: ${plugins_avail}"
645 einfo "Dynamic plugins: ${plugins_dyn}"
646 einfo "Static plugins: ${plugins_sta}"
647 einfo "Disabled plugins: ${plugins_dis}"
648
649 # These are the static plugins
586 myconf="${myconf} --with-plugins=${plugins}" 650 myconf="${myconf} --with-plugins=${plugins_sta// /,}"
651 # And the disabled ones
652 for i in ${plugins_dis} ; do
653 myconf="${myconf} --without-plugin-${i}"
654 done
587} 655}
588 656
589pbxt_src_configure() { 657pbxt_src_configure() {
590 mysql_init_vars 658 mysql_init_vars
591 659
599 use debug && myconf="${myconf} --with-debug=full" 667 use debug && myconf="${myconf} --with-debug=full"
600 econf ${myconf} || die "Problem configuring PBXT storage engine" 668 econf ${myconf} || die "Problem configuring PBXT storage engine"
601} 669}
602 670
603pbxt_src_compile() { 671pbxt_src_compile() {
672
604 # Be backwards compatible for now 673 # Be backwards compatible for now
605 if [[ $EAPI != 2 ]]; then 674 if [[ $EAPI != 2 ]]; then
606 pbxt_src_configure 675 pbxt_src_configure
607 fi 676 fi
608 # TODO: is it safe/needed to use emake here ? 677 # TODO: is it safe/needed to use emake here ?
637 fi 706 fi
638 fi 707 fi
639 708
640 # Check for USE flag problems in pkg_setup 709 # Check for USE flag problems in pkg_setup
641 if use static && use ssl ; then 710 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!" 711 M="MySQL does not support being built statically with SSL support enabled!"
712 eerror "${M}"
713 die "${M}"
644 fi 714 fi
645 715
646 if ! mysql_version_is_at_least "5.0" \ 716 if ! mysql_version_is_at_least "5.0" \
647 && use raid \ 717 && use raid \
648 && use static ; then 718 && use static ; then
650 eerror "with RAID support enabled." 720 eerror "with RAID support enabled."
651 die "USE flags 'raid' and 'static' conflict!" 721 die "USE flags 'raid' and 'static' conflict!"
652 fi 722 fi
653 723
654 if mysql_version_is_at_least "4.1.3" \ 724 if mysql_version_is_at_least "4.1.3" \
655 && ( use cluster || use extraengine ) \ 725 && ( use cluster || use extraengine || use embedded ) \
656 && use minimal ; then 726 && 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!" 727 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
728 eerror "${M}"
729 die "${M}"
659 fi 730 fi
660 731
661 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
662 if mysql_version_is_at_least "5.0.83" ; then 732 if mysql_version_is_at_least "5.1" \
733 && xtradb_patch_available \
734 && use xtradb \
735 && use embedded ; then
736 M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
737 eerror "${M}"
738 die "${M}"
739 fi
740
741 # Bug #290570, 284946, 307251
742 # Upstream changes made us need a fairly new GCC4.
743 # But only for 5.0.8[3-6]!
744 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
663 GCC_VER=$(gcc-version) 745 GCC_VER=$(gcc-version)
664 case ${GCC_VER} in 746 case ${GCC_VER} in
665 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; 747 2*|3*|4.0|4.1|4.2)
748 eerror "Some releases of MySQL required a very new GCC, and then"
749 eerror "later release relaxed that requirement again. Either pick a"
750 eerror "MySQL >=5.0.87, or use a newer GCC."
751 die "Active GCC too old!" ;;
666 esac 752 esac
667 fi 753 fi
668 754
669 # This should come after all of the die statements 755 # This should come after all of the die statements
670 enewgroup mysql 60 || die "problem adding 'mysql' group" 756 enewgroup mysql 60 || die "problem adding 'mysql' group"
746 fi 832 fi
747 833
748 local rebuilddirlist d 834 local rebuilddirlist d
749 835
750 if xtradb_patch_available && use xtradb ; then 836 if xtradb_patch_available && use xtradb ; then
751 einfo "Replacing InnoDB with Percona XtraDB" 837 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
752 pushd "${S}"/storage 838 pushd "${S}"/storage >/dev/null
753 i="innobase" 839 i="innobase"
754 o="${WORKDIR}/storage-${i}.mysql-upstream" 840 o="${WORKDIR}/storage-${i}.mysql-upstream"
755 # Have we been here already? 841 # Have we been here already?
756 [ -d "${o}" ] && rm -f "${i}" 842 [ -d "${o}" ] && rm -f "${i}"
757 # Or maybe we haven't 843 # Or maybe we haven't
758 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 844 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
759 cp -ra "${WORKDIR}/${XTRADB_P}" "${i}" 845 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
760 popd 846 popd >/dev/null
847 fi
848
849 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
850 einfo "Adding storage engine: PBXT"
851 pushd "${S}"/storage >/dev/null
852 i='pbxt'
853 [ -d "${i}" ] && rm -rf "${i}"
854 cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
855 popd >/dev/null
761 fi 856 fi
762 857
763 if mysql_version_is_at_least "5.1.12" ; then 858 if mysql_version_is_at_least "5.1.12" ; then
764 rebuilddirlist="." 859 rebuilddirlist="."
765 # This does not seem to be needed presently. robbat2 2010/02/23 860 # This does not seem to be needed presently. robbat2 2010/02/23
859 # TODO: Move this before autoreconf !!! 954 # TODO: Move this before autoreconf !!!
860 find . -type f -name Makefile -print0 \ 955 find . -type f -name Makefile -print0 \
861 | xargs -0 -n100 sed -i \ 956 | xargs -0 -n100 sed -i \
862 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 957 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
863 958
864 if [[ $EAPI == 2 ]]; then 959 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
865 pbxt_patch_available && use pbxt && pbxt_src_configure 960 pbxt_patch_available && use pbxt && pbxt_src_configure
866 fi 961 fi
867} 962}
868 963
869# @FUNCTION: mysql_src_compile 964# @FUNCTION: mysql_src_compile
876 0 | 1) mysql_src_configure ;; 971 0 | 1) mysql_src_configure ;;
877 esac 972 esac
878 973
879 emake || die "emake failed" 974 emake || die "emake failed"
880 975
976 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
881 pbxt_patch_available && use pbxt && pbxt_src_compile 977 pbxt_patch_available && use pbxt && pbxt_src_compile
978 fi
882} 979}
883 980
884# @FUNCTION: mysql_src_install 981# @FUNCTION: mysql_src_install
885# @DESCRIPTION: 982# @DESCRIPTION:
886# Install mysql. 983# Install mysql.
892 DESTDIR="${D}" \ 989 DESTDIR="${D}" \
893 benchdir_root="${MY_SHAREDSTATEDIR}" \ 990 benchdir_root="${MY_SHAREDSTATEDIR}" \
894 testroot="${MY_SHAREDSTATEDIR}" \ 991 testroot="${MY_SHAREDSTATEDIR}" \
895 || die "emake install failed" 992 || die "emake install failed"
896 993
994 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
897 pbxt_patch_available && use pbxt && pbxt_src_install 995 pbxt_patch_available && use pbxt && pbxt_src_install
996 fi
898 997
899 # Convenience links 998 # Convenience links
900 einfo "Making Convenience links for mysqlcheck multi-call binary" 999 einfo "Making Convenience links for mysqlcheck multi-call binary"
901 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 1000 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
902 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 1001 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
1198 --user=mysql \ 1297 --user=mysql \
1199 --basedir=${ROOT}/usr \ 1298 --basedir=${ROOT}/usr \
1200 --datadir=${ROOT}/${MY_DATADIR} \ 1299 --datadir=${ROOT}/${MY_DATADIR} \
1201 --max_allowed_packet=8M \ 1300 --max_allowed_packet=8M \
1202 --net_buffer_length=16K \ 1301 --net_buffer_length=16K \
1302 --default-storage-engine=MyISAM \
1203 --socket=${socket} \ 1303 --socket=${socket} \
1204 --pid-file=${pidfile}" 1304 --pid-file=${pidfile}"
1205 #einfo "About to start mysqld: ${mysqld}" 1305 #einfo "About to start mysqld: ${mysqld}"
1206 ebegin "Starting mysqld" 1306 ebegin "Starting mysqld"
1207 ${mysqld} & 1307 ${mysqld} &

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

  ViewVC Help
Powered by ViewVC 1.1.20