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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.121 - (hide annotations) (download)
Wed Dec 9 18:54:05 2009 UTC (4 years, 11 months ago) by robbat2
Branch: MAIN
Changes since 1.120: +4 -2 lines
Only offer IUSE=pbxt/xtradb IF the patches are available for the version in question.

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

  ViewVC Help
Powered by ViewVC 1.1.20