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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.46 - (hide annotations) (download)
Sun Dec 10 01:11:47 2006 UTC (7 years, 9 months ago) by vivo
Branch: MAIN
Changes since 1.45: +10 -9 lines
added --enable-local-infile to minimal use flag

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

  ViewVC Help
Powered by ViewVC 1.1.20