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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.122 - (hide annotations) (download)
Wed Dec 9 19:17:49 2009 UTC (5 years ago) by robbat2
Branch: MAIN
Changes since 1.121: +26 -4 lines
Unpack/compile support for xtradb.

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

  ViewVC Help
Powered by ViewVC 1.1.20