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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.140 - (hide annotations) (download)
Wed Mar 24 03:09:08 2010 UTC (4 years, 5 months ago) by robbat2
Branch: MAIN
Changes since 1.139: +54 -24 lines
Last commit in the latest round of mysql changes: pkg_config now checks for options before disabling them during setup to avoid more zealous error checking from upstream.

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.140 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.139 2010/03/15 19:27:04 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.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1113 vivo 1.1 ewarn "You have already a MySQL database in place."
1114 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1115 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
1116     die "MySQL database already exists!"
1117     fi
1118    
1119 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1120     # localhost. Also causes weird failures.
1121     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1122    
1123 robbat2 1.140 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1124 vivo 1.1
1125 robbat2 1.140 einfo "Please provide a password for the mysql 'root' user now,"
1126     einfo "or in the MYSQL_ROOT_PASSWORD env var."
1127     ewarn "Avoid [\"'\\_%] characters in the password"
1128     read -rsp " >" pwd1 ; echo
1129 vivo 1.1
1130 robbat2 1.140 einfo "Retype the password"
1131     read -rsp " >" pwd2 ; echo
1132 vivo 1.1
1133 robbat2 1.140 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1134     die "Passwords are not the same"
1135     fi
1136     MYSQL_ROOT_PASSWORD="${pwd1}"
1137     unset pwd1 pwd2
1138 vivo 1.1 fi
1139    
1140     local options=""
1141     local sqltmp="$(emktemp)"
1142    
1143 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1144 vivo 1.1 [[ -r "${help_tables}" ]] \
1145 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1146 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1147     help_tables="${TMPDIR}/fill_help_tables.sql"
1148    
1149 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1150 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1151     if [ $? -ne 0 ]; then
1152     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1153     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1154     fi
1155 vivo 1.4 popd &>/dev/null
1156 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1157 vivo 1.26 || die "MySQL databases not installed"
1158 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1159     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1160 vivo 1.1
1161 robbat2 1.140 # Figure out which options we need to disable to do the setup
1162     helpfile="${TMPDIR}/mysqld-help"
1163     ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1164     for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1165     federated innodb ssl log-bin relay-log slow-query-log external-locking \
1166     ; do
1167     optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1168     egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1169     done
1170     # But some options changed names
1171     egrep -sq external-locking "${helpfile}" && \
1172     options="${options/skip-locking/skip-external-locking}"
1173    
1174 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1175 vivo 1.1 # Filling timezones, see
1176     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1177 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1178 vivo 1.1
1179     if [[ -r "${help_tables}" ]] ; then
1180     cat "${help_tables}" >> "${sqltmp}"
1181     fi
1182     fi
1183 robbat2 1.140
1184     einfo "Creating the mysql database and setting proper"
1185     einfo "permissions on it ..."
1186 vivo 1.1
1187 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1188     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1189 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
1190 vivo 1.1 ${options} \
1191     --user=mysql \
1192     --basedir=${ROOT}/usr \
1193 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1194 vivo 1.1 --max_allowed_packet=8M \
1195     --net_buffer_length=16K \
1196     --socket=${socket} \
1197     --pid-file=${pidfile}"
1198 robbat2 1.140 #einfo "About to start mysqld: ${mysqld}"
1199     ebegin "Starting mysqld"
1200 chtekk 1.30 ${mysqld} &
1201 robbat2 1.140 rc=$?
1202 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1203 chtekk 1.30 maxtry=$((${maxtry}-1))
1204 vivo 1.1 echo -n "."
1205     sleep 1
1206     done
1207 robbat2 1.140 eend $rc
1208    
1209     if ! [[ -S "${socket}" ]]; then
1210     die "Completely failed to start up mysqld with: ${mysqld}"
1211     fi
1212 vivo 1.1
1213 robbat2 1.140 ebegin "Setting root password"
1214 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1215 robbat2 1.140 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1216 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1217 vivo 1.1 --socket=${socket} \
1218     -hlocalhost \
1219     -e "${sql}"
1220 robbat2 1.140 eend $?
1221 vivo 1.1
1222 robbat2 1.140 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1223 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1224 vivo 1.1 --socket=${socket} \
1225     -hlocalhost \
1226     -uroot \
1227 robbat2 1.140 -p"${MYSQL_ROOT_PASSWORD}" \
1228 vivo 1.1 mysql < "${sqltmp}"
1229 robbat2 1.140 rc=$?
1230     eend $?
1231     [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1232 vivo 1.1
1233 chtekk 1.30 # Stop the server and cleanup
1234 robbat2 1.140 einfo "Stopping the server ..."
1235 vivo 1.1 kill $(< "${pidfile}" )
1236 chtekk 1.30 rm -f "${sqltmp}"
1237 vivo 1.1 wait %1
1238 chtekk 1.30 einfo "Done"
1239 vivo 1.1 }
1240    
1241 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1242     # @DESCRIPTION:
1243     # Remove mysql symlinks.
1244 vivo 1.1 mysql_pkg_postrm() {
1245 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1246 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20