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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.88 - (hide annotations) (download)
Mon Mar 10 02:47:20 2008 UTC (6 years, 10 months ago) by robbat2
Branch: MAIN
Changes since 1.87: +4 -2 lines
Trim the trailing letters used by upstream for respun tarballs.

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

  ViewVC Help
Powered by ViewVC 1.1.20