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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.58 - (hide annotations) (download)
Thu Jan 4 20:38:16 2007 UTC (7 years, 6 months ago) by vivo
Branch: MAIN
Changes since 1.57: +18 -7 lines
MY_EXTRAS_VER in ebuilds, bug #159973, bug #160023

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

  ViewVC Help
Powered by ViewVC 1.1.20