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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.145 - (hide annotations) (download)
Tue Apr 27 05:45:55 2010 UTC (4 years, 7 months ago) by robbat2
Branch: MAIN
Changes since 1.144: +122 -30 lines
Fix up MariaDB SRC_URI. Building for PBXT and XtraDB. Radically improve plugin handling.

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.145 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.144 2010/04/01 20:36:39 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.145 plugins_sta="${plugins_sta} ndbcluster"
618 vivo 1.37 myconf="${myconf} --with-ndb-binlog"
619 robbat2 1.145 else
620     plugins_dis="${plugins_dis} ndbcluster"
621 vivo 1.37 fi
622    
623 robbat2 1.137 if [[ "${PN}" == "mariadb" ]] ; then
624     # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
625     # caught above.
626 robbat2 1.145 plugins_sta="${plugins_sta},maria,innobase"
627 robbat2 1.137 myconf="${myconf} $(use_with libevent)"
628     # This is not optional, without it several upstream testcases fail.
629     # Also strongly recommended by upstream.
630     myconf="${myconf} --with-maria-tmp-tables"
631     fi
632 robbat2 1.145
633     if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
634     use pbxt \
635     && plugins_dyn="${plugins_dyn} pbxt" \
636     || plugins_dis="${plugins_dis} pbxt"
637     fi
638 robbat2 1.137
639 robbat2 1.145 use static && \
640     plugins_sta="${plugins_sta} ${plugins_dyn}" && \
641     plugins_dyn=""
642    
643     einfo "Available plugins: ${plugins_avail}"
644     einfo "Dynamic plugins: ${plugins_dyn}"
645     einfo "Static plugins: ${plugins_sta}"
646     einfo "Disabled plugins: ${plugins_dis}"
647    
648     # These are the static plugins
649     myconf="${myconf} --with-plugins=${plugins_sta// /,}"
650     # And the disabled ones
651     for i in ${plugins_dis} ; do
652     myconf="${myconf} --without-plugin-${i}"
653     done
654 vivo 1.37 }
655    
656 robbat2 1.112 pbxt_src_configure() {
657 vivo 1.51 mysql_init_vars
658    
659     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
660    
661     einfo "Reconfiguring dir '${PWD}'"
662     AT_GNUCONF_UPDATE="yes" eautoreconf
663    
664 chtekk 1.69 local myconf=""
665 robbat2 1.138 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
666 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
667 robbat2 1.138 econf ${myconf} || die "Problem configuring PBXT storage engine"
668 robbat2 1.112 }
669    
670     pbxt_src_compile() {
671 robbat2 1.145
672 robbat2 1.112 # Be backwards compatible for now
673     if [[ $EAPI != 2 ]]; then
674     pbxt_src_configure
675     fi
676 chtekk 1.69 # TODO: is it safe/needed to use emake here ?
677     make || die "Problem making PBXT storage engine (${myconf})"
678 vivo 1.51
679     popd
680 chtekk 1.69 # TODO: modify test suite for PBXT
681 vivo 1.51 }
682    
683     pbxt_src_install() {
684     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
685 robbat2 1.134 emake install DESTDIR="${D}" || die "Failed to install PBXT"
686 vivo 1.51 popd
687     }
688    
689 vivo 1.37 #
690     # EBUILD FUNCTIONS
691     #
692 robbat2 1.119 # @FUNCTION: mysql_pkg_setup
693     # @DESCRIPTION:
694     # Perform some basic tests and tasks during pkg_setup phase:
695     # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
696     # check for conflicting use flags
697     # create new user and group for mysql
698     # warn about deprecated features
699 vivo 1.1 mysql_pkg_setup() {
700 robbat2 1.83 if hasq test ${FEATURES} ; then
701     if ! use minimal ; then
702 robbat2 1.91 if [[ $UID -eq 0 ]]; then
703 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
704 robbat2 1.83 fi
705     fi
706     fi
707 swegener 1.53
708 chtekk 1.30 # Check for USE flag problems in pkg_setup
709 cardoe 1.67 if use static && use ssl ; then
710 robbat2 1.145 M="MySQL does not support being built statically with SSL support enabled!"
711     eerror "${M}"
712     die "${M}"
713 chtekk 1.30 fi
714 vivo 1.1
715 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
716 cardoe 1.67 && use raid \
717     && use static ; then
718 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
719     eerror "with RAID support enabled."
720     die "USE flags 'raid' and 'static' conflict!"
721 vivo 1.1 fi
722    
723 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
724 robbat2 1.145 && ( use cluster || use extraengine || use embedded ) \
725 cardoe 1.67 && use minimal ; then
726 robbat2 1.145 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
727     eerror "${M}"
728     die "${M}"
729     fi
730    
731     if mysql_version_is_at_least "5.1" \
732     && xtradb_patch_available \
733     && use xtradb \
734     && use embedded ; then
735     M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
736     eerror "${M}"
737     die "${M}"
738 vivo 1.1 fi
739 maekke 1.103
740 robbat2 1.144 # Bug #290570, 284946, 307251
741     # Upstream changes made us need a fairly new GCC4.
742     # But only for 5.0.8[3-6]!
743     if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
744 robbat2 1.127 GCC_VER=$(gcc-version)
745 robbat2 1.125 case ${GCC_VER} in
746 robbat2 1.144 2*|3*|4.0|4.1|4.2)
747     eerror "Some releases of MySQL required a very new GCC, and then"
748     eerror "later release relaxed that requirement again. Either pick a"
749     eerror "MySQL >=5.0.87, or use a newer GCC."
750     die "Active GCC too old!" ;;
751 robbat2 1.125 esac
752     fi
753    
754 robbat2 1.83 # This should come after all of the die statements
755     enewgroup mysql 60 || die "problem adding 'mysql' group"
756     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
757 chtekk 1.39
758 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
759 cardoe 1.67 && use berkdb \
760 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
761 robbat2 1.133
762     if [ "${PN}" != "mysql-cluster" ] && use cluster; then
763     ewarn "Upstream has noted that the NDB cluster support in the 5.0 and"
764     ewarn "5.1 series should NOT be put into production. In the near"
765     ewarn "future, it will be disabled from building."
766     ewarn ""
767     ewarn "If you need NDB support, you should instead move to the new"
768     ewarn "mysql-cluster package that represents that upstream NDB"
769     ewarn "development."
770     fi
771 chtekk 1.30 }
772    
773 robbat2 1.119 # @FUNCTION: mysql_src_unpack
774     # @DESCRIPTION:
775     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
776 chtekk 1.30 mysql_src_unpack() {
777     # Initialize the proper variables first
778     mysql_init_vars
779 vivo 1.1
780 chtekk 1.30 unpack ${A}
781 robbat2 1.86 # Grab the patches
782     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
783 maekke 1.116
784 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
785 robbat2 1.112
786     # Be backwards compatible for now
787 robbat2 1.119 case ${EAPI:-0} in
788     2) : ;;
789     0 | 1) mysql_src_prepare ;;
790     esac
791 robbat2 1.112 }
792    
793 robbat2 1.119 # @FUNCTION: mysql_src_prepare
794     # @DESCRIPTION:
795     # Apply patches to the source code and remove unneeded bundled libs.
796 robbat2 1.112 mysql_src_prepare() {
797 robbat2 1.109 cd "${S}"
798 vivo 1.1
799 chtekk 1.30 # Apply the patches for this MySQL version
800 vivo 1.55 EPATCH_SUFFIX="patch"
801 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
802 robbat2 1.86 # Clean out old items
803     rm -f "${EPATCH_SOURCE}"/*
804     # Now link in right patches
805 vivo 1.55 mysql_mv_patches
806 robbat2 1.86 # And apply
807 chtekk 1.69 epatch
808 vivo 1.1
809 robbat2 1.133 # last -fPIC fixup, per bug #305873
810     i="${S}"/storage/innodb_plugin/plug.in
811     [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}"
812    
813 chtekk 1.30 # Additional checks, remove bundled zlib
814 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
815     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
816 chtekk 1.30 rm -f "scripts/mysqlbug"
817 vivo 1.1
818     # Make charsets install in the right place
819 vivo 1.37 find . -name 'Makefile.am' \
820     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
821 vivo 1.1
822 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
823 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
824 robbat2 1.122 einfo "Cleaning up old buildscript files"
825 chtekk 1.30 find . -name Makefile \
826     -o -name Makefile.in \
827     -o -name configure \
828     -exec rm -f {} \;
829     rm -f "ltmain.sh"
830 vivo 1.37 rm -f "scripts/mysqlbug"
831 chtekk 1.30 fi
832 vivo 1.1
833 vivo 1.51 local rebuilddirlist d
834 vivo 1.1
835 robbat2 1.137 if xtradb_patch_available && use xtradb ; then
836 robbat2 1.145 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
837     pushd "${S}"/storage >/dev/null
838 robbat2 1.122 i="innobase"
839     o="${WORKDIR}/storage-${i}.mysql-upstream"
840     # Have we been here already?
841 robbat2 1.134 [ -d "${o}" ] && rm -f "${i}"
842 robbat2 1.122 # Or maybe we haven't
843     [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
844 robbat2 1.145 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
845     popd >/dev/null
846     fi
847    
848     if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
849     einfo "Adding storage engine: PBXT"
850     pushd "${S}"/storage >/dev/null
851     i='pbxt'
852     [ -d "${i}" ] && rm -rf "${i}"
853     cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
854     popd >/dev/null
855 robbat2 1.122 fi
856    
857 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
858 chtekk 1.42 rebuilddirlist="."
859 robbat2 1.134 # This does not seem to be needed presently. robbat2 2010/02/23
860     #einfo "Updating innobase cmake"
861     ## TODO: check this with a cmake expert
862     #cmake \
863     # -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
864     # -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
865     # "storage/innobase"
866 vivo 1.1 else
867     rebuilddirlist=". innobase"
868     fi
869    
870 chtekk 1.30 for d in ${rebuilddirlist} ; do
871     einfo "Reconfiguring dir '${d}'"
872 vivo 1.4 pushd "${d}" &>/dev/null
873 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
874 vivo 1.4 popd &>/dev/null
875 vivo 1.1 done
876    
877 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
878 cardoe 1.67 && use berkdb ; then
879 robbat2 1.122 einfo "Fixing up berkdb buildsystem"
880 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
881 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
882     || die "Could not copy libtool.m4 to bdb/dist/"
883 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
884     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
885     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
886     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
887     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
888     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
889     fi
890 chtekk 1.71 pushd "bdb/dist" &>/dev/null
891     sh s_all \
892     || die "Failed bdb reconfigure"
893 vivo 1.4 popd &>/dev/null
894 vivo 1.1 fi
895     }
896    
897 robbat2 1.119 # @FUNCTION: mysql_src_configure
898     # @DESCRIPTION:
899     # Configure mysql to build the code for Gentoo respecting the use flags.
900 robbat2 1.112 mysql_src_configure() {
901 chtekk 1.30 # Make sure the vars are correctly initialized
902     mysql_init_vars
903 vivo 1.1
904 chtekk 1.42 # $myconf is modified by the configure_* functions
905     local myconf=""
906 vivo 1.1
907 cardoe 1.67 if use minimal ; then
908 chtekk 1.42 configure_minimal
909 vivo 1.1 else
910 chtekk 1.42 configure_common
911 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
912 chtekk 1.42 configure_51
913 vivo 1.1 else
914 chtekk 1.42 configure_40_41_50
915 vivo 1.1 fi
916 vivo 1.23 fi
917    
918 chtekk 1.30 # Bug #114895, bug #110149
919 vivo 1.1 filter-flags "-O" "-O[01]"
920 chtekk 1.30
921     # glib-2.3.2_pre fix, bug #16496
922 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
923    
924 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
925     # fail badly during cluster startup.
926     if [[ $(gcc-major-version) -lt 4 ]]; then
927     filter-flags "-fstack-protector-all"
928     fi
929    
930 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
931 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
932 vivo 1.51 mysql_version_is_at_least "5.0" \
933 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
934 chtekk 1.39 export CXXFLAGS
935 vivo 1.1
936 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
937     append-flags -fno-strict-aliasing
938    
939 vivo 1.1 econf \
940     --libexecdir="/usr/sbin" \
941     --sysconfdir="${MY_SYSCONFDIR}" \
942     --localstatedir="${MY_LOCALSTATEDIR}" \
943     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
944     --libdir="${MY_LIBDIR}" \
945     --includedir="${MY_INCLUDEDIR}" \
946     --with-low-memory \
947     --with-client-ldflags=-lstdc++ \
948     --enable-thread-safe-client \
949     --with-comment="Gentoo Linux ${PF}" \
950     --without-docs \
951 chtekk 1.39 ${myconf} || die "econf failed"
952 vivo 1.1
953 chtekk 1.30 # TODO: Move this before autoreconf !!!
954 vivo 1.21 find . -type f -name Makefile -print0 \
955     | xargs -0 -n100 sed -i \
956     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
957 vivo 1.1
958 robbat2 1.145 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
959 robbat2 1.137 pbxt_patch_available && use pbxt && pbxt_src_configure
960 robbat2 1.112 fi
961     }
962    
963 robbat2 1.119 # @FUNCTION: mysql_src_compile
964     # @DESCRIPTION:
965     # Compile the mysql code.
966 robbat2 1.112 mysql_src_compile() {
967     # Be backwards compatible for now
968 robbat2 1.137 case ${EAPI:-0} in
969     2) : ;;
970     0 | 1) mysql_src_configure ;;
971     esac
972 robbat2 1.112
973 chtekk 1.39 emake || die "emake failed"
974 vivo 1.55
975 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
976     pbxt_patch_available && use pbxt && pbxt_src_compile
977     fi
978 vivo 1.1 }
979    
980 robbat2 1.119 # @FUNCTION: mysql_src_install
981     # @DESCRIPTION:
982     # Install mysql.
983 vivo 1.1 mysql_src_install() {
984 chtekk 1.30 # Make sure the vars are correctly initialized
985     mysql_init_vars
986 vivo 1.1
987 robbat2 1.133 emake install \
988     DESTDIR="${D}" \
989     benchdir_root="${MY_SHAREDSTATEDIR}" \
990     testroot="${MY_SHAREDSTATEDIR}" \
991     || die "emake install failed"
992 vivo 1.55
993 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
994     pbxt_patch_available && use pbxt && pbxt_src_install
995     fi
996 vivo 1.1
997 chtekk 1.30 # Convenience links
998 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
999 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
1000     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
1001     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
1002 vivo 1.1
1003 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
1004 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
1005 chtekk 1.30 rm -Rf "${D}/usr/share/info"
1006 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
1007     binary-configure* my-*.cnf mi_test_all*
1008     do
1009 robbat2 1.133 rm -f "${D}"/${MY_SHAREDSTATEDIR}/${removeme}
1010 vivo 1.1 done
1011    
1012 chtekk 1.69 # Clean up stuff for a minimal build
1013 cardoe 1.67 if use minimal ; then
1014 robbat2 1.105 einfo "Remove all extra content for minimal build"
1015 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
1016     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}
1017 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
1018 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
1019 vivo 1.1 fi
1020    
1021 robbat2 1.133 # Unless they explicitly specific USE=test, then do not install the
1022     # testsuite. It DOES have a use to be installed, esp. when you want to do a
1023     # validation of your database configuration after tuning it.
1024     if use !test ; then
1025     rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
1026     fi
1027    
1028 chtekk 1.30 # Configuration stuff
1029 robbat2 1.140 if mysql_version_is_at_least "5.1" ; then
1030     mysql_mycnf_version="5.1"
1031     elif mysql_version_is_at_least "4.1" ; then
1032 chtekk 1.30 mysql_mycnf_version="4.1"
1033     else
1034     mysql_mycnf_version="4.0"
1035     fi
1036 robbat2 1.105 einfo "Building default my.cnf"
1037 vivo 1.1 insinto "${MY_SYSCONFDIR}"
1038 vivo 1.55 doins scripts/mysqlaccess.conf
1039 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
1040 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
1041 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
1042 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
1043 robbat2 1.140 sed -i \
1044     -e "/character-set/s|utf8|latin1|g" \
1045     "${TMPDIR}/my.cnf.ok"
1046 chtekk 1.30 fi
1047 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
1048    
1049 chtekk 1.30 # Minimal builds don't have the MySQL server
1050 cardoe 1.67 if ! use minimal ; then
1051 robbat2 1.105 einfo "Creating initial directories"
1052 chtekk 1.30 # Empty directories ...
1053 vivo 1.1 diropts "-m0750"
1054     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
1055 robbat2 1.75 dodir "${MY_DATADIR}"
1056     keepdir "${MY_DATADIR}"
1057     chown -R mysql:mysql "${D}/${MY_DATADIR}"
1058 vivo 1.1 fi
1059    
1060     diropts "-m0755"
1061     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
1062     dodir "${folder}"
1063     keepdir "${folder}"
1064     chown -R mysql:mysql "${D}/${folder}"
1065     done
1066     fi
1067    
1068 chtekk 1.30 # Docs
1069 robbat2 1.105 einfo "Installing docs"
1070 robbat2 1.133 dodoc README ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
1071 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
1072 chtekk 1.30
1073     # Minimal builds don't have the MySQL server
1074 cardoe 1.67 if ! use minimal ; then
1075 robbat2 1.105 einfo "Including support files and sample configurations"
1076 vivo 1.1 docinto "support-files"
1077     for script in \
1078 robbat2 1.92 "${S}"/support-files/my-*.cnf \
1079     "${S}"/support-files/magic \
1080     "${S}"/support-files/ndb-config-2-node.ini
1081 vivo 1.1 do
1082 robbat2 1.134 [[ -f "$script" ]] && dodoc "${script}"
1083 vivo 1.1 done
1084    
1085     docinto "scripts"
1086 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
1087 robbat2 1.134 [[ -f "$script" ]] && [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
1088 vivo 1.1 done
1089 robbat2 1.78
1090 vivo 1.1 fi
1091 vivo 1.4
1092 vivo 1.58 mysql_lib_symlinks "${D}"
1093 vivo 1.15 }
1094    
1095 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
1096     # @DESCRIPTION:
1097     # Create the user and groups for mysql - die if that fails.
1098 vivo 1.15 mysql_pkg_preinst() {
1099 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
1100     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
1101 vivo 1.1 }
1102    
1103 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
1104     # @DESCRIPTION:
1105     # Run post-installation tasks:
1106     # create the dir for logfiles if non-existant
1107     # touch the logfiles and secure them
1108     # install scripts
1109     # issue required steps for optional features
1110     # issue deprecation warnings
1111 vivo 1.1 mysql_pkg_postinst() {
1112 chtekk 1.30 # Make sure the vars are correctly initialized
1113 vivo 1.1 mysql_init_vars
1114    
1115 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
1116 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
1117 vivo 1.1
1118 chtekk 1.30 # Secure the logfiles
1119 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
1120     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
1121     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
1122    
1123 vivo 1.55 # Minimal builds don't have the MySQL server
1124 cardoe 1.67 if ! use minimal ; then
1125 vivo 1.55 docinto "support-files"
1126     for script in \
1127     support-files/my-*.cnf \
1128     support-files/magic \
1129     support-files/ndb-config-2-node.ini
1130     do
1131 robbat2 1.137 [[ -f "${script}" ]] \
1132     && dodoc "${script}"
1133 vivo 1.55 done
1134    
1135     docinto "scripts"
1136     for script in scripts/mysql* ; do
1137 robbat2 1.137 [[ -f "${script}" ]] \
1138     && [[ "${script%.sh}" == "${script}" ]] \
1139     && dodoc "${script}"
1140 vivo 1.55 done
1141 chtekk 1.69
1142     einfo
1143     elog "You might want to run:"
1144     elog "\"emerge --config =${CATEGORY}/${PF}\""
1145     elog "if this is a new install."
1146     einfo
1147 vivo 1.55 fi
1148    
1149 robbat2 1.137 if pbxt_available && use pbxt ; then
1150 chtekk 1.69 # TODO: explain it better
1151     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
1152     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
1153     elog "if, after that, you cannot start the MySQL server,"
1154 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
1155 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
1156     elog "or execute the following SQL command:"
1157     elog " CREATE TABLE IF NOT EXISTS plugin ("
1158     elog " name char(64) binary DEFAULT '' NOT NULL,"
1159     elog " dl char(128) DEFAULT '' NOT NULL,"
1160     elog " PRIMARY KEY (name)"
1161     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
1162 vivo 1.4 fi
1163 chtekk 1.69
1164 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
1165 cardoe 1.67 && use berkdb \
1166 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
1167 vivo 1.1 }
1168    
1169 robbat2 1.119 # @FUNCTION: mysql_pkg_config
1170     # @DESCRIPTION:
1171     # Configure mysql environment.
1172 vivo 1.1 mysql_pkg_config() {
1173 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
1174    
1175 chtekk 1.30 # Make sure the vars are correctly initialized
1176 vivo 1.1 mysql_init_vars
1177    
1178 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
1179 chtekk 1.30
1180 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
1181 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
1182     fi
1183    
1184 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
1185     local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
1186     local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
1187    
1188     if [[ -d "${old_MY_DATADIR_s}" ]]; then
1189     if [[ -d "${MY_DATADIR_s}" ]]; then
1190     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
1191     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
1192     else
1193     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
1194     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
1195     || die "Moving MY_DATADIR failed"
1196     fi
1197     else
1198     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
1199     if [[ -d "${MY_DATADIR_s}" ]]; then
1200     ewarn "Attempting to use ${MY_DATADIR_s}"
1201     else
1202     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
1203     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
1204 maekke 1.116 fi
1205 robbat2 1.111 fi
1206     fi
1207    
1208 vivo 1.1 local pwd1="a"
1209     local pwd2="b"
1210 robbat2 1.140 local MYSQL_ROOT_PASSWORD=''
1211     local maxtry=15
1212 vivo 1.1
1213 robbat2 1.141 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1214     MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1215     fi
1216    
1217 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1218 vivo 1.1 ewarn "You have already a MySQL database in place."
1219 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1220 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
1221     die "MySQL database already exists!"
1222     fi
1223    
1224 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1225     # localhost. Also causes weird failures.
1226     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1227    
1228 robbat2 1.140 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1229 vivo 1.1
1230 robbat2 1.140 einfo "Please provide a password for the mysql 'root' user now,"
1231     einfo "or in the MYSQL_ROOT_PASSWORD env var."
1232     ewarn "Avoid [\"'\\_%] characters in the password"
1233     read -rsp " >" pwd1 ; echo
1234 vivo 1.1
1235 robbat2 1.140 einfo "Retype the password"
1236     read -rsp " >" pwd2 ; echo
1237 vivo 1.1
1238 robbat2 1.140 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1239     die "Passwords are not the same"
1240     fi
1241     MYSQL_ROOT_PASSWORD="${pwd1}"
1242     unset pwd1 pwd2
1243 vivo 1.1 fi
1244    
1245     local options=""
1246     local sqltmp="$(emktemp)"
1247    
1248 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1249 vivo 1.1 [[ -r "${help_tables}" ]] \
1250 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1251 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1252     help_tables="${TMPDIR}/fill_help_tables.sql"
1253    
1254 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1255 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1256     if [ $? -ne 0 ]; then
1257     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1258     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1259     fi
1260 vivo 1.4 popd &>/dev/null
1261 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1262 vivo 1.26 || die "MySQL databases not installed"
1263 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1264     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1265 vivo 1.1
1266 robbat2 1.140 # Figure out which options we need to disable to do the setup
1267     helpfile="${TMPDIR}/mysqld-help"
1268     ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1269     for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1270     federated innodb ssl log-bin relay-log slow-query-log external-locking \
1271     ; do
1272     optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1273     egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1274     done
1275     # But some options changed names
1276     egrep -sq external-locking "${helpfile}" && \
1277     options="${options/skip-locking/skip-external-locking}"
1278    
1279 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1280 vivo 1.1 # Filling timezones, see
1281     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1282 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1283 vivo 1.1
1284     if [[ -r "${help_tables}" ]] ; then
1285     cat "${help_tables}" >> "${sqltmp}"
1286     fi
1287     fi
1288 robbat2 1.140
1289     einfo "Creating the mysql database and setting proper"
1290     einfo "permissions on it ..."
1291 vivo 1.1
1292 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1293     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1294 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
1295 vivo 1.1 ${options} \
1296     --user=mysql \
1297     --basedir=${ROOT}/usr \
1298 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1299 vivo 1.1 --max_allowed_packet=8M \
1300     --net_buffer_length=16K \
1301 robbat2 1.143 --default-storage-engine=MyISAM \
1302 vivo 1.1 --socket=${socket} \
1303     --pid-file=${pidfile}"
1304 robbat2 1.140 #einfo "About to start mysqld: ${mysqld}"
1305     ebegin "Starting mysqld"
1306 chtekk 1.30 ${mysqld} &
1307 robbat2 1.140 rc=$?
1308 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1309 chtekk 1.30 maxtry=$((${maxtry}-1))
1310 vivo 1.1 echo -n "."
1311     sleep 1
1312     done
1313 robbat2 1.140 eend $rc
1314    
1315     if ! [[ -S "${socket}" ]]; then
1316     die "Completely failed to start up mysqld with: ${mysqld}"
1317     fi
1318 vivo 1.1
1319 robbat2 1.140 ebegin "Setting root password"
1320 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1321 robbat2 1.140 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1322 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1323 vivo 1.1 --socket=${socket} \
1324     -hlocalhost \
1325     -e "${sql}"
1326 robbat2 1.140 eend $?
1327 vivo 1.1
1328 robbat2 1.140 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1329 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1330 vivo 1.1 --socket=${socket} \
1331     -hlocalhost \
1332     -uroot \
1333 robbat2 1.140 -p"${MYSQL_ROOT_PASSWORD}" \
1334 vivo 1.1 mysql < "${sqltmp}"
1335 robbat2 1.140 rc=$?
1336     eend $?
1337     [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1338 vivo 1.1
1339 chtekk 1.30 # Stop the server and cleanup
1340 robbat2 1.140 einfo "Stopping the server ..."
1341 vivo 1.1 kill $(< "${pidfile}" )
1342 chtekk 1.30 rm -f "${sqltmp}"
1343 vivo 1.1 wait %1
1344 chtekk 1.30 einfo "Done"
1345 vivo 1.1 }
1346    
1347 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1348     # @DESCRIPTION:
1349     # Remove mysql symlinks.
1350 vivo 1.1 mysql_pkg_postrm() {
1351 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1352 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20