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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.143 - (hide annotations) (download)
Thu Mar 25 20:58:31 2010 UTC (4 years, 8 months ago) by robbat2
Branch: MAIN
Changes since 1.142: +2 -1 lines
Bug #310787: If a user has default-storage-engine in their config, we need to override it during setup to create the internal mysql tables safely.

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

  ViewVC Help
Powered by ViewVC 1.1.20