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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.174 - (hide annotations) (download)
Mon Sep 10 02:07:08 2012 UTC (23 months, 2 weeks ago) by ferringb
Branch: MAIN
Changes since 1.173: +5 -3 lines
drop usage of strip_duplicate_slashes (it's a portage internal)

1 jmbsvicetto 1.167 # Copyright 1999-2012 Gentoo Foundation
2 vivo 1.1 # Distributed under the terms of the GNU General Public License v2
3 ferringb 1.174 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.173 2012/07/31 16:57:29 robbat2 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 zmedico 1.171 inherit eutils flag-o-matic gnuconfig autotools multilib 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 jmbsvicetto 1.172 inherit git-2
33 robbat2 1.126 fi
34    
35 robbat2 1.113 case "${EAPI:-0}" in
36 jmbsvicetto 1.168 2 | 3 | 4)
37 robbat2 1.113 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 jmbsvicetto 1.167 kernel_linux? ( sys-process/procps )
131 vivo 1.60 >=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.172 DEPEND="${DEPEND} static? ( sys-libs/ncurses[static-libs] )"
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 jmbsvicetto 1.167 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="${EPREFIX}/usr/share/mysql"}
368     MY_SYSCONFDIR=${MY_SYSCONFDIR="${EPREFIX}/etc/mysql"}
369     MY_LIBDIR=${MY_LIBDIR="${EPREFIX}/usr/$(get_libdir)/mysql"}
370     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="${EPREFIX}/var/lib/mysql"}
371     MY_LOGDIR=${MY_LOGDIR="${EPREFIX}/var/log/mysql"}
372     MY_INCLUDEDIR=${MY_INCLUDEDIR="${EPREFIX}/usr/include/mysql"}
373 vivo 1.8
374 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
375     MY_DATADIR=""
376 jmbsvicetto 1.167 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 jmbsvicetto 1.167 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 jmbsvicetto 1.167 myconf="${myconf} --with-unix-socket-path=${EPREFIX}/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 jmbsvicetto 1.167 myconf="${myconf} --with-zlib-dir=${EPREFIX}/usr"
509 vivo 1.37 myconf="${myconf} $(use_with perl bench)"
510     myconf="${myconf} --enable-assembler"
511     myconf="${myconf} --with-extra-tools"
512     myconf="${myconf} --with-innodb"
513     myconf="${myconf} --without-readline"
514 jmbsvicetto 1.167 myconf="${myconf} $(use_with ssl openssl "${EPREFIX}/usr")"
515 vivo 1.51 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
516 vivo 1.37
517 chtekk 1.69 # --with-vio is not needed anymore, it's on by default and
518     # has been removed from configure
519 robbat2 1.136 # Apply to 4.x and 5.0.[0-3]
520 cardoe 1.67 if use ssl ; then
521 chtekk 1.69 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
522 vivo 1.62 fi
523    
524 robbat2 1.98 if mysql_version_is_at_least "5.0.60" ; then
525     if use berkdb ; then
526     elog "Berkeley DB support was disabled due to build failures"
527     elog "on multiple arches, go to a version earlier than 5.0.60"
528     elog "if you want it again. Gentoo bug #224067."
529     fi
530     myconf="${myconf} --without-berkeley-db"
531     elif use berkdb ; then
532 chtekk 1.77 # The following fix is due to a bug with bdb on SPARC's. See:
533     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
534     # It comes down to non-64-bit safety problems.
535 cardoe 1.76 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
536 chtekk 1.77 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
537 cardoe 1.76 myconf="${myconf} --without-berkeley-db"
538     else
539 chtekk 1.39 myconf="${myconf} --with-berkeley-db=./bdb"
540     fi
541 cardoe 1.76 else
542     myconf="${myconf} --without-berkeley-db"
543 vivo 1.37 fi
544    
545 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
546 vivo 1.37 myconf="${myconf} --with-geometry"
547 robbat2 1.149 if [[ "${PN}" != "mysql-cluster" ]] ; then
548     myconf="${myconf} $(use_with cluster ndbcluster)"
549     fi
550 vivo 1.37 fi
551    
552 cardoe 1.67 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
553 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
554     myconf="${myconf} --with-archive-storage-engine"
555    
556     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
557     myconf="${myconf} --with-csv-storage-engine"
558    
559     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
560     myconf="${myconf} --with-blackhole-storage-engine"
561    
562     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
563     # http://dev.mysql.com/doc/mysql/en/federated-description.html
564     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
565 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
566 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
567     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
568 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
569     fi
570     fi
571    
572 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
573     myconf="${myconf} `use_enable community community-features`"
574     if use community; then
575     myconf="${myconf} `use_enable profiling`"
576     else
577     myconf="${myconf} --disable-profiling"
578     fi
579 robbat2 1.99 fi
580    
581 vivo 1.51 mysql_version_is_at_least "5.0.18" \
582 cardoe 1.67 && use max-idx-128 \
583 vivo 1.37 && myconf="${myconf} --with-max-indexes=128"
584     }
585    
586 chtekk 1.39 configure_51() {
587 chtekk 1.40 # TODO: !!!! readd --without-readline
588 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
589 vivo 1.37 # readline.h instead of history.h
590 jmbsvicetto 1.167 myconf="${myconf} $(use_with ssl ssl "${EPREFIX}"/usr)"
591 vivo 1.37 myconf="${myconf} --enable-assembler"
592     myconf="${myconf} --with-geometry"
593     myconf="${myconf} --with-readline"
594 jmbsvicetto 1.167 myconf="${myconf} --with-zlib-dir=${EPREFIX}/usr/"
595 vivo 1.37 myconf="${myconf} --without-pstack"
596 jmbsvicetto 1.167 myconf="${myconf} --with-plugindir=${EPREFIX}/usr/$(get_libdir)/mysql/plugin"
597 robbat2 1.145
598 robbat2 1.154 # This is an explict die here, because if we just forcibly disable it, then the
599     # user's data is not accessible.
600     use max-idx-128 && die "Bug #336027: upstream has a corruption issue with max-idx-128 presently"
601     #use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
602 robbat2 1.136 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
603     myconf="${myconf} $(use_enable community community-features)"
604     if use community; then
605     myconf="${myconf} $(use_enable profiling)"
606     else
607     myconf="${myconf} --disable-profiling"
608     fi
609     fi
610 chtekk 1.39
611 robbat2 1.145 # Scan for all available plugins
612     local plugins_avail="$(
613     LANG=C \
614     find "${S}" \
615     \( \
616     -name 'plug.in' \
617     -o -iname 'configure.in' \
618     -o -iname 'configure.ac' \
619     \) \
620     -print0 \
621     | xargs -0 sed -r -n \
622     -e '/^MYSQL_STORAGE_ENGINE/{
623     s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ;
624 vapier 1.165 s~^([^ ]+).*~\1~gp;
625 robbat2 1.145 }' \
626     | tr -s '\n' ' '
627     )"
628    
629 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
630     # like configuration=none
631 robbat2 1.139 # This base set are required, and will always be statically built.
632 robbat2 1.145 local plugins_sta="csv myisam myisammrg heap"
633     local plugins_dyn=""
634     local plugins_dis="example ibmdb2i"
635    
636     # These aren't actually required by the base set, but are really useful:
637     plugins_sta="${plugins_sta} archive blackhole"
638    
639     # default in 5.5.4
640     if mysql_version_is_at_least "5.5.4" ; then
641     plugins_sta="${plugins_sta} partition"
642     fi
643     # Now the extras
644 cardoe 1.67 if use extraengine ; then
645 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
646 robbat2 1.129 # not added yet: ibmdb2i
647 jmbsvicetto 1.157 # Not supporting as examples: example,daemon_example,ftexample
648 robbat2 1.145 plugins_sta="${plugins_sta} partition"
649 vivo 1.37
650 robbat2 1.137 if [[ "${PN}" != "mariadb" ]] ; then
651     elog "Before using the Federated storage engine, please be sure to read"
652     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
653 jmbsvicetto 1.157 plugins_dyn="${plugins_sta} federated"
654 robbat2 1.137 else
655     elog "MariaDB includes the FederatedX engine. Be sure to read"
656     elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
657 jmbsvicetto 1.157 plugins_dyn="${plugins_sta} federatedx"
658 robbat2 1.137 fi
659 robbat2 1.145 else
660     plugins_dis="${plugins_dis} partition federated"
661 vivo 1.37 fi
662    
663 robbat2 1.130 # Upstream specifically requests that InnoDB always be built:
664     # - innobase, innodb_plugin
665     # Build falcon if available for 6.x series.
666 robbat2 1.145 for i in innobase falcon ; do
667     [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
668     done
669     for i in innodb_plugin ; do
670     [ -e "${S}"/storage/${i} ] && plugins_dyn="${plugins_dyn} ${i}"
671 robbat2 1.130 done
672 vivo 1.37
673     # like configuration=max-no-ndb
674 robbat2 1.149 if ( use cluster || [[ "${PN}" == "mysql-cluster" ]] ) ; then
675 robbat2 1.146 plugins_sta="${plugins_sta} ndbcluster partition"
676     plugins_dis="${plugins_dis//partition}"
677 vivo 1.37 myconf="${myconf} --with-ndb-binlog"
678 robbat2 1.145 else
679     plugins_dis="${plugins_dis} ndbcluster"
680 vivo 1.37 fi
681    
682 robbat2 1.137 if [[ "${PN}" == "mariadb" ]] ; then
683     # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
684     # caught above.
685 jmbsvicetto 1.157 # This is not optional, without it several upstream testcases fail.
686     # Also strongly recommended by upstream.
687     if [[ "${PV}" < "5.2.0" ]] ; then
688     myconf="${myconf} --with-maria-tmp-tables"
689     plugins_sta="${plugins_sta} maria"
690     else
691     myconf="${myconf} --with-aria-tmp-tables"
692     plugins_sta="${plugins_sta} aria"
693     fi
694 robbat2 1.152
695     [ -e "${S}"/storage/innobase ] || [ -e "${S}"/storage/xtradb ] ||
696     die "The ${P} package doesn't provide innobase nor xtradb"
697    
698     for i in innobase xtradb ; do
699     [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
700     done
701    
702 robbat2 1.137 myconf="${myconf} $(use_with libevent)"
703 jmbsvicetto 1.157
704     if mysql_version_is_at_least "5.2" ; then
705     #This should include sphinx, but the 5.2.4 archive forgot the plug.in file
706     #for i in oqgraph sphinx ; do
707     for i in oqgraph ; do
708     use ${i} \
709     && plugins_dyn="${plugins_dyn} ${i}" \
710     || plugins_dis="${plugins_dis} ${i}"
711     done
712     fi
713 robbat2 1.137 fi
714 robbat2 1.152
715 robbat2 1.145 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
716     use pbxt \
717     && plugins_dyn="${plugins_dyn} pbxt" \
718     || plugins_dis="${plugins_dis} pbxt"
719     fi
720 robbat2 1.137
721 robbat2 1.145 use static && \
722     plugins_sta="${plugins_sta} ${plugins_dyn}" && \
723     plugins_dyn=""
724 robbat2 1.152
725 robbat2 1.145 einfo "Available plugins: ${plugins_avail}"
726     einfo "Dynamic plugins: ${plugins_dyn}"
727     einfo "Static plugins: ${plugins_sta}"
728     einfo "Disabled plugins: ${plugins_dis}"
729    
730     # These are the static plugins
731     myconf="${myconf} --with-plugins=${plugins_sta// /,}"
732     # And the disabled ones
733     for i in ${plugins_dis} ; do
734     myconf="${myconf} --without-plugin-${i}"
735     done
736 vivo 1.37 }
737    
738 robbat2 1.112 pbxt_src_configure() {
739 vivo 1.51 mysql_init_vars
740    
741     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
742    
743     einfo "Reconfiguring dir '${PWD}'"
744 vapier 1.150 eautoreconf
745 vivo 1.51
746 chtekk 1.69 local myconf=""
747 jmbsvicetto 1.167 myconf="${myconf} --with-mysql=${S} --libdir=${EPREFIX}/usr/$(get_libdir)"
748 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
749 robbat2 1.138 econf ${myconf} || die "Problem configuring PBXT storage engine"
750 robbat2 1.112 }
751    
752     pbxt_src_compile() {
753 robbat2 1.145
754 robbat2 1.112 # Be backwards compatible for now
755     if [[ $EAPI != 2 ]]; then
756     pbxt_src_configure
757     fi
758 chtekk 1.69 # TODO: is it safe/needed to use emake here ?
759     make || die "Problem making PBXT storage engine (${myconf})"
760 vivo 1.51
761     popd
762 chtekk 1.69 # TODO: modify test suite for PBXT
763 vivo 1.51 }
764    
765     pbxt_src_install() {
766     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
767 robbat2 1.134 emake install DESTDIR="${D}" || die "Failed to install PBXT"
768 vivo 1.51 popd
769     }
770    
771 vivo 1.37 #
772     # EBUILD FUNCTIONS
773     #
774 robbat2 1.119 # @FUNCTION: mysql_pkg_setup
775     # @DESCRIPTION:
776     # Perform some basic tests and tasks during pkg_setup phase:
777     # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
778     # check for conflicting use flags
779     # create new user and group for mysql
780     # warn about deprecated features
781 vivo 1.1 mysql_pkg_setup() {
782 ssuominen 1.161 if has test ${FEATURES} ; then
783 robbat2 1.83 if ! use minimal ; then
784 robbat2 1.91 if [[ $UID -eq 0 ]]; then
785 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
786 robbat2 1.83 fi
787     fi
788     fi
789 swegener 1.53
790 jmbsvicetto 1.157 # bug 350844
791     case "${EAPI:-0}" in
792     0 | 1)
793 robbat2 1.173 if use static && ! built_with_use sys-libs/ncurses static-libs; then
794 jmbsvicetto 1.157 die "To build MySQL statically you need to enable static-libs for sys-libs/ncurses"
795     fi
796     ;;
797     esac
798    
799 chtekk 1.30 # Check for USE flag problems in pkg_setup
800 cardoe 1.67 if use static && use ssl ; then
801 robbat2 1.145 M="MySQL does not support being built statically with SSL support enabled!"
802     eerror "${M}"
803     die "${M}"
804 chtekk 1.30 fi
805 vivo 1.1
806 robbat2 1.156 if mysql_version_is_at_least "5.1.51" \
807     && ! mysql_version_is_at_least "5.2" \
808     && use debug ; then
809     # Also in package.use.mask
810     die "Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51"
811     fi
812    
813 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
814 cardoe 1.67 && use raid \
815     && use static ; then
816 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
817     eerror "with RAID support enabled."
818     die "USE flags 'raid' and 'static' conflict!"
819 vivo 1.1 fi
820    
821 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
822 robbat2 1.145 && ( use cluster || use extraengine || use embedded ) \
823 cardoe 1.67 && use minimal ; then
824 robbat2 1.145 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
825     eerror "${M}"
826     die "${M}"
827     fi
828 robbat2 1.152
829 robbat2 1.145 if mysql_version_is_at_least "5.1" \
830     && xtradb_patch_available \
831     && use xtradb \
832     && use embedded ; then
833     M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
834     eerror "${M}"
835     die "${M}"
836 vivo 1.1 fi
837 maekke 1.103
838 robbat2 1.144 # Bug #290570, 284946, 307251
839     # Upstream changes made us need a fairly new GCC4.
840     # But only for 5.0.8[3-6]!
841     if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
842 robbat2 1.127 GCC_VER=$(gcc-version)
843 jmbsvicetto 1.167 case ${CHOST}:${GCC_VER} in
844     *-darwin*:4.*) : ;; # bug #310615
845     *:2*|*:3*|*:4.0|*:4.1|*:4.2)
846 robbat2 1.144 eerror "Some releases of MySQL required a very new GCC, and then"
847     eerror "later release relaxed that requirement again. Either pick a"
848     eerror "MySQL >=5.0.87, or use a newer GCC."
849     die "Active GCC too old!" ;;
850 robbat2 1.125 esac
851     fi
852    
853 robbat2 1.83 # This should come after all of the die statements
854     enewgroup mysql 60 || die "problem adding 'mysql' group"
855     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
856 chtekk 1.39
857 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
858 cardoe 1.67 && use berkdb \
859 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
860 robbat2 1.133
861     if [ "${PN}" != "mysql-cluster" ] && use cluster; then
862     ewarn "Upstream has noted that the NDB cluster support in the 5.0 and"
863     ewarn "5.1 series should NOT be put into production. In the near"
864     ewarn "future, it will be disabled from building."
865     ewarn ""
866     ewarn "If you need NDB support, you should instead move to the new"
867     ewarn "mysql-cluster package that represents that upstream NDB"
868     ewarn "development."
869     fi
870 chtekk 1.30 }
871    
872 robbat2 1.119 # @FUNCTION: mysql_src_unpack
873     # @DESCRIPTION:
874     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
875 chtekk 1.30 mysql_src_unpack() {
876     # Initialize the proper variables first
877     mysql_init_vars
878 vivo 1.1
879 chtekk 1.30 unpack ${A}
880 robbat2 1.86 # Grab the patches
881     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
882 maekke 1.116
883 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
884 robbat2 1.112
885     # Be backwards compatible for now
886 robbat2 1.119 case ${EAPI:-0} in
887     2) : ;;
888     0 | 1) mysql_src_prepare ;;
889     esac
890 robbat2 1.112 }
891    
892 robbat2 1.119 # @FUNCTION: mysql_src_prepare
893     # @DESCRIPTION:
894     # Apply patches to the source code and remove unneeded bundled libs.
895 robbat2 1.112 mysql_src_prepare() {
896 robbat2 1.109 cd "${S}"
897 vivo 1.1
898 chtekk 1.30 # Apply the patches for this MySQL version
899 vivo 1.55 EPATCH_SUFFIX="patch"
900 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
901 robbat2 1.86 # Clean out old items
902     rm -f "${EPATCH_SOURCE}"/*
903     # Now link in right patches
904 vivo 1.55 mysql_mv_patches
905 robbat2 1.86 # And apply
906 chtekk 1.69 epatch
907 vivo 1.1
908 robbat2 1.133 # last -fPIC fixup, per bug #305873
909 robbat2 1.152 i="${S}"/storage/innodb_plugin/plug.in
910 robbat2 1.133 [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}"
911    
912 robbat2 1.149 # Additional checks, remove bundled zlib (Cluster needs this, for static
913     # memory management in zlib, leave available for Cluster)
914     if [[ "${PN}" != "mysql-cluster" ]] ; then
915     rm -f "${S}/zlib/"*.[ch]
916     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
917     fi
918 chtekk 1.30 rm -f "scripts/mysqlbug"
919 vivo 1.1
920     # Make charsets install in the right place
921 vivo 1.37 find . -name 'Makefile.am' \
922     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
923 vivo 1.1
924 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
925 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
926 robbat2 1.122 einfo "Cleaning up old buildscript files"
927 chtekk 1.30 find . -name Makefile \
928     -o -name Makefile.in \
929     -o -name configure \
930     -exec rm -f {} \;
931     rm -f "ltmain.sh"
932 vivo 1.37 rm -f "scripts/mysqlbug"
933 chtekk 1.30 fi
934 vivo 1.1
935 vivo 1.51 local rebuilddirlist d
936 vivo 1.1
937 robbat2 1.137 if xtradb_patch_available && use xtradb ; then
938 robbat2 1.145 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
939     pushd "${S}"/storage >/dev/null
940 robbat2 1.122 i="innobase"
941     o="${WORKDIR}/storage-${i}.mysql-upstream"
942     # Have we been here already?
943 robbat2 1.134 [ -d "${o}" ] && rm -f "${i}"
944 robbat2 1.122 # Or maybe we haven't
945     [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
946 robbat2 1.145 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
947     popd >/dev/null
948     fi
949 robbat2 1.152
950 jmbsvicetto 1.157 if pbxt_patch_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
951 robbat2 1.145 einfo "Adding storage engine: PBXT"
952     pushd "${S}"/storage >/dev/null
953     i='pbxt'
954     [ -d "${i}" ] && rm -rf "${i}"
955     cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
956     popd >/dev/null
957 robbat2 1.122 fi
958    
959 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
960 chtekk 1.42 rebuilddirlist="."
961 robbat2 1.134 # This does not seem to be needed presently. robbat2 2010/02/23
962     #einfo "Updating innobase cmake"
963     ## TODO: check this with a cmake expert
964     #cmake \
965     # -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
966     # -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
967     # "storage/innobase"
968 vivo 1.1 else
969     rebuilddirlist=". innobase"
970     fi
971    
972 chtekk 1.30 for d in ${rebuilddirlist} ; do
973     einfo "Reconfiguring dir '${d}'"
974 vivo 1.4 pushd "${d}" &>/dev/null
975 vapier 1.150 eautoreconf
976 vivo 1.4 popd &>/dev/null
977 vivo 1.1 done
978    
979 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
980 cardoe 1.67 && use berkdb ; then
981 robbat2 1.122 einfo "Fixing up berkdb buildsystem"
982 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
983 jmbsvicetto 1.167 cp -f "${EPREFIX}/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
984 chtekk 1.71 || die "Could not copy libtool.m4 to bdb/dist/"
985 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
986 jmbsvicetto 1.167 if [ -f ${EPREFIX}'/usr/share/aclocal/ltsugar.m4' ]; then
987     cat "${EPREFIX}/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
988     cat "${EPREFIX}/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
989     cat "${EPREFIX}/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
990     cat "${EPREFIX}/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
991 betelgeuse 1.97 fi
992 chtekk 1.71 pushd "bdb/dist" &>/dev/null
993     sh s_all \
994     || die "Failed bdb reconfigure"
995 vivo 1.4 popd &>/dev/null
996 vivo 1.1 fi
997     }
998    
999 robbat2 1.119 # @FUNCTION: mysql_src_configure
1000     # @DESCRIPTION:
1001     # Configure mysql to build the code for Gentoo respecting the use flags.
1002 robbat2 1.112 mysql_src_configure() {
1003 chtekk 1.30 # Make sure the vars are correctly initialized
1004     mysql_init_vars
1005 vivo 1.1
1006 chtekk 1.42 # $myconf is modified by the configure_* functions
1007     local myconf=""
1008 vivo 1.1
1009 cardoe 1.67 if use minimal ; then
1010 chtekk 1.42 configure_minimal
1011 vivo 1.1 else
1012 chtekk 1.42 configure_common
1013 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
1014 chtekk 1.42 configure_51
1015 vivo 1.1 else
1016 chtekk 1.42 configure_40_41_50
1017 vivo 1.1 fi
1018 vivo 1.23 fi
1019    
1020 chtekk 1.30 # Bug #114895, bug #110149
1021 vivo 1.1 filter-flags "-O" "-O[01]"
1022 chtekk 1.30
1023     # glib-2.3.2_pre fix, bug #16496
1024 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
1025    
1026 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
1027     # fail badly during cluster startup.
1028     if [[ $(gcc-major-version) -lt 4 ]]; then
1029     filter-flags "-fstack-protector-all"
1030     fi
1031    
1032 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
1033 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
1034 vivo 1.51 mysql_version_is_at_least "5.0" \
1035 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
1036 chtekk 1.39 export CXXFLAGS
1037 vivo 1.1
1038 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
1039     append-flags -fno-strict-aliasing
1040 robbat2 1.159
1041 robbat2 1.155 # bug #335185, #335995, with >= GCC4.3.3 on x86 only, omit-frame-pointer
1042     # causes a mis-compile.
1043     # Upstream bugs:
1044     # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38562
1045     # http://bugs.mysql.com/bug.php?id=45205
1046     use x86 && version_is_at_least "4.3.3" "$(gcc-fullversion)" && \
1047 robbat2 1.153 append-flags -fno-omit-frame-pointer && \
1048     filter-flags -fomit-frame-pointer
1049 robbat2 1.115
1050 vivo 1.1 econf \
1051 jmbsvicetto 1.167 --libexecdir="${EPREFIX}"/usr/sbin \
1052     --sysconfdir=${MY_SYSCONFDIR} \
1053     --localstatedir=${MY_LOCALSTATEDIR} \
1054     --sharedstatedir=${MY_SHAREDSTATEDIR} \
1055     --libdir=${MY_LIBDIR} \
1056     --includedir=${MY_INCLUDEDIR} \
1057 vivo 1.1 --with-low-memory \
1058     --with-client-ldflags=-lstdc++ \
1059     --enable-thread-safe-client \
1060     --with-comment="Gentoo Linux ${PF}" \
1061     --without-docs \
1062 robbat2 1.159 --with-LIBDIR="$(get_libdir)" \
1063 chtekk 1.39 ${myconf} || die "econf failed"
1064 vivo 1.1
1065 chtekk 1.30 # TODO: Move this before autoreconf !!!
1066 vivo 1.21 find . -type f -name Makefile -print0 \
1067     | xargs -0 -n100 sed -i \
1068     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
1069 vivo 1.1
1070 robbat2 1.145 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
1071 robbat2 1.137 pbxt_patch_available && use pbxt && pbxt_src_configure
1072 robbat2 1.112 fi
1073     }
1074    
1075 robbat2 1.119 # @FUNCTION: mysql_src_compile
1076     # @DESCRIPTION:
1077     # Compile the mysql code.
1078 robbat2 1.112 mysql_src_compile() {
1079     # Be backwards compatible for now
1080 robbat2 1.137 case ${EAPI:-0} in
1081     2) : ;;
1082     0 | 1) mysql_src_configure ;;
1083     esac
1084 robbat2 1.112
1085 chtekk 1.39 emake || die "emake failed"
1086 vivo 1.55
1087 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
1088     pbxt_patch_available && use pbxt && pbxt_src_compile
1089     fi
1090 vivo 1.1 }
1091    
1092 robbat2 1.119 # @FUNCTION: mysql_src_install
1093     # @DESCRIPTION:
1094     # Install mysql.
1095 vivo 1.1 mysql_src_install() {
1096 chtekk 1.30 # Make sure the vars are correctly initialized
1097     mysql_init_vars
1098 vivo 1.1
1099 robbat2 1.133 emake install \
1100     DESTDIR="${D}" \
1101 jmbsvicetto 1.167 benchdir_root=${MY_SHAREDSTATEDIR} \
1102 robbat2 1.133 testroot="${MY_SHAREDSTATEDIR}" \
1103     || die "emake install failed"
1104 vivo 1.55
1105 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
1106     pbxt_patch_available && use pbxt && pbxt_src_install
1107     fi
1108 vivo 1.1
1109 chtekk 1.30 # Convenience links
1110 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
1111 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
1112     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
1113     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
1114 vivo 1.1
1115 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
1116 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
1117 jmbsvicetto 1.167 rm -Rf "${ED}/usr/share/info"
1118 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
1119     binary-configure* my-*.cnf mi_test_all*
1120     do
1121 robbat2 1.133 rm -f "${D}"/${MY_SHAREDSTATEDIR}/${removeme}
1122 vivo 1.1 done
1123    
1124 chtekk 1.69 # Clean up stuff for a minimal build
1125 cardoe 1.67 if use minimal ; then
1126 robbat2 1.105 einfo "Remove all extra content for minimal build"
1127 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
1128 jmbsvicetto 1.167 rm -f "${ED}"/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}
1129     rm -f "${ED}/usr/sbin/mysqld"
1130 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
1131 vivo 1.1 fi
1132    
1133 robbat2 1.133 # Unless they explicitly specific USE=test, then do not install the
1134     # testsuite. It DOES have a use to be installed, esp. when you want to do a
1135     # validation of your database configuration after tuning it.
1136     if use !test ; then
1137     rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
1138     fi
1139    
1140 chtekk 1.30 # Configuration stuff
1141 robbat2 1.152 case ${MYSQL_PV_MAJOR} in
1142     3*|4.0) mysql_mycnf_version="4.0" ;;
1143     4.[1-9]|5.0) mysql_mycnf_version="4.1" ;;
1144     5.[1-9]|6*|7*) mysql_mycnf_version="5.1" ;;
1145     esac
1146     einfo "Building default my.cnf (${mysql_mycnf_version})"
1147 jmbsvicetto 1.167 insinto "${MY_SYSCONFDIR#${EPREFIX}}"
1148 vivo 1.55 doins scripts/mysqlaccess.conf
1149 robbat2 1.152 mycnf_src="my.cnf-${mysql_mycnf_version}"
1150 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
1151 jmbsvicetto 1.167 -e "s!/tmp!${EPREFIX}/tmp!" \
1152     -e "s!/usr!${EPREFIX}/usr!" \
1153     -e "s!= /var!= ${EPREFIX}/var!" \
1154 robbat2 1.152 "${FILESDIR}/${mycnf_src}" \
1155 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
1156 jmbsvicetto 1.167 use prefix && sed -i -e '/^user[ ]*= mysql$/d' "${TMPDIR}/my.cnf.ok"
1157 robbat2 1.152 if use latin1 ; then
1158 robbat2 1.140 sed -i \
1159     -e "/character-set/s|utf8|latin1|g" \
1160     "${TMPDIR}/my.cnf.ok"
1161 chtekk 1.30 fi
1162 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
1163    
1164 chtekk 1.30 # Minimal builds don't have the MySQL server
1165 cardoe 1.67 if ! use minimal ; then
1166 robbat2 1.105 einfo "Creating initial directories"
1167 chtekk 1.30 # Empty directories ...
1168 vivo 1.1 diropts "-m0750"
1169     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
1170 jmbsvicetto 1.167 dodir "${MY_DATADIR#${EPREFIX}}"
1171     keepdir "${MY_DATADIR#${EPREFIX}}"
1172 robbat2 1.75 chown -R mysql:mysql "${D}/${MY_DATADIR}"
1173 vivo 1.1 fi
1174    
1175     diropts "-m0755"
1176 jmbsvicetto 1.167 for folder in "${MY_LOGDIR#${EPREFIX}}" "/var/run/mysqld" ; do
1177 vivo 1.1 dodir "${folder}"
1178     keepdir "${folder}"
1179 jmbsvicetto 1.167 chown -R mysql:mysql "${ED}/${folder}"
1180 vivo 1.1 done
1181     fi
1182    
1183 chtekk 1.30 # Docs
1184 robbat2 1.105 einfo "Installing docs"
1185 robbat2 1.160 for i in README ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE ; do
1186     [[ -f "$i" ]] && dodoc "$i"
1187     done
1188 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
1189 chtekk 1.30
1190     # Minimal builds don't have the MySQL server
1191 cardoe 1.67 if ! use minimal ; then
1192 robbat2 1.105 einfo "Including support files and sample configurations"
1193 vivo 1.1 docinto "support-files"
1194     for script in \
1195 robbat2 1.92 "${S}"/support-files/my-*.cnf \
1196     "${S}"/support-files/magic \
1197     "${S}"/support-files/ndb-config-2-node.ini
1198 vivo 1.1 do
1199 robbat2 1.134 [[ -f "$script" ]] && dodoc "${script}"
1200 vivo 1.1 done
1201    
1202     docinto "scripts"
1203 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
1204 robbat2 1.134 [[ -f "$script" ]] && [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
1205 vivo 1.1 done
1206 robbat2 1.78
1207 vivo 1.1 fi
1208 vivo 1.4
1209 jmbsvicetto 1.167 mysql_lib_symlinks "${ED}"
1210 vivo 1.15 }
1211    
1212 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
1213     # @DESCRIPTION:
1214     # Create the user and groups for mysql - die if that fails.
1215 vivo 1.15 mysql_pkg_preinst() {
1216 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
1217     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
1218 vivo 1.1 }
1219    
1220 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
1221     # @DESCRIPTION:
1222     # Run post-installation tasks:
1223     # create the dir for logfiles if non-existant
1224     # touch the logfiles and secure them
1225     # install scripts
1226     # issue required steps for optional features
1227     # issue deprecation warnings
1228 vivo 1.1 mysql_pkg_postinst() {
1229 chtekk 1.30 # Make sure the vars are correctly initialized
1230 vivo 1.1 mysql_init_vars
1231    
1232 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
1233 jmbsvicetto 1.167 [[ -d "${EROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
1234 vivo 1.1
1235 chtekk 1.30 # Secure the logfiles
1236 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
1237     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
1238     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
1239    
1240 vivo 1.55 # Minimal builds don't have the MySQL server
1241 cardoe 1.67 if ! use minimal ; then
1242 vivo 1.55 docinto "support-files"
1243     for script in \
1244     support-files/my-*.cnf \
1245     support-files/magic \
1246     support-files/ndb-config-2-node.ini
1247     do
1248 robbat2 1.137 [[ -f "${script}" ]] \
1249     && dodoc "${script}"
1250 vivo 1.55 done
1251    
1252     docinto "scripts"
1253     for script in scripts/mysql* ; do
1254 robbat2 1.137 [[ -f "${script}" ]] \
1255     && [[ "${script%.sh}" == "${script}" ]] \
1256     && dodoc "${script}"
1257 vivo 1.55 done
1258 chtekk 1.69
1259     einfo
1260     elog "You might want to run:"
1261     elog "\"emerge --config =${CATEGORY}/${PF}\""
1262     elog "if this is a new install."
1263     einfo
1264 robbat2 1.151
1265     einfo
1266     elog "If you are upgrading major versions, you should run the"
1267     elog "mysql_upgrade tool."
1268     einfo
1269 vivo 1.55 fi
1270    
1271 robbat2 1.137 if pbxt_available && use pbxt ; then
1272 chtekk 1.69 # TODO: explain it better
1273     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
1274     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
1275     elog "if, after that, you cannot start the MySQL server,"
1276 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
1277 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
1278     elog "or execute the following SQL command:"
1279     elog " CREATE TABLE IF NOT EXISTS plugin ("
1280     elog " name char(64) binary DEFAULT '' NOT NULL,"
1281     elog " dl char(128) DEFAULT '' NOT NULL,"
1282     elog " PRIMARY KEY (name)"
1283     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
1284 vivo 1.4 fi
1285 chtekk 1.69
1286 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
1287 cardoe 1.67 && use berkdb \
1288 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
1289 vivo 1.1 }
1290    
1291 robbat2 1.119 # @FUNCTION: mysql_pkg_config
1292     # @DESCRIPTION:
1293     # Configure mysql environment.
1294 vivo 1.1 mysql_pkg_config() {
1295 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
1296    
1297 chtekk 1.30 # Make sure the vars are correctly initialized
1298 vivo 1.1 mysql_init_vars
1299    
1300 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
1301 chtekk 1.30
1302 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
1303 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
1304     fi
1305    
1306 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
1307 ferringb 1.174 local MY_DATADIR_s="${ROOT}/${MY_DATADIR}"
1308     MY_DATADIR_s="${MY_DATADIR_s%%/}"
1309     local old_MY_DATADIR_s="${ROOT}/${old_MY_DATADIR}"
1310     old_MY_DATADIR_s="${old_MY_DATADIR_s%%/}"
1311 robbat2 1.111
1312     if [[ -d "${old_MY_DATADIR_s}" ]]; then
1313     if [[ -d "${MY_DATADIR_s}" ]]; then
1314     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
1315     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
1316     else
1317     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
1318     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
1319     || die "Moving MY_DATADIR failed"
1320     fi
1321     else
1322     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
1323     if [[ -d "${MY_DATADIR_s}" ]]; then
1324     ewarn "Attempting to use ${MY_DATADIR_s}"
1325     else
1326     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
1327     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
1328 maekke 1.116 fi
1329 robbat2 1.111 fi
1330     fi
1331    
1332 vivo 1.1 local pwd1="a"
1333     local pwd2="b"
1334 robbat2 1.140 local maxtry=15
1335 vivo 1.1
1336 jmbsvicetto 1.167 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${EROOT}/root/.my.cnf" ]; then
1337     MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${EROOT}/root/.my.cnf")"
1338 robbat2 1.141 fi
1339    
1340 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1341 vivo 1.1 ewarn "You have already a MySQL database in place."
1342 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1343 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
1344     die "MySQL database already exists!"
1345     fi
1346    
1347 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1348     # localhost. Also causes weird failures.
1349     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1350    
1351 robbat2 1.140 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1352 vivo 1.1
1353 jmbsvicetto 1.157 einfo "Please provide a password for the mysql 'root' user now, in the"
1354     einfo "MYSQL_ROOT_PASSWORD env var or through the /root/.my.cnf file."
1355 robbat2 1.140 ewarn "Avoid [\"'\\_%] characters in the password"
1356     read -rsp " >" pwd1 ; echo
1357 vivo 1.1
1358 robbat2 1.140 einfo "Retype the password"
1359     read -rsp " >" pwd2 ; echo
1360 vivo 1.1
1361 robbat2 1.140 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1362     die "Passwords are not the same"
1363     fi
1364     MYSQL_ROOT_PASSWORD="${pwd1}"
1365     unset pwd1 pwd2
1366 vivo 1.1 fi
1367    
1368     local options=""
1369     local sqltmp="$(emktemp)"
1370    
1371 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1372 vivo 1.1 [[ -r "${help_tables}" ]] \
1373 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1374 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1375     help_tables="${TMPDIR}/fill_help_tables.sql"
1376    
1377 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1378 jmbsvicetto 1.167 "${EROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1379 robbat2 1.85 if [ $? -ne 0 ]; then
1380     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1381     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1382     fi
1383 vivo 1.4 popd &>/dev/null
1384 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1385 vivo 1.26 || die "MySQL databases not installed"
1386 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1387     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1388 vivo 1.1
1389 robbat2 1.140 # Figure out which options we need to disable to do the setup
1390     helpfile="${TMPDIR}/mysqld-help"
1391 jmbsvicetto 1.167 ${EROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1392 robbat2 1.140 for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1393     federated innodb ssl log-bin relay-log slow-query-log external-locking \
1394 robbat2 1.149 ndbcluster \
1395 robbat2 1.140 ; do
1396     optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1397     egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1398     done
1399     # But some options changed names
1400     egrep -sq external-locking "${helpfile}" && \
1401     options="${options/skip-locking/skip-external-locking}"
1402    
1403 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1404 vivo 1.1 # Filling timezones, see
1405     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1406 jmbsvicetto 1.167 "${EROOT}/usr/bin/mysql_tzinfo_to_sql" "${EROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1407 vivo 1.1
1408     if [[ -r "${help_tables}" ]] ; then
1409     cat "${help_tables}" >> "${sqltmp}"
1410     fi
1411     fi
1412 robbat2 1.152
1413 robbat2 1.140 einfo "Creating the mysql database and setting proper"
1414     einfo "permissions on it ..."
1415 vivo 1.1
1416 jmbsvicetto 1.167 use prefix || options="${options} --user=mysql"
1417    
1418     local socket="${EROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1419     local pidfile="${EROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1420     local mysqld="${EROOT}/usr/sbin/mysqld \
1421 vivo 1.1 ${options} \
1422     --user=mysql \
1423 jmbsvicetto 1.167 --basedir=${EROOT}/usr \
1424 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1425 vivo 1.1 --max_allowed_packet=8M \
1426     --net_buffer_length=16K \
1427 robbat2 1.143 --default-storage-engine=MyISAM \
1428 vivo 1.1 --socket=${socket} \
1429     --pid-file=${pidfile}"
1430 robbat2 1.140 #einfo "About to start mysqld: ${mysqld}"
1431     ebegin "Starting mysqld"
1432 chtekk 1.30 ${mysqld} &
1433 robbat2 1.140 rc=$?
1434 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1435 chtekk 1.30 maxtry=$((${maxtry}-1))
1436 vivo 1.1 echo -n "."
1437     sleep 1
1438     done
1439 robbat2 1.140 eend $rc
1440    
1441     if ! [[ -S "${socket}" ]]; then
1442     die "Completely failed to start up mysqld with: ${mysqld}"
1443     fi
1444 vivo 1.1
1445 robbat2 1.140 ebegin "Setting root password"
1446 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1447 robbat2 1.140 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1448 jmbsvicetto 1.167 "${EROOT}/usr/bin/mysql" \
1449 vivo 1.1 --socket=${socket} \
1450     -hlocalhost \
1451     -e "${sql}"
1452 robbat2 1.140 eend $?
1453 vivo 1.1
1454 robbat2 1.140 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1455 jmbsvicetto 1.167 "${EROOT}/usr/bin/mysql" \
1456 vivo 1.1 --socket=${socket} \
1457     -hlocalhost \
1458     -uroot \
1459 robbat2 1.140 -p"${MYSQL_ROOT_PASSWORD}" \
1460 vivo 1.1 mysql < "${sqltmp}"
1461 robbat2 1.140 rc=$?
1462     eend $?
1463     [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1464 vivo 1.1
1465 chtekk 1.30 # Stop the server and cleanup
1466 robbat2 1.140 einfo "Stopping the server ..."
1467 vivo 1.1 kill $(< "${pidfile}" )
1468 chtekk 1.30 rm -f "${sqltmp}"
1469 vivo 1.1 wait %1
1470 chtekk 1.30 einfo "Done"
1471 vivo 1.1 }
1472    
1473 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1474     # @DESCRIPTION:
1475     # Remove mysql symlinks.
1476 vivo 1.1 mysql_pkg_postrm() {
1477 jmbsvicetto 1.167 : # mysql_lib_symlinks "${ED}"
1478 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20