diff --git a/eclass/mysql.eclass b/eclass/mysql.eclass index 8d320ec..4e9662e 100644 --- a/eclass/mysql.eclass +++ b/eclass/mysql.eclass @@ -1,6 +1,6 @@ # Copyright 1999-2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.121 2009/12/09 18:54:05 robbat2 Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.127 2010/02/01 01:07:08 robbat2 Exp $ # @ECLASS: mysql.eclass # @MAINTAINER: @@ -18,7 +18,11 @@ WANT_AUTOCONF="latest" WANT_AUTOMAKE="latest" -inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator +inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator toolchain-funcs + +# Shorten the path because the socket path length must be shorter than 107 chars +# and we will run a mysql server during test phase +S="${WORKDIR}/mysql" [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z" if [[ "${MY_EXTRAS_VER}" == "live" ]]; then @@ -49,10 +53,6 @@ case "${EAPI:-0}" in die "Unsupported EAPI: ${EAPI}" ;; esac -# Shorten the path because the socket path length must be shorter than 107 chars -# and we will run a mysql server during test phase -S="${WORKDIR}/mysql" - # @ECLASS-VARIABLE: MYSQL_VERSION_ID # @DESCRIPTION: # MYSQL_VERSION_ID will be: @@ -127,6 +127,10 @@ RDEPEND="${DEPEND} mysql_version_is_at_least "5.1" \ || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )" +# compile-time-only +mysql_version_is_at_least "5.1.12" \ +&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3" + # dev-perl/DBD-mysql is needed by some scripts installed by MySQL PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" @@ -151,7 +155,8 @@ SRC_URI="${SERVER_URI}" [[ ${MY_EXTRAS_VER} != live ]] \ && SRC_URI="${SRC_URI} mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2 - http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" + http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2 + http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" for str in ${MYSQL_STORAGE} ; do STORAGE_USE="${str/-*/}" @@ -196,11 +201,42 @@ IUSE="${IUSE} ${STORAGE_IUSE}" # @DESCRIPTION: # Helper function to disable specific tests. mysql_disable_test() { - local testname="${1}" ; shift - local reason="${@}" - local mysql_disable_file="${S}/mysql-test/t/disabled.def" + local rawtestname testname testsuite reason mysql_disable_file + rawtestname="${1}" ; shift + reason="${@}" + ewarn "test '${rawtestname}' disabled: '${reason}'" + + testsuite="${rawtestname/.*}" + testname="${rawtestname/*.}" + mysql_disable_file="${S}/mysql-test/t/disabled.def" + einfo "rawtestname=${rawtestname} testname=${testname} testsuite=${testsuite}" echo ${testname} : ${reason} >> "${mysql_disable_file}" - ewarn "test '${testname}' disabled: '${reason}'" + + # ${S}/mysql-tests/t/disabled.def + # + # ${S}/mysql-tests/suite/federated/disabled.def + # + # ${S}/mysql-tests/suite/jp/t/disabled.def + # ${S}/mysql-tests/suite/ndb/t/disabled.def + # ${S}/mysql-tests/suite/rpl/t/disabled.def + # ${S}/mysql-tests/suite/parts/t/disabled.def + # ${S}/mysql-tests/suite/rpl_ndb/t/disabled.def + # ${S}/mysql-tests/suite/ndb_team/t/disabled.def + # ${S}/mysql-tests/suite/binlog/t/disabled.def + # ${S}/mysql-tests/suite/innodb/t/disabled.def + if [ -n "${testsuite}" ]; then + for mysql_disable_file in \ + ${S}/mysql-test/suite/${testsuite}/disabled.def \ + ${S}/mysql-test/suite/${testsuite}/t/disabled.def \ + FAILED ; do + [ -f "${mysql_disable_file}" ] && break + done + if [ "${mysql_disabled_file}" != "FAILED" ]; then + echo "${testname} : ${reason}" >> "${mysql_disable_file}" + else + ewarn "Could not find testsuite disabled.def location for ${rawtestname}" + fi + fi } # @FUNCTION: mysql_init_vars @@ -524,6 +560,14 @@ mysql_pkg_setup() { die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" fi + # Bug #290570 fun. Upstream made us need a fairly new GCC4. + if mysql_version_is_at_least "5.0.83" ; then + GCC_VER=$(gcc-version) + case ${GCC_VER} in + 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; + esac + fi + # This should come after all of the die statements enewgroup mysql 60 || die "problem adding 'mysql' group" enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user" @@ -652,7 +696,13 @@ mysql_src_prepare() { fi if mysql_version_is_at_least "5.1.12" ; then + einfo "Updating innobase cmake" rebuilddirlist="." + # TODO: check this with a cmake expert + cmake \ + -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \ + -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \ + "storage/innobase" else rebuilddirlist=". innobase" fi diff --git a/eclass/mysql.eclass.diff b/eclass/mysql.eclass.diff new file mode 100644 index 0000000..967c793 --- /dev/null +++ b/eclass/mysql.eclass.diff @@ -0,0 +1,285 @@ +--- /usr/portage/eclass/mysql.eclass 2010-02-01 02:08:45.000000000 +0100 ++++ mysql.eclass 2010-02-01 07:14:49.174800340 +0100 +@@ -63,6 +63,7 @@ + # We also strip off upstream's trailing letter that they use to respin tarballs + + MYSQL_VERSION_ID="" ++MY_PV="${PV/pre/m}" + tpv="${PV%[a-z]}" + tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}" + for vatom in 0 1 2 3 ; do +@@ -87,6 +88,8 @@ + MYSQL_COMMUNITY_FEATURES=1 + elif [ "${PV#5.4}" != "${PV}" ]; then + MYSQL_COMMUNITY_FEATURES=1 ++elif [ "${PV#5.5}" != "${PV}" ]; then ++ MYSQL_COMMUNITY_FEATURES=1 + else + MYSQL_COMMUNITY_FEATURES=0 + fi +@@ -138,10 +141,10 @@ + if [ -z "${SERVER_URI}" ]; then + # The community build is on the mirrors + if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then +- SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz" ++ SERVER_URI="mirror://mysql/Downloads/MySQL-${MY_PV%.*}/mysql-${MY_PV//_/-}.tar.gz" + # The (old) enterprise source is on the primary site only + elif [ "${PN}" == "mysql" ]; then +- SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz" ++ SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV//_/-}.tar.gz" + fi + fi + +@@ -155,19 +158,11 @@ + http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2 + http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" + +-# PBXT engine +-mysql_version_is_at_least "5.1.12" \ +-&& [[ -n "${PBXT_VERSION}" ]] \ +-&& PBXT_P="pbxt-${PBXT_VERSION}" \ +-&& PBXT_SRC_URI="mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \ +-&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" +- +-# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set +-mysql_version_is_at_least "5.1.26" \ +-&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \ +-&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ +-&& XTRADB_SRC_URI="http://www.percona.com/${PN}/xtradb/${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ +-&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI} )" ++for str in ${MYSQL_STORAGE} ; do ++ STORAGE_USE="${str/-*/}" ++ SRC_URI="${SRC_URI} ${STORAGE_USE}? ( http://ftp.mars.arge.at/mysql/mysql-storage-${str}.tar.gz )" ++ STORAGE_IUSE="${STORAGE_IUSE} ${STORAGE_USE}" ++done + + DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." + HOMEPAGE="http://www.mysql.com/" +@@ -190,17 +185,14 @@ + mysql_version_is_at_least "5.1" \ + || IUSE="${IUSE} berkdb" + +-mysql_version_is_at_least "5.1.12" \ +-&& [[ -n "${PBXT_VERSION}" ]] \ +-&& IUSE="${IUSE} pbxt" +- + mysql_version_is_at_least "5.1.26" \ +-&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \ +-&& IUSE="${IUSE} xtradb" ++&& IUSE="${IUSE} innodb xtradb dynamicplugins" + + [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \ + && IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling" + ++IUSE="${IUSE} ${STORAGE_IUSE}" ++ + # + # HELPER FUNCTIONS: + # +@@ -479,15 +471,14 @@ + myconf="${myconf} --enable-assembler" + myconf="${myconf} --with-geometry" + myconf="${myconf} --with-readline" +- myconf="${myconf} --with-row-based-replication" +- myconf="${myconf} --with-zlib=/usr/$(get_libdir)" ++ myconf="${myconf} --with-zlib-dir=/usr" + myconf="${myconf} --without-pstack" + use max-idx-128 && myconf="${myconf} --with-max-indexes=128" + +- # 5.1 introduces a new way to manage storage engines (plugins) ++ # 5.1 introduces a new way to manage storage engines (plugins) + # like configuration=none + local plugins="csv,myisam,myisammrg,heap" +- if use extraengine ; then ++ if use extraengine && ! use dynamicplugins ; then + # like configuration=max-no-ndb, archive and example removed in 5.1.11 + plugins="${plugins},archive,blackhole,example,federated,partition" + +@@ -504,44 +495,29 @@ + myconf="${myconf} --with-ndb-binlog" + fi + +- if mysql_version_is_at_least "5.2" ; then ++ if mysql_version_is_at_least "6.0" ; then + plugins="${plugins},falcon" + fi + +- myconf="${myconf} --with-plugins=${plugins}" +-} +- +-pbxt_src_configure() { +- mysql_init_vars +- +- pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null +- +- einfo "Reconfiguring dir '${PWD}'" +- AT_GNUCONF_UPDATE="yes" eautoreconf +- +- local myconf="" +- myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}" +- use debug && myconf="${myconf} --with-debug=full" +- # TODO: is it safe/needed to use econf here ? +- ./configure ${myconf} || die "Problem configuring PBXT storage engine" +-} +- +-pbxt_src_compile() { +- # Be backwards compatible for now +- if [[ $EAPI != 2 ]]; then +- pbxt_src_configure +- fi +- # TODO: is it safe/needed to use emake here ? +- make || die "Problem making PBXT storage engine (${myconf})" +- +- popd +- # TODO: modify test suite for PBXT +-} ++ for str in ${STORAGE_IUSE} ; do ++ if use ${str} ; then ++ # don't confuse autoconf by specifying the plugins to or more times ++ if ! use dynamicplugins ; then ++ [[ -d storage/${str} ]] && plugins="${plugins},${str}" ++ fi ++ # suppress error message ++ [[ ${str} = "innodb" ]] && str="innobase" ++ [[ ${str} = "xtradb" ]] && str="innobase" ++ [[ ! -d storage/${str} ]] && eerror "use ${str} but no ${str} plugin" ++ if [ -e storage/${str}/setup.sh ]; then ++ pushd storage/${str} ++ sh setup.sh ++ popd ++ fi ++ fi ++ done + +-pbxt_src_install() { +- pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null +- make install || die "Failed to install PBXT" +- popd ++ myconf="${myconf} --with-plugins=${plugins}" + } + + # +@@ -609,6 +585,22 @@ + mysql_init_vars + + unpack ${A} ++ ++ for str in ${MYSQL_STORAGE} ; do ++ storage_name="${str/-*/}" ++ if use ${storage_name} ; then ++ einfo "Moving ${str/-/ Storage Engine Version } in place" ++ pushd "${WORKDIR}/${MY_SOURCEDIR}"/storage ++ i="${WORKDIR}/mysql-storage-${str}" ++ o="${storage_name}" ++ # Have we been here already ? or are we updating the included engine ! ++ [ -h "${o}" ] && rm -f "${o}" ++ # Or maybe we haven't ++ [ -d "${i}" -a ! -d "${o}" ] && cp -R "${i}"/* "${WORKDIR}/${MY_SOURCEDIR}" ++ popd ++ fi ++ done ++ + # Grab the patches + [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack + +@@ -659,16 +651,47 @@ + + local rebuilddirlist d + +- if mysql_version_is_at_least "5.1.26" && use xtradb ; then ++ ++ ++ if mysql_version_is_at_least "5.1.26" && use xtradb && use innodb ; then ++ eerror "Percona XtraDB and Innobase innoDB can not be insalled at the same time." ++ elif mysql_version_is_at_least "5.1.26" && use xtradb && ! use innodb ; then + einfo "Replacing InnoDB with Percona XtraDB" ++ einfo "Removing InnoDB Plugin Storage Engine" ++ pushd "${S}"/storage ++ # the innodb_plugin is a reason for compile errors if we replace innobase ++ i="innodb_plugin" ++ o="${WORKDIR}/storage-${i}.mysql-upstream" ++ # Have we been here already? ++ [ -h "${i}" ] && rm -f "${i}" ++ # Or maybe we haven't ++ [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" ++ i="innobase" ++ o="${WORKDIR}/storage-${i}.mysql-upstream" ++ # Have we been here already? ++ [ -h "${i}" ] && rm -f "${i}" ++ # Or maybe we haven't ++ [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" ++ mv -f "xtradb" "${i}" ++ popd ++ elif mysql_version_is_at_least "5.1.26" && use innodb && ! use xtradb ; then ++ einfo "Replacing InnoDB with Innobase innoDB" ++ einfo "Removing InnoDB Plugin Storage Engine" + pushd "${S}"/storage ++ # the innodb_plugin is a reason for compile errors if we replace innobase ++ i="innodb_plugin" ++ o="${WORKDIR}/storage-${i}.mysql-upstream" ++ # Have we been here already? ++ [ -h "${i}" ] && rm -f "${i}" ++ # Or maybe we haven't ++ [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" + i="innobase" + o="${WORKDIR}/storage-${i}.mysql-upstream" + # Have we been here already? + [ -h "${i}" ] && rm -f "${i}" + # Or maybe we haven't + [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" +- ln -s "${WORKDIR}/${XTRADB_P}" "${i}" ++ mv -f "innodb" "${i}" + popd + fi + +@@ -771,10 +794,6 @@ + find . -type f -name Makefile -print0 \ + | xargs -0 -n100 sed -i \ + -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' +- +- if [[ $EAPI == 2 ]]; then +- mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_configure +- fi + } + + # @FUNCTION: mysql_src_compile +@@ -788,8 +807,6 @@ + esac + + emake || die "emake failed" +- +- mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile + } + + # @FUNCTION: mysql_src_install +@@ -801,8 +818,6 @@ + + emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed" + +- mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install +- + # Convenience links + einfo "Making Convenience links for mysqlcheck multi-call binary" + dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" +@@ -941,21 +956,6 @@ + einfo + fi + +- if mysql_version_is_at_least "5.1.12" && use pbxt ; then +- # TODO: explain it better +- elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';" +- elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;" +- elog "if, after that, you cannot start the MySQL server," +- elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then" +- elog "use the MySQL upgrade script to restore the table" +- elog "or execute the following SQL command:" +- elog " CREATE TABLE IF NOT EXISTS plugin (" +- elog " name char(64) binary DEFAULT '' NOT NULL," +- elog " dl char(128) DEFAULT '' NOT NULL," +- elog " PRIMARY KEY (name)" +- elog " ) CHARACTER SET utf8 COLLATE utf8_bin;" +- fi +- + mysql_check_version_range "4.0 to 5.0.99.99" \ + && use berkdb \ + && elog "Berkeley DB support is deprecated and will be removed in future versions!"