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

Diff of /eclass/mysql.eclass

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

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

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.104

  ViewVC Help
Powered by ViewVC 1.1.20