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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.68 - (hide annotations) (download)
Fri Jan 12 17:00:39 2007 UTC (7 years, 8 months ago) by chtekk
Branch: MAIN
Changes since 1.67: +3 -4 lines
Change dep from sys-apps/mysql to dev-db/mysql-init-scripts.

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

  ViewVC Help
Powered by ViewVC 1.1.20