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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.47 - (hide annotations) (download)
Sun Dec 10 02:33:30 2006 UTC (7 years, 10 months ago) by vivo
Branch: MAIN
Changes since 1.46: +8 -1 lines
oops, re-add static use flag when combined with minimal, thanks Scott Price

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.47 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.46 2006/12/10 01:11:47 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 vivo 1.46 # These are things we exclude from a minimal build, please
161     # note that the server actually does get built and installed,
162     # 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 vivo 1.37
165 vivo 1.46 for i in ${minimal_exclude_list} ; do
166     myconf="${myconf} --without-${i}"
167     done
168     myconf="${myconf} --with-extra-charsets=none"
169     myconf="${myconf} --enable-local-infile"
170 vivo 1.47
171     if useq "static" ; then
172     myconf="${myconf} --with-client-ldflags=-all-static"
173     myconf="${myconf} --disable-shared"
174     else
175     myconf="${myconf} --enable-shared --enable-static"
176     fi
177 vivo 1.37 }
178    
179     configure_common() {
180 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
181 vivo 1.37 myconf="${myconf} --enable-local-infile"
182     myconf="${myconf} --with-extra-charsets=all"
183     myconf="${myconf} --with-mysqld-user=mysql"
184 chtekk 1.39 myconf="${myconf} --with-server"
185 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
186 vivo 1.37 myconf="${myconf} --without-libwrap"
187 chtekk 1.39
188 vivo 1.37 if useq "static" ; then
189     myconf="${myconf} --with-mysqld-ldflags=-all-static"
190     myconf="${myconf} --with-client-ldflags=-all-static"
191     myconf="${myconf} --disable-shared"
192     else
193     myconf="${myconf} --enable-shared --enable-static"
194     fi
195    
196     if useq "debug" ; then
197     myconf="${myconf} --with-debug=full"
198     else
199     myconf="${myconf} --without-debug"
200     mysql_version_is_at_least "4.01.03.00" \
201     && useq "cluster" \
202     && myconf="${myconf} --without-ndb-debug"
203     fi
204 chtekk 1.39
205 vivo 1.37 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
206     myconf="${myconf} --with-charset=utf8"
207     myconf="${myconf} --with-collation=utf8_general_ci"
208     else
209     myconf="${myconf} --with-charset=latin1"
210     myconf="${myconf} --with-collation=latin1_swedish_ci"
211     fi
212 chtekk 1.39
213 vivo 1.37 if useq "embedded" ; then
214     myconf="${myconf} --with-embedded-privilege-control"
215     myconf="${myconf} --with-embedded-server"
216     else
217     myconf="${myconf} --without-embedded-privilege-control"
218     myconf="${myconf} --without-embedded-server"
219     fi
220    
221     }
222    
223     configure_40_41_50() {
224     myconf="${myconf} $(use_with perl bench)"
225     myconf="${myconf} --enable-assembler"
226     myconf="${myconf} --with-extra-tools"
227     myconf="${myconf} --with-innodb"
228     myconf="${myconf} --without-readline"
229 chtekk 1.38 mysql_version_is_at_least "5.00.00.00" || myconf="${myconf} $(use_with raid)"
230 vivo 1.37
231     if useq "ssl" ; then
232     # --with-vio is not needed anymore, it's on by default and
233     # has been removed from configure
234     mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
235     if mysql_version_is_at_least "5.00.06.00" ; then
236     # myconf="${myconf} --with-yassl"
237     myconf="${myconf} --with-openssl"
238     else
239     myconf="${myconf} --with-openssl"
240     fi
241     else
242     myconf="${myconf} --without-openssl"
243     fi
244    
245     # The following fix is due to a bug with bdb on SPARC's. See:
246     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
247     # It comes down to non-64-bit safety problems.
248     if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
249 chtekk 1.39 elog "Berkeley DB support was disabled due to incompatible arch"
250 vivo 1.37 myconf="${myconf} --without-berkeley-db"
251     else
252 chtekk 1.39 if useq "berkdb" ; then
253     myconf="${myconf} --with-berkeley-db=./bdb"
254     else
255     myconf="${myconf} --without-berkeley-db"
256     fi
257 vivo 1.37 fi
258    
259     if mysql_version_is_at_least "4.01.03.00" ; then
260     myconf="${myconf} --with-geometry"
261     myconf="${myconf} $(use_with cluster ndbcluster)"
262     fi
263    
264     if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
265     # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
266     myconf="${myconf} --with-archive-storage-engine"
267    
268     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
269     myconf="${myconf} --with-csv-storage-engine"
270    
271     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
272     myconf="${myconf} --with-blackhole-storage-engine"
273    
274     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
275     # http://dev.mysql.com/doc/mysql/en/federated-description.html
276     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
277     if mysql_version_is_at_least "5.00.03.00" ; then
278 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
279     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
280 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
281     fi
282     fi
283    
284     mysql_version_is_at_least "5.00.18.00" \
285     && useq "max-idx-128" \
286     && myconf="${myconf} --with-max-indexes=128"
287     }
288    
289 chtekk 1.39 configure_51() {
290 chtekk 1.40 # TODO: !!!! readd --without-readline
291 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
292 vivo 1.37 # readline.h instead of history.h
293     myconf="${myconf} $(use_with ssl)"
294     myconf="${myconf} --enable-assembler"
295     myconf="${myconf} --with-geometry"
296     myconf="${myconf} --with-readline"
297     myconf="${myconf} --with-row-based-replication"
298     myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
299     myconf="${myconf} --without-pstack"
300     useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
301 chtekk 1.39
302 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
303     # like configuration=none
304     local plugins="csv,myisam,myisammrg,heap"
305 chtekk 1.39 if useq "extraengine" ; then
306 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
307 chtekk 1.41 plugins="${plugins},archive,blackhole,example,federated,ftexample,partition"
308 vivo 1.37
309 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
310     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
311 vivo 1.37 fi
312    
313     if useq "innodb" ; then
314     plugins="${plugins},innobase"
315     fi
316    
317     # like configuration=max-no-ndb
318     if useq "cluster" ; then
319     plugins="${plugins},ndbcluster"
320     myconf="${myconf} --with-ndb-binlog"
321     fi
322    
323     myconf="${myconf} --with-plugins=${plugins}"
324     }
325    
326     #
327     # EBUILD FUNCTIONS
328     #
329    
330 vivo 1.1 mysql_pkg_setup() {
331 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
332     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
333 chtekk 1.39
334 vivo 1.37 if mysql_version_is_at_least "5.01.12.00" && useq "innodb" ; then
335 chtekk 1.39 eerror "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
336     die "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
337 vivo 1.37 fi
338 vivo 1.1
339 chtekk 1.30 # Check for USE flag problems in pkg_setup
340     if useq "static" && useq "ssl" ; then
341     eerror "MySQL does not support being built statically with SSL support enabled!"
342     die "MySQL does not support being built statically with SSL support enabled!"
343     fi
344 vivo 1.1
345 chtekk 1.30 if ! mysql_version_is_at_least "5.00.00.00" \
346     && useq "raid" \
347     && useq "static" ; then
348     eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
349     eerror "with RAID support enabled."
350     die "USE flags 'raid' and 'static' conflict!"
351 vivo 1.1 fi
352    
353     if mysql_version_is_at_least "4.01.03.00" \
354 chtekk 1.30 && ( useq "cluster" || useq "extraengine" ) \
355 vivo 1.26 && useq "minimal" ; then
356 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
357     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
358 vivo 1.1 fi
359 chtekk 1.39
360 chtekk 1.41 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
361     && useq "berkdb" \
362     && elog "Berkeley DB support is deprecated and will be removed in future versions!"
363 chtekk 1.30 }
364    
365     mysql_src_unpack() {
366     # Initialize the proper variables first
367     mysql_init_vars
368 vivo 1.1
369 chtekk 1.30 unpack ${A}
370 vivo 1.1
371 chtekk 1.39 mv -f "${WORKDIR}/${MY_P}${MYSQL_RERELEASE}" "${S}"
372 vivo 1.1 cd "${S}"
373    
374 chtekk 1.30 # Apply the patches for this MySQL version
375     if [[ -d "${WORKDIR}/${MY_FIXED_PV}" ]] ; then
376     EPATCH_SOURCE="${WORKDIR}/${MY_FIXED_PV}" EPATCH_SUFFIX="patch" epatch
377     fi
378 vivo 1.1
379 chtekk 1.30 # Additional checks, remove bundled zlib
380 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
381     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
382 chtekk 1.30 rm -f "scripts/mysqlbug"
383 vivo 1.1
384     # Make charsets install in the right place
385 vivo 1.37 find . -name 'Makefile.am' \
386     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
387 vivo 1.1
388     # Manage mysqlmanager
389     mysql_version_is_at_least "5.00.15.00" \
390 chtekk 1.39 && sed -i -e "s!@GENTOO_EXT@!!g" \
391 vivo 1.37 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
392     "${S}/server-tools/instance-manager/Makefile.am"
393 chtekk 1.30
394     if mysql_version_is_at_least "4.01.00.00" ; then
395     # Remove what needs to be recreated, so we're sure it's actually done
396     find . -name Makefile \
397     -o -name Makefile.in \
398     -o -name configure \
399     -exec rm -f {} \;
400     rm -f "ltmain.sh"
401 vivo 1.37 rm -f "scripts/mysqlbug"
402 chtekk 1.30 fi
403 vivo 1.1
404 chtekk 1.30 local rebuilddirlist bdbdir d
405 vivo 1.1
406 chtekk 1.42 if mysql_version_is_at_least "5.01.12.00" ; then
407     # TODO: innodb is using cmake now?
408     rebuilddirlist="."
409     bdbdir=''
410 vivo 1.1 else
411     rebuilddirlist=". innobase"
412     bdbdir='bdb/dist'
413     fi
414    
415 chtekk 1.30 for d in ${rebuilddirlist} ; do
416     einfo "Reconfiguring dir '${d}'"
417 vivo 1.4 pushd "${d}" &>/dev/null
418 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
419 vivo 1.4 popd &>/dev/null
420 vivo 1.1 done
421    
422 chtekk 1.41 if mysql_check_version_range "4.01.00.00 to 5.00.99.99" \
423     && useq "berkdb" ; then
424 chtekk 1.30 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh"
425 vivo 1.26 pushd "${bdbdir}" \
426 chtekk 1.30 && sh s_all \
427     || die "Failed bdb reconfigure" \
428     &>/dev/null
429 vivo 1.4 popd &>/dev/null
430 vivo 1.1 fi
431     }
432    
433 vivo 1.6 mysql_src_compile() {
434 chtekk 1.30 # Make sure the vars are correctly initialized
435     mysql_init_vars
436 vivo 1.1
437 chtekk 1.42 # $myconf is modified by the configure_* functions
438     local myconf=""
439 vivo 1.1
440 chtekk 1.42 if useq "minimal" ; then
441     configure_minimal
442 vivo 1.1 else
443 chtekk 1.42 configure_common
444     if mysql_version_is_at_least "5.01.10.00" ; then
445     configure_51
446 vivo 1.1 else
447 chtekk 1.42 configure_40_41_50
448 vivo 1.1 fi
449 vivo 1.23 fi
450    
451 chtekk 1.30 # Bug #114895, bug #110149
452 vivo 1.1 filter-flags "-O" "-O[01]"
453 chtekk 1.30
454     # glib-2.3.2_pre fix, bug #16496
455 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
456    
457 chtekk 1.34 append-flags "-fno-exceptions -fno-strict-aliasing"
458     CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
459 vivo 1.1 mysql_version_is_at_least "5.00.00.00" \
460 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
461 chtekk 1.39 export CXXFLAGS
462 vivo 1.1
463     econf \
464     --libexecdir="/usr/sbin" \
465     --sysconfdir="${MY_SYSCONFDIR}" \
466     --localstatedir="${MY_LOCALSTATEDIR}" \
467     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
468     --libdir="${MY_LIBDIR}" \
469     --includedir="${MY_INCLUDEDIR}" \
470     --with-low-memory \
471     --with-client-ldflags=-lstdc++ \
472     --enable-thread-safe-client \
473     --with-comment="Gentoo Linux ${PF}" \
474     --without-docs \
475 chtekk 1.39 ${myconf} || die "econf failed"
476 vivo 1.1
477 chtekk 1.30 # TODO: Move this before autoreconf !!!
478 vivo 1.21 find . -type f -name Makefile -print0 \
479     | xargs -0 -n100 sed -i \
480     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
481 vivo 1.1
482 chtekk 1.39 emake || die "emake failed"
483 vivo 1.1 }
484    
485     mysql_src_install() {
486 chtekk 1.30 # Make sure the vars are correctly initialized
487     mysql_init_vars
488 vivo 1.1
489 chtekk 1.39 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
490 vivo 1.1
491     insinto "${MY_INCLUDEDIR}"
492     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
493    
494 chtekk 1.30 # Convenience links
495 vivo 1.26 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
496     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
497     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
498 vivo 1.1
499 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
500     rm -Rf "${D}/usr/share/info"
501 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
502     binary-configure* my-*.cnf mi_test_all*
503     do
504 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
505 vivo 1.1 done
506    
507 chtekk 1.30 # Clean up stuff for a minimal build
508 vivo 1.26 if useq "minimal" ; then
509 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
510     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}
511 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
512 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
513 vivo 1.1 fi
514    
515 chtekk 1.30 # Configuration stuff
516     if mysql_version_is_at_least "4.01.00.00" ; then
517     mysql_mycnf_version="4.1"
518     else
519     mysql_mycnf_version="4.0"
520     fi
521 vivo 1.1 insinto "${MY_SYSCONFDIR}"
522 chtekk 1.30 doins "scripts/mysqlaccess.conf"
523     sed -e "s!@DATADIR@!${DATADIR}!g" \
524     "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
525 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
526 chtekk 1.30 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then
527     sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
528     fi
529 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
530    
531 vivo 1.1 insinto "/etc/conf.d"
532 chtekk 1.30 newins "${FILESDIR}/mysql.conf.d" "mysql"
533 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
534 vivo 1.25 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
535 vivo 1.1
536 chtekk 1.30 # Minimal builds don't have the MySQL server
537 vivo 1.26 if ! useq "minimal" ; then
538 chtekk 1.30 exeinto "/etc/init.d"
539     newexe "${FILESDIR}/mysql.rc6" "mysql"
540 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
541 vivo 1.25 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
542 chtekk 1.30
543     insinto "/etc/logrotate.d"
544 vivo 1.26 newins "${FILESDIR}/logrotate.mysql" "mysql"
545 vivo 1.1
546 chtekk 1.30 # Empty directories ...
547 vivo 1.1 diropts "-m0750"
548     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
549     dodir "${DATADIR}"
550     keepdir "${DATADIR}"
551     chown -R mysql:mysql "${D}/${DATADIR}"
552     fi
553    
554     diropts "-m0755"
555     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
556     dodir "${folder}"
557     keepdir "${folder}"
558     chown -R mysql:mysql "${D}/${folder}"
559     done
560     fi
561    
562 chtekk 1.30 # Docs
563 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
564 chtekk 1.30
565     # Minimal builds don't have the MySQL server
566 vivo 1.26 if ! useq "minimal" ; then
567 vivo 1.1 docinto "support-files"
568     for script in \
569     support-files/my-*.cnf \
570     support-files/magic \
571     support-files/ndb-config-2-node.ini
572     do
573     dodoc "${script}"
574     done
575    
576     docinto "scripts"
577 vivo 1.4 for script in scripts/mysql* ; do
578     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
579 vivo 1.1 done
580     fi
581 vivo 1.4
582 vivo 1.26 ROOT="${D}" mysql_lib_symlinks
583 vivo 1.15 }
584    
585     mysql_pkg_preinst() {
586 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
587     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
588 vivo 1.1 }
589    
590     mysql_pkg_postinst() {
591 chtekk 1.30 # Make sure the vars are correctly initialized
592 vivo 1.1 mysql_init_vars
593    
594 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
595 vivo 1.37 [[ -d "${ROOT}/var/log/mysql" ]] \
596     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
597 vivo 1.1
598 chtekk 1.30 # Secure the logfiles
599 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
600     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
601     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
602    
603 vivo 1.26 if ! useq "minimal" ; then
604 chtekk 1.30 # Your friendly public service announcement ...
605 vivo 1.1 einfo
606 chtekk 1.39 elog "You might want to run:"
607     elog "\"emerge --config =${CATEGORY}/${PF}\""
608     elog "if this is a new install."
609 vivo 1.1 einfo
610 vivo 1.21 mysql_version_is_at_least "5.01.00.00" \
611 chtekk 1.39 || elog "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
612 vivo 1.4 fi
613 chtekk 1.41 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
614     && useq "berkdb" \
615     && elog "Berkeley DB support is deprecated and will be removed in future versions!"
616 vivo 1.1 }
617    
618     mysql_pkg_config() {
619 chtekk 1.30 # Make sure the vars are correctly initialized
620 vivo 1.1 mysql_init_vars
621    
622 chtekk 1.30 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
623    
624     if built_with_use dev-db/mysql minimal ; then
625 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
626     fi
627    
628     local pwd1="a"
629     local pwd2="b"
630     local maxtry=5
631    
632     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
633     ewarn "You have already a MySQL database in place."
634     ewarn "(${ROOT}/${DATADIR}/*)"
635     ewarn "Please rename or delete it if you wish to replace it."
636     die "MySQL database already exists!"
637     fi
638    
639     einfo "Creating the mysql database and setting proper"
640 chtekk 1.30 einfo "permissions on it ..."
641 vivo 1.1
642     einfo "Insert a password for the mysql 'root' user"
643     ewarn "Avoid [\"'\\_%] characters in the password"
644 chtekk 1.30 read -rsp " >" pwd1 ; echo
645 vivo 1.1
646 chtekk 1.30 einfo "Retype the password"
647 vivo 1.1 read -rsp " >" pwd2 ; echo
648    
649     if [[ "x$pwd1" != "x$pwd2" ]] ; then
650     die "Passwords are not the same"
651     fi
652    
653     local options=""
654     local sqltmp="$(emktemp)"
655    
656 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
657 vivo 1.1 [[ -r "${help_tables}" ]] \
658 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
659 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
660     help_tables="${TMPDIR}/fill_help_tables.sql"
661    
662 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
663 chtekk 1.30 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
664 vivo 1.4 popd &>/dev/null
665 chtekk 1.30 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
666 vivo 1.26 || die "MySQL databases not installed"
667 chtekk 1.30 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
668     chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
669 vivo 1.1
670     if mysql_version_is_at_least "4.01.03.00" ; then
671     options="--skip-ndbcluster"
672    
673     # Filling timezones, see
674     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
675 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
676 vivo 1.1
677     if [[ -r "${help_tables}" ]] ; then
678     cat "${help_tables}" >> "${sqltmp}"
679     fi
680     fi
681    
682 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
683     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
684 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
685 vivo 1.1 ${options} \
686     --user=mysql \
687     --skip-grant-tables \
688     --basedir=${ROOT}/usr \
689     --datadir=${ROOT}/${DATADIR} \
690     --skip-innodb \
691     --skip-bdb \
692     --skip-networking \
693     --max_allowed_packet=8M \
694     --net_buffer_length=16K \
695     --socket=${socket} \
696     --pid-file=${pidfile}"
697 chtekk 1.30 ${mysqld} &
698 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
699 chtekk 1.30 maxtry=$((${maxtry}-1))
700 vivo 1.1 echo -n "."
701     sleep 1
702     done
703    
704 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
705 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
706 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
707 vivo 1.1 --socket=${socket} \
708     -hlocalhost \
709     -e "${sql}"
710    
711 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
712 vivo 1.1
713 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
714 vivo 1.1 --socket=${socket} \
715     -hlocalhost \
716     -uroot \
717     -p"${pwd1}" \
718     mysql < "${sqltmp}"
719    
720 chtekk 1.30 # Stop the server and cleanup
721 vivo 1.1 kill $(< "${pidfile}" )
722 chtekk 1.30 rm -f "${sqltmp}"
723     einfo "Stopping the server ..."
724 vivo 1.1 wait %1
725 chtekk 1.30 einfo "Done"
726 vivo 1.1 }
727    
728     mysql_pkg_postrm() {
729     mysql_lib_symlinks
730 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20