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

Diff of /eclass/mysql.eclass

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

Revision 1.153 Revision 1.165
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2011 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.153 2010/10/27 07:19:24 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.165 2011/08/29 01:28:10 vapier Exp $
4 4
5# @ECLASS: mysql.eclass 5# @ECLASS: mysql.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
8# Maintainers: MySQL Team <mysql-bugs@gentoo.org> 7# MySQL Team <mysql-bugs@gentoo.org>
9# - Luca Longinotti <chtekk@gentoo.org> 8# Luca Longinotti <chtekk@gentoo.org>
10# - Robin H. Johnson <robbat2@gentoo.org> 9# Robin H. Johnson <robbat2@gentoo.org>
10# @AUTHOR:
11# Francesco Riosa (Retired) <vivo@gentoo.org>
11# @BLURB: This eclass provides most of the functions for mysql ebuilds 12# @BLURB: This eclass provides most of the functions for mysql ebuilds
12# @DESCRIPTION: 13# @DESCRIPTION:
13# The mysql.eclass provides almost all the code to build the mysql ebuilds 14# The mysql.eclass provides almost all the code to build the mysql ebuilds
14# including the src_unpack, src_prepare, src_configure, src_compile, 15# including the src_unpack, src_prepare, src_configure, src_compile,
15# scr_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm 16# scr_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
143 144
144RDEPEND="${DEPEND} 145RDEPEND="${DEPEND}
145 !minimal? ( dev-db/mysql-init-scripts ) 146 !minimal? ( dev-db/mysql-init-scripts )
146 selinux? ( sec-policy/selinux-mysql )" 147 selinux? ( sec-policy/selinux-mysql )"
147 148
149DEPEND="${DEPEND}
150 virtual/yacc"
151
152if [ "${EAPI:-0}" = "2" ]; then
153 DEPEND="${DEPEND} static? ( || ( sys-libs/ncurses[static-libs] <=sys-libs/ncurses-5.7-r3 ) )"
154fi
155
148# compile-time-only 156# compile-time-only
149mysql_version_is_at_least "5.1" \ 157mysql_version_is_at_least "5.1" \
150|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )" 158|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
151 159
152# compile-time-only 160# compile-time-only
153mysql_version_is_at_least "5.1.12" \ 161mysql_version_is_at_least "5.1.12" \
154&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3" 162&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
163
164[[ "${PN}" == "mariadb" ]] \
165&& mysql_version_is_at_least "5.2" \
166&& DEPEND="${DEPEND} oqgraph? ( >=dev-libs/boost-1.40.0 )"
167#SphinxSE is included but is not available in 5.2.4 due to a missing plug.in file
168# sphinx? ( app-misc/sphinx )"
155 169
156# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 170# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
157PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 171PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
158 172
159# For other stuff to bring us in 173# For other stuff to bring us in
238[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \ 252[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
239&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling" 253&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
240 254
241[[ "${PN}" == "mariadb" ]] \ 255[[ "${PN}" == "mariadb" ]] \
242&& IUSE="${IUSE} libevent" 256&& IUSE="${IUSE} libevent"
257
258[[ "${PN}" == "mariadb" ]] \
259&& mysql_version_is_at_least "5.2" \
260&& IUSE="${IUSE} oqgraph"
261#SphinxSE is included but is not available in 5.2.4 due to a missing plug.in file
262#&& IUSE="${IUSE} oqgraph sphinx"
243 263
244# MariaDB has integrated PBXT 264# MariaDB has integrated PBXT
245# PBXT_VERSION means that we have a PBXT patch for this PV 265# PBXT_VERSION means that we have a PBXT patch for this PV
246# PBXT was only introduced after 5.1.12 266# PBXT was only introduced after 5.1.12
247pbxt_patch_available() { 267pbxt_patch_available() {
571 myconf="${myconf} --with-readline" 591 myconf="${myconf} --with-readline"
572 myconf="${myconf} --with-zlib-dir=/usr/" 592 myconf="${myconf} --with-zlib-dir=/usr/"
573 myconf="${myconf} --without-pstack" 593 myconf="${myconf} --without-pstack"
574 myconf="${myconf} --with-plugindir=/usr/$(get_libdir)/mysql/plugin" 594 myconf="${myconf} --with-plugindir=/usr/$(get_libdir)/mysql/plugin"
575 595
596 # This is an explict die here, because if we just forcibly disable it, then the
597 # user's data is not accessible.
598 use max-idx-128 && die "Bug #336027: upstream has a corruption issue with max-idx-128 presently"
576 use max-idx-128 && myconf="${myconf} --with-max-indexes=128" 599 #use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
577 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 600 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
578 myconf="${myconf} $(use_enable community community-features)" 601 myconf="${myconf} $(use_enable community community-features)"
579 if use community; then 602 if use community; then
580 myconf="${myconf} $(use_enable profiling)" 603 myconf="${myconf} $(use_enable profiling)"
581 else 604 else
594 \) \ 617 \) \
595 -print0 \ 618 -print0 \
596 | xargs -0 sed -r -n \ 619 | xargs -0 sed -r -n \
597 -e '/^MYSQL_STORAGE_ENGINE/{ 620 -e '/^MYSQL_STORAGE_ENGINE/{
598 s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ; 621 s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ;
599 s~^([^ ]+).*~\1~gp; 622 s~^([^ ]+).*~\1~gp;
600 }' \ 623 }' \
601 | tr -s '\n' ' ' 624 | tr -s '\n' ' '
602 )" 625 )"
603 626
604 # 5.1 introduces a new way to manage storage engines (plugins) 627 # 5.1 introduces a new way to manage storage engines (plugins)
617 fi 640 fi
618 # Now the extras 641 # Now the extras
619 if use extraengine ; then 642 if use extraengine ; then
620 # like configuration=max-no-ndb, archive and example removed in 5.1.11 643 # like configuration=max-no-ndb, archive and example removed in 5.1.11
621 # not added yet: ibmdb2i 644 # not added yet: ibmdb2i
622 # Not supporting as examples: example,daemon_example,ftexample 645 # Not supporting as examples: example,daemon_example,ftexample
623 plugins_sta="${plugins_sta} partition" 646 plugins_sta="${plugins_sta} partition"
624 plugins_dyn="${plugins_sta} federated"
625 647
626 if [[ "${PN}" != "mariadb" ]] ; then 648 if [[ "${PN}" != "mariadb" ]] ; then
627 elog "Before using the Federated storage engine, please be sure to read" 649 elog "Before using the Federated storage engine, please be sure to read"
628 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 650 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
651 plugins_dyn="${plugins_sta} federated"
629 else 652 else
630 elog "MariaDB includes the FederatedX engine. Be sure to read" 653 elog "MariaDB includes the FederatedX engine. Be sure to read"
631 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine" 654 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
655 plugins_dyn="${plugins_sta} federatedx"
632 fi 656 fi
633 else 657 else
634 plugins_dis="${plugins_dis} partition federated" 658 plugins_dis="${plugins_dis} partition federated"
635 fi 659 fi
636 660
654 fi 678 fi
655 679
656 if [[ "${PN}" == "mariadb" ]] ; then 680 if [[ "${PN}" == "mariadb" ]] ; then
657 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not 681 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
658 # caught above. 682 # caught above.
683 # This is not optional, without it several upstream testcases fail.
684 # Also strongly recommended by upstream.
685 if [[ "${PV}" < "5.2.0" ]] ; then
686 myconf="${myconf} --with-maria-tmp-tables"
659 plugins_sta="${plugins_sta} maria" 687 plugins_sta="${plugins_sta} maria"
688 else
689 myconf="${myconf} --with-aria-tmp-tables"
690 plugins_sta="${plugins_sta} aria"
691 fi
660 692
661 [ -e "${S}"/storage/innobase ] || [ -e "${S}"/storage/xtradb ] || 693 [ -e "${S}"/storage/innobase ] || [ -e "${S}"/storage/xtradb ] ||
662 die "The ${P} package doesn't provide innobase nor xtradb" 694 die "The ${P} package doesn't provide innobase nor xtradb"
663 695
664 for i in innobase xtradb ; do 696 for i in innobase xtradb ; do
665 [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}" 697 [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
666 done 698 done
667 699
668 myconf="${myconf} $(use_with libevent)" 700 myconf="${myconf} $(use_with libevent)"
669 # This is not optional, without it several upstream testcases fail. 701
670 # Also strongly recommended by upstream. 702 if mysql_version_is_at_least "5.2" ; then
671 myconf="${myconf} --with-maria-tmp-tables" 703 #This should include sphinx, but the 5.2.4 archive forgot the plug.in file
704 #for i in oqgraph sphinx ; do
705 for i in oqgraph ; do
706 use ${i} \
707 && plugins_dyn="${plugins_dyn} ${i}" \
708 || plugins_dis="${plugins_dis} ${i}"
709 done
710 fi
672 fi 711 fi
673 712
674 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then 713 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
675 use pbxt \ 714 use pbxt \
676 && plugins_dyn="${plugins_dyn} pbxt" \ 715 && plugins_dyn="${plugins_dyn} pbxt" \
736# die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv" 775# die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
737# check for conflicting use flags 776# check for conflicting use flags
738# create new user and group for mysql 777# create new user and group for mysql
739# warn about deprecated features 778# warn about deprecated features
740mysql_pkg_setup() { 779mysql_pkg_setup() {
741 if hasq test ${FEATURES} ; then 780 if has test ${FEATURES} ; then
742 if ! use minimal ; then 781 if ! use minimal ; then
743 if [[ $UID -eq 0 ]]; then 782 if [[ $UID -eq 0 ]]; then
744 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root." 783 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
745 fi 784 fi
746 fi 785 fi
747 fi 786 fi
787
788 # bug 350844
789 case "${EAPI:-0}" in
790 0 | 1)
791 if use static && !built_with_use sys-libs/ncurses static-libs; then
792 die "To build MySQL statically you need to enable static-libs for sys-libs/ncurses"
793 fi
794 ;;
795 esac
748 796
749 # Check for USE flag problems in pkg_setup 797 # Check for USE flag problems in pkg_setup
750 if use static && use ssl ; then 798 if use static && use ssl ; then
751 M="MySQL does not support being built statically with SSL support enabled!" 799 M="MySQL does not support being built statically with SSL support enabled!"
752 eerror "${M}" 800 eerror "${M}"
753 die "${M}" 801 die "${M}"
802 fi
803
804 if mysql_version_is_at_least "5.1.51" \
805 && ! mysql_version_is_at_least "5.2" \
806 && use debug ; then
807 # Also in package.use.mask
808 die "Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51"
754 fi 809 fi
755 810
756 if ! mysql_version_is_at_least "5.0" \ 811 if ! mysql_version_is_at_least "5.0" \
757 && use raid \ 812 && use raid \
758 && use static ; then 813 && use static ; then
782 # Upstream changes made us need a fairly new GCC4. 837 # Upstream changes made us need a fairly new GCC4.
783 # But only for 5.0.8[3-6]! 838 # But only for 5.0.8[3-6]!
784 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then 839 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
785 GCC_VER=$(gcc-version) 840 GCC_VER=$(gcc-version)
786 case ${GCC_VER} in 841 case ${GCC_VER} in
787 2*|3*|4.0|4.1|4.2) 842 2*|3*|4.0|4.1|4.2)
788 eerror "Some releases of MySQL required a very new GCC, and then" 843 eerror "Some releases of MySQL required a very new GCC, and then"
789 eerror "later release relaxed that requirement again. Either pick a" 844 eerror "later release relaxed that requirement again. Either pick a"
790 eerror "MySQL >=5.0.87, or use a newer GCC." 845 eerror "MySQL >=5.0.87, or use a newer GCC."
791 die "Active GCC too old!" ;; 846 die "Active GCC too old!" ;;
792 esac 847 esac
887 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 942 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
888 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}" 943 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
889 popd >/dev/null 944 popd >/dev/null
890 fi 945 fi
891 946
892 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then 947 if pbxt_patch_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
893 einfo "Adding storage engine: PBXT" 948 einfo "Adding storage engine: PBXT"
894 pushd "${S}"/storage >/dev/null 949 pushd "${S}"/storage >/dev/null
895 i='pbxt' 950 i='pbxt'
896 [ -d "${i}" ] && rm -rf "${i}" 951 [ -d "${i}" ] && rm -rf "${i}"
897 cp -ral "${WORKDIR}/${PBXT_P}" "${i}" 952 cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
977 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 1032 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
978 export CXXFLAGS 1033 export CXXFLAGS
979 1034
980 # bug #283926, with GCC4.4, this is required to get correct behavior. 1035 # bug #283926, with GCC4.4, this is required to get correct behavior.
981 append-flags -fno-strict-aliasing 1036 append-flags -fno-strict-aliasing
982 1037
983 # bug #335185, with GCC4.5 on x86 only, omit-frame-pointer causes a 1038 # bug #335185, #335995, with >= GCC4.3.3 on x86 only, omit-frame-pointer
984 # mis-compile 1039 # causes a mis-compile.
985 use x86 && [[ "$(gcc-version)" == "4.5" ]] && \ 1040 # Upstream bugs:
1041 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38562
1042 # http://bugs.mysql.com/bug.php?id=45205
1043 use x86 && version_is_at_least "4.3.3" "$(gcc-fullversion)" && \
986 append-flags -fno-omit-frame-pointer && \ 1044 append-flags -fno-omit-frame-pointer && \
987 filter-flags -fomit-frame-pointer 1045 filter-flags -fomit-frame-pointer
988 1046
989 econf \ 1047 econf \
990 --libexecdir="/usr/sbin" \ 1048 --libexecdir="/usr/sbin" \
996 --with-low-memory \ 1054 --with-low-memory \
997 --with-client-ldflags=-lstdc++ \ 1055 --with-client-ldflags=-lstdc++ \
998 --enable-thread-safe-client \ 1056 --enable-thread-safe-client \
999 --with-comment="Gentoo Linux ${PF}" \ 1057 --with-comment="Gentoo Linux ${PF}" \
1000 --without-docs \ 1058 --without-docs \
1059 --with-LIBDIR="$(get_libdir)" \
1001 ${myconf} || die "econf failed" 1060 ${myconf} || die "econf failed"
1002 1061
1003 # TODO: Move this before autoreconf !!! 1062 # TODO: Move this before autoreconf !!!
1004 find . -type f -name Makefile -print0 \ 1063 find . -type f -name Makefile -print0 \
1005 | xargs -0 -n100 sed -i \ 1064 | xargs -0 -n100 sed -i \
1114 done 1173 done
1115 fi 1174 fi
1116 1175
1117 # Docs 1176 # Docs
1118 einfo "Installing docs" 1177 einfo "Installing docs"
1119 dodoc README ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE 1178 for i in README ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE ; do
1179 [[ -f "$i" ]] && dodoc "$i"
1180 done
1120 doinfo "${S}"/Docs/mysql.info 1181 doinfo "${S}"/Docs/mysql.info
1121 1182
1122 # Minimal builds don't have the MySQL server 1183 # Minimal builds don't have the MySQL server
1123 if ! use minimal ; then 1184 if ! use minimal ; then
1124 einfo "Including support files and sample configurations" 1185 einfo "Including support files and sample configurations"
1259 fi 1320 fi
1260 fi 1321 fi
1261 1322
1262 local pwd1="a" 1323 local pwd1="a"
1263 local pwd2="b" 1324 local pwd2="b"
1264 local MYSQL_ROOT_PASSWORD=''
1265 local maxtry=15 1325 local maxtry=15
1266 1326
1267 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then 1327 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1268 MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")" 1328 MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1269 fi 1329 fi
1279 # localhost. Also causes weird failures. 1339 # localhost. Also causes weird failures.
1280 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost" 1340 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1281 1341
1282 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then 1342 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1283 1343
1284 einfo "Please provide a password for the mysql 'root' user now," 1344 einfo "Please provide a password for the mysql 'root' user now, in the"
1285 einfo "or in the MYSQL_ROOT_PASSWORD env var." 1345 einfo "MYSQL_ROOT_PASSWORD env var or through the /root/.my.cnf file."
1286 ewarn "Avoid [\"'\\_%] characters in the password" 1346 ewarn "Avoid [\"'\\_%] characters in the password"
1287 read -rsp " >" pwd1 ; echo 1347 read -rsp " >" pwd1 ; echo
1288 1348
1289 einfo "Retype the password" 1349 einfo "Retype the password"
1290 read -rsp " >" pwd2 ; echo 1350 read -rsp " >" pwd2 ; echo

Legend:
Removed from v.1.153  
changed lines
  Added in v.1.165

  ViewVC Help
Powered by ViewVC 1.1.20