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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.109 - (hide annotations) (download)
Sat Feb 28 10:51:57 2009 UTC (5 years, 7 months ago) by robbat2
Branch: MAIN
Changes since 1.108: +4 -92 lines
BitKeeper is long dead.

1 chtekk 1.69 # Copyright 1999-2007 Gentoo Foundation
2 vivo 1.1 # Distributed under the terms of the GNU General Public License v2
3 robbat2 1.109 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.108 2009/02/28 10:50:24 robbat2 Exp $
4 vivo 1.1
5 vivo 1.54 # Author: Francesco Riosa (Retired) <vivo@gentoo.org>
6 robbat2 1.86 # Maintainer: MySQL Team <mysql-bugs@gentoo.org>
7     # - Luca Longinotti <chtekk@gentoo.org>
8     # - Robin H. Johnson <robbat2@gentoo.org>
9 chtekk 1.30
10 vivo 1.59 WANT_AUTOCONF="latest"
11     WANT_AUTOMAKE="latest"
12 chtekk 1.69
13 robbat2 1.104 inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator
14 vivo 1.54
15 vivo 1.59 # Shorten the path because the socket path length must be shorter than 107 chars
16     # and we will run a mysql server during test phase
17     S="${WORKDIR}/mysql"
18    
19 robbat2 1.108 [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
20 robbat2 1.86 if [[ "${MY_EXTRAS_VER}" == "live" ]]; then
21 robbat2 1.87 EGIT_PROJECT=mysql-extras
22 robbat2 1.86 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
23     inherit git
24     fi
25 vivo 1.54
26 vivo 1.60 # MYSQL_VERSION_ID will be:
27     # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
28     # This is an important part, because many of the choices the MySQL ebuild will do
29     # depend on this variable.
30     # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
31 robbat2 1.88 # We also strip off upstream's trailing letter that they use to respin tarballs
32 chtekk 1.69
33 vivo 1.60 MYSQL_VERSION_ID=""
34 robbat2 1.88 tpv="${PV%[a-z]}"
35     tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
36 vivo 1.60 for vatom in 0 1 2 3 ; do
37     # pad to length 2
38     tpv[${vatom}]="00${tpv[${vatom}]}"
39     MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
40     done
41     # strip leading "0" (otherwise it's considered an octal number by BASH)
42     MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
43    
44     # Be warned, *DEPEND are version-dependant
45 robbat2 1.90 # These are used for both runtime and compiletime
46 vivo 1.60 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
47     userland_GNU? ( sys-process/procps )
48     >=sys-apps/sed-4
49     >=sys-apps/texinfo-4.7-r1
50     >=sys-libs/readline-4.1
51 chtekk 1.69 >=sys-libs/zlib-1.2.3"
52 vivo 1.60
53 chtekk 1.69 # Having different flavours at the same time is not a good idea
54     for i in "" "-community" ; do
55 vivo 1.60 [[ "${i}" == ${PN#mysql} ]] ||
56     DEPEND="${DEPEND} !dev-db/mysql${i}"
57     done
58    
59 robbat2 1.90 RDEPEND="${DEPEND}
60     !minimal? ( dev-db/mysql-init-scripts )
61     selinux? ( sec-policy/selinux-mysql )"
62    
63     # compile-time-only
64 vivo 1.60 mysql_version_is_at_least "5.1" \
65     || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
66    
67 robbat2 1.90 # compile-time-only
68 chtekk 1.69 mysql_version_is_at_least "5.1.12" \
69 robbat2 1.107 && DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
70 chtekk 1.69
71 vivo 1.60 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
72     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
73    
74 robbat2 1.104 # For other stuff to bring us in
75     PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
76    
77 robbat2 1.81 # Work out the default SERVER_URI correctly
78     if [ -z "${SERVER_URI}" ]; then
79     # The community build is on the mirrors
80     if [ "${PN}" == "mysql-community" ]; then
81     SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz"
82     # The enterprise source is on the primary site only
83     elif [ "${PN}" == "mysql" ]; then
84     SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz"
85     fi
86     fi
87    
88 vivo 1.60 # Define correct SRC_URIs
89 robbat2 1.86 SRC_URI="${SERVER_URI}"
90    
91     [[ ${MY_EXTRAS_VER} != live ]] && SRC_URI="${SRC_URI}
92 robbat2 1.73 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
93 chtekk 1.69 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
94 vivo 1.60 mysql_version_is_at_least "5.1.12" \
95     && [[ -n "${PBXT_VERSION}" ]] \
96     && SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )"
97    
98     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
99     HOMEPAGE="http://www.mysql.com/"
100     LICENSE="GPL-2"
101 chtekk 1.69 SLOT="0"
102 vivo 1.60 IUSE="big-tables debug embedded minimal perl selinux ssl static"
103    
104     mysql_version_is_at_least "4.1" \
105     && IUSE="${IUSE} latin1"
106    
107     mysql_version_is_at_least "4.1.3" \
108     && IUSE="${IUSE} cluster extraengine"
109    
110     mysql_version_is_at_least "5.0" \
111     || IUSE="${IUSE} raid"
112    
113     mysql_version_is_at_least "5.0.18" \
114     && IUSE="${IUSE} max-idx-128"
115    
116     mysql_version_is_at_least "5.1" \
117     || IUSE="${IUSE} berkdb"
118    
119     mysql_version_is_at_least "5.1.12" \
120     && IUSE="${IUSE} pbxt"
121    
122 vivo 1.26 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
123 swegener 1.36 pkg_postinst pkg_config pkg_postrm
124 vivo 1.1
125 vivo 1.37 #
126     # HELPER FUNCTIONS:
127     #
128    
129 vivo 1.51 mysql_disable_test() {
130     local testname="${1}" ; shift
131     local reason="${@}"
132     local mysql_disable_file="${S}/mysql-test/t/disabled.def"
133     echo ${testname} : ${reason} >> "${mysql_disable_file}"
134 chtekk 1.69 ewarn "test '${testname}' disabled: '${reason}'"
135 vivo 1.51 }
136    
137 vivo 1.8 # void mysql_init_vars()
138     #
139 chtekk 1.30 # Initialize global variables
140     # 2005-11-19 <vivo@gentoo.org>
141    
142 vivo 1.8 mysql_init_vars() {
143 chtekk 1.69 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
144     MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
145     MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
146     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
147     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
148     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
149 vivo 1.8
150 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
151     MY_DATADIR=""
152 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
153 robbat2 1.75 MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
154 vivo 1.26 | sed -ne '/datadir/s|^--datadir=||p' \
155     | tail -n1`
156 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
157     MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
158 robbat2 1.89 | sed -e 's/.*=\s*//' \
159     | tail -n1`
160 vivo 1.8 fi
161     fi
162 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
163     MY_DATADIR="${MY_LOCALSTATEDIR}"
164     einfo "Using default MY_DATADIR"
165 vivo 1.8 fi
166 robbat2 1.75 elog "MySQL MY_DATADIR is ${MY_DATADIR}"
167 vivo 1.8
168 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
169 robbat2 1.75 if [[ -e "${MY_DATADIR}" ]] ; then
170 robbat2 1.95 # If you get this and you're wondering about it, see bug #207636
171     elog "MySQL datadir found in ${MY_DATADIR}"
172     elog "A new one will not be created."
173 vivo 1.8 PREVIOUS_DATADIR="yes"
174     else
175     PREVIOUS_DATADIR="no"
176     fi
177 chtekk 1.30 export PREVIOUS_DATADIR
178 vivo 1.8 fi
179     fi
180    
181 vivo 1.55 MY_SOURCEDIR=${SERVER_URI##*/}
182     MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
183    
184 chtekk 1.69 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
185 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
186 robbat2 1.75 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
187 vivo 1.8 }
188    
189 vivo 1.37 configure_minimal() {
190 vivo 1.46 # These are things we exclude from a minimal build, please
191     # note that the server actually does get built and installed,
192     # but we then delete it before packaging.
193 robbat2 1.84 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication readline"
194 vivo 1.37
195 vivo 1.46 for i in ${minimal_exclude_list} ; do
196     myconf="${myconf} --without-${i}"
197     done
198     myconf="${myconf} --with-extra-charsets=none"
199     myconf="${myconf} --enable-local-infile"
200 vivo 1.47
201 cardoe 1.67 if use static ; then
202 vivo 1.47 myconf="${myconf} --with-client-ldflags=-all-static"
203 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
204 vivo 1.47 else
205     myconf="${myconf} --enable-shared --enable-static"
206     fi
207 chtekk 1.50
208 chtekk 1.69 if mysql_version_is_at_least "4.1" && ! use latin1 ; then
209 chtekk 1.50 myconf="${myconf} --with-charset=utf8"
210     myconf="${myconf} --with-collation=utf8_general_ci"
211     else
212     myconf="${myconf} --with-charset=latin1"
213     myconf="${myconf} --with-collation=latin1_swedish_ci"
214     fi
215 vivo 1.37 }
216    
217     configure_common() {
218 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
219 vivo 1.37 myconf="${myconf} --enable-local-infile"
220     myconf="${myconf} --with-extra-charsets=all"
221     myconf="${myconf} --with-mysqld-user=mysql"
222 chtekk 1.39 myconf="${myconf} --with-server"
223 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
224 vivo 1.37 myconf="${myconf} --without-libwrap"
225 chtekk 1.39
226 cardoe 1.67 if use static ; then
227 vivo 1.37 myconf="${myconf} --with-mysqld-ldflags=-all-static"
228     myconf="${myconf} --with-client-ldflags=-all-static"
229 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
230 vivo 1.37 else
231     myconf="${myconf} --enable-shared --enable-static"
232     fi
233    
234 cardoe 1.67 if use debug ; then
235 vivo 1.37 myconf="${myconf} --with-debug=full"
236     else
237     myconf="${myconf} --without-debug"
238 vivo 1.51 mysql_version_is_at_least "4.1.3" \
239 cardoe 1.67 && use cluster \
240 vivo 1.37 && myconf="${myconf} --without-ndb-debug"
241     fi
242 chtekk 1.39
243 robbat2 1.100 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
244     ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
245     ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
246     ewarn "You MUST file bugs without these variables set."
247     myconf="${myconf} --with-charset=${MYSQL_DEFAULT_CHARSET}"
248     myconf="${myconf} --with-collation=${MYSQL_DEFAULT_COLLATION}"
249     elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
250     myconf="${myconf} --with-charset=utf8"
251     myconf="${myconf} --with-collation=utf8_general_ci"
252     else
253     myconf="${myconf} --with-charset=latin1"
254     myconf="${myconf} --with-collation=latin1_swedish_ci"
255 vivo 1.37 fi
256 chtekk 1.39
257 cardoe 1.67 if use embedded ; then
258 vivo 1.37 myconf="${myconf} --with-embedded-privilege-control"
259     myconf="${myconf} --with-embedded-server"
260     else
261     myconf="${myconf} --without-embedded-privilege-control"
262     myconf="${myconf} --without-embedded-server"
263     fi
264    
265     }
266    
267     configure_40_41_50() {
268     myconf="${myconf} $(use_with perl bench)"
269     myconf="${myconf} --enable-assembler"
270     myconf="${myconf} --with-extra-tools"
271     myconf="${myconf} --with-innodb"
272     myconf="${myconf} --without-readline"
273 vivo 1.51 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
274 vivo 1.37
275 chtekk 1.69 # --with-vio is not needed anymore, it's on by default and
276     # has been removed from configure
277 cardoe 1.67 if use ssl ; then
278 chtekk 1.69 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
279 vivo 1.62 fi
280    
281     if mysql_version_is_at_least "5.1.11" ; then
282     myconf="${myconf} $(use_with ssl)"
283 vivo 1.37 else
284 vivo 1.62 myconf="${myconf} $(use_with ssl openssl)"
285 vivo 1.37 fi
286 maekke 1.103
287 robbat2 1.98 if mysql_version_is_at_least "5.0.60" ; then
288     if use berkdb ; then
289     elog "Berkeley DB support was disabled due to build failures"
290     elog "on multiple arches, go to a version earlier than 5.0.60"
291     elog "if you want it again. Gentoo bug #224067."
292     fi
293     myconf="${myconf} --without-berkeley-db"
294     elif use berkdb ; then
295 chtekk 1.77 # The following fix is due to a bug with bdb on SPARC's. See:
296     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
297     # It comes down to non-64-bit safety problems.
298 cardoe 1.76 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
299 chtekk 1.77 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
300 cardoe 1.76 myconf="${myconf} --without-berkeley-db"
301     else
302 chtekk 1.39 myconf="${myconf} --with-berkeley-db=./bdb"
303     fi
304 cardoe 1.76 else
305     myconf="${myconf} --without-berkeley-db"
306 vivo 1.37 fi
307    
308 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
309 vivo 1.37 myconf="${myconf} --with-geometry"
310     myconf="${myconf} $(use_with cluster ndbcluster)"
311     fi
312    
313 cardoe 1.67 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
314 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
315     myconf="${myconf} --with-archive-storage-engine"
316    
317     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
318     myconf="${myconf} --with-csv-storage-engine"
319    
320     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
321     myconf="${myconf} --with-blackhole-storage-engine"
322    
323     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
324     # http://dev.mysql.com/doc/mysql/en/federated-description.html
325     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
326 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
327 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
328     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
329 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
330     fi
331     fi
332    
333 robbat2 1.99 if [ "${PN}" == "mysql-community" ]; then
334     myconf="${myconf} --enable-community-features"
335     fi
336    
337 vivo 1.51 mysql_version_is_at_least "5.0.18" \
338 cardoe 1.67 && use max-idx-128 \
339 vivo 1.37 && myconf="${myconf} --with-max-indexes=128"
340     }
341    
342 chtekk 1.39 configure_51() {
343 chtekk 1.40 # TODO: !!!! readd --without-readline
344 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
345 vivo 1.37 # readline.h instead of history.h
346     myconf="${myconf} $(use_with ssl)"
347     myconf="${myconf} --enable-assembler"
348     myconf="${myconf} --with-geometry"
349     myconf="${myconf} --with-readline"
350     myconf="${myconf} --with-row-based-replication"
351     myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
352     myconf="${myconf} --without-pstack"
353 cardoe 1.67 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
354 chtekk 1.39
355 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
356     # like configuration=none
357     local plugins="csv,myisam,myisammrg,heap"
358 cardoe 1.67 if use extraengine ; then
359 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
360 vivo 1.52 plugins="${plugins},archive,blackhole,example,federated,partition"
361 vivo 1.37
362 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
363     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
364 vivo 1.37 fi
365    
366 robbat2 1.107 # Upstream specifically requests that InnoDB always be built.
367     plugins="${plugins},innobase"
368 vivo 1.37
369     # like configuration=max-no-ndb
370 cardoe 1.67 if use cluster ; then
371 vivo 1.37 plugins="${plugins},ndbcluster"
372     myconf="${myconf} --with-ndb-binlog"
373     fi
374    
375 vivo 1.58 if mysql_version_is_at_least "5.2" ; then
376     plugins="${plugins},falcon"
377     fi
378    
379 vivo 1.37 myconf="${myconf} --with-plugins=${plugins}"
380     }
381    
382 vivo 1.51 pbxt_src_compile() {
383     mysql_init_vars
384    
385     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
386    
387     einfo "Reconfiguring dir '${PWD}'"
388     AT_GNUCONF_UPDATE="yes" eautoreconf
389    
390 chtekk 1.69 local myconf=""
391     myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}"
392 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
393 chtekk 1.69 # TODO: is it safe/needed to use econf here ?
394     ./configure ${myconf} || die "Problem configuring PBXT storage engine"
395     # TODO: is it safe/needed to use emake here ?
396     make || die "Problem making PBXT storage engine (${myconf})"
397 vivo 1.51
398     popd
399 chtekk 1.69 # TODO: modify test suite for PBXT
400 vivo 1.51 }
401    
402     pbxt_src_install() {
403     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
404 chtekk 1.69 make install || die "Failed to install PBXT"
405 vivo 1.51 popd
406     }
407    
408 vivo 1.37 #
409     # EBUILD FUNCTIONS
410     #
411 vivo 1.1 mysql_pkg_setup() {
412 robbat2 1.83 if hasq test ${FEATURES} ; then
413     if ! use minimal ; then
414 robbat2 1.91 if [[ $UID -eq 0 ]]; then
415 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
416 robbat2 1.83 fi
417     fi
418     fi
419 swegener 1.53
420 chtekk 1.30 # Check for USE flag problems in pkg_setup
421 cardoe 1.67 if use static && use ssl ; then
422 chtekk 1.30 eerror "MySQL does not support being built statically with SSL support enabled!"
423     die "MySQL does not support being built statically with SSL support enabled!"
424     fi
425 vivo 1.1
426 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
427 cardoe 1.67 && use raid \
428     && use static ; then
429 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
430     eerror "with RAID support enabled."
431     die "USE flags 'raid' and 'static' conflict!"
432 vivo 1.1 fi
433    
434 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
435 cardoe 1.67 && ( use cluster || use extraengine ) \
436     && use minimal ; then
437 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
438     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
439 vivo 1.1 fi
440 maekke 1.103
441 robbat2 1.83 # This should come after all of the die statements
442     enewgroup mysql 60 || die "problem adding 'mysql' group"
443     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
444 chtekk 1.39
445 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
446 cardoe 1.67 && use berkdb \
447 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
448 chtekk 1.30 }
449    
450     mysql_src_unpack() {
451     # Initialize the proper variables first
452     mysql_init_vars
453 vivo 1.1
454 chtekk 1.30 unpack ${A}
455 robbat2 1.86 # Grab the patches
456     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
457 robbat2 1.109
458     mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
459     cd "${S}"
460 vivo 1.1
461 chtekk 1.30 # Apply the patches for this MySQL version
462 vivo 1.55 EPATCH_SUFFIX="patch"
463 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
464 robbat2 1.86 # Clean out old items
465     rm -f "${EPATCH_SOURCE}"/*
466     # Now link in right patches
467 vivo 1.55 mysql_mv_patches
468 robbat2 1.86 # And apply
469 chtekk 1.69 epatch
470 vivo 1.1
471 chtekk 1.30 # Additional checks, remove bundled zlib
472 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
473     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
474 chtekk 1.30 rm -f "scripts/mysqlbug"
475 vivo 1.1
476     # Make charsets install in the right place
477 vivo 1.37 find . -name 'Makefile.am' \
478     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
479 vivo 1.1
480 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
481 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
482     find . -name Makefile \
483     -o -name Makefile.in \
484     -o -name configure \
485     -exec rm -f {} \;
486     rm -f "ltmain.sh"
487 vivo 1.37 rm -f "scripts/mysqlbug"
488 chtekk 1.30 fi
489 vivo 1.1
490 vivo 1.51 local rebuilddirlist d
491 vivo 1.1
492 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
493 chtekk 1.42 rebuilddirlist="."
494 swegener 1.74 # TODO: check this with a cmake expert
495 robbat2 1.107 cmake \
496 chtekk 1.72 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
497 robbat2 1.82 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
498 vivo 1.51 "storage/innobase"
499 vivo 1.1 else
500     rebuilddirlist=". innobase"
501     fi
502    
503 chtekk 1.30 for d in ${rebuilddirlist} ; do
504     einfo "Reconfiguring dir '${d}'"
505 vivo 1.4 pushd "${d}" &>/dev/null
506 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
507 vivo 1.4 popd &>/dev/null
508 vivo 1.1 done
509    
510 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
511 cardoe 1.67 && use berkdb ; then
512 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
513 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
514     || die "Could not copy libtool.m4 to bdb/dist/"
515 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
516     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
517     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
518     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
519     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
520     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
521     fi
522 chtekk 1.71 pushd "bdb/dist" &>/dev/null
523     sh s_all \
524     || die "Failed bdb reconfigure"
525 vivo 1.4 popd &>/dev/null
526 vivo 1.1 fi
527     }
528    
529 vivo 1.6 mysql_src_compile() {
530 chtekk 1.30 # Make sure the vars are correctly initialized
531     mysql_init_vars
532 vivo 1.1
533 chtekk 1.42 # $myconf is modified by the configure_* functions
534     local myconf=""
535 vivo 1.1
536 cardoe 1.67 if use minimal ; then
537 chtekk 1.42 configure_minimal
538 vivo 1.1 else
539 chtekk 1.42 configure_common
540 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
541 chtekk 1.42 configure_51
542 vivo 1.1 else
543 chtekk 1.42 configure_40_41_50
544 vivo 1.1 fi
545 vivo 1.23 fi
546    
547 chtekk 1.30 # Bug #114895, bug #110149
548 vivo 1.1 filter-flags "-O" "-O[01]"
549 chtekk 1.30
550     # glib-2.3.2_pre fix, bug #16496
551 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
552    
553 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
554     # fail badly during cluster startup.
555     if [[ $(gcc-major-version) -lt 4 ]]; then
556     filter-flags "-fstack-protector-all"
557     fi
558    
559 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
560 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
561 vivo 1.51 mysql_version_is_at_least "5.0" \
562 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
563 chtekk 1.39 export CXXFLAGS
564 vivo 1.1
565     econf \
566     --libexecdir="/usr/sbin" \
567     --sysconfdir="${MY_SYSCONFDIR}" \
568     --localstatedir="${MY_LOCALSTATEDIR}" \
569     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
570     --libdir="${MY_LIBDIR}" \
571     --includedir="${MY_INCLUDEDIR}" \
572     --with-low-memory \
573     --with-client-ldflags=-lstdc++ \
574     --enable-thread-safe-client \
575     --with-comment="Gentoo Linux ${PF}" \
576     --without-docs \
577 chtekk 1.39 ${myconf} || die "econf failed"
578 vivo 1.1
579 chtekk 1.30 # TODO: Move this before autoreconf !!!
580 vivo 1.21 find . -type f -name Makefile -print0 \
581     | xargs -0 -n100 sed -i \
582     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
583 vivo 1.1
584 chtekk 1.39 emake || die "emake failed"
585 vivo 1.55
586 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
587 vivo 1.1 }
588    
589     mysql_src_install() {
590 chtekk 1.30 # Make sure the vars are correctly initialized
591     mysql_init_vars
592 vivo 1.1
593 chtekk 1.69 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
594 vivo 1.55
595 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
596 vivo 1.1
597 chtekk 1.30 # Convenience links
598 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
599 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
600     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
601     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
602 vivo 1.1
603 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
604 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
605 chtekk 1.30 rm -Rf "${D}/usr/share/info"
606 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
607     binary-configure* my-*.cnf mi_test_all*
608     do
609 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
610 vivo 1.1 done
611    
612 chtekk 1.69 # Clean up stuff for a minimal build
613 cardoe 1.67 if use minimal ; then
614 robbat2 1.105 einfo "Remove all extra content for minimal build"
615 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
616     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}
617 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
618 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
619 vivo 1.1 fi
620    
621 chtekk 1.30 # Configuration stuff
622 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
623 chtekk 1.30 mysql_mycnf_version="4.1"
624     else
625     mysql_mycnf_version="4.0"
626     fi
627 robbat2 1.105 einfo "Building default my.cnf"
628 vivo 1.1 insinto "${MY_SYSCONFDIR}"
629 vivo 1.55 doins scripts/mysqlaccess.conf
630 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
631 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
632 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
633 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
634 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
635     fi
636 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
637    
638 chtekk 1.30 # Minimal builds don't have the MySQL server
639 cardoe 1.67 if ! use minimal ; then
640 robbat2 1.105 einfo "Creating initial directories"
641 chtekk 1.30 # Empty directories ...
642 vivo 1.1 diropts "-m0750"
643     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
644 robbat2 1.75 dodir "${MY_DATADIR}"
645     keepdir "${MY_DATADIR}"
646     chown -R mysql:mysql "${D}/${MY_DATADIR}"
647 vivo 1.1 fi
648    
649     diropts "-m0755"
650     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
651     dodir "${folder}"
652     keepdir "${folder}"
653     chown -R mysql:mysql "${D}/${folder}"
654     done
655     fi
656    
657 chtekk 1.30 # Docs
658 robbat2 1.105 einfo "Installing docs"
659 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
660 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
661 chtekk 1.30
662     # Minimal builds don't have the MySQL server
663 cardoe 1.67 if ! use minimal ; then
664 robbat2 1.105 einfo "Including support files and sample configurations"
665 vivo 1.1 docinto "support-files"
666     for script in \
667 robbat2 1.92 "${S}"/support-files/my-*.cnf \
668     "${S}"/support-files/magic \
669     "${S}"/support-files/ndb-config-2-node.ini
670 vivo 1.1 do
671     dodoc "${script}"
672     done
673    
674     docinto "scripts"
675 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
676 vivo 1.4 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
677 vivo 1.1 done
678 robbat2 1.78
679 vivo 1.1 fi
680 vivo 1.4
681 vivo 1.58 mysql_lib_symlinks "${D}"
682 vivo 1.15 }
683    
684     mysql_pkg_preinst() {
685 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
686     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
687 vivo 1.1 }
688    
689     mysql_pkg_postinst() {
690 chtekk 1.30 # Make sure the vars are correctly initialized
691 vivo 1.1 mysql_init_vars
692    
693 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
694 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
695 vivo 1.1
696 chtekk 1.30 # Secure the logfiles
697 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
698     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
699     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
700    
701 vivo 1.55 # Minimal builds don't have the MySQL server
702 cardoe 1.67 if ! use minimal ; then
703 vivo 1.55 docinto "support-files"
704     for script in \
705     support-files/my-*.cnf \
706     support-files/magic \
707     support-files/ndb-config-2-node.ini
708     do
709     dodoc "${script}"
710     done
711    
712     docinto "scripts"
713     for script in scripts/mysql* ; do
714     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
715     done
716 chtekk 1.69
717     einfo
718     elog "You might want to run:"
719     elog "\"emerge --config =${CATEGORY}/${PF}\""
720     elog "if this is a new install."
721     einfo
722 vivo 1.55 fi
723    
724 cardoe 1.67 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
725 chtekk 1.69 # TODO: explain it better
726     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
727     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
728     elog "if, after that, you cannot start the MySQL server,"
729 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
730 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
731     elog "or execute the following SQL command:"
732     elog " CREATE TABLE IF NOT EXISTS plugin ("
733     elog " name char(64) binary DEFAULT '' NOT NULL,"
734     elog " dl char(128) DEFAULT '' NOT NULL,"
735     elog " PRIMARY KEY (name)"
736     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
737 vivo 1.4 fi
738 chtekk 1.69
739 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
740 cardoe 1.67 && use berkdb \
741 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
742 vivo 1.1 }
743    
744     mysql_pkg_config() {
745 chtekk 1.30 # Make sure the vars are correctly initialized
746 vivo 1.1 mysql_init_vars
747    
748 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
749 chtekk 1.30
750 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
751 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
752     fi
753    
754     local pwd1="a"
755     local pwd2="b"
756     local maxtry=5
757    
758 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
759 vivo 1.1 ewarn "You have already a MySQL database in place."
760 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
761 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
762     die "MySQL database already exists!"
763     fi
764    
765 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
766     # localhost. Also causes weird failures.
767     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
768    
769 vivo 1.1 einfo "Creating the mysql database and setting proper"
770 chtekk 1.30 einfo "permissions on it ..."
771 vivo 1.1
772     einfo "Insert a password for the mysql 'root' user"
773     ewarn "Avoid [\"'\\_%] characters in the password"
774 chtekk 1.30 read -rsp " >" pwd1 ; echo
775 vivo 1.1
776 chtekk 1.30 einfo "Retype the password"
777 vivo 1.1 read -rsp " >" pwd2 ; echo
778    
779     if [[ "x$pwd1" != "x$pwd2" ]] ; then
780     die "Passwords are not the same"
781     fi
782    
783     local options=""
784     local sqltmp="$(emktemp)"
785    
786 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
787 vivo 1.1 [[ -r "${help_tables}" ]] \
788 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
789 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
790     help_tables="${TMPDIR}/fill_help_tables.sql"
791    
792 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
793 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
794     if [ $? -ne 0 ]; then
795     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
796     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
797     fi
798 vivo 1.4 popd &>/dev/null
799 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
800 vivo 1.26 || die "MySQL databases not installed"
801 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
802     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
803 vivo 1.1
804 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
805 vivo 1.1 options="--skip-ndbcluster"
806    
807     # Filling timezones, see
808     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
809 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
810 vivo 1.1
811     if [[ -r "${help_tables}" ]] ; then
812     cat "${help_tables}" >> "${sqltmp}"
813     fi
814     fi
815    
816 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
817     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
818 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
819 vivo 1.1 ${options} \
820     --user=mysql \
821     --skip-grant-tables \
822     --basedir=${ROOT}/usr \
823 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
824 vivo 1.1 --skip-innodb \
825     --skip-bdb \
826     --skip-networking \
827     --max_allowed_packet=8M \
828     --net_buffer_length=16K \
829     --socket=${socket} \
830     --pid-file=${pidfile}"
831 chtekk 1.30 ${mysqld} &
832 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
833 chtekk 1.30 maxtry=$((${maxtry}-1))
834 vivo 1.1 echo -n "."
835     sleep 1
836     done
837    
838 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
839 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
840 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
841 vivo 1.1 --socket=${socket} \
842     -hlocalhost \
843     -e "${sql}"
844    
845 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
846 vivo 1.1
847 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
848 vivo 1.1 --socket=${socket} \
849     -hlocalhost \
850     -uroot \
851     -p"${pwd1}" \
852     mysql < "${sqltmp}"
853    
854 chtekk 1.30 # Stop the server and cleanup
855 vivo 1.1 kill $(< "${pidfile}" )
856 chtekk 1.30 rm -f "${sqltmp}"
857     einfo "Stopping the server ..."
858 vivo 1.1 wait %1
859 chtekk 1.30 einfo "Done"
860 vivo 1.1 }
861    
862     mysql_pkg_postrm() {
863 chtekk 1.70 : # mysql_lib_symlinks "${D}"
864 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20