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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.96 - (hide annotations) (download)
Thu May 29 19:35:51 2008 UTC (6 years, 2 months ago) by robbat2
Branch: MAIN
Changes since 1.95: +2 -2 lines
Make FEATURES=-userpriv test non-fatal during pkg_setup, as portage always runs pkg_setup as root, so we cannot detect FEATURES=-userpriv by using UID.

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

  ViewVC Help
Powered by ViewVC 1.1.20