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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.60 - (hide annotations) (download)
Fri Jan 5 11:09:34 2007 UTC (7 years, 11 months ago) by vivo
Branch: MAIN
Changes since 1.59: +108 -115 lines
always execute global space, trying to avoid it is really too difficult

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

  ViewVC Help
Powered by ViewVC 1.1.20