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

Diff of /eclass/mysql.eclass

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

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

Legend:
Removed from v.1.58  
changed lines
  Added in v.1.133

  ViewVC Help
Powered by ViewVC 1.1.20