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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.42 - (hide annotations) (download)
Sat Oct 21 14:32:21 2006 UTC (7 years, 5 months ago) by chtekk
Branch: MAIN
Changes since 1.41: +15 -172 lines
MySQL 5.1 support, configure splitup, cleanup, thanks to vivo!

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

  ViewVC Help
Powered by ViewVC 1.1.20