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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.89 - (hide annotations) (download)
Sat Apr 5 00:43:26 2008 UTC (7 years, 1 month ago) by robbat2
Branch: MAIN
Changes since 1.88: +3 -2 lines
Use the last instance of datadir if we fall to manually processing.

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

  ViewVC Help
Powered by ViewVC 1.1.20