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

Diff of /eclass/mysql.eclass

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

Revision 1.41 Revision 1.58
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2006 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.41 2006/10/20 18:53:45 chtekk Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.58 2007/01/04 20:38:16 vivo 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;
4 7
5# Author: Francesco Riosa <vivo@gentoo.org> 8# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
6# Maintainer: Luca Longinotti <chtekk@gentoo.org> 9# Maintainer: Luca Longinotti <chtekk@gentoo.org>
7 10
8# Both MYSQL_VERSION_ID and MYSQL_PATCHSET_REV must be set in the ebuild too
9# Note that MYSQL_VERSION_ID must be empty !!! 11# Note that MYSQL_VERSION_ID must be empty !!!
10 12
13ECLASS="mysql"
14INHERITED="$INHERITED $ECLASS"
15inherit eutils flag-o-matic gnuconfig autotools mysql_fx
16
17# avoid running userspace code 8 times per ebuild :(
18if [[ "${_MYPVR}" != "${PVR}" ]] && [[ -n "${PVR}" ]]
19then
20 _MYPVR=${PVR}
21
22 [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20070104"
23
24 if [[ ${PR#r} -lt 60 ]] ; then
25 IS_BITKEEPER=0
26 elif [[ ${PR#r} -lt 90 ]] ; then
27 IS_BITKEEPER=60
28 else
29 IS_BITKEEPER=90
30 fi
31
11# MYSQL_VERSION_ID will be: 32 # MYSQL_VERSION_ID will be:
12# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 33 # 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 34 # This is an important part, because many of the choices the MySQL ebuild will do
14# depend on this variable. 35 # depend on this variable.
15# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803" 36 # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
16 37 MYSQL_VERSION_ID=""
17if [[ -z "${MYSQL_VERSION_ID}" ]] ; then
18 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}" 38 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
19 for vatom in 0 1 2 3 ; do 39 for vatom in 0 1 2 3 ; do
20 # pad to length 2 40 # pad to length 2
21 tpv[${vatom}]="00${tpv[${vatom}]}" 41 tpv[${vatom}]="00${tpv[${vatom}]}"
22 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}" 42 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
23 done 43 done
24 # strip leading "0" (otherwise it's considered an octal number by BASH) 44 # strip leading "0" (otherwise it's considered an octal number by BASH)
25 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"} 45 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
26fi
27 46
28inherit eutils flag-o-matic gnuconfig autotools mysql_fx
29
30# Be warned, *DEPEND are version-dependant 47 # Be warned, *DEPEND are version-dependant
31DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d ) 48 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
32 userland_GNU? ( sys-process/procps ) 49 userland_GNU? ( sys-process/procps )
33 >=sys-apps/sed-4 50 >=sys-apps/sed-4
34 >=sys-apps/texinfo-4.7-r1 51 >=sys-apps/texinfo-4.7-r1
35 >=sys-libs/readline-4.1 52 >=sys-libs/readline-4.1
36 >=sys-libs/zlib-1.2.3" 53 >=sys-libs/zlib-1.2.3
54 "
37 55
56 # having different flavours at the same time is not a good idea
57 for i in "" "-community" "-slotted" ; do
58 [[ "${i}" == ${PN#mysql} ]] ||
59 DEPEND="${DEPEND} !dev-db/mysql${i}"
60 done
61
38mysql_version_is_at_least "5.01.00.00" \ 62 mysql_version_is_at_least "5.1" \
39|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )" 63 || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
40 64
41RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )"
42
43# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 65 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
44PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 66 PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
45 67
68 if mysql_version_is_at_least "5.1.12" ; then
69 DEPEND="${DEPEND} innodb? ( >=dev-util/cmake-2.4.3 )"
70 fi
71
46# Shorten the path because the socket path length must be shorter than 107 chars 72 # Shorten the path because the socket path length must be shorter than 107 chars
47# and we will run a mysql server during test phase 73 # and we will run a mysql server during test phase
48S="${WORKDIR}/${PN}" 74 S="${WORKDIR}/mysql"
49 75
50# Define $MY_FIXED_PV for MySQL patchsets 76 # BitKeeper dependency, compile-time only
51MY_FIXED_PV="${PV/_alpha/}" 77 [[ ${IS_BITKEEPER} -eq 90 ]] && DEPEND="${DEPEND} dev-util/bk_client"
52#MY_FIXED_PV="${MY_FIXED_PV/_beta/}"
53#MY_FIXED_PV="${MY_FIXED_PV/_rc/}"
54 78
55MY_P="${P/_/-}" 79 if [[ ${PN} == "mysql-slotted" ]] ; then
80 DEPEND="${DEPEND} app-admin/eselect-mysql"
81 fi
56 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
57# Define correct SRC_URIs 95 # Define correct SRC_URIs
58SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${MY_P}${MYSQL_RERELEASE}.tar.gz" 96 SRC_URI="
59if [[ -n "${MYSQL_PATCHSET_REV}" ]] ; then 97 ${SERVER_URI}
60 MYSQL_PATCHSET_FILENAME="${PN}-patchset-${MY_FIXED_PV}-r${MYSQL_PATCHSET_REV}.tar.bz2" 98 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
61 # We add the Gentoo mirror here, as we only use primaryuri for the MySQL tarball 99 "
62 SRC_URI="${SRC_URI} http://gentoo.longitekk.com/${MYSQL_PATCHSET_FILENAME}" 100 mysql_version_is_at_least "5.1.12" \
63fi 101 && [[ -n "${PBXT_VERSION}" ]] \
102 && SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )"
64 103
65DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 104 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
66HOMEPAGE="http://www.mysql.com/" 105 HOMEPAGE="http://www.mysql.com/"
67SLOT="0"
68LICENSE="GPL-2" 106 LICENSE="GPL-2"
69IUSE="big-tables debug embedded minimal perl selinux srvdir ssl static" 107 IUSE="big-tables debug embedded minimal perl selinux ssl static"
70RESTRICT="confcache" 108 RESTRICT="confcache"
71 109
72mysql_version_is_at_least "4.01.00.00" \ 110 mysql_version_is_at_least "4.1" \
73&& IUSE="${IUSE} latin1" 111 && IUSE="${IUSE} latin1"
74 112
75mysql_version_is_at_least "4.01.03.00" \ 113 mysql_version_is_at_least "4.1.3" \
76&& IUSE="${IUSE} cluster extraengine" 114 && IUSE="${IUSE} cluster extraengine"
77 115
78mysql_version_is_at_least "5.00.00.00" \ 116 mysql_version_is_at_least "5.0" \
79|| IUSE="${IUSE} raid" 117 || IUSE="${IUSE} raid"
80 118
81mysql_version_is_at_least "5.00.18.00" \ 119 mysql_version_is_at_least "5.0.18" \
82&& IUSE="${IUSE} max-idx-128" 120 && IUSE="${IUSE} max-idx-128"
83 121
84mysql_version_is_at_least "5.01.00.00" \ 122 mysql_version_is_at_least "5.1" \
85&& IUSE="${IUSE} innodb" 123 && IUSE="${IUSE} innodb"
86 124
87mysql_version_is_at_least "5.01.00.00" \ 125 mysql_version_is_at_least "5.1" \
88|| IUSE="${IUSE} berkdb" 126 || IUSE="${IUSE} berkdb"
127
128 mysql_version_is_at_least "5.1.12" \
129 && IUSE="${IUSE} pbxt"
130
131 RDEPEND="${DEPEND}
132 sys-apps/mysql
133 selinux? ( sec-policy/selinux-mysql )
134 "
135
136fi # if [[ "${_MYPVR}" != "${PVR}" ]]
89 137
90EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \ 138EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
91 pkg_postinst pkg_config pkg_postrm 139 pkg_postinst pkg_config pkg_postrm
92 140
93# 141#
94# HELPER FUNCTIONS: 142# HELPER FUNCTIONS:
95# 143#
144
145bitkeeper_fetch() {
146
147 local reposuf
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() {
209 local testname="${1}" ; shift
210 local reason="${@}"
211 local mysql_disable_file="${S}/mysql-test/t/disabled.def"
212 echo ${testname} : ${reason} >> "${mysql_disable_file}"
213 ewarn "test \"${testname}\" disabled because: \"${reason}\""
214}
96 215
97# void mysql_init_vars() 216# void mysql_init_vars()
98# 217#
99# Initialize global variables 218# Initialize global variables
100# 2005-11-19 <vivo@gentoo.org> 219# 2005-11-19 <vivo@gentoo.org>
101 220
102mysql_init_vars() { 221mysql_init_vars() {
222 if [[ ${SLOT} == "0" ]] ; then
223 MY_SUFFIX=""
224 else
225 MY_SUFFIX=${MY_SUFFIX:-"-${SLOT}"}
226 fi
103 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"} 227 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR:-"/usr/share/mysql${MY_SUFFIX}"}
104 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"} 228 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql${MY_SUFFIX}"}
105 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"} 229 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql${MY_SUFFIX}"}
106 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"} 230 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql${MY_SUFFIX}"}
107 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"} 231 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql${MY_SUFFIX}"}
108 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"} 232 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql${MY_SUFFIX}"}
109 233
110 if [[ -z "${DATADIR}" ]] ; then 234 if [[ -z "${DATADIR}" ]] ; then
111 DATADIR="" 235 DATADIR=""
112 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then 236 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
113 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \ 237 DATADIR=`"my_print_defaults${MY_SUFFIX}" mysqld 2>/dev/null \
114 | sed -ne '/datadir/s|^--datadir=||p' \ 238 | sed -ne '/datadir/s|^--datadir=||p' \
115 | tail -n1` 239 | tail -n1`
116 if [[ -z "${DATADIR}" ]] ; then 240 if [[ -z "${DATADIR}" ]] ; then
117 if useq "srvdir" ; then
118 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
119 else
120 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \ 241 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
121 | sed -e 's/.*=\s*//'` 242 | sed -e 's/.*=\s*//'`
122 fi
123 fi 243 fi
124 fi 244 fi
125 if [[ -z "${DATADIR}" ]] ; then 245 if [[ -z "${DATADIR}" ]] ; then
126 if useq "srvdir" ; then
127 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
128 else
129 DATADIR="${MY_LOCALSTATEDIR}" 246 DATADIR="${MY_LOCALSTATEDIR}"
130 fi
131 einfo "Using default DATADIR" 247 einfo "Using default DATADIR"
132 fi 248 fi
133 elog "MySQL DATADIR is ${DATADIR}" 249 elog "MySQL DATADIR is ${DATADIR}"
134 250
135 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then 251 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
142 fi 258 fi
143 export PREVIOUS_DATADIR 259 export PREVIOUS_DATADIR
144 fi 260 fi
145 fi 261 fi
146 262
263 MY_SOURCEDIR=${SERVER_URI##*/}
264 MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
265
147 export MY_SHAREDSTATEDIR MY_SYSCONFDIR 266 export MY_SUFFIX MY_SHAREDSTATEDIR MY_SYSCONFDIR
148 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR 267 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
149 export MY_INCLUDEDIR 268 export MY_INCLUDEDIR DATADIR MY_SOURCEDIR
150 export DATADIR
151} 269}
152 270
153configure_minimal() { 271configure_minimal() {
154 # These are things we exclude from a minimal build, please 272 # These are things we exclude from a minimal build, please
155 # note that the server actually does get built and installed, 273 # note that the server actually does get built and installed,
156 # but we then delete it before packaging. 274 # but we then delete it before packaging.
157 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication" 275 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication"
158 276
159 for i in ${minimal_exclude_list} ; do 277 for i in ${minimal_exclude_list} ; do
160 myconf="${myconf} --without-${i}" 278 myconf="${myconf} --without-${i}"
161 done 279 done
162 myconf="${myconf} --with-extra-charsets=none" 280 myconf="${myconf} --with-extra-charsets=none"
281 myconf="${myconf} --enable-local-infile"
282
283 if useq "static" ; then
284 myconf="${myconf} --with-client-ldflags=-all-static"
285 myconf="${myconf} --disable-shared"
286 else
287 myconf="${myconf} --enable-shared --enable-static"
288 fi
289
290 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
291 myconf="${myconf} --with-charset=utf8"
292 myconf="${myconf} --with-collation=utf8_general_ci"
293 else
294 myconf="${myconf} --with-charset=latin1"
295 myconf="${myconf} --with-collation=latin1_swedish_ci"
296 fi
163} 297}
164 298
165configure_common() { 299configure_common() {
166 myconf="${myconf} $(use_with big-tables)" 300 myconf="${myconf} $(use_with big-tables)"
167 myconf="${myconf} --enable-local-infile" 301 myconf="${myconf} --enable-local-infile"
168 myconf="${myconf} --with-extra-charsets=all" 302 myconf="${myconf} --with-extra-charsets=all"
169 myconf="${myconf} --with-mysqld-user=mysql" 303 myconf="${myconf} --with-mysqld-user=mysql"
170 myconf="${myconf} --with-server" 304 myconf="${myconf} --with-server"
171 myconf="${myconf} --with-unix-socket-path='/var/run/mysqld/mysqld.sock'" 305 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
172 myconf="${myconf} --without-libwrap" 306 myconf="${myconf} --without-libwrap"
173 307
174 if useq "static" ; then 308 if useq "static" ; then
175 myconf="${myconf} --with-mysqld-ldflags=-all-static" 309 myconf="${myconf} --with-mysqld-ldflags=-all-static"
176 myconf="${myconf} --with-client-ldflags=-all-static" 310 myconf="${myconf} --with-client-ldflags=-all-static"
181 315
182 if useq "debug" ; then 316 if useq "debug" ; then
183 myconf="${myconf} --with-debug=full" 317 myconf="${myconf} --with-debug=full"
184 else 318 else
185 myconf="${myconf} --without-debug" 319 myconf="${myconf} --without-debug"
186 mysql_version_is_at_least "4.01.03.00" \ 320 mysql_version_is_at_least "4.1.3" \
187 && useq "cluster" \ 321 && useq "cluster" \
188 && myconf="${myconf} --without-ndb-debug" 322 && myconf="${myconf} --without-ndb-debug"
189 fi 323 fi
190 324
191 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then 325 if mysql_version_is_at_least "4.1" && ! useq "latin1" ; then
192 myconf="${myconf} --with-charset=utf8" 326 myconf="${myconf} --with-charset=utf8"
193 myconf="${myconf} --with-collation=utf8_general_ci" 327 myconf="${myconf} --with-collation=utf8_general_ci"
194 else 328 else
195 myconf="${myconf} --with-charset=latin1" 329 myconf="${myconf} --with-charset=latin1"
196 myconf="${myconf} --with-collation=latin1_swedish_ci" 330 myconf="${myconf} --with-collation=latin1_swedish_ci"
210 myconf="${myconf} $(use_with perl bench)" 344 myconf="${myconf} $(use_with perl bench)"
211 myconf="${myconf} --enable-assembler" 345 myconf="${myconf} --enable-assembler"
212 myconf="${myconf} --with-extra-tools" 346 myconf="${myconf} --with-extra-tools"
213 myconf="${myconf} --with-innodb" 347 myconf="${myconf} --with-innodb"
214 myconf="${myconf} --without-readline" 348 myconf="${myconf} --without-readline"
215 mysql_version_is_at_least "5.00.00.00" || myconf="${myconf} $(use_with raid)" 349 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
216 350
217 if useq "ssl" ; then 351 if useq "ssl" ; then
218 # --with-vio is not needed anymore, it's on by default and 352 # --with-vio is not needed anymore, it's on by default and
219 # has been removed from configure 353 # has been removed from configure
220 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio" 354 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
221 if mysql_version_is_at_least "5.00.06.00" ; then 355 if mysql_version_is_at_least "5.0.6" ; then
222 # myconf="${myconf} --with-yassl" 356 # myconf="${myconf} --with-yassl"
223 myconf="${myconf} --with-openssl" 357 myconf="${myconf} --with-ssl"
224 else 358 else
225 myconf="${myconf} --with-openssl" 359 myconf="${myconf} --with-openssl"
226 fi 360 fi
227 else 361 else
228 myconf="${myconf} --without-openssl" 362 myconf="${myconf} --without-openssl"
240 else 374 else
241 myconf="${myconf} --without-berkeley-db" 375 myconf="${myconf} --without-berkeley-db"
242 fi 376 fi
243 fi 377 fi
244 378
245 if mysql_version_is_at_least "4.01.03.00" ; then 379 if mysql_version_is_at_least "4.1.3" ; then
246 myconf="${myconf} --with-geometry" 380 myconf="${myconf} --with-geometry"
247 myconf="${myconf} $(use_with cluster ndbcluster)" 381 myconf="${myconf} $(use_with cluster ndbcluster)"
248 fi 382 fi
249 383
250 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then 384 if mysql_version_is_at_least "4.1.3" && useq "extraengine" ; then
251 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html 385 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
252 myconf="${myconf} --with-archive-storage-engine" 386 myconf="${myconf} --with-archive-storage-engine"
253 387
254 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html 388 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
255 myconf="${myconf} --with-csv-storage-engine" 389 myconf="${myconf} --with-csv-storage-engine"
258 myconf="${myconf} --with-blackhole-storage-engine" 392 myconf="${myconf} --with-blackhole-storage-engine"
259 393
260 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html 394 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
261 # http://dev.mysql.com/doc/mysql/en/federated-description.html 395 # http://dev.mysql.com/doc/mysql/en/federated-description.html
262 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html 396 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
263 if mysql_version_is_at_least "5.00.03.00" ; then 397 if mysql_version_is_at_least "5.0.3" ; then
264 elog "Before using the Federated storage engine, please be sure to read" 398 elog "Before using the Federated storage engine, please be sure to read"
265 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html" 399 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
266 myconf="${myconf} --with-federated-storage-engine" 400 myconf="${myconf} --with-federated-storage-engine"
267 fi 401 fi
268 fi 402 fi
269 403
270 mysql_version_is_at_least "5.00.18.00" \ 404 mysql_version_is_at_least "5.0.18" \
271 && useq "max-idx-128" \ 405 && useq "max-idx-128" \
272 && myconf="${myconf} --with-max-indexes=128" 406 && myconf="${myconf} --with-max-indexes=128"
273} 407}
274 408
275configure_51() { 409configure_51() {
288 # 5.1 introduces a new way to manage storage engines (plugins) 422 # 5.1 introduces a new way to manage storage engines (plugins)
289 # like configuration=none 423 # like configuration=none
290 local plugins="csv,myisam,myisammrg,heap" 424 local plugins="csv,myisam,myisammrg,heap"
291 if useq "extraengine" ; then 425 if useq "extraengine" ; then
292 # like configuration=max-no-ndb, archive and example removed in 5.1.11 426 # like configuration=max-no-ndb, archive and example removed in 5.1.11
293 plugins="${plugins},archive,blackhole,example,federated,ftexample,partition" 427 plugins="${plugins},archive,blackhole,example,federated,partition"
294 428
295 elog "Before using the Federated storage engine, please be sure to read" 429 elog "Before using the Federated storage engine, please be sure to read"
296 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 430 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
297 fi 431 fi
298 432
304 if useq "cluster" ; then 438 if useq "cluster" ; then
305 plugins="${plugins},ndbcluster" 439 plugins="${plugins},ndbcluster"
306 myconf="${myconf} --with-ndb-binlog" 440 myconf="${myconf} --with-ndb-binlog"
307 fi 441 fi
308 442
443 if mysql_version_is_at_least "5.2" ; then
444 plugins="${plugins},falcon"
445 fi
446
309 myconf="${myconf} --with-plugins=${plugins}" 447 myconf="${myconf} --with-plugins=${plugins}"
448}
449
450pbxt_src_compile() {
451 mysql_init_vars
452
453 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
454
455 einfo "Reconfiguring dir '${PWD}'"
456 AT_GNUCONF_UPDATE="yes" eautoreconf
457
458 local myconf
459 myconf="${myconf} --with-mysql=${S}"
460 mkdir -p ${T}/lib
461 myconf="${myconf} --libdir=${D}/${MY_LIBDIR}"
462 useq "debug" && myconf="${myconf} --with-debug=full"
463 # TODO is safe/needed to use econf here ?
464 ./configure ${myconf} || die "problem configuring pbxt storage engine"
465 # TODO is safe/needed to use emake here ?
466 make || die "problem making pbxt storage engine (${myconf})"
467
468 popd
469 # TODO: modify test suite
470}
471
472pbxt_src_install() {
473 pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
474 make install || die "failed pbxt install"
475 popd
310} 476}
311 477
312# 478#
313# EBUILD FUNCTIONS 479# EBUILD FUNCTIONS
314# 480#
315 481
316mysql_pkg_setup() { 482mysql_pkg_setup() {
317 enewgroup mysql 60 || die "problem adding 'mysql' group" 483 enewgroup mysql 60 || die "problem adding 'mysql' group"
318 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user" 484 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
319
320 if mysql_version_is_at_least "5.01.12.00" && useq "innodb" ; then
321 eerror "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
322 die "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
323 fi
324 485
325 # Check for USE flag problems in pkg_setup 486 # Check for USE flag problems in pkg_setup
326 if useq "static" && useq "ssl" ; then 487 if useq "static" && useq "ssl" ; then
327 eerror "MySQL does not support being built statically with SSL support enabled!" 488 eerror "MySQL does not support being built statically with SSL support enabled!"
328 die "MySQL does not support being built statically with SSL support enabled!" 489 die "MySQL does not support being built statically with SSL support enabled!"
329 fi 490 fi
330 491
331 if ! mysql_version_is_at_least "5.00.00.00" \ 492 if ! mysql_version_is_at_least "5.0" \
332 && useq "raid" \ 493 && useq "raid" \
333 && useq "static" ; then 494 && useq "static" ; then
334 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically" 495 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
335 eerror "with RAID support enabled." 496 eerror "with RAID support enabled."
336 die "USE flags 'raid' and 'static' conflict!" 497 die "USE flags 'raid' and 'static' conflict!"
337 fi 498 fi
338 499
339 if mysql_version_is_at_least "4.01.03.00" \ 500 if mysql_version_is_at_least "4.1.3" \
340 && ( useq "cluster" || useq "extraengine" ) \ 501 && ( useq "cluster" || useq "extraengine" ) \
341 && useq "minimal" ; then 502 && useq "minimal" ; then
342 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 503 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
343 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 504 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
344 fi 505 fi
345 506
346 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \ 507 mysql_check_version_range "4.0 to 5.0.99.99" \
347 && useq "berkdb" \ 508 && useq "berkdb" \
348 && elog "Berkeley DB support is deprecated and will be removed in future versions!" 509 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
349} 510}
350 511
351mysql_src_unpack() { 512mysql_src_unpack() {
352 # Initialize the proper variables first 513 # Initialize the proper variables first
353 mysql_init_vars 514 mysql_init_vars
354 515
355 unpack ${A} 516 unpack ${A}
356 517 if [[ ${IS_BITKEEPER} -eq 90 ]] ; then
357 mv -f "${WORKDIR}/${MY_P}${MYSQL_RERELEASE}" "${S}" 518 if mysql_check_version_range "5.1 to 5.1.99" ; then
519 bitkeeper_fetch "mysql-5.1-ndb"
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
358 cd "${S}" 525 cd "${S}"
526 einfo "running upstream autorun on bk sources"
527 BUILD/autorun.sh
528 else
529 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
530 cd "${S}"
531 fi
359 532
360 # Apply the patches for this MySQL version 533 # Apply the patches for this MySQL version
361 if [[ -d "${WORKDIR}/${MY_FIXED_PV}" ]] ; then 534 EPATCH_SUFFIX="patch"
362 EPATCH_SOURCE="${WORKDIR}/${MY_FIXED_PV}" EPATCH_SUFFIX="patch" epatch 535 mkdir -p "${EPATCH_SOURCE}" || die "unable to create epatch directory"
363 fi 536 mysql_mv_patches
537 epatch || die "failed to apply all patches"
364 538
365 # Additional checks, remove bundled zlib 539 # Additional checks, remove bundled zlib
366 rm -f "${S}/zlib/"*.[ch] 540 rm -f "${S}/zlib/"*.[ch]
367 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in" 541 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
368 rm -f "scripts/mysqlbug" 542 rm -f "scripts/mysqlbug"
369 543
370 # Make charsets install in the right place 544 # Make charsets install in the right place
371 find . -name 'Makefile.am' \ 545 find . -name 'Makefile.am' \
372 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \; 546 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
373 547
374 # Manage mysqlmanager
375 mysql_version_is_at_least "5.00.15.00" \
376 && sed -i -e "s!@GENTOO_EXT@!!g" \
377 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
378 "${S}/server-tools/instance-manager/Makefile.am"
379
380 if mysql_version_is_at_least "4.01.00.00" ; then 548 if mysql_version_is_at_least "4.1" ; then
381 # Remove what needs to be recreated, so we're sure it's actually done 549 # Remove what needs to be recreated, so we're sure it's actually done
382 find . -name Makefile \ 550 find . -name Makefile \
383 -o -name Makefile.in \ 551 -o -name Makefile.in \
384 -o -name configure \ 552 -o -name configure \
385 -exec rm -f {} \; 553 -exec rm -f {} \;
386 rm -f "ltmain.sh" 554 rm -f "ltmain.sh"
387 rm -f "scripts/mysqlbug" 555 rm -f "scripts/mysqlbug"
388 fi 556 fi
389 557
390 local rebuilddirlist bdbdir d 558 local rebuilddirlist d
391 559
392 if mysql_version_is_at_least "5.01.00.00" ; then 560 if mysql_version_is_at_least "5.1.12" ; then
393 rebuilddirlist=". storage/innobase" 561 rebuilddirlist="."
394 bdbdir='storage/bdb/dist' 562 # TODO IMPO! Check this with a cmake expert
563 useq "innodb" \
564 && cmake \
565 -DCMAKE_C_COMPILER=$(which $(tc-getCC)) \
566 -DCMAKE_CXX_COMPILER=$(which $(tc-getCC)) \
567 "storage/innobase"
395 else 568 else
396 rebuilddirlist=". innobase" 569 rebuilddirlist=". innobase"
397 bdbdir='bdb/dist'
398 fi 570 fi
399 571
400 for d in ${rebuilddirlist} ; do 572 for d in ${rebuilddirlist} ; do
401 einfo "Reconfiguring dir '${d}'" 573 einfo "Reconfiguring dir '${d}'"
402 pushd "${d}" &>/dev/null 574 pushd "${d}" &>/dev/null
403 AT_GNUCONF_UPDATE="yes" eautoreconf 575 AT_GNUCONF_UPDATE="yes" eautoreconf
404 popd &>/dev/null 576 popd &>/dev/null
405 done 577 done
406 578
407 if mysql_check_version_range "4.01.00.00 to 5.00.99.99" \ 579 if mysql_check_version_range "4.1 to 5.0.99.99" \
408 && useq "berkdb" ; then 580 && useq "berkdb" ; then
409 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh" 581 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
410 pushd "${bdbdir}" \ 582 pushd "bdb/dist" \
411 && sh s_all \ 583 && sh s_all \
412 || die "Failed bdb reconfigure" \ 584 || die "Failed bdb reconfigure" \
413 &>/dev/null 585 &>/dev/null
414 popd &>/dev/null 586 popd &>/dev/null
415 fi 587 fi
417 589
418mysql_src_compile() { 590mysql_src_compile() {
419 # Make sure the vars are correctly initialized 591 # Make sure the vars are correctly initialized
420 mysql_init_vars 592 mysql_init_vars
421 593
594 # $myconf is modified by the configure_* functions
422 local myconf 595 local myconf=""
423 596
424 if useq "static" ; then
425 myconf="${myconf} --with-mysqld-ldflags=-all-static"
426 myconf="${myconf} --with-client-ldflags=-all-static"
427 myconf="${myconf} --disable-shared"
428 else
429 myconf="${myconf} --enable-shared --enable-static"
430 fi
431
432 myconf="${myconf} --without-libwrap"
433
434 if useq "ssl" ; then 597 if useq "minimal" ; then
435 # --with-vio is not needed anymore, it's on by default and 598 configure_minimal
436 # has been removed from configure 599 else
437 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio" 600 configure_common
438 if mysql_version_is_at_least "5.00.06.00" ; then 601 if mysql_version_is_at_least "5.1.10" ; then
439 # yassl-0.96 is still young and breaks with GCC-4.X or amd64 602 configure_51
440 # myconf="${myconf} --with-yassl"
441 myconf="${myconf} --with-openssl"
442 else 603 else
443 myconf="${myconf} --with-openssl" 604 configure_40_41_50
444 fi
445 else
446 myconf="${myconf} --without-openssl"
447 fi
448
449 if useq "debug" ; then
450 myconf="${myconf} --with-debug=full"
451 else
452 myconf="${myconf} --without-debug"
453
454 mysql_version_is_at_least "4.01.03.00" && useq "cluster" \
455 && myconf="${myconf} --without-ndb-debug"
456 fi
457
458 # These are things we exclude from a minimal build.
459 # Note that the server actually does get built and installed,
460 # but we then delete it.
461 local minimal_exclude_list="server embedded-server extra-tools innodb bench"
462
463 if ! useq "minimal" ; then
464 myconf="${myconf} --with-server"
465 myconf="${myconf} --with-extra-tools"
466
467 if ! mysql_version_is_at_least "5.00.00.00" ; then
468 if useq "raid" ; then
469 myconf="${myconf} --with-raid"
470 else
471 myconf="${myconf} --without-raid"
472 fi 605 fi
473 fi
474
475 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
476 myconf="${myconf} --with-charset=utf8"
477 myconf="${myconf} --with-collation=utf8_general_ci"
478 else
479 myconf="${myconf} --with-charset=latin1"
480 myconf="${myconf} --with-collation=latin1_swedish_ci"
481 fi
482
483 # Optional again with MySQL 5.1
484 if mysql_version_is_at_least "5.01.00.00" ; then
485 if useq "innodb" ; then
486 myconf="${myconf} --with-innodb"
487 else
488 myconf="${myconf} --without-innodb"
489 fi
490 fi
491
492 # Lots of charsets
493 myconf="${myconf} --with-extra-charsets=all"
494
495 # The following fix is due to a bug with bdb on SPARC's. See:
496 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
497 # It comes down to non-64-bit safety problems.
498 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
499 elog "Berkeley DB support was disabled due to incompatible arch"
500 myconf="${myconf} --without-berkeley-db"
501 else
502 # TODO: berkdb in MySQL 5.1 needs to be worked on
503 if useq "berkdb" && ! mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then
504 myconf="${myconf} --with-berkeley-db=./bdb"
505 else
506 myconf="${myconf} --without-berkeley-db"
507 fi
508 fi
509
510 if mysql_version_is_at_least "4.01.03.00" ; then
511 myconf="${myconf} --with-geometry"
512
513 if useq "cluster" ; then
514 myconf="${myconf} --with-ndbcluster"
515 else
516 myconf="${myconf} --without-ndbcluster"
517 fi
518 fi
519
520 if useq "big-tables" ; then
521 myconf="${myconf} --with-big-tables"
522 else
523 myconf="${myconf} --without-big-tables"
524 fi
525
526 mysql_version_is_at_least "5.01.06.00" \
527 && myconf="${myconf} --with-ndb-binlog"
528
529 if useq "embedded" ; then
530 myconf="${myconf} --with-embedded-privilege-control"
531 myconf="${myconf} --with-embedded-server"
532 else
533 myconf="${myconf} --without-embedded-privilege-control"
534 myconf="${myconf} --without-embedded-server"
535 fi
536
537 # Benchmarking stuff needs Perl
538 if useq "perl" ; then
539 myconf="${myconf} --with-bench"
540 else
541 myconf="${myconf} --without-bench"
542 fi
543 else
544 for i in ${minimal_exclude_list} ; do
545 myconf="${myconf} --without-${i}"
546 done
547 myconf="${myconf} --without-berkeley-db"
548 myconf="${myconf} --with-extra-charsets=none"
549 fi
550
551 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
552 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
553 myconf="${myconf} --with-archive-storage-engine"
554
555 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
556 myconf="${myconf} --with-csv-storage-engine"
557
558 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
559 myconf="${myconf} --with-blackhole-storage-engine"
560
561 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
562 # http://dev.mysql.com/doc/mysql/en/federated-description.html
563 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
564 if mysql_version_is_at_least "5.00.03.00" ; then
565 elog "Before using the Federated storage engine, please be sure to read"
566 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
567 myconf="${myconf} --with-federated-storage-engine"
568 fi
569
570 # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
571 if mysql_version_is_at_least "5.01.00.00" ; then
572 myconf="${myconf} --with-partition"
573 fi
574 fi
575
576 mysql_version_is_at_least "5.00.18.00" \
577 && useq "max-idx-128" \
578 && myconf="${myconf} --with-max-indexes=128"
579
580 mysql_version_is_at_least "5.01.05.00" \
581 && myconf="${myconf} --with-row-based-replication"
582
583 # TODO: Recheck again later, there were problems with assembler enabled
584 # and some combinations of USE flags with MySQL 5.1
585 if mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then
586 myconf="${myconf} --disable-assembler"
587 else
588 myconf="${myconf} --enable-assembler"
589 fi 606 fi
590 607
591 # Bug #114895, bug #110149 608 # Bug #114895, bug #110149
592 filter-flags "-O" "-O[01]" 609 filter-flags "-O" "-O[01]"
593 610
594 # glib-2.3.2_pre fix, bug #16496 611 # glib-2.3.2_pre fix, bug #16496
595 append-flags "-DHAVE_ERRNO_AS_DEFINE=1" 612 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
596 613
597 append-flags "-fno-exceptions -fno-strict-aliasing" 614 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
598 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti" 615 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
599 mysql_version_is_at_least "5.00.00.00" \ 616 mysql_version_is_at_least "5.0" \
600 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 617 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
601 export CXXFLAGS 618 export CXXFLAGS
602 619
603 econf \ 620 econf \
621 --program-suffix="${MY_SUFFIX}" \
604 --libexecdir="/usr/sbin" \ 622 --libexecdir="/usr/sbin" \
605 --sysconfdir="${MY_SYSCONFDIR}" \ 623 --sysconfdir="${MY_SYSCONFDIR}" \
606 --localstatedir="${MY_LOCALSTATEDIR}" \ 624 --localstatedir="${MY_LOCALSTATEDIR}" \
607 --sharedstatedir="${MY_SHAREDSTATEDIR}" \ 625 --sharedstatedir="${MY_SHAREDSTATEDIR}" \
608 --libdir="${MY_LIBDIR}" \ 626 --libdir="${MY_LIBDIR}" \
609 --includedir="${MY_INCLUDEDIR}" \ 627 --includedir="${MY_INCLUDEDIR}" \
610 --with-low-memory \ 628 --with-low-memory \
611 --enable-local-infile \
612 --with-mysqld-user=mysql \
613 --with-client-ldflags=-lstdc++ \ 629 --with-client-ldflags=-lstdc++ \
614 --enable-thread-safe-client \ 630 --enable-thread-safe-client \
615 --with-comment="Gentoo Linux ${PF}" \ 631 --with-comment="Gentoo Linux ${PF}" \
616 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
617 --without-readline \
618 --without-docs \ 632 --without-docs \
619 ${myconf} || die "econf failed" 633 ${myconf} || die "econf failed"
620 634
621 # TODO: Move this before autoreconf !!! 635 # TODO: Move this before autoreconf !!!
622 find . -type f -name Makefile -print0 \ 636 find . -type f -name Makefile -print0 \
623 | xargs -0 -n100 sed -i \ 637 | xargs -0 -n100 sed -i \
624 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 638 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
625 639
626 emake || die "emake failed" 640 emake || die "emake failed"
641
642 mysql_version_is_at_least "5.1.1" && useq "pbxt" && pbxt_src_compile
627} 643}
628 644
629mysql_src_install() { 645mysql_src_install() {
630 # Make sure the vars are correctly initialized 646 # Make sure the vars are correctly initialized
631 mysql_init_vars 647 mysql_init_vars
632 648
633 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed" 649 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die
650
651 mysql_version_is_at_least "5.1.12" && useq "pbxt" && pbxt_src_install
634 652
635 insinto "${MY_INCLUDEDIR}" 653 insinto "${MY_INCLUDEDIR}"
636 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h 654 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
637 655
638 # Convenience links 656 # Convenience links
639 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 657 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}"
640 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 658 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}"
641 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize" 659 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}"
642 660
643 # Various junk (my-*.cnf moved elsewhere) 661 # Various junk (my-*.cnf moved elsewhere)
644 rm -Rf "${D}/usr/share/info" 662 rm -Rf "${D}/usr/share/info"
645 for removeme in "mysql-log-rotate" mysql.server* \ 663 for removeme in "mysql-log-rotate" mysql.server* \
646 binary-configure* my-*.cnf mi_test_all* 664 binary-configure* my-*.cnf mi_test_all*
647 do 665 do
648 rm -f "${D}"/usr/share/mysql/${removeme} 666 rm -f "${D}"/usr/share/mysql/${removeme}
649 done 667 done
650 668
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
651 # Clean up stuff for a minimal build 678 # clean up stuff for a minimal build
652 if useq "minimal" ; then 679 if useq "minimal" ; then
653 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench} 680 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
654 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} 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}
655 rm -f "${D}/usr/sbin/mysqld" 682 rm -f "${D}/usr/sbin/mysqld"
656 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a 683 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
657 fi 684 fi
658 685
686 if [[ ${PN} == "mysql-slotted" ]] ; then
687 local notcatched=$(ls "${D}/usr/share/mysql"/*)
688 if [[ -n "${notcatched}" ]] ; then
689 ewarn "QA notice"
690 ewarn "${notcatched} files in /usr/share/mysql"
691 ewarn "bug mysql-herd to manage them"
692 fi
693 rm -Rf "${D}/usr/share/mysql"
694 fi
695
659 # Configuration stuff 696 # Configuration stuff
660 if mysql_version_is_at_least "4.01.00.00" ; then 697 if mysql_version_is_at_least "4.1" ; then
661 mysql_mycnf_version="4.1" 698 mysql_mycnf_version="4.1"
662 else 699 else
663 mysql_mycnf_version="4.0" 700 mysql_mycnf_version="4.0"
664 fi 701 fi
665 insinto "${MY_SYSCONFDIR}" 702 insinto "${MY_SYSCONFDIR}"
666 doins "scripts/mysqlaccess.conf" 703 doins scripts/mysqlaccess.conf
704 sed -e "s!@MY_SUFFIX@!${MY_SUFFIX}!g" \
667 sed -e "s!@DATADIR@!${DATADIR}!g" \ 705 -e "s!@DATADIR@!${DATADIR}!g" \
668 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 706 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
669 > "${TMPDIR}/my.cnf.ok" 707 > "${TMPDIR}/my.cnf.ok"
670 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then 708 if mysql_version_is_at_least "4.1" && useq "latin1" ; then
671 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 709 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
672 fi 710 fi
673 newins "${TMPDIR}/my.cnf.ok" my.cnf 711 newins "${TMPDIR}/my.cnf.ok" my.cnf
674
675 insinto "/etc/conf.d"
676 newins "${FILESDIR}/mysql.conf.d" "mysql"
677 mysql_version_is_at_least "5.00.11.00" \
678 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
679 712
680 # Minimal builds don't have the MySQL server 713 # Minimal builds don't have the MySQL server
681 if ! useq "minimal" ; then 714 if ! useq "minimal" ; then
682 exeinto "/etc/init.d"
683 newexe "${FILESDIR}/mysql.rc6" "mysql"
684 mysql_version_is_at_least "5.00.11.00" \
685 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
686
687 insinto "/etc/logrotate.d"
688 newins "${FILESDIR}/logrotate.mysql" "mysql"
689
690 # Empty directories ... 715 # Empty directories ...
691 diropts "-m0750" 716 diropts "-m0750"
692 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then 717 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
693 dodir "${DATADIR}" 718 dodir "${DATADIR}"
694 keepdir "${DATADIR}" 719 keepdir "${DATADIR}"
721 for script in scripts/mysql* ; do 746 for script in scripts/mysql* ; do
722 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 747 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
723 done 748 done
724 fi 749 fi
725 750
726 ROOT="${D}" mysql_lib_symlinks 751 if [[ ${PN} == "mysql-slotted" ]] ; then
752 # MOVED HERE DUE TO BUG #121445
753 # create a list of files, to be used
754 # by external utilities
755 mkdir -p "${D}/var/lib/eselect/mysql/"
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
771
772 mysql_lib_symlinks "${D}"
727} 773}
728 774
729mysql_pkg_preinst() { 775mysql_pkg_preinst() {
730 enewgroup mysql 60 || die "problem adding 'mysql' group" 776 enewgroup mysql 60 || die "problem adding 'mysql' group"
731 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user" 777 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
742 # Secure the logfiles 788 # Secure the logfiles
743 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err} 789 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
744 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql* 790 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
745 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql* 791 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
746 792
793 # Minimal builds don't have the MySQL server
747 if ! useq "minimal" ; then 794 if ! useq "minimal" ; then
748 # Your friendly public service announcement ... 795 docinto "support-files"
749 einfo 796 for script in \
750 elog "You might want to run:" 797 support-files/my-*.cnf \
751 elog "\"emerge --config =${CATEGORY}/${PF}\"" 798 support-files/magic \
752 elog "if this is a new install." 799 support-files/ndb-config-2-node.ini
753 einfo 800 do
754 mysql_version_is_at_least "5.01.00.00" \ 801 dodoc "${script}"
755 || elog "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream." 802 done
803
804 docinto "scripts"
805 for script in scripts/mysql* ; do
806 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
807 done
756 fi 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
757 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \ 825 mysql_check_version_range "4.0 to 5.0.99.99" \
758 && useq "berkdb" \ 826 && useq "berkdb" \
759 && elog "Berkeley DB support is deprecated and will be removed in future versions!" 827 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
760} 828}
761 829
762mysql_pkg_config() { 830mysql_pkg_config() {
763 # Make sure the vars are correctly initialized 831 # Make sure the vars are correctly initialized
764 mysql_init_vars 832 mysql_init_vars
765 833
766 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR" 834 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
767 835
768 if built_with_use dev-db/mysql minimal ; then 836 if built_with_use ${CATEGORY}/${PN} minimal ; then
769 die "Minimal builds do NOT include the MySQL server" 837 die "Minimal builds do NOT include the MySQL server"
770 fi 838 fi
771 839
772 local pwd1="a" 840 local pwd1="a"
773 local pwd2="b" 841 local pwd2="b"
809 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \ 877 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
810 || die "MySQL databases not installed" 878 || die "MySQL databases not installed"
811 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null 879 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
812 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null 880 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
813 881
814 if mysql_version_is_at_least "4.01.03.00" ; then 882 if mysql_version_is_at_least "4.1.3" ; then
815 options="--skip-ndbcluster" 883 options="--skip-ndbcluster"
816 884
817 # Filling timezones, see 885 # Filling timezones, see
818 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 886 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
819 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null 887 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
868 wait %1 936 wait %1
869 einfo "Done" 937 einfo "Done"
870} 938}
871 939
872mysql_pkg_postrm() { 940mysql_pkg_postrm() {
941 if [[ ${PN} == "mysql-slotted" ]] ; then
873 mysql_lib_symlinks 942 mysql_lib_symlinks
943 mysql_clients_link_to_best_version
944 fi
874} 945}

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

  ViewVC Help
Powered by ViewVC 1.1.20