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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.132 - (hide annotations) (download)
Tue Feb 2 22:16:04 2010 UTC (4 years, 9 months ago) by robbat2
Branch: MAIN
Changes since 1.131: +9 -4 lines
Missed a commit to the eclass.

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

  ViewVC Help
Powered by ViewVC 1.1.20