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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.61 - (hide annotations) (download)
Fri Jan 5 22:41:49 2007 UTC (7 years, 7 months ago) by vivo
Branch: MAIN
Changes since 1.60: +2 -3 lines
bug #160330 mispelled ssl option

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.61 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.60 2007/01/05 11:09:34 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 vivo 1.61 if mysql_version_is_at_least "5.2.0" ; then
351 vivo 1.58 myconf="${myconf} --with-ssl"
352 vivo 1.37 else
353     myconf="${myconf} --with-openssl"
354     fi
355     else
356     myconf="${myconf} --without-openssl"
357     fi
358    
359     # The following fix is due to a bug with bdb on SPARC's. See:
360     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
361     # It comes down to non-64-bit safety problems.
362     if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
363 chtekk 1.39 elog "Berkeley DB support was disabled due to incompatible arch"
364 vivo 1.37 myconf="${myconf} --without-berkeley-db"
365     else
366 chtekk 1.39 if useq "berkdb" ; then
367     myconf="${myconf} --with-berkeley-db=./bdb"
368     else
369     myconf="${myconf} --without-berkeley-db"
370     fi
371 vivo 1.37 fi
372    
373 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
374 vivo 1.37 myconf="${myconf} --with-geometry"
375     myconf="${myconf} $(use_with cluster ndbcluster)"
376     fi
377    
378 vivo 1.51 if mysql_version_is_at_least "4.1.3" && useq "extraengine" ; then
379 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
380     myconf="${myconf} --with-archive-storage-engine"
381    
382     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
383     myconf="${myconf} --with-csv-storage-engine"
384    
385     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
386     myconf="${myconf} --with-blackhole-storage-engine"
387    
388     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
389     # http://dev.mysql.com/doc/mysql/en/federated-description.html
390     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
391 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
392 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
393     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
394 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
395     fi
396     fi
397    
398 vivo 1.51 mysql_version_is_at_least "5.0.18" \
399 vivo 1.37 && useq "max-idx-128" \
400     && myconf="${myconf} --with-max-indexes=128"
401     }
402    
403 chtekk 1.39 configure_51() {
404 chtekk 1.40 # TODO: !!!! readd --without-readline
405 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
406 vivo 1.37 # readline.h instead of history.h
407     myconf="${myconf} $(use_with ssl)"
408     myconf="${myconf} --enable-assembler"
409     myconf="${myconf} --with-geometry"
410     myconf="${myconf} --with-readline"
411     myconf="${myconf} --with-row-based-replication"
412     myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
413     myconf="${myconf} --without-pstack"
414     useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
415 chtekk 1.39
416 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
417     # like configuration=none
418     local plugins="csv,myisam,myisammrg,heap"
419 chtekk 1.39 if useq "extraengine" ; then
420 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
421 vivo 1.52 plugins="${plugins},archive,blackhole,example,federated,partition"
422 vivo 1.37
423 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
424     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
425 vivo 1.37 fi
426    
427     if useq "innodb" ; then
428     plugins="${plugins},innobase"
429     fi
430    
431     # like configuration=max-no-ndb
432     if useq "cluster" ; then
433     plugins="${plugins},ndbcluster"
434     myconf="${myconf} --with-ndb-binlog"
435     fi
436    
437 vivo 1.58 if mysql_version_is_at_least "5.2" ; then
438     plugins="${plugins},falcon"
439     fi
440    
441 vivo 1.37 myconf="${myconf} --with-plugins=${plugins}"
442     }
443    
444 vivo 1.51 pbxt_src_compile() {
445     mysql_init_vars
446    
447     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
448    
449     einfo "Reconfiguring dir '${PWD}'"
450     AT_GNUCONF_UPDATE="yes" eautoreconf
451    
452     local myconf
453     myconf="${myconf} --with-mysql=${S}"
454     mkdir -p ${T}/lib
455     myconf="${myconf} --libdir=${D}/${MY_LIBDIR}"
456     useq "debug" && myconf="${myconf} --with-debug=full"
457     # TODO is safe/needed to use econf here ?
458     ./configure ${myconf} || die "problem configuring pbxt storage engine"
459     # TODO is safe/needed to use emake here ?
460     make || die "problem making pbxt storage engine (${myconf})"
461    
462     popd
463     # TODO: modify test suite
464     }
465    
466     pbxt_src_install() {
467     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
468     make install || die "failed pbxt install"
469     popd
470     }
471    
472 vivo 1.37 #
473     # EBUILD FUNCTIONS
474     #
475    
476 vivo 1.1 mysql_pkg_setup() {
477 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
478     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
479 swegener 1.53
480 chtekk 1.30 # Check for USE flag problems in pkg_setup
481     if useq "static" && useq "ssl" ; then
482     eerror "MySQL does not support being built statically with SSL support enabled!"
483     die "MySQL does not support being built statically with SSL support enabled!"
484     fi
485 vivo 1.1
486 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
487 chtekk 1.30 && useq "raid" \
488     && useq "static" ; then
489     eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
490     eerror "with RAID support enabled."
491     die "USE flags 'raid' and 'static' conflict!"
492 vivo 1.1 fi
493    
494 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
495 chtekk 1.30 && ( useq "cluster" || useq "extraengine" ) \
496 vivo 1.26 && useq "minimal" ; then
497 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
498     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
499 vivo 1.1 fi
500 chtekk 1.39
501 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
502 chtekk 1.41 && useq "berkdb" \
503     && elog "Berkeley DB support is deprecated and will be removed in future versions!"
504 chtekk 1.30 }
505    
506     mysql_src_unpack() {
507     # Initialize the proper variables first
508     mysql_init_vars
509 vivo 1.1
510 chtekk 1.30 unpack ${A}
511 vivo 1.55 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then
512 vivo 1.56 if mysql_check_version_range "5.1 to 5.1.99" ; then
513     bitkeeper_fetch "mysql-5.1-ndb"
514 vivo 1.58 elif mysql_check_version_range "5.2.0 to 5.2.99" ; then
515 vivo 1.56 bitkeeper_fetch "mysql-5.2-falcon"
516     else
517     bitkeeper_fetch
518     fi
519 vivo 1.55 cd "${S}"
520     einfo "running upstream autorun on bk sources"
521     BUILD/autorun.sh
522     else
523     mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
524     cd "${S}"
525     fi
526 vivo 1.1
527 chtekk 1.30 # Apply the patches for this MySQL version
528 vivo 1.55 EPATCH_SUFFIX="patch"
529     mkdir -p "${EPATCH_SOURCE}" || die "unable to create epatch directory"
530     mysql_mv_patches
531     epatch || die "failed to apply all patches"
532 vivo 1.1
533 chtekk 1.30 # Additional checks, remove bundled zlib
534 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
535     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
536 chtekk 1.30 rm -f "scripts/mysqlbug"
537 vivo 1.1
538     # Make charsets install in the right place
539 vivo 1.37 find . -name 'Makefile.am' \
540     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
541 vivo 1.1
542 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
543 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
544     find . -name Makefile \
545     -o -name Makefile.in \
546     -o -name configure \
547     -exec rm -f {} \;
548     rm -f "ltmain.sh"
549 vivo 1.37 rm -f "scripts/mysqlbug"
550 chtekk 1.30 fi
551 vivo 1.1
552 vivo 1.51 local rebuilddirlist d
553 vivo 1.1
554 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
555 chtekk 1.42 rebuilddirlist="."
556 vivo 1.55 # TODO IMPO! Check this with a cmake expert
557 vivo 1.51 useq "innodb" \
558     && cmake \
559     -DCMAKE_C_COMPILER=$(which $(tc-getCC)) \
560     -DCMAKE_CXX_COMPILER=$(which $(tc-getCC)) \
561     "storage/innobase"
562 vivo 1.1 else
563     rebuilddirlist=". innobase"
564     fi
565    
566 chtekk 1.30 for d in ${rebuilddirlist} ; do
567     einfo "Reconfiguring dir '${d}'"
568 vivo 1.4 pushd "${d}" &>/dev/null
569 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
570 vivo 1.4 popd &>/dev/null
571 vivo 1.1 done
572    
573 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
574 chtekk 1.41 && useq "berkdb" ; then
575 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
576     pushd "bdb/dist" \
577 chtekk 1.30 && sh s_all \
578     || die "Failed bdb reconfigure" \
579     &>/dev/null
580 vivo 1.4 popd &>/dev/null
581 vivo 1.1 fi
582     }
583    
584 vivo 1.6 mysql_src_compile() {
585 chtekk 1.30 # Make sure the vars are correctly initialized
586     mysql_init_vars
587 vivo 1.1
588 chtekk 1.42 # $myconf is modified by the configure_* functions
589     local myconf=""
590 vivo 1.1
591 chtekk 1.42 if useq "minimal" ; then
592     configure_minimal
593 vivo 1.1 else
594 chtekk 1.42 configure_common
595 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
596 chtekk 1.42 configure_51
597 vivo 1.1 else
598 chtekk 1.42 configure_40_41_50
599 vivo 1.1 fi
600 vivo 1.23 fi
601    
602 chtekk 1.30 # Bug #114895, bug #110149
603 vivo 1.1 filter-flags "-O" "-O[01]"
604 chtekk 1.30
605     # glib-2.3.2_pre fix, bug #16496
606 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
607    
608 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
609 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
610 vivo 1.51 mysql_version_is_at_least "5.0" \
611 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
612 chtekk 1.39 export CXXFLAGS
613 vivo 1.1
614     econf \
615 vivo 1.55 --program-suffix="${MY_SUFFIX}" \
616 vivo 1.1 --libexecdir="/usr/sbin" \
617     --sysconfdir="${MY_SYSCONFDIR}" \
618     --localstatedir="${MY_LOCALSTATEDIR}" \
619     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
620     --libdir="${MY_LIBDIR}" \
621     --includedir="${MY_INCLUDEDIR}" \
622     --with-low-memory \
623     --with-client-ldflags=-lstdc++ \
624     --enable-thread-safe-client \
625     --with-comment="Gentoo Linux ${PF}" \
626     --without-docs \
627 chtekk 1.39 ${myconf} || die "econf failed"
628 vivo 1.1
629 chtekk 1.30 # TODO: Move this before autoreconf !!!
630 vivo 1.21 find . -type f -name Makefile -print0 \
631     | xargs -0 -n100 sed -i \
632     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
633 vivo 1.1
634 chtekk 1.39 emake || die "emake failed"
635 vivo 1.55
636     mysql_version_is_at_least "5.1.1" && useq "pbxt" && pbxt_src_compile
637 vivo 1.1 }
638    
639     mysql_src_install() {
640 chtekk 1.30 # Make sure the vars are correctly initialized
641     mysql_init_vars
642 vivo 1.1
643 vivo 1.55 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die
644    
645     mysql_version_is_at_least "5.1.12" && useq "pbxt" && pbxt_src_install
646 vivo 1.1
647     insinto "${MY_INCLUDEDIR}"
648     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
649    
650 chtekk 1.30 # Convenience links
651 vivo 1.55 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}"
652     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}"
653     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}"
654 vivo 1.1
655 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
656     rm -Rf "${D}/usr/share/info"
657 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
658     binary-configure* my-*.cnf mi_test_all*
659     do
660 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
661 vivo 1.1 done
662    
663 vivo 1.55 # TODO change at Makefile-am level
664     if [[ ${PN} == "mysql-slotted" ]] ; then
665     for moveme in "mysql_fix_privilege_tables.sql" \
666     "fill_help_tables.sql" "ndb-config-2-node.ini"
667     do
668     mv -f "${D}/usr/share/mysql/${moveme}" "${D}/usr/share/mysql${MY_SUFFIX}/" 2>/dev/null
669     done
670     fi
671    
672     # clean up stuff for a minimal build
673 vivo 1.26 if useq "minimal" ; then
674 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
675     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}
676 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
677 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
678 vivo 1.1 fi
679    
680 vivo 1.55 if [[ ${PN} == "mysql-slotted" ]] ; then
681     local notcatched=$(ls "${D}/usr/share/mysql"/*)
682     if [[ -n "${notcatched}" ]] ; then
683     ewarn "QA notice"
684     ewarn "${notcatched} files in /usr/share/mysql"
685     ewarn "bug mysql-herd to manage them"
686     fi
687     rm -Rf "${D}/usr/share/mysql"
688     fi
689    
690 chtekk 1.30 # Configuration stuff
691 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
692 chtekk 1.30 mysql_mycnf_version="4.1"
693     else
694     mysql_mycnf_version="4.0"
695     fi
696 vivo 1.1 insinto "${MY_SYSCONFDIR}"
697 vivo 1.55 doins scripts/mysqlaccess.conf
698     sed -e "s!@MY_SUFFIX@!${MY_SUFFIX}!g" \
699     -e "s!@DATADIR@!${DATADIR}!g" \
700 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
701 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
702 vivo 1.51 if mysql_version_is_at_least "4.1" && useq "latin1" ; then
703 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
704     fi
705 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
706    
707 chtekk 1.30 # Minimal builds don't have the MySQL server
708 vivo 1.26 if ! useq "minimal" ; then
709 chtekk 1.30 # Empty directories ...
710 vivo 1.1 diropts "-m0750"
711     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
712     dodir "${DATADIR}"
713     keepdir "${DATADIR}"
714     chown -R mysql:mysql "${D}/${DATADIR}"
715     fi
716    
717     diropts "-m0755"
718     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
719     dodir "${folder}"
720     keepdir "${folder}"
721     chown -R mysql:mysql "${D}/${folder}"
722     done
723     fi
724    
725 chtekk 1.30 # Docs
726 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
727 chtekk 1.30
728     # Minimal builds don't have the MySQL server
729 vivo 1.26 if ! useq "minimal" ; then
730 vivo 1.1 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 vivo 1.4 for script in scripts/mysql* ; do
741     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
742 vivo 1.1 done
743     fi
744 vivo 1.4
745 vivo 1.55 if [[ ${PN} == "mysql-slotted" ]] ; then
746     # MOVED HERE DUE TO BUG #121445
747     # create a list of files, to be used
748     # by external utilities
749     mkdir -p "${D}/var/lib/eselect/mysql/"
750     local filelist="${D}/var/lib/eselect/mysql/mysql${MY_SUFFIX}.filelist"
751     pushd "${D}/" &>/dev/null
752     find usr/bin/ usr/sbin/ \
753     -type f -name "*${MY_SUFFIX}*" \
754     -and -not -name "mysql_config${MY_SUFFIX}" \
755     > "${filelist}"
756     find usr/share/man \
757     -type f -name "*${MY_SUFFIX}*" \
758     | sed -e 's/$/.gz/' \
759     >> "${filelist}"
760     echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}"
761     echo "${MY_LIBDIR#"/"}" >> "${filelist}"
762     echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}"
763     popd &>/dev/null
764     fi
765 vivo 1.58
766     mysql_lib_symlinks "${D}"
767 vivo 1.15 }
768    
769     mysql_pkg_preinst() {
770 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
771     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
772 vivo 1.1 }
773    
774     mysql_pkg_postinst() {
775 chtekk 1.30 # Make sure the vars are correctly initialized
776 vivo 1.1 mysql_init_vars
777    
778 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
779 vivo 1.37 [[ -d "${ROOT}/var/log/mysql" ]] \
780     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
781 vivo 1.1
782 chtekk 1.30 # Secure the logfiles
783 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
784     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
785     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
786    
787 vivo 1.55 # Minimal builds don't have the MySQL server
788 vivo 1.26 if ! useq "minimal" ; then
789 vivo 1.55 docinto "support-files"
790     for script in \
791     support-files/my-*.cnf \
792     support-files/magic \
793     support-files/ndb-config-2-node.ini
794     do
795     dodoc "${script}"
796     done
797    
798     docinto "scripts"
799     for script in scripts/mysql* ; do
800     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
801     done
802     fi
803    
804     einfo "you may want to read slotting upgrade documents in the overlay"
805     if useq "pbxt" && mysql_version_is_at_least "5.1" ; then
806     # TODO tell it better ;-)
807     einfo "mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
808     einfo "CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
809     einfo "if, after that you cannot start the mysql server"
810     einfo "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
811     einfo "use the mysql upgrade script to restore the table"
812     einfo " or "
813     einfo "CREATE TABLE IF NOT EXISTS plugin ("
814     einfo " name char(64) binary DEFAULT '' NOT NULL,"
815     einfo " dl char(128) DEFAULT '' NOT NULL,"
816     einfo " PRIMARY KEY (name)"
817     einfo ") CHARACTER SET utf8 COLLATE utf8_bin;"
818 vivo 1.4 fi
819 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
820 chtekk 1.41 && useq "berkdb" \
821     && elog "Berkeley DB support is deprecated and will be removed in future versions!"
822 vivo 1.1 }
823    
824     mysql_pkg_config() {
825 chtekk 1.30 # Make sure the vars are correctly initialized
826 vivo 1.1 mysql_init_vars
827    
828 chtekk 1.30 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
829    
830 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
831 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
832     fi
833    
834     local pwd1="a"
835     local pwd2="b"
836     local maxtry=5
837    
838     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
839     ewarn "You have already a MySQL database in place."
840     ewarn "(${ROOT}/${DATADIR}/*)"
841     ewarn "Please rename or delete it if you wish to replace it."
842     die "MySQL database already exists!"
843     fi
844    
845     einfo "Creating the mysql database and setting proper"
846 chtekk 1.30 einfo "permissions on it ..."
847 vivo 1.1
848     einfo "Insert a password for the mysql 'root' user"
849     ewarn "Avoid [\"'\\_%] characters in the password"
850 chtekk 1.30 read -rsp " >" pwd1 ; echo
851 vivo 1.1
852 chtekk 1.30 einfo "Retype the password"
853 vivo 1.1 read -rsp " >" pwd2 ; echo
854    
855     if [[ "x$pwd1" != "x$pwd2" ]] ; then
856     die "Passwords are not the same"
857     fi
858    
859     local options=""
860     local sqltmp="$(emktemp)"
861    
862 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
863 vivo 1.1 [[ -r "${help_tables}" ]] \
864 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
865 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
866     help_tables="${TMPDIR}/fill_help_tables.sql"
867    
868 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
869 chtekk 1.30 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
870 vivo 1.4 popd &>/dev/null
871 chtekk 1.30 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
872 vivo 1.26 || die "MySQL databases not installed"
873 chtekk 1.30 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
874     chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
875 vivo 1.1
876 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
877 vivo 1.1 options="--skip-ndbcluster"
878    
879     # Filling timezones, see
880     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
881 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
882 vivo 1.1
883     if [[ -r "${help_tables}" ]] ; then
884     cat "${help_tables}" >> "${sqltmp}"
885     fi
886     fi
887    
888 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
889     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
890 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
891 vivo 1.1 ${options} \
892     --user=mysql \
893     --skip-grant-tables \
894     --basedir=${ROOT}/usr \
895     --datadir=${ROOT}/${DATADIR} \
896     --skip-innodb \
897     --skip-bdb \
898     --skip-networking \
899     --max_allowed_packet=8M \
900     --net_buffer_length=16K \
901     --socket=${socket} \
902     --pid-file=${pidfile}"
903 chtekk 1.30 ${mysqld} &
904 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
905 chtekk 1.30 maxtry=$((${maxtry}-1))
906 vivo 1.1 echo -n "."
907     sleep 1
908     done
909    
910 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
911 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
912 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
913 vivo 1.1 --socket=${socket} \
914     -hlocalhost \
915     -e "${sql}"
916    
917 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
918 vivo 1.1
919 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
920 vivo 1.1 --socket=${socket} \
921     -hlocalhost \
922     -uroot \
923     -p"${pwd1}" \
924     mysql < "${sqltmp}"
925    
926 chtekk 1.30 # Stop the server and cleanup
927 vivo 1.1 kill $(< "${pidfile}" )
928 chtekk 1.30 rm -f "${sqltmp}"
929     einfo "Stopping the server ..."
930 vivo 1.1 wait %1
931 chtekk 1.30 einfo "Done"
932 vivo 1.1 }
933    
934     mysql_pkg_postrm() {
935 vivo 1.55 if [[ ${PN} == "mysql-slotted" ]] ; then
936     mysql_lib_symlinks
937 vivo 1.58 mysql_clients_link_to_best_version
938 vivo 1.55 fi
939 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20