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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.126 - (hide annotations) (download)
Sun Jan 31 05:47:21 2010 UTC (4 years, 7 months ago) by robbat2
Branch: MAIN
Changes since 1.125: +12 -12 lines
Fix QA warning: "EXPORT_FUNCTIONS is called before inherit in mysql.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.126 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.125 2010/01/31 05:00:43 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.126 # Shorten the path because the socket path length must be shorter than 107 chars
24     # and we will run a mysql server during test phase
25     S="${WORKDIR}/mysql"
26    
27     [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
28     if [[ "${MY_EXTRAS_VER}" == "live" ]]; then
29     EGIT_PROJECT=mysql-extras
30     EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
31     inherit git
32     fi
33    
34 robbat2 1.113 case "${EAPI:-0}" in
35     2)
36     EXPORT_FUNCTIONS pkg_setup \
37     src_unpack src_prepare \
38     src_configure src_compile \
39     src_install \
40     pkg_preinst pkg_postinst \
41     pkg_config pkg_postrm
42     IUSE_DEFAULT_ON='+'
43     ;;
44 robbat2 1.119 0 | 1)
45 robbat2 1.113 EXPORT_FUNCTIONS pkg_setup \
46     src_unpack \
47     src_compile \
48     src_install \
49     pkg_preinst pkg_postinst \
50     pkg_config pkg_postrm
51     ;;
52 robbat2 1.119 *)
53     die "Unsupported EAPI: ${EAPI}" ;;
54 robbat2 1.113 esac
55    
56 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
57     # @DESCRIPTION:
58 vivo 1.60 # MYSQL_VERSION_ID will be:
59     # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
60     # This is an important part, because many of the choices the MySQL ebuild will do
61     # depend on this variable.
62     # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
63 robbat2 1.88 # We also strip off upstream's trailing letter that they use to respin tarballs
64 chtekk 1.69
65 vivo 1.60 MYSQL_VERSION_ID=""
66 robbat2 1.88 tpv="${PV%[a-z]}"
67     tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
68 vivo 1.60 for vatom in 0 1 2 3 ; do
69     # pad to length 2
70     tpv[${vatom}]="00${tpv[${vatom}]}"
71     MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
72     done
73     # strip leading "0" (otherwise it's considered an octal number by BASH)
74     MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
75    
76 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_COMMUNITY_FEATURES
77     # @DESCRIPTION:
78     # Specifiy if community features are available. Possible values are 1 (yes)
79     # and 0 (no).
80 robbat2 1.110 # Community features are available in mysql-community
81     # AND in the re-merged mysql-5.0.82 and newer
82     if [ "${PN}" == "mysql-community" ]; then
83     MYSQL_COMMUNITY_FEATURES=1
84     elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
85     MYSQL_COMMUNITY_FEATURES=1
86 robbat2 1.117 elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
87     MYSQL_COMMUNITY_FEATURES=1
88 hanno 1.118 elif [ "${PV#5.4}" != "${PV}" ]; then
89     MYSQL_COMMUNITY_FEATURES=1
90 robbat2 1.110 else
91     MYSQL_COMMUNITY_FEATURES=0
92     fi
93    
94 robbat2 1.120 # @ECLASS-VARIABLE: XTRADB_VER
95     # @DESCRIPTION:
96     # Version of the XTRADB storage engine
97     XTRADB_VER="${XTRADB_VER}"
98    
99     # @ECLASS-VARIABLE: PERCONA_VER
100     # @DESCRIPTION:
101     # Designation by PERCONA for a MySQL version to apply an XTRADB release
102     PERCONA_VER="${PERCONA_VER}"
103    
104 vivo 1.60 # Be warned, *DEPEND are version-dependant
105 robbat2 1.90 # These are used for both runtime and compiletime
106 vivo 1.60 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
107     userland_GNU? ( sys-process/procps )
108     >=sys-apps/sed-4
109     >=sys-apps/texinfo-4.7-r1
110     >=sys-libs/readline-4.1
111 chtekk 1.69 >=sys-libs/zlib-1.2.3"
112 vivo 1.60
113 chtekk 1.69 # Having different flavours at the same time is not a good idea
114     for i in "" "-community" ; do
115 vivo 1.60 [[ "${i}" == ${PN#mysql} ]] ||
116     DEPEND="${DEPEND} !dev-db/mysql${i}"
117     done
118    
119 robbat2 1.90 RDEPEND="${DEPEND}
120     !minimal? ( dev-db/mysql-init-scripts )
121     selinux? ( sec-policy/selinux-mysql )"
122    
123     # compile-time-only
124 vivo 1.60 mysql_version_is_at_least "5.1" \
125     || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
126    
127 robbat2 1.90 # compile-time-only
128 chtekk 1.69 mysql_version_is_at_least "5.1.12" \
129 robbat2 1.107 && DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
130 chtekk 1.69
131 vivo 1.60 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
132     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
133    
134 robbat2 1.104 # For other stuff to bring us in
135     PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
136    
137 robbat2 1.81 # Work out the default SERVER_URI correctly
138     if [ -z "${SERVER_URI}" ]; then
139     # The community build is on the mirrors
140 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
141 robbat2 1.81 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz"
142 robbat2 1.110 # The (old) enterprise source is on the primary site only
143 robbat2 1.81 elif [ "${PN}" == "mysql" ]; then
144     SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz"
145     fi
146     fi
147    
148 vivo 1.60 # Define correct SRC_URIs
149 robbat2 1.86 SRC_URI="${SERVER_URI}"
150    
151 robbat2 1.122 # Gentoo patches to MySQL
152     [[ ${MY_EXTRAS_VER} != live ]] \
153     && SRC_URI="${SRC_URI}
154 robbat2 1.73 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
155 robbat2 1.124 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
156     http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
157 robbat2 1.122
158     # PBXT engine
159 vivo 1.60 mysql_version_is_at_least "5.1.12" \
160     && [[ -n "${PBXT_VERSION}" ]] \
161 robbat2 1.122 && PBXT_P="pbxt-${PBXT_VERSION}" \
162     && PBXT_SRC_URI="mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
163 robbat2 1.123 && SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )"
164 robbat2 1.120
165     # Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
166     mysql_version_is_at_least "5.1.26" \
167 robbat2 1.121 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
168 robbat2 1.122 && XTRADB_P="percona-xtradb-${XTRADB_VER}" \
169     && XTRADB_SRC_URI="http://www.percona.com/${PN}/xtradb/${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
170 robbat2 1.120 && SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI} )"
171 vivo 1.60
172     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
173     HOMEPAGE="http://www.mysql.com/"
174     LICENSE="GPL-2"
175 chtekk 1.69 SLOT="0"
176 robbat2 1.113 IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static"
177 vivo 1.60
178     mysql_version_is_at_least "4.1" \
179     && IUSE="${IUSE} latin1"
180    
181     mysql_version_is_at_least "4.1.3" \
182     && IUSE="${IUSE} cluster extraengine"
183    
184     mysql_version_is_at_least "5.0" \
185     || IUSE="${IUSE} raid"
186    
187     mysql_version_is_at_least "5.0.18" \
188     && IUSE="${IUSE} max-idx-128"
189    
190     mysql_version_is_at_least "5.1" \
191     || IUSE="${IUSE} berkdb"
192    
193     mysql_version_is_at_least "5.1.12" \
194 robbat2 1.121 && [[ -n "${PBXT_VERSION}" ]] \
195 vivo 1.60 && IUSE="${IUSE} pbxt"
196    
197 robbat2 1.120 mysql_version_is_at_least "5.1.26" \
198 robbat2 1.121 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
199 robbat2 1.120 && IUSE="${IUSE} xtradb"
200    
201 robbat2 1.110 [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
202 robbat2 1.113 && IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
203 vivo 1.1
204 vivo 1.37 #
205     # HELPER FUNCTIONS:
206     #
207    
208 robbat2 1.119 # @FUNCTION: mysql_disable_test
209     # @DESCRIPTION:
210     # Helper function to disable specific tests.
211 vivo 1.51 mysql_disable_test() {
212     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.125 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
557     if mysql_version_is_at_least "5.0.83" ; then
558     GCC_VER=$(gcc_version)
559     case ${GCC_VER} in
560     2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;;
561     esac
562     fi
563    
564 robbat2 1.83 # This should come after all of the die statements
565     enewgroup mysql 60 || die "problem adding 'mysql' group"
566     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
567 chtekk 1.39
568 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
569 cardoe 1.67 && use berkdb \
570 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
571 chtekk 1.30 }
572    
573 robbat2 1.119 # @FUNCTION: mysql_src_unpack
574     # @DESCRIPTION:
575     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
576 chtekk 1.30 mysql_src_unpack() {
577     # Initialize the proper variables first
578     mysql_init_vars
579 vivo 1.1
580 chtekk 1.30 unpack ${A}
581 robbat2 1.86 # Grab the patches
582     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
583 maekke 1.116
584 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
585 robbat2 1.112
586     # Be backwards compatible for now
587 robbat2 1.119 case ${EAPI:-0} in
588     2) : ;;
589     0 | 1) mysql_src_prepare ;;
590     esac
591 robbat2 1.112 }
592    
593 robbat2 1.119 # @FUNCTION: mysql_src_prepare
594     # @DESCRIPTION:
595     # Apply patches to the source code and remove unneeded bundled libs.
596 robbat2 1.112 mysql_src_prepare() {
597 robbat2 1.109 cd "${S}"
598 vivo 1.1
599 chtekk 1.30 # Apply the patches for this MySQL version
600 vivo 1.55 EPATCH_SUFFIX="patch"
601 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
602 robbat2 1.86 # Clean out old items
603     rm -f "${EPATCH_SOURCE}"/*
604     # Now link in right patches
605 vivo 1.55 mysql_mv_patches
606 robbat2 1.86 # And apply
607 chtekk 1.69 epatch
608 vivo 1.1
609 chtekk 1.30 # Additional checks, remove bundled zlib
610 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
611     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
612 chtekk 1.30 rm -f "scripts/mysqlbug"
613 vivo 1.1
614     # Make charsets install in the right place
615 vivo 1.37 find . -name 'Makefile.am' \
616     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
617 vivo 1.1
618 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
619 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
620 robbat2 1.122 einfo "Cleaning up old buildscript files"
621 chtekk 1.30 find . -name Makefile \
622     -o -name Makefile.in \
623     -o -name configure \
624     -exec rm -f {} \;
625     rm -f "ltmain.sh"
626 vivo 1.37 rm -f "scripts/mysqlbug"
627 chtekk 1.30 fi
628 vivo 1.1
629 vivo 1.51 local rebuilddirlist d
630 vivo 1.1
631 robbat2 1.122 if mysql_version_is_at_least "5.1.26" && use xtradb ; then
632     einfo "Replacing InnoDB with Percona XtraDB"
633     pushd "${S}"/storage
634     i="innobase"
635     o="${WORKDIR}/storage-${i}.mysql-upstream"
636     # Have we been here already?
637     [ -h "${i}" ] && rm -f "${i}"
638     # Or maybe we haven't
639     [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
640     ln -s "${WORKDIR}/${XTRADB_P}" "${i}"
641     popd
642     fi
643    
644 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
645 robbat2 1.122 einfo "Updating innobase cmake"
646 chtekk 1.42 rebuilddirlist="."
647 swegener 1.74 # TODO: check this with a cmake expert
648 robbat2 1.107 cmake \
649 chtekk 1.72 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
650 robbat2 1.82 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
651 vivo 1.51 "storage/innobase"
652 vivo 1.1 else
653     rebuilddirlist=". innobase"
654     fi
655    
656 chtekk 1.30 for d in ${rebuilddirlist} ; do
657     einfo "Reconfiguring dir '${d}'"
658 vivo 1.4 pushd "${d}" &>/dev/null
659 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
660 vivo 1.4 popd &>/dev/null
661 vivo 1.1 done
662    
663 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
664 cardoe 1.67 && use berkdb ; then
665 robbat2 1.122 einfo "Fixing up berkdb buildsystem"
666 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
667 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
668     || die "Could not copy libtool.m4 to bdb/dist/"
669 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
670     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
671     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
672     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
673     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
674     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
675     fi
676 chtekk 1.71 pushd "bdb/dist" &>/dev/null
677     sh s_all \
678     || die "Failed bdb reconfigure"
679 vivo 1.4 popd &>/dev/null
680 vivo 1.1 fi
681     }
682    
683 robbat2 1.119 # @FUNCTION: mysql_src_configure
684     # @DESCRIPTION:
685     # Configure mysql to build the code for Gentoo respecting the use flags.
686 robbat2 1.112 mysql_src_configure() {
687 chtekk 1.30 # Make sure the vars are correctly initialized
688     mysql_init_vars
689 vivo 1.1
690 chtekk 1.42 # $myconf is modified by the configure_* functions
691     local myconf=""
692 vivo 1.1
693 cardoe 1.67 if use minimal ; then
694 chtekk 1.42 configure_minimal
695 vivo 1.1 else
696 chtekk 1.42 configure_common
697 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
698 chtekk 1.42 configure_51
699 vivo 1.1 else
700 chtekk 1.42 configure_40_41_50
701 vivo 1.1 fi
702 vivo 1.23 fi
703    
704 chtekk 1.30 # Bug #114895, bug #110149
705 vivo 1.1 filter-flags "-O" "-O[01]"
706 chtekk 1.30
707     # glib-2.3.2_pre fix, bug #16496
708 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
709    
710 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
711     # fail badly during cluster startup.
712     if [[ $(gcc-major-version) -lt 4 ]]; then
713     filter-flags "-fstack-protector-all"
714     fi
715    
716 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
717 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
718 vivo 1.51 mysql_version_is_at_least "5.0" \
719 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
720 chtekk 1.39 export CXXFLAGS
721 vivo 1.1
722 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
723     append-flags -fno-strict-aliasing
724    
725 vivo 1.1 econf \
726     --libexecdir="/usr/sbin" \
727     --sysconfdir="${MY_SYSCONFDIR}" \
728     --localstatedir="${MY_LOCALSTATEDIR}" \
729     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
730     --libdir="${MY_LIBDIR}" \
731     --includedir="${MY_INCLUDEDIR}" \
732     --with-low-memory \
733     --with-client-ldflags=-lstdc++ \
734     --enable-thread-safe-client \
735     --with-comment="Gentoo Linux ${PF}" \
736     --without-docs \
737 chtekk 1.39 ${myconf} || die "econf failed"
738 vivo 1.1
739 chtekk 1.30 # TODO: Move this before autoreconf !!!
740 vivo 1.21 find . -type f -name Makefile -print0 \
741     | xargs -0 -n100 sed -i \
742     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
743 vivo 1.1
744 robbat2 1.112 if [[ $EAPI == 2 ]]; then
745     mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_configure
746     fi
747     }
748    
749 robbat2 1.119 # @FUNCTION: mysql_src_compile
750     # @DESCRIPTION:
751     # Compile the mysql code.
752 robbat2 1.112 mysql_src_compile() {
753     # Be backwards compatible for now
754 robbat2 1.119 case ${EAPI:-0} in
755     2) : ;;
756     0 | 1) mysql_src_configure ;;
757     esac
758 robbat2 1.112
759 chtekk 1.39 emake || die "emake failed"
760 vivo 1.55
761 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
762 vivo 1.1 }
763    
764 robbat2 1.119 # @FUNCTION: mysql_src_install
765     # @DESCRIPTION:
766     # Install mysql.
767 vivo 1.1 mysql_src_install() {
768 chtekk 1.30 # Make sure the vars are correctly initialized
769     mysql_init_vars
770 vivo 1.1
771 chtekk 1.69 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
772 vivo 1.55
773 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
774 vivo 1.1
775 chtekk 1.30 # Convenience links
776 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
777 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
778     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
779     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
780 vivo 1.1
781 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
782 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
783 chtekk 1.30 rm -Rf "${D}/usr/share/info"
784 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
785     binary-configure* my-*.cnf mi_test_all*
786     do
787 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
788 vivo 1.1 done
789    
790 chtekk 1.69 # Clean up stuff for a minimal build
791 cardoe 1.67 if use minimal ; then
792 robbat2 1.105 einfo "Remove all extra content for minimal build"
793 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
794     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}
795 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
796 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
797 vivo 1.1 fi
798    
799 chtekk 1.30 # Configuration stuff
800 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
801 chtekk 1.30 mysql_mycnf_version="4.1"
802     else
803     mysql_mycnf_version="4.0"
804     fi
805 robbat2 1.105 einfo "Building default my.cnf"
806 vivo 1.1 insinto "${MY_SYSCONFDIR}"
807 vivo 1.55 doins scripts/mysqlaccess.conf
808 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
809 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
810 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
811 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
812 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
813     fi
814 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
815    
816 chtekk 1.30 # Minimal builds don't have the MySQL server
817 cardoe 1.67 if ! use minimal ; then
818 robbat2 1.105 einfo "Creating initial directories"
819 chtekk 1.30 # Empty directories ...
820 vivo 1.1 diropts "-m0750"
821     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
822 robbat2 1.75 dodir "${MY_DATADIR}"
823     keepdir "${MY_DATADIR}"
824     chown -R mysql:mysql "${D}/${MY_DATADIR}"
825 vivo 1.1 fi
826    
827     diropts "-m0755"
828     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
829     dodir "${folder}"
830     keepdir "${folder}"
831     chown -R mysql:mysql "${D}/${folder}"
832     done
833     fi
834    
835 chtekk 1.30 # Docs
836 robbat2 1.105 einfo "Installing docs"
837 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
838 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
839 chtekk 1.30
840     # Minimal builds don't have the MySQL server
841 cardoe 1.67 if ! use minimal ; then
842 robbat2 1.105 einfo "Including support files and sample configurations"
843 vivo 1.1 docinto "support-files"
844     for script in \
845 robbat2 1.92 "${S}"/support-files/my-*.cnf \
846     "${S}"/support-files/magic \
847     "${S}"/support-files/ndb-config-2-node.ini
848 vivo 1.1 do
849     dodoc "${script}"
850     done
851    
852     docinto "scripts"
853 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
854 vivo 1.4 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
855 vivo 1.1 done
856 robbat2 1.78
857 vivo 1.1 fi
858 vivo 1.4
859 vivo 1.58 mysql_lib_symlinks "${D}"
860 vivo 1.15 }
861    
862 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
863     # @DESCRIPTION:
864     # Create the user and groups for mysql - die if that fails.
865 vivo 1.15 mysql_pkg_preinst() {
866 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
867     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
868 vivo 1.1 }
869    
870 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
871     # @DESCRIPTION:
872     # Run post-installation tasks:
873     # create the dir for logfiles if non-existant
874     # touch the logfiles and secure them
875     # install scripts
876     # issue required steps for optional features
877     # issue deprecation warnings
878 vivo 1.1 mysql_pkg_postinst() {
879 chtekk 1.30 # Make sure the vars are correctly initialized
880 vivo 1.1 mysql_init_vars
881    
882 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
883 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
884 vivo 1.1
885 chtekk 1.30 # Secure the logfiles
886 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
887     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
888     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
889    
890 vivo 1.55 # Minimal builds don't have the MySQL server
891 cardoe 1.67 if ! use minimal ; then
892 vivo 1.55 docinto "support-files"
893     for script in \
894     support-files/my-*.cnf \
895     support-files/magic \
896     support-files/ndb-config-2-node.ini
897     do
898     dodoc "${script}"
899     done
900    
901     docinto "scripts"
902     for script in scripts/mysql* ; do
903     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
904     done
905 chtekk 1.69
906     einfo
907     elog "You might want to run:"
908     elog "\"emerge --config =${CATEGORY}/${PF}\""
909     elog "if this is a new install."
910     einfo
911 vivo 1.55 fi
912    
913 cardoe 1.67 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
914 chtekk 1.69 # TODO: explain it better
915     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
916     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
917     elog "if, after that, you cannot start the MySQL server,"
918 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
919 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
920     elog "or execute the following SQL command:"
921     elog " CREATE TABLE IF NOT EXISTS plugin ("
922     elog " name char(64) binary DEFAULT '' NOT NULL,"
923     elog " dl char(128) DEFAULT '' NOT NULL,"
924     elog " PRIMARY KEY (name)"
925     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
926 vivo 1.4 fi
927 chtekk 1.69
928 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
929 cardoe 1.67 && use berkdb \
930 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
931 vivo 1.1 }
932    
933 robbat2 1.119 # @FUNCTION: mysql_pkg_config
934     # @DESCRIPTION:
935     # Configure mysql environment.
936 vivo 1.1 mysql_pkg_config() {
937 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
938    
939 chtekk 1.30 # Make sure the vars are correctly initialized
940 vivo 1.1 mysql_init_vars
941    
942 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
943 chtekk 1.30
944 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
945 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
946     fi
947    
948 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
949     local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
950     local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
951    
952     if [[ -d "${old_MY_DATADIR_s}" ]]; then
953     if [[ -d "${MY_DATADIR_s}" ]]; then
954     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
955     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
956     else
957     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
958     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
959     || die "Moving MY_DATADIR failed"
960     fi
961     else
962     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
963     if [[ -d "${MY_DATADIR_s}" ]]; then
964     ewarn "Attempting to use ${MY_DATADIR_s}"
965     else
966     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
967     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
968 maekke 1.116 fi
969 robbat2 1.111 fi
970     fi
971    
972 vivo 1.1 local pwd1="a"
973     local pwd2="b"
974     local maxtry=5
975    
976 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
977 vivo 1.1 ewarn "You have already a MySQL database in place."
978 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
979 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
980     die "MySQL database already exists!"
981     fi
982    
983 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
984     # localhost. Also causes weird failures.
985     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
986    
987 vivo 1.1 einfo "Creating the mysql database and setting proper"
988 chtekk 1.30 einfo "permissions on it ..."
989 vivo 1.1
990     einfo "Insert a password for the mysql 'root' user"
991     ewarn "Avoid [\"'\\_%] characters in the password"
992 chtekk 1.30 read -rsp " >" pwd1 ; echo
993 vivo 1.1
994 chtekk 1.30 einfo "Retype the password"
995 vivo 1.1 read -rsp " >" pwd2 ; echo
996    
997     if [[ "x$pwd1" != "x$pwd2" ]] ; then
998     die "Passwords are not the same"
999     fi
1000    
1001     local options=""
1002     local sqltmp="$(emktemp)"
1003    
1004 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1005 vivo 1.1 [[ -r "${help_tables}" ]] \
1006 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1007 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1008     help_tables="${TMPDIR}/fill_help_tables.sql"
1009    
1010 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1011 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1012     if [ $? -ne 0 ]; then
1013     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1014     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1015     fi
1016 vivo 1.4 popd &>/dev/null
1017 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1018 vivo 1.26 || die "MySQL databases not installed"
1019 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1020     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1021 vivo 1.1
1022 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1023 vivo 1.1 options="--skip-ndbcluster"
1024    
1025     # Filling timezones, see
1026     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1027 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1028 vivo 1.1
1029     if [[ -r "${help_tables}" ]] ; then
1030     cat "${help_tables}" >> "${sqltmp}"
1031     fi
1032     fi
1033    
1034 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1035     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1036 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
1037 vivo 1.1 ${options} \
1038     --user=mysql \
1039     --skip-grant-tables \
1040     --basedir=${ROOT}/usr \
1041 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1042 vivo 1.1 --skip-innodb \
1043     --skip-bdb \
1044     --skip-networking \
1045     --max_allowed_packet=8M \
1046     --net_buffer_length=16K \
1047     --socket=${socket} \
1048     --pid-file=${pidfile}"
1049 chtekk 1.30 ${mysqld} &
1050 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1051 chtekk 1.30 maxtry=$((${maxtry}-1))
1052 vivo 1.1 echo -n "."
1053     sleep 1
1054     done
1055    
1056 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1057 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
1058 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1059 vivo 1.1 --socket=${socket} \
1060     -hlocalhost \
1061     -e "${sql}"
1062    
1063 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
1064 vivo 1.1
1065 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1066 vivo 1.1 --socket=${socket} \
1067     -hlocalhost \
1068     -uroot \
1069     -p"${pwd1}" \
1070     mysql < "${sqltmp}"
1071    
1072 chtekk 1.30 # Stop the server and cleanup
1073 vivo 1.1 kill $(< "${pidfile}" )
1074 chtekk 1.30 rm -f "${sqltmp}"
1075     einfo "Stopping the server ..."
1076 vivo 1.1 wait %1
1077 chtekk 1.30 einfo "Done"
1078 vivo 1.1 }
1079    
1080 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1081     # @DESCRIPTION:
1082     # Remove mysql symlinks.
1083 vivo 1.1 mysql_pkg_postrm() {
1084 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1085 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20