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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.59 - (hide annotations) (download)
Fri Jan 5 00:07:23 2007 UTC (7 years, 8 months ago) by vivo
Branch: MAIN
Changes since 1.58: +8 -6 lines
bugs 156301,160059

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

  ViewVC Help
Powered by ViewVC 1.1.20