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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.163 - (hide annotations) (download)
Sun Aug 21 16:14:56 2011 UTC (2 years, 10 months ago) by jmbsvicetto
Branch: MAIN
Changes since 1.162: +4 -2 lines
[eclass] Move virtual/yacc dependency so that it's not added to RDEPEND. Fixes bug 379937.

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

  ViewVC Help
Powered by ViewVC 1.1.20