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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.120 - (hide annotations) (download)
Wed Dec 9 18:46:53 2009 UTC (4 years, 7 months ago) by robbat2
Branch: MAIN
Changes since 1.119: +21 -2 lines
Add in initial support for Percona XtraDB for the new 5.1 ebuilds. Again thanks to jmbsvicetto (reformatted slightly).

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

  ViewVC Help
Powered by ViewVC 1.1.20