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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.45 - (hide annotations) (download)
Sat Dec 9 22:35:13 2006 UTC (7 years, 9 months ago) by vivo
Branch: MAIN
Changes since 1.44: +3 -3 lines
forked SRC_URIs

1 chtekk 1.30 # Copyright 1999-2006 Gentoo Foundation
2 vivo 1.1 # Distributed under the terms of the GNU General Public License v2
3 vivo 1.45 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.44 2006/11/23 13:52:28 vivo Exp $
4 vivo 1.1
5 chtekk 1.30 # Author: Francesco Riosa <vivo@gentoo.org>
6     # Maintainer: Luca Longinotti <chtekk@gentoo.org>
7 vivo 1.1
8 chtekk 1.30 # 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    
17     if [[ -z "${MYSQL_VERSION_ID}" ]] ; then
18 vivo 1.26 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
19 chtekk 1.30 for vatom in 0 1 2 3 ; do
20     # pad to length 2
21 vivo 1.26 tpv[${vatom}]="00${tpv[${vatom}]}"
22     MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
23     done
24 chtekk 1.30 # strip leading "0" (otherwise it's considered an octal number by BASH)
25 vivo 1.26 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
26     fi
27    
28 chtekk 1.41 inherit eutils flag-o-matic gnuconfig autotools mysql_fx
29    
30     # Be warned, *DEPEND are version-dependant
31     DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
32 chtekk 1.30 userland_GNU? ( sys-process/procps )
33 chtekk 1.41 >=sys-apps/sed-4
34 chtekk 1.30 >=sys-apps/texinfo-4.7-r1
35 chtekk 1.41 >=sys-libs/readline-4.1
36     >=sys-libs/zlib-1.2.3"
37    
38 vivo 1.44 # LEAVE THE SURROUNDING SPACES THERE
39     MYSQL_MUTUALLY_EXCLUSIVE=" !dev-db/mysql !dev-db/mysql-community "
40     DEPEND="${DEPEND} ${MYSQL_MUTUALLY_EXCLUSIVE/ !${CATEGORY}\/${PN} /}"
41    
42 chtekk 1.41 mysql_version_is_at_least "5.01.00.00" \
43     || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
44 vivo 1.26
45     RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )"
46 chtekk 1.30
47 vivo 1.26 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
48     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
49    
50 chtekk 1.30 # Shorten the path because the socket path length must be shorter than 107 chars
51 vivo 1.1 # and we will run a mysql server during test phase
52 vivo 1.44 S="${WORKDIR}/mysql" # BitKeeper ebuilds
53 vivo 1.1
54 chtekk 1.30 # Define $MY_FIXED_PV for MySQL patchsets
55     MY_FIXED_PV="${PV/_alpha/}"
56 vivo 1.37 #MY_FIXED_PV="${MY_FIXED_PV/_beta/}"
57     #MY_FIXED_PV="${MY_FIXED_PV/_rc/}"
58 chtekk 1.30
59 chtekk 1.39 MY_P="${P/_/-}"
60 chtekk 1.42 MY_P="${MY_P/-alpha/-bk-}" # BitKeeper ebuilds
61 vivo 1.44 MY_P="${MY_P/-community/}"
62 chtekk 1.39
63 chtekk 1.30 # Define correct SRC_URIs
64 vivo 1.45 SRC_URI="${BASE_URI}/${MY_P}${MYSQL_RERELEASE}.tar.gz"
65 chtekk 1.32 if [[ -n "${MYSQL_PATCHSET_REV}" ]] ; then
66 robbat2 1.31 MYSQL_PATCHSET_FILENAME="${PN}-patchset-${MY_FIXED_PV}-r${MYSQL_PATCHSET_REV}.tar.bz2"
67 chtekk 1.32 # We add the Gentoo mirror here, as we only use primaryuri for the MySQL tarball
68 vivo 1.45 SRC_URI="${SRC_URI} http://g3nt8.org/patches/${MYSQL_PATCHSET_FILENAME}"
69 robbat2 1.31 fi
70 chtekk 1.30
71     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
72 vivo 1.1 HOMEPAGE="http://www.mysql.com/"
73 chtekk 1.30 SLOT="0"
74 vivo 1.1 LICENSE="GPL-2"
75 chtekk 1.39 IUSE="big-tables debug embedded minimal perl selinux srvdir ssl static"
76 chtekk 1.35 RESTRICT="confcache"
77 vivo 1.1
78 chtekk 1.30 mysql_version_is_at_least "4.01.00.00" \
79     && IUSE="${IUSE} latin1"
80    
81 vivo 1.1 mysql_version_is_at_least "4.01.03.00" \
82 vivo 1.8 && IUSE="${IUSE} cluster extraengine"
83 vivo 1.1
84 vivo 1.21 mysql_version_is_at_least "5.00.00.00" \
85     || IUSE="${IUSE} raid"
86    
87 vivo 1.1 mysql_version_is_at_least "5.00.18.00" \
88     && IUSE="${IUSE} max-idx-128"
89    
90     mysql_version_is_at_least "5.01.00.00" \
91     && IUSE="${IUSE} innodb"
92    
93 chtekk 1.39 mysql_version_is_at_least "5.01.00.00" \
94     || IUSE="${IUSE} berkdb"
95    
96 vivo 1.26 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
97 swegener 1.36 pkg_postinst pkg_config pkg_postrm
98 vivo 1.1
99 vivo 1.37 #
100     # HELPER FUNCTIONS:
101     #
102    
103 vivo 1.8 # void mysql_init_vars()
104     #
105 chtekk 1.30 # Initialize global variables
106     # 2005-11-19 <vivo@gentoo.org>
107    
108 vivo 1.8 mysql_init_vars() {
109 chtekk 1.30 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
110 vivo 1.26 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
111 chtekk 1.29 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
112 vivo 1.26 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
113     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
114     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
115 vivo 1.8
116 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
117 vivo 1.8 DATADIR=""
118 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
119 vivo 1.26 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
120     | sed -ne '/datadir/s|^--datadir=||p' \
121     | tail -n1`
122 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
123 vivo 1.8 if useq "srvdir" ; then
124 vivo 1.26 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
125 vivo 1.8 else
126 vivo 1.26 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
127     | sed -e 's/.*=\s*//'`
128 vivo 1.8 fi
129     fi
130     fi
131 chtekk 1.30 if [[ -z "${DATADIR}" ]] ; then
132 vivo 1.17 if useq "srvdir" ; then
133 vivo 1.26 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
134 vivo 1.17 else
135     DATADIR="${MY_LOCALSTATEDIR}"
136     fi
137 vivo 1.8 einfo "Using default DATADIR"
138     fi
139 chtekk 1.39 elog "MySQL DATADIR is ${DATADIR}"
140 vivo 1.8
141 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
142     if [[ -e "${DATADIR}" ]] ; then
143 chtekk 1.39 elog "Previous datadir found, it's YOUR job to change"
144     elog "ownership and take care of it"
145 vivo 1.8 PREVIOUS_DATADIR="yes"
146     else
147     PREVIOUS_DATADIR="no"
148     fi
149 chtekk 1.30 export PREVIOUS_DATADIR
150 vivo 1.8 fi
151     fi
152    
153 vivo 1.26 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
154 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
155     export MY_INCLUDEDIR
156     export DATADIR
157     }
158    
159 vivo 1.37 configure_minimal() {
160 chtekk 1.39 # These are things we exclude from a minimal build, please
161     # note that the server actually does get built and installed,
162 vivo 1.37 # but we then delete it before packaging.
163     local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication"
164    
165 chtekk 1.39 for i in ${minimal_exclude_list} ; do
166 vivo 1.37 myconf="${myconf} --without-${i}"
167     done
168     myconf="${myconf} --with-extra-charsets=none"
169     }
170    
171     configure_common() {
172 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
173 vivo 1.37 myconf="${myconf} --enable-local-infile"
174     myconf="${myconf} --with-extra-charsets=all"
175     myconf="${myconf} --with-mysqld-user=mysql"
176 chtekk 1.39 myconf="${myconf} --with-server"
177 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
178 vivo 1.37 myconf="${myconf} --without-libwrap"
179 chtekk 1.39
180 vivo 1.37 if useq "static" ; then
181     myconf="${myconf} --with-mysqld-ldflags=-all-static"
182     myconf="${myconf} --with-client-ldflags=-all-static"
183     myconf="${myconf} --disable-shared"
184     else
185     myconf="${myconf} --enable-shared --enable-static"
186     fi
187    
188     if useq "debug" ; then
189     myconf="${myconf} --with-debug=full"
190     else
191     myconf="${myconf} --without-debug"
192     mysql_version_is_at_least "4.01.03.00" \
193     && useq "cluster" \
194     && myconf="${myconf} --without-ndb-debug"
195     fi
196 chtekk 1.39
197 vivo 1.37 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
198     myconf="${myconf} --with-charset=utf8"
199     myconf="${myconf} --with-collation=utf8_general_ci"
200     else
201     myconf="${myconf} --with-charset=latin1"
202     myconf="${myconf} --with-collation=latin1_swedish_ci"
203     fi
204 chtekk 1.39
205 vivo 1.37 if useq "embedded" ; then
206     myconf="${myconf} --with-embedded-privilege-control"
207     myconf="${myconf} --with-embedded-server"
208     else
209     myconf="${myconf} --without-embedded-privilege-control"
210     myconf="${myconf} --without-embedded-server"
211     fi
212    
213     }
214    
215     configure_40_41_50() {
216     myconf="${myconf} $(use_with perl bench)"
217     myconf="${myconf} --enable-assembler"
218     myconf="${myconf} --with-extra-tools"
219     myconf="${myconf} --with-innodb"
220     myconf="${myconf} --without-readline"
221 chtekk 1.38 mysql_version_is_at_least "5.00.00.00" || myconf="${myconf} $(use_with raid)"
222 vivo 1.37
223     if useq "ssl" ; then
224     # --with-vio is not needed anymore, it's on by default and
225     # has been removed from configure
226     mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
227     if mysql_version_is_at_least "5.00.06.00" ; then
228     # myconf="${myconf} --with-yassl"
229     myconf="${myconf} --with-openssl"
230     else
231     myconf="${myconf} --with-openssl"
232     fi
233     else
234     myconf="${myconf} --without-openssl"
235     fi
236    
237     # The following fix is due to a bug with bdb on SPARC's. See:
238     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
239     # It comes down to non-64-bit safety problems.
240     if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
241 chtekk 1.39 elog "Berkeley DB support was disabled due to incompatible arch"
242 vivo 1.37 myconf="${myconf} --without-berkeley-db"
243     else
244 chtekk 1.39 if useq "berkdb" ; then
245     myconf="${myconf} --with-berkeley-db=./bdb"
246     else
247     myconf="${myconf} --without-berkeley-db"
248     fi
249 vivo 1.37 fi
250    
251     if mysql_version_is_at_least "4.01.03.00" ; then
252     myconf="${myconf} --with-geometry"
253     myconf="${myconf} $(use_with cluster ndbcluster)"
254     fi
255    
256     if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
257     # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
258     myconf="${myconf} --with-archive-storage-engine"
259    
260     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
261     myconf="${myconf} --with-csv-storage-engine"
262    
263     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
264     myconf="${myconf} --with-blackhole-storage-engine"
265    
266     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
267     # http://dev.mysql.com/doc/mysql/en/federated-description.html
268     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
269     if mysql_version_is_at_least "5.00.03.00" ; then
270 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
271     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
272 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
273     fi
274     fi
275    
276     mysql_version_is_at_least "5.00.18.00" \
277     && useq "max-idx-128" \
278     && myconf="${myconf} --with-max-indexes=128"
279     }
280    
281 chtekk 1.39 configure_51() {
282 chtekk 1.40 # TODO: !!!! readd --without-readline
283 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
284 vivo 1.37 # readline.h instead of history.h
285     myconf="${myconf} $(use_with ssl)"
286     myconf="${myconf} --enable-assembler"
287     myconf="${myconf} --with-geometry"
288     myconf="${myconf} --with-readline"
289     myconf="${myconf} --with-row-based-replication"
290     myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
291     myconf="${myconf} --without-pstack"
292     useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
293 chtekk 1.39
294 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
295     # like configuration=none
296     local plugins="csv,myisam,myisammrg,heap"
297 chtekk 1.39 if useq "extraengine" ; then
298 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
299 chtekk 1.41 plugins="${plugins},archive,blackhole,example,federated,ftexample,partition"
300 vivo 1.37
301 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
302     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
303 vivo 1.37 fi
304    
305     if useq "innodb" ; then
306     plugins="${plugins},innobase"
307     fi
308    
309     # like configuration=max-no-ndb
310     if useq "cluster" ; then
311     plugins="${plugins},ndbcluster"
312     myconf="${myconf} --with-ndb-binlog"
313     fi
314    
315     myconf="${myconf} --with-plugins=${plugins}"
316     }
317    
318     #
319     # EBUILD FUNCTIONS
320     #
321    
322 vivo 1.1 mysql_pkg_setup() {
323 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
324     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
325 chtekk 1.39
326 vivo 1.37 if mysql_version_is_at_least "5.01.12.00" && useq "innodb" ; then
327 chtekk 1.39 eerror "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
328     die "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
329 vivo 1.37 fi
330 vivo 1.1
331 chtekk 1.30 # Check for USE flag problems in pkg_setup
332     if useq "static" && useq "ssl" ; then
333     eerror "MySQL does not support being built statically with SSL support enabled!"
334     die "MySQL does not support being built statically with SSL support enabled!"
335     fi
336 vivo 1.1
337 chtekk 1.30 if ! mysql_version_is_at_least "5.00.00.00" \
338     && useq "raid" \
339     && useq "static" ; then
340     eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
341     eerror "with RAID support enabled."
342     die "USE flags 'raid' and 'static' conflict!"
343 vivo 1.1 fi
344    
345     if mysql_version_is_at_least "4.01.03.00" \
346 chtekk 1.30 && ( useq "cluster" || useq "extraengine" ) \
347 vivo 1.26 && useq "minimal" ; then
348 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
349     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
350 vivo 1.1 fi
351 chtekk 1.39
352 chtekk 1.41 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
353     && useq "berkdb" \
354     && elog "Berkeley DB support is deprecated and will be removed in future versions!"
355 chtekk 1.30 }
356    
357     mysql_src_unpack() {
358     # Initialize the proper variables first
359     mysql_init_vars
360 vivo 1.1
361 chtekk 1.30 unpack ${A}
362 vivo 1.1
363 chtekk 1.39 mv -f "${WORKDIR}/${MY_P}${MYSQL_RERELEASE}" "${S}"
364 vivo 1.1 cd "${S}"
365    
366 chtekk 1.30 # Apply the patches for this MySQL version
367     if [[ -d "${WORKDIR}/${MY_FIXED_PV}" ]] ; then
368     EPATCH_SOURCE="${WORKDIR}/${MY_FIXED_PV}" EPATCH_SUFFIX="patch" epatch
369     fi
370 vivo 1.1
371 chtekk 1.30 # Additional checks, remove bundled zlib
372 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
373     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
374 chtekk 1.30 rm -f "scripts/mysqlbug"
375 vivo 1.1
376     # Make charsets install in the right place
377 vivo 1.37 find . -name 'Makefile.am' \
378     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
379 vivo 1.1
380     # Manage mysqlmanager
381     mysql_version_is_at_least "5.00.15.00" \
382 chtekk 1.39 && sed -i -e "s!@GENTOO_EXT@!!g" \
383 vivo 1.37 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
384     "${S}/server-tools/instance-manager/Makefile.am"
385 chtekk 1.30
386     if mysql_version_is_at_least "4.01.00.00" ; then
387     # Remove what needs to be recreated, so we're sure it's actually done
388     find . -name Makefile \
389     -o -name Makefile.in \
390     -o -name configure \
391     -exec rm -f {} \;
392     rm -f "ltmain.sh"
393 vivo 1.37 rm -f "scripts/mysqlbug"
394 chtekk 1.30 fi
395 vivo 1.1
396 chtekk 1.30 local rebuilddirlist bdbdir d
397 vivo 1.1
398 chtekk 1.42 if mysql_version_is_at_least "5.01.12.00" ; then
399     # TODO: innodb is using cmake now?
400     rebuilddirlist="."
401     bdbdir=''
402 vivo 1.1 else
403     rebuilddirlist=". innobase"
404     bdbdir='bdb/dist'
405     fi
406    
407 chtekk 1.30 for d in ${rebuilddirlist} ; do
408     einfo "Reconfiguring dir '${d}'"
409 vivo 1.4 pushd "${d}" &>/dev/null
410 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
411 vivo 1.4 popd &>/dev/null
412 vivo 1.1 done
413    
414 chtekk 1.41 if mysql_check_version_range "4.01.00.00 to 5.00.99.99" \
415     && useq "berkdb" ; then
416 chtekk 1.30 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh"
417 vivo 1.26 pushd "${bdbdir}" \
418 chtekk 1.30 && sh s_all \
419     || die "Failed bdb reconfigure" \
420     &>/dev/null
421 vivo 1.4 popd &>/dev/null
422 vivo 1.1 fi
423     }
424    
425 vivo 1.6 mysql_src_compile() {
426 chtekk 1.30 # Make sure the vars are correctly initialized
427     mysql_init_vars
428 vivo 1.1
429 chtekk 1.42 # $myconf is modified by the configure_* functions
430     local myconf=""
431 vivo 1.1
432 chtekk 1.42 if useq "minimal" ; then
433     configure_minimal
434 vivo 1.1 else
435 chtekk 1.42 configure_common
436     if mysql_version_is_at_least "5.01.10.00" ; then
437     configure_51
438 vivo 1.1 else
439 chtekk 1.42 configure_40_41_50
440 vivo 1.1 fi
441 vivo 1.23 fi
442    
443 chtekk 1.30 # Bug #114895, bug #110149
444 vivo 1.1 filter-flags "-O" "-O[01]"
445 chtekk 1.30
446     # glib-2.3.2_pre fix, bug #16496
447 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
448    
449 chtekk 1.34 append-flags "-fno-exceptions -fno-strict-aliasing"
450     CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
451 vivo 1.1 mysql_version_is_at_least "5.00.00.00" \
452 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
453 chtekk 1.39 export CXXFLAGS
454 vivo 1.1
455     econf \
456     --libexecdir="/usr/sbin" \
457     --sysconfdir="${MY_SYSCONFDIR}" \
458     --localstatedir="${MY_LOCALSTATEDIR}" \
459     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
460     --libdir="${MY_LIBDIR}" \
461     --includedir="${MY_INCLUDEDIR}" \
462     --with-low-memory \
463     --with-client-ldflags=-lstdc++ \
464     --enable-thread-safe-client \
465     --with-comment="Gentoo Linux ${PF}" \
466     --without-docs \
467 chtekk 1.39 ${myconf} || die "econf failed"
468 vivo 1.1
469 chtekk 1.30 # TODO: Move this before autoreconf !!!
470 vivo 1.21 find . -type f -name Makefile -print0 \
471     | xargs -0 -n100 sed -i \
472     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
473 vivo 1.1
474 chtekk 1.39 emake || die "emake failed"
475 vivo 1.1 }
476    
477     mysql_src_install() {
478 chtekk 1.30 # Make sure the vars are correctly initialized
479     mysql_init_vars
480 vivo 1.1
481 chtekk 1.39 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
482 vivo 1.1
483     insinto "${MY_INCLUDEDIR}"
484     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
485    
486 chtekk 1.30 # Convenience links
487 vivo 1.26 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
488     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
489     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
490 vivo 1.1
491 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
492     rm -Rf "${D}/usr/share/info"
493 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
494     binary-configure* my-*.cnf mi_test_all*
495     do
496 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
497 vivo 1.1 done
498    
499 chtekk 1.30 # Clean up stuff for a minimal build
500 vivo 1.26 if useq "minimal" ; then
501 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
502     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}
503 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
504 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
505 vivo 1.1 fi
506    
507 chtekk 1.30 # Configuration stuff
508     if mysql_version_is_at_least "4.01.00.00" ; then
509     mysql_mycnf_version="4.1"
510     else
511     mysql_mycnf_version="4.0"
512     fi
513 vivo 1.1 insinto "${MY_SYSCONFDIR}"
514 chtekk 1.30 doins "scripts/mysqlaccess.conf"
515     sed -e "s!@DATADIR@!${DATADIR}!g" \
516     "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
517 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
518 chtekk 1.30 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then
519     sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
520     fi
521 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
522    
523 vivo 1.1 insinto "/etc/conf.d"
524 chtekk 1.30 newins "${FILESDIR}/mysql.conf.d" "mysql"
525 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
526 vivo 1.25 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
527 vivo 1.1
528 chtekk 1.30 # Minimal builds don't have the MySQL server
529 vivo 1.26 if ! useq "minimal" ; then
530 chtekk 1.30 exeinto "/etc/init.d"
531     newexe "${FILESDIR}/mysql.rc6" "mysql"
532 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
533 vivo 1.25 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
534 chtekk 1.30
535     insinto "/etc/logrotate.d"
536 vivo 1.26 newins "${FILESDIR}/logrotate.mysql" "mysql"
537 vivo 1.1
538 chtekk 1.30 # Empty directories ...
539 vivo 1.1 diropts "-m0750"
540     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
541     dodir "${DATADIR}"
542     keepdir "${DATADIR}"
543     chown -R mysql:mysql "${D}/${DATADIR}"
544     fi
545    
546     diropts "-m0755"
547     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
548     dodir "${folder}"
549     keepdir "${folder}"
550     chown -R mysql:mysql "${D}/${folder}"
551     done
552     fi
553    
554 chtekk 1.30 # Docs
555 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
556 chtekk 1.30
557     # Minimal builds don't have the MySQL server
558 vivo 1.26 if ! useq "minimal" ; then
559 vivo 1.1 docinto "support-files"
560     for script in \
561     support-files/my-*.cnf \
562     support-files/magic \
563     support-files/ndb-config-2-node.ini
564     do
565     dodoc "${script}"
566     done
567    
568     docinto "scripts"
569 vivo 1.4 for script in scripts/mysql* ; do
570     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
571 vivo 1.1 done
572     fi
573 vivo 1.4
574 vivo 1.26 ROOT="${D}" mysql_lib_symlinks
575 vivo 1.15 }
576    
577     mysql_pkg_preinst() {
578 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
579     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
580 vivo 1.1 }
581    
582     mysql_pkg_postinst() {
583 chtekk 1.30 # Make sure the vars are correctly initialized
584 vivo 1.1 mysql_init_vars
585    
586 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
587 vivo 1.37 [[ -d "${ROOT}/var/log/mysql" ]] \
588     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
589 vivo 1.1
590 chtekk 1.30 # Secure the logfiles
591 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
592     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
593     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
594    
595 vivo 1.26 if ! useq "minimal" ; then
596 chtekk 1.30 # Your friendly public service announcement ...
597 vivo 1.1 einfo
598 chtekk 1.39 elog "You might want to run:"
599     elog "\"emerge --config =${CATEGORY}/${PF}\""
600     elog "if this is a new install."
601 vivo 1.1 einfo
602 vivo 1.21 mysql_version_is_at_least "5.01.00.00" \
603 chtekk 1.39 || elog "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
604 vivo 1.4 fi
605 chtekk 1.41 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
606     && useq "berkdb" \
607     && elog "Berkeley DB support is deprecated and will be removed in future versions!"
608 vivo 1.1 }
609    
610     mysql_pkg_config() {
611 chtekk 1.30 # Make sure the vars are correctly initialized
612 vivo 1.1 mysql_init_vars
613    
614 chtekk 1.30 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
615    
616     if built_with_use dev-db/mysql minimal ; then
617 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
618     fi
619    
620     local pwd1="a"
621     local pwd2="b"
622     local maxtry=5
623    
624     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
625     ewarn "You have already a MySQL database in place."
626     ewarn "(${ROOT}/${DATADIR}/*)"
627     ewarn "Please rename or delete it if you wish to replace it."
628     die "MySQL database already exists!"
629     fi
630    
631     einfo "Creating the mysql database and setting proper"
632 chtekk 1.30 einfo "permissions on it ..."
633 vivo 1.1
634     einfo "Insert a password for the mysql 'root' user"
635     ewarn "Avoid [\"'\\_%] characters in the password"
636 chtekk 1.30 read -rsp " >" pwd1 ; echo
637 vivo 1.1
638 chtekk 1.30 einfo "Retype the password"
639 vivo 1.1 read -rsp " >" pwd2 ; echo
640    
641     if [[ "x$pwd1" != "x$pwd2" ]] ; then
642     die "Passwords are not the same"
643     fi
644    
645     local options=""
646     local sqltmp="$(emktemp)"
647    
648 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
649 vivo 1.1 [[ -r "${help_tables}" ]] \
650 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
651 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
652     help_tables="${TMPDIR}/fill_help_tables.sql"
653    
654 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
655 chtekk 1.30 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
656 vivo 1.4 popd &>/dev/null
657 chtekk 1.30 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
658 vivo 1.26 || die "MySQL databases not installed"
659 chtekk 1.30 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
660     chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
661 vivo 1.1
662     if mysql_version_is_at_least "4.01.03.00" ; then
663     options="--skip-ndbcluster"
664    
665     # Filling timezones, see
666     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
667 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
668 vivo 1.1
669     if [[ -r "${help_tables}" ]] ; then
670     cat "${help_tables}" >> "${sqltmp}"
671     fi
672     fi
673    
674 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
675     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
676 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
677 vivo 1.1 ${options} \
678     --user=mysql \
679     --skip-grant-tables \
680     --basedir=${ROOT}/usr \
681     --datadir=${ROOT}/${DATADIR} \
682     --skip-innodb \
683     --skip-bdb \
684     --skip-networking \
685     --max_allowed_packet=8M \
686     --net_buffer_length=16K \
687     --socket=${socket} \
688     --pid-file=${pidfile}"
689 chtekk 1.30 ${mysqld} &
690 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
691 chtekk 1.30 maxtry=$((${maxtry}-1))
692 vivo 1.1 echo -n "."
693     sleep 1
694     done
695    
696 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
697 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
698 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
699 vivo 1.1 --socket=${socket} \
700     -hlocalhost \
701     -e "${sql}"
702    
703 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
704 vivo 1.1
705 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
706 vivo 1.1 --socket=${socket} \
707     -hlocalhost \
708     -uroot \
709     -p"${pwd1}" \
710     mysql < "${sqltmp}"
711    
712 chtekk 1.30 # Stop the server and cleanup
713 vivo 1.1 kill $(< "${pidfile}" )
714 chtekk 1.30 rm -f "${sqltmp}"
715     einfo "Stopping the server ..."
716 vivo 1.1 wait %1
717 chtekk 1.30 einfo "Done"
718 vivo 1.1 }
719    
720     mysql_pkg_postrm() {
721     mysql_lib_symlinks
722 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20