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

Diff of /eclass/mysql.eclass

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

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

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

  ViewVC Help
Powered by ViewVC 1.1.20