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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.127 - (hide annotations) (download)
Mon Feb 1 01:07:08 2010 UTC (4 years, 8 months ago) by robbat2
Branch: MAIN
Changes since 1.126: +38 -7 lines
Fixup disabling tests for 5.1 and also gcc-version usage.

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.127 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.126 2010/01/31 05:47:21 robbat2 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.118 elif [ "${PV#5.4}" != "${PV}" ]; then
89     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 vivo 1.52 plugins="${plugins},archive,blackhole,example,federated,partition"
493 vivo 1.37
494 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
495     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
496 vivo 1.37 fi
497    
498 robbat2 1.107 # Upstream specifically requests that InnoDB always be built.
499     plugins="${plugins},innobase"
500 vivo 1.37
501     # like configuration=max-no-ndb
502 cardoe 1.67 if use cluster ; then
503 vivo 1.37 plugins="${plugins},ndbcluster"
504     myconf="${myconf} --with-ndb-binlog"
505     fi
506    
507 vivo 1.58 if mysql_version_is_at_least "5.2" ; then
508     plugins="${plugins},falcon"
509     fi
510    
511 vivo 1.37 myconf="${myconf} --with-plugins=${plugins}"
512     }
513    
514 robbat2 1.112 pbxt_src_configure() {
515 vivo 1.51 mysql_init_vars
516    
517     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
518    
519     einfo "Reconfiguring dir '${PWD}'"
520     AT_GNUCONF_UPDATE="yes" eautoreconf
521    
522 chtekk 1.69 local myconf=""
523     myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}"
524 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
525 chtekk 1.69 # TODO: is it safe/needed to use econf here ?
526     ./configure ${myconf} || die "Problem configuring PBXT storage engine"
527 robbat2 1.112 }
528    
529     pbxt_src_compile() {
530     # Be backwards compatible for now
531     if [[ $EAPI != 2 ]]; then
532     pbxt_src_configure
533     fi
534 chtekk 1.69 # TODO: is it safe/needed to use emake here ?
535     make || die "Problem making PBXT storage engine (${myconf})"
536 vivo 1.51
537     popd
538 chtekk 1.69 # TODO: modify test suite for PBXT
539 vivo 1.51 }
540    
541     pbxt_src_install() {
542     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
543 chtekk 1.69 make install || die "Failed to install PBXT"
544 vivo 1.51 popd
545     }
546    
547 vivo 1.37 #
548     # EBUILD FUNCTIONS
549     #
550 robbat2 1.119 # @FUNCTION: mysql_pkg_setup
551     # @DESCRIPTION:
552     # Perform some basic tests and tasks during pkg_setup phase:
553     # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
554     # check for conflicting use flags
555     # create new user and group for mysql
556     # warn about deprecated features
557 vivo 1.1 mysql_pkg_setup() {
558 robbat2 1.83 if hasq test ${FEATURES} ; then
559     if ! use minimal ; then
560 robbat2 1.91 if [[ $UID -eq 0 ]]; then
561 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
562 robbat2 1.83 fi
563     fi
564     fi
565 swegener 1.53
566 chtekk 1.30 # Check for USE flag problems in pkg_setup
567 cardoe 1.67 if use static && use ssl ; then
568 chtekk 1.30 eerror "MySQL does not support being built statically with SSL support enabled!"
569     die "MySQL does not support being built statically with SSL support enabled!"
570     fi
571 vivo 1.1
572 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
573 cardoe 1.67 && use raid \
574     && use static ; then
575 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
576     eerror "with RAID support enabled."
577     die "USE flags 'raid' and 'static' conflict!"
578 vivo 1.1 fi
579    
580 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
581 cardoe 1.67 && ( use cluster || use extraengine ) \
582     && use minimal ; then
583 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
584     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
585 vivo 1.1 fi
586 maekke 1.103
587 robbat2 1.125 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
588     if mysql_version_is_at_least "5.0.83" ; then
589 robbat2 1.127 GCC_VER=$(gcc-version)
590 robbat2 1.125 case ${GCC_VER} in
591     2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;;
592     esac
593     fi
594    
595 robbat2 1.83 # This should come after all of the die statements
596     enewgroup mysql 60 || die "problem adding 'mysql' group"
597     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
598 chtekk 1.39
599 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
600 cardoe 1.67 && use berkdb \
601 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
602 chtekk 1.30 }
603    
604 robbat2 1.119 # @FUNCTION: mysql_src_unpack
605     # @DESCRIPTION:
606     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
607 chtekk 1.30 mysql_src_unpack() {
608     # Initialize the proper variables first
609     mysql_init_vars
610 vivo 1.1
611 chtekk 1.30 unpack ${A}
612 robbat2 1.86 # Grab the patches
613     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
614 maekke 1.116
615 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
616 robbat2 1.112
617     # Be backwards compatible for now
618 robbat2 1.119 case ${EAPI:-0} in
619     2) : ;;
620     0 | 1) mysql_src_prepare ;;
621     esac
622 robbat2 1.112 }
623    
624 robbat2 1.119 # @FUNCTION: mysql_src_prepare
625     # @DESCRIPTION:
626     # Apply patches to the source code and remove unneeded bundled libs.
627 robbat2 1.112 mysql_src_prepare() {
628 robbat2 1.109 cd "${S}"
629 vivo 1.1
630 chtekk 1.30 # Apply the patches for this MySQL version
631 vivo 1.55 EPATCH_SUFFIX="patch"
632 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
633 robbat2 1.86 # Clean out old items
634     rm -f "${EPATCH_SOURCE}"/*
635     # Now link in right patches
636 vivo 1.55 mysql_mv_patches
637 robbat2 1.86 # And apply
638 chtekk 1.69 epatch
639 vivo 1.1
640 chtekk 1.30 # Additional checks, remove bundled zlib
641 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
642     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
643 chtekk 1.30 rm -f "scripts/mysqlbug"
644 vivo 1.1
645     # Make charsets install in the right place
646 vivo 1.37 find . -name 'Makefile.am' \
647     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
648 vivo 1.1
649 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
650 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
651 robbat2 1.122 einfo "Cleaning up old buildscript files"
652 chtekk 1.30 find . -name Makefile \
653     -o -name Makefile.in \
654     -o -name configure \
655     -exec rm -f {} \;
656     rm -f "ltmain.sh"
657 vivo 1.37 rm -f "scripts/mysqlbug"
658 chtekk 1.30 fi
659 vivo 1.1
660 vivo 1.51 local rebuilddirlist d
661 vivo 1.1
662 robbat2 1.122 if mysql_version_is_at_least "5.1.26" && use xtradb ; then
663     einfo "Replacing InnoDB with Percona XtraDB"
664     pushd "${S}"/storage
665     i="innobase"
666     o="${WORKDIR}/storage-${i}.mysql-upstream"
667     # Have we been here already?
668     [ -h "${i}" ] && rm -f "${i}"
669     # Or maybe we haven't
670     [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
671     ln -s "${WORKDIR}/${XTRADB_P}" "${i}"
672     popd
673     fi
674    
675 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
676 robbat2 1.122 einfo "Updating innobase cmake"
677 chtekk 1.42 rebuilddirlist="."
678 swegener 1.74 # TODO: check this with a cmake expert
679 robbat2 1.107 cmake \
680 chtekk 1.72 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
681 robbat2 1.82 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
682 vivo 1.51 "storage/innobase"
683 vivo 1.1 else
684     rebuilddirlist=". innobase"
685     fi
686    
687 chtekk 1.30 for d in ${rebuilddirlist} ; do
688     einfo "Reconfiguring dir '${d}'"
689 vivo 1.4 pushd "${d}" &>/dev/null
690 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
691 vivo 1.4 popd &>/dev/null
692 vivo 1.1 done
693    
694 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
695 cardoe 1.67 && use berkdb ; then
696 robbat2 1.122 einfo "Fixing up berkdb buildsystem"
697 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
698 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
699     || die "Could not copy libtool.m4 to bdb/dist/"
700 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
701     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
702     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
703     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
704     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
705     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
706     fi
707 chtekk 1.71 pushd "bdb/dist" &>/dev/null
708     sh s_all \
709     || die "Failed bdb reconfigure"
710 vivo 1.4 popd &>/dev/null
711 vivo 1.1 fi
712     }
713    
714 robbat2 1.119 # @FUNCTION: mysql_src_configure
715     # @DESCRIPTION:
716     # Configure mysql to build the code for Gentoo respecting the use flags.
717 robbat2 1.112 mysql_src_configure() {
718 chtekk 1.30 # Make sure the vars are correctly initialized
719     mysql_init_vars
720 vivo 1.1
721 chtekk 1.42 # $myconf is modified by the configure_* functions
722     local myconf=""
723 vivo 1.1
724 cardoe 1.67 if use minimal ; then
725 chtekk 1.42 configure_minimal
726 vivo 1.1 else
727 chtekk 1.42 configure_common
728 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
729 chtekk 1.42 configure_51
730 vivo 1.1 else
731 chtekk 1.42 configure_40_41_50
732 vivo 1.1 fi
733 vivo 1.23 fi
734    
735 chtekk 1.30 # Bug #114895, bug #110149
736 vivo 1.1 filter-flags "-O" "-O[01]"
737 chtekk 1.30
738     # glib-2.3.2_pre fix, bug #16496
739 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
740    
741 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
742     # fail badly during cluster startup.
743     if [[ $(gcc-major-version) -lt 4 ]]; then
744     filter-flags "-fstack-protector-all"
745     fi
746    
747 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
748 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
749 vivo 1.51 mysql_version_is_at_least "5.0" \
750 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
751 chtekk 1.39 export CXXFLAGS
752 vivo 1.1
753 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
754     append-flags -fno-strict-aliasing
755    
756 vivo 1.1 econf \
757     --libexecdir="/usr/sbin" \
758     --sysconfdir="${MY_SYSCONFDIR}" \
759     --localstatedir="${MY_LOCALSTATEDIR}" \
760     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
761     --libdir="${MY_LIBDIR}" \
762     --includedir="${MY_INCLUDEDIR}" \
763     --with-low-memory \
764     --with-client-ldflags=-lstdc++ \
765     --enable-thread-safe-client \
766     --with-comment="Gentoo Linux ${PF}" \
767     --without-docs \
768 chtekk 1.39 ${myconf} || die "econf failed"
769 vivo 1.1
770 chtekk 1.30 # TODO: Move this before autoreconf !!!
771 vivo 1.21 find . -type f -name Makefile -print0 \
772     | xargs -0 -n100 sed -i \
773     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
774 vivo 1.1
775 robbat2 1.112 if [[ $EAPI == 2 ]]; then
776     mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_configure
777     fi
778     }
779    
780 robbat2 1.119 # @FUNCTION: mysql_src_compile
781     # @DESCRIPTION:
782     # Compile the mysql code.
783 robbat2 1.112 mysql_src_compile() {
784     # Be backwards compatible for now
785 robbat2 1.119 case ${EAPI:-0} in
786     2) : ;;
787     0 | 1) mysql_src_configure ;;
788     esac
789 robbat2 1.112
790 chtekk 1.39 emake || die "emake failed"
791 vivo 1.55
792 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
793 vivo 1.1 }
794    
795 robbat2 1.119 # @FUNCTION: mysql_src_install
796     # @DESCRIPTION:
797     # Install mysql.
798 vivo 1.1 mysql_src_install() {
799 chtekk 1.30 # Make sure the vars are correctly initialized
800     mysql_init_vars
801 vivo 1.1
802 chtekk 1.69 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
803 vivo 1.55
804 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
805 vivo 1.1
806 chtekk 1.30 # Convenience links
807 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
808 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
809     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
810     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
811 vivo 1.1
812 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
813 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
814 chtekk 1.30 rm -Rf "${D}/usr/share/info"
815 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
816     binary-configure* my-*.cnf mi_test_all*
817     do
818 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
819 vivo 1.1 done
820    
821 chtekk 1.69 # Clean up stuff for a minimal build
822 cardoe 1.67 if use minimal ; then
823 robbat2 1.105 einfo "Remove all extra content for minimal build"
824 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
825     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}
826 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
827 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
828 vivo 1.1 fi
829    
830 chtekk 1.30 # Configuration stuff
831 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
832 chtekk 1.30 mysql_mycnf_version="4.1"
833     else
834     mysql_mycnf_version="4.0"
835     fi
836 robbat2 1.105 einfo "Building default my.cnf"
837 vivo 1.1 insinto "${MY_SYSCONFDIR}"
838 vivo 1.55 doins scripts/mysqlaccess.conf
839 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
840 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
841 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
842 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
843 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
844     fi
845 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
846    
847 chtekk 1.30 # Minimal builds don't have the MySQL server
848 cardoe 1.67 if ! use minimal ; then
849 robbat2 1.105 einfo "Creating initial directories"
850 chtekk 1.30 # Empty directories ...
851 vivo 1.1 diropts "-m0750"
852     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
853 robbat2 1.75 dodir "${MY_DATADIR}"
854     keepdir "${MY_DATADIR}"
855     chown -R mysql:mysql "${D}/${MY_DATADIR}"
856 vivo 1.1 fi
857    
858     diropts "-m0755"
859     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
860     dodir "${folder}"
861     keepdir "${folder}"
862     chown -R mysql:mysql "${D}/${folder}"
863     done
864     fi
865    
866 chtekk 1.30 # Docs
867 robbat2 1.105 einfo "Installing docs"
868 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
869 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
870 chtekk 1.30
871     # Minimal builds don't have the MySQL server
872 cardoe 1.67 if ! use minimal ; then
873 robbat2 1.105 einfo "Including support files and sample configurations"
874 vivo 1.1 docinto "support-files"
875     for script in \
876 robbat2 1.92 "${S}"/support-files/my-*.cnf \
877     "${S}"/support-files/magic \
878     "${S}"/support-files/ndb-config-2-node.ini
879 vivo 1.1 do
880     dodoc "${script}"
881     done
882    
883     docinto "scripts"
884 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
885 vivo 1.4 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
886 vivo 1.1 done
887 robbat2 1.78
888 vivo 1.1 fi
889 vivo 1.4
890 vivo 1.58 mysql_lib_symlinks "${D}"
891 vivo 1.15 }
892    
893 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
894     # @DESCRIPTION:
895     # Create the user and groups for mysql - die if that fails.
896 vivo 1.15 mysql_pkg_preinst() {
897 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
898     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
899 vivo 1.1 }
900    
901 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
902     # @DESCRIPTION:
903     # Run post-installation tasks:
904     # create the dir for logfiles if non-existant
905     # touch the logfiles and secure them
906     # install scripts
907     # issue required steps for optional features
908     # issue deprecation warnings
909 vivo 1.1 mysql_pkg_postinst() {
910 chtekk 1.30 # Make sure the vars are correctly initialized
911 vivo 1.1 mysql_init_vars
912    
913 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
914 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
915 vivo 1.1
916 chtekk 1.30 # Secure the logfiles
917 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
918     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
919     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
920    
921 vivo 1.55 # Minimal builds don't have the MySQL server
922 cardoe 1.67 if ! use minimal ; then
923 vivo 1.55 docinto "support-files"
924     for script in \
925     support-files/my-*.cnf \
926     support-files/magic \
927     support-files/ndb-config-2-node.ini
928     do
929     dodoc "${script}"
930     done
931    
932     docinto "scripts"
933     for script in scripts/mysql* ; do
934     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
935     done
936 chtekk 1.69
937     einfo
938     elog "You might want to run:"
939     elog "\"emerge --config =${CATEGORY}/${PF}\""
940     elog "if this is a new install."
941     einfo
942 vivo 1.55 fi
943    
944 cardoe 1.67 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
945 chtekk 1.69 # TODO: explain it better
946     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
947     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
948     elog "if, after that, you cannot start the MySQL server,"
949 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
950 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
951     elog "or execute the following SQL command:"
952     elog " CREATE TABLE IF NOT EXISTS plugin ("
953     elog " name char(64) binary DEFAULT '' NOT NULL,"
954     elog " dl char(128) DEFAULT '' NOT NULL,"
955     elog " PRIMARY KEY (name)"
956     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
957 vivo 1.4 fi
958 chtekk 1.69
959 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
960 cardoe 1.67 && use berkdb \
961 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
962 vivo 1.1 }
963    
964 robbat2 1.119 # @FUNCTION: mysql_pkg_config
965     # @DESCRIPTION:
966     # Configure mysql environment.
967 vivo 1.1 mysql_pkg_config() {
968 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
969    
970 chtekk 1.30 # Make sure the vars are correctly initialized
971 vivo 1.1 mysql_init_vars
972    
973 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
974 chtekk 1.30
975 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
976 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
977     fi
978    
979 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
980     local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
981     local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
982    
983     if [[ -d "${old_MY_DATADIR_s}" ]]; then
984     if [[ -d "${MY_DATADIR_s}" ]]; then
985     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
986     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
987     else
988     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
989     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
990     || die "Moving MY_DATADIR failed"
991     fi
992     else
993     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
994     if [[ -d "${MY_DATADIR_s}" ]]; then
995     ewarn "Attempting to use ${MY_DATADIR_s}"
996     else
997     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
998     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
999 maekke 1.116 fi
1000 robbat2 1.111 fi
1001     fi
1002    
1003 vivo 1.1 local pwd1="a"
1004     local pwd2="b"
1005     local maxtry=5
1006    
1007 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1008 vivo 1.1 ewarn "You have already a MySQL database in place."
1009 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1010 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
1011     die "MySQL database already exists!"
1012     fi
1013    
1014 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1015     # localhost. Also causes weird failures.
1016     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1017    
1018 vivo 1.1 einfo "Creating the mysql database and setting proper"
1019 chtekk 1.30 einfo "permissions on it ..."
1020 vivo 1.1
1021     einfo "Insert a password for the mysql 'root' user"
1022     ewarn "Avoid [\"'\\_%] characters in the password"
1023 chtekk 1.30 read -rsp " >" pwd1 ; echo
1024 vivo 1.1
1025 chtekk 1.30 einfo "Retype the password"
1026 vivo 1.1 read -rsp " >" pwd2 ; echo
1027    
1028     if [[ "x$pwd1" != "x$pwd2" ]] ; then
1029     die "Passwords are not the same"
1030     fi
1031    
1032     local options=""
1033     local sqltmp="$(emktemp)"
1034    
1035 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1036 vivo 1.1 [[ -r "${help_tables}" ]] \
1037 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1038 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1039     help_tables="${TMPDIR}/fill_help_tables.sql"
1040    
1041 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1042 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1043     if [ $? -ne 0 ]; then
1044     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1045     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1046     fi
1047 vivo 1.4 popd &>/dev/null
1048 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1049 vivo 1.26 || die "MySQL databases not installed"
1050 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1051     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1052 vivo 1.1
1053 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1054 vivo 1.1 options="--skip-ndbcluster"
1055    
1056     # Filling timezones, see
1057     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1058 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1059 vivo 1.1
1060     if [[ -r "${help_tables}" ]] ; then
1061     cat "${help_tables}" >> "${sqltmp}"
1062     fi
1063     fi
1064    
1065 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1066     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1067 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
1068 vivo 1.1 ${options} \
1069     --user=mysql \
1070     --skip-grant-tables \
1071     --basedir=${ROOT}/usr \
1072 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1073 vivo 1.1 --skip-innodb \
1074     --skip-bdb \
1075     --skip-networking \
1076     --max_allowed_packet=8M \
1077     --net_buffer_length=16K \
1078     --socket=${socket} \
1079     --pid-file=${pidfile}"
1080 chtekk 1.30 ${mysqld} &
1081 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1082 chtekk 1.30 maxtry=$((${maxtry}-1))
1083 vivo 1.1 echo -n "."
1084     sleep 1
1085     done
1086    
1087 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1088 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
1089 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1090 vivo 1.1 --socket=${socket} \
1091     -hlocalhost \
1092     -e "${sql}"
1093    
1094 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
1095 vivo 1.1
1096 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1097 vivo 1.1 --socket=${socket} \
1098     -hlocalhost \
1099     -uroot \
1100     -p"${pwd1}" \
1101     mysql < "${sqltmp}"
1102    
1103 chtekk 1.30 # Stop the server and cleanup
1104 vivo 1.1 kill $(< "${pidfile}" )
1105 chtekk 1.30 rm -f "${sqltmp}"
1106     einfo "Stopping the server ..."
1107 vivo 1.1 wait %1
1108 chtekk 1.30 einfo "Done"
1109 vivo 1.1 }
1110    
1111 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1112     # @DESCRIPTION:
1113     # Remove mysql symlinks.
1114 vivo 1.1 mysql_pkg_postrm() {
1115 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1116 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20