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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.39 - (hide annotations) (download)
Fri Oct 20 14:44:01 2006 UTC (7 years, 11 months ago) by chtekk
Branch: MAIN
Changes since 1.38: +54 -47 lines
General cleanup in preparation of 5.1, fixup some stuff, sync to old behaviour.

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

  ViewVC Help
Powered by ViewVC 1.1.20