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

Contents of /eclass/mysql-v2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.37 - (show annotations) (download)
Sun Mar 8 09:39:55 2015 UTC (6 weeks, 6 days ago) by ulm
Branch: MAIN
CVS Tags: HEAD
Changes since 1.36: +5 -2 lines
Add conditional bindist restriction, bug 541486.

1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql-v2.eclass,v 1.36 2015/02/16 14:37:50 grknight Exp $
4
5 # @ECLASS: mysql-v2.eclass
6 # @MAINTAINER:
7 # Maintainers:
8 # - MySQL Team <mysql-bugs@gentoo.org>
9 # - Robin H. Johnson <robbat2@gentoo.org>
10 # - Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
11 # - Brian Evans <grknight@gentoo.org>
12 # @BLURB: This eclass provides most of the functions for mysql ebuilds
13 # @DESCRIPTION:
14 # The mysql-v2.eclass is the base eclass to build the mysql and
15 # alternative projects (mariadb and percona) ebuilds.
16 # This eclass uses the mysql-autotools and mysql-cmake eclasses for the
17 # specific bits related to the build system.
18 # It provides the src_unpack, src_prepare, src_configure, src_compile,
19 # src_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
20 # phase hooks.
21
22 # @ECLASS-VARIABLE: BUILD
23 # @DESCRIPTION:
24 # Build type of the mysql version
25 : ${BUILD:=autotools}
26
27 case ${BUILD} in
28 "cmake")
29 BUILD_INHERIT="mysql-cmake"
30 ;;
31 "autotools")
32 BUILD_INHERIT="mysql-autotools"
33
34 WANT_AUTOCONF="latest"
35 WANT_AUTOMAKE="latest"
36 ;;
37 *)
38 die "${BUILD} is not a valid build system for mysql"
39 ;;
40 esac
41
42 MYSQL_EXTRAS=""
43
44 # @ECLASS-VARIABLE: MYSQL_EXTRAS_VER
45 # @DESCRIPTION:
46 # The version of the MYSQL_EXTRAS repo to use to build mysql
47 # Use "none" to disable it's use
48 [[ ${MY_EXTRAS_VER} == "live" ]] && MYSQL_EXTRAS="git-r3"
49
50 inherit eutils flag-o-matic gnuconfig ${MYSQL_EXTRAS} ${BUILD_INHERIT} mysql_fx versionator toolchain-funcs user
51
52 #
53 # Supported EAPI versions and export functions
54 #
55
56 case "${EAPI:-0}" in
57 4|5) ;;
58 *) die "Unsupported EAPI: ${EAPI}" ;;
59 esac
60
61 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_preinst pkg_postinst pkg_config pkg_postrm
62
63 #
64 # VARIABLES:
65 #
66
67 # Shorten the path because the socket path length must be shorter than 107 chars
68 # and we will run a mysql server during test phase
69 S="${WORKDIR}/mysql"
70
71 [[ ${MY_EXTRAS_VER} == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
72 if [[ ${MY_EXTRAS_VER} == "live" ]]; then
73 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
74 EGIT_CHECKOUT_DIR=${WORKDIR}/mysql-extras
75 EGIT_CLONE_TYPE=shallow
76 fi
77
78 # @ECLASS-VARIABLE: MYSQL_PV_MAJOR
79 # @DESCRIPTION:
80 # Upstream MySQL considers the first two parts of the version number to be the
81 # major version. Upgrades that change major version should always run
82 # mysql_upgrade.
83 MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
84
85 # Cluster is a special case...
86 if [[ ${PN} == "mysql-cluster" ]]; then
87 case ${PV} in
88 6.1*|7.0*|7.1*) MYSQL_PV_MAJOR=5.1 ;;
89 7.2*) MYSQL_PV_MAJOR=5.5 ;;
90 7.3*) MYSQL_PV_MAJOR=5.6 ;;
91 esac
92 fi
93
94 # MariaDB has left the numbering schema but keeping compatibility
95 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]]; then
96 case ${PV} in
97 10.0*|10.1*) MYSQL_PV_MAJOR="5.6" ;;
98 esac
99 fi
100
101 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
102 # @DESCRIPTION:
103 # MYSQL_VERSION_ID will be:
104 # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
105 # This is an important part, because many of the choices the MySQL ebuild will do
106 # depend on this variable.
107 # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
108 # We also strip off upstream's trailing letter that they use to respin tarballs
109 MYSQL_VERSION_ID=""
110 tpv="${PV%[a-z]}"
111 tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
112 for vatom in 0 1 2 3 ; do
113 # pad to length 2
114 tpv[${vatom}]="00${tpv[${vatom}]}"
115 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
116 done
117 # strip leading "0" (otherwise it's considered an octal number by BASH)
118 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
119
120 # This eclass should only be used with at least mysql-5.1.50
121 mysql_version_is_at_least "5.1.50" || die "This eclass should only be used with >=mysql-5.1.50"
122
123 # @ECLASS-VARIABLE: XTRADB_VER
124 # @DEFAULT_UNSET
125 # @DESCRIPTION:
126 # Version of the XTRADB storage engine
127
128 # @ECLASS-VARIABLE: PERCONA_VER
129 # @DEFAULT_UNSET
130 # @DESCRIPTION:
131 # Designation by PERCONA for a MySQL version to apply an XTRADB release
132
133 # Work out the default SERVER_URI correctly
134 if [[ -z ${SERVER_URI} ]]; then
135 [[ -z ${MY_PV} ]] && MY_PV="${PV//_/-}"
136 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]]; then
137 # Beginning with 5.5, MariaDB stopped putting beta, alpha or rc on their tarball names
138 mysql_version_is_at_least "5.5" && MARIA_FULL_PV=$(get_version_component_range 1-3) || \
139 MARIA_FULL_PV=$(replace_version_separator 3 '-' ${MY_PV})
140 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
141 SERVER_URI="
142 http://ftp.osuosl.org/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
143 http://ftp.osuosl.org/pub/mariadb/${MARIA_FULL_P}/source/${MARIA_FULL_P}.tar.gz
144 http://mirror.jmu.edu/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
145 http://mirrors.coreix.net/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
146 http://mirrors.syringanetworks.net/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
147 http://mirrors.fe.up.pt/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
148 http://mirror2.hs-esslingen.de/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
149 "
150 if [[ ${PN} == "mariadb-galera" ]]; then
151 MY_SOURCEDIR="${PN%%-galera}-${MARIA_FULL_PV}"
152 fi
153 elif [[ ${PN} == "percona-server" ]]; then
154 PERCONA_PN="Percona-Server"
155 MIRROR_PV=$(get_version_component_range 1-2 ${PV})
156 MY_PV=$(get_version_component_range 1-3 ${PV})
157 PERCONA_RELEASE=$(get_version_component_range 4-5 ${PV})
158 PERCONA_RC=$(get_version_component_range 6 ${PV})
159 SERVER_URI="http://www.percona.com/redir/downloads/${PERCONA_PN}-${MIRROR_PV}/${PERCONA_PN}-${MY_PV}-${PERCONA_RC}${PERCONA_RELEASE}/source/tarball/${PN}-${MY_PV}-${PERCONA_RC}${PERCONA_RELEASE}.tar.gz"
160 # http://www.percona.com/redir/downloads/Percona-Server-5.5/LATEST/source/tarball/Percona-Server-5.5.30-30.2.tar.gz
161 # http://www.percona.com/redir/downloads/Percona-Server-5.6/Percona-Server-5.6.13-rc60.5/source/tarball/Percona-Server-5.6.13-rc60.5.tar.gz
162 else
163 if [[ "${PN}" == "mysql-cluster" ]] ; then
164 URI_DIR="MySQL-Cluster"
165 URI_FILE="mysql-cluster-gpl"
166 else
167 URI_DIR="MySQL"
168 URI_FILE="mysql"
169 fi
170 URI_A="${URI_FILE}-${MY_PV}.tar.gz"
171 MIRROR_PV=$(get_version_component_range 1-2 ${PV})
172 # Recently upstream switched to an archive site, and not on mirrors
173 SERVER_URI="http://downloads.mysql.com/archives/${URI_FILE}-${MIRROR_PV}/${URI_A}
174 https://downloads.skysql.com/files/${URI_FILE}-${MIRROR_PV}/${URI_A}
175 mirror://mysql/Downloads/${URI_DIR}-${PV%.*}/${URI_A}"
176 fi
177 fi
178
179 # Define correct SRC_URIs
180 SRC_URI="${SERVER_URI}"
181
182 # Gentoo patches to MySQL
183 if [[ ${MY_EXTRAS_VER} != "live" && ${MY_EXTRAS_VER} != "none" ]]; then
184 SRC_URI="${SRC_URI}
185 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
186 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
187 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
188 http://dev.gentoo.org/~jmbsvicetto/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
189 http://dev.gentoo.org/~grknight/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
190 fi
191
192 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server"
193 HOMEPAGE="http://www.mysql.com/"
194 if [[ ${PN} == "mariadb" ]]; then
195 HOMEPAGE="http://mariadb.org/"
196 DESCRIPTION="An enhanced, drop-in replacement for MySQL"
197 fi
198 if [[ ${PN} == "mariadb-galera" ]]; then
199 HOMEPAGE="http://mariadb.org/"
200 DESCRIPTION="An enhanced, drop-in replacement for MySQL with Galera Replication"
201 fi
202 if [[ ${PN} == "percona-server" ]]; then
203 HOMEPAGE="http://www.percona.com/software/percona-server"
204 DESCRIPTION="An enhanced, drop-in replacement for MySQL from the Percona team"
205 fi
206 LICENSE="GPL-2"
207 SLOT="0"
208
209 case "${BUILD}" in
210 "autotools")
211 IUSE="big-tables debug embedded minimal +perl selinux ssl static test"
212 ;;
213 "cmake")
214 IUSE="debug embedded minimal +perl selinux ssl static static-libs test"
215 ;;
216 esac
217
218 # Common IUSE
219 IUSE="${IUSE} latin1 extraengine cluster max-idx-128 +community profiling"
220
221 # This probably could be simplified, but the syntax would have to be just right
222 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] && \
223 mysql_version_is_at_least "5.5" ; then
224 IUSE="bindist ${IUSE}"
225 RESTRICT="${RESTRICT} !bindist? ( bindist )"
226 elif [[ ${PN} == "mysql" || ${PN} == "percona-server" ]] && \
227 mysql_check_version_range "5.5.37 to 5.6.11.99" ; then
228 IUSE="bindist ${IUSE}"
229 RESTRICT="${RESTRICT} !bindist? ( bindist )"
230 elif [[ ${PN} == "mysql-cluster" ]] && \
231 mysql_check_version_range "7.2 to 7.2.99.99" ; then
232 IUSE="bindist ${IUSE}"
233 RESTRICT="${RESTRICT} !bindist? ( bindist )"
234 fi
235
236 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]]; then
237 mysql_check_version_range "5.1.38 to 5.3.99" && IUSE="${IUSE} libevent"
238 mysql_version_is_at_least "5.2" && IUSE="${IUSE} oqgraph" && \
239 REQUIRED_USE="${REQUIRED_USE} minimal? ( !oqgraph )"
240 mysql_version_is_at_least "5.2.5" && IUSE="${IUSE} sphinx" && \
241 REQUIRED_USE="${REQUIRED_USE} minimal? ( !sphinx )"
242 mysql_version_is_at_least "5.2.10" && IUSE="${IUSE} pam"
243 # 5.5.33 and 10.0.5 add TokuDB. Authors strongly recommend jemalloc or perfomance suffers
244 mysql_version_is_at_least "10.0.5" && IUSE="${IUSE} tokudb odbc xml" && \
245 REQUIRED_USE="${REQUIRED_USE} odbc? ( extraengine ) xml? ( extraengine ) tokudb? ( jemalloc )"
246 mysql_check_version_range "5.5.33 to 5.5.99" && IUSE="${IUSE} tokudb" && \
247 REQUIRED_USE="${REQUIRED_USE} tokudb? ( jemalloc )"
248 fi
249
250 if mysql_version_is_at_least "5.5"; then
251 REQUIRED_USE="${REQUIRED_USE} tcmalloc? ( !jemalloc ) jemalloc? ( !tcmalloc )"
252 IUSE="${IUSE} jemalloc tcmalloc"
253 fi
254
255 if mysql_version_is_at_least "5.5.7"; then
256 IUSE="${IUSE} systemtap"
257 fi
258
259 if [[ ${PN} == "percona-server" ]]; then
260 mysql_version_is_at_least "5.5.10" && IUSE="${IUSE} pam"
261 fi
262
263 REQUIRED_USE="${REQUIRED_USE} minimal? ( !cluster !extraengine !embedded ) static? ( !ssl )"
264
265 #
266 # DEPENDENCIES:
267 #
268
269 # Be warned, *DEPEND are version-dependant
270 # These are used for both runtime and compiletime
271 DEPEND="
272 ssl? ( >=dev-libs/openssl-0.9.6d:0 )
273 kernel_linux? ( sys-process/procps )
274 >=sys-apps/sed-4
275 >=sys-apps/texinfo-4.7-r1
276 >=sys-libs/zlib-1.2.3
277 "
278 # TODO: add this as a dep if it is moved from the overlay
279 # !dev-db/mariadb-native-client[mysqlcompat]
280
281 # dev-db/mysql-5.6.12+ only works with dev-libs/libedit
282 # This probably could be simplified
283 if [[ ${PN} == "mysql" || ${PN} == "percona-server" ]] && \
284 mysql_version_is_at_least "5.6.12" ; then
285 DEPEND="${DEPEND} dev-libs/libedit"
286 elif [[ ${PN} == "mysql-cluster" ]] && mysql_version_is_at_least "7.3"; then
287 DEPEND="${DEPEND} dev-libs/libedit"
288 else
289 if mysql_version_is_at_least "5.5" ; then
290 DEPEND="${DEPEND} !bindist? ( >=sys-libs/readline-4.1:0 )"
291 else
292 DEPEND="${DEPEND} >=sys-libs/readline-4.1:0"
293 fi
294 fi
295
296 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] ; then
297 mysql_check_version_range "5.1.38 to 5.3.99" && DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
298 mysql_version_is_at_least "5.2" && DEPEND="${DEPEND} oqgraph? ( >=dev-libs/boost-1.40.0 )"
299 mysql_version_is_at_least "5.2.10" && DEPEND="${DEPEND} !minimal? ( pam? ( virtual/pam ) )"
300 # Bug 441700 MariaDB >=5.3 include custom mytop
301 mysql_version_is_at_least "5.3" && DEPEND="${DEPEND} perl? ( !dev-db/mytop )"
302 if mysql_version_is_at_least "10.0.5" ; then
303 DEPEND="${DEPEND}
304 odbc? ( dev-db/unixODBC )
305 xml? ( dev-libs/libxml2 )
306 "
307 fi
308 mysql_version_is_at_least "10.0.7" && DEPEND="${DEPEND} oqgraph? ( dev-libs/judy )"
309 if mysql_version_is_at_least "10.0.9" ; then
310 DEPEND="${DEPEND} >=dev-libs/libpcre-8.35"
311 fi
312 fi
313
314 # Having different flavours at the same time is not a good idea
315 for i in "mysql" "mariadb" "mariadb-galera" "percona-server" "mysql-cluster" ; do
316 [[ ${i} == ${PN} ]] ||
317 DEPEND="${DEPEND} !dev-db/${i}"
318 done
319
320 if mysql_version_is_at_least "5.5.7" ; then
321 DEPEND="${DEPEND}
322 jemalloc? ( dev-libs/jemalloc[static-libs?] )
323 tcmalloc? ( dev-util/google-perftools )
324 >=sys-libs/zlib-1.2.3[static-libs?]
325 ssl? ( >=dev-libs/openssl-0.9.6d[static-libs?] )
326 systemtap? ( >=dev-util/systemtap-1.3 )
327 kernel_linux? ( dev-libs/libaio )
328 "
329 fi
330
331 if [[ ${PN} == "mysql-cluster" ]] ; then
332 # TODO: This really should include net-misc/memcached
333 # but the package does not install the files it seeks.
334 mysql_version_is_at_least "7.2.3" && \
335 DEPEND="${DEPEND} dev-libs/libevent"
336 fi
337
338 # prefix: first need to implement something for #196294
339 RDEPEND="${DEPEND}
340 !minimal? ( !prefix? ( dev-db/mysql-init-scripts ) )
341 selinux? ( sec-policy/selinux-mysql )
342 "
343
344 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] ; then
345 # Bug 455016 Add dependencies of mytop
346 if mysql_version_is_at_least "5.3" ; then
347 RDEPEND="${RDEPEND}
348 perl? (
349 virtual/perl-Getopt-Long
350 dev-perl/TermReadKey
351 virtual/perl-Term-ANSIColor
352 virtual/perl-Time-HiRes
353 )
354 "
355 fi
356 fi
357
358 if [[ ${PN} == "mariadb-galera" ]] ; then
359 # The wsrep API version must match between the ebuild and sys-cluster/galera.
360 # This will be indicated by WSREP_REVISION in the ebuild and the first number
361 # in the version of sys-cluster/galera
362 RDEPEND="${RDEPEND}
363 =sys-cluster/galera-${WSREP_REVISION}*
364 "
365 fi
366
367 if [[ ${PN} == "mysql-cluster" ]] ; then
368 mysql_version_is_at_least "7.2.9" && RDEPEND="${RDEPEND} java? ( >=virtual/jre-1.6 )" && \
369 DEPEND="${DEPEND} java? ( >=virtual/jdk-1.6 )"
370 fi
371
372 DEPEND="${DEPEND}
373 virtual/yacc
374 "
375
376 DEPEND="${DEPEND} static? ( sys-libs/ncurses[static-libs] )"
377
378 # compile-time-only
379 DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
380
381 # compile-time-only
382 if mysql_version_is_at_least "5.5.8" ; then
383 DEPEND="${DEPEND} >=dev-util/cmake-2.6.3"
384 fi
385
386 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
387 PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
388
389 # For other stuff to bring us in
390 PDEPEND="${PDEPEND} ~virtual/mysql-${MYSQL_PV_MAJOR}"
391
392 #
393 # External patches
394 #
395
396 # MariaDB has integrated PBXT until it was dropped in version 5.5.33
397 # PBXT_VERSION means that we have a PBXT patch for this PV
398 # PBXT was only introduced after 5.1.12
399 pbxt_patch_available() {
400 [[ ${PN} != "mariadb" && ${PN} != "mariadb-galera" && ( -n "${PBXT_VERSION}" ) ]]
401 return $?
402 }
403
404 pbxt_available() {
405 pbxt_patch_available || [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] && mysql_check_version_range "5.1 to 5.5.32"
406 return $?
407 }
408
409 # Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
410 # MariaDB has integrated XtraDB
411 # XTRADB_VERS means that we have a XTRADB patch for this PV
412 # XTRADB was only introduced after 5.1.26
413 xtradb_patch_available() {
414 [[ ${PN} != "mariadb" && ${PN} != "mariadb-galera"
415 && ( -n "${XTRADB_VER}" ) && ( -n "${PERCONA_VER}" ) ]]
416 return $?
417 }
418
419 if pbxt_patch_available; then
420
421 PBXT_P="pbxt-${PBXT_VERSION}"
422 PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz"
423 SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )"
424 fi
425
426 # PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
427 # vs. built outside the dir
428 if pbxt_available; then
429
430 IUSE="${IUSE} pbxt"
431 PBXT_NEWSTYLE=1
432 REQUIRED_USE="${REQUIRED_USE} pbxt? ( !embedded ) "
433 fi
434
435 if xtradb_patch_available; then
436 XTRADB_P="percona-xtradb-${XTRADB_VER}"
437 XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz"
438 XTRADB_SRC_B1="http://www.percona.com/"
439 XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/"
440 XTRADB_SRC_URI1="${XTRADB_SRC_B2}/Percona-Server/Percona-Server-${XTRADB_SRC_URI_COMMON}"
441 XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}"
442 XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}"
443 SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )"
444 IUSE="${IUSE} xtradb"
445 REQUIRED_USE="${REQUIRED_USE} xtradb? ( !embedded ) "
446 fi
447
448 #
449 # HELPER FUNCTIONS:
450 #
451
452 # @FUNCTION: mysql-v2_disable_test
453 # @DESCRIPTION:
454 # Helper function to disable specific tests.
455 mysql-v2_disable_test() {
456 ${BUILD_INHERIT}_disable_test "$@"
457 }
458
459 # @FUNCTION: mysql-v2_configure_minimal
460 # @DESCRIPTION:
461 # Helper function to configure minimal build
462 configure_minimal() {
463 ${BUILD_INHERIT}_configure_minimal "$@"
464 }
465
466 # @FUNCTION: mysql-v2_configure_common
467 # @DESCRIPTION:
468 # Helper function to configure common builds
469 configure_common() {
470 ${BUILD_INHERIT}_configure_common "$@"
471 }
472
473 #
474 # EBUILD FUNCTIONS
475 #
476
477 # @FUNCTION: mysql-v2_pkg_setup
478 # @DESCRIPTION:
479 # Perform some basic tests and tasks during pkg_setup phase:
480 # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
481 # check for conflicting use flags
482 # create new user and group for mysql
483 # warn about deprecated features
484 mysql-v2_pkg_setup() {
485
486 if has test ${FEATURES} ; then
487 if ! use minimal ; then
488 if ! has userpriv ${FEATURES} ; then
489 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
490 fi
491 fi
492 fi
493
494 # Check for USE flag problems in pkg_setup
495 if ! mysql_version_is_at_least "5.2" && use debug ; then
496 # Also in package.use.mask
497 die "Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51"
498 fi
499
500 # This should come after all of the die statements
501 enewgroup mysql 60 || die "problem adding 'mysql' group"
502 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
503
504 if use cluster && [[ "${PN}" != "mysql-cluster" ]]; then
505 ewarn "Upstream has noted that the NDB cluster support in the 5.0 and"
506 ewarn "5.1 series should NOT be put into production. In the near"
507 ewarn "future, it will be disabled from building."
508 fi
509
510 if [[ ${PN} == "mysql-cluster" ]] ; then
511 mysql_version_is_at_least "7.2.9" && java-pkg-opt-2_pkg_setup
512 fi
513
514 if use_if_iuse tokudb && [[ $(gcc-major-version) -lt 4 || $(gcc-major-version) -eq 4 && $(gcc-minor-version) -lt 7 ]] ; then
515 eerror "${PN} with tokudb needs to be built with gcc-4.7 or later."
516 eerror "Please use gcc-config to switch to gcc-4.7 or later version."
517 die
518 fi
519
520 }
521
522 # @FUNCTION: mysql-v2_src_unpack
523 # @DESCRIPTION:
524 # Unpack the source code
525 mysql-v2_src_unpack() {
526
527 # Initialize the proper variables first
528 mysql_init_vars
529
530 unpack ${A}
531 # Grab the patches
532 [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git-r3_src_unpack
533
534 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
535 }
536
537 # @FUNCTION: mysql-v2_src_prepare
538 # @DESCRIPTION:
539 # Apply patches to the source code and remove unneeded bundled libs.
540 mysql-v2_src_prepare() {
541 ${BUILD_INHERIT}_src_prepare "$@"
542 if [[ ${PN} == "mysql-cluster" ]] ; then
543 mysql_version_is_at_least "7.2.9" && java-pkg-opt-2_src_prepare
544 fi
545 }
546
547 # @FUNCTION: mysql-v2_src_configure
548 # @DESCRIPTION:
549 # Configure mysql to build the code for Gentoo respecting the use flags.
550 mysql-v2_src_configure() {
551 ${BUILD_INHERIT}_src_configure "$@"
552 }
553
554 # @FUNCTION: mysql-v2_src_compile
555 # @DESCRIPTION:
556 # Compile the mysql code.
557 mysql-v2_src_compile() {
558 ${BUILD_INHERIT}_src_compile "$@"
559 }
560
561 # @FUNCTION: mysql-v2_src_install
562 # @DESCRIPTION:
563 # Install mysql.
564 mysql-v2_src_install() {
565 ${BUILD_INHERIT}_src_install "$@"
566 }
567
568 # @FUNCTION: mysql-v2_pkg_preinst
569 # @DESCRIPTION:
570 # Create the user and groups for mysql - die if that fails.
571 mysql-v2_pkg_preinst() {
572 if [[ ${PN} == "mysql-cluster" ]] ; then
573 mysql_version_is_at_least "7.2.9" && java-pkg-opt-2_pkg_preinst
574 fi
575 enewgroup mysql 60 || die "problem adding 'mysql' group"
576 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
577 }
578
579 # @FUNCTION: mysql-v2_pkg_postinst
580 # @DESCRIPTION:
581 # Run post-installation tasks:
582 # create the dir for logfiles if non-existant
583 # touch the logfiles and secure them
584 # install scripts
585 # issue required steps for optional features
586 # issue deprecation warnings
587 mysql-v2_pkg_postinst() {
588
589 # Make sure the vars are correctly initialized
590 mysql_init_vars
591
592 # Check FEATURES="collision-protect" before removing this
593 [[ -d "${ROOT}${MY_LOGDIR}" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
594
595 # Secure the logfiles
596 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
597 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
598 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
599
600 # Minimal builds don't have the MySQL server
601 if ! use minimal ; then
602 docinto "support-files"
603 for script in \
604 support-files/my-*.cnf \
605 support-files/magic \
606 support-files/ndb-config-2-node.ini
607 do
608 [[ -f "${script}" ]] \
609 && dodoc "${script}"
610 done
611
612 docinto "scripts"
613 for script in scripts/mysql* ; do
614 if [[ -f "${script}" && "${script%.sh}" == "${script}" ]]; then
615 dodoc "${script}"
616 fi
617 done
618
619 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] ; then
620 if use_if_iuse pam ; then
621 einfo
622 elog "This install includes the PAM authentication plugin."
623 elog "To activate and configure the PAM plugin, please read:"
624 elog "https://kb.askmonty.org/en/pam-authentication-plugin/"
625 einfo
626 fi
627 fi
628
629 einfo
630 elog "You might want to run:"
631 elog "\"emerge --config =${CATEGORY}/${PF}\""
632 elog "if this is a new install."
633 einfo
634
635 einfo
636 elog "If you are upgrading major versions, you should run the"
637 elog "mysql_upgrade tool."
638 einfo
639
640 if [[ ${PN} == "mariadb-galera" ]] ; then
641 einfo
642 elog "Be sure to edit the my.cnf file to activate your cluster settings."
643 elog "This should be done after running \"emerge --config =${CATEGORY}/${PF}\""
644 elog "The first time the cluster is activated, you should add"
645 elog "--wsrep-new-cluster to the options in /etc/conf.d/mysql for one node."
646 elog "This option should then be removed for subsequent starts."
647 einfo
648 fi
649 fi
650
651 if use_if_iuse pbxt ; then
652 elog "Note: PBXT is now statically built when enabled."
653 elog ""
654 elog "If, you previously installed as a plugin and "
655 elog "you cannot start the MySQL server,"
656 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
657 elog "use the MySQL upgrade script to restore the table"
658 elog "or execute the following SQL command:"
659 elog " CREATE TABLE IF NOT EXISTS plugin ("
660 elog " name char(64) binary DEFAULT '' NOT NULL,"
661 elog " dl char(128) DEFAULT '' NOT NULL,"
662 elog " PRIMARY KEY (name)"
663 elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
664 fi
665 }
666
667 # @FUNCTION: mysql-v2_getopt
668 # @DESCRIPTION:
669 # Use my_print_defaults to extract specific config options
670 mysql-v2_getopt() {
671 local mypd="${EROOT}"/usr/bin/my_print_defaults
672 section="$1"
673 flag="--${2}="
674 "${mypd}" $section | sed -n "/^${flag}/p"
675 }
676
677 # @FUNCTION: mysql-v2_getoptval
678 # @DESCRIPTION:
679 # Use my_print_defaults to extract specific config options
680 mysql-v2_getoptval() {
681 local mypd="${EROOT}"/usr/bin/my_print_defaults
682 section="$1"
683 flag="--${2}="
684 "${mypd}" $section | sed -n "/^${flag}/s,${flag},,gp"
685 }
686
687 # @FUNCTION: mysql-v2_pkg_config
688 # @DESCRIPTION:
689 # Configure mysql environment.
690 mysql-v2_pkg_config() {
691
692 local old_MY_DATADIR="${MY_DATADIR}"
693 local old_HOME="${HOME}"
694 # my_print_defaults needs to read stuff in $HOME/.my.cnf
695 export HOME=${EPREFIX}/root
696
697 # Make sure the vars are correctly initialized
698 mysql_init_vars
699
700 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
701
702 if built_with_use ${CATEGORY}/${PN} minimal ; then
703 die "Minimal builds do NOT include the MySQL server"
704 fi
705
706 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
707 local MY_DATADIR_s="${ROOT}/${MY_DATADIR}"
708 MY_DATADIR_s="${MY_DATADIR_s%%/}"
709 local old_MY_DATADIR_s="${ROOT}/${old_MY_DATADIR}"
710 old_MY_DATADIR_s="${old_MY_DATADIR_s%%/}"
711
712 if [[ ( -d "${old_MY_DATADIR_s}" ) && ( "${old_MY_DATADIR_s}" != / ) ]]; then
713 if [[ -d "${MY_DATADIR_s}" ]]; then
714 ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
715 ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
716 else
717 elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
718 mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
719 || die "Moving MY_DATADIR failed"
720 fi
721 else
722 ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
723 if [[ -d "${MY_DATADIR_s}" ]]; then
724 ewarn "Attempting to use ${MY_DATADIR_s}"
725 else
726 eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
727 die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
728 fi
729 fi
730 fi
731
732 local pwd1="a"
733 local pwd2="b"
734 local maxtry=15
735
736 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
737 MYSQL_ROOT_PASSWORD="$(mysql-v2_getoptval 'client mysql' password)"
738 fi
739 MYSQL_TMPDIR="$(mysql-v2_getoptval mysqld tmpdir)"
740 # These are dir+prefix
741 MYSQL_RELAY_LOG="$(mysql-v2_getoptval mysqld relay-log)"
742 MYSQL_RELAY_LOG=${MYSQL_RELAY_LOG%/*}
743 MYSQL_LOG_BIN="$(mysql-v2_getoptval mysqld log-bin)"
744 MYSQL_LOG_BIN=${MYSQL_LOG_BIN%/*}
745
746 if [[ ! -d "${ROOT}"/$MYSQL_TMPDIR ]]; then
747 einfo "Creating MySQL tmpdir $MYSQL_TMPDIR"
748 install -d -m 770 -o mysql -g mysql "${ROOT}"/$MYSQL_TMPDIR
749 fi
750 if [[ ! -d "${ROOT}"/$MYSQL_LOG_BIN ]]; then
751 einfo "Creating MySQL log-bin directory $MYSQL_LOG_BIN"
752 install -d -m 770 -o mysql -g mysql "${ROOT}"/$MYSQL_LOG_BIN
753 fi
754 if [[ ! -d "${EROOT}"/$MYSQL_RELAY_LOG ]]; then
755 einfo "Creating MySQL relay-log directory $MYSQL_RELAY_LOG"
756 install -d -m 770 -o mysql -g mysql "${EROOT}"/$MYSQL_RELAY_LOG
757 fi
758
759 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
760 ewarn "You have already a MySQL database in place."
761 ewarn "(${ROOT}/${MY_DATADIR}/*)"
762 ewarn "Please rename or delete it if you wish to replace it."
763 die "MySQL database already exists!"
764 fi
765
766 # Bug #213475 - MySQL _will_ object strenously if your machine is named
767 # localhost. Also causes weird failures.
768 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
769
770 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
771
772 einfo "Please provide a password for the mysql 'root' user now, in the"
773 einfo "MYSQL_ROOT_PASSWORD env var or through the ${HOME}/.my.cnf file."
774 ewarn "Avoid [\"'\\_%] characters in the password"
775 read -rsp " >" pwd1 ; echo
776
777 einfo "Retype the password"
778 read -rsp " >" pwd2 ; echo
779
780 if [[ "x$pwd1" != "x$pwd2" ]] ; then
781 die "Passwords are not the same"
782 fi
783 MYSQL_ROOT_PASSWORD="${pwd1}"
784 unset pwd1 pwd2
785 fi
786
787 local options
788 local sqltmp="$(emktemp)"
789
790 # Fix bug 446200. Don't reference host my.cnf, needs to come first,
791 # see http://bugs.mysql.com/bug.php?id=31312
792 use prefix && options="${options} --defaults-file=${MY_SYSCONFDIR}/my.cnf"
793
794 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
795 [[ -r "${help_tables}" ]] \
796 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
797 || touch "${TMPDIR}/fill_help_tables.sql"
798 help_tables="${TMPDIR}/fill_help_tables.sql"
799
800 # Figure out which options we need to disable to do the setup
801 helpfile="${TMPDIR}/mysqld-help"
802 ${EROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
803 for opt in grant-tables host-cache name-resolve networking slave-start \
804 federated ssl log-bin relay-log slow-query-log external-locking \
805 ndbcluster log-slave-updates \
806 ; do
807 optexp="--(skip-)?${opt}" optfull="--loose-skip-${opt}"
808 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
809 done
810 # But some options changed names
811 egrep -sq external-locking "${helpfile}" && \
812 options="${options/skip-locking/skip-external-locking}"
813
814 use prefix || options="${options} --user=mysql"
815
816 # MySQL 5.6+ needs InnoDB
817 if [[ ${PN} == "mysql" || ${PN} == "percona-server" ]] ; then
818 mysql_version_is_at_least "5.6" || options="${options} --loose-skip-innodb"
819 fi
820
821 einfo "Creating the mysql database and setting proper"
822 einfo "permissions on it ..."
823
824 # Now that /var/run is a tmpfs mount point, we need to ensure it exists before using it
825 PID_DIR="${EROOT}/var/run/mysqld"
826 if [[ ! -d "${PID_DIR}" ]]; then
827 mkdir -p "${PID_DIR}" || die "Could not create pid directory"
828 chown mysql:mysql "${PID_DIR}" || die "Could not set ownership on pid directory"
829 chmod 755 "${PID_DIR}" || die "Could not set permissions on pid directory"
830 fi
831
832 pushd "${TMPDIR}" &>/dev/null
833 #cmd="'${EROOT}/usr/share/mysql/scripts/mysql_install_db' '--basedir=${EPREFIX}/usr' ${options}"
834 cmd=${EROOT}usr/share/mysql/scripts/mysql_install_db
835 [[ -f ${cmd} ]] || cmd=${EROOT}usr/bin/mysql_install_db
836 cmd="'$cmd' '--basedir=${EPREFIX}/usr' ${options} '--datadir=${ROOT}/${MY_DATADIR}' '--tmpdir=${ROOT}/${MYSQL_TMPDIR}'"
837 einfo "Command: $cmd"
838 eval $cmd \
839 >"${TMPDIR}"/mysql_install_db.log 2>&1
840 if [ $? -ne 0 ]; then
841 grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
842 die "Failed to run mysql_install_db. Please review ${EPREFIX}/var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
843 fi
844 popd &>/dev/null
845 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
846 || die "MySQL databases not installed"
847 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
848 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
849
850 # Filling timezones, see
851 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
852 "${EROOT}/usr/bin/mysql_tzinfo_to_sql" "${EROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
853
854 if [[ -r "${help_tables}" ]] ; then
855 cat "${help_tables}" >> "${sqltmp}"
856 fi
857
858 local socket="${EROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
859 local pidfile="${EROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
860 local mysqld="${EROOT}/usr/sbin/mysqld \
861 ${options} \
862 $(use prefix || echo --user=mysql) \
863 --log-warnings=0 \
864 --basedir=${EROOT}/usr \
865 --datadir=${ROOT}/${MY_DATADIR} \
866 --max_allowed_packet=8M \
867 --net_buffer_length=16K \
868 --default-storage-engine=MyISAM \
869 --socket=${socket} \
870 --pid-file=${pidfile}
871 --tmpdir=${ROOT}/${MYSQL_TMPDIR}"
872 #einfo "About to start mysqld: ${mysqld}"
873 ebegin "Starting mysqld"
874 einfo "Command ${mysqld}"
875 ${mysqld} &
876 rc=$?
877 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
878 maxtry=$((${maxtry}-1))
879 echo -n "."
880 sleep 1
881 done
882 eend $rc
883
884 if ! [[ -S "${socket}" ]]; then
885 die "Completely failed to start up mysqld with: ${mysqld}"
886 fi
887
888 ebegin "Setting root password"
889 # Do this from memory, as we don't want clear text passwords in temp files
890 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
891 "${EROOT}/usr/bin/mysql" \
892 --socket=${socket} \
893 -hlocalhost \
894 -e "${sql}"
895 eend $?
896
897 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
898 "${EROOT}/usr/bin/mysql" \
899 --socket=${socket} \
900 -hlocalhost \
901 -uroot \
902 --password="${MYSQL_ROOT_PASSWORD}" \
903 mysql < "${sqltmp}"
904 rc=$?
905 eend $?
906 [[ $rc -ne 0 ]] && ewarn "Failed to load zoneinfo!"
907
908 # Stop the server and cleanup
909 einfo "Stopping the server ..."
910 kill $(< "${pidfile}" )
911 rm -f "${sqltmp}"
912 wait %1
913 einfo "Done"
914 }
915
916 # @FUNCTION: mysql-v2_pkg_postrm
917 # @DESCRIPTION:
918 # Remove mysql symlinks.
919 mysql-v2_pkg_postrm() {
920
921 : # mysql_lib_symlinks "${ED}"
922 }

  ViewVC Help
Powered by ViewVC 1.1.20