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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.161 - (hide annotations) (download)
Fri Jul 8 11:35:01 2011 UTC (3 years, 1 month ago) by ssuominen
Branch: MAIN
Changes since 1.160: +2 -2 lines
Convert every instance of hasq to has.

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 ssuominen 1.161 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.160 2011/05/07 19:16:48 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.127 inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator toolchain-funcs
22 robbat2 1.114
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.137
57     # @ECLASS-VARIABLE: MYSQL_PV_MAJOR
58     # @DESCRIPTION:
59     # Upstream MySQL considers the first two parts of the version number to be the
60     # major version. Upgrades that change major version should always run
61     # mysql_upgrade.
62     MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
63    
64 robbat2 1.149 # Cluster is a special case...
65     if [[ "${PN}" == "mysql-cluster" ]]; then
66     case $PV in
67     6.1*|7.0*|7.1*) MYSQL_PV_MAJOR=5.1 ;;
68     esac
69     fi
70    
71    
72 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
73     # @DESCRIPTION:
74 vivo 1.60 # MYSQL_VERSION_ID will be:
75     # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
76     # This is an important part, because many of the choices the MySQL ebuild will do
77     # depend on this variable.
78     # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
79 robbat2 1.88 # We also strip off upstream's trailing letter that they use to respin tarballs
80 chtekk 1.69
81 vivo 1.60 MYSQL_VERSION_ID=""
82 robbat2 1.88 tpv="${PV%[a-z]}"
83     tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
84 vivo 1.60 for vatom in 0 1 2 3 ; do
85     # pad to length 2
86     tpv[${vatom}]="00${tpv[${vatom}]}"
87     MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
88     done
89     # strip leading "0" (otherwise it's considered an octal number by BASH)
90     MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
91    
92 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_COMMUNITY_FEATURES
93     # @DESCRIPTION:
94     # Specifiy if community features are available. Possible values are 1 (yes)
95     # and 0 (no).
96 robbat2 1.110 # Community features are available in mysql-community
97     # AND in the re-merged mysql-5.0.82 and newer
98 robbat2 1.137 if [ "${PN}" == "mysql-community" -o "${PN}" == "mariadb" ]; then
99 robbat2 1.110 MYSQL_COMMUNITY_FEATURES=1
100     elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
101     MYSQL_COMMUNITY_FEATURES=1
102 robbat2 1.117 elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
103     MYSQL_COMMUNITY_FEATURES=1
104 robbat2 1.132 elif [ "${PV#5.4}" != "${PV}" ] ; then
105     MYSQL_COMMUNITY_FEATURES=1
106     elif [ "${PV#5.5}" != "${PV}" ] ; then
107     MYSQL_COMMUNITY_FEATURES=1
108 robbat2 1.149 elif [ "${PV#6}" != "${PV}" ] ; then
109     MYSQL_COMMUNITY_FEATURES=1
110     elif [ "${PV#7}" != "${PV}" ] ; then
111 hanno 1.118 MYSQL_COMMUNITY_FEATURES=1
112 robbat2 1.110 else
113     MYSQL_COMMUNITY_FEATURES=0
114     fi
115    
116 robbat2 1.120 # @ECLASS-VARIABLE: XTRADB_VER
117     # @DESCRIPTION:
118     # Version of the XTRADB storage engine
119     XTRADB_VER="${XTRADB_VER}"
120    
121     # @ECLASS-VARIABLE: PERCONA_VER
122     # @DESCRIPTION:
123     # Designation by PERCONA for a MySQL version to apply an XTRADB release
124     PERCONA_VER="${PERCONA_VER}"
125    
126 vivo 1.60 # Be warned, *DEPEND are version-dependant
127 robbat2 1.90 # These are used for both runtime and compiletime
128 vivo 1.60 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
129     userland_GNU? ( sys-process/procps )
130     >=sys-apps/sed-4
131     >=sys-apps/texinfo-4.7-r1
132     >=sys-libs/readline-4.1
133 chtekk 1.69 >=sys-libs/zlib-1.2.3"
134 vivo 1.60
135 robbat2 1.137 [[ "${PN}" == "mariadb" ]] \
136     && DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
137    
138 chtekk 1.69 # Having different flavours at the same time is not a good idea
139 robbat2 1.149 for i in "mysql" "mysql-community" "mysql-cluster" "mariadb" ; do
140 robbat2 1.137 [[ "${i}" == ${PN} ]] ||
141     DEPEND="${DEPEND} !dev-db/${i}"
142 vivo 1.60 done
143    
144 robbat2 1.90 RDEPEND="${DEPEND}
145     !minimal? ( dev-db/mysql-init-scripts )
146     selinux? ( sec-policy/selinux-mysql )"
147    
148 jmbsvicetto 1.157 if [ "${EAPI:-0}" = "2" ]; then
149 jmbsvicetto 1.158 DEPEND="${DEPEND} static? ( || ( sys-libs/ncurses[static-libs] <=sys-libs/ncurses-5.7-r3 ) )"
150 jmbsvicetto 1.157 fi
151    
152 robbat2 1.90 # compile-time-only
153 vivo 1.60 mysql_version_is_at_least "5.1" \
154     || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
155    
156 robbat2 1.90 # compile-time-only
157 chtekk 1.69 mysql_version_is_at_least "5.1.12" \
158 robbat2 1.107 && DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
159 chtekk 1.69
160 jmbsvicetto 1.157 [[ "${PN}" == "mariadb" ]] \
161     && mysql_version_is_at_least "5.2" \
162     && DEPEND="${DEPEND} oqgraph? ( >=dev-libs/boost-1.40.0 )"
163     #SphinxSE is included but is not available in 5.2.4 due to a missing plug.in file
164     # sphinx? ( app-misc/sphinx )"
165    
166 vivo 1.60 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
167     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
168    
169 robbat2 1.104 # For other stuff to bring us in
170 robbat2 1.137 PDEPEND="${PDEPEND} =virtual/mysql-${MYSQL_PV_MAJOR}"
171 robbat2 1.104
172 robbat2 1.81 # Work out the default SERVER_URI correctly
173     if [ -z "${SERVER_URI}" ]; then
174 robbat2 1.132 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
175 robbat2 1.137 if [ "${PN}" == "mariadb" ]; then
176     MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
177 robbat2 1.145 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
178     SERVER_URI="
179 robbat2 1.152 http://ftp.osuosl.org/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
180 robbat2 1.145 http://ftp.rediris.es/mirror/MariaDB/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
181     http://maria.llarian.net/download/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
182     http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/${MARIA_FULL_P}.tar.gz
183 robbat2 1.152 http://mirrors.fe.up.pt/pub/${PN}/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
184     http://ftp-stud.hs-esslingen.de/pub/Mirrors/${PN}/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
185 robbat2 1.145 "
186 robbat2 1.149 # The community and cluster builds are on the mirrors
187     elif [[ "${MYSQL_COMMUNITY_FEATURES}" == "1" || ${PN} == "mysql-cluster" ]] ; then
188 robbat2 1.148 if [[ "${PN}" == "mysql-cluster" ]] ; then
189     URI_DIR="MySQL-Cluster"
190     URI_FILE="mysql-cluster-gpl"
191     else
192     URI_DIR="MySQL"
193     URI_FILE="mysql"
194     fi
195     URI_A="${URI_FILE}-${MY_PV}.tar.gz"
196     MIRROR_PV=$(get_version_component_range 1-2 ${PV})
197     # Recently upstream switched to an archive site, and not on mirrors
198     SERVER_URI="http://downloads.mysql.com/archives/${URI_FILE}-${MIRROR_PV}/${URI_A}
199     mirror://mysql/Downloads/${URI_DIR}-${PV%.*}/${URI_A}"
200 robbat2 1.110 # The (old) enterprise source is on the primary site only
201 robbat2 1.81 elif [ "${PN}" == "mysql" ]; then
202 robbat2 1.132 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz"
203 robbat2 1.81 fi
204     fi
205    
206 vivo 1.60 # Define correct SRC_URIs
207 robbat2 1.86 SRC_URI="${SERVER_URI}"
208    
209 robbat2 1.122 # Gentoo patches to MySQL
210     [[ ${MY_EXTRAS_VER} != live ]] \
211     && SRC_URI="${SRC_URI}
212 robbat2 1.73 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
213 robbat2 1.124 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
214     http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
215 robbat2 1.122
216 vivo 1.60 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
217     HOMEPAGE="http://www.mysql.com/"
218 robbat2 1.137 if [[ "${PN}" == "mariadb" ]]; then
219     HOMEPAGE="http://askmonty.org/"
220     DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged."
221     fi
222 robbat2 1.142 if [[ "${PN}" == "mysql-community" ]]; then
223     DESCRIPTION="${DESCRIPTION} (obsolete, move to dev-db/mysql)"
224     fi
225 vivo 1.60 LICENSE="GPL-2"
226 chtekk 1.69 SLOT="0"
227 robbat2 1.133 IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
228 vivo 1.60
229     mysql_version_is_at_least "4.1" \
230     && IUSE="${IUSE} latin1"
231    
232 robbat2 1.149 if mysql_version_is_at_least "4.1.3" ; then
233     IUSE="${IUSE} extraengine"
234     if [[ "${PN}" != "mysql-cluster" ]] ; then
235     IUSE="${IUSE} cluster"
236     fi
237     fi
238 vivo 1.60
239     mysql_version_is_at_least "5.0" \
240     || IUSE="${IUSE} raid"
241    
242     mysql_version_is_at_least "5.0.18" \
243     && IUSE="${IUSE} max-idx-128"
244    
245     mysql_version_is_at_least "5.1" \
246     || IUSE="${IUSE} berkdb"
247    
248 robbat2 1.133 [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
249     && IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
250    
251 robbat2 1.137 [[ "${PN}" == "mariadb" ]] \
252     && IUSE="${IUSE} libevent"
253    
254 jmbsvicetto 1.157 [[ "${PN}" == "mariadb" ]] \
255     && mysql_version_is_at_least "5.2" \
256     && IUSE="${IUSE} oqgraph"
257     #SphinxSE is included but is not available in 5.2.4 due to a missing plug.in file
258     #&& IUSE="${IUSE} oqgraph sphinx"
259    
260 robbat2 1.137 # MariaDB has integrated PBXT
261     # PBXT_VERSION means that we have a PBXT patch for this PV
262     # PBXT was only introduced after 5.1.12
263     pbxt_patch_available() {
264     [[ "${PN}" != "mariadb" ]] \
265     && mysql_version_is_at_least "5.1.12" \
266     && [[ -n "${PBXT_VERSION}" ]]
267     return $?
268     }
269    
270     pbxt_available() {
271     pbxt_patch_available || [[ "${PN}" == "mariadb" ]]
272     return $?
273     }
274    
275     # Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
276     # MariaDB has integrated XtraDB
277     # XTRADB_VERS means that we have a XTRADB patch for this PV
278     # XTRADB was only introduced after 5.1.26
279     xtradb_patch_available() {
280     [[ "${PN}" != "mariadb" ]] \
281     && mysql_version_is_at_least "5.1.26" \
282     && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
283     return $?
284     }
285    
286 robbat2 1.145
287 robbat2 1.137 pbxt_patch_available \
288 robbat2 1.133 && PBXT_P="pbxt-${PBXT_VERSION}" \
289 robbat2 1.134 && PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
290 robbat2 1.133 && SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
291 robbat2 1.137
292 robbat2 1.145 # PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
293     # vs. built outside the dir
294 robbat2 1.137 pbxt_available \
295 robbat2 1.145 && IUSE="${IUSE} pbxt" \
296     && mysql_version_is_at_least "5.1.40" \
297     && PBXT_NEWSTYLE=1
298 vivo 1.60
299 robbat2 1.137 xtradb_patch_available \
300 robbat2 1.133 && XTRADB_P="percona-xtradb-${XTRADB_VER}" \
301 robbat2 1.134 && XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
302 robbat2 1.145 && XTRADB_SRC_B1="http://www.percona.com/" \
303     && XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/" \
304     && XTRADB_SRC_URI1="${XTRADB_SRC_B2}/Percona-Server/Percona-Server-${XTRADB_SRC_URI_COMMON}" \
305     && XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}" \
306     && XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
307     && SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )" \
308 robbat2 1.120 && IUSE="${IUSE} xtradb"
309    
310 vivo 1.37 #
311     # HELPER FUNCTIONS:
312     #
313    
314 robbat2 1.119 # @FUNCTION: mysql_disable_test
315     # @DESCRIPTION:
316     # Helper function to disable specific tests.
317 vivo 1.51 mysql_disable_test() {
318 robbat2 1.127 local rawtestname testname testsuite reason mysql_disable_file
319     rawtestname="${1}" ; shift
320     reason="${@}"
321     ewarn "test '${rawtestname}' disabled: '${reason}'"
322 robbat2 1.152
323 robbat2 1.127 testsuite="${rawtestname/.*}"
324     testname="${rawtestname/*.}"
325     mysql_disable_file="${S}/mysql-test/t/disabled.def"
326 robbat2 1.131 #einfo "rawtestname=${rawtestname} testname=${testname} testsuite=${testsuite}"
327 vivo 1.51 echo ${testname} : ${reason} >> "${mysql_disable_file}"
328 robbat2 1.127
329     # ${S}/mysql-tests/t/disabled.def
330     #
331     # ${S}/mysql-tests/suite/federated/disabled.def
332     #
333     # ${S}/mysql-tests/suite/jp/t/disabled.def
334     # ${S}/mysql-tests/suite/ndb/t/disabled.def
335     # ${S}/mysql-tests/suite/rpl/t/disabled.def
336     # ${S}/mysql-tests/suite/parts/t/disabled.def
337     # ${S}/mysql-tests/suite/rpl_ndb/t/disabled.def
338     # ${S}/mysql-tests/suite/ndb_team/t/disabled.def
339     # ${S}/mysql-tests/suite/binlog/t/disabled.def
340     # ${S}/mysql-tests/suite/innodb/t/disabled.def
341     if [ -n "${testsuite}" ]; then
342     for mysql_disable_file in \
343     ${S}/mysql-test/suite/${testsuite}/disabled.def \
344     ${S}/mysql-test/suite/${testsuite}/t/disabled.def \
345     FAILED ; do
346     [ -f "${mysql_disable_file}" ] && break
347     done
348     if [ "${mysql_disabled_file}" != "FAILED" ]; then
349     echo "${testname} : ${reason}" >> "${mysql_disable_file}"
350     else
351     ewarn "Could not find testsuite disabled.def location for ${rawtestname}"
352     fi
353     fi
354 vivo 1.51 }
355    
356 robbat2 1.119 # @FUNCTION: mysql_init_vars
357     # @DESCRIPTION:
358 vivo 1.8 # void mysql_init_vars()
359 chtekk 1.30 # Initialize global variables
360     # 2005-11-19 <vivo@gentoo.org>
361 vivo 1.8 mysql_init_vars() {
362 chtekk 1.69 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
363     MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
364     MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
365     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
366     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
367     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
368 vivo 1.8
369 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
370     MY_DATADIR=""
371 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
372 robbat2 1.75 MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
373 vivo 1.26 | sed -ne '/datadir/s|^--datadir=||p' \
374     | tail -n1`
375 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
376     MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
377 robbat2 1.89 | sed -e 's/.*=\s*//' \
378     | tail -n1`
379 vivo 1.8 fi
380     fi
381 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
382     MY_DATADIR="${MY_LOCALSTATEDIR}"
383     einfo "Using default MY_DATADIR"
384 vivo 1.8 fi
385 robbat2 1.75 elog "MySQL MY_DATADIR is ${MY_DATADIR}"
386 vivo 1.8
387 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
388 robbat2 1.75 if [[ -e "${MY_DATADIR}" ]] ; then
389 robbat2 1.95 # If you get this and you're wondering about it, see bug #207636
390     elog "MySQL datadir found in ${MY_DATADIR}"
391     elog "A new one will not be created."
392 vivo 1.8 PREVIOUS_DATADIR="yes"
393     else
394     PREVIOUS_DATADIR="no"
395     fi
396 chtekk 1.30 export PREVIOUS_DATADIR
397 vivo 1.8 fi
398 robbat2 1.111 else
399     if [[ ${EBUILD_PHASE} == "config" ]]; then
400     local new_MY_DATADIR
401     new_MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
402     | sed -ne '/datadir/s|^--datadir=||p' \
403     | tail -n1`
404    
405     if [[ ( -n "${new_MY_DATADIR}" ) && ( "${new_MY_DATADIR}" != "${MY_DATADIR}" ) ]]; then
406     ewarn "MySQL MY_DATADIR has changed"
407     ewarn "from ${MY_DATADIR}"
408     ewarn "to ${new_MY_DATADIR}"
409     MY_DATADIR="${new_MY_DATADIR}"
410     fi
411     fi
412 vivo 1.8 fi
413    
414 robbat2 1.147 if [ "${MY_SOURCEDIR:-unset}" == "unset" ]; then
415     MY_SOURCEDIR=${SERVER_URI##*/}
416     MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
417     fi
418 vivo 1.55
419 chtekk 1.69 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
420 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
421 robbat2 1.75 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
422 vivo 1.8 }
423    
424 vivo 1.37 configure_minimal() {
425 vivo 1.46 # These are things we exclude from a minimal build, please
426     # note that the server actually does get built and installed,
427     # but we then delete it before packaging.
428 robbat2 1.84 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication readline"
429 vivo 1.37
430 vivo 1.46 for i in ${minimal_exclude_list} ; do
431     myconf="${myconf} --without-${i}"
432     done
433     myconf="${myconf} --with-extra-charsets=none"
434     myconf="${myconf} --enable-local-infile"
435 vivo 1.47
436 cardoe 1.67 if use static ; then
437 vivo 1.47 myconf="${myconf} --with-client-ldflags=-all-static"
438 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
439 vivo 1.47 else
440     myconf="${myconf} --enable-shared --enable-static"
441     fi
442 chtekk 1.50
443 chtekk 1.69 if mysql_version_is_at_least "4.1" && ! use latin1 ; then
444 chtekk 1.50 myconf="${myconf} --with-charset=utf8"
445     myconf="${myconf} --with-collation=utf8_general_ci"
446     else
447     myconf="${myconf} --with-charset=latin1"
448     myconf="${myconf} --with-collation=latin1_swedish_ci"
449     fi
450 vivo 1.37 }
451    
452     configure_common() {
453 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
454 vivo 1.37 myconf="${myconf} --enable-local-infile"
455     myconf="${myconf} --with-extra-charsets=all"
456     myconf="${myconf} --with-mysqld-user=mysql"
457 chtekk 1.39 myconf="${myconf} --with-server"
458 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
459 vivo 1.37 myconf="${myconf} --without-libwrap"
460 chtekk 1.39
461 cardoe 1.67 if use static ; then
462 vivo 1.37 myconf="${myconf} --with-mysqld-ldflags=-all-static"
463     myconf="${myconf} --with-client-ldflags=-all-static"
464 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
465 vivo 1.37 else
466     myconf="${myconf} --enable-shared --enable-static"
467     fi
468    
469 cardoe 1.67 if use debug ; then
470 vivo 1.37 myconf="${myconf} --with-debug=full"
471     else
472     myconf="${myconf} --without-debug"
473 vivo 1.51 mysql_version_is_at_least "4.1.3" \
474 robbat2 1.149 && ( use cluster || [[ "${PN}" == "mysql-cluster" ]] ) \
475 vivo 1.37 && myconf="${myconf} --without-ndb-debug"
476     fi
477 chtekk 1.39
478 robbat2 1.100 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
479     ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
480     ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
481     ewarn "You MUST file bugs without these variables set."
482     myconf="${myconf} --with-charset=${MYSQL_DEFAULT_CHARSET}"
483     myconf="${myconf} --with-collation=${MYSQL_DEFAULT_COLLATION}"
484     elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
485     myconf="${myconf} --with-charset=utf8"
486     myconf="${myconf} --with-collation=utf8_general_ci"
487     else
488     myconf="${myconf} --with-charset=latin1"
489     myconf="${myconf} --with-collation=latin1_swedish_ci"
490 vivo 1.37 fi
491 chtekk 1.39
492 cardoe 1.67 if use embedded ; then
493 vivo 1.37 myconf="${myconf} --with-embedded-privilege-control"
494     myconf="${myconf} --with-embedded-server"
495     else
496     myconf="${myconf} --without-embedded-privilege-control"
497     myconf="${myconf} --without-embedded-server"
498     fi
499    
500     }
501    
502     configure_40_41_50() {
503     myconf="${myconf} $(use_with perl bench)"
504     myconf="${myconf} --enable-assembler"
505     myconf="${myconf} --with-extra-tools"
506     myconf="${myconf} --with-innodb"
507     myconf="${myconf} --without-readline"
508 robbat2 1.136 myconf="${myconf} $(use_with ssl openssl)"
509 vivo 1.51 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
510 vivo 1.37
511 chtekk 1.69 # --with-vio is not needed anymore, it's on by default and
512     # has been removed from configure
513 robbat2 1.136 # Apply to 4.x and 5.0.[0-3]
514 cardoe 1.67 if use ssl ; then
515 chtekk 1.69 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
516 vivo 1.62 fi
517    
518 robbat2 1.98 if mysql_version_is_at_least "5.0.60" ; then
519     if use berkdb ; then
520     elog "Berkeley DB support was disabled due to build failures"
521     elog "on multiple arches, go to a version earlier than 5.0.60"
522     elog "if you want it again. Gentoo bug #224067."
523     fi
524     myconf="${myconf} --without-berkeley-db"
525     elif use berkdb ; then
526 chtekk 1.77 # The following fix is due to a bug with bdb on SPARC's. See:
527     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
528     # It comes down to non-64-bit safety problems.
529 cardoe 1.76 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
530 chtekk 1.77 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
531 cardoe 1.76 myconf="${myconf} --without-berkeley-db"
532     else
533 chtekk 1.39 myconf="${myconf} --with-berkeley-db=./bdb"
534     fi
535 cardoe 1.76 else
536     myconf="${myconf} --without-berkeley-db"
537 vivo 1.37 fi
538    
539 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
540 vivo 1.37 myconf="${myconf} --with-geometry"
541 robbat2 1.149 if [[ "${PN}" != "mysql-cluster" ]] ; then
542     myconf="${myconf} $(use_with cluster ndbcluster)"
543     fi
544 vivo 1.37 fi
545    
546 cardoe 1.67 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
547 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
548     myconf="${myconf} --with-archive-storage-engine"
549    
550     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
551     myconf="${myconf} --with-csv-storage-engine"
552    
553     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
554     myconf="${myconf} --with-blackhole-storage-engine"
555    
556     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
557     # http://dev.mysql.com/doc/mysql/en/federated-description.html
558     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
559 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
560 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
561     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
562 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
563     fi
564     fi
565    
566 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
567     myconf="${myconf} `use_enable community community-features`"
568     if use community; then
569     myconf="${myconf} `use_enable profiling`"
570     else
571     myconf="${myconf} --disable-profiling"
572     fi
573 robbat2 1.99 fi
574    
575 vivo 1.51 mysql_version_is_at_least "5.0.18" \
576 cardoe 1.67 && use max-idx-128 \
577 vivo 1.37 && myconf="${myconf} --with-max-indexes=128"
578     }
579    
580 chtekk 1.39 configure_51() {
581 chtekk 1.40 # TODO: !!!! readd --without-readline
582 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
583 vivo 1.37 # readline.h instead of history.h
584 robbat2 1.136 myconf="${myconf} $(use_with ssl ssl /usr)"
585 vivo 1.37 myconf="${myconf} --enable-assembler"
586     myconf="${myconf} --with-geometry"
587     myconf="${myconf} --with-readline"
588 robbat2 1.133 myconf="${myconf} --with-zlib-dir=/usr/"
589 vivo 1.37 myconf="${myconf} --without-pstack"
590 robbat2 1.145 myconf="${myconf} --with-plugindir=/usr/$(get_libdir)/mysql/plugin"
591    
592 robbat2 1.154 # This is an explict die here, because if we just forcibly disable it, then the
593     # user's data is not accessible.
594     use max-idx-128 && die "Bug #336027: upstream has a corruption issue with max-idx-128 presently"
595     #use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
596 robbat2 1.136 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
597     myconf="${myconf} $(use_enable community community-features)"
598     if use community; then
599     myconf="${myconf} $(use_enable profiling)"
600     else
601     myconf="${myconf} --disable-profiling"
602     fi
603     fi
604 chtekk 1.39
605 robbat2 1.145 # Scan for all available plugins
606     local plugins_avail="$(
607     LANG=C \
608     find "${S}" \
609     \( \
610     -name 'plug.in' \
611     -o -iname 'configure.in' \
612     -o -iname 'configure.ac' \
613     \) \
614     -print0 \
615     | xargs -0 sed -r -n \
616     -e '/^MYSQL_STORAGE_ENGINE/{
617     s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ;
618     s~^([^ ]+).*~\1~gp;
619     }' \
620     | tr -s '\n' ' '
621     )"
622    
623 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
624     # like configuration=none
625 robbat2 1.139 # This base set are required, and will always be statically built.
626 robbat2 1.145 local plugins_sta="csv myisam myisammrg heap"
627     local plugins_dyn=""
628     local plugins_dis="example ibmdb2i"
629    
630     # These aren't actually required by the base set, but are really useful:
631     plugins_sta="${plugins_sta} archive blackhole"
632    
633     # default in 5.5.4
634     if mysql_version_is_at_least "5.5.4" ; then
635     plugins_sta="${plugins_sta} partition"
636     fi
637     # Now the extras
638 cardoe 1.67 if use extraengine ; then
639 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
640 robbat2 1.129 # not added yet: ibmdb2i
641 jmbsvicetto 1.157 # Not supporting as examples: example,daemon_example,ftexample
642 robbat2 1.145 plugins_sta="${plugins_sta} partition"
643 vivo 1.37
644 robbat2 1.137 if [[ "${PN}" != "mariadb" ]] ; then
645     elog "Before using the Federated storage engine, please be sure to read"
646     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
647 jmbsvicetto 1.157 plugins_dyn="${plugins_sta} federated"
648 robbat2 1.137 else
649     elog "MariaDB includes the FederatedX engine. Be sure to read"
650     elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
651 jmbsvicetto 1.157 plugins_dyn="${plugins_sta} federatedx"
652 robbat2 1.137 fi
653 robbat2 1.145 else
654     plugins_dis="${plugins_dis} partition federated"
655 vivo 1.37 fi
656    
657 robbat2 1.130 # Upstream specifically requests that InnoDB always be built:
658     # - innobase, innodb_plugin
659     # Build falcon if available for 6.x series.
660 robbat2 1.145 for i in innobase falcon ; do
661     [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
662     done
663     for i in innodb_plugin ; do
664     [ -e "${S}"/storage/${i} ] && plugins_dyn="${plugins_dyn} ${i}"
665 robbat2 1.130 done
666 vivo 1.37
667     # like configuration=max-no-ndb
668 robbat2 1.149 if ( use cluster || [[ "${PN}" == "mysql-cluster" ]] ) ; then
669 robbat2 1.146 plugins_sta="${plugins_sta} ndbcluster partition"
670     plugins_dis="${plugins_dis//partition}"
671 vivo 1.37 myconf="${myconf} --with-ndb-binlog"
672 robbat2 1.145 else
673     plugins_dis="${plugins_dis} ndbcluster"
674 vivo 1.37 fi
675    
676 robbat2 1.137 if [[ "${PN}" == "mariadb" ]] ; then
677     # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
678     # caught above.
679 jmbsvicetto 1.157 # This is not optional, without it several upstream testcases fail.
680     # Also strongly recommended by upstream.
681     if [[ "${PV}" < "5.2.0" ]] ; then
682     myconf="${myconf} --with-maria-tmp-tables"
683     plugins_sta="${plugins_sta} maria"
684     else
685     myconf="${myconf} --with-aria-tmp-tables"
686     plugins_sta="${plugins_sta} aria"
687     fi
688 robbat2 1.152
689     [ -e "${S}"/storage/innobase ] || [ -e "${S}"/storage/xtradb ] ||
690     die "The ${P} package doesn't provide innobase nor xtradb"
691    
692     for i in innobase xtradb ; do
693     [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
694     done
695    
696 robbat2 1.137 myconf="${myconf} $(use_with libevent)"
697 jmbsvicetto 1.157
698     if mysql_version_is_at_least "5.2" ; then
699     #This should include sphinx, but the 5.2.4 archive forgot the plug.in file
700     #for i in oqgraph sphinx ; do
701     for i in oqgraph ; do
702     use ${i} \
703     && plugins_dyn="${plugins_dyn} ${i}" \
704     || plugins_dis="${plugins_dis} ${i}"
705     done
706     fi
707 robbat2 1.137 fi
708 robbat2 1.152
709 robbat2 1.145 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
710     use pbxt \
711     && plugins_dyn="${plugins_dyn} pbxt" \
712     || plugins_dis="${plugins_dis} pbxt"
713     fi
714 robbat2 1.137
715 robbat2 1.145 use static && \
716     plugins_sta="${plugins_sta} ${plugins_dyn}" && \
717     plugins_dyn=""
718 robbat2 1.152
719 robbat2 1.145 einfo "Available plugins: ${plugins_avail}"
720     einfo "Dynamic plugins: ${plugins_dyn}"
721     einfo "Static plugins: ${plugins_sta}"
722     einfo "Disabled plugins: ${plugins_dis}"
723    
724     # These are the static plugins
725     myconf="${myconf} --with-plugins=${plugins_sta// /,}"
726     # And the disabled ones
727     for i in ${plugins_dis} ; do
728     myconf="${myconf} --without-plugin-${i}"
729     done
730 vivo 1.37 }
731    
732 robbat2 1.112 pbxt_src_configure() {
733 vivo 1.51 mysql_init_vars
734    
735     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
736    
737     einfo "Reconfiguring dir '${PWD}'"
738 vapier 1.150 eautoreconf
739 vivo 1.51
740 chtekk 1.69 local myconf=""
741 robbat2 1.138 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
742 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
743 robbat2 1.138 econf ${myconf} || die "Problem configuring PBXT storage engine"
744 robbat2 1.112 }
745    
746     pbxt_src_compile() {
747 robbat2 1.145
748 robbat2 1.112 # Be backwards compatible for now
749     if [[ $EAPI != 2 ]]; then
750     pbxt_src_configure
751     fi
752 chtekk 1.69 # TODO: is it safe/needed to use emake here ?
753     make || die "Problem making PBXT storage engine (${myconf})"
754 vivo 1.51
755     popd
756 chtekk 1.69 # TODO: modify test suite for PBXT
757 vivo 1.51 }
758    
759     pbxt_src_install() {
760     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
761 robbat2 1.134 emake install DESTDIR="${D}" || die "Failed to install PBXT"
762 vivo 1.51 popd
763     }
764    
765 vivo 1.37 #
766     # EBUILD FUNCTIONS
767     #
768 robbat2 1.119 # @FUNCTION: mysql_pkg_setup
769     # @DESCRIPTION:
770     # Perform some basic tests and tasks during pkg_setup phase:
771     # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
772     # check for conflicting use flags
773     # create new user and group for mysql
774     # warn about deprecated features
775 vivo 1.1 mysql_pkg_setup() {
776 ssuominen 1.161 if has test ${FEATURES} ; then
777 robbat2 1.83 if ! use minimal ; then
778 robbat2 1.91 if [[ $UID -eq 0 ]]; then
779 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
780 robbat2 1.83 fi
781     fi
782     fi
783 swegener 1.53
784 jmbsvicetto 1.157 # bug 350844
785     case "${EAPI:-0}" in
786     0 | 1)
787     if use static && !built_with_use sys-libs/ncurses static-libs; then
788     die "To build MySQL statically you need to enable static-libs for sys-libs/ncurses"
789     fi
790     ;;
791     esac
792    
793 chtekk 1.30 # Check for USE flag problems in pkg_setup
794 cardoe 1.67 if use static && use ssl ; then
795 robbat2 1.145 M="MySQL does not support being built statically with SSL support enabled!"
796     eerror "${M}"
797     die "${M}"
798 chtekk 1.30 fi
799 vivo 1.1
800 robbat2 1.156 if mysql_version_is_at_least "5.1.51" \
801     && ! mysql_version_is_at_least "5.2" \
802     && use debug ; then
803     # Also in package.use.mask
804     die "Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51"
805     fi
806    
807 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
808 cardoe 1.67 && use raid \
809     && use static ; then
810 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
811     eerror "with RAID support enabled."
812     die "USE flags 'raid' and 'static' conflict!"
813 vivo 1.1 fi
814    
815 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
816 robbat2 1.145 && ( use cluster || use extraengine || use embedded ) \
817 cardoe 1.67 && use minimal ; then
818 robbat2 1.145 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
819     eerror "${M}"
820     die "${M}"
821     fi
822 robbat2 1.152
823 robbat2 1.145 if mysql_version_is_at_least "5.1" \
824     && xtradb_patch_available \
825     && use xtradb \
826     && use embedded ; then
827     M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
828     eerror "${M}"
829     die "${M}"
830 vivo 1.1 fi
831 maekke 1.103
832 robbat2 1.144 # Bug #290570, 284946, 307251
833     # Upstream changes made us need a fairly new GCC4.
834     # But only for 5.0.8[3-6]!
835     if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
836 robbat2 1.127 GCC_VER=$(gcc-version)
837 robbat2 1.125 case ${GCC_VER} in
838 jmbsvicetto 1.157 2*|3*|4.0|4.1|4.2)
839 robbat2 1.144 eerror "Some releases of MySQL required a very new GCC, and then"
840     eerror "later release relaxed that requirement again. Either pick a"
841     eerror "MySQL >=5.0.87, or use a newer GCC."
842     die "Active GCC too old!" ;;
843 robbat2 1.125 esac
844     fi
845    
846 robbat2 1.83 # This should come after all of the die statements
847     enewgroup mysql 60 || die "problem adding 'mysql' group"
848     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
849 chtekk 1.39
850 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
851 cardoe 1.67 && use berkdb \
852 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
853 robbat2 1.133
854     if [ "${PN}" != "mysql-cluster" ] && use cluster; then
855     ewarn "Upstream has noted that the NDB cluster support in the 5.0 and"
856     ewarn "5.1 series should NOT be put into production. In the near"
857     ewarn "future, it will be disabled from building."
858     ewarn ""
859     ewarn "If you need NDB support, you should instead move to the new"
860     ewarn "mysql-cluster package that represents that upstream NDB"
861     ewarn "development."
862     fi
863 chtekk 1.30 }
864    
865 robbat2 1.119 # @FUNCTION: mysql_src_unpack
866     # @DESCRIPTION:
867     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
868 chtekk 1.30 mysql_src_unpack() {
869     # Initialize the proper variables first
870     mysql_init_vars
871 vivo 1.1
872 chtekk 1.30 unpack ${A}
873 robbat2 1.86 # Grab the patches
874     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
875 maekke 1.116
876 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
877 robbat2 1.112
878     # Be backwards compatible for now
879 robbat2 1.119 case ${EAPI:-0} in
880     2) : ;;
881     0 | 1) mysql_src_prepare ;;
882     esac
883 robbat2 1.112 }
884    
885 robbat2 1.119 # @FUNCTION: mysql_src_prepare
886     # @DESCRIPTION:
887     # Apply patches to the source code and remove unneeded bundled libs.
888 robbat2 1.112 mysql_src_prepare() {
889 robbat2 1.109 cd "${S}"
890 vivo 1.1
891 chtekk 1.30 # Apply the patches for this MySQL version
892 vivo 1.55 EPATCH_SUFFIX="patch"
893 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
894 robbat2 1.86 # Clean out old items
895     rm -f "${EPATCH_SOURCE}"/*
896     # Now link in right patches
897 vivo 1.55 mysql_mv_patches
898 robbat2 1.86 # And apply
899 chtekk 1.69 epatch
900 vivo 1.1
901 robbat2 1.133 # last -fPIC fixup, per bug #305873
902 robbat2 1.152 i="${S}"/storage/innodb_plugin/plug.in
903 robbat2 1.133 [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}"
904    
905 robbat2 1.149 # Additional checks, remove bundled zlib (Cluster needs this, for static
906     # memory management in zlib, leave available for Cluster)
907     if [[ "${PN}" != "mysql-cluster" ]] ; then
908     rm -f "${S}/zlib/"*.[ch]
909     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
910     fi
911 chtekk 1.30 rm -f "scripts/mysqlbug"
912 vivo 1.1
913     # Make charsets install in the right place
914 vivo 1.37 find . -name 'Makefile.am' \
915     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
916 vivo 1.1
917 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
918 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
919 robbat2 1.122 einfo "Cleaning up old buildscript files"
920 chtekk 1.30 find . -name Makefile \
921     -o -name Makefile.in \
922     -o -name configure \
923     -exec rm -f {} \;
924     rm -f "ltmain.sh"
925 vivo 1.37 rm -f "scripts/mysqlbug"
926 chtekk 1.30 fi
927 vivo 1.1
928 vivo 1.51 local rebuilddirlist d
929 vivo 1.1
930 robbat2 1.137 if xtradb_patch_available && use xtradb ; then
931 robbat2 1.145 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
932     pushd "${S}"/storage >/dev/null
933 robbat2 1.122 i="innobase"
934     o="${WORKDIR}/storage-${i}.mysql-upstream"
935     # Have we been here already?
936 robbat2 1.134 [ -d "${o}" ] && rm -f "${i}"
937 robbat2 1.122 # Or maybe we haven't
938     [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
939 robbat2 1.145 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
940     popd >/dev/null
941     fi
942 robbat2 1.152
943 jmbsvicetto 1.157 if pbxt_patch_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
944 robbat2 1.145 einfo "Adding storage engine: PBXT"
945     pushd "${S}"/storage >/dev/null
946     i='pbxt'
947     [ -d "${i}" ] && rm -rf "${i}"
948     cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
949     popd >/dev/null
950 robbat2 1.122 fi
951    
952 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
953 chtekk 1.42 rebuilddirlist="."
954 robbat2 1.134 # This does not seem to be needed presently. robbat2 2010/02/23
955     #einfo "Updating innobase cmake"
956     ## TODO: check this with a cmake expert
957     #cmake \
958     # -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
959     # -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
960     # "storage/innobase"
961 vivo 1.1 else
962     rebuilddirlist=". innobase"
963     fi
964    
965 chtekk 1.30 for d in ${rebuilddirlist} ; do
966     einfo "Reconfiguring dir '${d}'"
967 vivo 1.4 pushd "${d}" &>/dev/null
968 vapier 1.150 eautoreconf
969 vivo 1.4 popd &>/dev/null
970 vivo 1.1 done
971    
972 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
973 cardoe 1.67 && use berkdb ; then
974 robbat2 1.122 einfo "Fixing up berkdb buildsystem"
975 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
976 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
977     || die "Could not copy libtool.m4 to bdb/dist/"
978 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
979     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
980     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
981     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
982     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
983     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
984     fi
985 chtekk 1.71 pushd "bdb/dist" &>/dev/null
986     sh s_all \
987     || die "Failed bdb reconfigure"
988 vivo 1.4 popd &>/dev/null
989 vivo 1.1 fi
990     }
991    
992 robbat2 1.119 # @FUNCTION: mysql_src_configure
993     # @DESCRIPTION:
994     # Configure mysql to build the code for Gentoo respecting the use flags.
995 robbat2 1.112 mysql_src_configure() {
996 chtekk 1.30 # Make sure the vars are correctly initialized
997     mysql_init_vars
998 vivo 1.1
999 chtekk 1.42 # $myconf is modified by the configure_* functions
1000     local myconf=""
1001 vivo 1.1
1002 cardoe 1.67 if use minimal ; then
1003 chtekk 1.42 configure_minimal
1004 vivo 1.1 else
1005 chtekk 1.42 configure_common
1006 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
1007 chtekk 1.42 configure_51
1008 vivo 1.1 else
1009 chtekk 1.42 configure_40_41_50
1010 vivo 1.1 fi
1011 vivo 1.23 fi
1012    
1013 chtekk 1.30 # Bug #114895, bug #110149
1014 vivo 1.1 filter-flags "-O" "-O[01]"
1015 chtekk 1.30
1016     # glib-2.3.2_pre fix, bug #16496
1017 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
1018    
1019 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
1020     # fail badly during cluster startup.
1021     if [[ $(gcc-major-version) -lt 4 ]]; then
1022     filter-flags "-fstack-protector-all"
1023     fi
1024    
1025 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
1026 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
1027 vivo 1.51 mysql_version_is_at_least "5.0" \
1028 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
1029 chtekk 1.39 export CXXFLAGS
1030 vivo 1.1
1031 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
1032     append-flags -fno-strict-aliasing
1033 robbat2 1.159
1034 robbat2 1.155 # bug #335185, #335995, with >= GCC4.3.3 on x86 only, omit-frame-pointer
1035     # causes a mis-compile.
1036     # Upstream bugs:
1037     # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38562
1038     # http://bugs.mysql.com/bug.php?id=45205
1039     use x86 && version_is_at_least "4.3.3" "$(gcc-fullversion)" && \
1040 robbat2 1.153 append-flags -fno-omit-frame-pointer && \
1041     filter-flags -fomit-frame-pointer
1042 robbat2 1.115
1043 vivo 1.1 econf \
1044     --libexecdir="/usr/sbin" \
1045     --sysconfdir="${MY_SYSCONFDIR}" \
1046     --localstatedir="${MY_LOCALSTATEDIR}" \
1047     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
1048     --libdir="${MY_LIBDIR}" \
1049     --includedir="${MY_INCLUDEDIR}" \
1050     --with-low-memory \
1051     --with-client-ldflags=-lstdc++ \
1052     --enable-thread-safe-client \
1053     --with-comment="Gentoo Linux ${PF}" \
1054     --without-docs \
1055 robbat2 1.159 --with-LIBDIR="$(get_libdir)" \
1056 chtekk 1.39 ${myconf} || die "econf failed"
1057 vivo 1.1
1058 chtekk 1.30 # TODO: Move this before autoreconf !!!
1059 vivo 1.21 find . -type f -name Makefile -print0 \
1060     | xargs -0 -n100 sed -i \
1061     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
1062 vivo 1.1
1063 robbat2 1.145 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
1064 robbat2 1.137 pbxt_patch_available && use pbxt && pbxt_src_configure
1065 robbat2 1.112 fi
1066     }
1067    
1068 robbat2 1.119 # @FUNCTION: mysql_src_compile
1069     # @DESCRIPTION:
1070     # Compile the mysql code.
1071 robbat2 1.112 mysql_src_compile() {
1072     # Be backwards compatible for now
1073 robbat2 1.137 case ${EAPI:-0} in
1074     2) : ;;
1075     0 | 1) mysql_src_configure ;;
1076     esac
1077 robbat2 1.112
1078 chtekk 1.39 emake || die "emake failed"
1079 vivo 1.55
1080 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
1081     pbxt_patch_available && use pbxt && pbxt_src_compile
1082     fi
1083 vivo 1.1 }
1084    
1085 robbat2 1.119 # @FUNCTION: mysql_src_install
1086     # @DESCRIPTION:
1087     # Install mysql.
1088 vivo 1.1 mysql_src_install() {
1089 chtekk 1.30 # Make sure the vars are correctly initialized
1090     mysql_init_vars
1091 vivo 1.1
1092 robbat2 1.133 emake install \
1093     DESTDIR="${D}" \
1094     benchdir_root="${MY_SHAREDSTATEDIR}" \
1095     testroot="${MY_SHAREDSTATEDIR}" \
1096     || die "emake install failed"
1097 vivo 1.55
1098 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
1099     pbxt_patch_available && use pbxt && pbxt_src_install
1100     fi
1101 vivo 1.1
1102 chtekk 1.30 # Convenience links
1103 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
1104 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
1105     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
1106     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
1107 vivo 1.1
1108 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
1109 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
1110 chtekk 1.30 rm -Rf "${D}/usr/share/info"
1111 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
1112     binary-configure* my-*.cnf mi_test_all*
1113     do
1114 robbat2 1.133 rm -f "${D}"/${MY_SHAREDSTATEDIR}/${removeme}
1115 vivo 1.1 done
1116    
1117 chtekk 1.69 # Clean up stuff for a minimal build
1118 cardoe 1.67 if use minimal ; then
1119 robbat2 1.105 einfo "Remove all extra content for minimal build"
1120 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
1121     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}
1122 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
1123 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
1124 vivo 1.1 fi
1125    
1126 robbat2 1.133 # Unless they explicitly specific USE=test, then do not install the
1127     # testsuite. It DOES have a use to be installed, esp. when you want to do a
1128     # validation of your database configuration after tuning it.
1129     if use !test ; then
1130     rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
1131     fi
1132    
1133 chtekk 1.30 # Configuration stuff
1134 robbat2 1.152 case ${MYSQL_PV_MAJOR} in
1135     3*|4.0) mysql_mycnf_version="4.0" ;;
1136     4.[1-9]|5.0) mysql_mycnf_version="4.1" ;;
1137     5.[1-9]|6*|7*) mysql_mycnf_version="5.1" ;;
1138     esac
1139     einfo "Building default my.cnf (${mysql_mycnf_version})"
1140 vivo 1.1 insinto "${MY_SYSCONFDIR}"
1141 vivo 1.55 doins scripts/mysqlaccess.conf
1142 robbat2 1.152 mycnf_src="my.cnf-${mysql_mycnf_version}"
1143 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
1144 robbat2 1.152 "${FILESDIR}/${mycnf_src}" \
1145 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
1146 robbat2 1.152 if use latin1 ; then
1147 robbat2 1.140 sed -i \
1148     -e "/character-set/s|utf8|latin1|g" \
1149     "${TMPDIR}/my.cnf.ok"
1150 chtekk 1.30 fi
1151 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
1152    
1153 chtekk 1.30 # Minimal builds don't have the MySQL server
1154 cardoe 1.67 if ! use minimal ; then
1155 robbat2 1.105 einfo "Creating initial directories"
1156 chtekk 1.30 # Empty directories ...
1157 vivo 1.1 diropts "-m0750"
1158     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
1159 robbat2 1.75 dodir "${MY_DATADIR}"
1160     keepdir "${MY_DATADIR}"
1161     chown -R mysql:mysql "${D}/${MY_DATADIR}"
1162 vivo 1.1 fi
1163    
1164     diropts "-m0755"
1165     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
1166     dodir "${folder}"
1167     keepdir "${folder}"
1168     chown -R mysql:mysql "${D}/${folder}"
1169     done
1170     fi
1171    
1172 chtekk 1.30 # Docs
1173 robbat2 1.105 einfo "Installing docs"
1174 robbat2 1.160 for i in README ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE ; do
1175     [[ -f "$i" ]] && dodoc "$i"
1176     done
1177 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
1178 chtekk 1.30
1179     # Minimal builds don't have the MySQL server
1180 cardoe 1.67 if ! use minimal ; then
1181 robbat2 1.105 einfo "Including support files and sample configurations"
1182 vivo 1.1 docinto "support-files"
1183     for script in \
1184 robbat2 1.92 "${S}"/support-files/my-*.cnf \
1185     "${S}"/support-files/magic \
1186     "${S}"/support-files/ndb-config-2-node.ini
1187 vivo 1.1 do
1188 robbat2 1.134 [[ -f "$script" ]] && dodoc "${script}"
1189 vivo 1.1 done
1190    
1191     docinto "scripts"
1192 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
1193 robbat2 1.134 [[ -f "$script" ]] && [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
1194 vivo 1.1 done
1195 robbat2 1.78
1196 vivo 1.1 fi
1197 vivo 1.4
1198 vivo 1.58 mysql_lib_symlinks "${D}"
1199 vivo 1.15 }
1200    
1201 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
1202     # @DESCRIPTION:
1203     # Create the user and groups for mysql - die if that fails.
1204 vivo 1.15 mysql_pkg_preinst() {
1205 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
1206     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
1207 vivo 1.1 }
1208    
1209 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
1210     # @DESCRIPTION:
1211     # Run post-installation tasks:
1212     # create the dir for logfiles if non-existant
1213     # touch the logfiles and secure them
1214     # install scripts
1215     # issue required steps for optional features
1216     # issue deprecation warnings
1217 vivo 1.1 mysql_pkg_postinst() {
1218 chtekk 1.30 # Make sure the vars are correctly initialized
1219 vivo 1.1 mysql_init_vars
1220    
1221 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
1222 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
1223 vivo 1.1
1224 chtekk 1.30 # Secure the logfiles
1225 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
1226     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
1227     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
1228    
1229 vivo 1.55 # Minimal builds don't have the MySQL server
1230 cardoe 1.67 if ! use minimal ; then
1231 vivo 1.55 docinto "support-files"
1232     for script in \
1233     support-files/my-*.cnf \
1234     support-files/magic \
1235     support-files/ndb-config-2-node.ini
1236     do
1237 robbat2 1.137 [[ -f "${script}" ]] \
1238     && dodoc "${script}"
1239 vivo 1.55 done
1240    
1241     docinto "scripts"
1242     for script in scripts/mysql* ; do
1243 robbat2 1.137 [[ -f "${script}" ]] \
1244     && [[ "${script%.sh}" == "${script}" ]] \
1245     && dodoc "${script}"
1246 vivo 1.55 done
1247 chtekk 1.69
1248     einfo
1249     elog "You might want to run:"
1250     elog "\"emerge --config =${CATEGORY}/${PF}\""
1251     elog "if this is a new install."
1252     einfo
1253 robbat2 1.151
1254     einfo
1255     elog "If you are upgrading major versions, you should run the"
1256     elog "mysql_upgrade tool."
1257     einfo
1258 vivo 1.55 fi
1259    
1260 robbat2 1.137 if pbxt_available && use pbxt ; then
1261 chtekk 1.69 # TODO: explain it better
1262     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
1263     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
1264     elog "if, after that, you cannot start the MySQL server,"
1265 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
1266 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
1267     elog "or execute the following SQL command:"
1268     elog " CREATE TABLE IF NOT EXISTS plugin ("
1269     elog " name char(64) binary DEFAULT '' NOT NULL,"
1270     elog " dl char(128) DEFAULT '' NOT NULL,"
1271     elog " PRIMARY KEY (name)"
1272     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
1273 vivo 1.4 fi
1274 chtekk 1.69
1275 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
1276 cardoe 1.67 && use berkdb \
1277 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
1278 vivo 1.1 }
1279    
1280 robbat2 1.119 # @FUNCTION: mysql_pkg_config
1281     # @DESCRIPTION:
1282     # Configure mysql environment.
1283 vivo 1.1 mysql_pkg_config() {
1284 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
1285    
1286 chtekk 1.30 # Make sure the vars are correctly initialized
1287 vivo 1.1 mysql_init_vars
1288    
1289 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
1290 chtekk 1.30
1291 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
1292 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
1293     fi
1294    
1295 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
1296     local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
1297     local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
1298    
1299     if [[ -d "${old_MY_DATADIR_s}" ]]; then
1300     if [[ -d "${MY_DATADIR_s}" ]]; then
1301     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
1302     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
1303     else
1304     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
1305     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
1306     || die "Moving MY_DATADIR failed"
1307     fi
1308     else
1309     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
1310     if [[ -d "${MY_DATADIR_s}" ]]; then
1311     ewarn "Attempting to use ${MY_DATADIR_s}"
1312     else
1313     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
1314     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
1315 maekke 1.116 fi
1316 robbat2 1.111 fi
1317     fi
1318    
1319 vivo 1.1 local pwd1="a"
1320     local pwd2="b"
1321 robbat2 1.140 local maxtry=15
1322 vivo 1.1
1323 robbat2 1.141 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1324     MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1325     fi
1326    
1327 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1328 vivo 1.1 ewarn "You have already a MySQL database in place."
1329 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1330 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
1331     die "MySQL database already exists!"
1332     fi
1333    
1334 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1335     # localhost. Also causes weird failures.
1336     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1337    
1338 robbat2 1.140 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1339 vivo 1.1
1340 jmbsvicetto 1.157 einfo "Please provide a password for the mysql 'root' user now, in the"
1341     einfo "MYSQL_ROOT_PASSWORD env var or through the /root/.my.cnf file."
1342 robbat2 1.140 ewarn "Avoid [\"'\\_%] characters in the password"
1343     read -rsp " >" pwd1 ; echo
1344 vivo 1.1
1345 robbat2 1.140 einfo "Retype the password"
1346     read -rsp " >" pwd2 ; echo
1347 vivo 1.1
1348 robbat2 1.140 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1349     die "Passwords are not the same"
1350     fi
1351     MYSQL_ROOT_PASSWORD="${pwd1}"
1352     unset pwd1 pwd2
1353 vivo 1.1 fi
1354    
1355     local options=""
1356     local sqltmp="$(emktemp)"
1357    
1358 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1359 vivo 1.1 [[ -r "${help_tables}" ]] \
1360 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1361 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1362     help_tables="${TMPDIR}/fill_help_tables.sql"
1363    
1364 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1365 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1366     if [ $? -ne 0 ]; then
1367     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1368     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1369     fi
1370 vivo 1.4 popd &>/dev/null
1371 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1372 vivo 1.26 || die "MySQL databases not installed"
1373 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1374     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1375 vivo 1.1
1376 robbat2 1.140 # Figure out which options we need to disable to do the setup
1377     helpfile="${TMPDIR}/mysqld-help"
1378     ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1379     for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1380     federated innodb ssl log-bin relay-log slow-query-log external-locking \
1381 robbat2 1.149 ndbcluster \
1382 robbat2 1.140 ; do
1383     optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1384     egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1385     done
1386     # But some options changed names
1387     egrep -sq external-locking "${helpfile}" && \
1388     options="${options/skip-locking/skip-external-locking}"
1389    
1390 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1391 vivo 1.1 # Filling timezones, see
1392     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1393 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1394 vivo 1.1
1395     if [[ -r "${help_tables}" ]] ; then
1396     cat "${help_tables}" >> "${sqltmp}"
1397     fi
1398     fi
1399 robbat2 1.152
1400 robbat2 1.140 einfo "Creating the mysql database and setting proper"
1401     einfo "permissions on it ..."
1402 vivo 1.1
1403 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1404     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1405 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
1406 vivo 1.1 ${options} \
1407     --user=mysql \
1408     --basedir=${ROOT}/usr \
1409 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1410 vivo 1.1 --max_allowed_packet=8M \
1411     --net_buffer_length=16K \
1412 robbat2 1.143 --default-storage-engine=MyISAM \
1413 vivo 1.1 --socket=${socket} \
1414     --pid-file=${pidfile}"
1415 robbat2 1.140 #einfo "About to start mysqld: ${mysqld}"
1416     ebegin "Starting mysqld"
1417 chtekk 1.30 ${mysqld} &
1418 robbat2 1.140 rc=$?
1419 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1420 chtekk 1.30 maxtry=$((${maxtry}-1))
1421 vivo 1.1 echo -n "."
1422     sleep 1
1423     done
1424 robbat2 1.140 eend $rc
1425    
1426     if ! [[ -S "${socket}" ]]; then
1427     die "Completely failed to start up mysqld with: ${mysqld}"
1428     fi
1429 vivo 1.1
1430 robbat2 1.140 ebegin "Setting root password"
1431 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1432 robbat2 1.140 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1433 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1434 vivo 1.1 --socket=${socket} \
1435     -hlocalhost \
1436     -e "${sql}"
1437 robbat2 1.140 eend $?
1438 vivo 1.1
1439 robbat2 1.140 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1440 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1441 vivo 1.1 --socket=${socket} \
1442     -hlocalhost \
1443     -uroot \
1444 robbat2 1.140 -p"${MYSQL_ROOT_PASSWORD}" \
1445 vivo 1.1 mysql < "${sqltmp}"
1446 robbat2 1.140 rc=$?
1447     eend $?
1448     [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1449 vivo 1.1
1450 chtekk 1.30 # Stop the server and cleanup
1451 robbat2 1.140 einfo "Stopping the server ..."
1452 vivo 1.1 kill $(< "${pidfile}" )
1453 chtekk 1.30 rm -f "${sqltmp}"
1454 vivo 1.1 wait %1
1455 chtekk 1.30 einfo "Done"
1456 vivo 1.1 }
1457    
1458 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1459     # @DESCRIPTION:
1460     # Remove mysql symlinks.
1461 vivo 1.1 mysql_pkg_postrm() {
1462 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1463 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20