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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.37 - (hide annotations) (download)
Fri Oct 20 12:56:30 2006 UTC (7 years, 9 months ago) by vivo
Branch: MAIN
Changes since 1.36: +186 -8 lines
Porting changes from overlay step 1 of 2:
- added function that will be called by mysql_src_unpack without actually
  call them.
- reformatting some rows to make them shorter than 80 chars

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

  ViewVC Help
Powered by ViewVC 1.1.20