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

Diff of /eclass/mysql.eclass

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

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

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.116

  ViewVC Help
Powered by ViewVC 1.1.20