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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.144 - (hide annotations) (download)
Thu Apr 1 20:36:39 2010 UTC (5 years, 3 months ago) by robbat2
Branch: MAIN
Changes since 1.143: +10 -4 lines
Followup on bug #284946, #293801, #310615, #307251: In 5.0.87, the mutex locking code was changed a lot again, so that while 5.0.84 required a newer GCC due to the HAVE_ATOMIC_BUILTINS error, newer releases do NOT need those GCC versions anymore. This also frees up ~hppa to do more stabilization.

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

  ViewVC Help
Powered by ViewVC 1.1.20