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

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

  ViewVC Help
Powered by ViewVC 1.1.20