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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.156 - (hide annotations) (download)
Sun Nov 28 21:55:54 2010 UTC (3 years, 4 months ago) by robbat2
Branch: MAIN
Changes since 1.155: +8 -1 lines
Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51

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

  ViewVC Help
Powered by ViewVC 1.1.20