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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.83 - (hide annotations) (download)
Thu Nov 8 09:42:55 2007 UTC (6 years, 10 months ago) by robbat2
Branch: MAIN
Changes since 1.82: +12 -3 lines
Add the FEATURES=-userpriv die so that testing fails earlier than src_test.

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

  ViewVC Help
Powered by ViewVC 1.1.20