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

Diff of /eclass/mysql.eclass

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

Revision 1.133 Revision 1.142
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.133 2010/02/21 00:18:16 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.142 2010/03/24 20:37: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>
51 ;; 51 ;;
52 *) 52 *)
53 die "Unsupported EAPI: ${EAPI}" ;; 53 die "Unsupported EAPI: ${EAPI}" ;;
54esac 54esac
55 55
56
57# @ECLASS-VARIABLE: MYSQL_PV_MAJOR
58# @DESCRIPTION:
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
61# mysql_upgrade.
62MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
63
56# @ECLASS-VARIABLE: MYSQL_VERSION_ID 64# @ECLASS-VARIABLE: MYSQL_VERSION_ID
57# @DESCRIPTION: 65# @DESCRIPTION:
58# MYSQL_VERSION_ID will be: 66# MYSQL_VERSION_ID will be:
59# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 67# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
60# This is an important part, because many of the choices the MySQL ebuild will do 68# This is an important part, because many of the choices the MySQL ebuild will do
77# @DESCRIPTION: 85# @DESCRIPTION:
78# Specifiy if community features are available. Possible values are 1 (yes) 86# Specifiy if community features are available. Possible values are 1 (yes)
79# and 0 (no). 87# and 0 (no).
80# Community features are available in mysql-community 88# Community features are available in mysql-community
81# AND in the re-merged mysql-5.0.82 and newer 89# AND in the re-merged mysql-5.0.82 and newer
82if [ "${PN}" == "mysql-community" ]; then 90if [ "${PN}" == "mysql-community" -o "${PN}" == "mariadb" ]; then
83 MYSQL_COMMUNITY_FEATURES=1 91 MYSQL_COMMUNITY_FEATURES=1
84elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then 92elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
85 MYSQL_COMMUNITY_FEATURES=1 93 MYSQL_COMMUNITY_FEATURES=1
86elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then 94elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
87 MYSQL_COMMUNITY_FEATURES=1 95 MYSQL_COMMUNITY_FEATURES=1
112 >=sys-apps/sed-4 120 >=sys-apps/sed-4
113 >=sys-apps/texinfo-4.7-r1 121 >=sys-apps/texinfo-4.7-r1
114 >=sys-libs/readline-4.1 122 >=sys-libs/readline-4.1
115 >=sys-libs/zlib-1.2.3" 123 >=sys-libs/zlib-1.2.3"
116 124
125[[ "${PN}" == "mariadb" ]] \
126&& DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
127
117# Having different flavours at the same time is not a good idea 128# Having different flavours at the same time is not a good idea
118for i in "" "-community" ; do 129for i in "mysql" "mysql-community" "mariadb" ; do
119 [[ "${i}" == ${PN#mysql} ]] || 130 [[ "${i}" == ${PN} ]] ||
120 DEPEND="${DEPEND} !dev-db/mysql${i}" 131 DEPEND="${DEPEND} !dev-db/${i}"
121done 132done
122 133
123RDEPEND="${DEPEND} 134RDEPEND="${DEPEND}
124 !minimal? ( dev-db/mysql-init-scripts ) 135 !minimal? ( dev-db/mysql-init-scripts )
125 selinux? ( sec-policy/selinux-mysql )" 136 selinux? ( sec-policy/selinux-mysql )"
134 145
135# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 146# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
136PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 147PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
137 148
138# For other stuff to bring us in 149# For other stuff to bring us in
139PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})" 150PDEPEND="${PDEPEND} =virtual/mysql-${MYSQL_PV_MAJOR}"
140 151
141# Work out the default SERVER_URI correctly 152# Work out the default SERVER_URI correctly
142if [ -z "${SERVER_URI}" ]; then 153if [ -z "${SERVER_URI}" ]; then
143 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}" 154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
155 if [ "${PN}" == "mariadb" ]; then
156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
157 SERVER_URI="http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/mariadb-${MARIA_FULL_PV}.tar.gz"
144 # The community build is on the mirrors 158 # The community build is on the mirrors
145 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 159 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
146 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz" 160 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz"
147 # The (old) enterprise source is on the primary site only 161 # The (old) enterprise source is on the primary site only
148 elif [ "${PN}" == "mysql" ]; then 162 elif [ "${PN}" == "mysql" ]; then
149 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz" 163 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz"
150 fi 164 fi
160 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2 174 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
161 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" 175 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
162 176
163DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 177DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
164HOMEPAGE="http://www.mysql.com/" 178HOMEPAGE="http://www.mysql.com/"
179if [[ "${PN}" == "mariadb" ]]; then
180 HOMEPAGE="http://askmonty.org/"
181 DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged."
182fi
183if [[ "${PN}" == "mysql-community" ]]; then
184 DESCRIPTION="${DESCRIPTION} (obsolete, move to dev-db/mysql)"
185fi
165LICENSE="GPL-2" 186LICENSE="GPL-2"
166SLOT="0" 187SLOT="0"
167IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test" 188IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
168 189
169mysql_version_is_at_least "4.1" \ 190mysql_version_is_at_least "4.1" \
182|| IUSE="${IUSE} berkdb" 203|| IUSE="${IUSE} berkdb"
183 204
184[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \ 205[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
185&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling" 206&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
186 207
187# PBXT engine 208[[ "${PN}" == "mariadb" ]] \
209&& IUSE="${IUSE} libevent"
210
211# MariaDB has integrated PBXT
212# PBXT_VERSION means that we have a PBXT patch for this PV
213# PBXT was only introduced after 5.1.12
214pbxt_patch_available() {
215 [[ "${PN}" != "mariadb" ]] \
188mysql_version_is_at_least "5.1.12" \ 216 && mysql_version_is_at_least "5.1.12" \
189&& [[ -n "${PBXT_VERSION}" ]] \ 217 && [[ -n "${PBXT_VERSION}" ]]
218 return $?
219}
220
221pbxt_available() {
222 pbxt_patch_available || [[ "${PN}" == "mariadb" ]]
223 return $?
224}
225
226# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
227# MariaDB has integrated XtraDB
228# XTRADB_VERS means that we have a XTRADB patch for this PV
229# XTRADB was only introduced after 5.1.26
230xtradb_patch_available() {
231 [[ "${PN}" != "mariadb" ]] \
232 && mysql_version_is_at_least "5.1.26" \
233 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
234 return $?
235}
236
237pbxt_patch_available \
190&& PBXT_P="pbxt-${PBXT_VERSION}" \ 238&& PBXT_P="pbxt-${PBXT_VERSION}" \
191&& PBXT_SRC_URI="mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \ 239&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
192&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \ 240&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
241
242pbxt_available \
193&& IUSE="${IUSE} pbxt" 243&& IUSE="${IUSE} pbxt"
194 244
195# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set 245xtradb_patch_available \
196mysql_version_is_at_least "5.1.26" \
197&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
198&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ 246&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
247&& 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}" \
199&& XTRADB_SRC_URI="http://www.percona.com/${PN}/xtradb/${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ 249&& XTRADB_SRC_URI2="http://www.percona.com/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
200&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI} )" \ 250&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \
201&& IUSE="${IUSE} xtradb" 251&& IUSE="${IUSE} xtradb"
202 252
203# 253#
204# HELPER FUNCTIONS: 254# HELPER FUNCTIONS:
205# 255#
394 myconf="${myconf} $(use_with perl bench)" 444 myconf="${myconf} $(use_with perl bench)"
395 myconf="${myconf} --enable-assembler" 445 myconf="${myconf} --enable-assembler"
396 myconf="${myconf} --with-extra-tools" 446 myconf="${myconf} --with-extra-tools"
397 myconf="${myconf} --with-innodb" 447 myconf="${myconf} --with-innodb"
398 myconf="${myconf} --without-readline" 448 myconf="${myconf} --without-readline"
449 myconf="${myconf} $(use_with ssl openssl)"
399 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)" 450 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
400 451
401 # --with-vio is not needed anymore, it's on by default and 452 # --with-vio is not needed anymore, it's on by default and
402 # has been removed from configure 453 # has been removed from configure
454 # Apply to 4.x and 5.0.[0-3]
403 if use ssl ; then 455 if use ssl ; then
404 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio" 456 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
405 fi
406
407 if mysql_version_is_at_least "5.1.11" ; then
408 myconf="${myconf} $(use_with ssl)"
409 else
410 myconf="${myconf} $(use_with ssl openssl)"
411 fi 457 fi
412 458
413 if mysql_version_is_at_least "5.0.60" ; then 459 if mysql_version_is_at_least "5.0.60" ; then
414 if use berkdb ; then 460 if use berkdb ; then
415 elog "Berkeley DB support was disabled due to build failures" 461 elog "Berkeley DB support was disabled due to build failures"
472 518
473configure_51() { 519configure_51() {
474 # TODO: !!!! readd --without-readline 520 # TODO: !!!! readd --without-readline
475 # the failure depend upon config/ac-macros/readline.m4 checking into 521 # the failure depend upon config/ac-macros/readline.m4 checking into
476 # readline.h instead of history.h 522 # readline.h instead of history.h
477 myconf="${myconf} $(use_with ssl)" 523 myconf="${myconf} $(use_with ssl ssl /usr)"
478 myconf="${myconf} --enable-assembler" 524 myconf="${myconf} --enable-assembler"
479 myconf="${myconf} --with-geometry" 525 myconf="${myconf} --with-geometry"
480 myconf="${myconf} --with-readline" 526 myconf="${myconf} --with-readline"
481 myconf="${myconf} --with-zlib-dir=/usr/" 527 myconf="${myconf} --with-zlib-dir=/usr/"
482 myconf="${myconf} --without-pstack" 528 myconf="${myconf} --without-pstack"
483 use max-idx-128 && myconf="${myconf} --with-max-indexes=128" 529 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
530 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
531 myconf="${myconf} $(use_enable community community-features)"
532 if use community; then
533 myconf="${myconf} $(use_enable profiling)"
534 else
535 myconf="${myconf} --disable-profiling"
536 fi
537 fi
484 538
485 # 5.1 introduces a new way to manage storage engines (plugins) 539 # 5.1 introduces a new way to manage storage engines (plugins)
486 # like configuration=none 540 # like configuration=none
541 # This base set are required, and will always be statically built.
487 local plugins="csv,myisam,myisammrg,heap" 542 local plugins="csv,myisam,myisammrg,heap"
488 if use extraengine ; then 543 if use extraengine ; then
489 # like configuration=max-no-ndb, archive and example removed in 5.1.11 544 # like configuration=max-no-ndb, archive and example removed in 5.1.11
490 # not added yet: ibmdb2i 545 # not added yet: ibmdb2i
491 # Not supporting as examples: example,daemon_example,ftexample 546 # Not supporting as examples: example,daemon_example,ftexample
492 plugins="${plugins},archive,blackhole,federated,partition" 547 plugins="${plugins},archive,blackhole,federated,partition"
493 548
549 if [[ "${PN}" != "mariadb" ]] ; then
494 elog "Before using the Federated storage engine, please be sure to read" 550 elog "Before using the Federated storage engine, please be sure to read"
495 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 551 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
552 else
553 elog "MariaDB includes the FederatedX engine. Be sure to read"
554 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
555 fi
496 fi 556 fi
497 557
498 # Upstream specifically requests that InnoDB always be built: 558 # Upstream specifically requests that InnoDB always be built:
499 # - innobase, innodb_plugin 559 # - innobase, innodb_plugin
500 # Build falcon if available for 6.x series. 560 # Build falcon if available for 6.x series.
506 if use cluster ; then 566 if use cluster ; then
507 plugins="${plugins},ndbcluster" 567 plugins="${plugins},ndbcluster"
508 myconf="${myconf} --with-ndb-binlog" 568 myconf="${myconf} --with-ndb-binlog"
509 fi 569 fi
510 570
571 if [[ "${PN}" == "mariadb" ]] ; then
572 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
573 # caught above.
574 plugins="${plugins},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)"
581 # This is not optional, without it several upstream testcases fail.
582 # Also strongly recommended by upstream.
583 myconf="${myconf} --with-maria-tmp-tables"
584 fi
585
511 myconf="${myconf} --with-plugins=${plugins}" 586 myconf="${myconf} --with-plugins=${plugins}"
512}
513
514xtradb_applicable() {
515 mysql_version_is_at_least "5.1.26" \
516 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
517 && use xtradb
518 return $?
519}
520
521pbxt_applicable() {
522 mysql_version_is_at_least "5.1.12" \
523 && [[ -n "${PBXT_VERSION}" ]] \
524 && use pbxt
525 return $?
526} 587}
527 588
528pbxt_src_configure() { 589pbxt_src_configure() {
529 mysql_init_vars 590 mysql_init_vars
530 591
532 593
533 einfo "Reconfiguring dir '${PWD}'" 594 einfo "Reconfiguring dir '${PWD}'"
534 AT_GNUCONF_UPDATE="yes" eautoreconf 595 AT_GNUCONF_UPDATE="yes" eautoreconf
535 596
536 local myconf="" 597 local myconf=""
537 myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}" 598 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
538 use debug && myconf="${myconf} --with-debug=full" 599 use debug && myconf="${myconf} --with-debug=full"
539 # TODO: is it safe/needed to use econf here ?
540 ./configure ${myconf} || die "Problem configuring PBXT storage engine" 600 econf ${myconf} || die "Problem configuring PBXT storage engine"
541} 601}
542 602
543pbxt_src_compile() { 603pbxt_src_compile() {
544 # Be backwards compatible for now 604 # Be backwards compatible for now
545 if [[ $EAPI != 2 ]]; then 605 if [[ $EAPI != 2 ]]; then
552 # TODO: modify test suite for PBXT 612 # TODO: modify test suite for PBXT
553} 613}
554 614
555pbxt_src_install() { 615pbxt_src_install() {
556 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null 616 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
557 make install || die "Failed to install PBXT" 617 emake install DESTDIR="${D}" || die "Failed to install PBXT"
558 popd 618 popd
559} 619}
560 620
561# 621#
562# EBUILD FUNCTIONS 622# EBUILD FUNCTIONS
685 rm -f "scripts/mysqlbug" 745 rm -f "scripts/mysqlbug"
686 fi 746 fi
687 747
688 local rebuilddirlist d 748 local rebuilddirlist d
689 749
690 if xtradb_applicable ; then 750 if xtradb_patch_available && use xtradb ; then
691 einfo "Replacing InnoDB with Percona XtraDB" 751 einfo "Replacing InnoDB with Percona XtraDB"
692 pushd "${S}"/storage 752 pushd "${S}"/storage
693 i="innobase" 753 i="innobase"
694 o="${WORKDIR}/storage-${i}.mysql-upstream" 754 o="${WORKDIR}/storage-${i}.mysql-upstream"
695 # Have we been here already? 755 # Have we been here already?
696 [ -h "${i}" ] && rm -f "${i}" 756 [ -d "${o}" ] && rm -f "${i}"
697 # Or maybe we haven't 757 # Or maybe we haven't
698 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 758 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
699 ln -s "${WORKDIR}/${XTRADB_P}" "${i}" 759 cp -ra "${WORKDIR}/${XTRADB_P}" "${i}"
700 popd 760 popd
701 fi 761 fi
702 762
703 if mysql_version_is_at_least "5.1.12" ; then 763 if mysql_version_is_at_least "5.1.12" ; then
704 einfo "Updating innobase cmake"
705 rebuilddirlist="." 764 rebuilddirlist="."
765 # This does not seem to be needed presently. robbat2 2010/02/23
766 #einfo "Updating innobase cmake"
706 # TODO: check this with a cmake expert 767 ## TODO: check this with a cmake expert
707 cmake \ 768 #cmake \
708 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \ 769 # -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
709 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \ 770 # -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
710 "storage/innobase" 771 # "storage/innobase"
711 else 772 else
712 rebuilddirlist=". innobase" 773 rebuilddirlist=". innobase"
713 fi 774 fi
714 775
715 for d in ${rebuilddirlist} ; do 776 for d in ${rebuilddirlist} ; do
799 find . -type f -name Makefile -print0 \ 860 find . -type f -name Makefile -print0 \
800 | xargs -0 -n100 sed -i \ 861 | xargs -0 -n100 sed -i \
801 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 862 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
802 863
803 if [[ $EAPI == 2 ]]; then 864 if [[ $EAPI == 2 ]]; then
804 pbxt_applicable && pbxt_src_configure 865 pbxt_patch_available && use pbxt && pbxt_src_configure
805 fi 866 fi
806} 867}
807 868
808# @FUNCTION: mysql_src_compile 869# @FUNCTION: mysql_src_compile
809# @DESCRIPTION: 870# @DESCRIPTION:
810# Compile the mysql code. 871# Compile the mysql code.
811mysql_src_compile() { 872mysql_src_compile() {
812 # Be backwards compatible for now 873 # Be backwards compatible for now
813 case ${EAPI:-0} in 874 case ${EAPI:-0} in
814 2) : ;; 875 2) : ;;
815 0 | 1) mysql_src_configure ;; 876 0 | 1) mysql_src_configure ;;
816 esac 877 esac
817 878
818 emake || die "emake failed" 879 emake || die "emake failed"
819 880
820 pbxt_applicable && pbxt_src_compile 881 pbxt_patch_available && use pbxt && pbxt_src_compile
821} 882}
822 883
823# @FUNCTION: mysql_src_install 884# @FUNCTION: mysql_src_install
824# @DESCRIPTION: 885# @DESCRIPTION:
825# Install mysql. 886# Install mysql.
831 DESTDIR="${D}" \ 892 DESTDIR="${D}" \
832 benchdir_root="${MY_SHAREDSTATEDIR}" \ 893 benchdir_root="${MY_SHAREDSTATEDIR}" \
833 testroot="${MY_SHAREDSTATEDIR}" \ 894 testroot="${MY_SHAREDSTATEDIR}" \
834 || die "emake install failed" 895 || die "emake install failed"
835 896
836 pbxt_applicable && pbxt_src_install 897 pbxt_patch_available && use pbxt && pbxt_src_install
837 898
838 # Convenience links 899 # Convenience links
839 einfo "Making Convenience links for mysqlcheck multi-call binary" 900 einfo "Making Convenience links for mysqlcheck multi-call binary"
840 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 901 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
841 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 902 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
865 if use !test ; then 926 if use !test ; then
866 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test 927 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
867 fi 928 fi
868 929
869 # Configuration stuff 930 # Configuration stuff
931 if mysql_version_is_at_least "5.1" ; then
932 mysql_mycnf_version="5.1"
870 if mysql_version_is_at_least "4.1" ; then 933 elif mysql_version_is_at_least "4.1" ; then
871 mysql_mycnf_version="4.1" 934 mysql_mycnf_version="4.1"
872 else 935 else
873 mysql_mycnf_version="4.0" 936 mysql_mycnf_version="4.0"
874 fi 937 fi
875 einfo "Building default my.cnf" 938 einfo "Building default my.cnf"
877 doins scripts/mysqlaccess.conf 940 doins scripts/mysqlaccess.conf
878 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 941 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
879 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 942 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
880 > "${TMPDIR}/my.cnf.ok" 943 > "${TMPDIR}/my.cnf.ok"
881 if mysql_version_is_at_least "4.1" && use latin1 ; then 944 if mysql_version_is_at_least "4.1" && use latin1 ; then
882 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 945 sed -i \
946 -e "/character-set/s|utf8|latin1|g" \
947 "${TMPDIR}/my.cnf.ok"
883 fi 948 fi
884 newins "${TMPDIR}/my.cnf.ok" my.cnf 949 newins "${TMPDIR}/my.cnf.ok" my.cnf
885 950
886 # Minimal builds don't have the MySQL server 951 # Minimal builds don't have the MySQL server
887 if ! use minimal ; then 952 if ! use minimal ; then
914 for script in \ 979 for script in \
915 "${S}"/support-files/my-*.cnf \ 980 "${S}"/support-files/my-*.cnf \
916 "${S}"/support-files/magic \ 981 "${S}"/support-files/magic \
917 "${S}"/support-files/ndb-config-2-node.ini 982 "${S}"/support-files/ndb-config-2-node.ini
918 do 983 do
919 dodoc "${script}" 984 [[ -f "$script" ]] && dodoc "${script}"
920 done 985 done
921 986
922 docinto "scripts" 987 docinto "scripts"
923 for script in "${S}"/scripts/mysql* ; do 988 for script in "${S}"/scripts/mysql* ; do
924 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 989 [[ -f "$script" ]] && [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
925 done 990 done
926 991
927 fi 992 fi
928 993
929 mysql_lib_symlinks "${D}" 994 mysql_lib_symlinks "${D}"
963 for script in \ 1028 for script in \
964 support-files/my-*.cnf \ 1029 support-files/my-*.cnf \
965 support-files/magic \ 1030 support-files/magic \
966 support-files/ndb-config-2-node.ini 1031 support-files/ndb-config-2-node.ini
967 do 1032 do
1033 [[ -f "${script}" ]] \
968 dodoc "${script}" 1034 && dodoc "${script}"
969 done 1035 done
970 1036
971 docinto "scripts" 1037 docinto "scripts"
972 for script in scripts/mysql* ; do 1038 for script in scripts/mysql* ; do
1039 [[ -f "${script}" ]] \
973 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 1040 && [[ "${script%.sh}" == "${script}" ]] \
1041 && dodoc "${script}"
974 done 1042 done
975 1043
976 einfo 1044 einfo
977 elog "You might want to run:" 1045 elog "You might want to run:"
978 elog "\"emerge --config =${CATEGORY}/${PF}\"" 1046 elog "\"emerge --config =${CATEGORY}/${PF}\""
979 elog "if this is a new install." 1047 elog "if this is a new install."
980 einfo 1048 einfo
981 fi 1049 fi
982 1050
983 if pbxt_applicable ; then 1051 if pbxt_available && use pbxt ; then
984 # TODO: explain it better 1052 # TODO: explain it better
985 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';" 1053 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
986 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;" 1054 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
987 elog "if, after that, you cannot start the MySQL server," 1055 elog "if, after that, you cannot start the MySQL server,"
988 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then" 1056 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
1039 fi 1107 fi
1040 fi 1108 fi
1041 1109
1042 local pwd1="a" 1110 local pwd1="a"
1043 local pwd2="b" 1111 local pwd2="b"
1112 local MYSQL_ROOT_PASSWORD=''
1044 local maxtry=5 1113 local maxtry=15
1114
1115 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1116 MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1117 fi
1045 1118
1046 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then 1119 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1047 ewarn "You have already a MySQL database in place." 1120 ewarn "You have already a MySQL database in place."
1048 ewarn "(${ROOT}/${MY_DATADIR}/*)" 1121 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1049 ewarn "Please rename or delete it if you wish to replace it." 1122 ewarn "Please rename or delete it if you wish to replace it."
1052 1125
1053 # Bug #213475 - MySQL _will_ object strenously if your machine is named 1126 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1054 # localhost. Also causes weird failures. 1127 # localhost. Also causes weird failures.
1055 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost" 1128 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1056 1129
1057 einfo "Creating the mysql database and setting proper" 1130 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1058 einfo "permissions on it ..."
1059 1131
1060 einfo "Insert a password for the mysql 'root' user" 1132 einfo "Please provide a password for the mysql 'root' user now,"
1133 einfo "or in the MYSQL_ROOT_PASSWORD env var."
1061 ewarn "Avoid [\"'\\_%] characters in the password" 1134 ewarn "Avoid [\"'\\_%] characters in the password"
1062 read -rsp " >" pwd1 ; echo 1135 read -rsp " >" pwd1 ; echo
1063 1136
1064 einfo "Retype the password" 1137 einfo "Retype the password"
1065 read -rsp " >" pwd2 ; echo 1138 read -rsp " >" pwd2 ; echo
1066 1139
1067 if [[ "x$pwd1" != "x$pwd2" ]] ; then 1140 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1068 die "Passwords are not the same" 1141 die "Passwords are not the same"
1142 fi
1143 MYSQL_ROOT_PASSWORD="${pwd1}"
1144 unset pwd1 pwd2
1069 fi 1145 fi
1070 1146
1071 local options="" 1147 local options=""
1072 local sqltmp="$(emktemp)" 1148 local sqltmp="$(emktemp)"
1073 1149
1087 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \ 1163 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1088 || die "MySQL databases not installed" 1164 || die "MySQL databases not installed"
1089 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null 1165 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1090 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null 1166 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1091 1167
1168 # Figure out which options we need to disable to do the setup
1169 helpfile="${TMPDIR}/mysqld-help"
1170 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1171 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 \
1173 ; do
1174 optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1175 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1176 done
1177 # But some options changed names
1178 egrep -sq external-locking "${helpfile}" && \
1179 options="${options/skip-locking/skip-external-locking}"
1180
1092 if mysql_version_is_at_least "4.1.3" ; then 1181 if mysql_version_is_at_least "4.1.3" ; then
1093 options="--skip-ndbcluster"
1094
1095 # Filling timezones, see 1182 # Filling timezones, see
1096 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 1183 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1097 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null 1184 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1098 1185
1099 if [[ -r "${help_tables}" ]] ; then 1186 if [[ -r "${help_tables}" ]] ; then
1100 cat "${help_tables}" >> "${sqltmp}" 1187 cat "${help_tables}" >> "${sqltmp}"
1101 fi 1188 fi
1102 fi 1189 fi
1190
1191 einfo "Creating the mysql database and setting proper"
1192 einfo "permissions on it ..."
1103 1193
1104 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock" 1194 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1105 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid" 1195 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1106 local mysqld="${ROOT}/usr/sbin/mysqld \ 1196 local mysqld="${ROOT}/usr/sbin/mysqld \
1107 ${options} \ 1197 ${options} \
1108 --user=mysql \ 1198 --user=mysql \
1109 --skip-grant-tables \
1110 --basedir=${ROOT}/usr \ 1199 --basedir=${ROOT}/usr \
1111 --datadir=${ROOT}/${MY_DATADIR} \ 1200 --datadir=${ROOT}/${MY_DATADIR} \
1112 --skip-innodb \
1113 --skip-bdb \
1114 --skip-networking \
1115 --max_allowed_packet=8M \ 1201 --max_allowed_packet=8M \
1116 --net_buffer_length=16K \ 1202 --net_buffer_length=16K \
1117 --socket=${socket} \ 1203 --socket=${socket} \
1118 --pid-file=${pidfile}" 1204 --pid-file=${pidfile}"
1205 #einfo "About to start mysqld: ${mysqld}"
1206 ebegin "Starting mysqld"
1119 ${mysqld} & 1207 ${mysqld} &
1208 rc=$?
1120 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do 1209 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1121 maxtry=$((${maxtry}-1)) 1210 maxtry=$((${maxtry}-1))
1122 echo -n "." 1211 echo -n "."
1123 sleep 1 1212 sleep 1
1124 done 1213 done
1214 eend $rc
1125 1215
1216 if ! [[ -S "${socket}" ]]; then
1217 die "Completely failed to start up mysqld with: ${mysqld}"
1218 fi
1219
1220 ebegin "Setting root password"
1126 # Do this from memory, as we don't want clear text passwords in temp files 1221 # Do this from memory, as we don't want clear text passwords in temp files
1127 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'" 1222 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1128 "${ROOT}/usr/bin/mysql" \ 1223 "${ROOT}/usr/bin/mysql" \
1129 --socket=${socket} \ 1224 --socket=${socket} \
1130 -hlocalhost \ 1225 -hlocalhost \
1131 -e "${sql}" 1226 -e "${sql}"
1227 eend $?
1132 1228
1133 einfo "Loading \"zoneinfo\", this step may require a few seconds ..." 1229 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1134
1135 "${ROOT}/usr/bin/mysql" \ 1230 "${ROOT}/usr/bin/mysql" \
1136 --socket=${socket} \ 1231 --socket=${socket} \
1137 -hlocalhost \ 1232 -hlocalhost \
1138 -uroot \ 1233 -uroot \
1139 -p"${pwd1}" \ 1234 -p"${MYSQL_ROOT_PASSWORD}" \
1140 mysql < "${sqltmp}" 1235 mysql < "${sqltmp}"
1236 rc=$?
1237 eend $?
1238 [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1141 1239
1142 # Stop the server and cleanup 1240 # Stop the server and cleanup
1241 einfo "Stopping the server ..."
1143 kill $(< "${pidfile}" ) 1242 kill $(< "${pidfile}" )
1144 rm -f "${sqltmp}" 1243 rm -f "${sqltmp}"
1145 einfo "Stopping the server ..."
1146 wait %1 1244 wait %1
1147 einfo "Done" 1245 einfo "Done"
1148} 1246}
1149 1247
1150# @FUNCTION: mysql_pkg_postrm 1248# @FUNCTION: mysql_pkg_postrm

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

  ViewVC Help
Powered by ViewVC 1.1.20