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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.136 - (hide annotations) (download)
Tue Mar 9 20:37:34 2010 UTC (4 years, 5 months ago) by robbat2
Branch: MAIN
Changes since 1.135: +12 -8 lines
Bug 307641: more fixes to SSL configure options. Also add community/profiling features to 5.1 properly and clean up a dead SSL configure codepath in configure_40_41_50.

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

  ViewVC Help
Powered by ViewVC 1.1.20