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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.162 - (hide annotations) (download)
Fri Aug 19 20:06:12 2011 UTC (3 years, 2 months ago) by jmbsvicetto
Branch: MAIN
Changes since 1.161: +3 -2 lines
[eclass] Added virtual/yacc dependency - fixes bug 376773.

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

  ViewVC Help
Powered by ViewVC 1.1.20