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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.124 - (hide annotations) (download)
Sun Jan 31 03:05:54 2010 UTC (4 years, 5 months ago) by robbat2
Branch: MAIN
Changes since 1.123: +3 -2 lines
Add an extra backup location for the mysql-extras tarballs.

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

  ViewVC Help
Powered by ViewVC 1.1.20