summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /eclass/mysql_fx.eclass
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'eclass/mysql_fx.eclass')
-rw-r--r--eclass/mysql_fx.eclass306
1 files changed, 306 insertions, 0 deletions
diff --git a/eclass/mysql_fx.eclass b/eclass/mysql_fx.eclass
new file mode 100644
index 000000000000..1c501cbeb9e5
--- /dev/null
+++ b/eclass/mysql_fx.eclass
@@ -0,0 +1,306 @@
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
+# Maintainer:
+# - MySQL Team <mysql-bugs@gentoo.org>
+# - Luca Longinotti <chtekk@gentoo.org>
+
+inherit multilib
+
+#
+# Helper function, version (integer) may have sections separated by dots
+# for readability.
+#
+stripdots() {
+ local dotver=${1:-"0"}
+ local v=""
+ local ret=0
+ if [[ "${dotver/./}" != "${dotver}" ]] ; then
+ # dotted version number
+ for i in 1000000 10000 100 1 ; do
+ v=${dotver%%\.*}
+ # remove leading zeroes
+ while [[ ${#v} -gt 1 ]] && [[ ${v:0:1} == "0" ]] ; do v=${v#0} ; done
+ # increment integer version number
+ ret=$(( ${v} * ${i} + ${ret} ))
+ if [[ "${dotver}" == "${dotver/\.}" ]] ; then
+ dotver=0
+ else
+ dotver=${dotver#*\.}
+ fi
+ done
+ echo "${ret}"
+ else
+ # already an integer
+ v=${dotver}
+ while [[ ${#v} -gt 1 ]] && [[ ${v:0:1} == "0" ]] ; do v=${v#0} ; done
+ echo "${v}"
+ fi
+}
+
+#
+# Check if a version number falls inside a given range.
+# The range includes the extremes and must be specified as
+# "low_version to high_version" i.e. "4.1.2 to 5.1.99.99".
+# Returns true if inside the range.
+#
+mysql_check_version_range() {
+ local lbound="${1%% to *}" ; lbound=$(stripdots "${lbound}")
+ local rbound="${1#* to }" ; rbound=$(stripdots "${rbound}")
+ local my_ver="${2:-"${MYSQL_VERSION_ID}"}"
+ [[ ${lbound} -le ${my_ver} ]] && [[ ${my_ver} -le ${rbound} ]] && return 0
+ return 1
+}
+
+#
+# True if at least one applicable range is found for the patch.
+#
+_mysql_test_patch_ver_pn() {
+ local allelements=", version, package name"
+ # So that it fails the directory test if none of them exist
+ local filesdir="/dev/null"
+ for d in "${WORKDIR}/mysql-extras-${MY_EXTRAS_VER}" \
+ "${WORKDIR}/mysql-extras" ; do
+ if [ -d "${d}" ]; then
+ filesdir="${d}"
+ break
+ fi
+ done
+
+ [[ -d "${filesdir}" ]] || die "Source dir must be a directory"
+ local flags=$1 pname=$2
+ if [[ $(( $flags & $(( 1 + 4 + 16 )) )) -eq 21 ]] ; then
+ einfo "using '${pname}'"
+ ln -sf "${filesdir}/${pname}" "${EPATCH_SOURCE}" || die "Couldn't move ${pname}"
+ return 0
+ fi
+
+ [[ $(( $flags & $(( 2 + 4 )) )) -gt 0 ]] \
+ && allelements="${allelements//", version"}"
+
+ [[ $(( $flags & $(( 8 + 16 )) )) -gt 0 ]] \
+ && allelements="${allelements//", package name"}"
+
+ [[ -n "${allelements}" ]] && [[ "${flags}" -gt 0 ]] \
+ && ewarn "QA notice: ${allelements} missing in ${pname} patch"
+
+ return 1
+}
+
+#
+# Parse a "index_file" looking for patches to apply to the
+# current MySQL version.
+# If the patch applies, print its description.
+#
+mysql_mv_patches() {
+ # So that it fails the directory test if none of them exist
+ local filesdir="/dev/null"
+ if [[ -z "${1}" ]]; then
+ for d in "${WORKDIR}/mysql-extras-${MY_EXTRAS_VER}" \
+ "${WORKDIR}/mysql-extras" ; do
+ if [ -d "${d}" ]; then
+ filesdir="${d}"
+ break
+ fi
+ done
+ [[ -d "${filesdir}" ]] || die "No patches directory found!"
+ fi
+
+ for i in "$1" "${filesdir}/0000_index.txt" "${filesdir}/000_index.txt" ; do
+ if [ -n "$i" -a -f "$i" ]; then
+ local index_file="$i"
+ break
+ fi
+ done
+
+ local my_ver="${2:-"${MYSQL_VERSION_ID}"}"
+ local my_test_fx=${3:-"_mysql_test_patch_ver_pn"}
+ _mysql_mv_patches "${index_file}" "${my_ver}" "${my_test_fx}"
+}
+
+_mysql_mv_patches() {
+ local index_file="${1}"
+ local my_ver="${2}"
+ local my_test_fx="${3}"
+ local dsc ndsc=0 i
+ dsc=( )
+
+ # Values for flags are (2^x):
+ # 1 - one patch found
+ # 2 - at least one version range is wrong
+ # 4 - at least one version range is ok
+ # 8 - at least one ${PN} did not match
+ # 16 - at least one ${PN} has been matched
+ local flags=0 pname=""
+ while read row ; do
+ case "${row}" in
+ @patch\ *)
+ [[ -n "${pname}" ]] \
+ && ${my_test_fx} ${flags} "${pname}" \
+ && for (( i=0 ; $i < $ndsc ; i++ )) ; do einfo "> ${dsc[$i]}" ; done
+ flags=1 ; ndsc=0 ; dsc=( )
+ pname=${row#"@patch "}
+ ;;
+ @ver\ *)
+ if mysql_check_version_range "${row#"@ver "}" "${my_ver}" ; then
+ flags=$(( ${flags} | 4 ))
+ else
+ flags=$(( ${flags} | 2 ))
+ fi
+ ;;
+ @pn\ *)
+ if [[ ${row#"@pn "} == "${PN}" ]] ; then
+ flags=$(( ${flags} | 16 ))
+ else
+ flags=$(( ${flags} | 8 ))
+ fi
+ ;;
+ # @use\ *) ;;
+ @@\ *)
+ dsc[$ndsc]="${row#"@@ "}"
+ (( ++ndsc ))
+ ;;
+ esac
+ done < "${index_file}"
+
+ ${my_test_fx} ${flags} "${pname}" \
+ && for (( i=0 ; $i < $ndsc ; i++ )) ; do einfo "> ${dsc[$i]}" ; done
+}
+
+#
+# Is $2 (defaults to $MYSQL_VERSION_ID) at least version $1?
+# (nice) idea from versionator.eclass
+#
+mysql_version_is_at_least() {
+ local want_s=$(stripdots "$1") have_s=$(stripdots "${2:-${MYSQL_VERSION_ID}}")
+ [[ -z "${want_s}" ]] && die "mysql_version_is_at_least missing value to check"
+ [[ ${want_s} -le ${have_s} ]] && return 0 || return 1
+}
+
+#
+# To be called on the live filesystem, reassigning symlinks of each MySQL
+# library to the best version available.
+#
+mysql_lib_symlinks() {
+
+ local d dirlist maxdots libname libnameln libsuffix reldir
+ libsuffix=$(get_libname)
+
+ einfo "libsuffix = ${libsuffix}"
+ einfo "Updating MySQL libraries symlinks"
+
+ reldir="${1}"
+ pushd "${reldir}/usr/$(get_libdir)" &> /dev/null
+
+ # dirlist must contain the less significative directory left
+ dirlist="mysql"
+
+ # waste some time in removing and recreating symlinks
+ for d in $dirlist ; do
+ for libname in $( find "${d}" -mindepth 1 -maxdepth 1 -name "*${libsuffix}*" -and -not -type "l" 2>/dev/null ) ; do
+ # maxdot is a limit versus infinite loop
+ maxdots=0
+ libnameln=${libname##*/}
+ # loop in version of the library to link it, similar to how
+ # libtool works
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ # macho: libname.x.y.z.dylib
+ local libbasename=${libnameln%%.*} # libname
+ local libver=${libnameln#${libbasename}} # .x.y.z.dylib
+ libver=${libver%${libsuffix}} # .x.y.z
+ while [[ -n ${libver} ]] && [[ ${maxdots} -lt 6 ]] ; do
+ libnameln="${libbasename}${libver}${libsuffix}"
+ rm -f "${libnameln}"
+ ln -s "${libname}" "${libnameln}"
+ (( ++maxdots ))
+ libver=${libver%.*}
+ done
+ libnameln="${libbasename}${libsuffix}"
+ rm -f "${libnameln}"
+ ln -s "${libname}" "${libnameln}"
+ else
+ # elf: libname.so.x.y.z
+ while [[ ${libnameln:0-3} != '${libsuffix}' ]] && [[ ${maxdots} -lt 6 ]] ; do
+ rm -f "${libnameln}"
+ ln -s "${libname}" "${libnameln}"
+ (( ++maxdots ))
+ libnameln="${libnameln%.*}"
+ done
+ rm -f "${libnameln}"
+ ln -s "${libname}" "${libnameln}"
+ fi
+ done
+ done
+
+ popd &> /dev/null
+}
+
+# @FUNCTION: mysql_init_vars
+# @DESCRIPTION:
+# void mysql_init_vars()
+# Initialize global variables
+# 2005-11-19 <vivo@gentoo.org>
+mysql_init_vars() {
+ MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="${EPREFIX}/usr/share/mysql"}
+ MY_SYSCONFDIR=${MY_SYSCONFDIR="${EPREFIX}/etc/mysql"}
+ MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="${EPREFIX}/var/lib/mysql"}
+ MY_LOGDIR=${MY_LOGDIR="${EPREFIX}/var/log/mysql"}
+ MY_INCLUDEDIR=${MY_INCLUDEDIR="${EPREFIX}/usr/include/mysql"}
+ MY_LIBDIR=${MY_LIBDIR="${EPREFIX}/usr/$(get_libdir)/mysql"}
+
+ if [[ -z "${MY_DATADIR}" ]] ; then
+ MY_DATADIR=""
+ if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
+ MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
+ | sed -ne '/datadir/s|^--datadir=||p' \
+ | tail -n1`
+ if [[ -z "${MY_DATADIR}" ]] ; then
+ MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
+ | sed -e 's/.*=\s*//' \
+ | tail -n1`
+ fi
+ fi
+ if [[ -z "${MY_DATADIR}" ]] ; then
+ MY_DATADIR="${MY_LOCALSTATEDIR}"
+ einfo "Using default MY_DATADIR"
+ fi
+ elog "MySQL MY_DATADIR is ${MY_DATADIR}"
+
+ if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
+ if [[ -e "${MY_DATADIR}" ]] ; then
+ # If you get this and you're wondering about it, see bug #207636
+ elog "MySQL datadir found in ${MY_DATADIR}"
+ elog "A new one will not be created."
+ PREVIOUS_DATADIR="yes"
+ else
+ PREVIOUS_DATADIR="no"
+ fi
+ export PREVIOUS_DATADIR
+ fi
+ else
+ if [[ ${EBUILD_PHASE} == "config" ]]; then
+ local new_MY_DATADIR
+ new_MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
+ | sed -ne '/datadir/s|^--datadir=||p' \
+ | tail -n1`
+
+ if [[ ( -n "${new_MY_DATADIR}" ) && ( "${new_MY_DATADIR}" != "${MY_DATADIR}" ) ]]; then
+ ewarn "MySQL MY_DATADIR has changed"
+ ewarn "from ${MY_DATADIR}"
+ ewarn "to ${new_MY_DATADIR}"
+ MY_DATADIR="${new_MY_DATADIR}"
+ fi
+ fi
+ fi
+
+ if [ "${MY_SOURCEDIR:-unset}" == "unset" ]; then
+ MY_SOURCEDIR=${SERVER_URI##*/}
+ MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
+ fi
+
+ export MY_SHAREDSTATEDIR MY_SYSCONFDIR
+ export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
+ export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
+}