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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.138 - (hide annotations) (download)
Mon Mar 15 19:05:51 2010 UTC (4 years, 9 months ago) by robbat2
Branch: MAIN
Changes since 1.137: +3 -4 lines
Bug #308491: Fix PBXT install location and econf usage.

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

  ViewVC Help
Powered by ViewVC 1.1.20