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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.137 - (hide annotations) (download)
Mon Mar 15 18:50:43 2010 UTC (4 years, 9 months ago) by robbat2
Branch: MAIN
Changes since 1.136: +94 -40 lines
Merge Overlay changes for MariaDB.

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

  ViewVC Help
Powered by ViewVC 1.1.20