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

Diff of /eclass/mysql.eclass

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

Revision 1.98 Revision 1.107
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2007 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.98 2008/11/14 01:46:24 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.107 2009/02/28 10:49:50 robbat2 Exp $
4 4
5# Author: Francesco Riosa (Retired) <vivo@gentoo.org> 5# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
6# Maintainer: MySQL Team <mysql-bugs@gentoo.org> 6# Maintainer: MySQL Team <mysql-bugs@gentoo.org>
7# - Luca Longinotti <chtekk@gentoo.org> 7# - Luca Longinotti <chtekk@gentoo.org>
8# - Robin H. Johnson <robbat2@gentoo.org> 8# - Robin H. Johnson <robbat2@gentoo.org>
9 9
10WANT_AUTOCONF="latest" 10WANT_AUTOCONF="latest"
11WANT_AUTOMAKE="latest" 11WANT_AUTOMAKE="latest"
12 12
13inherit eutils flag-o-matic gnuconfig autotools mysql_fx 13inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator
14 14
15# Shorten the path because the socket path length must be shorter than 107 chars 15# Shorten the path because the socket path length must be shorter than 107 chars
16# and we will run a mysql server during test phase 16# and we will run a mysql server during test phase
17S="${WORKDIR}/mysql" 17S="${WORKDIR}/mysql"
18 18
72mysql_version_is_at_least "5.1" \ 72mysql_version_is_at_least "5.1" \
73|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )" 73|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
74 74
75# compile-time-only 75# compile-time-only
76mysql_version_is_at_least "5.1.12" \ 76mysql_version_is_at_least "5.1.12" \
77&& DEPEND="${DEPEND} innodb? ( >=dev-util/cmake-2.4.3 )" 77&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
78 78
79# BitKeeper dependency, compile-time only 79# BitKeeper dependency, compile-time only
80[[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client" 80[[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client"
81 81
82 82
83# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 83# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
84PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 84PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
85
86# For other stuff to bring us in
87PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
85 88
86# Work out the default SERVER_URI correctly 89# Work out the default SERVER_URI correctly
87if [ -z "${SERVER_URI}" ]; then 90if [ -z "${SERVER_URI}" ]; then
88 # The community build is on the mirrors 91 # The community build is on the mirrors
89 if [ "${PN}" == "mysql-community" ]; then 92 if [ "${PN}" == "mysql-community" ]; then
119mysql_version_is_at_least "5.0" \ 122mysql_version_is_at_least "5.0" \
120|| IUSE="${IUSE} raid" 123|| IUSE="${IUSE} raid"
121 124
122mysql_version_is_at_least "5.0.18" \ 125mysql_version_is_at_least "5.0.18" \
123&& IUSE="${IUSE} max-idx-128" 126&& IUSE="${IUSE} max-idx-128"
124
125mysql_version_is_at_least "5.1" \
126&& IUSE="${IUSE} innodb"
127 127
128mysql_version_is_at_least "5.1" \ 128mysql_version_is_at_least "5.1" \
129|| IUSE="${IUSE} berkdb" 129|| IUSE="${IUSE} berkdb"
130 130
131mysql_version_is_at_least "5.1.12" \ 131mysql_version_is_at_least "5.1.12" \
313 mysql_version_is_at_least "4.1.3" \ 313 mysql_version_is_at_least "4.1.3" \
314 && use cluster \ 314 && use cluster \
315 && myconf="${myconf} --without-ndb-debug" 315 && myconf="${myconf} --without-ndb-debug"
316 fi 316 fi
317 317
318 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
319 ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
320 ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
321 ewarn "You MUST file bugs without these variables set."
322 myconf="${myconf} --with-charset=${MYSQL_DEFAULT_CHARSET}"
323 myconf="${myconf} --with-collation=${MYSQL_DEFAULT_COLLATION}"
318 if mysql_version_is_at_least "4.1" && ! use latin1 ; then 324 elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
319 myconf="${myconf} --with-charset=utf8" 325 myconf="${myconf} --with-charset=utf8"
320 myconf="${myconf} --with-collation=utf8_general_ci" 326 myconf="${myconf} --with-collation=utf8_general_ci"
321 else 327 else
322 myconf="${myconf} --with-charset=latin1" 328 myconf="${myconf} --with-charset=latin1"
323 myconf="${myconf} --with-collation=latin1_swedish_ci" 329 myconf="${myconf} --with-collation=latin1_swedish_ci"
324 fi 330 fi
325 331
326 if use embedded ; then 332 if use embedded ; then
327 myconf="${myconf} --with-embedded-privilege-control" 333 myconf="${myconf} --with-embedded-privilege-control"
328 myconf="${myconf} --with-embedded-server" 334 myconf="${myconf} --with-embedded-server"
350 if mysql_version_is_at_least "5.1.11" ; then 356 if mysql_version_is_at_least "5.1.11" ; then
351 myconf="${myconf} $(use_with ssl)" 357 myconf="${myconf} $(use_with ssl)"
352 else 358 else
353 myconf="${myconf} $(use_with ssl openssl)" 359 myconf="${myconf} $(use_with ssl openssl)"
354 fi 360 fi
355 361
356 if mysql_version_is_at_least "5.0.60" ; then 362 if mysql_version_is_at_least "5.0.60" ; then
357 if use berkdb ; then 363 if use berkdb ; then
358 elog "Berkeley DB support was disabled due to build failures" 364 elog "Berkeley DB support was disabled due to build failures"
359 elog "on multiple arches, go to a version earlier than 5.0.60" 365 elog "on multiple arches, go to a version earlier than 5.0.60"
360 elog "if you want it again. Gentoo bug #224067." 366 elog "if you want it again. Gentoo bug #224067."
397 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html" 403 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
398 myconf="${myconf} --with-federated-storage-engine" 404 myconf="${myconf} --with-federated-storage-engine"
399 fi 405 fi
400 fi 406 fi
401 407
408 if [ "${PN}" == "mysql-community" ]; then
409 myconf="${myconf} --enable-community-features"
410 fi
411
402 mysql_version_is_at_least "5.0.18" \ 412 mysql_version_is_at_least "5.0.18" \
403 && use max-idx-128 \ 413 && use max-idx-128 \
404 && myconf="${myconf} --with-max-indexes=128" 414 && myconf="${myconf} --with-max-indexes=128"
405} 415}
406 416
426 436
427 elog "Before using the Federated storage engine, please be sure to read" 437 elog "Before using the Federated storage engine, please be sure to read"
428 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 438 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
429 fi 439 fi
430 440
431 if use innodb ; then 441 # Upstream specifically requests that InnoDB always be built.
432 plugins="${plugins},innobase" 442 plugins="${plugins},innobase"
433 fi
434 443
435 # like configuration=max-no-ndb 444 # like configuration=max-no-ndb
436 if use cluster ; then 445 if use cluster ; then
437 plugins="${plugins},ndbcluster" 446 plugins="${plugins},ndbcluster"
438 myconf="${myconf} --with-ndb-binlog" 447 myconf="${myconf} --with-ndb-binlog"
481 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root." 490 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
482 fi 491 fi
483 fi 492 fi
484 fi 493 fi
485 494
486 # Bug #213475 - MySQL _will_ object strenously if your machine is named
487 # localhost. Also causes weird failures.
488 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
489
490 # Check for USE flag problems in pkg_setup 495 # Check for USE flag problems in pkg_setup
491 if use static && use ssl ; then 496 if use static && use ssl ; then
492 eerror "MySQL does not support being built statically with SSL support enabled!" 497 eerror "MySQL does not support being built statically with SSL support enabled!"
493 die "MySQL does not support being built statically with SSL support enabled!" 498 die "MySQL does not support being built statically with SSL support enabled!"
494 fi 499 fi
505 && ( use cluster || use extraengine ) \ 510 && ( use cluster || use extraengine ) \
506 && use minimal ; then 511 && use minimal ; then
507 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 512 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
508 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 513 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
509 fi 514 fi
510 515
511 # This should come after all of the die statements 516 # This should come after all of the die statements
512 enewgroup mysql 60 || die "problem adding 'mysql' group" 517 enewgroup mysql 60 || die "problem adding 'mysql' group"
513 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user" 518 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
514 519
515 mysql_check_version_range "4.0 to 5.0.99.99" \ 520 mysql_check_version_range "4.0 to 5.0.99.99" \
573 local rebuilddirlist d 578 local rebuilddirlist d
574 579
575 if mysql_version_is_at_least "5.1.12" ; then 580 if mysql_version_is_at_least "5.1.12" ; then
576 rebuilddirlist="." 581 rebuilddirlist="."
577 # TODO: check this with a cmake expert 582 # TODO: check this with a cmake expert
578 use innodb \
579 && cmake \ 583 cmake \
580 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \ 584 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
581 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \ 585 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
582 "storage/innobase" 586 "storage/innobase"
583 else 587 else
584 rebuilddirlist=". innobase" 588 rebuilddirlist=". innobase"
631 # Bug #114895, bug #110149 635 # Bug #114895, bug #110149
632 filter-flags "-O" "-O[01]" 636 filter-flags "-O" "-O[01]"
633 637
634 # glib-2.3.2_pre fix, bug #16496 638 # glib-2.3.2_pre fix, bug #16496
635 append-flags "-DHAVE_ERRNO_AS_DEFINE=1" 639 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
640
641 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
642 # fail badly during cluster startup.
643 if [[ $(gcc-major-version) -lt 4 ]]; then
644 filter-flags "-fstack-protector-all"
645 fi
636 646
637 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing" 647 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
638 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti" 648 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
639 mysql_version_is_at_least "5.0" \ 649 mysql_version_is_at_least "5.0" \
640 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 650 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
670 680
671 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed" 681 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
672 682
673 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install 683 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
674 684
675 insinto "${MY_INCLUDEDIR}"
676 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
677
678 # Convenience links 685 # Convenience links
686 einfo "Making Convenience links for mysqlcheck multi-call binary"
679 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 687 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
680 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 688 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
681 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize" 689 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
682 690
683 # Various junk (my-*.cnf moved elsewhere) 691 # Various junk (my-*.cnf moved elsewhere)
692 einfo "Removing duplicate /usr/share/mysql files"
684 rm -Rf "${D}/usr/share/info" 693 rm -Rf "${D}/usr/share/info"
685 for removeme in "mysql-log-rotate" mysql.server* \ 694 for removeme in "mysql-log-rotate" mysql.server* \
686 binary-configure* my-*.cnf mi_test_all* 695 binary-configure* my-*.cnf mi_test_all*
687 do 696 do
688 rm -f "${D}"/usr/share/mysql/${removeme} 697 rm -f "${D}"/usr/share/mysql/${removeme}
689 done 698 done
690 699
691 # Clean up stuff for a minimal build 700 # Clean up stuff for a minimal build
692 if use minimal ; then 701 if use minimal ; then
702 einfo "Remove all extra content for minimal build"
693 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench} 703 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
694 rm -f "${D}"/usr/bin/{mysql{_install_db,manager*,_secure_installation,_fix_privilege_tables,hotcopy,_convert_table_format,d_multi,_fix_extensions,_zap,_explain_log,_tableinfo,d_safe,_install,_waitpid,binlog,test},myisam*,isam*,pack_isam} 704 rm -f "${D}"/usr/bin/{mysql{_install_db,manager*,_secure_installation,_fix_privilege_tables,hotcopy,_convert_table_format,d_multi,_fix_extensions,_zap,_explain_log,_tableinfo,d_safe,_install,_waitpid,binlog,test},myisam*,isam*,pack_isam}
695 rm -f "${D}/usr/sbin/mysqld" 705 rm -f "${D}/usr/sbin/mysqld"
696 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a 706 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
697 fi 707 fi
700 if mysql_version_is_at_least "4.1" ; then 710 if mysql_version_is_at_least "4.1" ; then
701 mysql_mycnf_version="4.1" 711 mysql_mycnf_version="4.1"
702 else 712 else
703 mysql_mycnf_version="4.0" 713 mysql_mycnf_version="4.0"
704 fi 714 fi
715 einfo "Building default my.cnf"
705 insinto "${MY_SYSCONFDIR}" 716 insinto "${MY_SYSCONFDIR}"
706 doins scripts/mysqlaccess.conf 717 doins scripts/mysqlaccess.conf
707 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 718 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
708 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 719 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
709 > "${TMPDIR}/my.cnf.ok" 720 > "${TMPDIR}/my.cnf.ok"
712 fi 723 fi
713 newins "${TMPDIR}/my.cnf.ok" my.cnf 724 newins "${TMPDIR}/my.cnf.ok" my.cnf
714 725
715 # Minimal builds don't have the MySQL server 726 # Minimal builds don't have the MySQL server
716 if ! use minimal ; then 727 if ! use minimal ; then
728 einfo "Creating initial directories"
717 # Empty directories ... 729 # Empty directories ...
718 diropts "-m0750" 730 diropts "-m0750"
719 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then 731 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
720 dodir "${MY_DATADIR}" 732 dodir "${MY_DATADIR}"
721 keepdir "${MY_DATADIR}" 733 keepdir "${MY_DATADIR}"
729 chown -R mysql:mysql "${D}/${folder}" 741 chown -R mysql:mysql "${D}/${folder}"
730 done 742 done
731 fi 743 fi
732 744
733 # Docs 745 # Docs
746 einfo "Installing docs"
734 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE 747 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
735 doinfo "${S}"/Docs/mysql.info 748 doinfo "${S}"/Docs/mysql.info
736 749
737 # Minimal builds don't have the MySQL server 750 # Minimal builds don't have the MySQL server
738 if ! use minimal ; then 751 if ! use minimal ; then
752 einfo "Including support files and sample configurations"
739 docinto "support-files" 753 docinto "support-files"
740 for script in \ 754 for script in \
741 "${S}"/support-files/my-*.cnf \ 755 "${S}"/support-files/my-*.cnf \
742 "${S}"/support-files/magic \ 756 "${S}"/support-files/magic \
743 "${S}"/support-files/ndb-config-2-node.ini 757 "${S}"/support-files/ndb-config-2-node.ini
833 ewarn "You have already a MySQL database in place." 847 ewarn "You have already a MySQL database in place."
834 ewarn "(${ROOT}/${MY_DATADIR}/*)" 848 ewarn "(${ROOT}/${MY_DATADIR}/*)"
835 ewarn "Please rename or delete it if you wish to replace it." 849 ewarn "Please rename or delete it if you wish to replace it."
836 die "MySQL database already exists!" 850 die "MySQL database already exists!"
837 fi 851 fi
852
853 # Bug #213475 - MySQL _will_ object strenously if your machine is named
854 # localhost. Also causes weird failures.
855 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
838 856
839 einfo "Creating the mysql database and setting proper" 857 einfo "Creating the mysql database and setting proper"
840 einfo "permissions on it ..." 858 einfo "permissions on it ..."
841 859
842 einfo "Insert a password for the mysql 'root' user" 860 einfo "Insert a password for the mysql 'root' user"

Legend:
Removed from v.1.98  
changed lines
  Added in v.1.107

  ViewVC Help
Powered by ViewVC 1.1.20