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

Diff of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.109

  ViewVC Help
Powered by ViewVC 1.1.20