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

Diff of /eclass/mysql.eclass

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

Revision 1.72 Revision 1.108
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.72 2007/03/16 22:47:29 chtekk Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.108 2009/02/28 10:50:24 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: Luca Longinotti <chtekk@gentoo.org> 7# - Luca Longinotti <chtekk@gentoo.org>
7 8# - Robin H. Johnson <robbat2@gentoo.org>
8# Both MYSQL_VERSION_ID and MYSQL_PATCHSET_REV must be set in the ebuild too!
9# Note that MYSQL_VERSION_ID must be empty!
10 9
11WANT_AUTOCONF="latest" 10WANT_AUTOCONF="latest"
12WANT_AUTOMAKE="latest" 11WANT_AUTOMAKE="latest"
13 12
14inherit eutils flag-o-matic gnuconfig autotools mysql_fx 13inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator
15 14
16# 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
17# and we will run a mysql server during test phase 16# and we will run a mysql server during test phase
18S="${WORKDIR}/mysql" 17S="${WORKDIR}/mysql"
19 18
20[[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20070108" 19[[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
20if [[ "${MY_EXTRAS_VER}" == "live" ]]; then
21 EGIT_PROJECT=mysql-extras
22 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
23 inherit git
24fi
21 25
22if [[ ${PR#r} -lt 60 ]] ; then 26if [[ ${PR#r} -lt 60 ]] ; then
23 IS_BITKEEPER=0 27 IS_BITKEEPER=0
24elif [[ ${PR#r} -lt 90 ]] ; then 28elif [[ ${PR#r} -lt 90 ]] ; then
25 IS_BITKEEPER=60 29 IS_BITKEEPER=60
30# MYSQL_VERSION_ID will be: 34# MYSQL_VERSION_ID will be:
31# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 35# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
32# This is an important part, because many of the choices the MySQL ebuild will do 36# This is an important part, because many of the choices the MySQL ebuild will do
33# depend on this variable. 37# depend on this variable.
34# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803" 38# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
39# We also strip off upstream's trailing letter that they use to respin tarballs
35 40
36MYSQL_VERSION_ID="" 41MYSQL_VERSION_ID=""
42tpv="${PV%[a-z]}"
37tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}" 43tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
38for vatom in 0 1 2 3 ; do 44for vatom in 0 1 2 3 ; do
39 # pad to length 2 45 # pad to length 2
40 tpv[${vatom}]="00${tpv[${vatom}]}" 46 tpv[${vatom}]="00${tpv[${vatom}]}"
41 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}" 47 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
42done 48done
43# strip leading "0" (otherwise it's considered an octal number by BASH) 49# strip leading "0" (otherwise it's considered an octal number by BASH)
44MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"} 50MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
45 51
46# Be warned, *DEPEND are version-dependant 52# Be warned, *DEPEND are version-dependant
53# These are used for both runtime and compiletime
47DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d ) 54DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
48 userland_GNU? ( sys-process/procps ) 55 userland_GNU? ( sys-process/procps )
49 >=sys-apps/sed-4 56 >=sys-apps/sed-4
50 >=sys-apps/texinfo-4.7-r1 57 >=sys-apps/texinfo-4.7-r1
51 >=sys-libs/readline-4.1 58 >=sys-libs/readline-4.1
55for i in "" "-community" ; do 62for i in "" "-community" ; do
56 [[ "${i}" == ${PN#mysql} ]] || 63 [[ "${i}" == ${PN#mysql} ]] ||
57 DEPEND="${DEPEND} !dev-db/mysql${i}" 64 DEPEND="${DEPEND} !dev-db/mysql${i}"
58done 65done
59 66
67RDEPEND="${DEPEND}
68 !minimal? ( dev-db/mysql-init-scripts )
69 selinux? ( sec-policy/selinux-mysql )"
70
71# compile-time-only
60mysql_version_is_at_least "5.1" \ 72mysql_version_is_at_least "5.1" \
61|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )" 73|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
62 74
75# compile-time-only
63mysql_version_is_at_least "5.1.12" \ 76mysql_version_is_at_least "5.1.12" \
64&& DEPEND="${DEPEND} innodb? ( >=dev-util/cmake-2.4.3 )" 77&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
78
79# BitKeeper dependency, compile-time only
80[[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client"
81
65 82
66# 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
67PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 84PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
68 85
69# BitKeeper dependency, compile-time only 86# For other stuff to bring us in
70[[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client" 87PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
88
89# Work out the default SERVER_URI correctly
90if [ -z "${SERVER_URI}" ]; then
91 # The community build is on the mirrors
92 if [ "${PN}" == "mysql-community" ]; then
93 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz"
94 # The enterprise source is on the primary site only
95 elif [ "${PN}" == "mysql" ]; then
96 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz"
97 fi
98fi
71 99
72# Define correct SRC_URIs 100# Define correct SRC_URIs
73SRC_URI="${SERVER_URI} 101SRC_URI="${SERVER_URI}"
102
103[[ ${MY_EXTRAS_VER} != live ]] && SRC_URI="${SRC_URI}
104 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
74 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" 105 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
75mysql_version_is_at_least "5.1.12" \ 106mysql_version_is_at_least "5.1.12" \
76&& [[ -n "${PBXT_VERSION}" ]] \ 107&& [[ -n "${PBXT_VERSION}" ]] \
77&& SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )" 108&& SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )"
78 109
79DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 110DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
80HOMEPAGE="http://www.mysql.com/" 111HOMEPAGE="http://www.mysql.com/"
81LICENSE="GPL-2" 112LICENSE="GPL-2"
82SLOT="0" 113SLOT="0"
83IUSE="big-tables debug embedded minimal perl selinux ssl static" 114IUSE="big-tables debug embedded minimal perl selinux ssl static"
84RESTRICT="confcache"
85 115
86mysql_version_is_at_least "4.1" \ 116mysql_version_is_at_least "4.1" \
87&& IUSE="${IUSE} latin1" 117&& IUSE="${IUSE} latin1"
88 118
89mysql_version_is_at_least "4.1.3" \ 119mysql_version_is_at_least "4.1.3" \
94 124
95mysql_version_is_at_least "5.0.18" \ 125mysql_version_is_at_least "5.0.18" \
96&& IUSE="${IUSE} max-idx-128" 126&& IUSE="${IUSE} max-idx-128"
97 127
98mysql_version_is_at_least "5.1" \ 128mysql_version_is_at_least "5.1" \
99&& IUSE="${IUSE} innodb"
100
101mysql_version_is_at_least "5.1" \
102|| IUSE="${IUSE} berkdb" 129|| IUSE="${IUSE} berkdb"
103 130
104mysql_version_is_at_least "5.1.12" \ 131mysql_version_is_at_least "5.1.12" \
105&& IUSE="${IUSE} pbxt" 132&& IUSE="${IUSE} pbxt"
106
107RDEPEND="${DEPEND}
108 !minimal? ( dev-db/mysql-init-scripts )
109 selinux? ( sec-policy/selinux-mysql )"
110 133
111EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \ 134EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
112 pkg_postinst pkg_config pkg_postrm 135 pkg_postinst pkg_config pkg_postrm
113 136
114# 137#
197 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"} 220 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
198 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"} 221 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
199 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"} 222 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
200 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"} 223 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
201 224
202 if [[ -z "${DATADIR}" ]] ; then 225 if [[ -z "${MY_DATADIR}" ]] ; then
203 DATADIR="" 226 MY_DATADIR=""
204 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then 227 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
205 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \ 228 MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
206 | sed -ne '/datadir/s|^--datadir=||p' \ 229 | sed -ne '/datadir/s|^--datadir=||p' \
207 | tail -n1` 230 | tail -n1`
208 if [[ -z "${DATADIR}" ]] ; then 231 if [[ -z "${MY_DATADIR}" ]] ; then
209 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \ 232 MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
210 | sed -e 's/.*=\s*//'` 233 | sed -e 's/.*=\s*//' \
234 | tail -n1`
211 fi 235 fi
212 fi 236 fi
213 if [[ -z "${DATADIR}" ]] ; then 237 if [[ -z "${MY_DATADIR}" ]] ; then
214 DATADIR="${MY_LOCALSTATEDIR}" 238 MY_DATADIR="${MY_LOCALSTATEDIR}"
215 einfo "Using default DATADIR" 239 einfo "Using default MY_DATADIR"
216 fi 240 fi
217 elog "MySQL DATADIR is ${DATADIR}" 241 elog "MySQL MY_DATADIR is ${MY_DATADIR}"
218 242
219 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then 243 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
220 if [[ -e "${DATADIR}" ]] ; then 244 if [[ -e "${MY_DATADIR}" ]] ; then
221 elog "Previous datadir found, it's YOUR job to change" 245 # If you get this and you're wondering about it, see bug #207636
222 elog "ownership and take care of it" 246 elog "MySQL datadir found in ${MY_DATADIR}"
247 elog "A new one will not be created."
223 PREVIOUS_DATADIR="yes" 248 PREVIOUS_DATADIR="yes"
224 else 249 else
225 PREVIOUS_DATADIR="no" 250 PREVIOUS_DATADIR="no"
226 fi 251 fi
227 export PREVIOUS_DATADIR 252 export PREVIOUS_DATADIR
231 MY_SOURCEDIR=${SERVER_URI##*/} 256 MY_SOURCEDIR=${SERVER_URI##*/}
232 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*} 257 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
233 258
234 export MY_SHAREDSTATEDIR MY_SYSCONFDIR 259 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
235 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR 260 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
236 export MY_INCLUDEDIR DATADIR MY_SOURCEDIR 261 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
237} 262}
238 263
239configure_minimal() { 264configure_minimal() {
240 # These are things we exclude from a minimal build, please 265 # These are things we exclude from a minimal build, please
241 # note that the server actually does get built and installed, 266 # note that the server actually does get built and installed,
242 # but we then delete it before packaging. 267 # but we then delete it before packaging.
243 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication" 268 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication readline"
244 269
245 for i in ${minimal_exclude_list} ; do 270 for i in ${minimal_exclude_list} ; do
246 myconf="${myconf} --without-${i}" 271 myconf="${myconf} --without-${i}"
247 done 272 done
248 myconf="${myconf} --with-extra-charsets=none" 273 myconf="${myconf} --with-extra-charsets=none"
249 myconf="${myconf} --enable-local-infile" 274 myconf="${myconf} --enable-local-infile"
250 275
251 if use static ; then 276 if use static ; then
252 myconf="${myconf} --with-client-ldflags=-all-static" 277 myconf="${myconf} --with-client-ldflags=-all-static"
253 myconf="${myconf} --disable-shared" 278 myconf="${myconf} --disable-shared --with-pic"
254 else 279 else
255 myconf="${myconf} --enable-shared --enable-static" 280 myconf="${myconf} --enable-shared --enable-static"
256 fi 281 fi
257 282
258 if mysql_version_is_at_least "4.1" && ! use latin1 ; then 283 if mysql_version_is_at_least "4.1" && ! use latin1 ; then
274 myconf="${myconf} --without-libwrap" 299 myconf="${myconf} --without-libwrap"
275 300
276 if use static ; then 301 if use static ; then
277 myconf="${myconf} --with-mysqld-ldflags=-all-static" 302 myconf="${myconf} --with-mysqld-ldflags=-all-static"
278 myconf="${myconf} --with-client-ldflags=-all-static" 303 myconf="${myconf} --with-client-ldflags=-all-static"
279 myconf="${myconf} --disable-shared" 304 myconf="${myconf} --disable-shared --with-pic"
280 else 305 else
281 myconf="${myconf} --enable-shared --enable-static" 306 myconf="${myconf} --enable-shared --enable-static"
282 fi 307 fi
283 308
284 if use debug ; then 309 if use debug ; then
288 mysql_version_is_at_least "4.1.3" \ 313 mysql_version_is_at_least "4.1.3" \
289 && use cluster \ 314 && use cluster \
290 && myconf="${myconf} --without-ndb-debug" 315 && myconf="${myconf} --without-ndb-debug"
291 fi 316 fi
292 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}"
293 if mysql_version_is_at_least "4.1" && ! use latin1 ; then 324 elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
294 myconf="${myconf} --with-charset=utf8" 325 myconf="${myconf} --with-charset=utf8"
295 myconf="${myconf} --with-collation=utf8_general_ci" 326 myconf="${myconf} --with-collation=utf8_general_ci"
296 else 327 else
297 myconf="${myconf} --with-charset=latin1" 328 myconf="${myconf} --with-charset=latin1"
298 myconf="${myconf} --with-collation=latin1_swedish_ci" 329 myconf="${myconf} --with-collation=latin1_swedish_ci"
299 fi 330 fi
300 331
301 if use embedded ; then 332 if use embedded ; then
302 myconf="${myconf} --with-embedded-privilege-control" 333 myconf="${myconf} --with-embedded-privilege-control"
303 myconf="${myconf} --with-embedded-server" 334 myconf="${myconf} --with-embedded-server"
326 myconf="${myconf} $(use_with ssl)" 357 myconf="${myconf} $(use_with ssl)"
327 else 358 else
328 myconf="${myconf} $(use_with ssl openssl)" 359 myconf="${myconf} $(use_with ssl openssl)"
329 fi 360 fi
330 361
362 if mysql_version_is_at_least "5.0.60" ; then
363 if use berkdb ; then
364 elog "Berkeley DB support was disabled due to build failures"
365 elog "on multiple arches, go to a version earlier than 5.0.60"
366 elog "if you want it again. Gentoo bug #224067."
367 fi
368 myconf="${myconf} --without-berkeley-db"
369 elif use berkdb ; then
331 # The following fix is due to a bug with bdb on SPARC's. See: 370 # The following fix is due to a bug with bdb on SPARC's. See:
332 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8 371 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
333 # It comes down to non-64-bit safety problems. 372 # It comes down to non-64-bit safety problems.
334 if use alpha || use amd64 || use hppa || use mips || use sparc ; then 373 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
335 elog "Berkeley DB support was disabled due to incompatible arch" 374 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
375 myconf="${myconf} --without-berkeley-db"
376 else
377 myconf="${myconf} --with-berkeley-db=./bdb"
378 fi
379 else
336 myconf="${myconf} --without-berkeley-db" 380 myconf="${myconf} --without-berkeley-db"
337 else
338 if use berkdb ; then
339 myconf="${myconf} --with-berkeley-db=./bdb"
340 else
341 myconf="${myconf} --without-berkeley-db"
342 fi
343 fi 381 fi
344 382
345 if mysql_version_is_at_least "4.1.3" ; then 383 if mysql_version_is_at_least "4.1.3" ; then
346 myconf="${myconf} --with-geometry" 384 myconf="${myconf} --with-geometry"
347 myconf="${myconf} $(use_with cluster ndbcluster)" 385 myconf="${myconf} $(use_with cluster ndbcluster)"
363 if mysql_version_is_at_least "5.0.3" ; then 401 if mysql_version_is_at_least "5.0.3" ; then
364 elog "Before using the Federated storage engine, please be sure to read" 402 elog "Before using the Federated storage engine, please be sure to read"
365 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html" 403 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
366 myconf="${myconf} --with-federated-storage-engine" 404 myconf="${myconf} --with-federated-storage-engine"
367 fi 405 fi
406 fi
407
408 if [ "${PN}" == "mysql-community" ]; then
409 myconf="${myconf} --enable-community-features"
368 fi 410 fi
369 411
370 mysql_version_is_at_least "5.0.18" \ 412 mysql_version_is_at_least "5.0.18" \
371 && use max-idx-128 \ 413 && use max-idx-128 \
372 && myconf="${myconf} --with-max-indexes=128" 414 && myconf="${myconf} --with-max-indexes=128"
394 436
395 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"
396 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"
397 fi 439 fi
398 440
399 if use innodb ; then 441 # Upstream specifically requests that InnoDB always be built.
400 plugins="${plugins},innobase" 442 plugins="${plugins},innobase"
401 fi
402 443
403 # like configuration=max-no-ndb 444 # like configuration=max-no-ndb
404 if use cluster ; then 445 if use cluster ; then
405 plugins="${plugins},ndbcluster" 446 plugins="${plugins},ndbcluster"
406 myconf="${myconf} --with-ndb-binlog" 447 myconf="${myconf} --with-ndb-binlog"
440} 481}
441 482
442# 483#
443# EBUILD FUNCTIONS 484# EBUILD FUNCTIONS
444# 485#
445
446mysql_pkg_setup() { 486mysql_pkg_setup() {
447 enewgroup mysql 60 || die "problem adding 'mysql' group" 487 if hasq test ${FEATURES} ; then
448 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user" 488 if ! use minimal ; then
489 if [[ $UID -eq 0 ]]; then
490 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
491 fi
492 fi
493 fi
449 494
450 # Check for USE flag problems in pkg_setup 495 # Check for USE flag problems in pkg_setup
451 if use static && use ssl ; then 496 if use static && use ssl ; then
452 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!"
453 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!"
466 && use minimal ; then 511 && use minimal ; then
467 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 512 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
468 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 513 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
469 fi 514 fi
470 515
516 # This should come after all of the die statements
517 enewgroup mysql 60 || die "problem adding 'mysql' group"
518 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
519
471 mysql_check_version_range "4.0 to 5.0.99.99" \ 520 mysql_check_version_range "4.0 to 5.0.99.99" \
472 && use berkdb \ 521 && use berkdb \
473 && elog "Berkeley DB support is deprecated and will be removed in future versions!" 522 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
474} 523}
475 524
476mysql_src_unpack() { 525mysql_src_unpack() {
477 # Initialize the proper variables first 526 # Initialize the proper variables first
478 mysql_init_vars 527 mysql_init_vars
479 528
480 unpack ${A} 529 unpack ${A}
530 # Grab the patches
531 [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
532 # Bitkeeper checkout support
481 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then 533 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then
482 if mysql_check_version_range "5.1 to 5.1.99" ; then 534 if mysql_check_version_range "5.1 to 5.1.99" ; then
483 bitkeeper_fetch "mysql-5.1-ndb" 535 bitkeeper_fetch "mysql-5.1-ndb"
484 elif mysql_check_version_range "5.2 to 5.2.99" ; then 536 elif mysql_check_version_range "5.2 to 5.2.99" ; then
485 bitkeeper_fetch "mysql-5.2-falcon" 537 bitkeeper_fetch "mysql-5.2-falcon"
495 fi 547 fi
496 548
497 # Apply the patches for this MySQL version 549 # Apply the patches for this MySQL version
498 EPATCH_SUFFIX="patch" 550 EPATCH_SUFFIX="patch"
499 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory" 551 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
552 # Clean out old items
553 rm -f "${EPATCH_SOURCE}"/*
554 # Now link in right patches
500 mysql_mv_patches 555 mysql_mv_patches
556 # And apply
501 epatch 557 epatch
502 558
503 # Additional checks, remove bundled zlib 559 # Additional checks, remove bundled zlib
504 rm -f "${S}/zlib/"*.[ch] 560 rm -f "${S}/zlib/"*.[ch]
505 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in" 561 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
521 577
522 local rebuilddirlist d 578 local rebuilddirlist d
523 579
524 if mysql_version_is_at_least "5.1.12" ; then 580 if mysql_version_is_at_least "5.1.12" ; then
525 rebuilddirlist="." 581 rebuilddirlist="."
526 # TODO: check this with a cmake expert 582 # TODO: check this with a cmake expert
527 use innodb \
528 && cmake \ 583 cmake \
529 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \ 584 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
530 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCC)) \ 585 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
531 "storage/innobase" 586 "storage/innobase"
532 else 587 else
533 rebuilddirlist=". innobase" 588 rebuilddirlist=". innobase"
534 fi 589 fi
535 590
543 if mysql_check_version_range "4.1 to 5.0.99.99" \ 598 if mysql_check_version_range "4.1 to 5.0.99.99" \
544 && use berkdb ; then 599 && use berkdb ; then
545 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh" 600 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
546 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \ 601 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
547 || die "Could not copy libtool.m4 to bdb/dist/" 602 || die "Could not copy libtool.m4 to bdb/dist/"
603 #These files exist only with libtool-2*, and need to be included.
604 if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
605 cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
606 cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
607 cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
608 cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
609 fi
548 pushd "bdb/dist" &>/dev/null 610 pushd "bdb/dist" &>/dev/null
549 sh s_all \ 611 sh s_all \
550 || die "Failed bdb reconfigure" 612 || die "Failed bdb reconfigure"
551 popd &>/dev/null 613 popd &>/dev/null
552 fi 614 fi
573 # Bug #114895, bug #110149 635 # Bug #114895, bug #110149
574 filter-flags "-O" "-O[01]" 636 filter-flags "-O" "-O[01]"
575 637
576 # glib-2.3.2_pre fix, bug #16496 638 # glib-2.3.2_pre fix, bug #16496
577 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
578 646
579 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing" 647 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
580 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti" 648 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
581 mysql_version_is_at_least "5.0" \ 649 mysql_version_is_at_least "5.0" \
582 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 650 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
612 680
613 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"
614 682
615 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
616 684
617 insinto "${MY_INCLUDEDIR}"
618 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
619
620 # Convenience links 685 # Convenience links
686 einfo "Making Convenience links for mysqlcheck multi-call binary"
621 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 687 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
622 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 688 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
623 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize" 689 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
624 690
625 # Various junk (my-*.cnf moved elsewhere) 691 # Various junk (my-*.cnf moved elsewhere)
692 einfo "Removing duplicate /usr/share/mysql files"
626 rm -Rf "${D}/usr/share/info" 693 rm -Rf "${D}/usr/share/info"
627 for removeme in "mysql-log-rotate" mysql.server* \ 694 for removeme in "mysql-log-rotate" mysql.server* \
628 binary-configure* my-*.cnf mi_test_all* 695 binary-configure* my-*.cnf mi_test_all*
629 do 696 do
630 rm -f "${D}"/usr/share/mysql/${removeme} 697 rm -f "${D}"/usr/share/mysql/${removeme}
631 done 698 done
632 699
633 # Clean up stuff for a minimal build 700 # Clean up stuff for a minimal build
634 if use minimal ; then 701 if use minimal ; then
702 einfo "Remove all extra content for minimal build"
635 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench} 703 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
636 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}
637 rm -f "${D}/usr/sbin/mysqld" 705 rm -f "${D}/usr/sbin/mysqld"
638 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
639 fi 707 fi
642 if mysql_version_is_at_least "4.1" ; then 710 if mysql_version_is_at_least "4.1" ; then
643 mysql_mycnf_version="4.1" 711 mysql_mycnf_version="4.1"
644 else 712 else
645 mysql_mycnf_version="4.0" 713 mysql_mycnf_version="4.0"
646 fi 714 fi
715 einfo "Building default my.cnf"
647 insinto "${MY_SYSCONFDIR}" 716 insinto "${MY_SYSCONFDIR}"
648 doins scripts/mysqlaccess.conf 717 doins scripts/mysqlaccess.conf
649 sed -e "s!@DATADIR@!${DATADIR}!g" \ 718 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
650 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 719 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
651 > "${TMPDIR}/my.cnf.ok" 720 > "${TMPDIR}/my.cnf.ok"
652 if mysql_version_is_at_least "4.1" && use latin1 ; then 721 if mysql_version_is_at_least "4.1" && use latin1 ; then
653 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 722 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
654 fi 723 fi
655 newins "${TMPDIR}/my.cnf.ok" my.cnf 724 newins "${TMPDIR}/my.cnf.ok" my.cnf
656 725
657 # Minimal builds don't have the MySQL server 726 # Minimal builds don't have the MySQL server
658 if ! use minimal ; then 727 if ! use minimal ; then
728 einfo "Creating initial directories"
659 # Empty directories ... 729 # Empty directories ...
660 diropts "-m0750" 730 diropts "-m0750"
661 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then 731 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
662 dodir "${DATADIR}" 732 dodir "${MY_DATADIR}"
663 keepdir "${DATADIR}" 733 keepdir "${MY_DATADIR}"
664 chown -R mysql:mysql "${D}/${DATADIR}" 734 chown -R mysql:mysql "${D}/${MY_DATADIR}"
665 fi 735 fi
666 736
667 diropts "-m0755" 737 diropts "-m0755"
668 for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do 738 for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
669 dodir "${folder}" 739 dodir "${folder}"
671 chown -R mysql:mysql "${D}/${folder}" 741 chown -R mysql:mysql "${D}/${folder}"
672 done 742 done
673 fi 743 fi
674 744
675 # Docs 745 # Docs
746 einfo "Installing docs"
676 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE 747 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
748 doinfo "${S}"/Docs/mysql.info
677 749
678 # Minimal builds don't have the MySQL server 750 # Minimal builds don't have the MySQL server
679 if ! use minimal ; then 751 if ! use minimal ; then
752 einfo "Including support files and sample configurations"
680 docinto "support-files" 753 docinto "support-files"
681 for script in \ 754 for script in \
682 support-files/my-*.cnf \ 755 "${S}"/support-files/my-*.cnf \
683 support-files/magic \ 756 "${S}"/support-files/magic \
684 support-files/ndb-config-2-node.ini 757 "${S}"/support-files/ndb-config-2-node.ini
685 do 758 do
686 dodoc "${script}" 759 dodoc "${script}"
687 done 760 done
688 761
689 docinto "scripts" 762 docinto "scripts"
690 for script in scripts/mysql* ; do 763 for script in "${S}"/scripts/mysql* ; do
691 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 764 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
692 done 765 done
766
693 fi 767 fi
694 768
695 mysql_lib_symlinks "${D}" 769 mysql_lib_symlinks "${D}"
696} 770}
697 771
757 831
758mysql_pkg_config() { 832mysql_pkg_config() {
759 # Make sure the vars are correctly initialized 833 # Make sure the vars are correctly initialized
760 mysql_init_vars 834 mysql_init_vars
761 835
762 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR" 836 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
763 837
764 if built_with_use ${CATEGORY}/${PN} minimal ; then 838 if built_with_use ${CATEGORY}/${PN} minimal ; then
765 die "Minimal builds do NOT include the MySQL server" 839 die "Minimal builds do NOT include the MySQL server"
766 fi 840 fi
767 841
768 local pwd1="a" 842 local pwd1="a"
769 local pwd2="b" 843 local pwd2="b"
770 local maxtry=5 844 local maxtry=5
771 845
772 if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then 846 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
773 ewarn "You have already a MySQL database in place." 847 ewarn "You have already a MySQL database in place."
774 ewarn "(${ROOT}/${DATADIR}/*)" 848 ewarn "(${ROOT}/${MY_DATADIR}/*)"
775 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."
776 die "MySQL database already exists!" 850 die "MySQL database already exists!"
777 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"
778 856
779 einfo "Creating the mysql database and setting proper" 857 einfo "Creating the mysql database and setting proper"
780 einfo "permissions on it ..." 858 einfo "permissions on it ..."
781 859
782 einfo "Insert a password for the mysql 'root' user" 860 einfo "Insert a password for the mysql 'root' user"
798 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \ 876 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
799 || touch "${TMPDIR}/fill_help_tables.sql" 877 || touch "${TMPDIR}/fill_help_tables.sql"
800 help_tables="${TMPDIR}/fill_help_tables.sql" 878 help_tables="${TMPDIR}/fill_help_tables.sql"
801 879
802 pushd "${TMPDIR}" &>/dev/null 880 pushd "${TMPDIR}" &>/dev/null
803 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR" 881 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
882 if [ $? -ne 0 ]; then
883 grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
884 die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
885 fi
804 popd &>/dev/null 886 popd &>/dev/null
805 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \ 887 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
806 || die "MySQL databases not installed" 888 || die "MySQL databases not installed"
807 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null 889 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
808 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null 890 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
809 891
810 if mysql_version_is_at_least "4.1.3" ; then 892 if mysql_version_is_at_least "4.1.3" ; then
811 options="--skip-ndbcluster" 893 options="--skip-ndbcluster"
812 894
813 # Filling timezones, see 895 # Filling timezones, see
824 local mysqld="${ROOT}/usr/sbin/mysqld \ 906 local mysqld="${ROOT}/usr/sbin/mysqld \
825 ${options} \ 907 ${options} \
826 --user=mysql \ 908 --user=mysql \
827 --skip-grant-tables \ 909 --skip-grant-tables \
828 --basedir=${ROOT}/usr \ 910 --basedir=${ROOT}/usr \
829 --datadir=${ROOT}/${DATADIR} \ 911 --datadir=${ROOT}/${MY_DATADIR} \
830 --skip-innodb \ 912 --skip-innodb \
831 --skip-bdb \ 913 --skip-bdb \
832 --skip-networking \ 914 --skip-networking \
833 --max_allowed_packet=8M \ 915 --max_allowed_packet=8M \
834 --net_buffer_length=16K \ 916 --net_buffer_length=16K \

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

  ViewVC Help
Powered by ViewVC 1.1.20