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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.82 - (hide annotations) (download)
Tue Oct 2 10:00:07 2007 UTC (7 years, 2 months ago) by robbat2
Branch: MAIN
Changes since 1.81: +2 -2 lines
Fix typo with CXX compiler.

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.82 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.81 2007/07/15 00:22:13 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     local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication"
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    
457 vivo 1.1 mysql_pkg_setup() {
458 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
459     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
460 swegener 1.53
461 chtekk 1.30 # Check for USE flag problems in pkg_setup
462 cardoe 1.67 if use static && use ssl ; then
463 chtekk 1.30 eerror "MySQL does not support being built statically with SSL support enabled!"
464     die "MySQL does not support being built statically with SSL support enabled!"
465     fi
466 vivo 1.1
467 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
468 cardoe 1.67 && use raid \
469     && use static ; then
470 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
471     eerror "with RAID support enabled."
472     die "USE flags 'raid' and 'static' conflict!"
473 vivo 1.1 fi
474    
475 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
476 cardoe 1.67 && ( use cluster || use extraengine ) \
477     && use minimal ; then
478 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
479     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
480 vivo 1.1 fi
481 chtekk 1.39
482 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
483 cardoe 1.67 && use berkdb \
484 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
485 chtekk 1.30 }
486    
487     mysql_src_unpack() {
488     # Initialize the proper variables first
489     mysql_init_vars
490 vivo 1.1
491 chtekk 1.30 unpack ${A}
492 vivo 1.55 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then
493 vivo 1.56 if mysql_check_version_range "5.1 to 5.1.99" ; then
494     bitkeeper_fetch "mysql-5.1-ndb"
495 chtekk 1.69 elif mysql_check_version_range "5.2 to 5.2.99" ; then
496 vivo 1.56 bitkeeper_fetch "mysql-5.2-falcon"
497     else
498     bitkeeper_fetch
499     fi
500 vivo 1.55 cd "${S}"
501 chtekk 1.69 einfo "Running upstream autorun over BK sources ..."
502 vivo 1.55 BUILD/autorun.sh
503     else
504     mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
505     cd "${S}"
506     fi
507 vivo 1.1
508 chtekk 1.30 # Apply the patches for this MySQL version
509 vivo 1.55 EPATCH_SUFFIX="patch"
510 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
511 vivo 1.55 mysql_mv_patches
512 chtekk 1.69 epatch
513 vivo 1.1
514 chtekk 1.30 # Additional checks, remove bundled zlib
515 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
516     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
517 chtekk 1.30 rm -f "scripts/mysqlbug"
518 vivo 1.1
519     # Make charsets install in the right place
520 vivo 1.37 find . -name 'Makefile.am' \
521     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
522 vivo 1.1
523 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
524 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
525     find . -name Makefile \
526     -o -name Makefile.in \
527     -o -name configure \
528     -exec rm -f {} \;
529     rm -f "ltmain.sh"
530 vivo 1.37 rm -f "scripts/mysqlbug"
531 chtekk 1.30 fi
532 vivo 1.1
533 vivo 1.51 local rebuilddirlist d
534 vivo 1.1
535 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
536 chtekk 1.42 rebuilddirlist="."
537 swegener 1.74 # TODO: check this with a cmake expert
538 cardoe 1.67 use innodb \
539 vivo 1.51 && cmake \
540 chtekk 1.72 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
541 robbat2 1.82 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
542 vivo 1.51 "storage/innobase"
543 vivo 1.1 else
544     rebuilddirlist=". innobase"
545     fi
546    
547 chtekk 1.30 for d in ${rebuilddirlist} ; do
548     einfo "Reconfiguring dir '${d}'"
549 vivo 1.4 pushd "${d}" &>/dev/null
550 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
551 vivo 1.4 popd &>/dev/null
552 vivo 1.1 done
553    
554 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
555 cardoe 1.67 && use berkdb ; then
556 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
557 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
558     || die "Could not copy libtool.m4 to bdb/dist/"
559     pushd "bdb/dist" &>/dev/null
560     sh s_all \
561     || die "Failed bdb reconfigure"
562 vivo 1.4 popd &>/dev/null
563 vivo 1.1 fi
564     }
565    
566 vivo 1.6 mysql_src_compile() {
567 chtekk 1.30 # Make sure the vars are correctly initialized
568     mysql_init_vars
569 vivo 1.1
570 chtekk 1.42 # $myconf is modified by the configure_* functions
571     local myconf=""
572 vivo 1.1
573 cardoe 1.67 if use minimal ; then
574 chtekk 1.42 configure_minimal
575 vivo 1.1 else
576 chtekk 1.42 configure_common
577 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
578 chtekk 1.42 configure_51
579 vivo 1.1 else
580 chtekk 1.42 configure_40_41_50
581 vivo 1.1 fi
582 vivo 1.23 fi
583    
584 chtekk 1.30 # Bug #114895, bug #110149
585 vivo 1.1 filter-flags "-O" "-O[01]"
586 chtekk 1.30
587     # glib-2.3.2_pre fix, bug #16496
588 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
589    
590 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
591 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
592 vivo 1.51 mysql_version_is_at_least "5.0" \
593 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
594 chtekk 1.39 export CXXFLAGS
595 vivo 1.1
596     econf \
597     --libexecdir="/usr/sbin" \
598     --sysconfdir="${MY_SYSCONFDIR}" \
599     --localstatedir="${MY_LOCALSTATEDIR}" \
600     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
601     --libdir="${MY_LIBDIR}" \
602     --includedir="${MY_INCLUDEDIR}" \
603     --with-low-memory \
604     --with-client-ldflags=-lstdc++ \
605     --enable-thread-safe-client \
606     --with-comment="Gentoo Linux ${PF}" \
607     --without-docs \
608 chtekk 1.39 ${myconf} || die "econf failed"
609 vivo 1.1
610 chtekk 1.30 # TODO: Move this before autoreconf !!!
611 vivo 1.21 find . -type f -name Makefile -print0 \
612     | xargs -0 -n100 sed -i \
613     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
614 vivo 1.1
615 chtekk 1.39 emake || die "emake failed"
616 vivo 1.55
617 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
618 vivo 1.1 }
619    
620     mysql_src_install() {
621 chtekk 1.30 # Make sure the vars are correctly initialized
622     mysql_init_vars
623 vivo 1.1
624 chtekk 1.69 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
625 vivo 1.55
626 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
627 vivo 1.1
628     insinto "${MY_INCLUDEDIR}"
629     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
630    
631 chtekk 1.30 # Convenience links
632 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
633     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
634     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
635 vivo 1.1
636 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
637     rm -Rf "${D}/usr/share/info"
638 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
639     binary-configure* my-*.cnf mi_test_all*
640     do
641 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
642 vivo 1.1 done
643    
644 chtekk 1.69 # Clean up stuff for a minimal build
645 cardoe 1.67 if use minimal ; then
646 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
647     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}
648 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
649 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
650 vivo 1.1 fi
651    
652 chtekk 1.30 # Configuration stuff
653 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
654 chtekk 1.30 mysql_mycnf_version="4.1"
655     else
656     mysql_mycnf_version="4.0"
657     fi
658 vivo 1.1 insinto "${MY_SYSCONFDIR}"
659 vivo 1.55 doins scripts/mysqlaccess.conf
660 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
661 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
662 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
663 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
664 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
665     fi
666 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
667    
668 chtekk 1.30 # Minimal builds don't have the MySQL server
669 cardoe 1.67 if ! use minimal ; then
670 chtekk 1.30 # Empty directories ...
671 vivo 1.1 diropts "-m0750"
672     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
673 robbat2 1.75 dodir "${MY_DATADIR}"
674     keepdir "${MY_DATADIR}"
675     chown -R mysql:mysql "${D}/${MY_DATADIR}"
676 vivo 1.1 fi
677    
678     diropts "-m0755"
679     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
680     dodir "${folder}"
681     keepdir "${folder}"
682     chown -R mysql:mysql "${D}/${folder}"
683     done
684     fi
685    
686 chtekk 1.30 # Docs
687 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
688 robbat2 1.78 doinfo ${S}/Docs/mysql.info
689 chtekk 1.30
690     # Minimal builds don't have the MySQL server
691 cardoe 1.67 if ! use minimal ; then
692 vivo 1.1 docinto "support-files"
693     for script in \
694     support-files/my-*.cnf \
695     support-files/magic \
696     support-files/ndb-config-2-node.ini
697     do
698     dodoc "${script}"
699     done
700    
701     docinto "scripts"
702 vivo 1.4 for script in scripts/mysql* ; do
703     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
704 vivo 1.1 done
705 robbat2 1.78
706 vivo 1.1 fi
707 vivo 1.4
708 vivo 1.58 mysql_lib_symlinks "${D}"
709 vivo 1.15 }
710    
711     mysql_pkg_preinst() {
712 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
713     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
714 vivo 1.1 }
715    
716     mysql_pkg_postinst() {
717 chtekk 1.30 # Make sure the vars are correctly initialized
718 vivo 1.1 mysql_init_vars
719    
720 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
721 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
722 vivo 1.1
723 chtekk 1.30 # Secure the logfiles
724 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
725     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
726     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
727    
728 vivo 1.55 # Minimal builds don't have the MySQL server
729 cardoe 1.67 if ! use minimal ; then
730 vivo 1.55 docinto "support-files"
731     for script in \
732     support-files/my-*.cnf \
733     support-files/magic \
734     support-files/ndb-config-2-node.ini
735     do
736     dodoc "${script}"
737     done
738    
739     docinto "scripts"
740     for script in scripts/mysql* ; do
741     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
742     done
743 chtekk 1.69
744     einfo
745     elog "You might want to run:"
746     elog "\"emerge --config =${CATEGORY}/${PF}\""
747     elog "if this is a new install."
748     einfo
749 vivo 1.55 fi
750    
751 cardoe 1.67 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
752 chtekk 1.69 # TODO: explain it better
753     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
754     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
755     elog "if, after that, you cannot start the MySQL server,"
756 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
757 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
758     elog "or execute the following SQL command:"
759     elog " CREATE TABLE IF NOT EXISTS plugin ("
760     elog " name char(64) binary DEFAULT '' NOT NULL,"
761     elog " dl char(128) DEFAULT '' NOT NULL,"
762     elog " PRIMARY KEY (name)"
763     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
764 vivo 1.4 fi
765 chtekk 1.69
766 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
767 cardoe 1.67 && use berkdb \
768 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
769 vivo 1.1 }
770    
771     mysql_pkg_config() {
772 chtekk 1.30 # Make sure the vars are correctly initialized
773 vivo 1.1 mysql_init_vars
774    
775 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
776 chtekk 1.30
777 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
778 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
779     fi
780    
781     local pwd1="a"
782     local pwd2="b"
783     local maxtry=5
784    
785 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
786 vivo 1.1 ewarn "You have already a MySQL database in place."
787 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
788 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
789     die "MySQL database already exists!"
790     fi
791    
792     einfo "Creating the mysql database and setting proper"
793 chtekk 1.30 einfo "permissions on it ..."
794 vivo 1.1
795     einfo "Insert a password for the mysql 'root' user"
796     ewarn "Avoid [\"'\\_%] characters in the password"
797 chtekk 1.30 read -rsp " >" pwd1 ; echo
798 vivo 1.1
799 chtekk 1.30 einfo "Retype the password"
800 vivo 1.1 read -rsp " >" pwd2 ; echo
801    
802     if [[ "x$pwd1" != "x$pwd2" ]] ; then
803     die "Passwords are not the same"
804     fi
805    
806     local options=""
807     local sqltmp="$(emktemp)"
808    
809 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
810 vivo 1.1 [[ -r "${help_tables}" ]] \
811 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
812 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
813     help_tables="${TMPDIR}/fill_help_tables.sql"
814    
815 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
816 chtekk 1.30 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
817 vivo 1.4 popd &>/dev/null
818 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
819 vivo 1.26 || die "MySQL databases not installed"
820 robbat2 1.75 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2> /dev/null
821     chmod 0750 "${ROOT}/${MY_DATADIR}" 2> /dev/null
822 vivo 1.1
823 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
824 vivo 1.1 options="--skip-ndbcluster"
825    
826     # Filling timezones, see
827     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
828 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
829 vivo 1.1
830     if [[ -r "${help_tables}" ]] ; then
831     cat "${help_tables}" >> "${sqltmp}"
832     fi
833     fi
834    
835 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
836     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
837 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
838 vivo 1.1 ${options} \
839     --user=mysql \
840     --skip-grant-tables \
841     --basedir=${ROOT}/usr \
842 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
843 vivo 1.1 --skip-innodb \
844     --skip-bdb \
845     --skip-networking \
846     --max_allowed_packet=8M \
847     --net_buffer_length=16K \
848     --socket=${socket} \
849     --pid-file=${pidfile}"
850 chtekk 1.30 ${mysqld} &
851 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
852 chtekk 1.30 maxtry=$((${maxtry}-1))
853 vivo 1.1 echo -n "."
854     sleep 1
855     done
856    
857 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
858 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
859 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
860 vivo 1.1 --socket=${socket} \
861     -hlocalhost \
862     -e "${sql}"
863    
864 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
865 vivo 1.1
866 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
867 vivo 1.1 --socket=${socket} \
868     -hlocalhost \
869     -uroot \
870     -p"${pwd1}" \
871     mysql < "${sqltmp}"
872    
873 chtekk 1.30 # Stop the server and cleanup
874 vivo 1.1 kill $(< "${pidfile}" )
875 chtekk 1.30 rm -f "${sqltmp}"
876     einfo "Stopping the server ..."
877 vivo 1.1 wait %1
878 chtekk 1.30 einfo "Done"
879 vivo 1.1 }
880    
881     mysql_pkg_postrm() {
882 chtekk 1.70 : # mysql_lib_symlinks "${D}"
883 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20