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

Diff of /eclass/mysql.eclass

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

Revision 1.6 Revision 1.41
1# Copyright 1999-2005 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.6 2006/01/14 19:00:32 vivo Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.41 2006/10/20 18:53:45 chtekk Exp $
4 4
5# Author: Francesco Riosa <vivo at gentoo.org> 5# Author: Francesco Riosa <vivo@gentoo.org>
6# Maintainer: Francesco Riosa <vivo at gentoo.org> 6# Maintainer: Luca Longinotti <chtekk@gentoo.org>
7 7
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 !!!
10
11# MYSQL_VERSION_ID will be:
12# 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
14# depend on this variable.
15# In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
16
17if [[ -z "${MYSQL_VERSION_ID}" ]] ; then
18 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
19 for vatom in 0 1 2 3 ; do
20 # pad to length 2
21 tpv[${vatom}]="00${tpv[${vatom}]}"
22 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
23 done
24 # strip leading "0" (otherwise it's considered an octal number by BASH)
25 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
26fi
27
8inherit eutils flag-o-matic gnuconfig mysql_fx 28inherit eutils flag-o-matic gnuconfig autotools mysql_fx
9 29
10#major, minor only in the slot 30# Be warned, *DEPEND are version-dependant
11SLOT=$(( ${MYSQL_VERSION_ID} / 10000 )) 31DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
32 userland_GNU? ( sys-process/procps )
33 >=sys-apps/sed-4
34 >=sys-apps/texinfo-4.7-r1
35 >=sys-libs/readline-4.1
36 >=sys-libs/zlib-1.2.3"
12 37
38mysql_version_is_at_least "5.01.00.00" \
39|| DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
40
41RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )"
42
43# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
44PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
45
13# shorten the path because the socket path length must be shorter than 107 chars 46# Shorten the path because the socket path length must be shorter than 107 chars
14# and we will run a mysql server during test phase 47# and we will run a mysql server during test phase
15S="${WORKDIR}/${PN}" 48S="${WORKDIR}/${PN}"
16 49
50# Define $MY_FIXED_PV for MySQL patchsets
51MY_FIXED_PV="${PV/_alpha/}"
52#MY_FIXED_PV="${MY_FIXED_PV/_beta/}"
53#MY_FIXED_PV="${MY_FIXED_PV/_rc/}"
54
55MY_P="${P/_/-}"
56
57# Define correct SRC_URIs
58SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${MY_P}${MYSQL_RERELEASE}.tar.gz"
59if [[ -n "${MYSQL_PATCHSET_REV}" ]] ; then
60 MYSQL_PATCHSET_FILENAME="${PN}-patchset-${MY_FIXED_PV}-r${MYSQL_PATCHSET_REV}.tar.bz2"
61 # We add the Gentoo mirror here, as we only use primaryuri for the MySQL tarball
62 SRC_URI="${SRC_URI} http://gentoo.longitekk.com/${MYSQL_PATCHSET_FILENAME}"
63fi
64
17DESCRIPTION="A fast, multi-threaded, multi-user SQL database server" 65DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
18HOMEPAGE="http://www.mysql.com/" 66HOMEPAGE="http://www.mysql.com/"
19NEWP="${PN}-${PV/_/-}" 67SLOT="0"
20SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${NEWP}.tar.gz
21 mirror://gentoo/mysql-extras-20060114.tar.bz2"
22LICENSE="GPL-2" 68LICENSE="GPL-2"
23IUSE="big-tables berkdb debug minimal perl selinux ssl static" 69IUSE="big-tables debug embedded minimal perl selinux srvdir ssl static"
24RESTRICT="primaryuri" 70RESTRICT="confcache"
25DEPEND="app-admin/eselect-mysql" 71
72mysql_version_is_at_least "4.01.00.00" \
73&& IUSE="${IUSE} latin1"
26 74
27mysql_version_is_at_least "4.01.03.00" \ 75mysql_version_is_at_least "4.01.03.00" \
28&& IUSE="${IUSE} cluster utf8 extraengine" 76&& IUSE="${IUSE} cluster extraengine"
77
78mysql_version_is_at_least "5.00.00.00" \
79|| IUSE="${IUSE} raid"
29 80
30mysql_version_is_at_least "5.00.18.00" \ 81mysql_version_is_at_least "5.00.18.00" \
31&& IUSE="${IUSE} max-idx-128" 82&& IUSE="${IUSE} max-idx-128"
32 83
33mysql_version_is_at_least "5.01.00.00" \ 84mysql_version_is_at_least "5.01.00.00" \
34&& IUSE="${IUSE} innodb" 85&& IUSE="${IUSE} innodb"
35 86
36EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_config pkg_postrm
37
38mysql_pkg_setup() {
39
40 enewgroup mysql 60 || die "problem adding group mysql"
41 enewuser mysql 60 -1 /dev/null mysql \
42 || die "problem adding user mysql"
43}
44
45mysql_src_unpack() {
46
47 mysql_init_vars
48
49 if useq static && useq ssl; then
50 local msg="MySQL does not support building statically with SSL support"
51 eerror "${msg}"
52 die "${msg}"
53 fi
54
55 if mysql_version_is_at_least "4.01.03.00" \
56 && useq cluster \
57 || useq extraengine \
58 && useq minimal ; then
59 die "USEs cluster, extraengine conflicts with \"minimal\""
60 fi
61
62 unpack ${A} || die
63
64 mv -f "${WORKDIR}/${NEWP}" "${S}"
65 cd "${S}"
66
67 EPATCH_SUFFIX="patch"
68 mkdir -p "${EPATCH_SOURCE}" || die "unable to create epatch directory"
69 mysql_mv_patches
70 epatch || die "failed to apply all patches"
71
72 # additional check, remove bundled zlib
73 rm -f "${S}/zlib/"*.[ch]
74 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
75 rm -f scripts/mysqlbug
76
77 # Multilib issue with zlib detection
78 mysql_version_is_at_least "5.00.15.00" \ 87mysql_version_is_at_least "5.01.00.00" \
79 && sed -i -e "s:zlib_dir/lib:zlib_dir/$(get_libdir):g" \ 88|| IUSE="${IUSE} berkdb"
80 "${S}/config/ac-macros/zlib.m4"
81 89
82 # Make charsets install in the right place 90EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
83 find . -name 'Makefile.am' \ 91 pkg_postinst pkg_config pkg_postrm
84 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
85 92
86 # Manage mysqlmanager 93#
87 mysql_version_is_at_least "5.00.15.00" \ 94# HELPER FUNCTIONS:
88 && sed -i -e "s!@GENTOO_EXT@!${MY_SUFFIX}!g" \ 95#
89 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
90 "${S}/server-tools/instance-manager/Makefile.am"
91 96
92 # remove what need to be recreated, so we are sure it's actually done 97# void mysql_init_vars()
93 find . -name Makefile -o -name Makefile.in -o -name configure -exec rm -f {} \; 98#
94 rm ltmain.sh 99# Initialize global variables
100# 2005-11-19 <vivo@gentoo.org>
95 101
96 local rebuilddirlist d buildstep bdbdir 102mysql_init_vars() {
103 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
104 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
105 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
106 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
107 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
108 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
97 109
98 if mysql_version_is_at_least "5.01.00.00" ; then 110 if [[ -z "${DATADIR}" ]] ; then
99 rebuilddirlist=". storage/innobase" 111 DATADIR=""
100 bdbdir='storage/bdb/dist' 112 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
113 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
114 | sed -ne '/datadir/s|^--datadir=||p' \
115 | tail -n1`
116 if [[ -z "${DATADIR}" ]] ; then
117 if useq "srvdir" ; then
118 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
101 else 119 else
102 rebuilddirlist=". innobase" 120 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
103 bdbdir='bdb/dist' 121 | sed -e 's/.*=\s*//'`
122 fi
123 fi
104 fi 124 fi
125 if [[ -z "${DATADIR}" ]] ; then
126 if useq "srvdir" ; then
127 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
128 else
129 DATADIR="${MY_LOCALSTATEDIR}"
130 fi
131 einfo "Using default DATADIR"
132 fi
133 elog "MySQL DATADIR is ${DATADIR}"
105 134
106 for d in ${rebuilddirlist}; do 135 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
107 einfo "reconfiguring dir \"${d}\"" 136 if [[ -e "${DATADIR}" ]] ; then
108 pushd "${d}" &>/dev/null 137 elog "Previous datadir found, it's YOUR job to change"
109 for buildstep in \ 138 elog "ownership and take care of it"
110 'libtoolize --copy --force' \ 139 PREVIOUS_DATADIR="yes"
111 'aclocal --force' \ 140 else
112 'autoheader --force -Wnone' \ 141 PREVIOUS_DATADIR="no"
113 'autoconf --force -Wnone' \ 142 fi
114 'automake --force --force-missing -Wnone' \ 143 export PREVIOUS_DATADIR
115 'gnuconfig_update' 144 fi
116 do 145 fi
117 einfo "performing ${buildstep}" 146
118 ${buildstep} || die "failed ${buildstep/ */} dir \"${d}\"" 147 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
148 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
149 export MY_INCLUDEDIR
150 export DATADIR
151}
152
153configure_minimal() {
154 # These are things we exclude from a minimal build, please
155 # note that the server actually does get built and installed,
156 # but we then delete it before packaging.
157 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication"
158
159 for i in ${minimal_exclude_list} ; do
160 myconf="${myconf} --without-${i}"
119 done 161 done
120 popd &>/dev/null 162 myconf="${myconf} --with-extra-charsets=none"
121 done
122
123 if ! useq bdbdir && ! mysql_check_version_range "5.01.00.00 to 5.01.06.99"
124 then
125 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f ltmain.sh "${bdbdir}/ltmain.sh"
126 pushd "${bdbdir}" && sh s_all || die "failed bdb reconfigure" &>/dev/null
127 popd &>/dev/null
128 fi
129
130} 163}
131 164
132mysql_src_compile() { 165configure_common() {
166 myconf="${myconf} $(use_with big-tables)"
167 myconf="${myconf} --enable-local-infile"
168 myconf="${myconf} --with-extra-charsets=all"
169 myconf="${myconf} --with-mysqld-user=mysql"
170 myconf="${myconf} --with-server"
171 myconf="${myconf} --with-unix-socket-path='/var/run/mysqld/mysqld.sock'"
172 myconf="${myconf} --without-libwrap"
133 173
134 mysql_init_vars
135 local myconf
136
137 if useq static ; then 174 if useq "static" ; then
138 myconf="${myconf} --with-mysqld-ldflags=-all-static" 175 myconf="${myconf} --with-mysqld-ldflags=-all-static"
139 myconf="${myconf} --with-client-ldflags=-all-static" 176 myconf="${myconf} --with-client-ldflags=-all-static"
140 myconf="${myconf} --disable-shared" 177 myconf="${myconf} --disable-shared"
141 else 178 else
142 myconf="${myconf} --enable-shared --enable-static" 179 myconf="${myconf} --enable-shared --enable-static"
143 fi 180 fi
144 181
145 #myconf="${myconf} `use_with tcpd libwrap`" 182 if useq "debug" ; then
183 myconf="${myconf} --with-debug=full"
184 else
185 myconf="${myconf} --without-debug"
186 mysql_version_is_at_least "4.01.03.00" \
187 && useq "cluster" \
188 && myconf="${myconf} --without-ndb-debug"
189 fi
190
191 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
192 myconf="${myconf} --with-charset=utf8"
193 myconf="${myconf} --with-collation=utf8_general_ci"
194 else
195 myconf="${myconf} --with-charset=latin1"
196 myconf="${myconf} --with-collation=latin1_swedish_ci"
197 fi
198
199 if useq "embedded" ; then
200 myconf="${myconf} --with-embedded-privilege-control"
201 myconf="${myconf} --with-embedded-server"
202 else
203 myconf="${myconf} --without-embedded-privilege-control"
204 myconf="${myconf} --without-embedded-server"
205 fi
206
207}
208
209configure_40_41_50() {
210 myconf="${myconf} $(use_with perl bench)"
211 myconf="${myconf} --enable-assembler"
212 myconf="${myconf} --with-extra-tools"
213 myconf="${myconf} --with-innodb"
146 myconf="${myconf} --without-libwrap" 214 myconf="${myconf} --without-readline"
215 mysql_version_is_at_least "5.00.00.00" || myconf="${myconf} $(use_with raid)"
147 216
148 if useq ssl ; then 217 if useq "ssl" ; then
149 # --with-vio is not needed anymore, it's on by default and 218 # --with-vio is not needed anymore, it's on by default and
150 # has been removed from configure 219 # has been removed from configure
151 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio" 220 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
152 if mysql_version_is_at_least "5.00.06.00" ; then 221 if mysql_version_is_at_least "5.00.06.00" ; then
153 # yassl-0.96 is young break with gcc-4.0 || amd64
154 #myconf="${myconf} --with-yassl" 222 # myconf="${myconf} --with-yassl"
155 myconf="${myconf} --with-openssl" 223 myconf="${myconf} --with-openssl"
156 else 224 else
157 myconf="${myconf} --with-openssl" 225 myconf="${myconf} --with-openssl"
158 fi 226 fi
159 else 227 else
160 myconf="${myconf} --without-openssl" 228 myconf="${myconf} --without-openssl"
161 fi 229 fi
162 230
231 # The following fix is due to a bug with bdb on SPARC's. See:
232 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
233 # It comes down to non-64-bit safety problems.
234 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
235 elog "Berkeley DB support was disabled due to incompatible arch"
236 myconf="${myconf} --without-berkeley-db"
237 else
238 if useq "berkdb" ; then
239 myconf="${myconf} --with-berkeley-db=./bdb"
240 else
241 myconf="${myconf} --without-berkeley-db"
242 fi
243 fi
244
245 if mysql_version_is_at_least "4.01.03.00" ; then
246 myconf="${myconf} --with-geometry"
247 myconf="${myconf} $(use_with cluster ndbcluster)"
248 fi
249
250 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
251 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
252 myconf="${myconf} --with-archive-storage-engine"
253
254 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
255 myconf="${myconf} --with-csv-storage-engine"
256
257 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
258 myconf="${myconf} --with-blackhole-storage-engine"
259
260 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
261 # http://dev.mysql.com/doc/mysql/en/federated-description.html
262 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
263 if mysql_version_is_at_least "5.00.03.00" ; then
264 elog "Before using the Federated storage engine, please be sure to read"
265 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
266 myconf="${myconf} --with-federated-storage-engine"
267 fi
268 fi
269
270 mysql_version_is_at_least "5.00.18.00" \
271 && useq "max-idx-128" \
272 && myconf="${myconf} --with-max-indexes=128"
273}
274
275configure_51() {
276 # TODO: !!!! readd --without-readline
277 # the failure depend upon config/ac-macros/readline.m4 checking into
278 # readline.h instead of history.h
279 myconf="${myconf} $(use_with ssl)"
280 myconf="${myconf} --enable-assembler"
281 myconf="${myconf} --with-geometry"
282 myconf="${myconf} --with-readline"
283 myconf="${myconf} --with-row-based-replication"
284 myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
285 myconf="${myconf} --without-pstack"
286 useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
287
288 # 5.1 introduces a new way to manage storage engines (plugins)
289 # like configuration=none
290 local plugins="csv,myisam,myisammrg,heap"
291 if useq "extraengine" ; then
292 # like configuration=max-no-ndb, archive and example removed in 5.1.11
293 plugins="${plugins},archive,blackhole,example,federated,ftexample,partition"
294
295 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"
297 fi
298
299 if useq "innodb" ; then
300 plugins="${plugins},innobase"
301 fi
302
303 # like configuration=max-no-ndb
304 if useq "cluster" ; then
305 plugins="${plugins},ndbcluster"
306 myconf="${myconf} --with-ndb-binlog"
307 fi
308
309 myconf="${myconf} --with-plugins=${plugins}"
310}
311
312#
313# EBUILD FUNCTIONS
314#
315
316mysql_pkg_setup() {
317 enewgroup mysql 60 || die "problem adding 'mysql' group"
318 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
325 # Check for USE flag problems in pkg_setup
326 if useq "static" && useq "ssl" ; then
327 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!"
329 fi
330
331 if ! mysql_version_is_at_least "5.00.00.00" \
332 && useq "raid" \
333 && useq "static" ; then
334 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
335 eerror "with RAID support enabled."
336 die "USE flags 'raid' and 'static' conflict!"
337 fi
338
339 if mysql_version_is_at_least "4.01.03.00" \
340 && ( useq "cluster" || useq "extraengine" ) \
341 && useq "minimal" ; then
342 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
343 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
344 fi
345
346 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
347 && useq "berkdb" \
348 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
349}
350
351mysql_src_unpack() {
352 # Initialize the proper variables first
353 mysql_init_vars
354
355 unpack ${A}
356
357 mv -f "${WORKDIR}/${MY_P}${MYSQL_RERELEASE}" "${S}"
358 cd "${S}"
359
360 # Apply the patches for this MySQL version
361 if [[ -d "${WORKDIR}/${MY_FIXED_PV}" ]] ; then
362 EPATCH_SOURCE="${WORKDIR}/${MY_FIXED_PV}" EPATCH_SUFFIX="patch" epatch
363 fi
364
365 # Additional checks, remove bundled zlib
366 rm -f "${S}/zlib/"*.[ch]
367 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
368 rm -f "scripts/mysqlbug"
369
370 # Make charsets install in the right place
371 find . -name 'Makefile.am' \
372 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
373
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
381 # Remove what needs to be recreated, so we're sure it's actually done
382 find . -name Makefile \
383 -o -name Makefile.in \
384 -o -name configure \
385 -exec rm -f {} \;
386 rm -f "ltmain.sh"
387 rm -f "scripts/mysqlbug"
388 fi
389
390 local rebuilddirlist bdbdir d
391
392 if mysql_version_is_at_least "5.01.00.00" ; then
393 rebuilddirlist=". storage/innobase"
394 bdbdir='storage/bdb/dist'
395 else
396 rebuilddirlist=". innobase"
397 bdbdir='bdb/dist'
398 fi
399
400 for d in ${rebuilddirlist} ; do
401 einfo "Reconfiguring dir '${d}'"
402 pushd "${d}" &>/dev/null
403 AT_GNUCONF_UPDATE="yes" eautoreconf
404 popd &>/dev/null
405 done
406
407 if mysql_check_version_range "4.01.00.00 to 5.00.99.99" \
408 && useq "berkdb" ; then
409 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh"
410 pushd "${bdbdir}" \
411 && sh s_all \
412 || die "Failed bdb reconfigure" \
413 &>/dev/null
414 popd &>/dev/null
415 fi
416}
417
418mysql_src_compile() {
419 # Make sure the vars are correctly initialized
420 mysql_init_vars
421
422 local myconf
423
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
435 # --with-vio is not needed anymore, it's on by default and
436 # has been removed from configure
437 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
438 if mysql_version_is_at_least "5.00.06.00" ; then
439 # yassl-0.96 is still young and breaks with GCC-4.X or amd64
440 # myconf="${myconf} --with-yassl"
441 myconf="${myconf} --with-openssl"
442 else
443 myconf="${myconf} --with-openssl"
444 fi
445 else
446 myconf="${myconf} --without-openssl"
447 fi
448
163 if useq debug; then 449 if useq "debug" ; then
164 myconf="${myconf} --with-debug=full" 450 myconf="${myconf} --with-debug=full"
165 else 451 else
166 myconf="${myconf} --without-debug" 452 myconf="${myconf} --without-debug"
167 mysql_version_is_at_least "4.01.03.00" && useq cluster && myconf="${myconf} --without-ndb-debug"
168 fi
169 453
170 # benchmarking stuff needs perl 454 mysql_version_is_at_least "4.01.03.00" && useq "cluster" \
171 # and shouldn't be bothered with on minimal builds
172 if useq perl && ! useq minimal; then
173 myconf="${myconf} --with-bench"
174 else
175 myconf="${myconf} --without-bench" 455 && myconf="${myconf} --without-ndb-debug"
176 fi 456 fi
177 457
178 # these are things we exclude from a minimal build 458 # These are things we exclude from a minimal build.
179 # note that the server actually does get built and installed 459 # Note that the server actually does get built and installed,
180 # but we then delete it before packaging. 460 # but we then delete it.
181 local minimal_exclude_list="server embedded-server extra-tools innodb" 461 local minimal_exclude_list="server embedded-server extra-tools innodb bench"
462
182 if ! useq minimal; then 463 if ! useq "minimal" ; then
183 for i in ${minimal_exclude_list}; do 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
184 myconf="${myconf} --with-${i}" 469 myconf="${myconf} --with-raid"
185 done 470 else
186
187 if useq static ; then
188 myconf="${myconf} --without-raid" 471 myconf="${myconf} --without-raid"
189 ewarn "disabling raid support, has problem with static" 472 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"
190 else 478 else
191 myconf="${myconf} --with-raid" 479 myconf="${myconf} --with-charset=latin1"
480 myconf="${myconf} --with-collation=latin1_swedish_ci"
192 fi 481 fi
193 482
483 # Optional again with MySQL 5.1
194 if ! mysql_version_is_at_least "5.00.00.00" ; then 484 if mysql_version_is_at_least "5.01.00.00" ; then
195 if mysql_version_is_at_least "4.01.00.00" && useq utf8; then 485 if useq "innodb" ; then
196 myconf="${myconf} --with-charset=utf8" 486 myconf="${myconf} --with-innodb"
197 myconf="${myconf} --with-collation=utf8_general_ci"
198 else 487 else
199 myconf="${myconf} --with-charset=latin1" 488 myconf="${myconf} --without-innodb"
200 myconf="${myconf} --with-collation=latin1_swedish_ci"
201 fi 489 fi
202 fi 490 fi
203 491
204 # optional again from 2005-12-05
205 if mysql_version_is_at_least "5.01.00.00" ; then
206 myconf="${myconf} $(use_with innodb)"
207 else
208 myconf="${myconf} --with-innodb"
209 fi
210
211 # lots of chars 492 # Lots of charsets
212 myconf="${myconf} --with-extra-charsets=all" 493 myconf="${myconf} --with-extra-charsets=all"
213 494
214 #The following fix is due to a bug with bdb on sparc's. See: 495 # The following fix is due to a bug with bdb on SPARC's. See:
215 #http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8 496 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
216 # it comes down to non-64-bit safety problems 497 # It comes down to non-64-bit safety problems.
217 if useq sparc || useq alpha || useq hppa || useq mips || useq amd64 \ 498 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
218 || mysql_check_version_range "5.01.00.00 to 5.01.06.99" 499 elog "Berkeley DB support was disabled due to incompatible arch"
219 then
220 ewarn "bdb berkeley-db disabled due to arch or version"
221 myconf="${myconf} --without-berkeley-db" 500 myconf="${myconf} --without-berkeley-db"
222 else 501 else
223 useq berkdb \ 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
224 && myconf="${myconf} --with-berkeley-db=./bdb" \ 504 myconf="${myconf} --with-berkeley-db=./bdb"
505 else
225 || myconf="${myconf} --without-berkeley-db" 506 myconf="${myconf} --without-berkeley-db"
507 fi
226 fi 508 fi
227 509
228 if mysql_version_is_at_least "4.01.03.00" ; then 510 if mysql_version_is_at_least "4.01.03.00" ; then
229 #myconf="${myconf} $(use_with geometry)"
230 myconf="${myconf} --with-geometry" 511 myconf="${myconf} --with-geometry"
512
513 if useq "cluster" ; then
514 myconf="${myconf} --with-ndbcluster"
515 else
231 myconf="${myconf} $(use_with cluster ndbcluster)" 516 myconf="${myconf} --without-ndbcluster"
232 fi 517 fi
518 fi
233 519
234 mysql_version_is_at_least "4.01.11.00" && myconf="${myconf} `use_with big-tables`" 520 if useq "big-tables" ; then
521 myconf="${myconf} --with-big-tables"
235 else 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
236 for i in ${minimal_exclude_list}; do 544 for i in ${minimal_exclude_list} ; do
237 myconf="${myconf} --without-${i}" 545 myconf="${myconf} --without-${i}"
238 done 546 done
239 myconf="${myconf} --without-berkeley-db" 547 myconf="${myconf} --without-berkeley-db"
240 myconf="${myconf} --with-extra-charsets=none" 548 myconf="${myconf} --with-extra-charsets=none"
241 fi 549 fi
242 550
243 if mysql_version_is_at_least "4.01.03.00" && useq extraengine; then 551 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
244 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html 552 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
245 myconf="${myconf} --with-archive-storage-engine" 553 myconf="${myconf} --with-archive-storage-engine"
554
246 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html 555 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
247
248 mysql_version_is_at_least "4.01.04.00" \
249 && myconf="${myconf} --with-csv-storage-engine" 556 myconf="${myconf} --with-csv-storage-engine"
250 557
251 mysql_version_is_at_least "4.01.11.00" \ 558 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
252 && myconf="${myconf} --with-blackhole-storage-engine" 559 myconf="${myconf} --with-blackhole-storage-engine"
253 560
561 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
254 # http://dev.mysql.com/doc/mysql/en/federated-description.html 562 # http://dev.mysql.com/doc/mysql/en/federated-description.html
255 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html 563 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
256 if mysql_version_is_at_least "5.00.03.00" ; then 564 if mysql_version_is_at_least "5.00.03.00" ; then
257 einfo "before to use federated engine be sure to read" 565 elog "Before using the Federated storage engine, please be sure to read"
258 einfo "http://dev.mysql.com/doc/refman/5.0/en/federated-limitations.html" 566 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
259 myconf="${myconf} --with-federated-storage-engine" 567 myconf="${myconf} --with-federated-storage-engine"
568 fi
260 569
261 # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html 570 # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
262 if mysql_version_is_at_least "5.01.00.00" ; then 571 if mysql_version_is_at_least "5.01.00.00" ; then
263 myconf="${myconf} --with-partition" 572 myconf="${myconf} --with-partition"
264 fi 573 fi
265 fi 574 fi
266 575
267 mysql_version_is_at_least "5.00.18.00" \ 576 mysql_version_is_at_least "5.00.18.00" \
268 && useq "max-idx-128" \ 577 && useq "max-idx-128" \
269 && myconf="${myconf} --with-max-indexes=128" 578 && myconf="${myconf} --with-max-indexes=128"
270 fi
271 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
590
272 #Bug #114895,Bug #110149 591 # Bug #114895, bug #110149
273 filter-flags "-O" "-O[01]" 592 filter-flags "-O" "-O[01]"
593
274 #glibc-2.3.2_pre fix; bug #16496 594 # glib-2.3.2_pre fix, bug #16496
275 append-flags "-DHAVE_ERRNO_AS_DEFINE=1" 595 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
276 596
277 #the compiler flags are as per their "official" spec ;) 597 append-flags "-fno-exceptions -fno-strict-aliasing"
278 #CFLAGS="${CFLAGS/-O?/} -O3" \
279 export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti" 598 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
280 mysql_version_is_at_least "5.00.00.00" \ 599 mysql_version_is_at_least "5.00.00.00" \
281 && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 600 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
601 export CXXFLAGS
282 602
283 econf \ 603 econf \
284 --program-suffix="${MY_SUFFIX}" \
285 --libexecdir="/usr/sbin" \ 604 --libexecdir="/usr/sbin" \
286 --sysconfdir="${MY_SYSCONFDIR}" \ 605 --sysconfdir="${MY_SYSCONFDIR}" \
287 --localstatedir="${MY_LOCALSTATEDIR}" \ 606 --localstatedir="${MY_LOCALSTATEDIR}" \
288 --sharedstatedir="${MY_SHAREDSTATEDIR}" \ 607 --sharedstatedir="${MY_SHAREDSTATEDIR}" \
289 --libdir="${MY_LIBDIR}" \ 608 --libdir="${MY_LIBDIR}" \
290 --includedir="${MY_INCLUDEDIR}" \ 609 --includedir="${MY_INCLUDEDIR}" \
291 --with-low-memory \ 610 --with-low-memory \
292 --enable-assembler \
293 --enable-local-infile \ 611 --enable-local-infile \
294 --with-mysqld-user=mysql \ 612 --with-mysqld-user=mysql \
295 --with-client-ldflags=-lstdc++ \ 613 --with-client-ldflags=-lstdc++ \
296 --enable-thread-safe-client \ 614 --enable-thread-safe-client \
297 --with-comment="Gentoo Linux ${PF}" \ 615 --with-comment="Gentoo Linux ${PF}" \
298 --with-unix-socket-path="/var/run/mysqld/mysqld${MY_SUFFIX}.sock" \ 616 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
299 --with-zlib-dir=/usr \
300 --with-lib-ccflags="-fPIC" \
301 --without-readline \ 617 --without-readline \
302 --without-docs \ 618 --without-docs \
303 ${myconf} || die "bad ./configure" 619 ${myconf} || die "econf failed"
304 620
305 # TODO Move this before autoreconf !!! 621 # TODO: Move this before autoreconf !!!
306 find . -name 'Makefile' \ 622 find . -type f -name Makefile -print0 \
307 -exec sed --in-place \ 623 | xargs -0 -n100 sed -i \
308 -e 's|^pkglibdir\s*=\s*$(libdir)/mysql|pkglibdir = $(libdir)|' \ 624 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
309 -e 's|^pkgincludedir\s*=\s*$(includedir)/mysql|pkgincludedir = $(includedir)|' \
310 {} \;
311 625
312 emake || die "compile problem" 626 emake || die "emake failed"
313} 627}
314 628
315mysql_src_install() { 629mysql_src_install() {
316 630 # Make sure the vars are correctly initialized
317 mysql_init_vars 631 mysql_init_vars
632
318 make install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die 633 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
319 634
320 insinto "${MY_INCLUDEDIR}" 635 insinto "${MY_INCLUDEDIR}"
321 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h 636 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
322 637
323 # convenience links 638 # Convenience links
324 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}" 639 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
325 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}" 640 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
326 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}" 641 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
327 642
328 # various junk (my-*.cnf moved elsewhere) 643 # Various junk (my-*.cnf moved elsewhere)
329 rm -rf "${D}/usr/share/info" 644 rm -Rf "${D}/usr/share/info"
330 for removeme in "mysql-log-rotate" mysql.server* \ 645 for removeme in "mysql-log-rotate" mysql.server* \
331 binary-configure* my-*.cnf mi_test_all* 646 binary-configure* my-*.cnf mi_test_all*
332 do 647 do
333 rm -f ${D}/usr/share/mysql/${removeme} 648 rm -f "${D}"/usr/share/mysql/${removeme}
334 done 649 done
335 650
336 # TODO change at Makefile-am level
337 for moveme in "mysql_fix_privilege_tables.sql" \
338 "fill_help_tables.sql" "ndb-config-2-node.ini"
339 do
340 mv -f "${D}/usr/share/mysql/${moveme}" "${D}/usr/share/mysql${MY_SUFFIX}/" 2>/dev/null
341 done
342
343 if [[ -n "${MY_SUFFIX}" ]] ; then
344 local notcatched=$(ls "${D}/usr/share/mysql"/*)
345 if [[ -n "${notcatched}" ]] ; then
346 ewarn "QA notice"
347 ewarn "${notcatched} files in /usr/share/mysql"
348 ewarn "bug mysql-herd to manage them"
349 fi
350 rm -rf "${D}/usr/share/mysql"
351 fi
352
353 # clean up stuff for a minimal build 651 # Clean up stuff for a minimal build
354 # this is anything server-specific
355 if useq minimal; then 652 if useq "minimal" ; then
356 rm -rf ${D}${MY_SHAREDSTATEDIR}/{mysql-test,sql-bench} 653 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
357 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} 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}
358 rm -f "${D}/usr/sbin/mysqld${MY_SUFFIX}" 655 rm -f "${D}/usr/sbin/mysqld"
359 rm -f ${D}${MY_LIBDIR}/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a 656 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
360 fi 657 fi
361 658
362 # config stuff 659 # Configuration stuff
660 if mysql_version_is_at_least "4.01.00.00" ; then
661 mysql_mycnf_version="4.1"
662 else
663 mysql_mycnf_version="4.0"
664 fi
363 insinto "${MY_SYSCONFDIR}" 665 insinto "${MY_SYSCONFDIR}"
364 doins scripts/mysqlaccess.conf 666 doins "scripts/mysqlaccess.conf"
667 sed -e "s!@DATADIR@!${DATADIR}!g" \
668 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
669 > "${TMPDIR}/my.cnf.ok"
670 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then
671 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
672 fi
365 newins "${FILESDIR}/my.cnf-4.1" my.cnf 673 newins "${TMPDIR}/my.cnf.ok" my.cnf
674
366 insinto "/etc/conf.d" 675 insinto "/etc/conf.d"
367 newins "${FILESDIR}/mysql-slot.conf.d-r2" "mysql" 676 newins "${FILESDIR}/mysql.conf.d" "mysql"
368 mysql_version_is_at_least "5.00.11.00" \ 677 mysql_version_is_at_least "5.00.11.00" \
369 && newins "${FILESDIR}/mysqlmanager-slot.conf.d" "mysqlmanager" 678 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
370 679
371 local charset='utf8'
372 ! useq utf8 && local charset='latin1'
373 sed --in-place \
374 -e "s/@MY_SUFFIX@/${MY_SUFFIX}/" \
375 -e "s/@CHARSET@/${charset}/" \
376 "${D}/etc/mysql${MY_SUFFIX}/my.cnf"
377
378 # minimal builds don't have the server 680 # Minimal builds don't have the MySQL server
379 if ! useq minimal; then 681 if ! useq "minimal" ; then
380 exeinto /etc/init.d 682 exeinto "/etc/init.d"
381 newexe "${FILESDIR}/mysql-slot.rc6-r2" "mysql" 683 newexe "${FILESDIR}/mysql.rc6" "mysql"
382 [[ ${SLOT} -gt 0 ]] && dosym "/etc/init.d/mysql" "/etc/init.d/mysql${MY_SUFFIX}"
383
384 mysql_version_is_at_least "5.00.11.00" \ 684 mysql_version_is_at_least "5.00.11.00" \
385 && newexe "${FILESDIR}/mysqlmanager-slot.rc6" "mysqlmanager" 685 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
686
386 insinto /etc/logrotate.d 687 insinto "/etc/logrotate.d"
387 # TODO
388 newins "${FILESDIR}/logrotate.mysql" "mysql${MY_SUFFIX}" 688 newins "${FILESDIR}/logrotate.mysql" "mysql"
389 689
390 #empty dirs... 690 # Empty directories ...
391 diropts "-m0750" 691 diropts "-m0750"
392 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then 692 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
393 dodir "${DATADIR}" 693 dodir "${DATADIR}"
394 keepdir "${DATADIR}" 694 keepdir "${DATADIR}"
395 chown -R mysql:mysql "${D}/${DATADIR}" 695 chown -R mysql:mysql "${D}/${DATADIR}"
401 keepdir "${folder}" 701 keepdir "${folder}"
402 chown -R mysql:mysql "${D}/${folder}" 702 chown -R mysql:mysql "${D}/${folder}"
403 done 703 done
404 fi 704 fi
405 705
406 # docs 706 # Docs
407 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE 707 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
708
408 # minimal builds don't have the server 709 # Minimal builds don't have the MySQL server
409 if ! useq minimal; then 710 if ! useq "minimal" ; then
410 docinto "support-files" 711 docinto "support-files"
411 for script in \ 712 for script in \
412 support-files/my-*.cnf \ 713 support-files/my-*.cnf \
413 support-files/magic \ 714 support-files/magic \
414 support-files/ndb-config-2-node.ini 715 support-files/ndb-config-2-node.ini
420 for script in scripts/mysql* ; do 721 for script in scripts/mysql* ; do
421 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 722 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
422 done 723 done
423 fi 724 fi
424 725
425 # oops, temporary fix 726 ROOT="${D}" mysql_lib_symlinks
426 mysql_check_version_range "5.00.16.00 to 5.00.18.99" \
427 && cp -f \
428 "${WORKDIR}/mysql-extras/fill_help_tables.sql-5.0" \
429 "${D}/usr/share/mysql${MY_SUFFIX}/fill_help_tables.sql"
430} 727}
431 728
432mysql_pkg_preinst() { 729mysql_pkg_preinst() {
433
434 enewgroup mysql 60 || die "problem adding group mysql" 730 enewgroup mysql 60 || die "problem adding 'mysql' group"
435 enewuser mysql 60 -1 /dev/null mysql \ 731 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
436 || die "problem adding user mysql"
437} 732}
438 733
439mysql_pkg_postinst() { 734mysql_pkg_postinst() {
440 735 # Make sure the vars are correctly initialized
441 mysql_init_vars 736 mysql_init_vars
442 mysql_lib_symlinks
443 737
444 # mind at FEATURES=collision-protect before to remove this 738 # Check FEATURES="collision-protect" before removing this
445 [ -d "${ROOT}/var/log/mysql" ] \ 739 [[ -d "${ROOT}/var/log/mysql" ]] \
446 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}" 740 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
447 741
448 #secure the logfiles... does this bother anybody? 742 # Secure the logfiles
449 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err} 743 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
450 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql* 744 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
451 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql* 745 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
452 746
453 # create a list of files, to be used
454 # by external utilities
455 # uncompressed because of the small size
456 local filelist="${ROOT}/var/lib/eselect/mysql/mysql${MY_SUFFIX}"
457 pushd "${D}/" &>/dev/null
458 mkdir -p "${ROOT}/var/lib/eselect/mysql/"
459 env -i find usr/bin/ usr/sbin/ usr/share/man \
460 -type f -name "*${MY_SUFFIX}*" \
461 -and -not -name "mysql_config${MY_SUFFIX}" \
462 > "${filelist}.filelist"
463 echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}.filelist"
464 echo "${MY_LIBDIR#"/"}" >> "${filelist}.filelist"
465 echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}.filelist"
466 popd &>/dev/null
467
468 if ! useq minimal; then 747 if ! useq "minimal" ; then
469 if [[ ${SLOT} -gt 0 ]] ; then
470 if [[ -f "${ROOT}/usr/sbin/mysqld" ]] ; then
471 einfo "you may want to run unmerge any unslotted MySQL versions with "
472 einfo "emerge -C --pretend dev-db/mysql"
473 einfo "emerge -C =dev-db/mysql-X.Y.Z"
474 einfo "After the unmerge run \"eselect myqsl list\" followed by a "
475 einfo "\"eselect myqsl set 1\" to chose the default mysql server"
476 else
477 local tmpres="$( eselect mysql show )"
478 # "like grep -q unset"
479 if [[ "{$tmpres}" == "{$tmpres/unset/}" ]] ; then
480 eselect mysql set 1
481 else
482 einfo "The version of mysql emerged now stils is _NOT_ the default"
483 einfo "you may want to run \"eselect myqsl list\" followed by a "
484 einfo "\"eselect myqsl set 1\" to chose the default mysql server"
485 fi
486 fi
487 fi
488
489 # your friendly public service announcement... 748 # Your friendly public service announcement ...
490 einfo 749 einfo
491 einfo "You might want to run:" 750 elog "You might want to run:"
492 einfo "\"emerge --config =${CATEGORY}/${PF}\"" 751 elog "\"emerge --config =${CATEGORY}/${PF}\""
493 einfo "if this is a new install." 752 elog "if this is a new install."
494 einfo 753 einfo
754 mysql_version_is_at_least "5.01.00.00" \
495 einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream." 755 || elog "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
496 fi 756 fi
757 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
758 && useq "berkdb" \
759 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
497} 760}
498 761
499mysql_pkg_config() { 762mysql_pkg_config() {
763 # Make sure the vars are correctly initialized
500 mysql_init_vars 764 mysql_init_vars
765
501 [[ -z "${DATADIR}" ]] && die "sorry, unable to find DATADIR" 766 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
502 767
503 if built_with_use dev-db/mysql minimal; then 768 if built_with_use dev-db/mysql minimal ; then
504 die "Minimal builds do NOT include the MySQL server" 769 die "Minimal builds do NOT include the MySQL server"
505 fi 770 fi
506 771
507 local pwd1="a" 772 local pwd1="a"
508 local pwd2="b" 773 local pwd2="b"
514 ewarn "Please rename or delete it if you wish to replace it." 779 ewarn "Please rename or delete it if you wish to replace it."
515 die "MySQL database already exists!" 780 die "MySQL database already exists!"
516 fi 781 fi
517 782
518 einfo "Creating the mysql database and setting proper" 783 einfo "Creating the mysql database and setting proper"
519 einfo "permissions on it..." 784 einfo "permissions on it ..."
520 785
521 einfo "Insert a password for the mysql 'root' user" 786 einfo "Insert a password for the mysql 'root' user"
522 ewarn "Avoid [\"'\\_%] characters in the password" 787 ewarn "Avoid [\"'\\_%] characters in the password"
523
524 read -rsp " >" pwd1 ; echo 788 read -rsp " >" pwd1 ; echo
789
525 einfo "Check the password" 790 einfo "Retype the password"
526 read -rsp " >" pwd2 ; echo 791 read -rsp " >" pwd2 ; echo
527 792
528 if [[ "x$pwd1" != "x$pwd2" ]] ; then 793 if [[ "x$pwd1" != "x$pwd2" ]] ; then
529 die "Passwords are not the same" 794 die "Passwords are not the same"
530 fi 795 fi
531 796
532 local options="" 797 local options=""
533 local sqltmp="$(emktemp)" 798 local sqltmp="$(emktemp)"
534 799
535 local help_tables="${ROOT}/usr/share/doc/mysql-${PVR}/scripts/fill_help_tables.sql.gz" 800 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
536 [[ -r "${help_tables}" ]] \ 801 [[ -r "${help_tables}" ]] \
537 && zcat "${help_tables}" > "${TMPDIR}/fill_help_tables.sql" \ 802 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
538 || touch "${TMPDIR}/fill_help_tables.sql" 803 || touch "${TMPDIR}/fill_help_tables.sql"
539 help_tables="${TMPDIR}/fill_help_tables.sql" 804 help_tables="${TMPDIR}/fill_help_tables.sql"
540 805
541 pushd "${TMPDIR}" &>/dev/null 806 pushd "${TMPDIR}" &>/dev/null
542 ${ROOT}/usr/bin/mysql_install_db${MY_SUFFIX} | grep -B5 -A999 -i "ERROR" 807 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
543 popd &>/dev/null 808 popd &>/dev/null
544 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] || die "MySQL databases not installed" 809 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
810 || die "MySQL databases not installed"
545 chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null 811 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
546 chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null 812 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
547 813
548 if mysql_version_is_at_least "4.01.03.00" ; then 814 if mysql_version_is_at_least "4.01.03.00" ; then
549 options="--skip-ndbcluster" 815 options="--skip-ndbcluster"
550 816
551 # Filling timezones, see 817 # Filling timezones, see
552 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 818 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
553 ${ROOT}/usr/bin/mysql_tzinfo_to_sql${MY_SUFFIX} ${ROOT}/usr/share/zoneinfo \ 819 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
554 > "${sqltmp}" 2>/dev/null
555 820
556 if [[ -r "${help_tables}" ]] ; then 821 if [[ -r "${help_tables}" ]] ; then
557 cat "${help_tables}" >> "${sqltmp}" 822 cat "${help_tables}" >> "${sqltmp}"
558 fi 823 fi
559 fi 824 fi
560 825
561 local socket=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.sock 826 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
562 local pidfile=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.sock 827 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
563 local mysqld="${ROOT}/usr/sbin/mysqld${MY_SUFFIX} \ 828 local mysqld="${ROOT}/usr/sbin/mysqld \
564 ${options} \ 829 ${options} \
565 --user=mysql \ 830 --user=mysql \
566 --skip-grant-tables \ 831 --skip-grant-tables \
567 --basedir=${ROOT}/usr \ 832 --basedir=${ROOT}/usr \
568 --datadir=${ROOT}/${DATADIR} \ 833 --datadir=${ROOT}/${DATADIR} \
571 --skip-networking \ 836 --skip-networking \
572 --max_allowed_packet=8M \ 837 --max_allowed_packet=8M \
573 --net_buffer_length=16K \ 838 --net_buffer_length=16K \
574 --socket=${socket} \ 839 --socket=${socket} \
575 --pid-file=${pidfile}" 840 --pid-file=${pidfile}"
576 $mysqld & 841 ${mysqld} &
577 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do 842 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
578 maxtry=$(($maxtry-1)) 843 maxtry=$((${maxtry}-1))
579 echo -n "." 844 echo -n "."
580 sleep 1 845 sleep 1
581 done 846 done
582 847
583 # do this from memory we don't want clear text password in temp files 848 # Do this from memory, as we don't want clear text passwords in temp files
584 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'" 849 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
585 ${ROOT}/usr/bin/mysql${MY_SUFFIX} \ 850 "${ROOT}/usr/bin/mysql" \
586 --socket=${socket} \ 851 --socket=${socket} \
587 -hlocalhost \ 852 -hlocalhost \
588 -e "${sql}" 853 -e "${sql}"
589 854
590 einfo "Loading \"zoneinfo\" this step may require few seconds" 855 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
591 856
592 ${ROOT}/usr/bin/mysql${MY_SUFFIX} \ 857 "${ROOT}/usr/bin/mysql" \
593 --socket=${socket} \ 858 --socket=${socket} \
594 -hlocalhost \ 859 -hlocalhost \
595 -uroot \ 860 -uroot \
596 -p"${pwd1}" \ 861 -p"${pwd1}" \
597 mysql < "${sqltmp}" 862 mysql < "${sqltmp}"
598 863
599 # server stop and cleanup 864 # Stop the server and cleanup
600 kill $(< "${pidfile}" ) 865 kill $(< "${pidfile}" )
601 rm "${sqltmp}" 866 rm -f "${sqltmp}"
602 einfo "stopping the server," 867 einfo "Stopping the server ..."
603 wait %1 868 wait %1
604 einfo "done" 869 einfo "Done"
605} 870}
606 871
607mysql_pkg_postrm() { 872mysql_pkg_postrm() {
608 mysql_lib_symlinks 873 mysql_lib_symlinks
609 if [[ ${SLOT} -gt 0 ]] ; then
610 einfo "you may want to run \"eselect myqsl list\" followed by a "
611 einfo "\"eselect myqsl list\" to chose the default mysql server"
612 fi
613} 874}

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

  ViewVC Help
Powered by ViewVC 1.1.20