summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>2010-10-10 19:39:49 +0000
committerArfrever Frehtes Taifersar Arahesis <arfrever@gentoo.org>2010-10-10 19:39:49 +0000
commita0be48655fffc9fdc226da54bcf55302e8d1c6b6 (patch)
treea3ff0ab53ab326a9bec2fd2afad3a6c64f4b391b /eclass/twisted.eclass
parentKeyworded on alpha, bug #326767 (diff)
downloadgentoo-2-a0be48655fffc9fdc226da54bcf55302e8d1c6b6.tar.gz
gentoo-2-a0be48655fffc9fdc226da54bcf55302e8d1c6b6.tar.bz2
gentoo-2-a0be48655fffc9fdc226da54bcf55302e8d1c6b6.zip
Update comments.
Don't inherit unused eutils.eclass. Don't export twisted_src_test() for packages other than dev-python/twisted*. Delete needless MY_VERSION variable. Set some variables only for dev-python/twisted*. Delete support for <=dev-python/twisted*-8.2.0. Clean and improve twisted_src_test(). Support TWISTED_PLUGINS variable in twisted_pkg_postinst() and twisted_pkg_postrm() (bug #258698). Ignore ImportErrors in twisted_pkg_postrm() (bug #327111). Create dropin.cache files in EROOT directory. Delete empty directories and all dropin.cache files in twisted_pkg_postrm(). Ignore missing Python interpreter in twisted_pkg_postrm().
Diffstat (limited to 'eclass/twisted.eclass')
-rw-r--r--eclass/twisted.eclass194
1 files changed, 107 insertions, 87 deletions
diff --git a/eclass/twisted.eclass b/eclass/twisted.eclass
index 392ad2855826..95278ebef4eb 100644
--- a/eclass/twisted.eclass
+++ b/eclass/twisted.eclass
@@ -1,78 +1,67 @@
-# Copyright 2005 Gentoo Foundation
+# Copyright 2005-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or later
-# $Header: /var/cvsroot/gentoo-x86/eclass/twisted.eclass,v 1.7 2009/10/30 13:14:17 arfrever Exp $
-#
-# Author: Marien Zwart <marienz@gentoo.org>
-#
-# eclass to aid installing and testing twisted packages.
-#
-# you should set MY_PACKAGE to something like 'Names' before inheriting.
-# you may set MY_PV to the right version (defaults to PV).
-#
-# twisted_src_test relies on the package installing twisted.names to
-# have a ${PN} of twisted-names.
+# $Header: /var/cvsroot/gentoo-x86/eclass/twisted.eclass,v 1.8 2010/10/10 19:39:49 arfrever Exp $
-inherit distutils eutils versionator
+# @ECLASS: twisted.eclass
+# @MAINTAINER:
+# Gentoo Python Project <python@gentoo.org>
+# @BLURB: Eclass for Twisted packages
+# @DESCRIPTION:
+# The twisted eclass defines phase functions for Twisted packages.
-MY_PV="${MY_PV:-${PV}}"
-MY_VERSION="$(get_version_component_range 1-2 ${MY_PV})"
-MY_P="Twisted${MY_PACKAGE}-${MY_PV}"
+# The following variables can be set in dev-python/twisted* packages before inheriting this eclass:
+# MY_PACKAGE - Package name suffix (required)
+# MY_PV - Package version (optional)
-HOMEPAGE="http://www.twistedmatrix.com/"
-SRC_URI="http://tmrc.mit.edu/mirror/twisted/${MY_PACKAGE}/${MY_VERSION}/${MY_P}.tar.bz2"
+inherit distutils versionator
-LICENSE="MIT"
-SLOT="0"
-IUSE=""
+EXPORT_FUNCTIONS src_install pkg_postinst pkg_postrm
-S="${WORKDIR}/${MY_P}"
+if [[ "${CATEGORY}/${PN}" == "dev-python/twisted"* ]]; then
+ EXPORT_FUNCTIONS src_test
+
+ MY_PV="${MY_PV:-${PV}}"
+ MY_P="Twisted${MY_PACKAGE}-${MY_PV}"
+
+ HOMEPAGE="http://www.twistedmatrix.com/"
+ SRC_URI="http://tmrc.mit.edu/mirror/twisted/${MY_PACKAGE}/$(get_version_component_range 1-2 ${MY_PV})/${MY_P}.tar.bz2"
+
+ LICENSE="MIT"
+ SLOT="0"
+ IUSE=""
+
+ S="${WORKDIR}/${MY_P}"
+
+ TWISTED_PLUGINS="${TWISTED_PLUGINS:-twisted.plugins}"
+fi
+
+# @ECLASS-VARIABLE: TWISTED_PLUGINS
+# @DESCRIPTION:
+# Twisted plugins, whose cache is regenerated in pkg_postinst() and pkg_postrm() phases.
twisted_src_test() {
- if [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then
- testing() {
- # This is a hack to make tests work without installing to the live
- # filesystem. We copy the twisted site-packages to a temporary
- # dir, install there, and run from there.
- local spath="$(python_get_sitedir)"
- mkdir -p "${T}/${spath}"
- cp -R "${ROOT}${spath}/twisted" "${T}/${spath}" || die "Copying of files failed with Python ${PYTHON_ABI}"
-
- # We have to get rid of the existing version of this package
- # instead of just installing on top of it, since if the existing
- # package has tests in files the version we are installing does
- # not have we end up running e.g. twisted-names-0.3.0 tests when
- # downgrading to twisted-names-0.1.0-r1.
- rm -fr "${T}/${spath}/${PN/-//}"
-
- "$(PYTHON)" setup.py build -b "build-${PYTHON_ABI}" install --root="${T}" --no-compile --force || die "Installation for tests failed with Python ${PYTHON_ABI}"
- cd "${T}/${spath}" || die
- PATH="${T}/usr/bin:${PATH}" PYTHONPATH="${T}/${spath}" trial ${PN/-/.} || die "trial failed with Python ${PYTHON_ABI}"
- cd "${S}"
- rm -fr "${T}/${spath}"
- }
- python_execute_function testing
- else
- # This is a hack to make tests work without installing to the live
- # filesystem. We copy the twisted site-packages to a temporary
- # dir, install there, and run from there.
- local spath="$(python_get_sitedir)"
- mkdir -p "${T}/${spath}"
- cp -R "${ROOT}${spath}/twisted" "${T}/${spath}" || die
-
- # We have to get rid of the existing version of this package
- # instead of just installing on top of it, since if the existing
- # package has tests in files the version we are installing does
- # not have we end up running fex twisted-names-0.3.0 tests when
- # downgrading to twisted-names-0.1.0-r1.
- rm -rf "${T}/${spath}/${PN/-//}"
-
- "${python}" setup.py install --root="${T}" --no-compile --force || die
- cd "${T}/${spath}" || die
- PATH="${T}/usr/bin:${PATH}" PYTHONPATH="${T}/${spath}" \
- trial ${PN/-/.} || die "trial failed"
- cd "${S}"
- rm -rf "${T}/${spath}"
+ if [[ "${CATEGORY}/${PN}" != "dev-python/twisted"* ]]; then
+ die "${FUNCNAME}() can be used only in dev-python/twisted* packages"
fi
+
+ testing() {
+ local sitedir="${EPREFIX}$(python_get_sitedir)"
+
+ # Copy modules of other Twisted packages from site-packages directory to temporary directory.
+ mkdir -p "${T}/${sitedir}"
+ cp -R "${ROOT}${sitedir}/twisted" "${T}/${sitedir}" || die "Copying of modules of other Twisted packages failed with $(python_get_implementation) $(python_get_version)"
+ rm -fr "${T}/${sitedir}/${PN/-//}"
+
+ # Install modules of current package to temporary directory.
+ "$(PYTHON)" setup.py build -b "build-${PYTHON_ABI}" install --force --no-compile --root="${T}" || die "Installation into temporary directory failed with $(python_get_implementation) $(python_get_version)"
+
+ pushd "${T}/${sitedir}" > /dev/null || return 1
+ PATH="${T}${EPREFIX}/usr/bin:${PATH}" PYTHONPATH="${T}/${sitedir}" trial ${PN/-/.} || return 1
+ popd > /dev/null || return 1
+
+ rm -fr "${T}/${sitedir}"
+ }
+ python_execute_function testing
}
twisted_src_install() {
@@ -88,31 +77,62 @@ twisted_src_install() {
fi
}
-update_plugin_cache() {
- einfo "Updating twisted plugin cache..."
- # we have to remove the cache or removed plugins won't be removed
- # from the cache (http://twistedmatrix.com/bugs/issue926)
- rm "${ROOT}$(python_get_sitedir)/twisted/plugins/dropin.cache"
- # notice we have to use getPlugIns here for <=twisted-2.0.1 compatibility
- python -c "from twisted.plugin import IPlugin, getPlugIns;list(getPlugIns(IPlugin))"
-}
-
-twisted_pkg_postrm() {
- distutils_pkg_postrm
- if [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then
- python_execute_function update_plugin_cache
- else
- update_plugin_cache
+_twisted_update_plugin_cache() {
+ local dir exit_status="0" module
+
+ for module in ${TWISTED_PLUGINS}; do
+ if [[ -d "${EROOT}$(python_get_sitedir -b)/${module//.//}" ]]; then
+ find "${EROOT}$(python_get_sitedir -b)/${module//.//}" -name dropin.cache -print0 | xargs -0 rm -f
+ fi
+ done
+
+ if [[ -n "$(type -p "$(PYTHON)")" ]]; then
+ for module in ${TWISTED_PLUGINS}; do
+ # http://twistedmatrix.com/documents/current/core/howto/plugin.html
+ "$(PYTHON)" -c \
+"import sys
+sys.path.insert(0, '${EROOT}$(python_get_sitedir -b)')
+
+try:
+ import twisted.plugin
+ import ${module}
+except ImportError:
+ if '${EBUILD_PHASE}' == 'postinst':
+ raise
+ else:
+ # Twisted, zope.interface or given plugins might have been uninstalled.
+ sys.exit(0)
+
+list(twisted.plugin.getPlugins(twisted.plugin.IPlugin, ${module}))" || exit_status="1"
+ done
fi
+
+ for module in ${TWISTED_PLUGINS}; do
+ # Delete empty parent directories.
+ local dir="${EROOT}$(python_get_sitedir -b)/${module//.//}"
+ while [[ "${dir}" != "${EROOT%/}" ]]; do
+ rmdir "${dir}" 2> /dev/null || break
+ dir="${dir%/*}"
+ done
+ done
+
+ return "${exit_status}"
}
twisted_pkg_postinst() {
distutils_pkg_postinst
- if [[ -n "${SUPPORT_PYTHON_ABIS}" ]]; then
- python_execute_function update_plugin_cache
- else
- update_plugin_cache
- fi
+ python_execute_function \
+ --action-message 'Regeneration of Twisted plugin cache with $(python_get_implementation) $(python_get_version)' \
+ --failure-message 'Regeneration of Twisted plugin cache failed with $(python_get_implementation) $(python_get_version)' \
+ --nonfatal \
+ _twisted_update_plugin_cache
}
-EXPORT_FUNCTIONS src_test src_install pkg_postrm pkg_postinst
+twisted_pkg_postrm() {
+ distutils_pkg_postrm
+ python_execute_function \
+ --action-message 'Regeneration of Twisted plugin cache with $(python_get_implementation) $(python_get_version)' \
+ --failure-message 'Regeneration of Twisted plugin cache failed with $(python_get_implementation) $(python_get_version)' \
+ --nonfatal \
+ _twisted_update_plugin_cache
+}