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

Diff of /eclass/mysql.eclass

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

Revision 1.25 Revision 1.59
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2006 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.25 2006/03/16 20:39:00 vivo Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.59 2007/01/05 00:07:23 vivo Exp $
4# kate: encoding utf-8; eol unix;
5# kate: indent-width 4; mixedindent off; remove-trailing-space on; space-indent off;
6# kate: word-wrap-column 80; word-wrap off;
4 7
5# Author: Francesco Riosa <vivo at gentoo.org> 8# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
6# Maintainer: Francesco Riosa <vivo at gentoo.org> 9# Maintainer: Luca Longinotti <chtekk@gentoo.org>
7 10
11# Note that MYSQL_VERSION_ID must be empty !!!
12
13ECLASS="mysql"
14INHERITED="$INHERITED $ECLASS"
15WANT_AUTOCONF="latest"
16WANT_AUTOMAKE="latest"
8inherit eutils flag-o-matic gnuconfig autotools mysql_fx 17inherit eutils flag-o-matic gnuconfig autotools mysql_fx
9 18
10#major, minor only in the slot
11SLOT=$(( ${MYSQL_VERSION_ID} / 10000 ))
12
13# shorten the path because the socket path length must be shorter than 107 chars 19# Shorten the path because the socket path length must be shorter than 107 chars
14# and we will run a mysql server during test phase 20# and we will run a mysql server during test phase
15S="${WORKDIR}/${PN}" 21S="${WORKDIR}/mysql"
16 22
23# avoid running userspace code 8 times per ebuild :(
24if [[ "${_MYPVR}" != "${PVR}" ]] && [[ -n "${PVR}" ]]
25then
26 _MYPVR=${PVR}
27
28 [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20070105"
29
30 if [[ ${PR#r} -lt 60 ]] ; then
31 IS_BITKEEPER=0
32 elif [[ ${PR#r} -lt 90 ]] ; then
33 IS_BITKEEPER=60
34 else
35 IS_BITKEEPER=90
36 fi
37
38 # MYSQL_VERSION_ID will be:
39 # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
40 # This is an important part, because many of the choices the MySQL ebuild will do
41 # depend on this variable.
42 # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
43 MYSQL_VERSION_ID=""
44 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
45 for vatom in 0 1 2 3 ; do
46 # pad to length 2
47 tpv[${vatom}]="00${tpv[${vatom}]}"
48 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
49 done
50 # strip leading "0" (otherwise it's considered an octal number by BASH)
51 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
52
53 # Be warned, *DEPEND are version-dependant
54 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
55 userland_GNU? ( sys-process/procps )
56 >=sys-apps/sed-4
57 >=sys-apps/texinfo-4.7-r1
58 >=sys-libs/readline-4.1
59 >=sys-libs/zlib-1.2.3
60 "
61
62 # having different flavours at the same time is not a good idea
63 for i in "" "-community" "-slotted" ; do
64 [[ "${i}" == ${PN#mysql} ]] ||
65 DEPEND="${DEPEND} !dev-db/mysql${i}"
66 done
67
68 mysql_version_is_at_least "5.1" \
69 || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
70
71 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
72 PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
73
74 if mysql_version_is_at_least "5.1.12" ; then
75 DEPEND="${DEPEND} innodb? ( >=dev-util/cmake-2.4.3 )"
76 fi
77
78 # BitKeeper dependency, compile-time only
79 [[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client"
80
81 if [[ ${PN} == "mysql-slotted" ]] ; then
82 DEPEND="${DEPEND} app-admin/eselect-mysql"
83 fi
84
85 if [[ ${PN} == "mysql-slotted" ]] ; then
86 SLOT=""
87 tpv=( ${PV//[-._]/ } )
88 for vatom in 0 1 2 ; do
89 SLOT="${SLOT}${tpv[${vatom}]}_"
90 done
91 #finally SLOT=5_0_24
92 SLOT=${SLOT:0:${#SLOT}-1}
93 else
94 SLOT="0"
95 fi
96
97 # Define correct SRC_URIs
98 SRC_URI="
99 ${SERVER_URI}
100 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
101 "
102 mysql_version_is_at_least "5.1.12" \
103 && [[ -n "${PBXT_VERSION}" ]] \
104 && SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )"
105
17DESCRIPTION="A fast, multi-threaded, multi-user SQL database server" 106 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
18HOMEPAGE="http://www.mysql.com/" 107 HOMEPAGE="http://www.mysql.com/"
19NEWP="${P/_/-}"
20SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${NEWP}.tar.gz
21 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
22LICENSE="GPL-2" 108 LICENSE="GPL-2"
23IUSE="big-tables berkdb debug embedded minimal perl selinux srvdir ssl static" 109 IUSE="big-tables debug embedded minimal perl selinux ssl static"
24RESTRICT="primaryuri confcache" 110 RESTRICT="confcache"
25 111
112 mysql_version_is_at_least "4.1" \
113 && IUSE="${IUSE} latin1"
114
26mysql_version_is_at_least "4.01.03.00" \ 115 mysql_version_is_at_least "4.1.3" \
27&& IUSE="${IUSE} cluster extraengine" 116 && IUSE="${IUSE} cluster extraengine"
28 117
29mysql_version_is_at_least "5.00.00.00" \ 118 mysql_version_is_at_least "5.0" \
30|| IUSE="${IUSE} raid" 119 || IUSE="${IUSE} raid"
31 120
32mysql_version_is_at_least "5.00.18.00" \ 121 mysql_version_is_at_least "5.0.18" \
33&& IUSE="${IUSE} max-idx-128" 122 && IUSE="${IUSE} max-idx-128"
34 123
35mysql_version_is_at_least "5.01.00.00" \ 124 mysql_version_is_at_least "5.1" \
36&& IUSE="${IUSE} innodb" 125 && IUSE="${IUSE} innodb"
37 126
127 mysql_version_is_at_least "5.1" \
128 || IUSE="${IUSE} berkdb"
129
130 mysql_version_is_at_least "5.1.12" \
131 && IUSE="${IUSE} pbxt"
132
133 RDEPEND="${DEPEND}
134 sys-apps/mysql
135 selinux? ( sec-policy/selinux-mysql )
136 "
137
138fi # if [[ "${_MYPVR}" != "${PVR}" ]]
139
38EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_config pkg_prerm pkg_postrm 140EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
141 pkg_postinst pkg_config pkg_postrm
142
143#
144# HELPER FUNCTIONS:
145#
146
147bitkeeper_fetch() {
148
149 local reposuf
150 if [[ -z "${1}" ]] ; then
151 local tpv
152 tpv=( ${PV//[-._]/ } )
153 reposuf="mysql-${tpv[0]}.${tpv[1]}"
154 else
155 reposuf="${1}"
156 fi
157 einfo "using \"${reposuf}\" repository."
158 local repo_uri="bk://mysql.bkbits.net/${reposuf}"
159 ## -- ebk_store_dir: bitkeeper sources store directory
160 local ebk_store_dir="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/bk-src"
161 ## -- ebk_fetch_cmd: bitkeeper fetch command
162 # always fetch the latest revision, use -r<revision> if a specified revision is wanted
163 # hint: does not work
164 local ebk_fetch_cmd="sfioball"
165 ## -- ebk_update_cmd: bitkeeper update command
166 local ebk_update_cmd="update"
167
168 #addread "/etc/bitkeeper"
169 addwrite "${ebk_store_dir}"
170
171 if [[ ! -d "${ebk_store_dir}" ]]; then
172 debug-print "${FUNCNAME}: initial checkout. creating bitkeeper directory"
173 mkdir -p "${ebk_store_dir}" || die "${EBK}: can't mkdir ${ebk_store_dir}."
174 fi
175
176 pushd "${ebk_store_dir}" || die "${EBK}: can't chdir to ${ebk_store_dir}"
177
178 local wc_path=${reposuf}
179
180 if [[ ! -d "${wc_path}" ]]; then
181 local options="-r+"
182 # first check out
183 einfo "bitkeeper check out start -->"
184 einfo " repository: ${repo_uri}"
185 ${ebk_fetch_cmd} ${options} "${repo_uri}" ${wc_path} \
186 || die "${EBK}: can't fetch from ${repo_uri}."
187 else
188 if [[ ! -d "${wc_path}/BK" ]]; then
189 popd
190 die "Look like ${wc_path} is not a bitkeeper path."
191 fi
192
193 # update working copy
194 einfo "bitkeeper update start -->"
195 einfo " repository: ${repo_uri}"
196
197 ${ebk_update_cmd} "${repo_uri}" "${wc_path}" \
198 || die "BK: can't update from ${repo_uri} to ${wc_path}."
199 fi
200
201 einfo " working copy: ${wc_path}"
202 cd "${wc_path}"
203 rsync -rlpgo --exclude="BK/" . "${S}" || die "BK: can't export to ${S}."
204
205 echo
206 popd
207
208}
209
210mysql_disable_test() {
211 local testname="${1}" ; shift
212 local reason="${@}"
213 local mysql_disable_file="${S}/mysql-test/t/disabled.def"
214 echo ${testname} : ${reason} >> "${mysql_disable_file}"
215 ewarn "test \"${testname}\" disabled because: \"${reason}\""
216}
39 217
40# void mysql_init_vars() 218# void mysql_init_vars()
41# 219#
42# initialize global variables 220# Initialize global variables
43# 2005-11-19 <vivo at gentoo.org> 221# 2005-11-19 <vivo@gentoo.org>
222
44mysql_init_vars() { 223mysql_init_vars() {
45
46 if [[ ${SLOT} -eq 0 ]] ; then 224 if [[ ${SLOT} == "0" ]] ; then
47 MY_SUFFIX="" 225 MY_SUFFIX=""
48 else 226 else
49 MY_SUFFIX=${MY_SUFFIX:-"-${SLOT}"} 227 MY_SUFFIX=${MY_SUFFIX:-"-${SLOT}"}
50 fi 228 fi
51 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR:-"/usr/share/mysql${MY_SUFFIX}"} 229 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR:-"/usr/share/mysql${MY_SUFFIX}"}
53 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql${MY_SUFFIX}"} 231 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql${MY_SUFFIX}"}
54 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql${MY_SUFFIX}"} 232 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql${MY_SUFFIX}"}
55 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql${MY_SUFFIX}"} 233 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql${MY_SUFFIX}"}
56 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql${MY_SUFFIX}"} 234 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql${MY_SUFFIX}"}
57 235
58 if [ -z "${DATADIR}" ]; then 236 if [[ -z "${DATADIR}" ]] ; then
59 DATADIR="" 237 DATADIR=""
60 if [ -f "${MY_SYSCONFDIR}/my.cnf" ] ; then 238 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
61 DATADIR=`"my_print_defaults${MY_SUFFIX}" mysqld 2>/dev/null | sed -ne '/datadir/s|^--datadir=||p' | tail -n1` 239 DATADIR=`"my_print_defaults${MY_SUFFIX}" mysqld 2>/dev/null \
240 | sed -ne '/datadir/s|^--datadir=||p' \
241 | tail -n1`
62 if [ -z "${DATADIR}" ]; then 242 if [[ -z "${DATADIR}" ]] ; then
63 if useq "srvdir" ; then
64 DATADIR="${ROOT}/srv/localhost/mysql${MY_SUFFIX}/datadir"
65 else
66 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" | sed -e 's/.*=\s*//'` 243 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
67 fi 244 | sed -e 's/.*=\s*//'`
68 fi 245 fi
69 fi 246 fi
70 if [ -z "${DATADIR}" ]; then 247 if [[ -z "${DATADIR}" ]] ; then
71 if useq "srvdir" ; then
72 DATADIR="${ROOT}/srv/localhost/mysql${MY_SUFFIX}/datadir"
73 else
74 DATADIR="${MY_LOCALSTATEDIR}" 248 DATADIR="${MY_LOCALSTATEDIR}"
75 fi
76 einfo "Using default DATADIR" 249 einfo "Using default DATADIR"
77 fi 250 fi
78 einfo "MySQL DATADIR is ${DATADIR}" 251 elog "MySQL DATADIR is ${DATADIR}"
79 252
80 if [ -z "${PREVIOUS_DATADIR}" ] ; then 253 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
81 if [ -a "${DATADIR}" ] ; then 254 if [[ -e "${DATADIR}" ]] ; then
82 ewarn "Previous datadir found, it's YOUR job to change" 255 elog "Previous datadir found, it's YOUR job to change"
83 ewarn "ownership and have care of it" 256 elog "ownership and take care of it"
84 PREVIOUS_DATADIR="yes" 257 PREVIOUS_DATADIR="yes"
85 export PREVIOUS_DATADIR
86 else 258 else
87 PREVIOUS_DATADIR="no" 259 PREVIOUS_DATADIR="no"
88 export PREVIOUS_DATADIR
89 fi 260 fi
90 fi 261 export PREVIOUS_DATADIR
91 fi 262 fi
263 fi
264
265 MY_SOURCEDIR=${SERVER_URI##*/}
266 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
92 267
93 export MY_SUFFIX MY_SHAREDSTATEDIR MY_SYSCONFDIR 268 export MY_SUFFIX MY_SHAREDSTATEDIR MY_SYSCONFDIR
94 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR 269 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
95 export MY_INCLUDEDIR 270 export MY_INCLUDEDIR DATADIR MY_SOURCEDIR
96 export DATADIR
97} 271}
272
273configure_minimal() {
274 # These are things we exclude from a minimal build, please
275 # note that the server actually does get built and installed,
276 # but we then delete it before packaging.
277 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication"
278
279 for i in ${minimal_exclude_list} ; do
280 myconf="${myconf} --without-${i}"
281 done
282 myconf="${myconf} --with-extra-charsets=none"
283 myconf="${myconf} --enable-local-infile"
284
285 if useq "static" ; then
286 myconf="${myconf} --with-client-ldflags=-all-static"
287 myconf="${myconf} --disable-shared"
288 else
289 myconf="${myconf} --enable-shared --enable-static"
290 fi
291
292 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
293 myconf="${myconf} --with-charset=utf8"
294 myconf="${myconf} --with-collation=utf8_general_ci"
295 else
296 myconf="${myconf} --with-charset=latin1"
297 myconf="${myconf} --with-collation=latin1_swedish_ci"
298 fi
299}
300
301configure_common() {
302 myconf="${myconf} $(use_with big-tables)"
303 myconf="${myconf} --enable-local-infile"
304 myconf="${myconf} --with-extra-charsets=all"
305 myconf="${myconf} --with-mysqld-user=mysql"
306 myconf="${myconf} --with-server"
307 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
308 myconf="${myconf} --without-libwrap"
309
310 if useq "static" ; then
311 myconf="${myconf} --with-mysqld-ldflags=-all-static"
312 myconf="${myconf} --with-client-ldflags=-all-static"
313 myconf="${myconf} --disable-shared"
314 else
315 myconf="${myconf} --enable-shared --enable-static"
316 fi
317
318 if useq "debug" ; then
319 myconf="${myconf} --with-debug=full"
320 else
321 myconf="${myconf} --without-debug"
322 mysql_version_is_at_least "4.1.3" \
323 && useq "cluster" \
324 && myconf="${myconf} --without-ndb-debug"
325 fi
326
327 if mysql_version_is_at_least "4.1" && ! useq "latin1" ; then
328 myconf="${myconf} --with-charset=utf8"
329 myconf="${myconf} --with-collation=utf8_general_ci"
330 else
331 myconf="${myconf} --with-charset=latin1"
332 myconf="${myconf} --with-collation=latin1_swedish_ci"
333 fi
334
335 if useq "embedded" ; then
336 myconf="${myconf} --with-embedded-privilege-control"
337 myconf="${myconf} --with-embedded-server"
338 else
339 myconf="${myconf} --without-embedded-privilege-control"
340 myconf="${myconf} --without-embedded-server"
341 fi
342
343}
344
345configure_40_41_50() {
346 myconf="${myconf} $(use_with perl bench)"
347 myconf="${myconf} --enable-assembler"
348 myconf="${myconf} --with-extra-tools"
349 myconf="${myconf} --with-innodb"
350 myconf="${myconf} --without-readline"
351 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
352
353 if useq "ssl" ; then
354 # --with-vio is not needed anymore, it's on by default and
355 # has been removed from configure
356 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
357 if mysql_version_is_at_least "5.0.6" ; then
358 # myconf="${myconf} --with-yassl"
359 myconf="${myconf} --with-ssl"
360 else
361 myconf="${myconf} --with-openssl"
362 fi
363 else
364 myconf="${myconf} --without-openssl"
365 fi
366
367 # The following fix is due to a bug with bdb on SPARC's. See:
368 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
369 # It comes down to non-64-bit safety problems.
370 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
371 elog "Berkeley DB support was disabled due to incompatible arch"
372 myconf="${myconf} --without-berkeley-db"
373 else
374 if useq "berkdb" ; then
375 myconf="${myconf} --with-berkeley-db=./bdb"
376 else
377 myconf="${myconf} --without-berkeley-db"
378 fi
379 fi
380
381 if mysql_version_is_at_least "4.1.3" ; then
382 myconf="${myconf} --with-geometry"
383 myconf="${myconf} $(use_with cluster ndbcluster)"
384 fi
385
386 if mysql_version_is_at_least "4.1.3" && useq "extraengine" ; then
387 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
388 myconf="${myconf} --with-archive-storage-engine"
389
390 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
391 myconf="${myconf} --with-csv-storage-engine"
392
393 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
394 myconf="${myconf} --with-blackhole-storage-engine"
395
396 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
397 # http://dev.mysql.com/doc/mysql/en/federated-description.html
398 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
399 if mysql_version_is_at_least "5.0.3" ; then
400 elog "Before using the Federated storage engine, please be sure to read"
401 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
402 myconf="${myconf} --with-federated-storage-engine"
403 fi
404 fi
405
406 mysql_version_is_at_least "5.0.18" \
407 && useq "max-idx-128" \
408 && myconf="${myconf} --with-max-indexes=128"
409}
410
411configure_51() {
412 # TODO: !!!! readd --without-readline
413 # the failure depend upon config/ac-macros/readline.m4 checking into
414 # readline.h instead of history.h
415 myconf="${myconf} $(use_with ssl)"
416 myconf="${myconf} --enable-assembler"
417 myconf="${myconf} --with-geometry"
418 myconf="${myconf} --with-readline"
419 myconf="${myconf} --with-row-based-replication"
420 myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
421 myconf="${myconf} --without-pstack"
422 useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
423
424 # 5.1 introduces a new way to manage storage engines (plugins)
425 # like configuration=none
426 local plugins="csv,myisam,myisammrg,heap"
427 if useq "extraengine" ; then
428 # like configuration=max-no-ndb, archive and example removed in 5.1.11
429 plugins="${plugins},archive,blackhole,example,federated,partition"
430
431 elog "Before using the Federated storage engine, please be sure to read"
432 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
433 fi
434
435 if useq "innodb" ; then
436 plugins="${plugins},innobase"
437 fi
438
439 # like configuration=max-no-ndb
440 if useq "cluster" ; then
441 plugins="${plugins},ndbcluster"
442 myconf="${myconf} --with-ndb-binlog"
443 fi
444
445 if mysql_version_is_at_least "5.2" ; then
446 plugins="${plugins},falcon"
447 fi
448
449 myconf="${myconf} --with-plugins=${plugins}"
450}
451
452pbxt_src_compile() {
453 mysql_init_vars
454
455 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
456
457 einfo "Reconfiguring dir '${PWD}'"
458 AT_GNUCONF_UPDATE="yes" eautoreconf
459
460 local myconf
461 myconf="${myconf} --with-mysql=${S}"
462 mkdir -p ${T}/lib
463 myconf="${myconf} --libdir=${D}/${MY_LIBDIR}"
464 useq "debug" && myconf="${myconf} --with-debug=full"
465 # TODO is safe/needed to use econf here ?
466 ./configure ${myconf} || die "problem configuring pbxt storage engine"
467 # TODO is safe/needed to use emake here ?
468 make || die "problem making pbxt storage engine (${myconf})"
469
470 popd
471 # TODO: modify test suite
472}
473
474pbxt_src_install() {
475 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
476 make install || die "failed pbxt install"
477 popd
478}
479
480#
481# EBUILD FUNCTIONS
482#
98 483
99mysql_pkg_setup() { 484mysql_pkg_setup() {
100
101 enewgroup mysql 60 || die "problem adding group mysql" 485 enewgroup mysql 60 || die "problem adding 'mysql' group"
102 enewuser mysql 60 -1 /dev/null mysql \ 486 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
103 || die "problem adding user mysql" 487
488 # Check for USE flag problems in pkg_setup
489 if useq "static" && useq "ssl" ; then
490 eerror "MySQL does not support being built statically with SSL support enabled!"
491 die "MySQL does not support being built statically with SSL support enabled!"
492 fi
493
494 if ! mysql_version_is_at_least "5.0" \
495 && useq "raid" \
496 && useq "static" ; then
497 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
498 eerror "with RAID support enabled."
499 die "USE flags 'raid' and 'static' conflict!"
500 fi
501
502 if mysql_version_is_at_least "4.1.3" \
503 && ( useq "cluster" || useq "extraengine" ) \
504 && useq "minimal" ; then
505 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
506 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
507 fi
508
509 mysql_check_version_range "4.0 to 5.0.99.99" \
510 && useq "berkdb" \
511 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
104} 512}
105 513
106mysql_src_unpack() { 514mysql_src_unpack() {
107 515 # Initialize the proper variables first
108 mysql_init_vars 516 mysql_init_vars
109 517
110 if useq static && useq ssl; then 518 unpack ${A}
111 local msg="MySQL does not support building statically with SSL support" 519 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then
112 eerror "${msg}" 520 if mysql_check_version_range "5.1 to 5.1.99" ; then
113 die "${msg}" 521 bitkeeper_fetch "mysql-5.1-ndb"
522 elif mysql_check_version_range "5.2.0 to 5.2.99" ; then
523 bitkeeper_fetch "mysql-5.2-falcon"
524 else
525 bitkeeper_fetch
114 fi 526 fi
115
116 if mysql_version_is_at_least "4.01.03.00" \
117 && useq cluster \
118 || useq extraengine \
119 && useq minimal ; then
120 die "USEs cluster, extraengine conflicts with \"minimal\""
121 fi
122
123 unpack ${A} || die
124
125 mv -f "${WORKDIR}/${NEWP}" "${S}"
126 cd "${S}" 527 cd "${S}"
528 einfo "running upstream autorun on bk sources"
529 BUILD/autorun.sh
530 else
531 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
532 cd "${S}"
533 fi
127 534
535 # Apply the patches for this MySQL version
128 EPATCH_SUFFIX="patch" 536 EPATCH_SUFFIX="patch"
129 mkdir -p "${EPATCH_SOURCE}" || die "unable to create epatch directory" 537 mkdir -p "${EPATCH_SOURCE}" || die "unable to create epatch directory"
130 mysql_mv_patches 538 mysql_mv_patches
131 epatch || die "failed to apply all patches" 539 epatch || die "failed to apply all patches"
132 540
133 # additional check, remove bundled zlib 541 # Additional checks, remove bundled zlib
134 rm -f "${S}/zlib/"*.[ch] 542 rm -f "${S}/zlib/"*.[ch]
135 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in" 543 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
136 rm -f scripts/mysqlbug 544 rm -f "scripts/mysqlbug"
137 545
138 # Make charsets install in the right place 546 # Make charsets install in the right place
139 find . -name 'Makefile.am' \ 547 find . -name 'Makefile.am' \
140 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \; 548 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
141 549
142 # Manage mysqlmanager
143 mysql_version_is_at_least "5.00.15.00" \ 550 if mysql_version_is_at_least "4.1" ; then
144 && sed -i -e "s!@GENTOO_EXT@!${MY_SUFFIX}!g" \
145 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
146 "${S}/server-tools/instance-manager/Makefile.am"
147
148 # remove what need to be recreated, so we are sure it's actually done 551 # Remove what needs to be recreated, so we're sure it's actually done
149 find . -name Makefile -o -name Makefile.in -o -name configure -exec rm -f {} \; 552 find . -name Makefile \
553 -o -name Makefile.in \
554 -o -name configure \
555 -exec rm -f {} \;
150 rm ltmain.sh 556 rm -f "ltmain.sh"
557 rm -f "scripts/mysqlbug"
558 fi
151 559
152 local rebuilddirlist d buildstep bdbdir 560 local rebuilddirlist d
153 561
154 if mysql_version_is_at_least "5.01.00.00" ; then 562 if mysql_version_is_at_least "5.1.12" ; then
155 rebuilddirlist=". storage/innobase" 563 rebuilddirlist="."
156 bdbdir='storage/bdb/dist' 564 # TODO IMPO! Check this with a cmake expert
565 useq "innodb" \
566 && cmake \
567 -DCMAKE_C_COMPILER=$(which $(tc-getCC)) \
568 -DCMAKE_CXX_COMPILER=$(which $(tc-getCC)) \
569 "storage/innobase"
157 else 570 else
158 rebuilddirlist=". innobase" 571 rebuilddirlist=". innobase"
159 bdbdir='bdb/dist'
160 fi 572 fi
161 573
162 for d in ${rebuilddirlist}; do 574 for d in ${rebuilddirlist} ; do
163 einfo "reconfiguring dir \"${d}\"" 575 einfo "Reconfiguring dir '${d}'"
164 pushd "${d}" &>/dev/null 576 pushd "${d}" &>/dev/null
165 AT_GNUCONF_UPDATE="yes" eautoreconf 577 AT_GNUCONF_UPDATE="yes" eautoreconf
166 popd &>/dev/null 578 popd &>/dev/null
167 done 579 done
168 580
169 #TODO berkdb in 5.1 need to be worked on 581 if mysql_check_version_range "4.1 to 5.0.99.99" \
170 if useq berkdb && ! mysql_check_version_range "5.01.00.00 to 5.01.08.99" 582 && useq "berkdb" ; then
171 then
172 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f ltmain.sh "${bdbdir}/ltmain.sh" 583 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
173 pushd "${bdbdir}" && sh s_all || die "failed bdb reconfigure" &>/dev/null 584 pushd "bdb/dist" \
585 && sh s_all \
586 || die "Failed bdb reconfigure" \
587 &>/dev/null
174 popd &>/dev/null 588 popd &>/dev/null
175 fi 589 fi
176
177} 590}
178 591
179mysql_src_compile() { 592mysql_src_compile() {
180 593 # Make sure the vars are correctly initialized
181 mysql_init_vars 594 mysql_init_vars
595
596 # $myconf is modified by the configure_* functions
182 local myconf 597 local myconf=""
183 598
184 if useq static ; then
185 myconf="${myconf} --with-mysqld-ldflags=-all-static"
186 myconf="${myconf} --with-client-ldflags=-all-static"
187 myconf="${myconf} --disable-shared"
188 else
189 myconf="${myconf} --enable-shared --enable-static"
190 fi
191
192 #myconf="${myconf} `use_with tcpd libwrap`"
193 myconf="${myconf} --without-libwrap"
194
195 if useq ssl ; then 599 if useq "minimal" ; then
196 # --with-vio is not needed anymore, it's on by default and 600 configure_minimal
197 # has been removed from configure 601 else
198 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio" 602 configure_common
199 if mysql_version_is_at_least "5.00.06.00" ; then 603 if mysql_version_is_at_least "5.1.10" ; then
200 # yassl-0.96 is young break with gcc-4.0 || amd64 604 configure_51
201 #myconf="${myconf} --with-yassl"
202 myconf="${myconf} --with-openssl"
203 else 605 else
204 myconf="${myconf} --with-openssl" 606 configure_40_41_50
205 fi
206 else
207 myconf="${myconf} --without-openssl"
208 fi
209
210 if useq debug; then
211 myconf="${myconf} --with-debug=full"
212 else
213 myconf="${myconf} --without-debug"
214 mysql_version_is_at_least "4.01.03.00" && useq cluster && myconf="${myconf} --without-ndb-debug"
215 fi
216
217 # benchmarking stuff needs perl
218 # and shouldn't be bothered with on minimal builds
219 if useq perl && ! useq minimal; then
220 myconf="${myconf} --with-bench"
221 else
222 myconf="${myconf} --without-bench"
223 fi
224
225 # these are things we exclude from a minimal build
226 # note that the server actually does get built and installed
227 # but we then delete it before packaging.
228 local minimal_exclude_list="server embedded-server extra-tools innodb"
229 if ! useq minimal; then
230 for i in ${minimal_exclude_list}; do
231 myconf="${myconf} --with-${i}"
232 done
233
234 if useq static ; then
235 myconf="${myconf} --without-raid"
236 ewarn "disabling raid support, has problem with static"
237 else
238 if mysql_version_is_at_least "5.00.00.00" ; then
239 myconf="${myconf} --without-raid"
240 else
241 myconf="${myconf} `use_with raid`"
242 fi 607 fi
243 fi 608 fi
244 609
245 if ! mysql_version_is_at_least "5.00.00.00" ; then
246 if mysql_version_is_at_least "4.01.00.00" ; then
247 myconf="${myconf} --with-charset=utf8"
248 myconf="${myconf} --with-collation=utf8_general_ci"
249 else
250 myconf="${myconf} --with-charset=latin1"
251 myconf="${myconf} --with-collation=latin1_swedish_ci"
252 fi
253 fi
254
255 # optional again from 2005-12-05
256 if mysql_version_is_at_least "5.01.00.00" ; then
257 myconf="${myconf} $(use_with innodb)"
258 else
259 myconf="${myconf} --with-innodb"
260 fi
261
262 # lots of chars
263 myconf="${myconf} --with-extra-charsets=all"
264
265 #The following fix is due to a bug with bdb on sparc's. See:
266 #http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
267 # it comes down to non-64-bit safety problems
268 if useq sparc || useq alpha || useq hppa || useq mips || useq amd64 \
269 || mysql_check_version_range "5.01.00.00 to 5.01.06.99"
270 then
271 ewarn "bdb berkeley-db disabled due to arch or version"
272 myconf="${myconf} --without-berkeley-db"
273 else
274 #TODO berkdb in 5.1 need to be worked on
275 useq berkdb && \
276 ! mysql_check_version_range "5.01.00.00 to 5.01.08.99" \
277 && myconf="${myconf} --with-berkeley-db=./bdb" \
278 || myconf="${myconf} --without-berkeley-db"
279 fi
280
281 if mysql_version_is_at_least "4.01.03.00" ; then
282 #myconf="${myconf} $(use_with geometry)"
283 myconf="${myconf} --with-geometry"
284 myconf="${myconf} $(use_with cluster ndbcluster)"
285 fi
286
287 mysql_version_is_at_least "4.01.11.00" && myconf="${myconf} `use_with big-tables`"
288
289 mysql_version_is_at_least "5.01.06.00" && myconf="${myconf} --with-ndb-binlog"
290
291 if useq embedded ; then
292 #REMIND, need the privilege control enabled ?
293 myconf="${myconf} --without-embedded-privilege-control"
294 myconf="${myconf} --with-embedded-server"
295 else
296 myconf="${myconf} --without-embedded-privilege-control"
297 myconf="${myconf} --without-embedded-server"
298 fi
299 else
300 for i in ${minimal_exclude_list}; do
301 myconf="${myconf} --without-${i}"
302 done
303 myconf="${myconf} --without-berkeley-db"
304 myconf="${myconf} --with-extra-charsets=none"
305 fi
306
307 if mysql_version_is_at_least "4.01.03.00" && useq extraengine; then
308 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
309 myconf="${myconf} --with-archive-storage-engine"
310 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
311
312 mysql_version_is_at_least "4.01.04.00" \
313 && myconf="${myconf} --with-csv-storage-engine"
314
315 mysql_version_is_at_least "4.01.11.00" \
316 && myconf="${myconf} --with-blackhole-storage-engine"
317
318 # http://dev.mysql.com/doc/mysql/en/federated-description.html
319 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
320 if mysql_version_is_at_least "5.00.03.00" ; then
321 einfo "before to use federated engine be sure to read"
322 einfo "http://dev.mysql.com/doc/refman/5.0/en/federated-limitations.html"
323 myconf="${myconf} --with-federated-storage-engine"
324
325 # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
326 if mysql_version_is_at_least "5.01.00.00" ; then
327 myconf="${myconf} --with-partition"
328 fi
329 fi
330
331 fi
332
333 mysql_version_is_at_least "5.00.18.00" \
334 && useq "max-idx-128" \
335 && myconf="${myconf} --with-max-indexes=128"
336
337 if mysql_version_is_at_least "5.01.05.00" ; then
338 myconf="${myconf} --with-row-based-replication"
339 fi
340
341 #TODO rechek again later, had problem with assembler enabled
342 # and some combination of use-flags with 5.1
343 if mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then
344 myconf="${myconf} --disable-assembler"
345 else
346 myconf="${myconf} --enable-assembler"
347 fi
348
349 #Bug #114895,Bug #110149 610 # Bug #114895, bug #110149
350 filter-flags "-O" "-O[01]" 611 filter-flags "-O" "-O[01]"
612
351 #glibc-2.3.2_pre fix; bug #16496 613 # glib-2.3.2_pre fix, bug #16496
352 append-flags "-DHAVE_ERRNO_AS_DEFINE=1" 614 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
353 615
354 #the compiler flags are as per their "official" spec ;) 616 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
355 #CFLAGS="${CFLAGS/-O?/} -O3" \
356 export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti" 617 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
357 mysql_version_is_at_least "5.00.00.00" \ 618 mysql_version_is_at_least "5.0" \
358 && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 619 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
620 export CXXFLAGS
359 621
360 econf \ 622 econf \
361 --program-suffix="${MY_SUFFIX}" \ 623 --program-suffix="${MY_SUFFIX}" \
362 --libexecdir="/usr/sbin" \ 624 --libexecdir="/usr/sbin" \
363 --sysconfdir="${MY_SYSCONFDIR}" \ 625 --sysconfdir="${MY_SYSCONFDIR}" \
364 --localstatedir="${MY_LOCALSTATEDIR}" \ 626 --localstatedir="${MY_LOCALSTATEDIR}" \
365 --sharedstatedir="${MY_SHAREDSTATEDIR}" \ 627 --sharedstatedir="${MY_SHAREDSTATEDIR}" \
366 --libdir="${MY_LIBDIR}" \ 628 --libdir="${MY_LIBDIR}" \
367 --includedir="${MY_INCLUDEDIR}" \ 629 --includedir="${MY_INCLUDEDIR}" \
368 --with-low-memory \ 630 --with-low-memory \
369 --enable-local-infile \
370 --with-mysqld-user=mysql \
371 --with-client-ldflags=-lstdc++ \ 631 --with-client-ldflags=-lstdc++ \
372 --enable-thread-safe-client \ 632 --enable-thread-safe-client \
373 --with-comment="Gentoo Linux ${PF}" \ 633 --with-comment="Gentoo Linux ${PF}" \
374 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
375 --with-lib-ccflags="-fPIC" \
376 --without-readline \
377 --without-docs \ 634 --without-docs \
378 ${myconf} || die "bad ./configure" 635 ${myconf} || die "econf failed"
379 636
380 # TODO Move this before autoreconf !!! 637 # TODO: Move this before autoreconf !!!
381 find . -type f -name Makefile -print0 \ 638 find . -type f -name Makefile -print0 \
382 | xargs -0 -n100 sed -i \ 639 | xargs -0 -n100 sed -i \
383 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 640 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
384 641
385 emake || die "compile problem" 642 emake || die "emake failed"
643
644 mysql_version_is_at_least "5.1.1" && useq "pbxt" && pbxt_src_compile
386} 645}
387 646
388mysql_src_install() { 647mysql_src_install() {
389 648 # Make sure the vars are correctly initialized
390 mysql_init_vars 649 mysql_init_vars
650
391 make install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die 651 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die
652
653 mysql_version_is_at_least "5.1.12" && useq "pbxt" && pbxt_src_install
392 654
393 insinto "${MY_INCLUDEDIR}" 655 insinto "${MY_INCLUDEDIR}"
394 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h 656 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
395 657
396 # convenience links 658 # Convenience links
397 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}" 659 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}"
398 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}" 660 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}"
399 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}" 661 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}"
400 662
401 # various junk (my-*.cnf moved elsewhere) 663 # Various junk (my-*.cnf moved elsewhere)
402 rm -rf "${D}/usr/share/info" 664 rm -Rf "${D}/usr/share/info"
403 for removeme in "mysql-log-rotate" mysql.server* \ 665 for removeme in "mysql-log-rotate" mysql.server* \
404 binary-configure* my-*.cnf mi_test_all* 666 binary-configure* my-*.cnf mi_test_all*
405 do 667 do
406 rm -f ${D}/usr/share/mysql/${removeme} 668 rm -f "${D}"/usr/share/mysql/${removeme}
407 done 669 done
408 670
409 # TODO change at Makefile-am level 671 # TODO change at Makefile-am level
672 if [[ ${PN} == "mysql-slotted" ]] ; then
410 for moveme in "mysql_fix_privilege_tables.sql" \ 673 for moveme in "mysql_fix_privilege_tables.sql" \
411 "fill_help_tables.sql" "ndb-config-2-node.ini" 674 "fill_help_tables.sql" "ndb-config-2-node.ini"
412 do 675 do
413 mv -f "${D}/usr/share/mysql/${moveme}" "${D}/usr/share/mysql${MY_SUFFIX}/" 2>/dev/null 676 mv -f "${D}/usr/share/mysql/${moveme}" "${D}/usr/share/mysql${MY_SUFFIX}/" 2>/dev/null
414 done 677 done
678 fi
415 679
416 if [[ -n "${MY_SUFFIX}" ]] ; then 680 # clean up stuff for a minimal build
681 if useq "minimal" ; then
682 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
683 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}
684 rm -f "${D}/usr/sbin/mysqld"
685 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
686 fi
687
688 if [[ ${PN} == "mysql-slotted" ]] ; then
417 local notcatched=$(ls "${D}/usr/share/mysql"/*) 689 local notcatched=$(ls "${D}/usr/share/mysql"/*)
418 if [[ -n "${notcatched}" ]] ; then 690 if [[ -n "${notcatched}" ]] ; then
419 ewarn "QA notice" 691 ewarn "QA notice"
420 ewarn "${notcatched} files in /usr/share/mysql" 692 ewarn "${notcatched} files in /usr/share/mysql"
421 ewarn "bug mysql-herd to manage them" 693 ewarn "bug mysql-herd to manage them"
422 fi 694 fi
423 rm -rf "${D}/usr/share/mysql" 695 rm -Rf "${D}/usr/share/mysql"
424 fi 696 fi
425 697
426 # clean up stuff for a minimal build
427 # this is anything server-specific
428 if useq minimal; then
429 rm -rf ${D}${MY_SHAREDSTATEDIR}/{mysql-test,sql-bench}
430 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}
431 rm -f "${D}/usr/sbin/mysqld${MY_SUFFIX}"
432 rm -f ${D}${MY_LIBDIR}/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
433 fi
434
435 # config stuff 698 # Configuration stuff
699 if mysql_version_is_at_least "4.1" ; then
700 mysql_mycnf_version="4.1"
701 else
702 mysql_mycnf_version="4.0"
703 fi
436 insinto "${MY_SYSCONFDIR}" 704 insinto "${MY_SYSCONFDIR}"
437 doins scripts/mysqlaccess.conf 705 doins scripts/mysqlaccess.conf
438 sed -e "s!@MY_SUFFIX@!${MY_SUFFIX}!g" \ 706 sed -e "s!@MY_SUFFIX@!${MY_SUFFIX}!g" \
439 -e "s!@DATADIR@!${DATADIR}!g" \ 707 -e "s!@DATADIR@!${DATADIR}!g" \
440 "${FILESDIR}/my.cnf-4.1-r1" \ 708 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
441 > "${TMPDIR}/my.cnf.ok" 709 > "${TMPDIR}/my.cnf.ok"
710 if mysql_version_is_at_least "4.1" && useq "latin1" ; then
711 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
712 fi
442 newins "${TMPDIR}/my.cnf.ok" my.cnf 713 newins "${TMPDIR}/my.cnf.ok" my.cnf
443 714
444 insinto "/etc/conf.d"
445 newins "${FILESDIR}/mysql.conf.d-r1" "mysql"
446 mysql_version_is_at_least "5.00.11.00" \
447 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
448
449 # minimal builds don't have the server 715 # Minimal builds don't have the MySQL server
450 if ! useq minimal; then 716 if ! useq "minimal" ; then
451 exeinto /etc/init.d 717 # Empty directories ...
452 newexe "${FILESDIR}/mysql.rc6-r3" "mysql"
453
454 mysql_version_is_at_least "5.00.11.00" \
455 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
456 insinto /etc/logrotate.d
457 sed -e "s!___MY_SUFFIX___!${MY_SUFFIX}!g" \
458 "${FILESDIR}/logrotate-slot.mysql" \
459 > "${TMPDIR}/logrotate.mysql"
460 newins "${TMPDIR}/logrotate.mysql" "mysql${MY_SUFFIX}"
461
462 #empty dirs...
463 diropts "-m0750" 718 diropts "-m0750"
464 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then 719 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
465 dodir "${DATADIR}" 720 dodir "${DATADIR}"
466 keepdir "${DATADIR}" 721 keepdir "${DATADIR}"
467 chown -R mysql:mysql "${D}/${DATADIR}" 722 chown -R mysql:mysql "${D}/${DATADIR}"
473 keepdir "${folder}" 728 keepdir "${folder}"
474 chown -R mysql:mysql "${D}/${folder}" 729 chown -R mysql:mysql "${D}/${folder}"
475 done 730 done
476 fi 731 fi
477 732
478 # docs 733 # Docs
479 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE 734 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
735
480 # minimal builds don't have the server 736 # Minimal builds don't have the MySQL server
481 if ! useq minimal; then 737 if ! useq "minimal" ; then
482 docinto "support-files" 738 docinto "support-files"
483 for script in \ 739 for script in \
484 support-files/my-*.cnf \ 740 support-files/my-*.cnf \
485 support-files/magic \ 741 support-files/magic \
486 support-files/ndb-config-2-node.ini 742 support-files/ndb-config-2-node.ini
492 for script in scripts/mysql* ; do 748 for script in scripts/mysql* ; do
493 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 749 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
494 done 750 done
495 fi 751 fi
496 752
497 # oops, temporary fix 753 if [[ ${PN} == "mysql-slotted" ]] ; then
498 mysql_check_version_range "5.00.16.00 to 5.00.18.99" \
499 && cp -f \
500 "${WORKDIR}/mysql-extras/fill_help_tables.sql-5.0" \
501 "${D}/usr/share/mysql${MY_SUFFIX}/fill_help_tables.sql"
502
503 if [[ ${SLOT} -gt 0 ]] ; then
504 # MOVED HERE DUE TO BUG #121445 754 # MOVED HERE DUE TO BUG #121445
505 # create a list of files, to be used 755 # create a list of files, to be used
506 # by external utilities 756 # by external utilities
507 mkdir -p "${D}/var/lib/eselect/mysql/" 757 mkdir -p "${D}/var/lib/eselect/mysql/"
508 local filelist="${D}/var/lib/eselect/mysql/mysql${MY_SUFFIX}.filelist" 758 local filelist="${D}/var/lib/eselect/mysql/mysql${MY_SUFFIX}.filelist"
518 echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}" 768 echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}"
519 echo "${MY_LIBDIR#"/"}" >> "${filelist}" 769 echo "${MY_LIBDIR#"/"}" >> "${filelist}"
520 echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}" 770 echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}"
521 popd &>/dev/null 771 popd &>/dev/null
522 fi 772 fi
523 773
524 # It's safer portage wis doing this in instal, but we can't 774 mysql_lib_symlinks "${D}"
525 # if it's a slotted install
526 [[ ${SLOT} -eq 0 ]] && ROOT="${D}" mysql_lib_symlinks
527} 775}
528 776
529mysql_pkg_preinst() { 777mysql_pkg_preinst() {
530
531 enewgroup mysql 60 || die "problem adding group mysql" 778 enewgroup mysql 60 || die "problem adding 'mysql' group"
532 enewuser mysql 60 -1 /dev/null mysql \ 779 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
533 || die "problem adding user mysql"
534} 780}
535 781
536mysql_pkg_postinst() { 782mysql_pkg_postinst() {
537 783 # Make sure the vars are correctly initialized
538 mysql_init_vars 784 mysql_init_vars
539 # slotted, manage lib symlinks on the real file-system
540 # to cope with other version installed
541 [[ ${SLOT} -ne 0 ]] && mysql_lib_symlinks
542 785
543 # mind at FEATURES=collision-protect before to remove this 786 # Check FEATURES="collision-protect" before removing this
544 [ -d "${ROOT}/var/log/mysql" ] \ 787 [[ -d "${ROOT}/var/log/mysql" ]] \
545 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}" 788 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
546 789
547 #secure the logfiles... does this bother anybody? 790 # Secure the logfiles
548 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err} 791 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
549 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql* 792 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
550 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql* 793 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
551 794
795 # Minimal builds don't have the MySQL server
552 if ! useq minimal; then 796 if ! useq "minimal" ; then
553 if [[ ${SLOT} -gt 0 ]] ; then 797 docinto "support-files"
554 einfo "you may want to read:" 798 for script in \
555 einfo "http://www.gentoo.org/doc/en/mysql-upgrade-slotted.xml" 799 support-files/my-*.cnf \
556 einfo "you may want to run \"eselect mysql list\" followed by a " 800 support-files/magic \
557 einfo "\"eselect mysql set 1\" to choose the default mysql server" 801 support-files/ndb-config-2-node.ini
802 do
803 dodoc "${script}"
804 done
805
806 docinto "scripts"
807 for script in scripts/mysql* ; do
808 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
809 done
558 fi 810 fi
559 811
560 # your friendly public service announcement... 812 einfo "you may want to read slotting upgrade documents in the overlay"
561 einfo 813 if useq "pbxt" && mysql_version_is_at_least "5.1" ; then
562 einfo "You might want to run:" 814 # TODO tell it better ;-)
563 einfo "\"emerge --config =${CATEGORY}/${PF}\"" 815 einfo "mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
564 einfo "if this is a new install." 816 einfo "CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
565 einfo 817 einfo "if, after that you cannot start the mysql server"
566 mysql_version_is_at_least "5.01.00.00" \ 818 einfo "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
567 || einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream." 819 einfo "use the mysql upgrade script to restore the table"
820 einfo " or "
821 einfo "CREATE TABLE IF NOT EXISTS plugin ("
822 einfo " name char(64) binary DEFAULT '' NOT NULL,"
823 einfo " dl char(128) DEFAULT '' NOT NULL,"
824 einfo " PRIMARY KEY (name)"
825 einfo ") CHARACTER SET utf8 COLLATE utf8_bin;"
568 fi 826 fi
827 mysql_check_version_range "4.0 to 5.0.99.99" \
828 && useq "berkdb" \
829 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
569} 830}
570 831
571mysql_pkg_config() { 832mysql_pkg_config() {
833 # Make sure the vars are correctly initialized
572 mysql_init_vars 834 mysql_init_vars
835
573 [[ -z "${DATADIR}" ]] && die "sorry, unable to find DATADIR" 836 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
574 837
575 if built_with_use dev-db/mysql minimal; then 838 if built_with_use ${CATEGORY}/${PN} minimal ; then
576 die "Minimal builds do NOT include the MySQL server" 839 die "Minimal builds do NOT include the MySQL server"
577 fi 840 fi
578 841
579 local pwd1="a" 842 local pwd1="a"
580 local pwd2="b" 843 local pwd2="b"
586 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."
587 die "MySQL database already exists!" 850 die "MySQL database already exists!"
588 fi 851 fi
589 852
590 einfo "Creating the mysql database and setting proper" 853 einfo "Creating the mysql database and setting proper"
591 einfo "permissions on it..." 854 einfo "permissions on it ..."
592 855
593 einfo "Insert a password for the mysql 'root' user" 856 einfo "Insert a password for the mysql 'root' user"
594 ewarn "Avoid [\"'\\_%] characters in the password" 857 ewarn "Avoid [\"'\\_%] characters in the password"
595
596 read -rsp " >" pwd1 ; echo 858 read -rsp " >" pwd1 ; echo
859
597 einfo "Check the password" 860 einfo "Retype the password"
598 read -rsp " >" pwd2 ; echo 861 read -rsp " >" pwd2 ; echo
599 862
600 if [[ "x$pwd1" != "x$pwd2" ]] ; then 863 if [[ "x$pwd1" != "x$pwd2" ]] ; then
601 die "Passwords are not the same" 864 die "Passwords are not the same"
602 fi 865 fi
603 866
604 local options="" 867 local options=""
605 local sqltmp="$(emktemp)" 868 local sqltmp="$(emktemp)"
606 869
607 local help_tables="${MY_SHAREDSTATEDIR}/fill_help_tables.sql" 870 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
608 [[ -r "${help_tables}" ]] \ 871 [[ -r "${help_tables}" ]] \
609 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \ 872 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
610 || touch "${TMPDIR}/fill_help_tables.sql" 873 || touch "${TMPDIR}/fill_help_tables.sql"
611 help_tables="${TMPDIR}/fill_help_tables.sql" 874 help_tables="${TMPDIR}/fill_help_tables.sql"
612 875
613 pushd "${TMPDIR}" &>/dev/null 876 pushd "${TMPDIR}" &>/dev/null
614 ${ROOT}/usr/bin/mysql_install_db${MY_SUFFIX} | grep -B5 -A999 -i "ERROR" 877 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
615 popd &>/dev/null 878 popd &>/dev/null
616 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] || die "MySQL databases not installed" 879 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
880 || die "MySQL databases not installed"
617 chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null 881 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
618 chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null 882 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
619 883
620 if mysql_version_is_at_least "4.01.03.00" ; then 884 if mysql_version_is_at_least "4.1.3" ; then
621 options="--skip-ndbcluster" 885 options="--skip-ndbcluster"
622 886
623 # Filling timezones, see 887 # Filling timezones, see
624 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 888 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
625 ${ROOT}/usr/bin/mysql_tzinfo_to_sql${MY_SUFFIX} ${ROOT}/usr/share/zoneinfo \ 889 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
626 > "${sqltmp}" 2>/dev/null
627 890
628 if [[ -r "${help_tables}" ]] ; then 891 if [[ -r "${help_tables}" ]] ; then
629 cat "${help_tables}" >> "${sqltmp}" 892 cat "${help_tables}" >> "${sqltmp}"
630 fi 893 fi
631 fi 894 fi
632 895
633 local socket=${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock 896 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
634 local pidfile=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.pid 897 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
635 local mysqld="${ROOT}/usr/sbin/mysqld${MY_SUFFIX} \ 898 local mysqld="${ROOT}/usr/sbin/mysqld \
636 ${options} \ 899 ${options} \
637 --user=mysql \ 900 --user=mysql \
638 --skip-grant-tables \ 901 --skip-grant-tables \
639 --basedir=${ROOT}/usr \ 902 --basedir=${ROOT}/usr \
640 --datadir=${ROOT}/${DATADIR} \ 903 --datadir=${ROOT}/${DATADIR} \
643 --skip-networking \ 906 --skip-networking \
644 --max_allowed_packet=8M \ 907 --max_allowed_packet=8M \
645 --net_buffer_length=16K \ 908 --net_buffer_length=16K \
646 --socket=${socket} \ 909 --socket=${socket} \
647 --pid-file=${pidfile}" 910 --pid-file=${pidfile}"
648 $mysqld & 911 ${mysqld} &
649 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do 912 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
650 maxtry=$(($maxtry-1)) 913 maxtry=$((${maxtry}-1))
651 echo -n "." 914 echo -n "."
652 sleep 1 915 sleep 1
653 done 916 done
654 917
655 # do this from memory we don't want clear text password in temp files 918 # Do this from memory, as we don't want clear text passwords in temp files
656 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'" 919 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
657 ${ROOT}/usr/bin/mysql${MY_SUFFIX} \ 920 "${ROOT}/usr/bin/mysql" \
658 --socket=${socket} \ 921 --socket=${socket} \
659 -hlocalhost \ 922 -hlocalhost \
660 -e "${sql}" 923 -e "${sql}"
661 924
662 einfo "Loading \"zoneinfo\" this step may require few seconds" 925 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
663 926
664 ${ROOT}/usr/bin/mysql${MY_SUFFIX} \ 927 "${ROOT}/usr/bin/mysql" \
665 --socket=${socket} \ 928 --socket=${socket} \
666 -hlocalhost \ 929 -hlocalhost \
667 -uroot \ 930 -uroot \
668 -p"${pwd1}" \ 931 -p"${pwd1}" \
669 mysql < "${sqltmp}" 932 mysql < "${sqltmp}"
670 933
671 # server stop and cleanup 934 # Stop the server and cleanup
672 kill $(< "${pidfile}" ) 935 kill $(< "${pidfile}" )
673 rm "${sqltmp}" 936 rm -f "${sqltmp}"
674 einfo "stopping the server," 937 einfo "Stopping the server ..."
675 wait %1 938 wait %1
676 einfo "done" 939 einfo "Done"
677}
678
679mysql_pkg_prerm() {
680 if [[ ${SLOT} -gt 0 ]] ; then
681 # external program
682 eselect mysql slot_remove "${SLOT}"
683 fi
684} 940}
685 941
686mysql_pkg_postrm() { 942mysql_pkg_postrm() {
943 if [[ ${PN} == "mysql-slotted" ]] ; then
687 mysql_lib_symlinks 944 mysql_lib_symlinks
688 if [[ ${SLOT} -gt 0 ]] ; then 945 mysql_clients_link_to_best_version
689 einfo "you may want to run \"eselect mysql list\" followed by a "
690 einfo "\"eselect mysql list\" to choose the default mysql server"
691 fi 946 fi
692} 947}

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.59

  ViewVC Help
Powered by ViewVC 1.1.20