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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.110 - (hide annotations) (download)
Mon Jul 6 18:18:00 2009 UTC (5 years, 2 months ago) by robbat2
Branch: MAIN
Changes since 1.109: +23 -5 lines
Update for community features being merged back into the main mysql tree as of version 5.0.82.

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

  ViewVC Help
Powered by ViewVC 1.1.20