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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.41 - (show annotations) (download)
Fri Oct 20 18:53:45 2006 UTC (7 years, 9 months ago) by chtekk
Branch: MAIN
Changes since 1.40: +20 -15 lines
Backport a few more fixes from SVN, thanks to vivo!

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

  ViewVC Help
Powered by ViewVC 1.1.20