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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.86 - (show annotations) (download)
Sun Mar 9 21:13:22 2008 UTC (6 years, 6 months ago) by robbat2
Branch: MAIN
Changes since 1.85: +17 -5 lines
Forcibly redo the patches every unpack, and also add support for grabbing them straight from the Git overlay, to speed up testing.

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

  ViewVC Help
Powered by ViewVC 1.1.20