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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.57 - (hide annotations) (download)
Thu Jan 4 11:17:05 2007 UTC (7 years, 6 months ago) by vivo
Branch: MAIN
Changes since 1.56: +2 -2 lines
mysql.eclass

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.57 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.56 2007/01/04 10:32:38 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.57 if [[ "${_MYPVR}" != "${PVR}" ]] && [[ -z "${MYSQL_VERSION_ID}" ]]
19 vivo 1.54 then
20     _MYPVR=${PVR}
21    
22 vivo 1.55 [[ -z ${MY_EXTRAS_VER} ]] && MY_EXTRAS_VER="20070103"
23    
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     >=sys-libs/zlib-1.2.3"
54    
55 vivo 1.55 # having different flavours at the same time is not a good idea
56     for i in "" "-community" "-slotted" ; do
57     [[ "${i}" == ${PN#mysql} ]] ||
58     DEPEND="${DEPEND} !dev-db/mysql${i}"
59     done
60 vivo 1.54
61 vivo 1.55 mysql_version_is_at_least "5.1" \
62 vivo 1.54 || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
63    
64     # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
65     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
66    
67 vivo 1.55 if mysql_version_is_at_least "5.1.12" ; then
68     DEPEND="${DEPEND} innodb? ( >=dev-util/cmake-2.4.3 )"
69     fi
70    
71 vivo 1.54 # Shorten the path because the socket path length must be shorter than 107 chars
72     # and we will run a mysql server during test phase
73 vivo 1.55 S="${WORKDIR}/mysql"
74 vivo 1.54
75 vivo 1.55 # BitKeeper dependency, compile-time only
76     [[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client"
77    
78     if [[ ${PN} == "mysql-slotted" ]] ; then
79     DEPEND="${DEPEND} app-admin/eselect-mysql"
80     fi
81    
82     if [[ ${PN} == "mysql-slotted" ]] ; then
83     SLOT=""
84     tpv=( ${PV//[-._]/ } )
85     for vatom in 0 1 2 ; do
86     SLOT="${SLOT}${tpv[${vatom}]}_"
87     done
88     #finally SLOT=5_0_24
89     SLOT=${SLOT:0:${#SLOT}-1}
90     else
91     SLOT="0"
92     fi
93 vivo 1.54
94     # Define correct SRC_URIs
95 vivo 1.55 SRC_URI="
96     ${SERVER_URI}
97     http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
98     "
99     mysql_version_is_at_least "5.1.12" \
100     && [[ -n "${PBXT_VERSION}" ]] \
101     && SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )"
102 vivo 1.54
103     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
104     HOMEPAGE="http://www.mysql.com/"
105     LICENSE="GPL-2"
106 vivo 1.55 IUSE="big-tables debug embedded minimal perl selinux ssl static"
107 vivo 1.54 RESTRICT="confcache"
108    
109 vivo 1.55 mysql_version_is_at_least "4.1" \
110 vivo 1.54 && IUSE="${IUSE} latin1"
111    
112 vivo 1.55 mysql_version_is_at_least "4.1.3" \
113 vivo 1.54 && IUSE="${IUSE} cluster extraengine"
114    
115 vivo 1.55 mysql_version_is_at_least "5.0" \
116 vivo 1.54 || IUSE="${IUSE} raid"
117 vivo 1.21
118 vivo 1.55 mysql_version_is_at_least "5.0.18" \
119 vivo 1.54 && IUSE="${IUSE} max-idx-128"
120 vivo 1.1
121 vivo 1.55 mysql_version_is_at_least "5.1" \
122 vivo 1.54 && IUSE="${IUSE} innodb"
123 vivo 1.1
124 vivo 1.55 mysql_version_is_at_least "5.1" \
125 vivo 1.54 || IUSE="${IUSE} berkdb"
126 vivo 1.55
127     mysql_version_is_at_least "5.1.12" \
128     && IUSE="${IUSE} pbxt"
129    
130     RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )"
131    
132 vivo 1.54 fi # if [[ "${_MYPVR}" != "${PVR}" ]]
133 chtekk 1.39
134 vivo 1.26 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
135 swegener 1.36 pkg_postinst pkg_config pkg_postrm
136 vivo 1.1
137 vivo 1.37 #
138     # HELPER FUNCTIONS:
139     #
140    
141 vivo 1.51 bitkeeper_fetch() {
142    
143 vivo 1.56 local reposuf
144     if [[ -z "${1}" ]] ; then
145     local tpv
146     tpv=( ${PV//[-._]/ } )
147     reposuf="mysql-${tpv[0]}.${tpv[1]}"
148     else
149     reposuf="${1}"
150     fi
151     einfo "using \"${reposuf}\" repository."
152     local repo_uri="bk://mysql.bkbits.net/${reposuf}"
153 vivo 1.51 ## -- ebk_store_dir: bitkeeper sources store directory
154     local ebk_store_dir="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/bk-src"
155     ## -- ebk_fetch_cmd: bitkeeper fetch command
156     # always fetch the latest revision, use -r<revision> if a specified revision is wanted
157     # hint: does not work
158     local ebk_fetch_cmd="sfioball"
159     ## -- ebk_update_cmd: bitkeeper update command
160     local ebk_update_cmd="update"
161    
162     #addread "/etc/bitkeeper"
163     addwrite "${ebk_store_dir}"
164    
165     if [[ ! -d "${ebk_store_dir}" ]]; then
166     debug-print "${FUNCNAME}: initial checkout. creating bitkeeper directory"
167     mkdir -p "${ebk_store_dir}" || die "${EBK}: can't mkdir ${ebk_store_dir}."
168     fi
169    
170     pushd "${ebk_store_dir}" || die "${EBK}: can't chdir to ${ebk_store_dir}"
171    
172 vivo 1.56 local wc_path=${reposuf}
173 vivo 1.51
174     if [[ ! -d "${wc_path}" ]]; then
175     local options="-r+"
176     # first check out
177     einfo "bitkeeper check out start -->"
178     einfo " repository: ${repo_uri}"
179     ${ebk_fetch_cmd} ${options} "${repo_uri}" ${wc_path} \
180     || die "${EBK}: can't fetch from ${repo_uri}."
181     else
182     if [[ ! -d "${wc_path}/BK" ]]; then
183     popd
184     die "Look like ${wc_path} is not a bitkeeper path."
185     fi
186    
187     # update working copy
188     einfo "bitkeeper update start -->"
189     einfo " repository: ${repo_uri}"
190    
191     ${ebk_update_cmd} "${repo_uri}" "${wc_path}" \
192     || die "BK: can't update from ${repo_uri} to ${wc_path}."
193     fi
194    
195     einfo " working copy: ${wc_path}"
196     cd "${wc_path}"
197     rsync -rlpgo --exclude="BK/" . "${S}" || die "BK: can't export to ${S}."
198 swegener 1.53
199 vivo 1.51 echo
200     popd
201    
202     }
203    
204     mysql_disable_test() {
205     local testname="${1}" ; shift
206     local reason="${@}"
207     local mysql_disable_file="${S}/mysql-test/t/disabled.def"
208     echo ${testname} : ${reason} >> "${mysql_disable_file}"
209     ewarn "test \"${testname}\" disabled because: \"${reason}\""
210     }
211    
212 vivo 1.8 # void mysql_init_vars()
213     #
214 chtekk 1.30 # Initialize global variables
215     # 2005-11-19 <vivo@gentoo.org>
216    
217 vivo 1.8 mysql_init_vars() {
218 vivo 1.55 if [[ ${SLOT} == "0" ]] ; then
219     MY_SUFFIX=""
220     else
221     MY_SUFFIX=${MY_SUFFIX:-"-${SLOT}"}
222     fi
223     MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR:-"/usr/share/mysql${MY_SUFFIX}"}
224     MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql${MY_SUFFIX}"}
225     MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql${MY_SUFFIX}"}
226     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql${MY_SUFFIX}"}
227     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql${MY_SUFFIX}"}
228     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql${MY_SUFFIX}"}
229 vivo 1.8
230 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
231 vivo 1.8 DATADIR=""
232 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
233 vivo 1.55 DATADIR=`"my_print_defaults${MY_SUFFIX}" mysqld 2>/dev/null \
234 vivo 1.26 | sed -ne '/datadir/s|^--datadir=||p' \
235     | tail -n1`
236 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
237 vivo 1.55 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
238     | sed -e 's/.*=\s*//'`
239 vivo 1.8 fi
240     fi
241 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
242 vivo 1.55 DATADIR="${MY_LOCALSTATEDIR}"
243 vivo 1.8 einfo "Using default DATADIR"
244     fi
245 chtekk 1.39 elog "MySQL DATADIR is ${DATADIR}"
246 vivo 1.8
247 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
248     if [[ -e "${DATADIR}" ]] ; then
249 chtekk 1.39 elog "Previous datadir found, it's YOUR job to change"
250     elog "ownership and take care of it"
251 vivo 1.8 PREVIOUS_DATADIR="yes"
252     else
253     PREVIOUS_DATADIR="no"
254     fi
255 chtekk 1.30 export PREVIOUS_DATADIR
256 vivo 1.8 fi
257     fi
258    
259 vivo 1.55 MY_SOURCEDIR=${SERVER_URI##*/}
260     MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
261    
262     export MY_SUFFIX MY_SHAREDSTATEDIR MY_SYSCONFDIR
263 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
264 vivo 1.55 export MY_INCLUDEDIR DATADIR MY_SOURCEDIR
265 vivo 1.8 }
266    
267 vivo 1.37 configure_minimal() {
268 vivo 1.46 # These are things we exclude from a minimal build, please
269     # note that the server actually does get built and installed,
270     # but we then delete it before packaging.
271     local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication"
272 vivo 1.37
273 vivo 1.46 for i in ${minimal_exclude_list} ; do
274     myconf="${myconf} --without-${i}"
275     done
276     myconf="${myconf} --with-extra-charsets=none"
277     myconf="${myconf} --enable-local-infile"
278 vivo 1.47
279     if useq "static" ; then
280     myconf="${myconf} --with-client-ldflags=-all-static"
281     myconf="${myconf} --disable-shared"
282     else
283     myconf="${myconf} --enable-shared --enable-static"
284     fi
285 chtekk 1.50
286     if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
287     myconf="${myconf} --with-charset=utf8"
288     myconf="${myconf} --with-collation=utf8_general_ci"
289     else
290     myconf="${myconf} --with-charset=latin1"
291     myconf="${myconf} --with-collation=latin1_swedish_ci"
292     fi
293 vivo 1.37 }
294    
295     configure_common() {
296 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
297 vivo 1.37 myconf="${myconf} --enable-local-infile"
298     myconf="${myconf} --with-extra-charsets=all"
299     myconf="${myconf} --with-mysqld-user=mysql"
300 chtekk 1.39 myconf="${myconf} --with-server"
301 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
302 vivo 1.37 myconf="${myconf} --without-libwrap"
303 chtekk 1.39
304 vivo 1.37 if useq "static" ; then
305     myconf="${myconf} --with-mysqld-ldflags=-all-static"
306     myconf="${myconf} --with-client-ldflags=-all-static"
307     myconf="${myconf} --disable-shared"
308     else
309     myconf="${myconf} --enable-shared --enable-static"
310     fi
311    
312     if useq "debug" ; then
313     myconf="${myconf} --with-debug=full"
314     else
315     myconf="${myconf} --without-debug"
316 vivo 1.51 mysql_version_is_at_least "4.1.3" \
317 vivo 1.37 && useq "cluster" \
318     && myconf="${myconf} --without-ndb-debug"
319     fi
320 chtekk 1.39
321 vivo 1.51 if mysql_version_is_at_least "4.1" && ! useq "latin1" ; then
322 vivo 1.37 myconf="${myconf} --with-charset=utf8"
323     myconf="${myconf} --with-collation=utf8_general_ci"
324     else
325     myconf="${myconf} --with-charset=latin1"
326     myconf="${myconf} --with-collation=latin1_swedish_ci"
327     fi
328 chtekk 1.39
329 vivo 1.37 if useq "embedded" ; then
330     myconf="${myconf} --with-embedded-privilege-control"
331     myconf="${myconf} --with-embedded-server"
332     else
333     myconf="${myconf} --without-embedded-privilege-control"
334     myconf="${myconf} --without-embedded-server"
335     fi
336    
337     }
338    
339     configure_40_41_50() {
340     myconf="${myconf} $(use_with perl bench)"
341     myconf="${myconf} --enable-assembler"
342     myconf="${myconf} --with-extra-tools"
343     myconf="${myconf} --with-innodb"
344     myconf="${myconf} --without-readline"
345 vivo 1.51 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
346 vivo 1.37
347     if useq "ssl" ; then
348     # --with-vio is not needed anymore, it's on by default and
349     # has been removed from configure
350 vivo 1.51 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
351     if mysql_version_is_at_least "5.0.6" ; then
352 vivo 1.37 # myconf="${myconf} --with-yassl"
353     myconf="${myconf} --with-openssl"
354     else
355     myconf="${myconf} --with-openssl"
356     fi
357     else
358     myconf="${myconf} --without-openssl"
359     fi
360    
361     # The following fix is due to a bug with bdb on SPARC's. See:
362     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
363     # It comes down to non-64-bit safety problems.
364     if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
365 chtekk 1.39 elog "Berkeley DB support was disabled due to incompatible arch"
366 vivo 1.37 myconf="${myconf} --without-berkeley-db"
367     else
368 chtekk 1.39 if useq "berkdb" ; then
369     myconf="${myconf} --with-berkeley-db=./bdb"
370     else
371     myconf="${myconf} --without-berkeley-db"
372     fi
373 vivo 1.37 fi
374    
375 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
376 vivo 1.37 myconf="${myconf} --with-geometry"
377     myconf="${myconf} $(use_with cluster ndbcluster)"
378     fi
379    
380 vivo 1.51 if mysql_version_is_at_least "4.1.3" && useq "extraengine" ; then
381 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
382     myconf="${myconf} --with-archive-storage-engine"
383    
384     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
385     myconf="${myconf} --with-csv-storage-engine"
386    
387     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
388     myconf="${myconf} --with-blackhole-storage-engine"
389    
390     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
391     # http://dev.mysql.com/doc/mysql/en/federated-description.html
392     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
393 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
394 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
395     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
396 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
397     fi
398     fi
399    
400 vivo 1.51 mysql_version_is_at_least "5.0.18" \
401 vivo 1.37 && useq "max-idx-128" \
402     && myconf="${myconf} --with-max-indexes=128"
403     }
404    
405 chtekk 1.39 configure_51() {
406 chtekk 1.40 # TODO: !!!! readd --without-readline
407 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
408 vivo 1.37 # readline.h instead of history.h
409     myconf="${myconf} $(use_with ssl)"
410     myconf="${myconf} --enable-assembler"
411     myconf="${myconf} --with-geometry"
412     myconf="${myconf} --with-readline"
413     myconf="${myconf} --with-row-based-replication"
414     myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
415     myconf="${myconf} --without-pstack"
416     useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
417 chtekk 1.39
418 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
419     # like configuration=none
420     local plugins="csv,myisam,myisammrg,heap"
421 chtekk 1.39 if useq "extraengine" ; then
422 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
423 vivo 1.52 plugins="${plugins},archive,blackhole,example,federated,partition"
424 vivo 1.37
425 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
426     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
427 vivo 1.37 fi
428    
429     if useq "innodb" ; then
430     plugins="${plugins},innobase"
431     fi
432    
433     # like configuration=max-no-ndb
434     if useq "cluster" ; then
435     plugins="${plugins},ndbcluster"
436     myconf="${myconf} --with-ndb-binlog"
437     fi
438    
439     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     useq "debug" && myconf="${myconf} --with-debug=full"
455     # 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     if useq "static" && useq "ssl" ; then
480     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 chtekk 1.30 && useq "raid" \
486     && useq "static" ; then
487     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 chtekk 1.30 && ( useq "cluster" || useq "extraengine" ) \
494 vivo 1.26 && useq "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 chtekk 1.41 && useq "berkdb" \
501     && 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     elif mysql_check_version_range "5.2 to 5.2.99" ; then
513     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 vivo 1.51 useq "innodb" \
556     && 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 chtekk 1.41 && useq "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 chtekk 1.42 if useq "minimal" ; then
590     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     mysql_version_is_at_least "5.1.1" && useq "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     mysql_version_is_at_least "5.1.12" && useq "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 vivo 1.26 if useq "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 vivo 1.51 if mysql_version_is_at_least "4.1" && useq "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 vivo 1.26 if ! useq "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 vivo 1.26 if ! useq "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.15 }
764    
765     mysql_pkg_preinst() {
766 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
767     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
768 vivo 1.1 }
769    
770     mysql_pkg_postinst() {
771 chtekk 1.30 # Make sure the vars are correctly initialized
772 vivo 1.1 mysql_init_vars
773    
774 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
775 vivo 1.37 [[ -d "${ROOT}/var/log/mysql" ]] \
776     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
777 vivo 1.1
778 chtekk 1.30 # Secure the logfiles
779 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
780     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
781     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
782    
783 vivo 1.55 # Minimal builds don't have the MySQL server
784 vivo 1.26 if ! useq "minimal" ; then
785 vivo 1.55 docinto "support-files"
786     for script in \
787     support-files/my-*.cnf \
788     support-files/magic \
789     support-files/ndb-config-2-node.ini
790     do
791     dodoc "${script}"
792     done
793    
794     docinto "scripts"
795     for script in scripts/mysql* ; do
796     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
797     done
798     fi
799    
800     einfo "you may want to read slotting upgrade documents in the overlay"
801     if useq "pbxt" && mysql_version_is_at_least "5.1" ; then
802     # TODO tell it better ;-)
803     einfo "mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
804     einfo "CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
805     einfo "if, after that you cannot start the mysql server"
806     einfo "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
807     einfo "use the mysql upgrade script to restore the table"
808     einfo " or "
809     einfo "CREATE TABLE IF NOT EXISTS plugin ("
810     einfo " name char(64) binary DEFAULT '' NOT NULL,"
811     einfo " dl char(128) DEFAULT '' NOT NULL,"
812     einfo " PRIMARY KEY (name)"
813     einfo ") CHARACTER SET utf8 COLLATE utf8_bin;"
814 vivo 1.4 fi
815 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
816 chtekk 1.41 && useq "berkdb" \
817     && elog "Berkeley DB support is deprecated and will be removed in future versions!"
818 vivo 1.1 }
819    
820     mysql_pkg_config() {
821 chtekk 1.30 # Make sure the vars are correctly initialized
822 vivo 1.1 mysql_init_vars
823    
824 chtekk 1.30 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
825    
826 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
827 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
828     fi
829    
830     local pwd1="a"
831     local pwd2="b"
832     local maxtry=5
833    
834     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
835     ewarn "You have already a MySQL database in place."
836     ewarn "(${ROOT}/${DATADIR}/*)"
837     ewarn "Please rename or delete it if you wish to replace it."
838     die "MySQL database already exists!"
839     fi
840    
841     einfo "Creating the mysql database and setting proper"
842 chtekk 1.30 einfo "permissions on it ..."
843 vivo 1.1
844     einfo "Insert a password for the mysql 'root' user"
845     ewarn "Avoid [\"'\\_%] characters in the password"
846 chtekk 1.30 read -rsp " >" pwd1 ; echo
847 vivo 1.1
848 chtekk 1.30 einfo "Retype the password"
849 vivo 1.1 read -rsp " >" pwd2 ; echo
850    
851     if [[ "x$pwd1" != "x$pwd2" ]] ; then
852     die "Passwords are not the same"
853     fi
854    
855     local options=""
856     local sqltmp="$(emktemp)"
857    
858 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
859 vivo 1.1 [[ -r "${help_tables}" ]] \
860 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
861 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
862     help_tables="${TMPDIR}/fill_help_tables.sql"
863    
864 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
865 chtekk 1.30 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
866 vivo 1.4 popd &>/dev/null
867 chtekk 1.30 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
868 vivo 1.26 || die "MySQL databases not installed"
869 chtekk 1.30 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
870     chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
871 vivo 1.1
872 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
873 vivo 1.1 options="--skip-ndbcluster"
874    
875     # Filling timezones, see
876     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
877 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
878 vivo 1.1
879     if [[ -r "${help_tables}" ]] ; then
880     cat "${help_tables}" >> "${sqltmp}"
881     fi
882     fi
883    
884 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
885     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
886 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
887 vivo 1.1 ${options} \
888     --user=mysql \
889     --skip-grant-tables \
890     --basedir=${ROOT}/usr \
891     --datadir=${ROOT}/${DATADIR} \
892     --skip-innodb \
893     --skip-bdb \
894     --skip-networking \
895     --max_allowed_packet=8M \
896     --net_buffer_length=16K \
897     --socket=${socket} \
898     --pid-file=${pidfile}"
899 chtekk 1.30 ${mysqld} &
900 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
901 chtekk 1.30 maxtry=$((${maxtry}-1))
902 vivo 1.1 echo -n "."
903     sleep 1
904     done
905    
906 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
907 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
908 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
909 vivo 1.1 --socket=${socket} \
910     -hlocalhost \
911     -e "${sql}"
912    
913 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
914 vivo 1.1
915 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
916 vivo 1.1 --socket=${socket} \
917     -hlocalhost \
918     -uroot \
919     -p"${pwd1}" \
920     mysql < "${sqltmp}"
921    
922 chtekk 1.30 # Stop the server and cleanup
923 vivo 1.1 kill $(< "${pidfile}" )
924 chtekk 1.30 rm -f "${sqltmp}"
925     einfo "Stopping the server ..."
926 vivo 1.1 wait %1
927 chtekk 1.30 einfo "Done"
928 vivo 1.1 }
929    
930     mysql_pkg_postrm() {
931 vivo 1.55 if [[ ${PN} == "mysql-slotted" ]] ; then
932     mysql_lib_symlinks
933     fi
934 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20