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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.55 - (hide annotations) (download)
Wed Jan 3 15:27:13 2007 UTC (7 years, 6 months ago) by vivo
Branch: MAIN
Changes since 1.54: +190 -107 lines
new eclasses, there is a separated document that describe changes

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

  ViewVC Help
Powered by ViewVC 1.1.20