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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.87 - (hide annotations) (download)
Sun Mar 9 21:19:14 2008 UTC (6 years, 7 months ago) by robbat2
Branch: MAIN
Changes since 1.86: +2 -1 lines
Make sure $DISTDIR/git-src/mysql-extras is used for the patchset copy.

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

  ViewVC Help
Powered by ViewVC 1.1.20