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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.146 - (hide annotations) (download)
Thu May 13 19:45:47 2010 UTC (4 years, 7 months ago) by robbat2
Branch: MAIN
Changes since 1.145: +4 -3 lines
Bug #318851: USE=cluster also needs the partition engine support in 5.1.46.

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

  ViewVC Help
Powered by ViewVC 1.1.20