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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.147 - (hide annotations) (download)
Sun Aug 8 23:31:05 2010 UTC (4 years, 4 months ago) by robbat2
Branch: MAIN
Changes since 1.146: +5 -3 lines
Bring in a patch from the overlay so we can override bad tarball packaging.

1 robbat2 1.119 # Copyright 1999-2009 Gentoo Foundation
2 vivo 1.1 # Distributed under the terms of the GNU General Public License v2
3 robbat2 1.147 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.146 2010/05/13 19:45:47 robbat2 Exp $
4 vivo 1.1
5 robbat2 1.119 # @ECLASS: mysql.eclass
6     # @MAINTAINER:
7 vivo 1.54 # Author: Francesco Riosa (Retired) <vivo@gentoo.org>
8 robbat2 1.119 # Maintainers: MySQL Team <mysql-bugs@gentoo.org>
9 robbat2 1.86 # - Luca Longinotti <chtekk@gentoo.org>
10     # - Robin H. Johnson <robbat2@gentoo.org>
11 robbat2 1.119 # @BLURB: This eclass provides most of the functions for mysql ebuilds
12     # @DESCRIPTION:
13     # The mysql.eclass provides almost all the code to build the mysql ebuilds
14     # including the src_unpack, src_prepare, src_configure, src_compile,
15     # scr_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
16     # phase hooks.
17 chtekk 1.30
18 vivo 1.59 WANT_AUTOCONF="latest"
19     WANT_AUTOMAKE="latest"
20 chtekk 1.69
21 robbat2 1.127 inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator toolchain-funcs
22 robbat2 1.114
23 robbat2 1.126 # Shorten the path because the socket path length must be shorter than 107 chars
24     # and we will run a mysql server during test phase
25     S="${WORKDIR}/mysql"
26    
27     [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
28     if [[ "${MY_EXTRAS_VER}" == "live" ]]; then
29     EGIT_PROJECT=mysql-extras
30     EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
31     inherit git
32     fi
33    
34 robbat2 1.113 case "${EAPI:-0}" in
35     2)
36     EXPORT_FUNCTIONS pkg_setup \
37     src_unpack src_prepare \
38     src_configure src_compile \
39     src_install \
40     pkg_preinst pkg_postinst \
41     pkg_config pkg_postrm
42     IUSE_DEFAULT_ON='+'
43     ;;
44 robbat2 1.119 0 | 1)
45 robbat2 1.113 EXPORT_FUNCTIONS pkg_setup \
46     src_unpack \
47     src_compile \
48     src_install \
49     pkg_preinst pkg_postinst \
50     pkg_config pkg_postrm
51     ;;
52 robbat2 1.119 *)
53     die "Unsupported EAPI: ${EAPI}" ;;
54 robbat2 1.113 esac
55    
56 robbat2 1.137
57     # @ECLASS-VARIABLE: MYSQL_PV_MAJOR
58     # @DESCRIPTION:
59     # Upstream MySQL considers the first two parts of the version number to be the
60     # major version. Upgrades that change major version should always run
61     # mysql_upgrade.
62     MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
63    
64 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
65     # @DESCRIPTION:
66 vivo 1.60 # MYSQL_VERSION_ID will be:
67     # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
68     # This is an important part, because many of the choices the MySQL ebuild will do
69     # depend on this variable.
70     # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
71 robbat2 1.88 # We also strip off upstream's trailing letter that they use to respin tarballs
72 chtekk 1.69
73 vivo 1.60 MYSQL_VERSION_ID=""
74 robbat2 1.88 tpv="${PV%[a-z]}"
75     tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
76 vivo 1.60 for vatom in 0 1 2 3 ; do
77     # pad to length 2
78     tpv[${vatom}]="00${tpv[${vatom}]}"
79     MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
80     done
81     # strip leading "0" (otherwise it's considered an octal number by BASH)
82     MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
83    
84 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_COMMUNITY_FEATURES
85     # @DESCRIPTION:
86     # Specifiy if community features are available. Possible values are 1 (yes)
87     # and 0 (no).
88 robbat2 1.110 # Community features are available in mysql-community
89     # AND in the re-merged mysql-5.0.82 and newer
90 robbat2 1.137 if [ "${PN}" == "mysql-community" -o "${PN}" == "mariadb" ]; then
91 robbat2 1.110 MYSQL_COMMUNITY_FEATURES=1
92     elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
93     MYSQL_COMMUNITY_FEATURES=1
94 robbat2 1.117 elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
95     MYSQL_COMMUNITY_FEATURES=1
96 robbat2 1.132 elif [ "${PV#5.4}" != "${PV}" ] ; then
97     MYSQL_COMMUNITY_FEATURES=1
98     elif [ "${PV#5.5}" != "${PV}" ] ; then
99     MYSQL_COMMUNITY_FEATURES=1
100     elif [ "${PV#6.0}" != "${PV}" ] ; then
101 hanno 1.118 MYSQL_COMMUNITY_FEATURES=1
102 robbat2 1.110 else
103     MYSQL_COMMUNITY_FEATURES=0
104     fi
105    
106 robbat2 1.120 # @ECLASS-VARIABLE: XTRADB_VER
107     # @DESCRIPTION:
108     # Version of the XTRADB storage engine
109     XTRADB_VER="${XTRADB_VER}"
110    
111     # @ECLASS-VARIABLE: PERCONA_VER
112     # @DESCRIPTION:
113     # Designation by PERCONA for a MySQL version to apply an XTRADB release
114     PERCONA_VER="${PERCONA_VER}"
115    
116 vivo 1.60 # Be warned, *DEPEND are version-dependant
117 robbat2 1.90 # These are used for both runtime and compiletime
118 vivo 1.60 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
119     userland_GNU? ( sys-process/procps )
120     >=sys-apps/sed-4
121     >=sys-apps/texinfo-4.7-r1
122     >=sys-libs/readline-4.1
123 chtekk 1.69 >=sys-libs/zlib-1.2.3"
124 vivo 1.60
125 robbat2 1.137 [[ "${PN}" == "mariadb" ]] \
126     && DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
127    
128 chtekk 1.69 # Having different flavours at the same time is not a good idea
129 robbat2 1.137 for i in "mysql" "mysql-community" "mariadb" ; do
130     [[ "${i}" == ${PN} ]] ||
131     DEPEND="${DEPEND} !dev-db/${i}"
132 vivo 1.60 done
133    
134 robbat2 1.90 RDEPEND="${DEPEND}
135     !minimal? ( dev-db/mysql-init-scripts )
136     selinux? ( sec-policy/selinux-mysql )"
137    
138     # compile-time-only
139 vivo 1.60 mysql_version_is_at_least "5.1" \
140     || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
141    
142 robbat2 1.90 # compile-time-only
143 chtekk 1.69 mysql_version_is_at_least "5.1.12" \
144 robbat2 1.107 && DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
145 chtekk 1.69
146 vivo 1.60 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
147     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
148    
149 robbat2 1.104 # For other stuff to bring us in
150 robbat2 1.137 PDEPEND="${PDEPEND} =virtual/mysql-${MYSQL_PV_MAJOR}"
151 robbat2 1.104
152 robbat2 1.81 # Work out the default SERVER_URI correctly
153     if [ -z "${SERVER_URI}" ]; then
154 robbat2 1.132 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
155 robbat2 1.137 if [ "${PN}" == "mariadb" ]; then
156     MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
157 robbat2 1.145 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
158     SERVER_URI="
159     http://ftp.rediris.es/mirror/MariaDB/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
160     http://maria.llarian.net/download/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
161     http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/${MARIA_FULL_P}.tar.gz
162     "
163 robbat2 1.81 # The community build is on the mirrors
164 robbat2 1.137 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
165 robbat2 1.132 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz"
166 robbat2 1.110 # The (old) enterprise source is on the primary site only
167 robbat2 1.81 elif [ "${PN}" == "mysql" ]; then
168 robbat2 1.132 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz"
169 robbat2 1.81 fi
170     fi
171    
172 vivo 1.60 # Define correct SRC_URIs
173 robbat2 1.86 SRC_URI="${SERVER_URI}"
174    
175 robbat2 1.122 # Gentoo patches to MySQL
176     [[ ${MY_EXTRAS_VER} != live ]] \
177     && SRC_URI="${SRC_URI}
178 robbat2 1.73 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
179 robbat2 1.124 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
180     http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
181 robbat2 1.122
182 vivo 1.60 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
183     HOMEPAGE="http://www.mysql.com/"
184 robbat2 1.137 if [[ "${PN}" == "mariadb" ]]; then
185     HOMEPAGE="http://askmonty.org/"
186     DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged."
187     fi
188 robbat2 1.142 if [[ "${PN}" == "mysql-community" ]]; then
189     DESCRIPTION="${DESCRIPTION} (obsolete, move to dev-db/mysql)"
190     fi
191 vivo 1.60 LICENSE="GPL-2"
192 chtekk 1.69 SLOT="0"
193 robbat2 1.133 IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
194 vivo 1.60
195     mysql_version_is_at_least "4.1" \
196     && IUSE="${IUSE} latin1"
197    
198     mysql_version_is_at_least "4.1.3" \
199     && IUSE="${IUSE} cluster extraengine"
200    
201     mysql_version_is_at_least "5.0" \
202     || IUSE="${IUSE} raid"
203    
204     mysql_version_is_at_least "5.0.18" \
205     && IUSE="${IUSE} max-idx-128"
206    
207     mysql_version_is_at_least "5.1" \
208     || IUSE="${IUSE} berkdb"
209    
210 robbat2 1.133 [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
211     && IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
212    
213 robbat2 1.137 [[ "${PN}" == "mariadb" ]] \
214     && IUSE="${IUSE} libevent"
215    
216     # MariaDB has integrated PBXT
217     # PBXT_VERSION means that we have a PBXT patch for this PV
218     # PBXT was only introduced after 5.1.12
219     pbxt_patch_available() {
220     [[ "${PN}" != "mariadb" ]] \
221     && mysql_version_is_at_least "5.1.12" \
222     && [[ -n "${PBXT_VERSION}" ]]
223     return $?
224     }
225    
226     pbxt_available() {
227     pbxt_patch_available || [[ "${PN}" == "mariadb" ]]
228     return $?
229     }
230    
231     # Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
232     # MariaDB has integrated XtraDB
233     # XTRADB_VERS means that we have a XTRADB patch for this PV
234     # XTRADB was only introduced after 5.1.26
235     xtradb_patch_available() {
236     [[ "${PN}" != "mariadb" ]] \
237     && mysql_version_is_at_least "5.1.26" \
238     && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
239     return $?
240     }
241    
242 robbat2 1.145
243 robbat2 1.137 pbxt_patch_available \
244 robbat2 1.133 && PBXT_P="pbxt-${PBXT_VERSION}" \
245 robbat2 1.134 && PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
246 robbat2 1.133 && SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
247 robbat2 1.137
248 robbat2 1.145 # PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
249     # vs. built outside the dir
250 robbat2 1.137 pbxt_available \
251 robbat2 1.145 && IUSE="${IUSE} pbxt" \
252     && mysql_version_is_at_least "5.1.40" \
253     && PBXT_NEWSTYLE=1
254 vivo 1.60
255 robbat2 1.137 xtradb_patch_available \
256 robbat2 1.133 && XTRADB_P="percona-xtradb-${XTRADB_VER}" \
257 robbat2 1.134 && XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
258 robbat2 1.145 && XTRADB_SRC_B1="http://www.percona.com/" \
259     && XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/" \
260     && XTRADB_SRC_URI1="${XTRADB_SRC_B2}/Percona-Server/Percona-Server-${XTRADB_SRC_URI_COMMON}" \
261     && XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}" \
262     && XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
263     && SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )" \
264 robbat2 1.120 && IUSE="${IUSE} xtradb"
265    
266 vivo 1.37 #
267     # HELPER FUNCTIONS:
268     #
269    
270 robbat2 1.119 # @FUNCTION: mysql_disable_test
271     # @DESCRIPTION:
272     # Helper function to disable specific tests.
273 vivo 1.51 mysql_disable_test() {
274 robbat2 1.127 local rawtestname testname testsuite reason mysql_disable_file
275     rawtestname="${1}" ; shift
276     reason="${@}"
277     ewarn "test '${rawtestname}' disabled: '${reason}'"
278    
279     testsuite="${rawtestname/.*}"
280     testname="${rawtestname/*.}"
281     mysql_disable_file="${S}/mysql-test/t/disabled.def"
282 robbat2 1.131 #einfo "rawtestname=${rawtestname} testname=${testname} testsuite=${testsuite}"
283 vivo 1.51 echo ${testname} : ${reason} >> "${mysql_disable_file}"
284 robbat2 1.127
285     # ${S}/mysql-tests/t/disabled.def
286     #
287     # ${S}/mysql-tests/suite/federated/disabled.def
288     #
289     # ${S}/mysql-tests/suite/jp/t/disabled.def
290     # ${S}/mysql-tests/suite/ndb/t/disabled.def
291     # ${S}/mysql-tests/suite/rpl/t/disabled.def
292     # ${S}/mysql-tests/suite/parts/t/disabled.def
293     # ${S}/mysql-tests/suite/rpl_ndb/t/disabled.def
294     # ${S}/mysql-tests/suite/ndb_team/t/disabled.def
295     # ${S}/mysql-tests/suite/binlog/t/disabled.def
296     # ${S}/mysql-tests/suite/innodb/t/disabled.def
297     if [ -n "${testsuite}" ]; then
298     for mysql_disable_file in \
299     ${S}/mysql-test/suite/${testsuite}/disabled.def \
300     ${S}/mysql-test/suite/${testsuite}/t/disabled.def \
301     FAILED ; do
302     [ -f "${mysql_disable_file}" ] && break
303     done
304     if [ "${mysql_disabled_file}" != "FAILED" ]; then
305     echo "${testname} : ${reason}" >> "${mysql_disable_file}"
306     else
307     ewarn "Could not find testsuite disabled.def location for ${rawtestname}"
308     fi
309     fi
310 vivo 1.51 }
311    
312 robbat2 1.119 # @FUNCTION: mysql_init_vars
313     # @DESCRIPTION:
314 vivo 1.8 # void mysql_init_vars()
315 chtekk 1.30 # Initialize global variables
316     # 2005-11-19 <vivo@gentoo.org>
317 vivo 1.8 mysql_init_vars() {
318 chtekk 1.69 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
319     MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
320     MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
321     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
322     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
323     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
324 vivo 1.8
325 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
326     MY_DATADIR=""
327 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
328 robbat2 1.75 MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
329 vivo 1.26 | sed -ne '/datadir/s|^--datadir=||p' \
330     | tail -n1`
331 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
332     MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
333 robbat2 1.89 | sed -e 's/.*=\s*//' \
334     | tail -n1`
335 vivo 1.8 fi
336     fi
337 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
338     MY_DATADIR="${MY_LOCALSTATEDIR}"
339     einfo "Using default MY_DATADIR"
340 vivo 1.8 fi
341 robbat2 1.75 elog "MySQL MY_DATADIR is ${MY_DATADIR}"
342 vivo 1.8
343 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
344 robbat2 1.75 if [[ -e "${MY_DATADIR}" ]] ; then
345 robbat2 1.95 # If you get this and you're wondering about it, see bug #207636
346     elog "MySQL datadir found in ${MY_DATADIR}"
347     elog "A new one will not be created."
348 vivo 1.8 PREVIOUS_DATADIR="yes"
349     else
350     PREVIOUS_DATADIR="no"
351     fi
352 chtekk 1.30 export PREVIOUS_DATADIR
353 vivo 1.8 fi
354 robbat2 1.111 else
355     if [[ ${EBUILD_PHASE} == "config" ]]; then
356     local new_MY_DATADIR
357     new_MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
358     | sed -ne '/datadir/s|^--datadir=||p' \
359     | tail -n1`
360    
361     if [[ ( -n "${new_MY_DATADIR}" ) && ( "${new_MY_DATADIR}" != "${MY_DATADIR}" ) ]]; then
362     ewarn "MySQL MY_DATADIR has changed"
363     ewarn "from ${MY_DATADIR}"
364     ewarn "to ${new_MY_DATADIR}"
365     MY_DATADIR="${new_MY_DATADIR}"
366     fi
367     fi
368 vivo 1.8 fi
369    
370 robbat2 1.147 if [ "${MY_SOURCEDIR:-unset}" == "unset" ]; then
371     MY_SOURCEDIR=${SERVER_URI##*/}
372     MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
373     fi
374 vivo 1.55
375 chtekk 1.69 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
376 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
377 robbat2 1.75 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
378 vivo 1.8 }
379    
380 vivo 1.37 configure_minimal() {
381 vivo 1.46 # These are things we exclude from a minimal build, please
382     # note that the server actually does get built and installed,
383     # but we then delete it before packaging.
384 robbat2 1.84 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication readline"
385 vivo 1.37
386 vivo 1.46 for i in ${minimal_exclude_list} ; do
387     myconf="${myconf} --without-${i}"
388     done
389     myconf="${myconf} --with-extra-charsets=none"
390     myconf="${myconf} --enable-local-infile"
391 vivo 1.47
392 cardoe 1.67 if use static ; then
393 vivo 1.47 myconf="${myconf} --with-client-ldflags=-all-static"
394 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
395 vivo 1.47 else
396     myconf="${myconf} --enable-shared --enable-static"
397     fi
398 chtekk 1.50
399 chtekk 1.69 if mysql_version_is_at_least "4.1" && ! use latin1 ; then
400 chtekk 1.50 myconf="${myconf} --with-charset=utf8"
401     myconf="${myconf} --with-collation=utf8_general_ci"
402     else
403     myconf="${myconf} --with-charset=latin1"
404     myconf="${myconf} --with-collation=latin1_swedish_ci"
405     fi
406 vivo 1.37 }
407    
408     configure_common() {
409 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
410 vivo 1.37 myconf="${myconf} --enable-local-infile"
411     myconf="${myconf} --with-extra-charsets=all"
412     myconf="${myconf} --with-mysqld-user=mysql"
413 chtekk 1.39 myconf="${myconf} --with-server"
414 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
415 vivo 1.37 myconf="${myconf} --without-libwrap"
416 chtekk 1.39
417 cardoe 1.67 if use static ; then
418 vivo 1.37 myconf="${myconf} --with-mysqld-ldflags=-all-static"
419     myconf="${myconf} --with-client-ldflags=-all-static"
420 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
421 vivo 1.37 else
422     myconf="${myconf} --enable-shared --enable-static"
423     fi
424    
425 cardoe 1.67 if use debug ; then
426 vivo 1.37 myconf="${myconf} --with-debug=full"
427     else
428     myconf="${myconf} --without-debug"
429 vivo 1.51 mysql_version_is_at_least "4.1.3" \
430 cardoe 1.67 && use cluster \
431 vivo 1.37 && myconf="${myconf} --without-ndb-debug"
432     fi
433 chtekk 1.39
434 robbat2 1.100 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
435     ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
436     ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
437     ewarn "You MUST file bugs without these variables set."
438     myconf="${myconf} --with-charset=${MYSQL_DEFAULT_CHARSET}"
439     myconf="${myconf} --with-collation=${MYSQL_DEFAULT_COLLATION}"
440     elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
441     myconf="${myconf} --with-charset=utf8"
442     myconf="${myconf} --with-collation=utf8_general_ci"
443     else
444     myconf="${myconf} --with-charset=latin1"
445     myconf="${myconf} --with-collation=latin1_swedish_ci"
446 vivo 1.37 fi
447 chtekk 1.39
448 cardoe 1.67 if use embedded ; then
449 vivo 1.37 myconf="${myconf} --with-embedded-privilege-control"
450     myconf="${myconf} --with-embedded-server"
451     else
452     myconf="${myconf} --without-embedded-privilege-control"
453     myconf="${myconf} --without-embedded-server"
454     fi
455    
456     }
457    
458     configure_40_41_50() {
459     myconf="${myconf} $(use_with perl bench)"
460     myconf="${myconf} --enable-assembler"
461     myconf="${myconf} --with-extra-tools"
462     myconf="${myconf} --with-innodb"
463     myconf="${myconf} --without-readline"
464 robbat2 1.136 myconf="${myconf} $(use_with ssl openssl)"
465 vivo 1.51 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
466 vivo 1.37
467 chtekk 1.69 # --with-vio is not needed anymore, it's on by default and
468     # has been removed from configure
469 robbat2 1.136 # Apply to 4.x and 5.0.[0-3]
470 cardoe 1.67 if use ssl ; then
471 chtekk 1.69 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
472 vivo 1.62 fi
473    
474 robbat2 1.98 if mysql_version_is_at_least "5.0.60" ; then
475     if use berkdb ; then
476     elog "Berkeley DB support was disabled due to build failures"
477     elog "on multiple arches, go to a version earlier than 5.0.60"
478     elog "if you want it again. Gentoo bug #224067."
479     fi
480     myconf="${myconf} --without-berkeley-db"
481     elif use berkdb ; then
482 chtekk 1.77 # The following fix is due to a bug with bdb on SPARC's. See:
483     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
484     # It comes down to non-64-bit safety problems.
485 cardoe 1.76 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
486 chtekk 1.77 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
487 cardoe 1.76 myconf="${myconf} --without-berkeley-db"
488     else
489 chtekk 1.39 myconf="${myconf} --with-berkeley-db=./bdb"
490     fi
491 cardoe 1.76 else
492     myconf="${myconf} --without-berkeley-db"
493 vivo 1.37 fi
494    
495 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
496 vivo 1.37 myconf="${myconf} --with-geometry"
497     myconf="${myconf} $(use_with cluster ndbcluster)"
498     fi
499    
500 cardoe 1.67 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
501 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
502     myconf="${myconf} --with-archive-storage-engine"
503    
504     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
505     myconf="${myconf} --with-csv-storage-engine"
506    
507     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
508     myconf="${myconf} --with-blackhole-storage-engine"
509    
510     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
511     # http://dev.mysql.com/doc/mysql/en/federated-description.html
512     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
513 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
514 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
515     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
516 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
517     fi
518     fi
519    
520 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
521     myconf="${myconf} `use_enable community community-features`"
522     if use community; then
523     myconf="${myconf} `use_enable profiling`"
524     else
525     myconf="${myconf} --disable-profiling"
526     fi
527 robbat2 1.99 fi
528    
529 vivo 1.51 mysql_version_is_at_least "5.0.18" \
530 cardoe 1.67 && use max-idx-128 \
531 vivo 1.37 && myconf="${myconf} --with-max-indexes=128"
532     }
533    
534 chtekk 1.39 configure_51() {
535 chtekk 1.40 # TODO: !!!! readd --without-readline
536 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
537 vivo 1.37 # readline.h instead of history.h
538 robbat2 1.136 myconf="${myconf} $(use_with ssl ssl /usr)"
539 vivo 1.37 myconf="${myconf} --enable-assembler"
540     myconf="${myconf} --with-geometry"
541     myconf="${myconf} --with-readline"
542 robbat2 1.133 myconf="${myconf} --with-zlib-dir=/usr/"
543 vivo 1.37 myconf="${myconf} --without-pstack"
544 robbat2 1.145 myconf="${myconf} --with-plugindir=/usr/$(get_libdir)/mysql/plugin"
545    
546 cardoe 1.67 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
547 robbat2 1.136 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
548     myconf="${myconf} $(use_enable community community-features)"
549     if use community; then
550     myconf="${myconf} $(use_enable profiling)"
551     else
552     myconf="${myconf} --disable-profiling"
553     fi
554     fi
555 chtekk 1.39
556 robbat2 1.145 # Scan for all available plugins
557     local plugins_avail="$(
558     LANG=C \
559     find "${S}" \
560     \( \
561     -name 'plug.in' \
562     -o -iname 'configure.in' \
563     -o -iname 'configure.ac' \
564     \) \
565     -print0 \
566     | xargs -0 sed -r -n \
567     -e '/^MYSQL_STORAGE_ENGINE/{
568     s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ;
569     s~^([^ ]+).*~\1~gp;
570     }' \
571     | tr -s '\n' ' '
572     )"
573    
574 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
575     # like configuration=none
576 robbat2 1.139 # This base set are required, and will always be statically built.
577 robbat2 1.145 local plugins_sta="csv myisam myisammrg heap"
578     local plugins_dyn=""
579     local plugins_dis="example ibmdb2i"
580    
581     # These aren't actually required by the base set, but are really useful:
582     plugins_sta="${plugins_sta} archive blackhole"
583    
584     # default in 5.5.4
585     if mysql_version_is_at_least "5.5.4" ; then
586     plugins_sta="${plugins_sta} partition"
587     fi
588     # Now the extras
589 cardoe 1.67 if use extraengine ; then
590 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
591 robbat2 1.129 # not added yet: ibmdb2i
592     # Not supporting as examples: example,daemon_example,ftexample
593 robbat2 1.145 plugins_sta="${plugins_sta} partition"
594     plugins_dyn="${plugins_sta} federated"
595 vivo 1.37
596 robbat2 1.137 if [[ "${PN}" != "mariadb" ]] ; then
597     elog "Before using the Federated storage engine, please be sure to read"
598     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
599     else
600     elog "MariaDB includes the FederatedX engine. Be sure to read"
601     elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
602     fi
603 robbat2 1.145 else
604     plugins_dis="${plugins_dis} partition federated"
605 vivo 1.37 fi
606    
607 robbat2 1.130 # Upstream specifically requests that InnoDB always be built:
608     # - innobase, innodb_plugin
609     # Build falcon if available for 6.x series.
610 robbat2 1.145 for i in innobase falcon ; do
611     [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
612     done
613     for i in innodb_plugin ; do
614     [ -e "${S}"/storage/${i} ] && plugins_dyn="${plugins_dyn} ${i}"
615 robbat2 1.130 done
616 vivo 1.37
617     # like configuration=max-no-ndb
618 cardoe 1.67 if use cluster ; then
619 robbat2 1.146 plugins_sta="${plugins_sta} ndbcluster partition"
620     plugins_dis="${plugins_dis//partition}"
621 vivo 1.37 myconf="${myconf} --with-ndb-binlog"
622 robbat2 1.145 else
623     plugins_dis="${plugins_dis} ndbcluster"
624 vivo 1.37 fi
625    
626 robbat2 1.137 if [[ "${PN}" == "mariadb" ]] ; then
627     # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
628     # caught above.
629 robbat2 1.146 plugins_sta="${plugins_sta} maria innobase"
630 robbat2 1.137 myconf="${myconf} $(use_with libevent)"
631     # This is not optional, without it several upstream testcases fail.
632     # Also strongly recommended by upstream.
633     myconf="${myconf} --with-maria-tmp-tables"
634     fi
635 robbat2 1.145
636     if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
637     use pbxt \
638     && plugins_dyn="${plugins_dyn} pbxt" \
639     || plugins_dis="${plugins_dis} pbxt"
640     fi
641 robbat2 1.137
642 robbat2 1.145 use static && \
643     plugins_sta="${plugins_sta} ${plugins_dyn}" && \
644     plugins_dyn=""
645    
646     einfo "Available plugins: ${plugins_avail}"
647     einfo "Dynamic plugins: ${plugins_dyn}"
648     einfo "Static plugins: ${plugins_sta}"
649     einfo "Disabled plugins: ${plugins_dis}"
650    
651     # These are the static plugins
652     myconf="${myconf} --with-plugins=${plugins_sta// /,}"
653     # And the disabled ones
654     for i in ${plugins_dis} ; do
655     myconf="${myconf} --without-plugin-${i}"
656     done
657 vivo 1.37 }
658    
659 robbat2 1.112 pbxt_src_configure() {
660 vivo 1.51 mysql_init_vars
661    
662     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
663    
664     einfo "Reconfiguring dir '${PWD}'"
665     AT_GNUCONF_UPDATE="yes" eautoreconf
666    
667 chtekk 1.69 local myconf=""
668 robbat2 1.138 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
669 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
670 robbat2 1.138 econf ${myconf} || die "Problem configuring PBXT storage engine"
671 robbat2 1.112 }
672    
673     pbxt_src_compile() {
674 robbat2 1.145
675 robbat2 1.112 # Be backwards compatible for now
676     if [[ $EAPI != 2 ]]; then
677     pbxt_src_configure
678     fi
679 chtekk 1.69 # TODO: is it safe/needed to use emake here ?
680     make || die "Problem making PBXT storage engine (${myconf})"
681 vivo 1.51
682     popd
683 chtekk 1.69 # TODO: modify test suite for PBXT
684 vivo 1.51 }
685    
686     pbxt_src_install() {
687     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
688 robbat2 1.134 emake install DESTDIR="${D}" || die "Failed to install PBXT"
689 vivo 1.51 popd
690     }
691    
692 vivo 1.37 #
693     # EBUILD FUNCTIONS
694     #
695 robbat2 1.119 # @FUNCTION: mysql_pkg_setup
696     # @DESCRIPTION:
697     # Perform some basic tests and tasks during pkg_setup phase:
698     # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
699     # check for conflicting use flags
700     # create new user and group for mysql
701     # warn about deprecated features
702 vivo 1.1 mysql_pkg_setup() {
703 robbat2 1.83 if hasq test ${FEATURES} ; then
704     if ! use minimal ; then
705 robbat2 1.91 if [[ $UID -eq 0 ]]; then
706 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
707 robbat2 1.83 fi
708     fi
709     fi
710 swegener 1.53
711 chtekk 1.30 # Check for USE flag problems in pkg_setup
712 cardoe 1.67 if use static && use ssl ; then
713 robbat2 1.145 M="MySQL does not support being built statically with SSL support enabled!"
714     eerror "${M}"
715     die "${M}"
716 chtekk 1.30 fi
717 vivo 1.1
718 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
719 cardoe 1.67 && use raid \
720     && use static ; then
721 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
722     eerror "with RAID support enabled."
723     die "USE flags 'raid' and 'static' conflict!"
724 vivo 1.1 fi
725    
726 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
727 robbat2 1.145 && ( use cluster || use extraengine || use embedded ) \
728 cardoe 1.67 && use minimal ; then
729 robbat2 1.145 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
730     eerror "${M}"
731     die "${M}"
732     fi
733    
734     if mysql_version_is_at_least "5.1" \
735     && xtradb_patch_available \
736     && use xtradb \
737     && use embedded ; then
738     M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
739     eerror "${M}"
740     die "${M}"
741 vivo 1.1 fi
742 maekke 1.103
743 robbat2 1.144 # Bug #290570, 284946, 307251
744     # Upstream changes made us need a fairly new GCC4.
745     # But only for 5.0.8[3-6]!
746     if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
747 robbat2 1.127 GCC_VER=$(gcc-version)
748 robbat2 1.125 case ${GCC_VER} in
749 robbat2 1.144 2*|3*|4.0|4.1|4.2)
750     eerror "Some releases of MySQL required a very new GCC, and then"
751     eerror "later release relaxed that requirement again. Either pick a"
752     eerror "MySQL >=5.0.87, or use a newer GCC."
753     die "Active GCC too old!" ;;
754 robbat2 1.125 esac
755     fi
756    
757 robbat2 1.83 # This should come after all of the die statements
758     enewgroup mysql 60 || die "problem adding 'mysql' group"
759     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
760 chtekk 1.39
761 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
762 cardoe 1.67 && use berkdb \
763 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
764 robbat2 1.133
765     if [ "${PN}" != "mysql-cluster" ] && use cluster; then
766     ewarn "Upstream has noted that the NDB cluster support in the 5.0 and"
767     ewarn "5.1 series should NOT be put into production. In the near"
768     ewarn "future, it will be disabled from building."
769     ewarn ""
770     ewarn "If you need NDB support, you should instead move to the new"
771     ewarn "mysql-cluster package that represents that upstream NDB"
772     ewarn "development."
773     fi
774 chtekk 1.30 }
775    
776 robbat2 1.119 # @FUNCTION: mysql_src_unpack
777     # @DESCRIPTION:
778     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
779 chtekk 1.30 mysql_src_unpack() {
780     # Initialize the proper variables first
781     mysql_init_vars
782 vivo 1.1
783 chtekk 1.30 unpack ${A}
784 robbat2 1.86 # Grab the patches
785     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
786 maekke 1.116
787 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
788 robbat2 1.112
789     # Be backwards compatible for now
790 robbat2 1.119 case ${EAPI:-0} in
791     2) : ;;
792     0 | 1) mysql_src_prepare ;;
793     esac
794 robbat2 1.112 }
795    
796 robbat2 1.119 # @FUNCTION: mysql_src_prepare
797     # @DESCRIPTION:
798     # Apply patches to the source code and remove unneeded bundled libs.
799 robbat2 1.112 mysql_src_prepare() {
800 robbat2 1.109 cd "${S}"
801 vivo 1.1
802 chtekk 1.30 # Apply the patches for this MySQL version
803 vivo 1.55 EPATCH_SUFFIX="patch"
804 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
805 robbat2 1.86 # Clean out old items
806     rm -f "${EPATCH_SOURCE}"/*
807     # Now link in right patches
808 vivo 1.55 mysql_mv_patches
809 robbat2 1.86 # And apply
810 chtekk 1.69 epatch
811 vivo 1.1
812 robbat2 1.133 # last -fPIC fixup, per bug #305873
813     i="${S}"/storage/innodb_plugin/plug.in
814     [ -f "${i}" ] && sed -i -e '/CFLAGS/s,-prefer-non-pic,,g' "${i}"
815    
816 chtekk 1.30 # Additional checks, remove bundled zlib
817 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
818     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
819 chtekk 1.30 rm -f "scripts/mysqlbug"
820 vivo 1.1
821     # Make charsets install in the right place
822 vivo 1.37 find . -name 'Makefile.am' \
823     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
824 vivo 1.1
825 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
826 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
827 robbat2 1.122 einfo "Cleaning up old buildscript files"
828 chtekk 1.30 find . -name Makefile \
829     -o -name Makefile.in \
830     -o -name configure \
831     -exec rm -f {} \;
832     rm -f "ltmain.sh"
833 vivo 1.37 rm -f "scripts/mysqlbug"
834 chtekk 1.30 fi
835 vivo 1.1
836 vivo 1.51 local rebuilddirlist d
837 vivo 1.1
838 robbat2 1.137 if xtradb_patch_available && use xtradb ; then
839 robbat2 1.145 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
840     pushd "${S}"/storage >/dev/null
841 robbat2 1.122 i="innobase"
842     o="${WORKDIR}/storage-${i}.mysql-upstream"
843     # Have we been here already?
844 robbat2 1.134 [ -d "${o}" ] && rm -f "${i}"
845 robbat2 1.122 # Or maybe we haven't
846     [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
847 robbat2 1.145 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
848     popd >/dev/null
849     fi
850    
851     if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
852     einfo "Adding storage engine: PBXT"
853     pushd "${S}"/storage >/dev/null
854     i='pbxt'
855     [ -d "${i}" ] && rm -rf "${i}"
856     cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
857     popd >/dev/null
858 robbat2 1.122 fi
859    
860 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
861 chtekk 1.42 rebuilddirlist="."
862 robbat2 1.134 # This does not seem to be needed presently. robbat2 2010/02/23
863     #einfo "Updating innobase cmake"
864     ## TODO: check this with a cmake expert
865     #cmake \
866     # -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
867     # -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
868     # "storage/innobase"
869 vivo 1.1 else
870     rebuilddirlist=". innobase"
871     fi
872    
873 chtekk 1.30 for d in ${rebuilddirlist} ; do
874     einfo "Reconfiguring dir '${d}'"
875 vivo 1.4 pushd "${d}" &>/dev/null
876 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
877 vivo 1.4 popd &>/dev/null
878 vivo 1.1 done
879    
880 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
881 cardoe 1.67 && use berkdb ; then
882 robbat2 1.122 einfo "Fixing up berkdb buildsystem"
883 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
884 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
885     || die "Could not copy libtool.m4 to bdb/dist/"
886 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
887     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
888     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
889     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
890     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
891     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
892     fi
893 chtekk 1.71 pushd "bdb/dist" &>/dev/null
894     sh s_all \
895     || die "Failed bdb reconfigure"
896 vivo 1.4 popd &>/dev/null
897 vivo 1.1 fi
898     }
899    
900 robbat2 1.119 # @FUNCTION: mysql_src_configure
901     # @DESCRIPTION:
902     # Configure mysql to build the code for Gentoo respecting the use flags.
903 robbat2 1.112 mysql_src_configure() {
904 chtekk 1.30 # Make sure the vars are correctly initialized
905     mysql_init_vars
906 vivo 1.1
907 chtekk 1.42 # $myconf is modified by the configure_* functions
908     local myconf=""
909 vivo 1.1
910 cardoe 1.67 if use minimal ; then
911 chtekk 1.42 configure_minimal
912 vivo 1.1 else
913 chtekk 1.42 configure_common
914 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
915 chtekk 1.42 configure_51
916 vivo 1.1 else
917 chtekk 1.42 configure_40_41_50
918 vivo 1.1 fi
919 vivo 1.23 fi
920    
921 chtekk 1.30 # Bug #114895, bug #110149
922 vivo 1.1 filter-flags "-O" "-O[01]"
923 chtekk 1.30
924     # glib-2.3.2_pre fix, bug #16496
925 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
926    
927 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
928     # fail badly during cluster startup.
929     if [[ $(gcc-major-version) -lt 4 ]]; then
930     filter-flags "-fstack-protector-all"
931     fi
932    
933 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
934 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
935 vivo 1.51 mysql_version_is_at_least "5.0" \
936 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
937 chtekk 1.39 export CXXFLAGS
938 vivo 1.1
939 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
940     append-flags -fno-strict-aliasing
941    
942 vivo 1.1 econf \
943     --libexecdir="/usr/sbin" \
944     --sysconfdir="${MY_SYSCONFDIR}" \
945     --localstatedir="${MY_LOCALSTATEDIR}" \
946     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
947     --libdir="${MY_LIBDIR}" \
948     --includedir="${MY_INCLUDEDIR}" \
949     --with-low-memory \
950     --with-client-ldflags=-lstdc++ \
951     --enable-thread-safe-client \
952     --with-comment="Gentoo Linux ${PF}" \
953     --without-docs \
954 chtekk 1.39 ${myconf} || die "econf failed"
955 vivo 1.1
956 chtekk 1.30 # TODO: Move this before autoreconf !!!
957 vivo 1.21 find . -type f -name Makefile -print0 \
958     | xargs -0 -n100 sed -i \
959     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
960 vivo 1.1
961 robbat2 1.145 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
962 robbat2 1.137 pbxt_patch_available && use pbxt && pbxt_src_configure
963 robbat2 1.112 fi
964     }
965    
966 robbat2 1.119 # @FUNCTION: mysql_src_compile
967     # @DESCRIPTION:
968     # Compile the mysql code.
969 robbat2 1.112 mysql_src_compile() {
970     # Be backwards compatible for now
971 robbat2 1.137 case ${EAPI:-0} in
972     2) : ;;
973     0 | 1) mysql_src_configure ;;
974     esac
975 robbat2 1.112
976 chtekk 1.39 emake || die "emake failed"
977 vivo 1.55
978 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
979     pbxt_patch_available && use pbxt && pbxt_src_compile
980     fi
981 vivo 1.1 }
982    
983 robbat2 1.119 # @FUNCTION: mysql_src_install
984     # @DESCRIPTION:
985     # Install mysql.
986 vivo 1.1 mysql_src_install() {
987 chtekk 1.30 # Make sure the vars are correctly initialized
988     mysql_init_vars
989 vivo 1.1
990 robbat2 1.133 emake install \
991     DESTDIR="${D}" \
992     benchdir_root="${MY_SHAREDSTATEDIR}" \
993     testroot="${MY_SHAREDSTATEDIR}" \
994     || die "emake install failed"
995 vivo 1.55
996 robbat2 1.145 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
997     pbxt_patch_available && use pbxt && pbxt_src_install
998     fi
999 vivo 1.1
1000 chtekk 1.30 # Convenience links
1001 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
1002 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
1003     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
1004     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
1005 vivo 1.1
1006 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
1007 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
1008 chtekk 1.30 rm -Rf "${D}/usr/share/info"
1009 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
1010     binary-configure* my-*.cnf mi_test_all*
1011     do
1012 robbat2 1.133 rm -f "${D}"/${MY_SHAREDSTATEDIR}/${removeme}
1013 vivo 1.1 done
1014    
1015 chtekk 1.69 # Clean up stuff for a minimal build
1016 cardoe 1.67 if use minimal ; then
1017 robbat2 1.105 einfo "Remove all extra content for minimal build"
1018 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
1019     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}
1020 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
1021 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
1022 vivo 1.1 fi
1023    
1024 robbat2 1.133 # Unless they explicitly specific USE=test, then do not install the
1025     # testsuite. It DOES have a use to be installed, esp. when you want to do a
1026     # validation of your database configuration after tuning it.
1027     if use !test ; then
1028     rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
1029     fi
1030    
1031 chtekk 1.30 # Configuration stuff
1032 robbat2 1.140 if mysql_version_is_at_least "5.1" ; then
1033     mysql_mycnf_version="5.1"
1034     elif mysql_version_is_at_least "4.1" ; then
1035 chtekk 1.30 mysql_mycnf_version="4.1"
1036     else
1037     mysql_mycnf_version="4.0"
1038     fi
1039 robbat2 1.105 einfo "Building default my.cnf"
1040 vivo 1.1 insinto "${MY_SYSCONFDIR}"
1041 vivo 1.55 doins scripts/mysqlaccess.conf
1042 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
1043 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
1044 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
1045 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
1046 robbat2 1.140 sed -i \
1047     -e "/character-set/s|utf8|latin1|g" \
1048     "${TMPDIR}/my.cnf.ok"
1049 chtekk 1.30 fi
1050 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
1051    
1052 chtekk 1.30 # Minimal builds don't have the MySQL server
1053 cardoe 1.67 if ! use minimal ; then
1054 robbat2 1.105 einfo "Creating initial directories"
1055 chtekk 1.30 # Empty directories ...
1056 vivo 1.1 diropts "-m0750"
1057     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
1058 robbat2 1.75 dodir "${MY_DATADIR}"
1059     keepdir "${MY_DATADIR}"
1060     chown -R mysql:mysql "${D}/${MY_DATADIR}"
1061 vivo 1.1 fi
1062    
1063     diropts "-m0755"
1064     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
1065     dodir "${folder}"
1066     keepdir "${folder}"
1067     chown -R mysql:mysql "${D}/${folder}"
1068     done
1069     fi
1070    
1071 chtekk 1.30 # Docs
1072 robbat2 1.105 einfo "Installing docs"
1073 robbat2 1.133 dodoc README ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
1074 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
1075 chtekk 1.30
1076     # Minimal builds don't have the MySQL server
1077 cardoe 1.67 if ! use minimal ; then
1078 robbat2 1.105 einfo "Including support files and sample configurations"
1079 vivo 1.1 docinto "support-files"
1080     for script in \
1081 robbat2 1.92 "${S}"/support-files/my-*.cnf \
1082     "${S}"/support-files/magic \
1083     "${S}"/support-files/ndb-config-2-node.ini
1084 vivo 1.1 do
1085 robbat2 1.134 [[ -f "$script" ]] && dodoc "${script}"
1086 vivo 1.1 done
1087    
1088     docinto "scripts"
1089 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
1090 robbat2 1.134 [[ -f "$script" ]] && [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
1091 vivo 1.1 done
1092 robbat2 1.78
1093 vivo 1.1 fi
1094 vivo 1.4
1095 vivo 1.58 mysql_lib_symlinks "${D}"
1096 vivo 1.15 }
1097    
1098 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
1099     # @DESCRIPTION:
1100     # Create the user and groups for mysql - die if that fails.
1101 vivo 1.15 mysql_pkg_preinst() {
1102 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
1103     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
1104 vivo 1.1 }
1105    
1106 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
1107     # @DESCRIPTION:
1108     # Run post-installation tasks:
1109     # create the dir for logfiles if non-existant
1110     # touch the logfiles and secure them
1111     # install scripts
1112     # issue required steps for optional features
1113     # issue deprecation warnings
1114 vivo 1.1 mysql_pkg_postinst() {
1115 chtekk 1.30 # Make sure the vars are correctly initialized
1116 vivo 1.1 mysql_init_vars
1117    
1118 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
1119 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
1120 vivo 1.1
1121 chtekk 1.30 # Secure the logfiles
1122 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
1123     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
1124     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
1125    
1126 vivo 1.55 # Minimal builds don't have the MySQL server
1127 cardoe 1.67 if ! use minimal ; then
1128 vivo 1.55 docinto "support-files"
1129     for script in \
1130     support-files/my-*.cnf \
1131     support-files/magic \
1132     support-files/ndb-config-2-node.ini
1133     do
1134 robbat2 1.137 [[ -f "${script}" ]] \
1135     && dodoc "${script}"
1136 vivo 1.55 done
1137    
1138     docinto "scripts"
1139     for script in scripts/mysql* ; do
1140 robbat2 1.137 [[ -f "${script}" ]] \
1141     && [[ "${script%.sh}" == "${script}" ]] \
1142     && dodoc "${script}"
1143 vivo 1.55 done
1144 chtekk 1.69
1145     einfo
1146     elog "You might want to run:"
1147     elog "\"emerge --config =${CATEGORY}/${PF}\""
1148     elog "if this is a new install."
1149     einfo
1150 vivo 1.55 fi
1151    
1152 robbat2 1.137 if pbxt_available && use pbxt ; then
1153 chtekk 1.69 # TODO: explain it better
1154     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
1155     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
1156     elog "if, after that, you cannot start the MySQL server,"
1157 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
1158 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
1159     elog "or execute the following SQL command:"
1160     elog " CREATE TABLE IF NOT EXISTS plugin ("
1161     elog " name char(64) binary DEFAULT '' NOT NULL,"
1162     elog " dl char(128) DEFAULT '' NOT NULL,"
1163     elog " PRIMARY KEY (name)"
1164     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
1165 vivo 1.4 fi
1166 chtekk 1.69
1167 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
1168 cardoe 1.67 && use berkdb \
1169 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
1170 vivo 1.1 }
1171    
1172 robbat2 1.119 # @FUNCTION: mysql_pkg_config
1173     # @DESCRIPTION:
1174     # Configure mysql environment.
1175 vivo 1.1 mysql_pkg_config() {
1176 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
1177    
1178 chtekk 1.30 # Make sure the vars are correctly initialized
1179 vivo 1.1 mysql_init_vars
1180    
1181 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
1182 chtekk 1.30
1183 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
1184 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
1185     fi
1186    
1187 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
1188     local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
1189     local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
1190    
1191     if [[ -d "${old_MY_DATADIR_s}" ]]; then
1192     if [[ -d "${MY_DATADIR_s}" ]]; then
1193     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
1194     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
1195     else
1196     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
1197     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
1198     || die "Moving MY_DATADIR failed"
1199     fi
1200     else
1201     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
1202     if [[ -d "${MY_DATADIR_s}" ]]; then
1203     ewarn "Attempting to use ${MY_DATADIR_s}"
1204     else
1205     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
1206     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
1207 maekke 1.116 fi
1208 robbat2 1.111 fi
1209     fi
1210    
1211 vivo 1.1 local pwd1="a"
1212     local pwd2="b"
1213 robbat2 1.140 local MYSQL_ROOT_PASSWORD=''
1214     local maxtry=15
1215 vivo 1.1
1216 robbat2 1.141 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1217     MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1218     fi
1219    
1220 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1221 vivo 1.1 ewarn "You have already a MySQL database in place."
1222 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1223 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
1224     die "MySQL database already exists!"
1225     fi
1226    
1227 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1228     # localhost. Also causes weird failures.
1229     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1230    
1231 robbat2 1.140 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1232 vivo 1.1
1233 robbat2 1.140 einfo "Please provide a password for the mysql 'root' user now,"
1234     einfo "or in the MYSQL_ROOT_PASSWORD env var."
1235     ewarn "Avoid [\"'\\_%] characters in the password"
1236     read -rsp " >" pwd1 ; echo
1237 vivo 1.1
1238 robbat2 1.140 einfo "Retype the password"
1239     read -rsp " >" pwd2 ; echo
1240 vivo 1.1
1241 robbat2 1.140 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1242     die "Passwords are not the same"
1243     fi
1244     MYSQL_ROOT_PASSWORD="${pwd1}"
1245     unset pwd1 pwd2
1246 vivo 1.1 fi
1247    
1248     local options=""
1249     local sqltmp="$(emktemp)"
1250    
1251 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
1252 vivo 1.1 [[ -r "${help_tables}" ]] \
1253 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
1254 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
1255     help_tables="${TMPDIR}/fill_help_tables.sql"
1256    
1257 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
1258 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
1259     if [ $? -ne 0 ]; then
1260     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
1261     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
1262     fi
1263 vivo 1.4 popd &>/dev/null
1264 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1265 vivo 1.26 || die "MySQL databases not installed"
1266 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1267     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1268 vivo 1.1
1269 robbat2 1.140 # Figure out which options we need to disable to do the setup
1270     helpfile="${TMPDIR}/mysqld-help"
1271     ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1272     for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1273     federated innodb ssl log-bin relay-log slow-query-log external-locking \
1274     ; do
1275     optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1276     egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1277     done
1278     # But some options changed names
1279     egrep -sq external-locking "${helpfile}" && \
1280     options="${options/skip-locking/skip-external-locking}"
1281    
1282 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
1283 vivo 1.1 # Filling timezones, see
1284     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1285 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1286 vivo 1.1
1287     if [[ -r "${help_tables}" ]] ; then
1288     cat "${help_tables}" >> "${sqltmp}"
1289     fi
1290     fi
1291 robbat2 1.140
1292     einfo "Creating the mysql database and setting proper"
1293     einfo "permissions on it ..."
1294 vivo 1.1
1295 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1296     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1297 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
1298 vivo 1.1 ${options} \
1299     --user=mysql \
1300     --basedir=${ROOT}/usr \
1301 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
1302 vivo 1.1 --max_allowed_packet=8M \
1303     --net_buffer_length=16K \
1304 robbat2 1.143 --default-storage-engine=MyISAM \
1305 vivo 1.1 --socket=${socket} \
1306     --pid-file=${pidfile}"
1307 robbat2 1.140 #einfo "About to start mysqld: ${mysqld}"
1308     ebegin "Starting mysqld"
1309 chtekk 1.30 ${mysqld} &
1310 robbat2 1.140 rc=$?
1311 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1312 chtekk 1.30 maxtry=$((${maxtry}-1))
1313 vivo 1.1 echo -n "."
1314     sleep 1
1315     done
1316 robbat2 1.140 eend $rc
1317    
1318     if ! [[ -S "${socket}" ]]; then
1319     die "Completely failed to start up mysqld with: ${mysqld}"
1320     fi
1321 vivo 1.1
1322 robbat2 1.140 ebegin "Setting root password"
1323 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1324 robbat2 1.140 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1325 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1326 vivo 1.1 --socket=${socket} \
1327     -hlocalhost \
1328     -e "${sql}"
1329 robbat2 1.140 eend $?
1330 vivo 1.1
1331 robbat2 1.140 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1332 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1333 vivo 1.1 --socket=${socket} \
1334     -hlocalhost \
1335     -uroot \
1336 robbat2 1.140 -p"${MYSQL_ROOT_PASSWORD}" \
1337 vivo 1.1 mysql < "${sqltmp}"
1338 robbat2 1.140 rc=$?
1339     eend $?
1340     [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1341 vivo 1.1
1342 chtekk 1.30 # Stop the server and cleanup
1343 robbat2 1.140 einfo "Stopping the server ..."
1344 vivo 1.1 kill $(< "${pidfile}" )
1345 chtekk 1.30 rm -f "${sqltmp}"
1346 vivo 1.1 wait %1
1347 chtekk 1.30 einfo "Done"
1348 vivo 1.1 }
1349    
1350 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1351     # @DESCRIPTION:
1352     # Remove mysql symlinks.
1353 vivo 1.1 mysql_pkg_postrm() {
1354 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1355 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20