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

Diff of /eclass/mysql.eclass

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

Revision 1.8 Revision 1.26
1# Copyright 1999-2005 Gentoo Foundation 1# Copyright 1999-2005 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/Attic/mysql.eclass,v 1.8 2006/01/24 19:14:00 vivo Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/Attic/mysql.eclass,v 1.26 2006/03/17 20:17:53 vivo Exp $
4 4
5# Author: Francesco Riosa <vivo at gentoo.org> 5# Author: Francesco Riosa <vivo at gentoo.org>
6# Maintainer: Francesco Riosa <vivo at gentoo.org> 6# Maintainer: Francesco Riosa <vivo at gentoo.org>
7 7
8# MYSQL_VERSION_ID will be
9# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo magic number, all [0..99]
10# this is an important piece, becouse from this variable depends many of the
11# choices the ebuild will do.
12# in particular the code below work only with PVR like "5.0.18-r3"
13# the result with the previous PVR is "5001803"
14if [[ -z ${MYSQL_VERSION_ID} ]] ; then
15 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
16 for vatom in 0 1 2 3; do
17 # pad to lenght 2
18 tpv[${vatom}]="00${tpv[${vatom}]}"
19 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
20 done
21 # strip leading "0" (otherwise it's considered an octal number from bash)
22 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
23fi
24
25[[ -z ${MY_EXTRAS_VER} ]] && MY_EXTRAS_VER="20060316"
26
27DEPEND="${DEPEND}
28 >=sys-libs/readline-4.1
29 berkdb? ( sys-apps/ed )
30 ssl? ( >=dev-libs/openssl-0.9.6d )
31 userland_GNU? ( sys-process/procps )
32 >=sys-libs/zlib-1.2.3
33 >=sys-apps/texinfo-4.7-r1
34 >=sys-apps/sed-4"
35RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )"
36# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
37PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
38
8inherit eutils flag-o-matic gnuconfig 39inherit eutils flag-o-matic gnuconfig autotools mysql_fx
9 40
10#major, minor only in the slot 41SLOT=0
11SLOT=$(( ${MYSQL_VERSION_ID} / 10000 ))
12 42
13# shorten the path because the socket path length must be shorter than 107 chars 43# 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 44# and we will run a mysql server during test phase
15S="${WORKDIR}/${PN}" 45S="${WORKDIR}/${PN}"
16 46
17DESCRIPTION="A fast, multi-threaded, multi-user SQL database server" 47DESCRIPTION="A fast, multi-threaded, multi-user SQL database server"
18HOMEPAGE="http://www.mysql.com/" 48HOMEPAGE="http://www.mysql.com/"
19NEWP="${P/_/-}" 49NEWP="${P/_/-}"
20SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${NEWP}.tar.gz 50SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${NEWP}.tar.gz
21 mirror://gentoo/mysql-extras-20060115.tar.bz2" 51 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
22LICENSE="GPL-2" 52LICENSE="GPL-2"
23IUSE="big-tables berkdb debug minimal perl selinux srvdir ssl static" 53IUSE="big-tables berkdb debug embedded minimal perl selinux srvdir ssl static"
24RESTRICT="primaryuri confcache" 54RESTRICT="primaryuri confcache"
25DEPEND="app-admin/eselect-mysql"
26 55
27mysql_version_is_at_least "4.01.03.00" \ 56mysql_version_is_at_least "4.01.03.00" \
28&& IUSE="${IUSE} cluster extraengine" 57&& IUSE="${IUSE} cluster extraengine"
29 58
59mysql_version_is_at_least "5.00.00.00" \
60|| IUSE="${IUSE} raid"
61
30mysql_version_is_at_least "5.00.18.00" \ 62mysql_version_is_at_least "5.00.18.00" \
31&& IUSE="${IUSE} max-idx-128" 63&& IUSE="${IUSE} max-idx-128"
32 64
33mysql_version_is_at_least "5.01.00.00" \ 65mysql_version_is_at_least "5.01.00.00" \
34&& IUSE="${IUSE} innodb" 66&& IUSE="${IUSE} innodb"
35 67
36EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_config pkg_postrm 68EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
69 pkg_postinst pkg_config pkg_postrm
37 70
38# void mysql_init_vars() 71# void mysql_init_vars()
39# 72#
40# initialize global variables 73# initialize global variables
41# 2005-11-19 <vivo at gentoo.org> 74# 2005-11-19 <vivo at gentoo.org>
42mysql_init_vars() { 75mysql_init_vars() {
43 76
44 if [[ ${SLOT} -eq 0 ]] ; then
45 MY_SUFFIX=""
46 else
47 MY_SUFFIX=${MY_SUFFIX:-"-${SLOT}"}
48 fi
49 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR:-"/usr/share/mysql${MY_SUFFIX}"} 77 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR:-"/usr/share/mysql"}
50 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql${MY_SUFFIX}"} 78 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
51 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql${MY_SUFFIX}"} 79 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql$"}
52 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql${MY_SUFFIX}"} 80 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
53 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql${MY_SUFFIX}"} 81 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
54 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql${MY_SUFFIX}"} 82 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
55 83
56 if [ -z "${DATADIR}" ]; then 84 if [ -z "${DATADIR}" ]; then
57 DATADIR="" 85 DATADIR=""
58 if [ -f "${SYSCONFDIR}/my.cnf" ] ; then 86 if [ -f "${MY_SYSCONFDIR}/my.cnf" ] ; then
59 DATADIR=`"my_print_defaults${MY_SUFFIX}" mysqld 2>/dev/null | sed -ne '/datadir/s|^--datadir=||p' | tail -n1` 87 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
88 | sed -ne '/datadir/s|^--datadir=||p' \
89 | tail -n1`
60 if [ -z "${DATADIR}" ]; then 90 if [ -z "${DATADIR}" ]; then
61 if useq "srvdir" ; then 91 if useq "srvdir" ; then
62 DATADIR="/srv/localhost/mysql/datadir" 92 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
63 else 93 else
64 DATADIR=`grep ^datadir "${SYSCONFDIR}/my.cnf" | sed -e 's/.*=\s*//'` 94 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
95 | sed -e 's/.*=\s*//'`
65 fi 96 fi
66 fi 97 fi
67 fi 98 fi
68 if [ -z "${DATADIR}" ]; then 99 if [ -z "${DATADIR}" ]; then
100 if useq "srvdir" ; then
101 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
102 else
69 DATADIR="${MY_LOCALSTATEDIR}" 103 DATADIR="${MY_LOCALSTATEDIR}"
104 fi
70 einfo "Using default DATADIR" 105 einfo "Using default DATADIR"
71 fi 106 fi
72 einfo "MySQL DATADIR is ${DATADIR}" 107 einfo "MySQL DATADIR is ${DATADIR}"
73 108
74 if [ -z "${PREVIOUS_DATADIR}" ] ; then 109 if [ -z "${PREVIOUS_DATADIR}" ] ; then
82 export PREVIOUS_DATADIR 117 export PREVIOUS_DATADIR
83 fi 118 fi
84 fi 119 fi
85 fi 120 fi
86 121
87 export MY_SUFFIX MY_SHAREDSTATEDIR MY_SYSCONFDIR 122 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
88 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR 123 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
89 export MY_INCLUDEDIR 124 export MY_INCLUDEDIR
90 export DATADIR 125 export DATADIR
91} 126}
92 127
99 134
100mysql_src_unpack() { 135mysql_src_unpack() {
101 136
102 mysql_init_vars 137 mysql_init_vars
103 138
104 if useq static && useq ssl; then 139 if useq "static" && useq "ssl" ; then
105 local msg="MySQL does not support building statically with SSL support" 140 local msg="MySQL does not support building statically with SSL support"
106 eerror "${msg}" 141 eerror "${msg}"
107 die "${msg}" 142 die "${msg}"
108 fi 143 fi
109 144
110 if mysql_version_is_at_least "4.01.03.00" \ 145 if mysql_version_is_at_least "4.01.03.00" \
111 && useq cluster \ 146 && useq "cluster" \
112 || useq extraengine \ 147 || useq "extraengine" \
113 && useq minimal ; then 148 && useq "minimal" ; then
114 die "USEs cluster, extraengine conflicts with \"minimal\"" 149 die "USEs cluster, extraengine conflicts with \"minimal\""
115 fi 150 fi
116 151
117 unpack ${A} || die 152 unpack ${A} || die
118 153
127 # additional check, remove bundled zlib 162 # additional check, remove bundled zlib
128 rm -f "${S}/zlib/"*.[ch] 163 rm -f "${S}/zlib/"*.[ch]
129 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in" 164 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
130 rm -f scripts/mysqlbug 165 rm -f scripts/mysqlbug
131 166
132 # Multilib issue with zlib detection
133 mysql_version_is_at_least "5.00.15.00" \
134 && sed -i -e "s:zlib_dir/lib:zlib_dir/$(get_libdir):g" \
135 "${S}/config/ac-macros/zlib.m4"
136
137 # Make charsets install in the right place 167 # Make charsets install in the right place
138 find . -name 'Makefile.am' \ 168 find . -name 'Makefile.am' \
139 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \; 169 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
140 170
141 # Manage mysqlmanager 171 # Manage mysqlmanager
142 mysql_version_is_at_least "5.00.15.00" \ 172 mysql_version_is_at_least "5.00.15.00" \
143 && sed -i -e "s!@GENTOO_EXT@!${MY_SUFFIX}!g" \ 173 && sed -i -e "s!@GENTOO_EXT@!!g" \
144 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \ 174 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
145 "${S}/server-tools/instance-manager/Makefile.am" 175 "${S}/server-tools/instance-manager/Makefile.am"
146 176
147 # remove what need to be recreated, so we are sure it's actually done 177 # remove what need to be recreated, so we are sure it's actually done
148 find . -name Makefile -o -name Makefile.in -o -name configure -exec rm -f {} \; 178 find . -name Makefile \
179 -o -name Makefile.in \
180 -o -name configure \
181 -exec rm -f {} \;
149 rm ltmain.sh 182 rm ltmain.sh
150 183
151 local rebuilddirlist d buildstep bdbdir 184 local rebuilddirlist d buildstep bdbdir
152 185
153 if mysql_version_is_at_least "5.01.00.00" ; then 186 if mysql_version_is_at_least "5.01.00.00" ; then
159 fi 192 fi
160 193
161 for d in ${rebuilddirlist}; do 194 for d in ${rebuilddirlist}; do
162 einfo "reconfiguring dir \"${d}\"" 195 einfo "reconfiguring dir \"${d}\""
163 pushd "${d}" &>/dev/null 196 pushd "${d}" &>/dev/null
164 for buildstep in \ 197 AT_GNUCONF_UPDATE="yes" eautoreconf
165 'libtoolize --copy --force' \
166 'aclocal --force' \
167 'autoheader --force -Wnone' \
168 'autoconf --force -Wnone' \
169 'automake --force --force-missing -Wnone' \
170 'gnuconfig_update'
171 do
172 einfo "performing ${buildstep}"
173 ${buildstep} || die "failed ${buildstep/ */} dir \"${d}\""
174 done
175 popd &>/dev/null 198 popd &>/dev/null
176 done 199 done
177 200
201 #TODO berkdb in 5.1 need to be worked on
178 if useq berkdb && ! mysql_check_version_range "5.01.00.00 to 5.01.06.99" 202 if useq "berkdb" && ! mysql_check_version_range "5.01.00.00 to 5.01.08.99"
179 then 203 then
180 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f ltmain.sh "${bdbdir}/ltmain.sh" 204 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f ltmain.sh "${bdbdir}/ltmain.sh"
181 pushd "${bdbdir}" && sh s_all || die "failed bdb reconfigure" &>/dev/null 205 pushd "${bdbdir}" \
206 && sh s_all \
207 || die "failed bdb reconfigure" \
208 &>/dev/null
182 popd &>/dev/null 209 popd &>/dev/null
183 fi 210 fi
184 211
185} 212}
186 213
187mysql_src_compile() { 214mysql_src_compile() {
188 215
189 mysql_init_vars 216 mysql_init_vars
190 local myconf 217 local myconf
191 218
192 if useq static ; then 219 if useq "static" ; then
193 myconf="${myconf} --with-mysqld-ldflags=-all-static" 220 myconf="${myconf} --with-mysqld-ldflags=-all-static"
194 myconf="${myconf} --with-client-ldflags=-all-static" 221 myconf="${myconf} --with-client-ldflags=-all-static"
195 myconf="${myconf} --disable-shared" 222 myconf="${myconf} --disable-shared"
196 else 223 else
197 myconf="${myconf} --enable-shared --enable-static" 224 myconf="${myconf} --enable-shared --enable-static"
198 fi 225 fi
199 226
200 #myconf="${myconf} `use_with tcpd libwrap`" 227 #myconf="${myconf} `use_with tcpd libwrap`"
201 myconf="${myconf} --without-libwrap" 228 myconf="${myconf} --without-libwrap"
202 229
203 if useq ssl ; then 230 if useq "ssl" ; then
204 # --with-vio is not needed anymore, it's on by default and 231 # --with-vio is not needed anymore, it's on by default and
205 # has been removed from configure 232 # has been removed from configure
206 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio" 233 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
207 if mysql_version_is_at_least "5.00.06.00" ; then 234 if mysql_version_is_at_least "5.00.06.00" ; then
208 # yassl-0.96 is young break with gcc-4.0 || amd64 235 # yassl-0.96 is young break with gcc-4.0 || amd64
213 fi 240 fi
214 else 241 else
215 myconf="${myconf} --without-openssl" 242 myconf="${myconf} --without-openssl"
216 fi 243 fi
217 244
218 if useq debug; then 245 if useq "debug"; then
219 myconf="${myconf} --with-debug=full" 246 myconf="${myconf} --with-debug=full"
220 else 247 else
221 myconf="${myconf} --without-debug" 248 myconf="${myconf} --without-debug"
222 mysql_version_is_at_least "4.01.03.00" && useq cluster && myconf="${myconf} --without-ndb-debug" 249 mysql_version_is_at_least "4.01.03.00" \
223 fi 250 && useq "cluster" \
224
225 # benchmarking stuff needs perl
226 # and shouldn't be bothered with on minimal builds
227 if useq perl && ! useq minimal; then
228 myconf="${myconf} --with-bench"
229 else
230 myconf="${myconf} --without-bench" 251 && myconf="${myconf} --without-ndb-debug"
231 fi 252 fi
232 253
233 # these are things we exclude from a minimal build 254 # these are things we exclude from a minimal build
234 # note that the server actually does get built and installed 255 # note that the server actually does get built and installed
235 # but we then delete it before packaging. 256 # but we then delete it before packaging.
236 local minimal_exclude_list="server embedded-server extra-tools innodb" 257 local minimal_exclude_list="server embedded-server extra-tools innodb bench"
258
237 if ! useq minimal; then 259 if ! useq "minimal" ; then
238 for i in ${minimal_exclude_list}; do
239 myconf="${myconf} --with-${i}" 260 myconf="${myconf} --with-server"
240 done 261 myconf="${myconf} --with-extra-tools"
241 262
242 if useq static ; then 263 if useq "static" ; then
243 myconf="${myconf} --without-raid" 264 myconf="${myconf} --without-raid"
244 ewarn "disabling raid support, has problem with static" 265 ewarn "disabling raid support, has problem with static"
245 else 266 else
267 if mysql_version_is_at_least "5.00.00.00" ; then
246 myconf="${myconf} --with-raid" 268 myconf="${myconf} --without-raid"
269 else
270 myconf="${myconf} `use_with raid`"
271 fi
247 fi 272 fi
248 273
249 if ! mysql_version_is_at_least "5.00.00.00" ; then 274 if ! mysql_version_is_at_least "5.00.00.00" ; then
250 if mysql_version_is_at_least "4.01.00.00" ; then 275 if mysql_version_is_at_least "4.01.00.00" ; then
251 myconf="${myconf} --with-charset=utf8" 276 myconf="${myconf} --with-charset=utf8"
267 myconf="${myconf} --with-extra-charsets=all" 292 myconf="${myconf} --with-extra-charsets=all"
268 293
269 #The following fix is due to a bug with bdb on sparc's. See: 294 #The following fix is due to a bug with bdb on sparc's. See:
270 #http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8 295 #http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
271 # it comes down to non-64-bit safety problems 296 # it comes down to non-64-bit safety problems
272 if useq sparc || useq alpha || useq hppa || useq mips || useq amd64 \ 297 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" \
273 || mysql_check_version_range "5.01.00.00 to 5.01.06.99" 298 || useq "amd64" || mysql_check_version_range "5.01.00.00 to 5.01.06.99"
274 then 299 then
275 ewarn "bdb berkeley-db disabled due to arch or version" 300 ewarn "bdb berkeley-db disabled due to arch or version"
276 myconf="${myconf} --without-berkeley-db" 301 myconf="${myconf} --without-berkeley-db"
277 else 302 else
303 #TODO berkdb in 5.1 need to be worked on
278 useq berkdb \ 304 useq "berkdb" && \
305 ! mysql_check_version_range "5.01.00.00 to 5.01.08.99" \
279 && myconf="${myconf} --with-berkeley-db=./bdb" \ 306 && myconf="${myconf} --with-berkeley-db=./bdb" \
280 || myconf="${myconf} --without-berkeley-db" 307 || myconf="${myconf} --without-berkeley-db"
281 fi 308 fi
282 309
283 if mysql_version_is_at_least "4.01.03.00" ; then 310 if mysql_version_is_at_least "4.01.03.00" ; then
284 #myconf="${myconf} $(use_with geometry)" 311 #myconf="${myconf} $(use_with geometry)"
285 myconf="${myconf} --with-geometry" 312 myconf="${myconf} --with-geometry"
286 myconf="${myconf} $(use_with cluster ndbcluster)" 313 myconf="${myconf} $(use_with cluster ndbcluster)"
287 fi 314 fi
288 315
289 mysql_version_is_at_least "4.01.11.00" && myconf="${myconf} `use_with big-tables`" 316 mysql_version_is_at_least "4.01.11.00" \
317 && myconf="${myconf} `use_with big-tables`"
318
319 mysql_version_is_at_least "5.01.06.00" \
320 && myconf="${myconf} --with-ndb-binlog"
321
322 if useq "embedded" ; then
323 #REMIND, need the privilege control enabled ?
324 myconf="${myconf} --without-embedded-privilege-control"
325 myconf="${myconf} --with-embedded-server"
326 else
327 myconf="${myconf} --without-embedded-privilege-control"
328 myconf="${myconf} --without-embedded-server"
329 fi
330
331 # benchmarking stuff needs perl
332 if useq "perl" ; then
333 myconf="${myconf} --with-bench"
334 else
335 myconf="${myconf} --without-bench"
336 fi
290 else 337 else
291 for i in ${minimal_exclude_list}; do 338 for i in ${minimal_exclude_list}; do
292 myconf="${myconf} --without-${i}" 339 myconf="${myconf} --without-${i}"
293 done 340 done
294 myconf="${myconf} --without-berkeley-db" 341 myconf="${myconf} --without-berkeley-db"
295 myconf="${myconf} --with-extra-charsets=none" 342 myconf="${myconf} --with-extra-charsets=none"
296 fi 343 fi
297 344
298 if mysql_version_is_at_least "4.01.03.00" && useq extraengine; then 345 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine"; then
299 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html 346 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
300 myconf="${myconf} --with-archive-storage-engine" 347 myconf="${myconf} --with-archive-storage-engine"
301 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html 348 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
302 349
303 mysql_version_is_at_least "4.01.04.00" \ 350 mysql_version_is_at_least "4.01.04.00" \
327 374
328 if mysql_version_is_at_least "5.01.05.00" ; then 375 if mysql_version_is_at_least "5.01.05.00" ; then
329 myconf="${myconf} --with-row-based-replication" 376 myconf="${myconf} --with-row-based-replication"
330 fi 377 fi
331 378
379 #TODO rechek again later, had problem with assembler enabled
380 # and some combination of use-flags with 5.1
381 if mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then
382 myconf="${myconf} --disable-assembler"
383 else
384 myconf="${myconf} --enable-assembler"
385 fi
386
332 #Bug #114895,Bug #110149 387 #Bug #114895,Bug #110149
333 filter-flags "-O" "-O[01]" 388 filter-flags "-O" "-O[01]"
334 #glibc-2.3.2_pre fix; bug #16496 389 #glibc-2.3.2_pre fix; bug #16496
335 append-flags "-DHAVE_ERRNO_AS_DEFINE=1" 390 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
336 391
339 export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti" 394 export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti"
340 mysql_version_is_at_least "5.00.00.00" \ 395 mysql_version_is_at_least "5.00.00.00" \
341 && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates" 396 && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
342 397
343 econf \ 398 econf \
344 --program-suffix="${MY_SUFFIX}" \
345 --libexecdir="/usr/sbin" \ 399 --libexecdir="/usr/sbin" \
346 --sysconfdir="${MY_SYSCONFDIR}" \ 400 --sysconfdir="${MY_SYSCONFDIR}" \
347 --localstatedir="${MY_LOCALSTATEDIR}" \ 401 --localstatedir="${MY_LOCALSTATEDIR}" \
348 --sharedstatedir="${MY_SHAREDSTATEDIR}" \ 402 --sharedstatedir="${MY_SHAREDSTATEDIR}" \
349 --libdir="${MY_LIBDIR}" \ 403 --libdir="${MY_LIBDIR}" \
350 --includedir="${MY_INCLUDEDIR}" \ 404 --includedir="${MY_INCLUDEDIR}" \
351 --with-low-memory \ 405 --with-low-memory \
352 --enable-assembler \
353 --enable-local-infile \ 406 --enable-local-infile \
354 --with-mysqld-user=mysql \ 407 --with-mysqld-user=mysql \
355 --with-client-ldflags=-lstdc++ \ 408 --with-client-ldflags=-lstdc++ \
356 --enable-thread-safe-client \ 409 --enable-thread-safe-client \
357 --with-comment="Gentoo Linux ${PF}" \ 410 --with-comment="Gentoo Linux ${PF}" \
358 --with-unix-socket-path="/var/run/mysqld/mysqld${MY_SUFFIX}.sock" \ 411 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
359 --with-zlib-dir=/usr \
360 --with-lib-ccflags="-fPIC" \
361 --without-readline \ 412 --without-readline \
362 --without-docs \ 413 --without-docs \
363 ${myconf} || die "bad ./configure" 414 ${myconf} || die "bad ./configure"
364 415
365 # TODO Move this before autoreconf !!! 416 # TODO Move this before autoreconf !!!
366 find . -name 'Makefile' \ 417 find . -type f -name Makefile -print0 \
367 -exec sed --in-place \ 418 | xargs -0 -n100 sed -i \
368 -e 's|^pkglibdir\s*=\s*$(libdir)/mysql|pkglibdir = $(libdir)|' \ 419 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
369 -e 's|^pkgincludedir\s*=\s*$(includedir)/mysql|pkgincludedir = $(includedir)|' \
370 {} \;
371 420
372 emake || die "compile problem" 421 emake || die "compile problem"
373} 422}
374 423
375mysql_src_install() { 424mysql_src_install() {
379 428
380 insinto "${MY_INCLUDEDIR}" 429 insinto "${MY_INCLUDEDIR}"
381 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h 430 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
382 431
383 # convenience links 432 # convenience links
384 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}" 433 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
385 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}" 434 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
386 dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}" 435 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
387 436
388 # various junk (my-*.cnf moved elsewhere) 437 # various junk (my-*.cnf moved elsewhere)
389 rm -rf "${D}/usr/share/info" 438 rm -rf "${D}/usr/share/info"
390 for removeme in "mysql-log-rotate" mysql.server* \ 439 for removeme in "mysql-log-rotate" mysql.server* \
391 binary-configure* my-*.cnf mi_test_all* 440 binary-configure* my-*.cnf mi_test_all*
392 do 441 do
393 rm -f ${D}/usr/share/mysql/${removeme} 442 rm -f ${D}/usr/share/mysql/${removeme}
394 done 443 done
395 444
396 # TODO change at Makefile-am level
397 for moveme in "mysql_fix_privilege_tables.sql" \
398 "fill_help_tables.sql" "ndb-config-2-node.ini"
399 do
400 mv -f "${D}/usr/share/mysql/${moveme}" "${D}/usr/share/mysql${MY_SUFFIX}/" 2>/dev/null
401 done
402
403 if [[ -n "${MY_SUFFIX}" ]] ; then
404 local notcatched=$(ls "${D}/usr/share/mysql"/*)
405 if [[ -n "${notcatched}" ]] ; then
406 ewarn "QA notice"
407 ewarn "${notcatched} files in /usr/share/mysql"
408 ewarn "bug mysql-herd to manage them"
409 fi
410 rm -rf "${D}/usr/share/mysql"
411 fi
412
413 # clean up stuff for a minimal build 445 # clean up stuff for a minimal build
414 # this is anything server-specific 446 # this is anything server-specific
415 if useq minimal; then 447 if useq "minimal" ; then
416 rm -rf ${D}${MY_SHAREDSTATEDIR}/{mysql-test,sql-bench} 448 rm -rf ${D}${MY_SHAREDSTATEDIR}/{mysql-test,sql-bench}
417 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} 449 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}
418 rm -f "${D}/usr/sbin/mysqld${MY_SUFFIX}" 450 rm -f "${D}/usr/sbin/mysqld"
419 rm -f ${D}${MY_LIBDIR}/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a 451 rm -f ${D}${MY_LIBDIR}/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
420 fi 452 fi
421 453
422 # config stuff 454 # config stuff
423 insinto "${MY_SYSCONFDIR}" 455 insinto "${MY_SYSCONFDIR}"
424 doins scripts/mysqlaccess.conf 456 doins scripts/mysqlaccess.conf
457 sed -e "s!@MY_SUFFIX@!!g" \
458 -e "s!@DATADIR@!${DATADIR}!g" \
459 "${FILESDIR}/my.cnf-4.1-r1" \
460 > "${TMPDIR}/my.cnf.ok"
425 newins "${FILESDIR}/my.cnf-4.1-r1" my.cnf 461 newins "${TMPDIR}/my.cnf.ok" my.cnf
462
426 insinto "/etc/conf.d" 463 insinto "/etc/conf.d"
427 newins "${FILESDIR}/mysql-slot.conf.d-r2" "mysql" 464 newins "${FILESDIR}/mysql.conf.d-r1" "mysql"
428 mysql_version_is_at_least "5.00.11.00" \ 465 mysql_version_is_at_least "5.00.11.00" \
429 && newins "${FILESDIR}/mysqlmanager-slot.conf.d" "mysqlmanager" 466 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
430
431 sed --in-place \
432 -e "s/@MY_SUFFIX@/${MY_SUFFIX}/" \
433 -e "s/@DATADIR@/${DATADIR}/" \
434 "${D}/etc/mysql${MY_SUFFIX}/my.cnf"
435 467
436 # minimal builds don't have the server 468 # minimal builds don't have the server
437 if ! useq minimal; then 469 if ! useq "minimal" ; then
438 exeinto /etc/init.d 470 exeinto /etc/init.d
439 newexe "${FILESDIR}/mysql-slot.rc6-r2" "mysql" 471 newexe "${FILESDIR}/mysql.rc6-r3" "mysql"
440 [[ ${SLOT} -gt 0 ]] && dosym "/etc/init.d/mysql" "/etc/init.d/mysql${MY_SUFFIX}"
441 472
442 mysql_version_is_at_least "5.00.11.00" \ 473 mysql_version_is_at_least "5.00.11.00" \
443 && newexe "${FILESDIR}/mysqlmanager-slot.rc6" "mysqlmanager" 474 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
444 insinto /etc/logrotate.d 475 insinto /etc/logrotate.d
445 sed -e "s!___MY_SUFFIX___!${MY_SUFFIX}!" \
446 "${FILESDIR}/logrotate-slot.mysql" \
447 > "${TMPDIR}/logrotate.mysql"
448 newins "${TMPDIR}/logrotate.mysql" "mysql${MY_SUFFIX}" 476 newins "${FILESDIR}/logrotate.mysql" "mysql"
449 477
450 #empty dirs... 478 #empty dirs...
451 diropts "-m0750" 479 diropts "-m0750"
452 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then 480 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
453 dodir "${DATADIR}" 481 dodir "${DATADIR}"
464 fi 492 fi
465 493
466 # docs 494 # docs
467 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE 495 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
468 # minimal builds don't have the server 496 # minimal builds don't have the server
469 if ! useq minimal; then 497 if ! useq "minimal" ; then
470 docinto "support-files" 498 docinto "support-files"
471 for script in \ 499 for script in \
472 support-files/my-*.cnf \ 500 support-files/my-*.cnf \
473 support-files/magic \ 501 support-files/magic \
474 support-files/ndb-config-2-node.ini 502 support-files/ndb-config-2-node.ini
480 for script in scripts/mysql* ; do 508 for script in scripts/mysql* ; do
481 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 509 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
482 done 510 done
483 fi 511 fi
484 512
485 # oops, temporary fix 513 ROOT="${D}" mysql_lib_symlinks
486 mysql_check_version_range "5.00.16.00 to 5.00.18.99" \
487 && cp -f \
488 "${WORKDIR}/mysql-extras/fill_help_tables.sql-5.0" \
489 "${D}/usr/share/mysql${MY_SUFFIX}/fill_help_tables.sql"
490} 514}
491 515
492mysql_pkg_preinst() { 516mysql_pkg_preinst() {
493 517
494 enewgroup mysql 60 || die "problem adding group mysql" 518 enewgroup mysql 60 || die "problem adding group mysql"
497} 521}
498 522
499mysql_pkg_postinst() { 523mysql_pkg_postinst() {
500 524
501 mysql_init_vars 525 mysql_init_vars
502 mysql_lib_symlinks
503 526
504 # mind at FEATURES=collision-protect before to remove this 527 # mind at FEATURES=collision-protect before to remove this
505 [ -d "${ROOT}/var/log/mysql" ] \ 528 [ -d "${ROOT}/var/log/mysql" ] \
506 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}" 529 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
507 530
508 #secure the logfiles... does this bother anybody? 531 #secure the logfiles... does this bother anybody?
509 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err} 532 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
510 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql* 533 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
511 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql* 534 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
512 535
513 # create a list of files, to be used
514 # by external utilities
515 # uncompressed because of the small size
516 local filelist="${ROOT}/var/lib/eselect/mysql/mysql${MY_SUFFIX}"
517 pushd "${D}/" &>/dev/null
518 mkdir -p "${ROOT}/var/lib/eselect/mysql/"
519 env -i find usr/bin/ usr/sbin/ usr/share/man \
520 -type f -name "*${MY_SUFFIX}*" \
521 -and -not -name "mysql_config${MY_SUFFIX}" \
522 > "${filelist}.filelist"
523 echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}.filelist"
524 echo "${MY_LIBDIR#"/"}" >> "${filelist}.filelist"
525 echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}.filelist"
526 popd &>/dev/null
527
528 if ! useq minimal; then 536 if ! useq "minimal" ; then
529 if [[ ${SLOT} -gt 0 ]] ; then
530 if [[ -f "${ROOT}/usr/sbin/mysqld" ]] ; then
531 einfo "you may want to run unmerge any unslotted MySQL versions with "
532 einfo "emerge -C --pretend dev-db/mysql"
533 einfo "emerge -C =dev-db/mysql-X.Y.Z"
534 einfo "After the unmerge run \"eselect myqsl list\" followed by a "
535 einfo "\"eselect myqsl set 1\" to chose the default mysql server"
536 else
537 local tmpres="$( eselect mysql show )"
538 # "like grep -q unset"
539 if [[ "{$tmpres}" == "{$tmpres/unset/}" ]] ; then
540 eselect mysql set 1
541 else
542 einfo "The version of mysql emerged now stils is _NOT_ the default"
543 einfo "you may want to run \"eselect myqsl list\" followed by a "
544 einfo "\"eselect myqsl set 1\" to chose the default mysql server"
545 fi
546 fi
547 fi
548
549 # your friendly public service announcement... 537 # your friendly public service announcement...
550 einfo 538 einfo
551 einfo "You might want to run:" 539 einfo "You might want to run:"
552 einfo "\"emerge --config =${CATEGORY}/${PF}\"" 540 einfo "\"emerge --config =${CATEGORY}/${PF}\""
553 einfo "if this is a new install." 541 einfo "if this is a new install."
554 einfo 542 einfo
543 mysql_version_is_at_least "5.01.00.00" \
555 einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream." 544 || einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream."
556 fi 545 fi
557} 546}
558 547
559mysql_pkg_config() { 548mysql_pkg_config() {
560 mysql_init_vars 549 mysql_init_vars
597 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \ 586 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
598 || touch "${TMPDIR}/fill_help_tables.sql" 587 || touch "${TMPDIR}/fill_help_tables.sql"
599 help_tables="${TMPDIR}/fill_help_tables.sql" 588 help_tables="${TMPDIR}/fill_help_tables.sql"
600 589
601 pushd "${TMPDIR}" &>/dev/null 590 pushd "${TMPDIR}" &>/dev/null
602 ${ROOT}/usr/bin/mysql_install_db${MY_SUFFIX} | grep -B5 -A999 -i "ERROR" 591 ${ROOT}/usr/bin/mysql_install_db | grep -B5 -A999 -i "ERROR"
603 popd &>/dev/null 592 popd &>/dev/null
604 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] || die "MySQL databases not installed" 593 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] \
594 || die "MySQL databases not installed"
605 chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null 595 chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null
606 chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null 596 chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null
607 597
608 if mysql_version_is_at_least "4.01.03.00" ; then 598 if mysql_version_is_at_least "4.01.03.00" ; then
609 options="--skip-ndbcluster" 599 options="--skip-ndbcluster"
610 600
611 # Filling timezones, see 601 # Filling timezones, see
612 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 602 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
613 ${ROOT}/usr/bin/mysql_tzinfo_to_sql${MY_SUFFIX} ${ROOT}/usr/share/zoneinfo \ 603 ${ROOT}/usr/bin/mysql_tzinfo_to_sql ${ROOT}/usr/share/zoneinfo \
614 > "${sqltmp}" 2>/dev/null 604 > "${sqltmp}" 2>/dev/null
615 605
616 if [[ -r "${help_tables}" ]] ; then 606 if [[ -r "${help_tables}" ]] ; then
617 cat "${help_tables}" >> "${sqltmp}" 607 cat "${help_tables}" >> "${sqltmp}"
618 fi 608 fi
619 fi 609 fi
620 610
621 local socket=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.sock 611 local socket=${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock
622 local pidfile=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.sock 612 local pidfile=${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid
623 local mysqld="${ROOT}/usr/sbin/mysqld${MY_SUFFIX} \ 613 local mysqld="${ROOT}/usr/sbin/mysqld \
624 ${options} \ 614 ${options} \
625 --user=mysql \ 615 --user=mysql \
626 --skip-grant-tables \ 616 --skip-grant-tables \
627 --basedir=${ROOT}/usr \ 617 --basedir=${ROOT}/usr \
628 --datadir=${ROOT}/${DATADIR} \ 618 --datadir=${ROOT}/${DATADIR} \
640 sleep 1 630 sleep 1
641 done 631 done
642 632
643 # do this from memory we don't want clear text password in temp files 633 # do this from memory we don't want clear text password in temp files
644 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'" 634 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
645 ${ROOT}/usr/bin/mysql${MY_SUFFIX} \ 635 ${ROOT}/usr/bin/mysql \
646 --socket=${socket} \ 636 --socket=${socket} \
647 -hlocalhost \ 637 -hlocalhost \
648 -e "${sql}" 638 -e "${sql}"
649 639
650 einfo "Loading \"zoneinfo\" this step may require few seconds" 640 einfo "Loading \"zoneinfo\" this step may require few seconds"
651 641
652 ${ROOT}/usr/bin/mysql${MY_SUFFIX} \ 642 ${ROOT}/usr/bin/mysql \
653 --socket=${socket} \ 643 --socket=${socket} \
654 -hlocalhost \ 644 -hlocalhost \
655 -uroot \ 645 -uroot \
656 -p"${pwd1}" \ 646 -p"${pwd1}" \
657 mysql < "${sqltmp}" 647 mysql < "${sqltmp}"
664 einfo "done" 654 einfo "done"
665} 655}
666 656
667mysql_pkg_postrm() { 657mysql_pkg_postrm() {
668 mysql_lib_symlinks 658 mysql_lib_symlinks
669 if [[ ${SLOT} -gt 0 ]] ; then
670 einfo "you may want to run \"eselect myqsl list\" followed by a "
671 einfo "\"eselect myqsl list\" to chose the default mysql server"
672 fi
673} 659}

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.26

  ViewVC Help
Powered by ViewVC 1.1.20