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

Diff of /eclass/mysql.eclass

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

Revision 1.32 Revision 1.109
1# Copyright 1999-2006 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.32 2006/05/31 20:45:49 chtekk Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.109 2009/02/28 10:51:57 robbat2 Exp $
4 4
5# Author: Francesco Riosa <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>
8# - Robin H. Johnson <robbat2@gentoo.org>
7 9
8# Both MYSQL_VERSION_ID and MYSQL_PATCHSET_REV must be set in the ebuild too 10WANT_AUTOCONF="latest"
9# Note that MYSQL_VERSION_ID must be empty !!! 11WANT_AUTOMAKE="latest"
12
13inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator
14
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
17S="${WORKDIR}/mysql"
18
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
10 25
11# MYSQL_VERSION_ID will be: 26# MYSQL_VERSION_ID will be:
12# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 27# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
13# This is an important part, because many of the choices the MySQL ebuild will do 28# This is an important part, because many of the choices the MySQL ebuild will do
14# depend on this variable. 29# depend on this variable.
15# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803" 30# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
31# We also strip off upstream's trailing letter that they use to respin tarballs
16 32
17if [[ -z "${MYSQL_VERSION_ID}" ]] ; then 33MYSQL_VERSION_ID=""
34tpv="${PV%[a-z]}"
18 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}" 35tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
19 for vatom in 0 1 2 3 ; do 36for vatom in 0 1 2 3 ; do
20 # pad to length 2 37 # pad to length 2
21 tpv[${vatom}]="00${tpv[${vatom}]}" 38 tpv[${vatom}]="00${tpv[${vatom}]}"
22 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}" 39 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
23 done 40done
24 # strip leading "0" (otherwise it's considered an octal number by BASH) 41# strip leading "0" (otherwise it's considered an octal number by BASH)
25 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"} 42MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
26fi
27 43
28DEPEND="${DEPEND} 44# Be warned, *DEPEND are version-dependant
45# These are used for both runtime and compiletime
46DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
47 userland_GNU? ( sys-process/procps )
48 >=sys-apps/sed-4
49 >=sys-apps/texinfo-4.7-r1
29 >=sys-libs/readline-4.1 50 >=sys-libs/readline-4.1
30 berkdb? ( sys-apps/ed )
31 ssl? ( >=dev-libs/openssl-0.9.6d )
32 userland_GNU? ( sys-process/procps )
33 >=sys-libs/zlib-1.2.3 51 >=sys-libs/zlib-1.2.3"
34 >=sys-apps/texinfo-4.7-r1
35 >=sys-apps/sed-4"
36 52
53# Having different flavours at the same time is not a good idea
54for i in "" "-community" ; do
55 [[ "${i}" == ${PN#mysql} ]] ||
56 DEPEND="${DEPEND} !dev-db/mysql${i}"
57done
58
59RDEPEND="${DEPEND}
60 !minimal? ( dev-db/mysql-init-scripts )
37RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )" 61 selinux? ( sec-policy/selinux-mysql )"
62
63# compile-time-only
64mysql_version_is_at_least "5.1" \
65|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
66
67# compile-time-only
68mysql_version_is_at_least "5.1.12" \
69&& DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
38 70
39# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 71# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
40PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 72PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
41 73
42inherit eutils flag-o-matic gnuconfig autotools mysql_fx 74# For other stuff to bring us in
75PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
43 76
44# Shorten the path because the socket path length must be shorter than 107 chars 77# Work out the default SERVER_URI correctly
45# and we will run a mysql server during test phase 78if [ -z "${SERVER_URI}" ]; then
46S="${WORKDIR}/${PN}" 79 # The community build is on the mirrors
47 80 if [ "${PN}" == "mysql-community" ]; then
48# Define $MY_FIXED_PV for MySQL patchsets 81 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz"
49MY_FIXED_PV="${PV/_alpha/}" 82 # The enterprise source is on the primary site only
50MY_FIXED_PV="${MY_FIXED_PV/_beta/}" 83 elif [ "${PN}" == "mysql" ]; then
51MY_FIXED_PV="${MY_FIXED_PV/_rc/}" 84 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz"
85 fi
86fi
52 87
53# Define correct SRC_URIs 88# Define correct SRC_URIs
54SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${P/_/-}.tar.gz" 89SRC_URI="${SERVER_URI}"
55if [[ -n "${MYSQL_PATCHSET_REV}" ]] ; then 90
56 MYSQL_PATCHSET_FILENAME="${PN}-patchset-${MY_FIXED_PV}-r${MYSQL_PATCHSET_REV}.tar.bz2" 91[[ ${MY_EXTRAS_VER} != live ]] && SRC_URI="${SRC_URI}
57 # We add the Gentoo mirror here, as we only use primaryuri for the MySQL tarball 92 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
58 SRC_URI="${SRC_URI} mirror://gentoo/${MYSQL_PATCHSET_FILENAME} http://gentoo.longitekk.com/${MYSQL_PATCHSET_FILENAME}" 93 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
59fi 94mysql_version_is_at_least "5.1.12" \
95&& [[ -n "${PBXT_VERSION}" ]] \
96&& SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )"
60 97
61DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 98DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
62HOMEPAGE="http://www.mysql.com/" 99HOMEPAGE="http://www.mysql.com/"
100LICENSE="GPL-2"
63SLOT="0" 101SLOT="0"
64LICENSE="GPL-2"
65IUSE="big-tables berkdb debug embedded minimal perl selinux srvdir ssl static" 102IUSE="big-tables debug embedded minimal perl selinux ssl static"
66RESTRICT="primaryuri confcache"
67 103
68mysql_version_is_at_least "4.01.00.00" \ 104mysql_version_is_at_least "4.1" \
69&& IUSE="${IUSE} latin1" 105&& IUSE="${IUSE} latin1"
70 106
71mysql_version_is_at_least "4.01.03.00" \ 107mysql_version_is_at_least "4.1.3" \
72&& IUSE="${IUSE} cluster extraengine" 108&& IUSE="${IUSE} cluster extraengine"
73 109
74mysql_version_is_at_least "5.00.00.00" \ 110mysql_version_is_at_least "5.0" \
75|| IUSE="${IUSE} raid" 111|| IUSE="${IUSE} raid"
76 112
77mysql_version_is_at_least "5.00.18.00" \ 113mysql_version_is_at_least "5.0.18" \
78&& IUSE="${IUSE} max-idx-128" 114&& IUSE="${IUSE} max-idx-128"
79 115
80mysql_version_is_at_least "5.01.00.00" \ 116mysql_version_is_at_least "5.1" \
117|| IUSE="${IUSE} berkdb"
118
119mysql_version_is_at_least "5.1.12" \
81&& IUSE="${IUSE} innodb" 120&& IUSE="${IUSE} pbxt"
82 121
83EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \ 122EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
84 pkg_postinst pkg_config pkg_postrm 123 pkg_postinst pkg_config pkg_postrm
124
125#
126# HELPER FUNCTIONS:
127#
128
129mysql_disable_test() {
130 local testname="${1}" ; shift
131 local reason="${@}"
132 local mysql_disable_file="${S}/mysql-test/t/disabled.def"
133 echo ${testname} : ${reason} >> "${mysql_disable_file}"
134 ewarn "test '${testname}' disabled: '${reason}'"
135}
85 136
86# void mysql_init_vars() 137# void mysql_init_vars()
87# 138#
88# Initialize global variables 139# Initialize global variables
89# 2005-11-19 <vivo@gentoo.org> 140# 2005-11-19 <vivo@gentoo.org>
94 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"} 145 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
95 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"} 146 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
96 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"} 147 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
97 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"} 148 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
98 149
99 if [[ -z "${DATADIR}" ]] ; then 150 if [[ -z "${MY_DATADIR}" ]] ; then
100 DATADIR="" 151 MY_DATADIR=""
101 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then 152 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
102 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \ 153 MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
103 | sed -ne '/datadir/s|^--datadir=||p' \ 154 | sed -ne '/datadir/s|^--datadir=||p' \
104 | tail -n1` 155 | tail -n1`
105 if [[ -z "${DATADIR}" ]] ; then 156 if [[ -z "${MY_DATADIR}" ]] ; then
106 if useq "srvdir" ; then
107 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
108 else
109 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \ 157 MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
110 | sed -e 's/.*=\s*//'` 158 | sed -e 's/.*=\s*//' \
111 fi 159 | tail -n1`
112 fi 160 fi
113 fi 161 fi
114 if [[ -z "${DATADIR}" ]] ; then 162 if [[ -z "${MY_DATADIR}" ]] ; then
115 if useq "srvdir" ; then
116 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
117 else
118 DATADIR="${MY_LOCALSTATEDIR}" 163 MY_DATADIR="${MY_LOCALSTATEDIR}"
119 fi
120 einfo "Using default DATADIR" 164 einfo "Using default MY_DATADIR"
121 fi 165 fi
122 einfo "MySQL DATADIR is ${DATADIR}" 166 elog "MySQL MY_DATADIR is ${MY_DATADIR}"
123 167
124 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then 168 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
125 if [[ -e "${DATADIR}" ]] ; then 169 if [[ -e "${MY_DATADIR}" ]] ; then
126 ewarn "Previous datadir found, it's YOUR job to change" 170 # If you get this and you're wondering about it, see bug #207636
127 ewarn "ownership and take care of it" 171 elog "MySQL datadir found in ${MY_DATADIR}"
172 elog "A new one will not be created."
128 PREVIOUS_DATADIR="yes" 173 PREVIOUS_DATADIR="yes"
129 else 174 else
130 PREVIOUS_DATADIR="no" 175 PREVIOUS_DATADIR="no"
131 fi 176 fi
132 export PREVIOUS_DATADIR 177 export PREVIOUS_DATADIR
133 fi 178 fi
134 fi 179 fi
135 180
181 MY_SOURCEDIR=${SERVER_URI##*/}
182 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
183
136 export MY_SHAREDSTATEDIR MY_SYSCONFDIR 184 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
137 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR 185 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
138 export MY_INCLUDEDIR 186 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
139 export DATADIR
140} 187}
141 188
189configure_minimal() {
190 # These are things we exclude from a minimal build, please
191 # note that the server actually does get built and installed,
192 # but we then delete it before packaging.
193 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication readline"
194
195 for i in ${minimal_exclude_list} ; do
196 myconf="${myconf} --without-${i}"
197 done
198 myconf="${myconf} --with-extra-charsets=none"
199 myconf="${myconf} --enable-local-infile"
200
201 if use static ; then
202 myconf="${myconf} --with-client-ldflags=-all-static"
203 myconf="${myconf} --disable-shared --with-pic"
204 else
205 myconf="${myconf} --enable-shared --enable-static"
206 fi
207
208 if mysql_version_is_at_least "4.1" && ! use latin1 ; then
209 myconf="${myconf} --with-charset=utf8"
210 myconf="${myconf} --with-collation=utf8_general_ci"
211 else
212 myconf="${myconf} --with-charset=latin1"
213 myconf="${myconf} --with-collation=latin1_swedish_ci"
214 fi
215}
216
217configure_common() {
218 myconf="${myconf} $(use_with big-tables)"
219 myconf="${myconf} --enable-local-infile"
220 myconf="${myconf} --with-extra-charsets=all"
221 myconf="${myconf} --with-mysqld-user=mysql"
222 myconf="${myconf} --with-server"
223 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
224 myconf="${myconf} --without-libwrap"
225
226 if use static ; then
227 myconf="${myconf} --with-mysqld-ldflags=-all-static"
228 myconf="${myconf} --with-client-ldflags=-all-static"
229 myconf="${myconf} --disable-shared --with-pic"
230 else
231 myconf="${myconf} --enable-shared --enable-static"
232 fi
233
234 if use debug ; then
235 myconf="${myconf} --with-debug=full"
236 else
237 myconf="${myconf} --without-debug"
238 mysql_version_is_at_least "4.1.3" \
239 && use cluster \
240 && myconf="${myconf} --without-ndb-debug"
241 fi
242
243 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
244 ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
245 ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
246 ewarn "You MUST file bugs without these variables set."
247 myconf="${myconf} --with-charset=${MYSQL_DEFAULT_CHARSET}"
248 myconf="${myconf} --with-collation=${MYSQL_DEFAULT_COLLATION}"
249 elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
250 myconf="${myconf} --with-charset=utf8"
251 myconf="${myconf} --with-collation=utf8_general_ci"
252 else
253 myconf="${myconf} --with-charset=latin1"
254 myconf="${myconf} --with-collation=latin1_swedish_ci"
255 fi
256
257 if use embedded ; then
258 myconf="${myconf} --with-embedded-privilege-control"
259 myconf="${myconf} --with-embedded-server"
260 else
261 myconf="${myconf} --without-embedded-privilege-control"
262 myconf="${myconf} --without-embedded-server"
263 fi
264
265}
266
267configure_40_41_50() {
268 myconf="${myconf} $(use_with perl bench)"
269 myconf="${myconf} --enable-assembler"
270 myconf="${myconf} --with-extra-tools"
271 myconf="${myconf} --with-innodb"
272 myconf="${myconf} --without-readline"
273 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
274
275 # --with-vio is not needed anymore, it's on by default and
276 # has been removed from configure
277 if use ssl ; then
278 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
279 fi
280
281 if mysql_version_is_at_least "5.1.11" ; then
282 myconf="${myconf} $(use_with ssl)"
283 else
284 myconf="${myconf} $(use_with ssl openssl)"
285 fi
286
287 if mysql_version_is_at_least "5.0.60" ; then
288 if use berkdb ; then
289 elog "Berkeley DB support was disabled due to build failures"
290 elog "on multiple arches, go to a version earlier than 5.0.60"
291 elog "if you want it again. Gentoo bug #224067."
292 fi
293 myconf="${myconf} --without-berkeley-db"
294 elif use berkdb ; then
295 # The following fix is due to a bug with bdb on SPARC's. See:
296 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
297 # It comes down to non-64-bit safety problems.
298 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
299 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
300 myconf="${myconf} --without-berkeley-db"
301 else
302 myconf="${myconf} --with-berkeley-db=./bdb"
303 fi
304 else
305 myconf="${myconf} --without-berkeley-db"
306 fi
307
308 if mysql_version_is_at_least "4.1.3" ; then
309 myconf="${myconf} --with-geometry"
310 myconf="${myconf} $(use_with cluster ndbcluster)"
311 fi
312
313 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
314 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
315 myconf="${myconf} --with-archive-storage-engine"
316
317 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
318 myconf="${myconf} --with-csv-storage-engine"
319
320 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
321 myconf="${myconf} --with-blackhole-storage-engine"
322
323 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
324 # http://dev.mysql.com/doc/mysql/en/federated-description.html
325 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
326 if mysql_version_is_at_least "5.0.3" ; then
327 elog "Before using the Federated storage engine, please be sure to read"
328 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
329 myconf="${myconf} --with-federated-storage-engine"
330 fi
331 fi
332
333 if [ "${PN}" == "mysql-community" ]; then
334 myconf="${myconf} --enable-community-features"
335 fi
336
337 mysql_version_is_at_least "5.0.18" \
338 && use max-idx-128 \
339 && myconf="${myconf} --with-max-indexes=128"
340}
341
342configure_51() {
343 # TODO: !!!! readd --without-readline
344 # the failure depend upon config/ac-macros/readline.m4 checking into
345 # readline.h instead of history.h
346 myconf="${myconf} $(use_with ssl)"
347 myconf="${myconf} --enable-assembler"
348 myconf="${myconf} --with-geometry"
349 myconf="${myconf} --with-readline"
350 myconf="${myconf} --with-row-based-replication"
351 myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
352 myconf="${myconf} --without-pstack"
353 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
354
355 # 5.1 introduces a new way to manage storage engines (plugins)
356 # like configuration=none
357 local plugins="csv,myisam,myisammrg,heap"
358 if use extraengine ; then
359 # like configuration=max-no-ndb, archive and example removed in 5.1.11
360 plugins="${plugins},archive,blackhole,example,federated,partition"
361
362 elog "Before using the Federated storage engine, please be sure to read"
363 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
364 fi
365
366 # Upstream specifically requests that InnoDB always be built.
367 plugins="${plugins},innobase"
368
369 # like configuration=max-no-ndb
370 if use cluster ; then
371 plugins="${plugins},ndbcluster"
372 myconf="${myconf} --with-ndb-binlog"
373 fi
374
375 if mysql_version_is_at_least "5.2" ; then
376 plugins="${plugins},falcon"
377 fi
378
379 myconf="${myconf} --with-plugins=${plugins}"
380}
381
382pbxt_src_compile() {
383 mysql_init_vars
384
385 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
386
387 einfo "Reconfiguring dir '${PWD}'"
388 AT_GNUCONF_UPDATE="yes" eautoreconf
389
390 local myconf=""
391 myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}"
392 use debug && myconf="${myconf} --with-debug=full"
393 # TODO: is it safe/needed to use econf here ?
394 ./configure ${myconf} || die "Problem configuring PBXT storage engine"
395 # TODO: is it safe/needed to use emake here ?
396 make || die "Problem making PBXT storage engine (${myconf})"
397
398 popd
399 # TODO: modify test suite for PBXT
400}
401
402pbxt_src_install() {
403 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
404 make install || die "Failed to install PBXT"
405 popd
406}
407
408#
409# EBUILD FUNCTIONS
410#
142mysql_pkg_setup() { 411mysql_pkg_setup() {
143 enewgroup mysql 60 || die "problem adding 'mysql' group" 412 if hasq test ${FEATURES} ; then
144 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user" 413 if ! use minimal ; then
414 if [[ $UID -eq 0 ]]; then
415 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
416 fi
417 fi
418 fi
145 419
146 # Check for USE flag problems in pkg_setup 420 # Check for USE flag problems in pkg_setup
147 if useq "static" && useq "ssl" ; then 421 if use static && use ssl ; then
148 eerror "MySQL does not support being built statically with SSL support enabled!" 422 eerror "MySQL does not support being built statically with SSL support enabled!"
149 die "MySQL does not support being built statically with SSL support enabled!" 423 die "MySQL does not support being built statically with SSL support enabled!"
150 fi 424 fi
151 425
152 if ! mysql_version_is_at_least "5.00.00.00" \ 426 if ! mysql_version_is_at_least "5.0" \
153 && useq "raid" \ 427 && use raid \
154 && useq "static" ; then 428 && use static ; then
155 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically" 429 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
156 eerror "with RAID support enabled." 430 eerror "with RAID support enabled."
157 die "USE flags 'raid' and 'static' conflict!" 431 die "USE flags 'raid' and 'static' conflict!"
158 fi 432 fi
159 433
160 if mysql_version_is_at_least "4.01.03.00" \ 434 if mysql_version_is_at_least "4.1.3" \
161 && ( useq "cluster" || useq "extraengine" ) \ 435 && ( use cluster || use extraengine ) \
162 && useq "minimal" ; then 436 && use minimal ; then
163 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 437 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
164 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 438 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
165 fi 439 fi
440
441 # This should come after all of the die statements
442 enewgroup mysql 60 || die "problem adding 'mysql' group"
443 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
444
445 mysql_check_version_range "4.0 to 5.0.99.99" \
446 && use berkdb \
447 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
166} 448}
167 449
168mysql_src_unpack() { 450mysql_src_unpack() {
169 # Initialize the proper variables first 451 # Initialize the proper variables first
170 mysql_init_vars 452 mysql_init_vars
171 453
172 unpack ${A} 454 unpack ${A}
173 455 # Grab the patches
456 [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
457
174 mv -f "${WORKDIR}/${P/_/-}" "${S}" 458 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
175 cd "${S}" 459 cd "${S}"
176 460
177 # Apply the patches for this MySQL version 461 # Apply the patches for this MySQL version
178 if [[ -d "${WORKDIR}/${MY_FIXED_PV}" ]] ; then 462 EPATCH_SUFFIX="patch"
179 EPATCH_SOURCE="${WORKDIR}/${MY_FIXED_PV}" EPATCH_SUFFIX="patch" epatch 463 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
180 fi 464 # Clean out old items
465 rm -f "${EPATCH_SOURCE}"/*
466 # Now link in right patches
467 mysql_mv_patches
468 # And apply
469 epatch
181 470
182 # Additional checks, remove bundled zlib 471 # Additional checks, remove bundled zlib
183 rm -f "${S}/zlib/"*.[ch] 472 rm -f "${S}/zlib/"*.[ch]
184 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in" 473 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
185 rm -f "scripts/mysqlbug" 474 rm -f "scripts/mysqlbug"
186 475
187 # Make charsets install in the right place 476 # Make charsets install in the right place
477 find . -name 'Makefile.am' \
188 find . -name 'Makefile.am' -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \; 478 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
189 479
190 # Manage mysqlmanager
191 mysql_version_is_at_least "5.00.15.00" \
192 && sed -i -e "s!@GENTOO_EXT@!!g" -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" "${S}/server-tools/instance-manager/Makefile.am"
193
194 if mysql_version_is_at_least "4.01.00.00" ; then 480 if mysql_version_is_at_least "4.1" ; then
195 # Remove what needs to be recreated, so we're sure it's actually done 481 # Remove what needs to be recreated, so we're sure it's actually done
196 find . -name Makefile \ 482 find . -name Makefile \
197 -o -name Makefile.in \ 483 -o -name Makefile.in \
198 -o -name configure \ 484 -o -name configure \
199 -exec rm -f {} \; 485 -exec rm -f {} \;
200 rm -f "ltmain.sh" 486 rm -f "ltmain.sh"
487 rm -f "scripts/mysqlbug"
201 fi 488 fi
202 489
203 local rebuilddirlist bdbdir d 490 local rebuilddirlist d
204 491
205 if mysql_version_is_at_least "5.01.00.00" ; then 492 if mysql_version_is_at_least "5.1.12" ; then
206 rebuilddirlist=". storage/innobase" 493 rebuilddirlist="."
207 bdbdir='storage/bdb/dist' 494 # TODO: check this with a cmake expert
495 cmake \
496 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
497 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
498 "storage/innobase"
208 else 499 else
209 rebuilddirlist=". innobase" 500 rebuilddirlist=". innobase"
210 bdbdir='bdb/dist'
211 fi 501 fi
212 502
213 for d in ${rebuilddirlist} ; do 503 for d in ${rebuilddirlist} ; do
214 einfo "Reconfiguring dir '${d}'" 504 einfo "Reconfiguring dir '${d}'"
215 pushd "${d}" &>/dev/null 505 pushd "${d}" &>/dev/null
216 AT_GNUCONF_UPDATE="yes" eautoreconf 506 AT_GNUCONF_UPDATE="yes" eautoreconf
217 popd &>/dev/null 507 popd &>/dev/null
218 done 508 done
219 509
220 # TODO: berkdb in MySQL 5.1 needs to be worked on
221 if useq "berkdb" \
222 && ! mysql_check_version_range "4.00.00.00 to 4.00.99.99" \ 510 if mysql_check_version_range "4.1 to 5.0.99.99" \
223 && ! mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then 511 && use berkdb ; then
224 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh" 512 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
225 pushd "${bdbdir}" \ 513 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
514 || die "Could not copy libtool.m4 to bdb/dist/"
515 #These files exist only with libtool-2*, and need to be included.
516 if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
517 cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
518 cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
519 cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
520 cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
521 fi
522 pushd "bdb/dist" &>/dev/null
226 && sh s_all \ 523 sh s_all \
227 || die "Failed bdb reconfigure" \ 524 || die "Failed bdb reconfigure"
228 &>/dev/null
229 popd &>/dev/null 525 popd &>/dev/null
230 fi 526 fi
231} 527}
232 528
233mysql_src_compile() { 529mysql_src_compile() {
234 # Make sure the vars are correctly initialized 530 # Make sure the vars are correctly initialized
235 mysql_init_vars 531 mysql_init_vars
236 532
533 # $myconf is modified by the configure_* functions
237 local myconf 534 local myconf=""
238 535
239 if useq "static" ; then 536 if use minimal ; then
240 myconf="${myconf} --with-mysqld-ldflags=-all-static" 537 configure_minimal
241 myconf="${myconf} --with-client-ldflags=-all-static"
242 myconf="${myconf} --disable-shared"
243 else 538 else
244 myconf="${myconf} --enable-shared --enable-static" 539 configure_common
245 fi
246
247 myconf="${myconf} --without-libwrap"
248
249 if useq "ssl" ; then
250 # --with-vio is not needed anymore, it's on by default and
251 # has been removed from configure
252 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
253 if mysql_version_is_at_least "5.00.06.00" ; then 540 if mysql_version_is_at_least "5.1.10" ; then
254 # yassl-0.96 is still young and breaks with GCC-4.X or amd64 541 configure_51
255 # myconf="${myconf} --with-yassl"
256 myconf="${myconf} --with-openssl"
257 else 542 else
258 myconf="${myconf} --with-openssl" 543 configure_40_41_50
259 fi
260 else
261 myconf="${myconf} --without-openssl"
262 fi
263
264 if useq "debug" ; then
265 myconf="${myconf} --with-debug=full"
266 else
267 myconf="${myconf} --without-debug"
268
269 mysql_version_is_at_least "4.01.03.00" && useq "cluster" \
270 && myconf="${myconf} --without-ndb-debug"
271 fi
272
273 # These are things we exclude from a minimal build.
274 # Note that the server actually does get built and installed,
275 # but we then delete it.
276 local minimal_exclude_list="server embedded-server extra-tools innodb bench"
277
278 if ! useq "minimal" ; then
279 myconf="${myconf} --with-server"
280 myconf="${myconf} --with-extra-tools"
281
282 if ! mysql_version_is_at_least "5.00.00.00" ; then
283 if useq "raid" ; then
284 myconf="${myconf} --with-raid"
285 else
286 myconf="${myconf} --without-raid"
287 fi 544 fi
288 fi
289
290 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
291 myconf="${myconf} --with-charset=utf8"
292 myconf="${myconf} --with-collation=utf8_general_ci"
293 else
294 myconf="${myconf} --with-charset=latin1"
295 myconf="${myconf} --with-collation=latin1_swedish_ci"
296 fi
297
298 # Optional again with MySQL 5.1
299 if mysql_version_is_at_least "5.01.00.00" ; then
300 if useq "innodb" ; then
301 myconf="${myconf} --with-innodb"
302 else
303 myconf="${myconf} --without-innodb"
304 fi
305 fi
306
307 # Lots of charsets
308 myconf="${myconf} --with-extra-charsets=all"
309
310 # The following fix is due to a bug with bdb on SPARC's. See:
311 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
312 # It comes down to non-64-bit safety problems.
313 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
314 ewarn "bdb berkeley-db disabled due to incompatible arch"
315 myconf="${myconf} --without-berkeley-db"
316 else
317 # TODO: berkdb in MySQL 5.1 needs to be worked on
318 if useq "berkdb" && ! mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then
319 myconf="${myconf} --with-berkeley-db=./bdb"
320 else
321 myconf="${myconf} --without-berkeley-db"
322 fi
323 fi
324
325 if mysql_version_is_at_least "4.01.03.00" ; then
326 myconf="${myconf} --with-geometry"
327
328 if useq "cluster" ; then
329 myconf="${myconf} --with-ndbcluster"
330 else
331 myconf="${myconf} --without-ndbcluster"
332 fi
333 fi
334
335 if useq "big-tables" ; then
336 myconf="${myconf} --with-big-tables"
337 else
338 myconf="${myconf} --without-big-tables"
339 fi
340
341 mysql_version_is_at_least "5.01.06.00" \
342 && myconf="${myconf} --with-ndb-binlog"
343
344 if useq "embedded" ; then
345 myconf="${myconf} --with-embedded-privilege-control"
346 myconf="${myconf} --with-embedded-server"
347 else
348 myconf="${myconf} --without-embedded-privilege-control"
349 myconf="${myconf} --without-embedded-server"
350 fi
351
352 # Benchmarking stuff needs Perl
353 if useq "perl" ; then
354 myconf="${myconf} --with-bench"
355 else
356 myconf="${myconf} --without-bench"
357 fi
358 else
359 for i in ${minimal_exclude_list} ; do
360 myconf="${myconf} --without-${i}"
361 done
362 myconf="${myconf} --without-berkeley-db"
363 myconf="${myconf} --with-extra-charsets=none"
364 fi
365
366 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
367 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
368 myconf="${myconf} --with-archive-storage-engine"
369
370 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
371 myconf="${myconf} --with-csv-storage-engine"
372
373 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
374 myconf="${myconf} --with-blackhole-storage-engine"
375
376 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
377 # http://dev.mysql.com/doc/mysql/en/federated-description.html
378 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
379 if mysql_version_is_at_least "5.00.03.00" ; then
380 einfo "Before using the Federated storage engine, please be sure to read"
381 einfo "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
382 myconf="${myconf} --with-federated-storage-engine"
383 fi
384
385 # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
386 if mysql_version_is_at_least "5.01.00.00" ; then
387 myconf="${myconf} --with-partition"
388 fi
389 fi
390
391 mysql_version_is_at_least "5.00.18.00" \
392 && useq "max-idx-128" \
393 && myconf="${myconf} --with-max-indexes=128"
394
395 mysql_version_is_at_least "5.01.05.00" \
396 && myconf="${myconf} --with-row-based-replication"
397
398 # TODO: Rechek again later, there were problems with assembler enabled
399 # and some combination of USE flags with MySQL 5.1
400 if mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then
401 myconf="${myconf} --disable-assembler"
402 else
403 myconf="${myconf} --enable-assembler"
404 fi 545 fi
405 546
406 # Bug #114895, bug #110149 547 # Bug #114895, bug #110149
407 filter-flags "-O" "-O[01]" 548 filter-flags "-O" "-O[01]"
408 549
409 # glib-2.3.2_pre fix, bug #16496 550 # glib-2.3.2_pre fix, bug #16496
410 append-flags "-DHAVE_ERRNO_AS_DEFINE=1" 551 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
411 552
412 # The compiler flags are as their "official" spec says ;) 553 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
413 # CFLAGS="${CFLAGS/-O?/} -O3" 554 # fail badly during cluster startup.
555 if [[ $(gcc-major-version) -lt 4 ]]; then
556 filter-flags "-fstack-protector-all"
557 fi
558
559 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
414 export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti" 560 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
415 mysql_version_is_at_least "5.00.00.00" \ 561 mysql_version_is_at_least "5.0" \
416 && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 562 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
563 export CXXFLAGS
417 564
418 econf \ 565 econf \
419 --libexecdir="/usr/sbin" \ 566 --libexecdir="/usr/sbin" \
420 --sysconfdir="${MY_SYSCONFDIR}" \ 567 --sysconfdir="${MY_SYSCONFDIR}" \
421 --localstatedir="${MY_LOCALSTATEDIR}" \ 568 --localstatedir="${MY_LOCALSTATEDIR}" \
422 --sharedstatedir="${MY_SHAREDSTATEDIR}" \ 569 --sharedstatedir="${MY_SHAREDSTATEDIR}" \
423 --libdir="${MY_LIBDIR}" \ 570 --libdir="${MY_LIBDIR}" \
424 --includedir="${MY_INCLUDEDIR}" \ 571 --includedir="${MY_INCLUDEDIR}" \
425 --with-low-memory \ 572 --with-low-memory \
426 --enable-local-infile \
427 --with-mysqld-user=mysql \
428 --with-client-ldflags=-lstdc++ \ 573 --with-client-ldflags=-lstdc++ \
429 --enable-thread-safe-client \ 574 --enable-thread-safe-client \
430 --with-comment="Gentoo Linux ${PF}" \ 575 --with-comment="Gentoo Linux ${PF}" \
431 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
432 --without-readline \
433 --without-docs \ 576 --without-docs \
434 ${myconf} || die "bad ./configure" 577 ${myconf} || die "econf failed"
435 578
436 # TODO: Move this before autoreconf !!! 579 # TODO: Move this before autoreconf !!!
437 find . -type f -name Makefile -print0 \ 580 find . -type f -name Makefile -print0 \
438 | xargs -0 -n100 sed -i \ 581 | xargs -0 -n100 sed -i \
439 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 582 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
440 583
441 emake || die "compile problem" 584 emake || die "emake failed"
585
586 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
442} 587}
443 588
444mysql_src_install() { 589mysql_src_install() {
445 # Make sure the vars are correctly initialized 590 # Make sure the vars are correctly initialized
446 mysql_init_vars 591 mysql_init_vars
447 592
448 make install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "make install error" 593 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
449 594
450 insinto "${MY_INCLUDEDIR}" 595 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
451 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
452 596
453 # Convenience links 597 # Convenience links
598 einfo "Making Convenience links for mysqlcheck multi-call binary"
454 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 599 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
455 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 600 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
456 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize" 601 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
457 602
458 # Various junk (my-*.cnf moved elsewhere) 603 # Various junk (my-*.cnf moved elsewhere)
604 einfo "Removing duplicate /usr/share/mysql files"
459 rm -Rf "${D}/usr/share/info" 605 rm -Rf "${D}/usr/share/info"
460 for removeme in "mysql-log-rotate" mysql.server* binary-configure* my-*.cnf mi_test_all* ; do 606 for removeme in "mysql-log-rotate" mysql.server* \
607 binary-configure* my-*.cnf mi_test_all*
608 do
461 rm -f "${D}"/usr/share/mysql/${removeme} 609 rm -f "${D}"/usr/share/mysql/${removeme}
462 done 610 done
463 611
464 # Clean up stuff for a minimal build 612 # Clean up stuff for a minimal build
465 if useq "minimal" ; then 613 if use minimal ; then
614 einfo "Remove all extra content for minimal build"
466 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench} 615 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
467 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} 616 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}
468 rm -f "${D}/usr/sbin/mysqld" 617 rm -f "${D}/usr/sbin/mysqld"
469 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a 618 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
470 fi 619 fi
471 620
472 # Configuration stuff 621 # Configuration stuff
473 if mysql_version_is_at_least "4.01.00.00" ; then 622 if mysql_version_is_at_least "4.1" ; then
474 mysql_mycnf_version="4.1" 623 mysql_mycnf_version="4.1"
475 else 624 else
476 mysql_mycnf_version="4.0" 625 mysql_mycnf_version="4.0"
477 fi 626 fi
627 einfo "Building default my.cnf"
478 insinto "${MY_SYSCONFDIR}" 628 insinto "${MY_SYSCONFDIR}"
479 doins "scripts/mysqlaccess.conf" 629 doins scripts/mysqlaccess.conf
480 sed -e "s!@DATADIR@!${DATADIR}!g" \ 630 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
481 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 631 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
482 > "${TMPDIR}/my.cnf.ok" 632 > "${TMPDIR}/my.cnf.ok"
483 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then 633 if mysql_version_is_at_least "4.1" && use latin1 ; then
484 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 634 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
485 fi 635 fi
486 newins "${TMPDIR}/my.cnf.ok" my.cnf 636 newins "${TMPDIR}/my.cnf.ok" my.cnf
487 637
488 insinto "/etc/conf.d"
489 newins "${FILESDIR}/mysql.conf.d" "mysql"
490 mysql_version_is_at_least "5.00.11.00" \
491 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
492
493 # Minimal builds don't have the MySQL server 638 # Minimal builds don't have the MySQL server
494 if ! useq "minimal" ; then 639 if ! use minimal ; then
495 exeinto "/etc/init.d" 640 einfo "Creating initial directories"
496 newexe "${FILESDIR}/mysql.rc6" "mysql"
497 mysql_version_is_at_least "5.00.11.00" \
498 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
499
500 insinto "/etc/logrotate.d"
501 newins "${FILESDIR}/logrotate.mysql" "mysql"
502
503 # Empty directories ... 641 # Empty directories ...
504 diropts "-m0750" 642 diropts "-m0750"
505 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then 643 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
506 dodir "${DATADIR}" 644 dodir "${MY_DATADIR}"
507 keepdir "${DATADIR}" 645 keepdir "${MY_DATADIR}"
508 chown -R mysql:mysql "${D}/${DATADIR}" 646 chown -R mysql:mysql "${D}/${MY_DATADIR}"
509 fi 647 fi
510 648
511 diropts "-m0755" 649 diropts "-m0755"
512 for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do 650 for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
513 dodir "${folder}" 651 dodir "${folder}"
515 chown -R mysql:mysql "${D}/${folder}" 653 chown -R mysql:mysql "${D}/${folder}"
516 done 654 done
517 fi 655 fi
518 656
519 # Docs 657 # Docs
658 einfo "Installing docs"
520 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE 659 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
660 doinfo "${S}"/Docs/mysql.info
521 661
522 # Minimal builds don't have the MySQL server 662 # Minimal builds don't have the MySQL server
523 if ! useq "minimal" ; then 663 if ! use minimal ; then
664 einfo "Including support files and sample configurations"
665 docinto "support-files"
666 for script in \
667 "${S}"/support-files/my-*.cnf \
668 "${S}"/support-files/magic \
669 "${S}"/support-files/ndb-config-2-node.ini
670 do
671 dodoc "${script}"
672 done
673
674 docinto "scripts"
675 for script in "${S}"/scripts/mysql* ; do
676 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
677 done
678
679 fi
680
681 mysql_lib_symlinks "${D}"
682}
683
684mysql_pkg_preinst() {
685 enewgroup mysql 60 || die "problem adding 'mysql' group"
686 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
687}
688
689mysql_pkg_postinst() {
690 # Make sure the vars are correctly initialized
691 mysql_init_vars
692
693 # Check FEATURES="collision-protect" before removing this
694 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
695
696 # Secure the logfiles
697 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
698 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
699 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
700
701 # Minimal builds don't have the MySQL server
702 if ! use minimal ; then
524 docinto "support-files" 703 docinto "support-files"
525 for script in \ 704 for script in \
526 support-files/my-*.cnf \ 705 support-files/my-*.cnf \
527 support-files/magic \ 706 support-files/magic \
528 support-files/ndb-config-2-node.ini 707 support-files/ndb-config-2-node.ini
532 711
533 docinto "scripts" 712 docinto "scripts"
534 for script in scripts/mysql* ; do 713 for script in scripts/mysql* ; do
535 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 714 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
536 done 715 done
537 fi
538 716
539 ROOT="${D}" mysql_lib_symlinks
540}
541
542mysql_pkg_preinst() {
543 enewgroup mysql 60 || die "problem adding 'mysql' group"
544 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
545}
546
547mysql_pkg_postinst() {
548 # Make sure the vars are correctly initialized
549 mysql_init_vars
550
551 # Check FEATURES="collision-protect" before removing this
552 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
553
554 # Secure the logfiles
555 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
556 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
557 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
558
559 if ! useq "minimal" ; then
560 # Your friendly public service announcement ...
561 einfo 717 einfo
562 einfo "You might want to run:" 718 elog "You might want to run:"
563 einfo "\"emerge --config =${CATEGORY}/${PF}\"" 719 elog "\"emerge --config =${CATEGORY}/${PF}\""
564 einfo "if this is a new install." 720 elog "if this is a new install."
565 einfo 721 einfo
566 mysql_version_is_at_least "5.01.00.00" \
567 || einfo "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
568 fi 722 fi
723
724 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
725 # TODO: explain it better
726 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
727 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
728 elog "if, after that, you cannot start the MySQL server,"
729 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
730 elog "use the MySQL upgrade script to restore the table"
731 elog "or execute the following SQL command:"
732 elog " CREATE TABLE IF NOT EXISTS plugin ("
733 elog " name char(64) binary DEFAULT '' NOT NULL,"
734 elog " dl char(128) DEFAULT '' NOT NULL,"
735 elog " PRIMARY KEY (name)"
736 elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
737 fi
738
739 mysql_check_version_range "4.0 to 5.0.99.99" \
740 && use berkdb \
741 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
569} 742}
570 743
571mysql_pkg_config() { 744mysql_pkg_config() {
572 # Make sure the vars are correctly initialized 745 # Make sure the vars are correctly initialized
573 mysql_init_vars 746 mysql_init_vars
574 747
575 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR" 748 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
576 749
577 if built_with_use dev-db/mysql minimal ; then 750 if built_with_use ${CATEGORY}/${PN} minimal ; then
578 die "Minimal builds do NOT include the MySQL server" 751 die "Minimal builds do NOT include the MySQL server"
579 fi 752 fi
580 753
581 local pwd1="a" 754 local pwd1="a"
582 local pwd2="b" 755 local pwd2="b"
583 local maxtry=5 756 local maxtry=5
584 757
585 if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then 758 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
586 ewarn "You have already a MySQL database in place." 759 ewarn "You have already a MySQL database in place."
587 ewarn "(${ROOT}/${DATADIR}/*)" 760 ewarn "(${ROOT}/${MY_DATADIR}/*)"
588 ewarn "Please rename or delete it if you wish to replace it." 761 ewarn "Please rename or delete it if you wish to replace it."
589 die "MySQL database already exists!" 762 die "MySQL database already exists!"
590 fi 763 fi
764
765 # Bug #213475 - MySQL _will_ object strenously if your machine is named
766 # localhost. Also causes weird failures.
767 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
591 768
592 einfo "Creating the mysql database and setting proper" 769 einfo "Creating the mysql database and setting proper"
593 einfo "permissions on it ..." 770 einfo "permissions on it ..."
594 771
595 einfo "Insert a password for the mysql 'root' user" 772 einfo "Insert a password for the mysql 'root' user"
611 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \ 788 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
612 || touch "${TMPDIR}/fill_help_tables.sql" 789 || touch "${TMPDIR}/fill_help_tables.sql"
613 help_tables="${TMPDIR}/fill_help_tables.sql" 790 help_tables="${TMPDIR}/fill_help_tables.sql"
614 791
615 pushd "${TMPDIR}" &>/dev/null 792 pushd "${TMPDIR}" &>/dev/null
616 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR" 793 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
794 if [ $? -ne 0 ]; then
795 grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
796 die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
797 fi
617 popd &>/dev/null 798 popd &>/dev/null
618 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \ 799 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
619 || die "MySQL databases not installed" 800 || die "MySQL databases not installed"
620 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null 801 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
621 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null 802 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
622 803
623 if mysql_version_is_at_least "4.01.03.00" ; then 804 if mysql_version_is_at_least "4.1.3" ; then
624 options="--skip-ndbcluster" 805 options="--skip-ndbcluster"
625 806
626 # Filling timezones, see 807 # Filling timezones, see
627 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 808 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
628 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null 809 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
637 local mysqld="${ROOT}/usr/sbin/mysqld \ 818 local mysqld="${ROOT}/usr/sbin/mysqld \
638 ${options} \ 819 ${options} \
639 --user=mysql \ 820 --user=mysql \
640 --skip-grant-tables \ 821 --skip-grant-tables \
641 --basedir=${ROOT}/usr \ 822 --basedir=${ROOT}/usr \
642 --datadir=${ROOT}/${DATADIR} \ 823 --datadir=${ROOT}/${MY_DATADIR} \
643 --skip-innodb \ 824 --skip-innodb \
644 --skip-bdb \ 825 --skip-bdb \
645 --skip-networking \ 826 --skip-networking \
646 --max_allowed_packet=8M \ 827 --max_allowed_packet=8M \
647 --net_buffer_length=16K \ 828 --net_buffer_length=16K \
677 wait %1 858 wait %1
678 einfo "Done" 859 einfo "Done"
679} 860}
680 861
681mysql_pkg_postrm() { 862mysql_pkg_postrm() {
682 mysql_lib_symlinks 863 : # mysql_lib_symlinks "${D}"
683} 864}

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.109

  ViewVC Help
Powered by ViewVC 1.1.20