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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.65 - (hide annotations) (download)
Mon Jan 8 09:12:45 2007 UTC (7 years, 10 months ago) by vivo
Branch: MAIN
Changes since 1.64: +2 -2 lines
updated lated patches sources

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

  ViewVC Help
Powered by ViewVC 1.1.20