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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.50 - (hide annotations) (download)
Sat Dec 16 12:34:29 2006 UTC (7 years, 8 months ago) by chtekk
Branch: MAIN
Changes since 1.49: +9 -1 lines
Fix charset support with minimal build.

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

  ViewVC Help
Powered by ViewVC 1.1.20