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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.141 - (hide annotations) (download)
Wed Mar 24 03:45:56 2010 UTC (4 years, 6 months ago) by robbat2
Branch: MAIN
Changes since 1.140: +5 -1 lines
Bug #278633: add in support for mysql root password from secure config file.

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

  ViewVC Help
Powered by ViewVC 1.1.20