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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.90 - (hide annotations) (download)
Thu May 22 18:13:33 2008 UTC (6 years, 1 month ago) by robbat2
Branch: MAIN
Changes since 1.89: +12 -8 lines
Take cmake, ed, bk_client out of RDEPEND for building mysql.

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.90 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.89 2008/04/05 00:43:26 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     if ! hasq userpriv ${FEATURES} ; then
473     die "Testing with FEATURES=-userpriv is no longer supported by upstream"
474     fi
475     fi
476     fi
477 swegener 1.53
478 chtekk 1.30 # Check for USE flag problems in pkg_setup
479 cardoe 1.67 if use static && use ssl ; then
480 chtekk 1.30 eerror "MySQL does not support being built statically with SSL support enabled!"
481     die "MySQL does not support being built statically with SSL support enabled!"
482     fi
483 vivo 1.1
484 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
485 cardoe 1.67 && use raid \
486     && use static ; then
487 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
488     eerror "with RAID support enabled."
489     die "USE flags 'raid' and 'static' conflict!"
490 vivo 1.1 fi
491    
492 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
493 cardoe 1.67 && ( use cluster || use extraengine ) \
494     && use minimal ; then
495 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
496     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
497 vivo 1.1 fi
498 robbat2 1.83
499     # This should come after all of the die statements
500     enewgroup mysql 60 || die "problem adding 'mysql' group"
501     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
502 chtekk 1.39
503 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
504 cardoe 1.67 && use berkdb \
505 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
506 chtekk 1.30 }
507    
508     mysql_src_unpack() {
509     # Initialize the proper variables first
510     mysql_init_vars
511 vivo 1.1
512 chtekk 1.30 unpack ${A}
513 robbat2 1.86 # Grab the patches
514     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
515     # Bitkeeper checkout support
516 vivo 1.55 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then
517 vivo 1.56 if mysql_check_version_range "5.1 to 5.1.99" ; then
518     bitkeeper_fetch "mysql-5.1-ndb"
519 chtekk 1.69 elif mysql_check_version_range "5.2 to 5.2.99" ; then
520 vivo 1.56 bitkeeper_fetch "mysql-5.2-falcon"
521     else
522     bitkeeper_fetch
523     fi
524 vivo 1.55 cd "${S}"
525 chtekk 1.69 einfo "Running upstream autorun over BK sources ..."
526 vivo 1.55 BUILD/autorun.sh
527     else
528     mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
529     cd "${S}"
530     fi
531 vivo 1.1
532 chtekk 1.30 # Apply the patches for this MySQL version
533 vivo 1.55 EPATCH_SUFFIX="patch"
534 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
535 robbat2 1.86 # Clean out old items
536     rm -f "${EPATCH_SOURCE}"/*
537     # Now link in right patches
538 vivo 1.55 mysql_mv_patches
539 robbat2 1.86 # And apply
540 chtekk 1.69 epatch
541 vivo 1.1
542 chtekk 1.30 # Additional checks, remove bundled zlib
543 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
544     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
545 chtekk 1.30 rm -f "scripts/mysqlbug"
546 vivo 1.1
547     # Make charsets install in the right place
548 vivo 1.37 find . -name 'Makefile.am' \
549     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
550 vivo 1.1
551 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
552 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
553     find . -name Makefile \
554     -o -name Makefile.in \
555     -o -name configure \
556     -exec rm -f {} \;
557     rm -f "ltmain.sh"
558 vivo 1.37 rm -f "scripts/mysqlbug"
559 chtekk 1.30 fi
560 vivo 1.1
561 vivo 1.51 local rebuilddirlist d
562 vivo 1.1
563 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
564 chtekk 1.42 rebuilddirlist="."
565 swegener 1.74 # TODO: check this with a cmake expert
566 cardoe 1.67 use innodb \
567 vivo 1.51 && cmake \
568 chtekk 1.72 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
569 robbat2 1.82 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
570 vivo 1.51 "storage/innobase"
571 vivo 1.1 else
572     rebuilddirlist=". innobase"
573     fi
574    
575 chtekk 1.30 for d in ${rebuilddirlist} ; do
576     einfo "Reconfiguring dir '${d}'"
577 vivo 1.4 pushd "${d}" &>/dev/null
578 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
579 vivo 1.4 popd &>/dev/null
580 vivo 1.1 done
581    
582 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
583 cardoe 1.67 && use berkdb ; then
584 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
585 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
586     || die "Could not copy libtool.m4 to bdb/dist/"
587     pushd "bdb/dist" &>/dev/null
588     sh s_all \
589     || die "Failed bdb reconfigure"
590 vivo 1.4 popd &>/dev/null
591 vivo 1.1 fi
592     }
593    
594 vivo 1.6 mysql_src_compile() {
595 chtekk 1.30 # Make sure the vars are correctly initialized
596     mysql_init_vars
597 vivo 1.1
598 chtekk 1.42 # $myconf is modified by the configure_* functions
599     local myconf=""
600 vivo 1.1
601 cardoe 1.67 if use minimal ; then
602 chtekk 1.42 configure_minimal
603 vivo 1.1 else
604 chtekk 1.42 configure_common
605 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
606 chtekk 1.42 configure_51
607 vivo 1.1 else
608 chtekk 1.42 configure_40_41_50
609 vivo 1.1 fi
610 vivo 1.23 fi
611    
612 chtekk 1.30 # Bug #114895, bug #110149
613 vivo 1.1 filter-flags "-O" "-O[01]"
614 chtekk 1.30
615     # glib-2.3.2_pre fix, bug #16496
616 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
617    
618 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
619 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
620 vivo 1.51 mysql_version_is_at_least "5.0" \
621 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
622 chtekk 1.39 export CXXFLAGS
623 vivo 1.1
624     econf \
625     --libexecdir="/usr/sbin" \
626     --sysconfdir="${MY_SYSCONFDIR}" \
627     --localstatedir="${MY_LOCALSTATEDIR}" \
628     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
629     --libdir="${MY_LIBDIR}" \
630     --includedir="${MY_INCLUDEDIR}" \
631     --with-low-memory \
632     --with-client-ldflags=-lstdc++ \
633     --enable-thread-safe-client \
634     --with-comment="Gentoo Linux ${PF}" \
635     --without-docs \
636 chtekk 1.39 ${myconf} || die "econf failed"
637 vivo 1.1
638 chtekk 1.30 # TODO: Move this before autoreconf !!!
639 vivo 1.21 find . -type f -name Makefile -print0 \
640     | xargs -0 -n100 sed -i \
641     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
642 vivo 1.1
643 chtekk 1.39 emake || die "emake failed"
644 vivo 1.55
645 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
646 vivo 1.1 }
647    
648     mysql_src_install() {
649 chtekk 1.30 # Make sure the vars are correctly initialized
650     mysql_init_vars
651 vivo 1.1
652 chtekk 1.69 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
653 vivo 1.55
654 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
655 vivo 1.1
656     insinto "${MY_INCLUDEDIR}"
657     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
658    
659 chtekk 1.30 # Convenience links
660 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
661     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
662     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
663 vivo 1.1
664 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
665     rm -Rf "${D}/usr/share/info"
666 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
667     binary-configure* my-*.cnf mi_test_all*
668     do
669 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
670 vivo 1.1 done
671    
672 chtekk 1.69 # Clean up stuff for a minimal build
673 cardoe 1.67 if use minimal ; then
674 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
675     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}
676 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
677 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
678 vivo 1.1 fi
679    
680 chtekk 1.30 # Configuration stuff
681 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
682 chtekk 1.30 mysql_mycnf_version="4.1"
683     else
684     mysql_mycnf_version="4.0"
685     fi
686 vivo 1.1 insinto "${MY_SYSCONFDIR}"
687 vivo 1.55 doins scripts/mysqlaccess.conf
688 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
689 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
690 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
691 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
692 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
693     fi
694 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
695    
696 chtekk 1.30 # Minimal builds don't have the MySQL server
697 cardoe 1.67 if ! use minimal ; then
698 chtekk 1.30 # Empty directories ...
699 vivo 1.1 diropts "-m0750"
700     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
701 robbat2 1.75 dodir "${MY_DATADIR}"
702     keepdir "${MY_DATADIR}"
703     chown -R mysql:mysql "${D}/${MY_DATADIR}"
704 vivo 1.1 fi
705    
706     diropts "-m0755"
707     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
708     dodir "${folder}"
709     keepdir "${folder}"
710     chown -R mysql:mysql "${D}/${folder}"
711     done
712     fi
713    
714 chtekk 1.30 # Docs
715 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
716 robbat2 1.78 doinfo ${S}/Docs/mysql.info
717 chtekk 1.30
718     # Minimal builds don't have the MySQL server
719 cardoe 1.67 if ! use minimal ; then
720 vivo 1.1 docinto "support-files"
721     for script in \
722     support-files/my-*.cnf \
723     support-files/magic \
724     support-files/ndb-config-2-node.ini
725     do
726     dodoc "${script}"
727     done
728    
729     docinto "scripts"
730 vivo 1.4 for script in scripts/mysql* ; do
731     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
732 vivo 1.1 done
733 robbat2 1.78
734 vivo 1.1 fi
735 vivo 1.4
736 vivo 1.58 mysql_lib_symlinks "${D}"
737 vivo 1.15 }
738    
739     mysql_pkg_preinst() {
740 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
741     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
742 vivo 1.1 }
743    
744     mysql_pkg_postinst() {
745 chtekk 1.30 # Make sure the vars are correctly initialized
746 vivo 1.1 mysql_init_vars
747    
748 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
749 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
750 vivo 1.1
751 chtekk 1.30 # Secure the logfiles
752 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
753     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
754     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
755    
756 vivo 1.55 # Minimal builds don't have the MySQL server
757 cardoe 1.67 if ! use minimal ; then
758 vivo 1.55 docinto "support-files"
759     for script in \
760     support-files/my-*.cnf \
761     support-files/magic \
762     support-files/ndb-config-2-node.ini
763     do
764     dodoc "${script}"
765     done
766    
767     docinto "scripts"
768     for script in scripts/mysql* ; do
769     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
770     done
771 chtekk 1.69
772     einfo
773     elog "You might want to run:"
774     elog "\"emerge --config =${CATEGORY}/${PF}\""
775     elog "if this is a new install."
776     einfo
777 vivo 1.55 fi
778    
779 cardoe 1.67 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
780 chtekk 1.69 # TODO: explain it better
781     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
782     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
783     elog "if, after that, you cannot start the MySQL server,"
784 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
785 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
786     elog "or execute the following SQL command:"
787     elog " CREATE TABLE IF NOT EXISTS plugin ("
788     elog " name char(64) binary DEFAULT '' NOT NULL,"
789     elog " dl char(128) DEFAULT '' NOT NULL,"
790     elog " PRIMARY KEY (name)"
791     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
792 vivo 1.4 fi
793 chtekk 1.69
794 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
795 cardoe 1.67 && use berkdb \
796 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
797 vivo 1.1 }
798    
799     mysql_pkg_config() {
800 chtekk 1.30 # Make sure the vars are correctly initialized
801 vivo 1.1 mysql_init_vars
802    
803 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
804 chtekk 1.30
805 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
806 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
807     fi
808    
809     local pwd1="a"
810     local pwd2="b"
811     local maxtry=5
812    
813 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
814 vivo 1.1 ewarn "You have already a MySQL database in place."
815 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
816 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
817     die "MySQL database already exists!"
818     fi
819    
820     einfo "Creating the mysql database and setting proper"
821 chtekk 1.30 einfo "permissions on it ..."
822 vivo 1.1
823     einfo "Insert a password for the mysql 'root' user"
824     ewarn "Avoid [\"'\\_%] characters in the password"
825 chtekk 1.30 read -rsp " >" pwd1 ; echo
826 vivo 1.1
827 chtekk 1.30 einfo "Retype the password"
828 vivo 1.1 read -rsp " >" pwd2 ; echo
829    
830     if [[ "x$pwd1" != "x$pwd2" ]] ; then
831     die "Passwords are not the same"
832     fi
833    
834     local options=""
835     local sqltmp="$(emktemp)"
836    
837 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
838 vivo 1.1 [[ -r "${help_tables}" ]] \
839 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
840 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
841     help_tables="${TMPDIR}/fill_help_tables.sql"
842    
843 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
844 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
845     if [ $? -ne 0 ]; then
846     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
847     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
848     fi
849 vivo 1.4 popd &>/dev/null
850 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
851 vivo 1.26 || die "MySQL databases not installed"
852 robbat2 1.75 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2> /dev/null
853     chmod 0750 "${ROOT}/${MY_DATADIR}" 2> /dev/null
854 vivo 1.1
855 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
856 vivo 1.1 options="--skip-ndbcluster"
857    
858     # Filling timezones, see
859     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
860 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
861 vivo 1.1
862     if [[ -r "${help_tables}" ]] ; then
863     cat "${help_tables}" >> "${sqltmp}"
864     fi
865     fi
866    
867 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
868     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
869 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
870 vivo 1.1 ${options} \
871     --user=mysql \
872     --skip-grant-tables \
873     --basedir=${ROOT}/usr \
874 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
875 vivo 1.1 --skip-innodb \
876     --skip-bdb \
877     --skip-networking \
878     --max_allowed_packet=8M \
879     --net_buffer_length=16K \
880     --socket=${socket} \
881     --pid-file=${pidfile}"
882 chtekk 1.30 ${mysqld} &
883 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
884 chtekk 1.30 maxtry=$((${maxtry}-1))
885 vivo 1.1 echo -n "."
886     sleep 1
887     done
888    
889 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
890 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
891 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
892 vivo 1.1 --socket=${socket} \
893     -hlocalhost \
894     -e "${sql}"
895    
896 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
897 vivo 1.1
898 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
899 vivo 1.1 --socket=${socket} \
900     -hlocalhost \
901     -uroot \
902     -p"${pwd1}" \
903     mysql < "${sqltmp}"
904    
905 chtekk 1.30 # Stop the server and cleanup
906 vivo 1.1 kill $(< "${pidfile}" )
907 chtekk 1.30 rm -f "${sqltmp}"
908     einfo "Stopping the server ..."
909 vivo 1.1 wait %1
910 chtekk 1.30 einfo "Done"
911 vivo 1.1 }
912    
913     mysql_pkg_postrm() {
914 chtekk 1.70 : # mysql_lib_symlinks "${D}"
915 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20