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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.111 - (show annotations) (download)
Mon Jul 6 18:21:18 2009 UTC (4 years, 9 months ago) by robbat2
Branch: MAIN
Changes since 1.110: +41 -1 lines
Bug #212407: Allow for datadir that is changed by user to work better during pkg_config.

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

  ViewVC Help
Powered by ViewVC 1.1.20