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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.85 - (hide annotations) (download)
Sun Mar 9 21:09:23 2008 UTC (6 years, 5 months ago) by robbat2
Branch: MAIN
Changes since 1.84: +6 -2 lines
Catch failures of the mysql_install_db call.

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

  ViewVC Help
Powered by ViewVC 1.1.20