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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.133 - (hide annotations) (download)
Sun Feb 21 00:18:16 2010 UTC (4 years, 9 months ago) by robbat2
Branch: MAIN
Changes since 1.132: +61 -29 lines
Import fixes from MySQL overlay:
- mysql-cluster warning for NDB support moving per upstream
- QA fixes per bug #305873:
  - Update some 5.1 configure flags that have changed
  - Correct USE of pbxt/xtradb to avoid QA warnings
  - USE=test controls installing tests for end-user usage
  - -fPIC fixes for innodb_plugin
  - consistent test location.
  - COPYING doc.

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

  ViewVC Help
Powered by ViewVC 1.1.20