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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.52 - (hide annotations) (download)
Fri Dec 29 20:49:14 2006 UTC (7 years, 8 months ago) by vivo
Branch: MAIN
Changes since 1.51: +2 -2 lines
removed "ftexample" storage engine in 5.1

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

  ViewVC Help
Powered by ViewVC 1.1.20