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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.134 - (hide annotations) (download)
Sat Feb 27 18:21:35 2010 UTC (4 years, 9 months ago) by robbat2
Branch: MAIN
Changes since 1.133: +18 -15 lines
Fixup more pbxt and xtradb issues, and try to fix dodoc QA.

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

  ViewVC Help
Powered by ViewVC 1.1.20