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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


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

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.41 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.40 2006/10/20 15:22:24 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.41 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 chtekk 1.30 userland_GNU? ( sys-process/procps )
33 chtekk 1.41 >=sys-apps/sed-4
34 chtekk 1.30 >=sys-apps/texinfo-4.7-r1
35 chtekk 1.41 >=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 vivo 1.26
41     RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )"
42 chtekk 1.30
43 vivo 1.26 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
44     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
45    
46 chtekk 1.30 # Shorten the path because the socket path length must be shorter than 107 chars
47 vivo 1.1 # and we will run a mysql server during test phase
48     S="${WORKDIR}/${PN}"
49    
50 chtekk 1.30 # Define $MY_FIXED_PV for MySQL patchsets
51     MY_FIXED_PV="${PV/_alpha/}"
52 vivo 1.37 #MY_FIXED_PV="${MY_FIXED_PV/_beta/}"
53     #MY_FIXED_PV="${MY_FIXED_PV/_rc/}"
54 chtekk 1.30
55 chtekk 1.39 MY_P="${P/_/-}"
56    
57 chtekk 1.30 # Define correct SRC_URIs
58 chtekk 1.39 SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${MY_P}${MYSQL_RERELEASE}.tar.gz"
59 chtekk 1.32 if [[ -n "${MYSQL_PATCHSET_REV}" ]] ; then
60 robbat2 1.31 MYSQL_PATCHSET_FILENAME="${PN}-patchset-${MY_FIXED_PV}-r${MYSQL_PATCHSET_REV}.tar.bz2"
61 chtekk 1.32 # We add the Gentoo mirror here, as we only use primaryuri for the MySQL tarball
62 chtekk 1.35 SRC_URI="${SRC_URI} http://gentoo.longitekk.com/${MYSQL_PATCHSET_FILENAME}"
63 robbat2 1.31 fi
64 chtekk 1.30
65     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
66 vivo 1.1 HOMEPAGE="http://www.mysql.com/"
67 chtekk 1.30 SLOT="0"
68 vivo 1.1 LICENSE="GPL-2"
69 chtekk 1.39 IUSE="big-tables debug embedded minimal perl selinux srvdir ssl static"
70 chtekk 1.35 RESTRICT="confcache"
71 vivo 1.1
72 chtekk 1.30 mysql_version_is_at_least "4.01.00.00" \
73     && IUSE="${IUSE} latin1"
74    
75 vivo 1.1 mysql_version_is_at_least "4.01.03.00" \
76 vivo 1.8 && IUSE="${IUSE} cluster extraengine"
77 vivo 1.1
78 vivo 1.21 mysql_version_is_at_least "5.00.00.00" \
79     || IUSE="${IUSE} raid"
80    
81 vivo 1.1 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 chtekk 1.39 mysql_version_is_at_least "5.01.00.00" \
88     || IUSE="${IUSE} berkdb"
89    
90 vivo 1.26 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
91 swegener 1.36 pkg_postinst pkg_config pkg_postrm
92 vivo 1.1
93 vivo 1.37 #
94     # HELPER FUNCTIONS:
95     #
96    
97 vivo 1.8 # void mysql_init_vars()
98     #
99 chtekk 1.30 # Initialize global variables
100     # 2005-11-19 <vivo@gentoo.org>
101    
102 vivo 1.8 mysql_init_vars() {
103 chtekk 1.30 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
104 vivo 1.26 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
105 chtekk 1.29 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
106 vivo 1.26 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
107     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
108     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
109 vivo 1.8
110 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
111 vivo 1.8 DATADIR=""
112 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
113 vivo 1.26 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
114     | sed -ne '/datadir/s|^--datadir=||p' \
115     | tail -n1`
116 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
117 vivo 1.8 if useq "srvdir" ; then
118 vivo 1.26 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
119 vivo 1.8 else
120 vivo 1.26 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
121     | sed -e 's/.*=\s*//'`
122 vivo 1.8 fi
123     fi
124     fi
125 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
126 vivo 1.17 if useq "srvdir" ; then
127 vivo 1.26 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
128 vivo 1.17 else
129     DATADIR="${MY_LOCALSTATEDIR}"
130     fi
131 vivo 1.8 einfo "Using default DATADIR"
132     fi
133 chtekk 1.39 elog "MySQL DATADIR is ${DATADIR}"
134 vivo 1.8
135 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
136     if [[ -e "${DATADIR}" ]] ; then
137 chtekk 1.39 elog "Previous datadir found, it's YOUR job to change"
138     elog "ownership and take care of it"
139 vivo 1.8 PREVIOUS_DATADIR="yes"
140     else
141     PREVIOUS_DATADIR="no"
142     fi
143 chtekk 1.30 export PREVIOUS_DATADIR
144 vivo 1.8 fi
145     fi
146    
147 vivo 1.26 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
148 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
149     export MY_INCLUDEDIR
150     export DATADIR
151     }
152    
153 vivo 1.37 configure_minimal() {
154 chtekk 1.39 # These are things we exclude from a minimal build, please
155     # note that the server actually does get built and installed,
156 vivo 1.37 # 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 chtekk 1.39 for i in ${minimal_exclude_list} ; do
160 vivo 1.37 myconf="${myconf} --without-${i}"
161     done
162     myconf="${myconf} --with-extra-charsets=none"
163     }
164    
165     configure_common() {
166 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
167 vivo 1.37 myconf="${myconf} --enable-local-infile"
168     myconf="${myconf} --with-extra-charsets=all"
169     myconf="${myconf} --with-mysqld-user=mysql"
170 chtekk 1.39 myconf="${myconf} --with-server"
171 vivo 1.37 myconf="${myconf} --with-unix-socket-path='/var/run/mysqld/mysqld.sock'"
172     myconf="${myconf} --without-libwrap"
173 chtekk 1.39
174 vivo 1.37 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 chtekk 1.39
191 vivo 1.37 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 chtekk 1.39
199 vivo 1.37 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 chtekk 1.38 mysql_version_is_at_least "5.00.00.00" || myconf="${myconf} $(use_with raid)"
216 vivo 1.37
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 chtekk 1.39 elog "Berkeley DB support was disabled due to incompatible arch"
236 vivo 1.37 myconf="${myconf} --without-berkeley-db"
237     else
238 chtekk 1.39 if useq "berkdb" ; then
239     myconf="${myconf} --with-berkeley-db=./bdb"
240     else
241     myconf="${myconf} --without-berkeley-db"
242     fi
243 vivo 1.37 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 chtekk 1.39 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 vivo 1.37 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 chtekk 1.39 configure_51() {
276 chtekk 1.40 # TODO: !!!! readd --without-readline
277 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
278 vivo 1.37 # 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 chtekk 1.39
288 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
289     # like configuration=none
290     local plugins="csv,myisam,myisammrg,heap"
291 chtekk 1.39 if useq "extraengine" ; then
292 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
293 chtekk 1.41 plugins="${plugins},archive,blackhole,example,federated,ftexample,partition"
294 vivo 1.37
295 chtekk 1.39 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 vivo 1.37 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 vivo 1.1 mysql_pkg_setup() {
317 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
318     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
319 chtekk 1.39
320 vivo 1.37 if mysql_version_is_at_least "5.01.12.00" && useq "innodb" ; then
321 chtekk 1.39 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 vivo 1.37 fi
324 vivo 1.1
325 chtekk 1.30 # 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 vivo 1.1
331 chtekk 1.30 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 vivo 1.1 fi
338    
339     if mysql_version_is_at_least "4.01.03.00" \
340 chtekk 1.30 && ( useq "cluster" || useq "extraengine" ) \
341 vivo 1.26 && useq "minimal" ; then
342 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
343     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
344 vivo 1.1 fi
345 chtekk 1.39
346 chtekk 1.41 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 chtekk 1.30 }
350    
351     mysql_src_unpack() {
352     # Initialize the proper variables first
353     mysql_init_vars
354 vivo 1.1
355 chtekk 1.30 unpack ${A}
356 vivo 1.1
357 chtekk 1.39 mv -f "${WORKDIR}/${MY_P}${MYSQL_RERELEASE}" "${S}"
358 vivo 1.1 cd "${S}"
359    
360 chtekk 1.30 # 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 vivo 1.1
365 chtekk 1.30 # Additional checks, remove bundled zlib
366 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
367     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
368 chtekk 1.30 rm -f "scripts/mysqlbug"
369 vivo 1.1
370     # Make charsets install in the right place
371 vivo 1.37 find . -name 'Makefile.am' \
372     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
373 vivo 1.1
374     # Manage mysqlmanager
375     mysql_version_is_at_least "5.00.15.00" \
376 chtekk 1.39 && sed -i -e "s!@GENTOO_EXT@!!g" \
377 vivo 1.37 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
378     "${S}/server-tools/instance-manager/Makefile.am"
379 chtekk 1.30
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 vivo 1.37 rm -f "scripts/mysqlbug"
388 chtekk 1.30 fi
389 vivo 1.1
390 chtekk 1.30 local rebuilddirlist bdbdir d
391 vivo 1.1
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 chtekk 1.30 for d in ${rebuilddirlist} ; do
401     einfo "Reconfiguring dir '${d}'"
402 vivo 1.4 pushd "${d}" &>/dev/null
403 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
404 vivo 1.4 popd &>/dev/null
405 vivo 1.1 done
406    
407 chtekk 1.41 if mysql_check_version_range "4.01.00.00 to 5.00.99.99" \
408     && useq "berkdb" ; then
409 chtekk 1.30 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh"
410 vivo 1.26 pushd "${bdbdir}" \
411 chtekk 1.30 && sh s_all \
412     || die "Failed bdb reconfigure" \
413     &>/dev/null
414 vivo 1.4 popd &>/dev/null
415 vivo 1.1 fi
416     }
417    
418 vivo 1.6 mysql_src_compile() {
419 chtekk 1.30 # Make sure the vars are correctly initialized
420     mysql_init_vars
421 vivo 1.1
422     local myconf
423    
424 vivo 1.26 if useq "static" ; then
425 vivo 1.1 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 vivo 1.26 if useq "ssl" ; then
435 vivo 1.1 # --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 chtekk 1.30 # yassl-0.96 is still young and breaks with GCC-4.X or amd64
440     # myconf="${myconf} --with-yassl"
441 vivo 1.1 myconf="${myconf} --with-openssl"
442     else
443     myconf="${myconf} --with-openssl"
444     fi
445     else
446     myconf="${myconf} --without-openssl"
447     fi
448    
449 chtekk 1.30 if useq "debug" ; then
450 vivo 1.1 myconf="${myconf} --with-debug=full"
451     else
452     myconf="${myconf} --without-debug"
453 chtekk 1.30
454     mysql_version_is_at_least "4.01.03.00" && useq "cluster" \
455 vivo 1.26 && myconf="${myconf} --without-ndb-debug"
456 vivo 1.1 fi
457    
458 chtekk 1.30 # 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 vivo 1.26 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 vivo 1.1
467 chtekk 1.30 if ! mysql_version_is_at_least "5.00.00.00" ; then
468     if useq "raid" ; then
469     myconf="${myconf} --with-raid"
470     else
471 vivo 1.21 myconf="${myconf} --without-raid"
472     fi
473 vivo 1.1 fi
474    
475 chtekk 1.30 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
476 chtekk 1.29 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 vivo 1.1 fi
482    
483 chtekk 1.30 # Optional again with MySQL 5.1
484 vivo 1.1 if mysql_version_is_at_least "5.01.00.00" ; then
485 chtekk 1.30 if useq "innodb" ; then
486     myconf="${myconf} --with-innodb"
487     else
488     myconf="${myconf} --without-innodb"
489     fi
490 vivo 1.1 fi
491    
492 chtekk 1.30 # Lots of charsets
493 vivo 1.1 myconf="${myconf} --with-extra-charsets=all"
494    
495 chtekk 1.30 # 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 chtekk 1.39 elog "Berkeley DB support was disabled due to incompatible arch"
500 vivo 1.1 myconf="${myconf} --without-berkeley-db"
501     else
502 chtekk 1.30 # 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 vivo 1.1 fi
509    
510     if mysql_version_is_at_least "4.01.03.00" ; then
511     myconf="${myconf} --with-geometry"
512 chtekk 1.30
513     if useq "cluster" ; then
514     myconf="${myconf} --with-ndbcluster"
515     else
516     myconf="${myconf} --without-ndbcluster"
517     fi
518 vivo 1.1 fi
519    
520 chtekk 1.30 if useq "big-tables" ; then
521     myconf="${myconf} --with-big-tables"
522     else
523     myconf="${myconf} --without-big-tables"
524     fi
525 vivo 1.19
526 vivo 1.26 mysql_version_is_at_least "5.01.06.00" \
527     && myconf="${myconf} --with-ndb-binlog"
528 vivo 1.21
529 vivo 1.26 if useq "embedded" ; then
530 chtekk 1.30 myconf="${myconf} --with-embedded-privilege-control"
531 vivo 1.21 myconf="${myconf} --with-embedded-server"
532     else
533     myconf="${myconf} --without-embedded-privilege-control"
534     myconf="${myconf} --without-embedded-server"
535     fi
536 vivo 1.26
537 chtekk 1.30 # Benchmarking stuff needs Perl
538 vivo 1.26 if useq "perl" ; then
539     myconf="${myconf} --with-bench"
540     else
541     myconf="${myconf} --without-bench"
542     fi
543 vivo 1.1 else
544 chtekk 1.30 for i in ${minimal_exclude_list} ; do
545 vivo 1.1 myconf="${myconf} --without-${i}"
546     done
547     myconf="${myconf} --without-berkeley-db"
548     myconf="${myconf} --with-extra-charsets=none"
549     fi
550    
551 chtekk 1.30 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
552 vivo 1.1 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
553     myconf="${myconf} --with-archive-storage-engine"
554 chtekk 1.30
555 vivo 1.1 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
556 chtekk 1.30 myconf="${myconf} --with-csv-storage-engine"
557 vivo 1.1
558 chtekk 1.30 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
559     myconf="${myconf} --with-blackhole-storage-engine"
560 vivo 1.1
561 chtekk 1.30 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
562 vivo 1.1 # 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 chtekk 1.39 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 vivo 1.1 myconf="${myconf} --with-federated-storage-engine"
568 chtekk 1.30 fi
569 vivo 1.1
570 chtekk 1.30 # 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 vivo 1.1 fi
574 vivo 1.8 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 chtekk 1.30 mysql_version_is_at_least "5.01.05.00" \
581     && myconf="${myconf} --with-row-based-replication"
582 vivo 1.1
583 chtekk 1.40 # TODO: Recheck again later, there were problems with assembler enabled
584     # and some combinations of USE flags with MySQL 5.1
585 vivo 1.23 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 chtekk 1.30 # Bug #114895, bug #110149
592 vivo 1.1 filter-flags "-O" "-O[01]"
593 chtekk 1.30
594     # glib-2.3.2_pre fix, bug #16496
595 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
596    
597 chtekk 1.34 append-flags "-fno-exceptions -fno-strict-aliasing"
598     CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
599 vivo 1.1 mysql_version_is_at_least "5.00.00.00" \
600 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
601 chtekk 1.39 export CXXFLAGS
602 vivo 1.1
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 vivo 1.14 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
617 vivo 1.1 --without-readline \
618     --without-docs \
619 chtekk 1.39 ${myconf} || die "econf failed"
620 vivo 1.1
621 chtekk 1.30 # TODO: Move this before autoreconf !!!
622 vivo 1.21 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 vivo 1.1
626 chtekk 1.39 emake || die "emake failed"
627 vivo 1.1 }
628    
629     mysql_src_install() {
630 chtekk 1.30 # Make sure the vars are correctly initialized
631     mysql_init_vars
632 vivo 1.1
633 chtekk 1.39 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
634 vivo 1.1
635     insinto "${MY_INCLUDEDIR}"
636     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
637    
638 chtekk 1.30 # Convenience links
639 vivo 1.26 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
640     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
641     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
642 vivo 1.1
643 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
644     rm -Rf "${D}/usr/share/info"
645 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
646     binary-configure* my-*.cnf mi_test_all*
647     do
648 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
649 vivo 1.1 done
650    
651 chtekk 1.30 # Clean up stuff for a minimal build
652 vivo 1.26 if useq "minimal" ; then
653 chtekk 1.30 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 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
656 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
657 vivo 1.1 fi
658    
659 chtekk 1.30 # 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 vivo 1.1 insinto "${MY_SYSCONFDIR}"
666 chtekk 1.30 doins "scripts/mysqlaccess.conf"
667     sed -e "s!@DATADIR@!${DATADIR}!g" \
668     "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
669 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
670 chtekk 1.30 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 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
674    
675 vivo 1.1 insinto "/etc/conf.d"
676 chtekk 1.30 newins "${FILESDIR}/mysql.conf.d" "mysql"
677 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
678 vivo 1.25 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
679 vivo 1.1
680 chtekk 1.30 # Minimal builds don't have the MySQL server
681 vivo 1.26 if ! useq "minimal" ; then
682 chtekk 1.30 exeinto "/etc/init.d"
683     newexe "${FILESDIR}/mysql.rc6" "mysql"
684 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
685 vivo 1.25 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
686 chtekk 1.30
687     insinto "/etc/logrotate.d"
688 vivo 1.26 newins "${FILESDIR}/logrotate.mysql" "mysql"
689 vivo 1.1
690 chtekk 1.30 # Empty directories ...
691 vivo 1.1 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 chtekk 1.30 # Docs
707 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
708 chtekk 1.30
709     # Minimal builds don't have the MySQL server
710 vivo 1.26 if ! useq "minimal" ; then
711 vivo 1.1 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 vivo 1.4 for script in scripts/mysql* ; do
722     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
723 vivo 1.1 done
724     fi
725 vivo 1.4
726 vivo 1.26 ROOT="${D}" mysql_lib_symlinks
727 vivo 1.15 }
728    
729     mysql_pkg_preinst() {
730 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
731     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
732 vivo 1.1 }
733    
734     mysql_pkg_postinst() {
735 chtekk 1.30 # Make sure the vars are correctly initialized
736 vivo 1.1 mysql_init_vars
737    
738 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
739 vivo 1.37 [[ -d "${ROOT}/var/log/mysql" ]] \
740     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
741 vivo 1.1
742 chtekk 1.30 # Secure the logfiles
743 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
744     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
745     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
746    
747 vivo 1.26 if ! useq "minimal" ; then
748 chtekk 1.30 # Your friendly public service announcement ...
749 vivo 1.1 einfo
750 chtekk 1.39 elog "You might want to run:"
751     elog "\"emerge --config =${CATEGORY}/${PF}\""
752     elog "if this is a new install."
753 vivo 1.1 einfo
754 vivo 1.21 mysql_version_is_at_least "5.01.00.00" \
755 chtekk 1.39 || elog "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
756 vivo 1.4 fi
757 chtekk 1.41 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 vivo 1.1 }
761    
762     mysql_pkg_config() {
763 chtekk 1.30 # Make sure the vars are correctly initialized
764 vivo 1.1 mysql_init_vars
765    
766 chtekk 1.30 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
767    
768     if built_with_use dev-db/mysql minimal ; then
769 vivo 1.1 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 chtekk 1.30 einfo "permissions on it ..."
785 vivo 1.1
786     einfo "Insert a password for the mysql 'root' user"
787     ewarn "Avoid [\"'\\_%] characters in the password"
788 chtekk 1.30 read -rsp " >" pwd1 ; echo
789 vivo 1.1
790 chtekk 1.30 einfo "Retype the password"
791 vivo 1.1 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 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
801 vivo 1.1 [[ -r "${help_tables}" ]] \
802 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
803 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
804     help_tables="${TMPDIR}/fill_help_tables.sql"
805    
806 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
807 chtekk 1.30 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
808 vivo 1.4 popd &>/dev/null
809 chtekk 1.30 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
810 vivo 1.26 || die "MySQL databases not installed"
811 chtekk 1.30 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
812     chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
813 vivo 1.1
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 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
820 vivo 1.1
821     if [[ -r "${help_tables}" ]] ; then
822     cat "${help_tables}" >> "${sqltmp}"
823     fi
824     fi
825    
826 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
827     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
828 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
829 vivo 1.1 ${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 chtekk 1.30 ${mysqld} &
842 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
843 chtekk 1.30 maxtry=$((${maxtry}-1))
844 vivo 1.1 echo -n "."
845     sleep 1
846     done
847    
848 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
849 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
850 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
851 vivo 1.1 --socket=${socket} \
852     -hlocalhost \
853     -e "${sql}"
854    
855 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
856 vivo 1.1
857 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
858 vivo 1.1 --socket=${socket} \
859     -hlocalhost \
860     -uroot \
861     -p"${pwd1}" \
862     mysql < "${sqltmp}"
863    
864 chtekk 1.30 # Stop the server and cleanup
865 vivo 1.1 kill $(< "${pidfile}" )
866 chtekk 1.30 rm -f "${sqltmp}"
867     einfo "Stopping the server ..."
868 vivo 1.1 wait %1
869 chtekk 1.30 einfo "Done"
870 vivo 1.1 }
871    
872     mysql_pkg_postrm() {
873     mysql_lib_symlinks
874 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20