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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.112 - (show annotations) (download)
Mon Jul 6 18:58:41 2009 UTC (5 years, 1 month ago) by robbat2
Branch: MAIN
Changes since 1.111: +47 -5 lines
Take mysql.eclass into the realm of EAPI2.

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

  ViewVC Help
Powered by ViewVC 1.1.20