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

Diff of /eclass/mysql.eclass

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

Revision 1.108 Revision 1.123
1# Copyright 1999-2007 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/Attic/mysql.eclass,v 1.108 2009/02/28 10:50:24 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/Attic/mysql.eclass,v 1.123 2009/12/10 01:27:59 robbat2 Exp $
4 4
5# @ECLASS: mysql.eclass
6# @MAINTAINER:
5# Author: Francesco Riosa (Retired) <vivo@gentoo.org> 7# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
6# Maintainer: MySQL Team <mysql-bugs@gentoo.org> 8# Maintainers: MySQL Team <mysql-bugs@gentoo.org>
7# - Luca Longinotti <chtekk@gentoo.org> 9# - Luca Longinotti <chtekk@gentoo.org>
8# - Robin H. Johnson <robbat2@gentoo.org> 10# - Robin H. Johnson <robbat2@gentoo.org>
11# @BLURB: This eclass provides most of the functions for mysql ebuilds
12# @DESCRIPTION:
13# 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# scr_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
16# phase hooks.
9 17
10WANT_AUTOCONF="latest" 18WANT_AUTOCONF="latest"
11WANT_AUTOMAKE="latest" 19WANT_AUTOMAKE="latest"
12 20
13inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator 21inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator
22
23case "${EAPI:-0}" in
24 2)
25 EXPORT_FUNCTIONS pkg_setup \
26 src_unpack src_prepare \
27 src_configure src_compile \
28 src_install \
29 pkg_preinst pkg_postinst \
30 pkg_config pkg_postrm
31 IUSE_DEFAULT_ON='+'
32 ;;
33 0 | 1)
34 EXPORT_FUNCTIONS pkg_setup \
35 src_unpack \
36 src_compile \
37 src_install \
38 pkg_preinst pkg_postinst \
39 pkg_config pkg_postrm
40 ;;
41 *)
42 die "Unsupported EAPI: ${EAPI}" ;;
43esac
14 44
15# Shorten the path because the socket path length must be shorter than 107 chars 45# 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 46# and we will run a mysql server during test phase
17S="${WORKDIR}/mysql" 47S="${WORKDIR}/mysql"
18 48
21 EGIT_PROJECT=mysql-extras 51 EGIT_PROJECT=mysql-extras
22 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git" 52 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
23 inherit git 53 inherit git
24fi 54fi
25 55
26if [[ ${PR#r} -lt 60 ]] ; then 56# @ECLASS-VARIABLE: MYSQL_VERSION_ID
27 IS_BITKEEPER=0 57# @DESCRIPTION:
28elif [[ ${PR#r} -lt 90 ]] ; then
29 IS_BITKEEPER=60
30else
31 IS_BITKEEPER=90
32fi
33
34# MYSQL_VERSION_ID will be: 58# MYSQL_VERSION_ID will be:
35# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 59# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
36# This is an important part, because many of the choices the MySQL ebuild will do 60# This is an important part, because many of the choices the MySQL ebuild will do
37# depend on this variable. 61# depend on this variable.
38# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803" 62# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
47 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}" 71 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
48done 72done
49# strip leading "0" (otherwise it's considered an octal number by BASH) 73# strip leading "0" (otherwise it's considered an octal number by BASH)
50MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"} 74MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
51 75
76# @ECLASS-VARIABLE: MYSQL_COMMUNITY_FEATURES
77# @DESCRIPTION:
78# Specifiy if community features are available. Possible values are 1 (yes)
79# and 0 (no).
80# Community features are available in mysql-community
81# AND in the re-merged mysql-5.0.82 and newer
82if [ "${PN}" == "mysql-community" ]; then
83 MYSQL_COMMUNITY_FEATURES=1
84elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
85 MYSQL_COMMUNITY_FEATURES=1
86elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
87 MYSQL_COMMUNITY_FEATURES=1
88elif [ "${PV#5.4}" != "${PV}" ]; then
89 MYSQL_COMMUNITY_FEATURES=1
90else
91 MYSQL_COMMUNITY_FEATURES=0
92fi
93
94# @ECLASS-VARIABLE: XTRADB_VER
95# @DESCRIPTION:
96# Version of the XTRADB storage engine
97XTRADB_VER="${XTRADB_VER}"
98
99# @ECLASS-VARIABLE: PERCONA_VER
100# @DESCRIPTION:
101# Designation by PERCONA for a MySQL version to apply an XTRADB release
102PERCONA_VER="${PERCONA_VER}"
103
52# Be warned, *DEPEND are version-dependant 104# Be warned, *DEPEND are version-dependant
53# These are used for both runtime and compiletime 105# These are used for both runtime and compiletime
54DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d ) 106DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
55 userland_GNU? ( sys-process/procps ) 107 userland_GNU? ( sys-process/procps )
56 >=sys-apps/sed-4 108 >=sys-apps/sed-4
74 126
75# compile-time-only 127# compile-time-only
76mysql_version_is_at_least "5.1.12" \ 128mysql_version_is_at_least "5.1.12" \
77&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3" 129&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
78 130
79# BitKeeper dependency, compile-time only
80[[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client"
81
82
83# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 131# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
84PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 132PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
85 133
86# For other stuff to bring us in 134# For other stuff to bring us in
87PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})" 135PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
88 136
89# Work out the default SERVER_URI correctly 137# Work out the default SERVER_URI correctly
90if [ -z "${SERVER_URI}" ]; then 138if [ -z "${SERVER_URI}" ]; then
91 # The community build is on the mirrors 139 # The community build is on the mirrors
92 if [ "${PN}" == "mysql-community" ]; then 140 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
93 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz" 141 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz"
94 # The enterprise source is on the primary site only 142 # The (old) enterprise source is on the primary site only
95 elif [ "${PN}" == "mysql" ]; then 143 elif [ "${PN}" == "mysql" ]; then
96 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz" 144 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz"
97 fi 145 fi
98fi 146fi
99 147
100# Define correct SRC_URIs 148# Define correct SRC_URIs
101SRC_URI="${SERVER_URI}" 149SRC_URI="${SERVER_URI}"
102 150
103[[ ${MY_EXTRAS_VER} != live ]] && SRC_URI="${SRC_URI} 151# Gentoo patches to MySQL
152[[ ${MY_EXTRAS_VER} != live ]] \
153&& SRC_URI="${SRC_URI}
104 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2 154 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
105 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" 155 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
156
157# PBXT engine
106mysql_version_is_at_least "5.1.12" \ 158mysql_version_is_at_least "5.1.12" \
107&& [[ -n "${PBXT_VERSION}" ]] \ 159&& [[ -n "${PBXT_VERSION}" ]] \
108&& SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )" 160&& PBXT_P="pbxt-${PBXT_VERSION}" \
161&& PBXT_SRC_URI="mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
162&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )"
163
164# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
165mysql_version_is_at_least "5.1.26" \
166&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
167&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
168&& XTRADB_SRC_URI="http://www.percona.com/${PN}/xtradb/${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
169&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI} )"
109 170
110DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 171DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
111HOMEPAGE="http://www.mysql.com/" 172HOMEPAGE="http://www.mysql.com/"
112LICENSE="GPL-2" 173LICENSE="GPL-2"
113SLOT="0" 174SLOT="0"
114IUSE="big-tables debug embedded minimal perl selinux ssl static" 175IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static"
115 176
116mysql_version_is_at_least "4.1" \ 177mysql_version_is_at_least "4.1" \
117&& IUSE="${IUSE} latin1" 178&& IUSE="${IUSE} latin1"
118 179
119mysql_version_is_at_least "4.1.3" \ 180mysql_version_is_at_least "4.1.3" \
127 188
128mysql_version_is_at_least "5.1" \ 189mysql_version_is_at_least "5.1" \
129|| IUSE="${IUSE} berkdb" 190|| IUSE="${IUSE} berkdb"
130 191
131mysql_version_is_at_least "5.1.12" \ 192mysql_version_is_at_least "5.1.12" \
193&& [[ -n "${PBXT_VERSION}" ]] \
132&& IUSE="${IUSE} pbxt" 194&& IUSE="${IUSE} pbxt"
133 195
134EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \ 196mysql_version_is_at_least "5.1.26" \
135 pkg_postinst pkg_config pkg_postrm 197&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
198&& IUSE="${IUSE} xtradb"
199
200[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
201&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
136 202
137# 203#
138# HELPER FUNCTIONS: 204# HELPER FUNCTIONS:
139# 205#
140 206
141bitkeeper_fetch() { 207# @FUNCTION: mysql_disable_test
142 local reposuf 208# @DESCRIPTION:
143 if [[ -z "${1}" ]] ; then 209# Helper function to disable specific tests.
144 local tpv
145 tpv=( ${PV//[-._]/ } )
146 reposuf="mysql-${tpv[0]}.${tpv[1]}"
147 else
148 reposuf="${1}"
149 fi
150 einfo "Using '${reposuf}' repository."
151 local repo_uri="bk://mysql.bkbits.net/${reposuf}"
152 ## -- ebk_store_dir: bitkeeper sources store directory
153 local ebk_store_dir="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/bk-src"
154 ## -- ebk_fetch_cmd: bitkeeper fetch command
155 # always fetch the latest revision, use -r<revision> if a specified revision is wanted
156 # hint: does not work
157 local ebk_fetch_cmd="sfioball"
158 ## -- ebk_update_cmd: bitkeeper update command
159 local ebk_update_cmd="update"
160
161 # addread "/etc/bitkeeper"
162 addwrite "${ebk_store_dir}"
163
164 if [[ ! -d "${ebk_store_dir}" ]] ; then
165 debug-print "${FUNCNAME}: initial checkout, creating bitkeeper directory ..."
166 mkdir -p "${ebk_store_dir}" || die "BK: couldn't mkdir ${ebk_store_dir}"
167 fi
168
169 pushd "${ebk_store_dir}" || die "BK: couldn't chdir to ${ebk_store_dir}"
170
171 local wc_path=${reposuf}
172
173 if [[ ! -d "${wc_path}" ]] ; then
174 local options="-r+"
175
176 # first checkout
177 einfo "bitkeeper checkout start -->"
178 einfo " repository: ${repo_uri}"
179
180 ${ebk_fetch_cmd} ${options} "${repo_uri}" "${wc_path}" \
181 || die "BK: couldn't fetch from ${repo_uri}"
182 else
183 if [[ ! -d "${wc_path}/BK" ]] ; then
184 popd
185 die "Looks like ${wc_path} is not a bitkeeper path"
186 fi
187
188 # update working copy
189 einfo "bitkeeper update start -->"
190 einfo " repository: ${repo_uri}"
191
192 ${ebk_update_cmd} "${repo_uri}" "${wc_path}" \
193 || die "BK: couldn't update from ${repo_uri} to ${wc_path}"
194 fi
195
196 einfo " working copy: ${wc_path}"
197 cd "${wc_path}"
198 rsync -rlpgo --exclude="BK/" . "${S}" || die "BK: couldn't export to ${S}"
199
200 echo
201 popd
202}
203
204mysql_disable_test() { 210mysql_disable_test() {
205 local testname="${1}" ; shift 211 local testname="${1}" ; shift
206 local reason="${@}" 212 local reason="${@}"
207 local mysql_disable_file="${S}/mysql-test/t/disabled.def" 213 local mysql_disable_file="${S}/mysql-test/t/disabled.def"
208 echo ${testname} : ${reason} >> "${mysql_disable_file}" 214 echo ${testname} : ${reason} >> "${mysql_disable_file}"
209 ewarn "test '${testname}' disabled: '${reason}'" 215 ewarn "test '${testname}' disabled: '${reason}'"
210} 216}
211 217
218# @FUNCTION: mysql_init_vars
219# @DESCRIPTION:
212# void mysql_init_vars() 220# void mysql_init_vars()
213#
214# Initialize global variables 221# Initialize global variables
215# 2005-11-19 <vivo@gentoo.org> 222# 2005-11-19 <vivo@gentoo.org>
216
217mysql_init_vars() { 223mysql_init_vars() {
218 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"} 224 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
219 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"} 225 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
220 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"} 226 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
221 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"} 227 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
248 PREVIOUS_DATADIR="yes" 254 PREVIOUS_DATADIR="yes"
249 else 255 else
250 PREVIOUS_DATADIR="no" 256 PREVIOUS_DATADIR="no"
251 fi 257 fi
252 export PREVIOUS_DATADIR 258 export PREVIOUS_DATADIR
259 fi
260 else
261 if [[ ${EBUILD_PHASE} == "config" ]]; then
262 local new_MY_DATADIR
263 new_MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
264 | sed -ne '/datadir/s|^--datadir=||p' \
265 | tail -n1`
266
267 if [[ ( -n "${new_MY_DATADIR}" ) && ( "${new_MY_DATADIR}" != "${MY_DATADIR}" ) ]]; then
268 ewarn "MySQL MY_DATADIR has changed"
269 ewarn "from ${MY_DATADIR}"
270 ewarn "to ${new_MY_DATADIR}"
271 MY_DATADIR="${new_MY_DATADIR}"
272 fi
253 fi 273 fi
254 fi 274 fi
255 275
256 MY_SOURCEDIR=${SERVER_URI##*/} 276 MY_SOURCEDIR=${SERVER_URI##*/}
257 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*} 277 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
403 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html" 423 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
404 myconf="${myconf} --with-federated-storage-engine" 424 myconf="${myconf} --with-federated-storage-engine"
405 fi 425 fi
406 fi 426 fi
407 427
408 if [ "${PN}" == "mysql-community" ]; then 428 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
409 myconf="${myconf} --enable-community-features" 429 myconf="${myconf} `use_enable community community-features`"
430 if use community; then
431 myconf="${myconf} `use_enable profiling`"
432 else
433 myconf="${myconf} --disable-profiling"
434 fi
410 fi 435 fi
411 436
412 mysql_version_is_at_least "5.0.18" \ 437 mysql_version_is_at_least "5.0.18" \
413 && use max-idx-128 \ 438 && use max-idx-128 \
414 && myconf="${myconf} --with-max-indexes=128" 439 && myconf="${myconf} --with-max-indexes=128"
452 fi 477 fi
453 478
454 myconf="${myconf} --with-plugins=${plugins}" 479 myconf="${myconf} --with-plugins=${plugins}"
455} 480}
456 481
457pbxt_src_compile() { 482pbxt_src_configure() {
458 mysql_init_vars 483 mysql_init_vars
459 484
460 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null 485 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
461 486
462 einfo "Reconfiguring dir '${PWD}'" 487 einfo "Reconfiguring dir '${PWD}'"
465 local myconf="" 490 local myconf=""
466 myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}" 491 myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}"
467 use debug && myconf="${myconf} --with-debug=full" 492 use debug && myconf="${myconf} --with-debug=full"
468 # TODO: is it safe/needed to use econf here ? 493 # TODO: is it safe/needed to use econf here ?
469 ./configure ${myconf} || die "Problem configuring PBXT storage engine" 494 ./configure ${myconf} || die "Problem configuring PBXT storage engine"
495}
496
497pbxt_src_compile() {
498 # Be backwards compatible for now
499 if [[ $EAPI != 2 ]]; then
500 pbxt_src_configure
501 fi
470 # TODO: is it safe/needed to use emake here ? 502 # TODO: is it safe/needed to use emake here ?
471 make || die "Problem making PBXT storage engine (${myconf})" 503 make || die "Problem making PBXT storage engine (${myconf})"
472 504
473 popd 505 popd
474 # TODO: modify test suite for PBXT 506 # TODO: modify test suite for PBXT
481} 513}
482 514
483# 515#
484# EBUILD FUNCTIONS 516# EBUILD FUNCTIONS
485# 517#
518# @FUNCTION: mysql_pkg_setup
519# @DESCRIPTION:
520# Perform some basic tests and tasks during pkg_setup phase:
521# die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
522# check for conflicting use flags
523# create new user and group for mysql
524# warn about deprecated features
486mysql_pkg_setup() { 525mysql_pkg_setup() {
487 if hasq test ${FEATURES} ; then 526 if hasq test ${FEATURES} ; then
488 if ! use minimal ; then 527 if ! use minimal ; then
489 if [[ $UID -eq 0 ]]; then 528 if [[ $UID -eq 0 ]]; then
490 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root." 529 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
520 mysql_check_version_range "4.0 to 5.0.99.99" \ 559 mysql_check_version_range "4.0 to 5.0.99.99" \
521 && use berkdb \ 560 && use berkdb \
522 && elog "Berkeley DB support is deprecated and will be removed in future versions!" 561 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
523} 562}
524 563
564# @FUNCTION: mysql_src_unpack
565# @DESCRIPTION:
566# Unpack the source code and call mysql_src_prepare for EAPI < 2.
525mysql_src_unpack() { 567mysql_src_unpack() {
526 # Initialize the proper variables first 568 # Initialize the proper variables first
527 mysql_init_vars 569 mysql_init_vars
528 570
529 unpack ${A} 571 unpack ${A}
530 # Grab the patches 572 # Grab the patches
531 [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack 573 [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
532 # Bitkeeper checkout support 574
533 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then
534 if mysql_check_version_range "5.1 to 5.1.99" ; then
535 bitkeeper_fetch "mysql-5.1-ndb"
536 elif mysql_check_version_range "5.2 to 5.2.99" ; then
537 bitkeeper_fetch "mysql-5.2-falcon"
538 else
539 bitkeeper_fetch
540 fi
541 cd "${S}"
542 einfo "Running upstream autorun over BK sources ..."
543 BUILD/autorun.sh
544 else
545 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}" 575 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
576
577 # Be backwards compatible for now
578 case ${EAPI:-0} in
579 2) : ;;
580 0 | 1) mysql_src_prepare ;;
581 esac
582}
583
584# @FUNCTION: mysql_src_prepare
585# @DESCRIPTION:
586# Apply patches to the source code and remove unneeded bundled libs.
587mysql_src_prepare() {
546 cd "${S}" 588 cd "${S}"
547 fi
548 589
549 # Apply the patches for this MySQL version 590 # Apply the patches for this MySQL version
550 EPATCH_SUFFIX="patch" 591 EPATCH_SUFFIX="patch"
551 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory" 592 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
552 # Clean out old items 593 # Clean out old items
565 find . -name 'Makefile.am' \ 606 find . -name 'Makefile.am' \
566 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \; 607 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
567 608
568 if mysql_version_is_at_least "4.1" ; then 609 if mysql_version_is_at_least "4.1" ; then
569 # Remove what needs to be recreated, so we're sure it's actually done 610 # Remove what needs to be recreated, so we're sure it's actually done
611 einfo "Cleaning up old buildscript files"
570 find . -name Makefile \ 612 find . -name Makefile \
571 -o -name Makefile.in \ 613 -o -name Makefile.in \
572 -o -name configure \ 614 -o -name configure \
573 -exec rm -f {} \; 615 -exec rm -f {} \;
574 rm -f "ltmain.sh" 616 rm -f "ltmain.sh"
575 rm -f "scripts/mysqlbug" 617 rm -f "scripts/mysqlbug"
576 fi 618 fi
577 619
578 local rebuilddirlist d 620 local rebuilddirlist d
579 621
622 if mysql_version_is_at_least "5.1.26" && use xtradb ; then
623 einfo "Replacing InnoDB with Percona XtraDB"
624 pushd "${S}"/storage
625 i="innobase"
626 o="${WORKDIR}/storage-${i}.mysql-upstream"
627 # Have we been here already?
628 [ -h "${i}" ] && rm -f "${i}"
629 # Or maybe we haven't
630 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
631 ln -s "${WORKDIR}/${XTRADB_P}" "${i}"
632 popd
633 fi
634
580 if mysql_version_is_at_least "5.1.12" ; then 635 if mysql_version_is_at_least "5.1.12" ; then
636 einfo "Updating innobase cmake"
581 rebuilddirlist="." 637 rebuilddirlist="."
582 # TODO: check this with a cmake expert 638 # TODO: check this with a cmake expert
583 cmake \ 639 cmake \
584 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \ 640 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
585 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \ 641 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
595 popd &>/dev/null 651 popd &>/dev/null
596 done 652 done
597 653
598 if mysql_check_version_range "4.1 to 5.0.99.99" \ 654 if mysql_check_version_range "4.1 to 5.0.99.99" \
599 && use berkdb ; then 655 && use berkdb ; then
656 einfo "Fixing up berkdb buildsystem"
600 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh" 657 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
601 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \ 658 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
602 || die "Could not copy libtool.m4 to bdb/dist/" 659 || die "Could not copy libtool.m4 to bdb/dist/"
603 #These files exist only with libtool-2*, and need to be included. 660 #These files exist only with libtool-2*, and need to be included.
604 if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then 661 if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
612 || die "Failed bdb reconfigure" 669 || die "Failed bdb reconfigure"
613 popd &>/dev/null 670 popd &>/dev/null
614 fi 671 fi
615} 672}
616 673
674# @FUNCTION: mysql_src_configure
675# @DESCRIPTION:
676# Configure mysql to build the code for Gentoo respecting the use flags.
617mysql_src_compile() { 677mysql_src_configure() {
618 # Make sure the vars are correctly initialized 678 # Make sure the vars are correctly initialized
619 mysql_init_vars 679 mysql_init_vars
620 680
621 # $myconf is modified by the configure_* functions 681 # $myconf is modified by the configure_* functions
622 local myconf="" 682 local myconf=""
647 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing" 707 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
648 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti" 708 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
649 mysql_version_is_at_least "5.0" \ 709 mysql_version_is_at_least "5.0" \
650 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 710 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
651 export CXXFLAGS 711 export CXXFLAGS
712
713 # bug #283926, with GCC4.4, this is required to get correct behavior.
714 append-flags -fno-strict-aliasing
652 715
653 econf \ 716 econf \
654 --libexecdir="/usr/sbin" \ 717 --libexecdir="/usr/sbin" \
655 --sysconfdir="${MY_SYSCONFDIR}" \ 718 --sysconfdir="${MY_SYSCONFDIR}" \
656 --localstatedir="${MY_LOCALSTATEDIR}" \ 719 --localstatedir="${MY_LOCALSTATEDIR}" \
667 # TODO: Move this before autoreconf !!! 730 # TODO: Move this before autoreconf !!!
668 find . -type f -name Makefile -print0 \ 731 find . -type f -name Makefile -print0 \
669 | xargs -0 -n100 sed -i \ 732 | xargs -0 -n100 sed -i \
670 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 733 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
671 734
735 if [[ $EAPI == 2 ]]; then
736 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_configure
737 fi
738}
739
740# @FUNCTION: mysql_src_compile
741# @DESCRIPTION:
742# Compile the mysql code.
743mysql_src_compile() {
744 # Be backwards compatible for now
745 case ${EAPI:-0} in
746 2) : ;;
747 0 | 1) mysql_src_configure ;;
748 esac
749
672 emake || die "emake failed" 750 emake || die "emake failed"
673 751
674 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile 752 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
675} 753}
676 754
755# @FUNCTION: mysql_src_install
756# @DESCRIPTION:
757# Install mysql.
677mysql_src_install() { 758mysql_src_install() {
678 # Make sure the vars are correctly initialized 759 # Make sure the vars are correctly initialized
679 mysql_init_vars 760 mysql_init_vars
680 761
681 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed" 762 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
767 fi 848 fi
768 849
769 mysql_lib_symlinks "${D}" 850 mysql_lib_symlinks "${D}"
770} 851}
771 852
853# @FUNCTION: mysql_pkg_preinst
854# @DESCRIPTION:
855# Create the user and groups for mysql - die if that fails.
772mysql_pkg_preinst() { 856mysql_pkg_preinst() {
773 enewgroup mysql 60 || die "problem adding 'mysql' group" 857 enewgroup mysql 60 || die "problem adding 'mysql' group"
774 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user" 858 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
775} 859}
776 860
861# @FUNCTION: mysql_pkg_postinst
862# @DESCRIPTION:
863# Run post-installation tasks:
864# create the dir for logfiles if non-existant
865# touch the logfiles and secure them
866# install scripts
867# issue required steps for optional features
868# issue deprecation warnings
777mysql_pkg_postinst() { 869mysql_pkg_postinst() {
778 # Make sure the vars are correctly initialized 870 # Make sure the vars are correctly initialized
779 mysql_init_vars 871 mysql_init_vars
780 872
781 # Check FEATURES="collision-protect" before removing this 873 # Check FEATURES="collision-protect" before removing this
827 mysql_check_version_range "4.0 to 5.0.99.99" \ 919 mysql_check_version_range "4.0 to 5.0.99.99" \
828 && use berkdb \ 920 && use berkdb \
829 && elog "Berkeley DB support is deprecated and will be removed in future versions!" 921 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
830} 922}
831 923
924# @FUNCTION: mysql_pkg_config
925# @DESCRIPTION:
926# Configure mysql environment.
832mysql_pkg_config() { 927mysql_pkg_config() {
928 local old_MY_DATADIR="${MY_DATADIR}"
929
833 # Make sure the vars are correctly initialized 930 # Make sure the vars are correctly initialized
834 mysql_init_vars 931 mysql_init_vars
835 932
836 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR" 933 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
837 934
838 if built_with_use ${CATEGORY}/${PN} minimal ; then 935 if built_with_use ${CATEGORY}/${PN} minimal ; then
839 die "Minimal builds do NOT include the MySQL server" 936 die "Minimal builds do NOT include the MySQL server"
937 fi
938
939 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
940 local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
941 local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
942
943 if [[ -d "${old_MY_DATADIR_s}" ]]; then
944 if [[ -d "${MY_DATADIR_s}" ]]; then
945 ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
946 ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
947 else
948 elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
949 mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
950 || die "Moving MY_DATADIR failed"
951 fi
952 else
953 ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
954 if [[ -d "${MY_DATADIR_s}" ]]; then
955 ewarn "Attempting to use ${MY_DATADIR_s}"
956 else
957 eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
958 die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
959 fi
960 fi
840 fi 961 fi
841 962
842 local pwd1="a" 963 local pwd1="a"
843 local pwd2="b" 964 local pwd2="b"
844 local maxtry=5 965 local maxtry=5
945 einfo "Stopping the server ..." 1066 einfo "Stopping the server ..."
946 wait %1 1067 wait %1
947 einfo "Done" 1068 einfo "Done"
948} 1069}
949 1070
1071# @FUNCTION: mysql_pkg_postrm
1072# @DESCRIPTION:
1073# Remove mysql symlinks.
950mysql_pkg_postrm() { 1074mysql_pkg_postrm() {
951 : # mysql_lib_symlinks "${D}" 1075 : # mysql_lib_symlinks "${D}"
952} 1076}

Legend:
Removed from v.1.108  
changed lines
  Added in v.1.123

  ViewVC Help
Powered by ViewVC 1.1.20