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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.166 - (hide annotations) (download)
Sun Sep 25 12:43:28 2011 UTC (2 years, 6 months ago) by grobian
Branch: MAIN
Changes since 1.165: +3 -2 lines
mysql: don't depend on mysql-init-script in Prefix

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

  ViewVC Help
Powered by ViewVC 1.1.20