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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.93 - (hide annotations) (download)
Thu May 29 05:28:54 2008 UTC (6 years, 1 month ago) by robbat2
Branch: MAIN
Changes since 1.92: +5 -1 lines
MySQL hates you if your machine is called localhost per bug #213475.

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

  ViewVC Help
Powered by ViewVC 1.1.20