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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.129 - (hide annotations) (download)
Tue Feb 2 02:46:52 2010 UTC (4 years, 8 months ago) by robbat2
Branch: MAIN
Changes since 1.128: +5 -3 lines
Update the 5.1 plugins list for innodb_plugin, and do not build the example engines.

1 robbat2 1.119 # Copyright 1999-2009 Gentoo Foundation
2 vivo 1.1 # Distributed under the terms of the GNU General Public License v2
3 robbat2 1.129 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.128 2010/02/01 19:16:06 hanno Exp $
4 vivo 1.1
5 robbat2 1.119 # @ECLASS: mysql.eclass
6     # @MAINTAINER:
7 vivo 1.54 # Author: Francesco Riosa (Retired) <vivo@gentoo.org>
8 robbat2 1.119 # Maintainers: MySQL Team <mysql-bugs@gentoo.org>
9 robbat2 1.86 # - Luca Longinotti <chtekk@gentoo.org>
10     # - Robin H. Johnson <robbat2@gentoo.org>
11 robbat2 1.119 # @BLURB: This eclass provides most of the functions for mysql ebuilds
12     # @DESCRIPTION:
13     # The mysql.eclass provides almost all the code to build the mysql ebuilds
14     # including the src_unpack, src_prepare, src_configure, src_compile,
15     # scr_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
16     # phase hooks.
17 chtekk 1.30
18 vivo 1.59 WANT_AUTOCONF="latest"
19     WANT_AUTOMAKE="latest"
20 chtekk 1.69
21 robbat2 1.127 inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator toolchain-funcs
22 robbat2 1.114
23 robbat2 1.126 # Shorten the path because the socket path length must be shorter than 107 chars
24     # and we will run a mysql server during test phase
25     S="${WORKDIR}/mysql"
26    
27     [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
28     if [[ "${MY_EXTRAS_VER}" == "live" ]]; then
29     EGIT_PROJECT=mysql-extras
30     EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
31     inherit git
32     fi
33    
34 robbat2 1.113 case "${EAPI:-0}" in
35     2)
36     EXPORT_FUNCTIONS pkg_setup \
37     src_unpack src_prepare \
38     src_configure src_compile \
39     src_install \
40     pkg_preinst pkg_postinst \
41     pkg_config pkg_postrm
42     IUSE_DEFAULT_ON='+'
43     ;;
44 robbat2 1.119 0 | 1)
45 robbat2 1.113 EXPORT_FUNCTIONS pkg_setup \
46     src_unpack \
47     src_compile \
48     src_install \
49     pkg_preinst pkg_postinst \
50     pkg_config pkg_postrm
51     ;;
52 robbat2 1.119 *)
53     die "Unsupported EAPI: ${EAPI}" ;;
54 robbat2 1.113 esac
55    
56 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
57     # @DESCRIPTION:
58 vivo 1.60 # MYSQL_VERSION_ID will be:
59     # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
60     # This is an important part, because many of the choices the MySQL ebuild will do
61     # depend on this variable.
62     # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
63 robbat2 1.88 # We also strip off upstream's trailing letter that they use to respin tarballs
64 chtekk 1.69
65 vivo 1.60 MYSQL_VERSION_ID=""
66 robbat2 1.88 tpv="${PV%[a-z]}"
67     tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
68 vivo 1.60 for vatom in 0 1 2 3 ; do
69     # pad to length 2
70     tpv[${vatom}]="00${tpv[${vatom}]}"
71     MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
72     done
73     # strip leading "0" (otherwise it's considered an octal number by BASH)
74     MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
75    
76 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_COMMUNITY_FEATURES
77     # @DESCRIPTION:
78     # Specifiy if community features are available. Possible values are 1 (yes)
79     # and 0 (no).
80 robbat2 1.110 # Community features are available in mysql-community
81     # AND in the re-merged mysql-5.0.82 and newer
82     if [ "${PN}" == "mysql-community" ]; then
83     MYSQL_COMMUNITY_FEATURES=1
84     elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
85     MYSQL_COMMUNITY_FEATURES=1
86 robbat2 1.117 elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
87     MYSQL_COMMUNITY_FEATURES=1
88 hanno 1.128 elif [ "${PV#5.4}" != "${PV}" ] || [ "${PV#5.4}" != "${PV}" ]; then
89 hanno 1.118 MYSQL_COMMUNITY_FEATURES=1
90 robbat2 1.110 else
91     MYSQL_COMMUNITY_FEATURES=0
92     fi
93    
94 robbat2 1.120 # @ECLASS-VARIABLE: XTRADB_VER
95     # @DESCRIPTION:
96     # Version of the XTRADB storage engine
97     XTRADB_VER="${XTRADB_VER}"
98    
99     # @ECLASS-VARIABLE: PERCONA_VER
100     # @DESCRIPTION:
101     # Designation by PERCONA for a MySQL version to apply an XTRADB release
102     PERCONA_VER="${PERCONA_VER}"
103    
104 vivo 1.60 # Be warned, *DEPEND are version-dependant
105 robbat2 1.90 # These are used for both runtime and compiletime
106 vivo 1.60 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
107     userland_GNU? ( sys-process/procps )
108     >=sys-apps/sed-4
109     >=sys-apps/texinfo-4.7-r1
110     >=sys-libs/readline-4.1
111 chtekk 1.69 >=sys-libs/zlib-1.2.3"
112 vivo 1.60
113 chtekk 1.69 # Having different flavours at the same time is not a good idea
114     for i in "" "-community" ; do
115 vivo 1.60 [[ "${i}" == ${PN#mysql} ]] ||
116     DEPEND="${DEPEND} !dev-db/mysql${i}"
117     done
118    
119 robbat2 1.90 RDEPEND="${DEPEND}
120     !minimal? ( dev-db/mysql-init-scripts )
121     selinux? ( sec-policy/selinux-mysql )"
122    
123     # compile-time-only
124 vivo 1.60 mysql_version_is_at_least "5.1" \
125     || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
126    
127 robbat2 1.90 # compile-time-only
128 chtekk 1.69 mysql_version_is_at_least "5.1.12" \
129 robbat2 1.107 && DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
130 chtekk 1.69
131 vivo 1.60 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
132     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
133    
134 robbat2 1.104 # For other stuff to bring us in
135     PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
136    
137 robbat2 1.81 # Work out the default SERVER_URI correctly
138     if [ -z "${SERVER_URI}" ]; then
139     # The community build is on the mirrors
140 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
141 robbat2 1.81 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz"
142 robbat2 1.110 # The (old) enterprise source is on the primary site only
143 robbat2 1.81 elif [ "${PN}" == "mysql" ]; then
144     SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz"
145     fi
146     fi
147    
148 vivo 1.60 # Define correct SRC_URIs
149 robbat2 1.86 SRC_URI="${SERVER_URI}"
150    
151 robbat2 1.122 # Gentoo patches to MySQL
152     [[ ${MY_EXTRAS_VER} != live ]] \
153     && SRC_URI="${SRC_URI}
154 robbat2 1.73 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
155 robbat2 1.124 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
156     http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
157 robbat2 1.122
158     # PBXT engine
159 vivo 1.60 mysql_version_is_at_least "5.1.12" \
160     && [[ -n "${PBXT_VERSION}" ]] \
161 robbat2 1.122 && PBXT_P="pbxt-${PBXT_VERSION}" \
162     && PBXT_SRC_URI="mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
163 robbat2 1.123 && SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )"
164 robbat2 1.120
165     # Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
166     mysql_version_is_at_least "5.1.26" \
167 robbat2 1.121 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
168 robbat2 1.122 && XTRADB_P="percona-xtradb-${XTRADB_VER}" \
169     && XTRADB_SRC_URI="http://www.percona.com/${PN}/xtradb/${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
170 robbat2 1.120 && SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI} )"
171 vivo 1.60
172     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
173     HOMEPAGE="http://www.mysql.com/"
174     LICENSE="GPL-2"
175 chtekk 1.69 SLOT="0"
176 robbat2 1.113 IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static"
177 vivo 1.60
178     mysql_version_is_at_least "4.1" \
179     && IUSE="${IUSE} latin1"
180    
181     mysql_version_is_at_least "4.1.3" \
182     && IUSE="${IUSE} cluster extraengine"
183    
184     mysql_version_is_at_least "5.0" \
185     || IUSE="${IUSE} raid"
186    
187     mysql_version_is_at_least "5.0.18" \
188     && IUSE="${IUSE} max-idx-128"
189    
190     mysql_version_is_at_least "5.1" \
191     || IUSE="${IUSE} berkdb"
192    
193     mysql_version_is_at_least "5.1.12" \
194 robbat2 1.121 && [[ -n "${PBXT_VERSION}" ]] \
195 vivo 1.60 && IUSE="${IUSE} pbxt"
196    
197 robbat2 1.120 mysql_version_is_at_least "5.1.26" \
198 robbat2 1.121 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
199 robbat2 1.120 && IUSE="${IUSE} xtradb"
200    
201 robbat2 1.110 [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
202 robbat2 1.113 && IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
203 vivo 1.1
204 vivo 1.37 #
205     # HELPER FUNCTIONS:
206     #
207    
208 robbat2 1.119 # @FUNCTION: mysql_disable_test
209     # @DESCRIPTION:
210     # Helper function to disable specific tests.
211 vivo 1.51 mysql_disable_test() {
212 robbat2 1.127 local rawtestname testname testsuite reason mysql_disable_file
213     rawtestname="${1}" ; shift
214     reason="${@}"
215     ewarn "test '${rawtestname}' disabled: '${reason}'"
216    
217     testsuite="${rawtestname/.*}"
218     testname="${rawtestname/*.}"
219     mysql_disable_file="${S}/mysql-test/t/disabled.def"
220     einfo "rawtestname=${rawtestname} testname=${testname} testsuite=${testsuite}"
221 vivo 1.51 echo ${testname} : ${reason} >> "${mysql_disable_file}"
222 robbat2 1.127
223     # ${S}/mysql-tests/t/disabled.def
224     #
225     # ${S}/mysql-tests/suite/federated/disabled.def
226     #
227     # ${S}/mysql-tests/suite/jp/t/disabled.def
228     # ${S}/mysql-tests/suite/ndb/t/disabled.def
229     # ${S}/mysql-tests/suite/rpl/t/disabled.def
230     # ${S}/mysql-tests/suite/parts/t/disabled.def
231     # ${S}/mysql-tests/suite/rpl_ndb/t/disabled.def
232     # ${S}/mysql-tests/suite/ndb_team/t/disabled.def
233     # ${S}/mysql-tests/suite/binlog/t/disabled.def
234     # ${S}/mysql-tests/suite/innodb/t/disabled.def
235     if [ -n "${testsuite}" ]; then
236     for mysql_disable_file in \
237     ${S}/mysql-test/suite/${testsuite}/disabled.def \
238     ${S}/mysql-test/suite/${testsuite}/t/disabled.def \
239     FAILED ; do
240     [ -f "${mysql_disable_file}" ] && break
241     done
242     if [ "${mysql_disabled_file}" != "FAILED" ]; then
243     echo "${testname} : ${reason}" >> "${mysql_disable_file}"
244     else
245     ewarn "Could not find testsuite disabled.def location for ${rawtestname}"
246     fi
247     fi
248 vivo 1.51 }
249    
250 robbat2 1.119 # @FUNCTION: mysql_init_vars
251     # @DESCRIPTION:
252 vivo 1.8 # void mysql_init_vars()
253 chtekk 1.30 # Initialize global variables
254     # 2005-11-19 <vivo@gentoo.org>
255 vivo 1.8 mysql_init_vars() {
256 chtekk 1.69 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
257     MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
258     MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
259     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
260     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
261     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
262 vivo 1.8
263 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
264     MY_DATADIR=""
265 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
266 robbat2 1.75 MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
267 vivo 1.26 | sed -ne '/datadir/s|^--datadir=||p' \
268     | tail -n1`
269 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
270     MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
271 robbat2 1.89 | sed -e 's/.*=\s*//' \
272     | tail -n1`
273 vivo 1.8 fi
274     fi
275 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
276     MY_DATADIR="${MY_LOCALSTATEDIR}"
277     einfo "Using default MY_DATADIR"
278 vivo 1.8 fi
279 robbat2 1.75 elog "MySQL MY_DATADIR is ${MY_DATADIR}"
280 vivo 1.8
281 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
282 robbat2 1.75 if [[ -e "${MY_DATADIR}" ]] ; then
283 robbat2 1.95 # If you get this and you're wondering about it, see bug #207636
284     elog "MySQL datadir found in ${MY_DATADIR}"
285     elog "A new one will not be created."
286 vivo 1.8 PREVIOUS_DATADIR="yes"
287     else
288     PREVIOUS_DATADIR="no"
289     fi
290 chtekk 1.30 export PREVIOUS_DATADIR
291 vivo 1.8 fi
292 robbat2 1.111 else
293     if [[ ${EBUILD_PHASE} == "config" ]]; then
294     local new_MY_DATADIR
295     new_MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
296     | sed -ne '/datadir/s|^--datadir=||p' \
297     | tail -n1`
298    
299     if [[ ( -n "${new_MY_DATADIR}" ) && ( "${new_MY_DATADIR}" != "${MY_DATADIR}" ) ]]; then
300     ewarn "MySQL MY_DATADIR has changed"
301     ewarn "from ${MY_DATADIR}"
302     ewarn "to ${new_MY_DATADIR}"
303     MY_DATADIR="${new_MY_DATADIR}"
304     fi
305     fi
306 vivo 1.8 fi
307    
308 vivo 1.55 MY_SOURCEDIR=${SERVER_URI##*/}
309     MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
310    
311 chtekk 1.69 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
312 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
313 robbat2 1.75 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
314 vivo 1.8 }
315    
316 vivo 1.37 configure_minimal() {
317 vivo 1.46 # These are things we exclude from a minimal build, please
318     # note that the server actually does get built and installed,
319     # but we then delete it before packaging.
320 robbat2 1.84 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication readline"
321 vivo 1.37
322 vivo 1.46 for i in ${minimal_exclude_list} ; do
323     myconf="${myconf} --without-${i}"
324     done
325     myconf="${myconf} --with-extra-charsets=none"
326     myconf="${myconf} --enable-local-infile"
327 vivo 1.47
328 cardoe 1.67 if use static ; then
329 vivo 1.47 myconf="${myconf} --with-client-ldflags=-all-static"
330 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
331 vivo 1.47 else
332     myconf="${myconf} --enable-shared --enable-static"
333     fi
334 chtekk 1.50
335 chtekk 1.69 if mysql_version_is_at_least "4.1" && ! use latin1 ; then
336 chtekk 1.50 myconf="${myconf} --with-charset=utf8"
337     myconf="${myconf} --with-collation=utf8_general_ci"
338     else
339     myconf="${myconf} --with-charset=latin1"
340     myconf="${myconf} --with-collation=latin1_swedish_ci"
341     fi
342 vivo 1.37 }
343    
344     configure_common() {
345 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
346 vivo 1.37 myconf="${myconf} --enable-local-infile"
347     myconf="${myconf} --with-extra-charsets=all"
348     myconf="${myconf} --with-mysqld-user=mysql"
349 chtekk 1.39 myconf="${myconf} --with-server"
350 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
351 vivo 1.37 myconf="${myconf} --without-libwrap"
352 chtekk 1.39
353 cardoe 1.67 if use static ; then
354 vivo 1.37 myconf="${myconf} --with-mysqld-ldflags=-all-static"
355     myconf="${myconf} --with-client-ldflags=-all-static"
356 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
357 vivo 1.37 else
358     myconf="${myconf} --enable-shared --enable-static"
359     fi
360    
361 cardoe 1.67 if use debug ; then
362 vivo 1.37 myconf="${myconf} --with-debug=full"
363     else
364     myconf="${myconf} --without-debug"
365 vivo 1.51 mysql_version_is_at_least "4.1.3" \
366 cardoe 1.67 && use cluster \
367 vivo 1.37 && myconf="${myconf} --without-ndb-debug"
368     fi
369 chtekk 1.39
370 robbat2 1.100 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
371     ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
372     ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
373     ewarn "You MUST file bugs without these variables set."
374     myconf="${myconf} --with-charset=${MYSQL_DEFAULT_CHARSET}"
375     myconf="${myconf} --with-collation=${MYSQL_DEFAULT_COLLATION}"
376     elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
377     myconf="${myconf} --with-charset=utf8"
378     myconf="${myconf} --with-collation=utf8_general_ci"
379     else
380     myconf="${myconf} --with-charset=latin1"
381     myconf="${myconf} --with-collation=latin1_swedish_ci"
382 vivo 1.37 fi
383 chtekk 1.39
384 cardoe 1.67 if use embedded ; then
385 vivo 1.37 myconf="${myconf} --with-embedded-privilege-control"
386     myconf="${myconf} --with-embedded-server"
387     else
388     myconf="${myconf} --without-embedded-privilege-control"
389     myconf="${myconf} --without-embedded-server"
390     fi
391    
392     }
393    
394     configure_40_41_50() {
395     myconf="${myconf} $(use_with perl bench)"
396     myconf="${myconf} --enable-assembler"
397     myconf="${myconf} --with-extra-tools"
398     myconf="${myconf} --with-innodb"
399     myconf="${myconf} --without-readline"
400 vivo 1.51 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
401 vivo 1.37
402 chtekk 1.69 # --with-vio is not needed anymore, it's on by default and
403     # has been removed from configure
404 cardoe 1.67 if use ssl ; then
405 chtekk 1.69 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
406 vivo 1.62 fi
407    
408     if mysql_version_is_at_least "5.1.11" ; then
409     myconf="${myconf} $(use_with ssl)"
410 vivo 1.37 else
411 vivo 1.62 myconf="${myconf} $(use_with ssl openssl)"
412 vivo 1.37 fi
413 maekke 1.103
414 robbat2 1.98 if mysql_version_is_at_least "5.0.60" ; then
415     if use berkdb ; then
416     elog "Berkeley DB support was disabled due to build failures"
417     elog "on multiple arches, go to a version earlier than 5.0.60"
418     elog "if you want it again. Gentoo bug #224067."
419     fi
420     myconf="${myconf} --without-berkeley-db"
421     elif use berkdb ; then
422 chtekk 1.77 # The following fix is due to a bug with bdb on SPARC's. See:
423     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
424     # It comes down to non-64-bit safety problems.
425 cardoe 1.76 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
426 chtekk 1.77 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
427 cardoe 1.76 myconf="${myconf} --without-berkeley-db"
428     else
429 chtekk 1.39 myconf="${myconf} --with-berkeley-db=./bdb"
430     fi
431 cardoe 1.76 else
432     myconf="${myconf} --without-berkeley-db"
433 vivo 1.37 fi
434    
435 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
436 vivo 1.37 myconf="${myconf} --with-geometry"
437     myconf="${myconf} $(use_with cluster ndbcluster)"
438     fi
439    
440 cardoe 1.67 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
441 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
442     myconf="${myconf} --with-archive-storage-engine"
443    
444     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
445     myconf="${myconf} --with-csv-storage-engine"
446    
447     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
448     myconf="${myconf} --with-blackhole-storage-engine"
449    
450     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
451     # http://dev.mysql.com/doc/mysql/en/federated-description.html
452     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
453 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
454 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
455     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
456 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
457     fi
458     fi
459    
460 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
461     myconf="${myconf} `use_enable community community-features`"
462     if use community; then
463     myconf="${myconf} `use_enable profiling`"
464     else
465     myconf="${myconf} --disable-profiling"
466     fi
467 robbat2 1.99 fi
468    
469 vivo 1.51 mysql_version_is_at_least "5.0.18" \
470 cardoe 1.67 && use max-idx-128 \
471 vivo 1.37 && myconf="${myconf} --with-max-indexes=128"
472     }
473    
474 chtekk 1.39 configure_51() {
475 chtekk 1.40 # TODO: !!!! readd --without-readline
476 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
477 vivo 1.37 # readline.h instead of history.h
478     myconf="${myconf} $(use_with ssl)"
479     myconf="${myconf} --enable-assembler"
480     myconf="${myconf} --with-geometry"
481     myconf="${myconf} --with-readline"
482     myconf="${myconf} --with-row-based-replication"
483     myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
484     myconf="${myconf} --without-pstack"
485 cardoe 1.67 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
486 chtekk 1.39
487 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
488     # like configuration=none
489     local plugins="csv,myisam,myisammrg,heap"
490 cardoe 1.67 if use extraengine ; then
491 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
492 robbat2 1.129 # not added yet: ibmdb2i
493     # Not supporting as examples: example,daemon_example,ftexample
494     plugins="${plugins},archive,blackhole,federated,partition"
495 vivo 1.37
496 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
497     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
498 vivo 1.37 fi
499    
500 robbat2 1.107 # Upstream specifically requests that InnoDB always be built.
501 robbat2 1.129 plugins="${plugins},innobase,innodb_plugin"
502 vivo 1.37
503     # like configuration=max-no-ndb
504 cardoe 1.67 if use cluster ; then
505 vivo 1.37 plugins="${plugins},ndbcluster"
506     myconf="${myconf} --with-ndb-binlog"
507     fi
508    
509 hanno 1.128 if [ -e "${S}/storage/falcon" ] ; then
510 vivo 1.58 plugins="${plugins},falcon"
511     fi
512    
513 vivo 1.37 myconf="${myconf} --with-plugins=${plugins}"
514     }
515    
516 robbat2 1.112 pbxt_src_configure() {
517 vivo 1.51 mysql_init_vars
518    
519     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
520    
521     einfo "Reconfiguring dir '${PWD}'"
522     AT_GNUCONF_UPDATE="yes" eautoreconf
523    
524 chtekk 1.69 local myconf=""
525     myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}"
526 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
527 chtekk 1.69 # TODO: is it safe/needed to use econf here ?
528     ./configure ${myconf} || die "Problem configuring PBXT storage engine"
529 robbat2 1.112 }
530    
531     pbxt_src_compile() {
532     # Be backwards compatible for now
533     if [[ $EAPI != 2 ]]; then
534     pbxt_src_configure
535     fi
536 chtekk 1.69 # TODO: is it safe/needed to use emake here ?
537     make || die "Problem making PBXT storage engine (${myconf})"
538 vivo 1.51
539     popd
540 chtekk 1.69 # TODO: modify test suite for PBXT
541 vivo 1.51 }
542    
543     pbxt_src_install() {
544     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
545 chtekk 1.69 make install || die "Failed to install PBXT"
546 vivo 1.51 popd
547     }
548    
549 vivo 1.37 #
550     # EBUILD FUNCTIONS
551     #
552 robbat2 1.119 # @FUNCTION: mysql_pkg_setup
553     # @DESCRIPTION:
554     # Perform some basic tests and tasks during pkg_setup phase:
555     # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
556     # check for conflicting use flags
557     # create new user and group for mysql
558     # warn about deprecated features
559 vivo 1.1 mysql_pkg_setup() {
560 robbat2 1.83 if hasq test ${FEATURES} ; then
561     if ! use minimal ; then
562 robbat2 1.91 if [[ $UID -eq 0 ]]; then
563 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
564 robbat2 1.83 fi
565     fi
566     fi
567 swegener 1.53
568 chtekk 1.30 # Check for USE flag problems in pkg_setup
569 cardoe 1.67 if use static && use ssl ; then
570 chtekk 1.30 eerror "MySQL does not support being built statically with SSL support enabled!"
571     die "MySQL does not support being built statically with SSL support enabled!"
572     fi
573 vivo 1.1
574 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
575 cardoe 1.67 && use raid \
576     && use static ; then
577 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
578     eerror "with RAID support enabled."
579     die "USE flags 'raid' and 'static' conflict!"
580 vivo 1.1 fi
581    
582 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
583 cardoe 1.67 && ( use cluster || use extraengine ) \
584     && use minimal ; then
585 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
586     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
587 vivo 1.1 fi
588 maekke 1.103
589 robbat2 1.125 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
590     if mysql_version_is_at_least "5.0.83" ; then
591 robbat2 1.127 GCC_VER=$(gcc-version)
592 robbat2 1.125 case ${GCC_VER} in
593     2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;;
594     esac
595     fi
596    
597 robbat2 1.83 # This should come after all of the die statements
598     enewgroup mysql 60 || die "problem adding 'mysql' group"
599     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
600 chtekk 1.39
601 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
602 cardoe 1.67 && use berkdb \
603 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
604 chtekk 1.30 }
605    
606 robbat2 1.119 # @FUNCTION: mysql_src_unpack
607     # @DESCRIPTION:
608     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
609 chtekk 1.30 mysql_src_unpack() {
610     # Initialize the proper variables first
611     mysql_init_vars
612 vivo 1.1
613 chtekk 1.30 unpack ${A}
614 robbat2 1.86 # Grab the patches
615     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
616 maekke 1.116
617 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
618 robbat2 1.112
619     # Be backwards compatible for now
620 robbat2 1.119 case ${EAPI:-0} in
621     2) : ;;
622     0 | 1) mysql_src_prepare ;;
623     esac
624 robbat2 1.112 }
625    
626 robbat2 1.119 # @FUNCTION: mysql_src_prepare
627     # @DESCRIPTION:
628     # Apply patches to the source code and remove unneeded bundled libs.
629 robbat2 1.112 mysql_src_prepare() {
630 robbat2 1.109 cd "${S}"
631 vivo 1.1
632 chtekk 1.30 # Apply the patches for this MySQL version
633 vivo 1.55 EPATCH_SUFFIX="patch"
634 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
635 robbat2 1.86 # Clean out old items
636     rm -f "${EPATCH_SOURCE}"/*
637     # Now link in right patches
638 vivo 1.55 mysql_mv_patches
639 robbat2 1.86 # And apply
640 chtekk 1.69 epatch
641 vivo 1.1
642 chtekk 1.30 # Additional checks, remove bundled zlib
643 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
644     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
645 chtekk 1.30 rm -f "scripts/mysqlbug"
646 vivo 1.1
647     # Make charsets install in the right place
648 vivo 1.37 find . -name 'Makefile.am' \
649     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
650 vivo 1.1
651 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
652 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
653 robbat2 1.122 einfo "Cleaning up old buildscript files"
654 chtekk 1.30 find . -name Makefile \
655     -o -name Makefile.in \
656     -o -name configure \
657     -exec rm -f {} \;
658     rm -f "ltmain.sh"
659 vivo 1.37 rm -f "scripts/mysqlbug"
660 chtekk 1.30 fi
661 vivo 1.1
662 vivo 1.51 local rebuilddirlist d
663 vivo 1.1
664 robbat2 1.122 if mysql_version_is_at_least "5.1.26" && use xtradb ; then
665     einfo "Replacing InnoDB with Percona XtraDB"
666     pushd "${S}"/storage
667     i="innobase"
668     o="${WORKDIR}/storage-${i}.mysql-upstream"
669     # Have we been here already?
670     [ -h "${i}" ] && rm -f "${i}"
671     # Or maybe we haven't
672     [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
673     ln -s "${WORKDIR}/${XTRADB_P}" "${i}"
674     popd
675     fi
676    
677 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
678 robbat2 1.122 einfo "Updating innobase cmake"
679 chtekk 1.42 rebuilddirlist="."
680 swegener 1.74 # TODO: check this with a cmake expert
681 robbat2 1.107 cmake \
682 chtekk 1.72 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
683 robbat2 1.82 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
684 vivo 1.51 "storage/innobase"
685 vivo 1.1 else
686     rebuilddirlist=". innobase"
687     fi
688    
689 chtekk 1.30 for d in ${rebuilddirlist} ; do
690     einfo "Reconfiguring dir '${d}'"
691 vivo 1.4 pushd "${d}" &>/dev/null
692 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
693 vivo 1.4 popd &>/dev/null
694 vivo 1.1 done
695    
696 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
697 cardoe 1.67 && use berkdb ; then
698 robbat2 1.122 einfo "Fixing up berkdb buildsystem"
699 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
700 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
701     || die "Could not copy libtool.m4 to bdb/dist/"
702 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
703     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
704     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
705     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
706     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
707     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
708     fi
709 chtekk 1.71 pushd "bdb/dist" &>/dev/null
710     sh s_all \
711     || die "Failed bdb reconfigure"
712 vivo 1.4 popd &>/dev/null
713 vivo 1.1 fi
714     }
715    
716 robbat2 1.119 # @FUNCTION: mysql_src_configure
717     # @DESCRIPTION:
718     # Configure mysql to build the code for Gentoo respecting the use flags.
719 robbat2 1.112 mysql_src_configure() {
720 chtekk 1.30 # Make sure the vars are correctly initialized
721     mysql_init_vars
722 vivo 1.1
723 chtekk 1.42 # $myconf is modified by the configure_* functions
724     local myconf=""
725 vivo 1.1
726 cardoe 1.67 if use minimal ; then
727 chtekk 1.42 configure_minimal
728 vivo 1.1 else
729 chtekk 1.42 configure_common
730 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
731 chtekk 1.42 configure_51
732 vivo 1.1 else
733 chtekk 1.42 configure_40_41_50
734 vivo 1.1 fi
735 vivo 1.23 fi
736    
737 chtekk 1.30 # Bug #114895, bug #110149
738 vivo 1.1 filter-flags "-O" "-O[01]"
739 chtekk 1.30
740     # glib-2.3.2_pre fix, bug #16496
741 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
742    
743 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
744     # fail badly during cluster startup.
745     if [[ $(gcc-major-version) -lt 4 ]]; then
746     filter-flags "-fstack-protector-all"
747     fi
748    
749 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
750 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
751 vivo 1.51 mysql_version_is_at_least "5.0" \
752 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
753 chtekk 1.39 export CXXFLAGS
754 vivo 1.1
755 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
756     append-flags -fno-strict-aliasing
757    
758 vivo 1.1 econf \
759     --libexecdir="/usr/sbin" \
760     --sysconfdir="${MY_SYSCONFDIR}" \
761     --localstatedir="${MY_LOCALSTATEDIR}" \
762     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
763     --libdir="${MY_LIBDIR}" \
764     --includedir="${MY_INCLUDEDIR}" \
765     --with-low-memory \
766     --with-client-ldflags=-lstdc++ \
767     --enable-thread-safe-client \
768     --with-comment="Gentoo Linux ${PF}" \
769     --without-docs \
770 chtekk 1.39 ${myconf} || die "econf failed"
771 vivo 1.1
772 chtekk 1.30 # TODO: Move this before autoreconf !!!
773 vivo 1.21 find . -type f -name Makefile -print0 \
774     | xargs -0 -n100 sed -i \
775     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
776 vivo 1.1
777 robbat2 1.112 if [[ $EAPI == 2 ]]; then
778     mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_configure
779     fi
780     }
781    
782 robbat2 1.119 # @FUNCTION: mysql_src_compile
783     # @DESCRIPTION:
784     # Compile the mysql code.
785 robbat2 1.112 mysql_src_compile() {
786     # Be backwards compatible for now
787 robbat2 1.119 case ${EAPI:-0} in
788     2) : ;;
789     0 | 1) mysql_src_configure ;;
790     esac
791 robbat2 1.112
792 chtekk 1.39 emake || die "emake failed"
793 vivo 1.55
794 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
795 vivo 1.1 }
796    
797 robbat2 1.119 # @FUNCTION: mysql_src_install
798     # @DESCRIPTION:
799     # Install mysql.
800 vivo 1.1 mysql_src_install() {
801 chtekk 1.30 # Make sure the vars are correctly initialized
802     mysql_init_vars
803 vivo 1.1
804 chtekk 1.69 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
805 vivo 1.55
806 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
807 vivo 1.1
808 chtekk 1.30 # Convenience links
809 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
810 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
811     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
812     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
813 vivo 1.1
814 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
815 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
816 chtekk 1.30 rm -Rf "${D}/usr/share/info"
817 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
818     binary-configure* my-*.cnf mi_test_all*
819     do
820 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
821 vivo 1.1 done
822    
823 chtekk 1.69 # Clean up stuff for a minimal build
824 cardoe 1.67 if use minimal ; then
825 robbat2 1.105 einfo "Remove all extra content for minimal build"
826 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
827     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}
828 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
829 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
830 vivo 1.1 fi
831    
832 chtekk 1.30 # Configuration stuff
833 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
834 chtekk 1.30 mysql_mycnf_version="4.1"
835     else
836     mysql_mycnf_version="4.0"
837     fi
838 robbat2 1.105 einfo "Building default my.cnf"
839 vivo 1.1 insinto "${MY_SYSCONFDIR}"
840 vivo 1.55 doins scripts/mysqlaccess.conf
841 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
842 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
843 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
844 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
845 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
846     fi
847 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
848    
849 chtekk 1.30 # Minimal builds don't have the MySQL server
850 cardoe 1.67 if ! use minimal ; then
851 robbat2 1.105 einfo "Creating initial directories"
852 chtekk 1.30 # Empty directories ...
853 vivo 1.1 diropts "-m0750"
854     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
855 robbat2 1.75 dodir "${MY_DATADIR}"
856     keepdir "${MY_DATADIR}"
857     chown -R mysql:mysql "${D}/${MY_DATADIR}"
858 vivo 1.1 fi
859    
860     diropts "-m0755"
861     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
862     dodir "${folder}"
863     keepdir "${folder}"
864     chown -R mysql:mysql "${D}/${folder}"
865     done
866     fi
867    
868 chtekk 1.30 # Docs
869 robbat2 1.105 einfo "Installing docs"
870 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
871 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
872 chtekk 1.30
873     # Minimal builds don't have the MySQL server
874 cardoe 1.67 if ! use minimal ; then
875 robbat2 1.105 einfo "Including support files and sample configurations"
876 vivo 1.1 docinto "support-files"
877     for script in \
878 robbat2 1.92 "${S}"/support-files/my-*.cnf \
879     "${S}"/support-files/magic \
880     "${S}"/support-files/ndb-config-2-node.ini
881 vivo 1.1 do
882     dodoc "${script}"
883     done
884    
885     docinto "scripts"
886 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
887 vivo 1.4 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
888 vivo 1.1 done
889 robbat2 1.78
890 vivo 1.1 fi
891 vivo 1.4
892 vivo 1.58 mysql_lib_symlinks "${D}"
893 vivo 1.15 }
894    
895 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
896     # @DESCRIPTION:
897     # Create the user and groups for mysql - die if that fails.
898 vivo 1.15 mysql_pkg_preinst() {
899 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
900     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
901 vivo 1.1 }
902    
903 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
904     # @DESCRIPTION:
905     # Run post-installation tasks:
906     # create the dir for logfiles if non-existant
907     # touch the logfiles and secure them
908     # install scripts
909     # issue required steps for optional features
910     # issue deprecation warnings
911 vivo 1.1 mysql_pkg_postinst() {
912 chtekk 1.30 # Make sure the vars are correctly initialized
913 vivo 1.1 mysql_init_vars
914    
915 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
916 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
917 vivo 1.1
918 chtekk 1.30 # Secure the logfiles
919 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
920     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
921     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
922    
923 vivo 1.55 # Minimal builds don't have the MySQL server
924 cardoe 1.67 if ! use minimal ; then
925 vivo 1.55 docinto "support-files"
926     for script in \
927     support-files/my-*.cnf \
928     support-files/magic \
929     support-files/ndb-config-2-node.ini
930     do
931     dodoc "${script}"
932     done
933    
934     docinto "scripts"
935     for script in scripts/mysql* ; do
936     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
937     done
938 chtekk 1.69
939     einfo
940     elog "You might want to run:"
941     elog "\"emerge --config =${CATEGORY}/${PF}\""
942     elog "if this is a new install."
943     einfo
944 vivo 1.55 fi
945    
946 cardoe 1.67 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
947 chtekk 1.69 # TODO: explain it better
948     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
949     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
950     elog "if, after that, you cannot start the MySQL server,"
951 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
952 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
953     elog "or execute the following SQL command:"
954     elog " CREATE TABLE IF NOT EXISTS plugin ("
955     elog " name char(64) binary DEFAULT '' NOT NULL,"
956     elog " dl char(128) DEFAULT '' NOT NULL,"
957     elog " PRIMARY KEY (name)"
958     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
959 vivo 1.4 fi
960 chtekk 1.69
961 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
962 cardoe 1.67 && use berkdb \
963 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
964 vivo 1.1 }
965    
966 robbat2 1.119 # @FUNCTION: mysql_pkg_config
967     # @DESCRIPTION:
968     # Configure mysql environment.
969 vivo 1.1 mysql_pkg_config() {
970 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
971    
972 chtekk 1.30 # Make sure the vars are correctly initialized
973 vivo 1.1 mysql_init_vars
974    
975 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
976 chtekk 1.30
977 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
978 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
979     fi
980    
981 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
982     local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
983     local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
984    
985     if [[ -d "${old_MY_DATADIR_s}" ]]; then
986     if [[ -d "${MY_DATADIR_s}" ]]; then
987     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
988     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
989     else
990     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
991     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
992     || die "Moving MY_DATADIR failed"
993     fi
994     else
995     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
996     if [[ -d "${MY_DATADIR_s}" ]]; then
997     ewarn "Attempting to use ${MY_DATADIR_s}"
998     else
999     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
1000     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
1001 maekke 1.116 fi
1002 robbat2 1.111 fi
1003     fi
1004    
1005 vivo 1.1 local pwd1="a"
1006     local pwd2="b"
1007     local maxtry=5
1008    
1009 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1010 vivo 1.1 ewarn "You have already a MySQL database in place."
1011 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1012 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
1013     die "MySQL database already exists!"
1014     fi
1015    
1016 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1017     # localhost. Also causes weird failures.
1018     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1019    
1020 vivo 1.1 einfo "Creating the mysql database and setting proper"
1021 chtekk 1.30 einfo "permissions on it ..."
1022 vivo 1.1
1023     einfo "Insert a password for the mysql 'root' user"
1024     ewarn "Avoid [\"'\\_%] characters in the password"
1025 chtekk 1.30 read -rsp " >" pwd1 ; echo
1026 vivo 1.1
1027 chtekk 1.30 einfo "Retype the password"
1028 vivo 1.1 read -rsp " >" pwd2 ; echo
1029    
1030     if [[ "x$pwd1" != "x$pwd2" ]] ; then
1031     die "Passwords are not the same"
1032     fi
1033    
1034     local options=""
1035     local sqltmp="$(emktemp)"
1036    
1037 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1038 vivo 1.1 [[ -r "${help_tables}" ]] \
1039 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1040 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1041     help_tables="${TMPDIR}/fill_help_tables.sql"
1042    
1043 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1044 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1045     if [ $? -ne 0 ]; then
1046     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1047     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1048     fi
1049 vivo 1.4 popd &>/dev/null
1050 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1051 vivo 1.26 || die "MySQL databases not installed"
1052 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1053     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1054 vivo 1.1
1055 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1056 vivo 1.1 options="--skip-ndbcluster"
1057    
1058     # Filling timezones, see
1059     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1060 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1061 vivo 1.1
1062     if [[ -r "${help_tables}" ]] ; then
1063     cat "${help_tables}" >> "${sqltmp}"
1064     fi
1065     fi
1066    
1067 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1068     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1069 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
1070 vivo 1.1 ${options} \
1071     --user=mysql \
1072     --skip-grant-tables \
1073     --basedir=${ROOT}/usr \
1074 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1075 vivo 1.1 --skip-innodb \
1076     --skip-bdb \
1077     --skip-networking \
1078     --max_allowed_packet=8M \
1079     --net_buffer_length=16K \
1080     --socket=${socket} \
1081     --pid-file=${pidfile}"
1082 chtekk 1.30 ${mysqld} &
1083 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1084 chtekk 1.30 maxtry=$((${maxtry}-1))
1085 vivo 1.1 echo -n "."
1086     sleep 1
1087     done
1088    
1089 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1090 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
1091 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1092 vivo 1.1 --socket=${socket} \
1093     -hlocalhost \
1094     -e "${sql}"
1095    
1096 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
1097 vivo 1.1
1098 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1099 vivo 1.1 --socket=${socket} \
1100     -hlocalhost \
1101     -uroot \
1102     -p"${pwd1}" \
1103     mysql < "${sqltmp}"
1104    
1105 chtekk 1.30 # Stop the server and cleanup
1106 vivo 1.1 kill $(< "${pidfile}" )
1107 chtekk 1.30 rm -f "${sqltmp}"
1108     einfo "Stopping the server ..."
1109 vivo 1.1 wait %1
1110 chtekk 1.30 einfo "Done"
1111 vivo 1.1 }
1112    
1113 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1114     # @DESCRIPTION:
1115     # Remove mysql symlinks.
1116 vivo 1.1 mysql_pkg_postrm() {
1117 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1118 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20