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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.54 - (hide annotations) (download)
Wed Jan 3 13:42:05 2007 UTC (8 years, 8 months ago) by vivo
Branch: MAIN
Changes since 1.53: +94 -84 lines
apply some indentation to make next patch less invasive, still no functional changes

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

  ViewVC Help
Powered by ViewVC 1.1.20