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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.86 - (hide annotations) (download)
Sun Mar 9 21:13:22 2008 UTC (6 years, 1 month ago) by robbat2
Branch: MAIN
Changes since 1.85: +17 -5 lines
Forcibly redo the patches every unpack, and also add support for grabbing them straight from the Git overlay, to speed up testing.

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

  ViewVC Help
Powered by ViewVC 1.1.20