re-add lxml-4.8.0-r2

This commit is contained in:
Andreas Billmeier 2022-07-16 13:47:58 +02:00 committed by Andreas Billmeier
parent 0c060b3c87
commit 7920787ee6
Signed by: onkelbeh
GPG Key ID: E6DB12C8C550F3C0
5 changed files with 581 additions and 2 deletions

View File

@ -524,14 +524,14 @@ A daily compile test is run at Github with Python 3.9 to catch general faults. E
## Licenses
This repository itself is released under GPL-3 (like most Gentoo repositories), all work on the depending components under the licenses they came from. Perhaps you came here because I filed an issue at your component about a bad or missing license. It is easy to [assign a license](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-license-to-a-repository). During cleanups and license investigations I have been asked often which license to choose. I am not a lawyer, but I can offer the following table, counted over this repository, perhaps this helps your decision. If a package has more than one license listed, all of them are counted.
There are 1767 Ebuilds in total, 1760 of them have in total 1768 (35 different) licenses assigned.
There are 1768 Ebuilds in total, 1761 of them have in total 1769 (35 different) licenses assigned.
|License| Ebuilds using it|
|-------|-----|
|MIT|1078|
|Apache-2.0|318|
|GPL-3|106|
|BSD|100|
|BSD|101|
|LGPL-3|29|
|GPL-2|23|
|LGPL-3+|18|

4
dev-python/lxml/Manifest Normal file
View File

@ -0,0 +1,4 @@
AUX lxml-4.6.0-tests-pypy.patch 18051 BLAKE2B 99d97fa2e874c9bec4a866c3303b54ea2ab1e6abddf148d142cb66ee035b1eab1e05eed924d34451c5db38dc37f77104539cbfc2fe45815c17445b6359dcb857 SHA512 f6c6c2b00a49e6ca19d8b9123c364003a682c2e8df0c42d8600085d1cb094ba5cedd162bfc794e7d9acfff93aac771953dca5a879c3b957af1e2e8bd1db05515
DIST lxml-4.8.0.gh.tar.gz 959376 BLAKE2B a40be5e058153e1dc3f8501b645b0211f4498928ed71b161df54a67501356e9968064401b6d17e17dc8d62223b29e794eaa2bee7ff78ffee203d9f9a22f3e1c2 SHA512 bbcd8ea001cfa2820dcac4e00de6ded81700b2f0bd4a58bcdd4da05a19a107f57cd56280c4838fe19ee7ecd6be105878bf8c2f1c0e5111899c4ad1a2ba03537f
EBUILD lxml-4.8.0-r2.ebuild 2626 BLAKE2B 56cbdc4e1d6b4c53932525b1c5f074efdfa87db346c24b629b8a29af712cba6c72ae9981761225fba1062560cac76e2dc2f5e37e0c4c87ee057752b3abe17619 SHA512 edd775cb01fc7a401d071d6f88afc7e1242a5e3f13d8f1834c7cbb6b86819e74e3262fcedfebb2a218439aa8549a3bec3cf58c716cf2f6da52e873187d356268
MISC metadata.xml 446 BLAKE2B 44fad7275753a53b75d2b803b0f9433d09a6964c440b4860f8fff6665676681f8d2e2f246172f8bd8bc5858a3d6a6e77a3a310620bc1f9840b284f83eac2f703 SHA512 6125c6f8b17105a84542353037f1c615ed78758d2752b99cff1876c7ad2e1c57b59d8344828a04777a3f869fe172070da4a5e618d22da3c4eda725393124ccaa

View File

@ -0,0 +1,452 @@
From 1804702b5e3c85c1a16014d62365a29d0a6d0c75 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
Date: Thu, 30 Jan 2020 06:15:27 +0100
Subject: [PATCH] Skip tests failing on PyPy
---
src/lxml/tests/test_elementtree.py | 3 +-
src/lxml/tests/test_errors.py | 3 +-
src/lxml/tests/test_http_io.py | 3 +-
src/lxml/tests/test_nsclasses.py | 3 +-
src/lxml/tests/test_objectify.py | 41 +++++++++++++++++++++++++--
src/lxml/tests/test_xpathevaluator.py | 7 +++--
src/lxml/tests/test_xslt.py | 7 +++--
7 files changed, 56 insertions(+), 11 deletions(-)
diff --git a/src/lxml/tests/test_elementtree.py b/src/lxml/tests/test_elementtree.py
index 78d8964d..f3f28044 100644
--- a/src/lxml/tests/test_elementtree.py
+++ b/src/lxml/tests/test_elementtree.py
@@ -26,7 +26,7 @@ from .common_imports import (
BytesIO, etree, HelperTestCase,
ElementTree, cElementTree, ET_VERSION, CET_VERSION,
filter_by_version, fileInTestDir, canonicalize, tmpfile,
- _str, _bytes, unicode, IS_PYTHON2
+ _str, _bytes, unicode, IS_PYTHON2, IS_PYPY
)
if cElementTree is not None and (CET_VERSION <= (1,0,7) or sys.version_info[0] >= 3):
@@ -2956,6 +2956,7 @@ class _ETreeTestCaseBase(HelperTestCase):
self.assertEqual('TEST', root2[0].get('{%s}a' % ns_href))
required_versions_ET['test_register_namespace'] = (1,3)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_register_namespace(self):
# ET 1.3+
Element = self.etree.Element
diff --git a/src/lxml/tests/test_errors.py b/src/lxml/tests/test_errors.py
index c0aee744..33111429 100644
--- a/src/lxml/tests/test_errors.py
+++ b/src/lxml/tests/test_errors.py
@@ -11,7 +11,7 @@ import unittest
import sys, gc, os.path
from lxml import etree
-from .common_imports import HelperTestCase
+from .common_imports import HelperTestCase, IS_PYPY
class ErrorTestCase(HelperTestCase):
@@ -25,6 +25,7 @@ class ErrorTestCase(HelperTestCase):
def test_empty_parse(self):
self.assertRaises(etree.XMLSyntaxError, etree.fromstring, '')
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_element_cyclic_gc_none(self):
# test if cyclic reference can crash etree
Element = self.etree.Element
diff --git a/src/lxml/tests/test_http_io.py b/src/lxml/tests/test_http_io.py
index f9eff39a..edf2bd81 100644
--- a/src/lxml/tests/test_http_io.py
+++ b/src/lxml/tests/test_http_io.py
@@ -11,10 +11,11 @@ import textwrap
import sys
import gzip
-from .common_imports import etree, HelperTestCase, BytesIO, _bytes
+from .common_imports import etree, HelperTestCase, BytesIO, _bytes, IS_PYPY
from .dummy_http_server import webserver, HTTPRequestCollector
+@unittest.skipIf(IS_PYPY, "broken on pypy")
class HttpIOTestCase(HelperTestCase):
etree = etree
diff --git a/src/lxml/tests/test_nsclasses.py b/src/lxml/tests/test_nsclasses.py
index a0aa608d..5aa5dc48 100644
--- a/src/lxml/tests/test_nsclasses.py
+++ b/src/lxml/tests/test_nsclasses.py
@@ -9,7 +9,7 @@ from __future__ import absolute_import
import unittest
-from .common_imports import etree, HelperTestCase, _bytes, make_doctest
+from .common_imports import etree, HelperTestCase, _bytes, make_doctest, IS_PYPY
class ETreeNamespaceClassesTestCase(HelperTestCase):
@@ -46,6 +46,7 @@ class ETreeNamespaceClassesTestCase(HelperTestCase):
self.Namespace('ns02').clear()
self.Namespace('ns03').clear()
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_ns_classes(self):
bluff_dict = {'bluff' : self.bluff_class}
maeh_dict = {'maeh' : self.maeh_class}
diff --git a/src/lxml/tests/test_objectify.py b/src/lxml/tests/test_objectify.py
index a12ae7e1..83ba4ced 100644
--- a/src/lxml/tests/test_objectify.py
+++ b/src/lxml/tests/test_objectify.py
@@ -9,7 +9,8 @@ from __future__ import absolute_import
import unittest, operator
from .common_imports import (
- etree, HelperTestCase, fileInTestDir, doctest, make_doctest, _bytes, _str, BytesIO
+ etree, HelperTestCase, fileInTestDir, doctest, make_doctest, _bytes, _str, BytesIO,
+ IS_PYPY
)
from lxml import objectify
@@ -213,11 +214,13 @@ class ObjectifyTestCase(HelperTestCase):
expected.update(DEFAULT_NSMAP)
self.assertEqual(root.value.nsmap, expected)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_date_element_efactory_text(self):
# ObjectifiedDataElement can also be used as E-Factory
value = objectify.ObjectifiedDataElement('test', 'toast')
self.assertEqual(value.text, 'testtoast')
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_date_element_efactory_tail(self):
# ObjectifiedDataElement can also be used as E-Factory
value = objectify.ObjectifiedElement(objectify.ObjectifiedDataElement(), 'test', 'toast')
@@ -374,6 +377,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertEqual("4", getattr(root.c1, "{}c2").text)
self.assertEqual("0", getattr(root.c1, "c2").text)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_setattr(self):
for val in [
2, 2**32, 1.2, "Won't get fooled again",
@@ -809,6 +813,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertEqual(3, len(root.findall(".//b")))
self.assertEqual(2, len(root.findall("b")))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_build_tree(self):
root = self.Element('root')
root.a = 5
@@ -838,6 +843,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertEqual(value, None)
self.assertEqual(value.get(XML_SCHEMA_NIL_ATTR), "true")
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_bool(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -871,6 +877,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertTrue(isinstance(value, objectify.BoolElement))
self.assertEqual(value, False)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_str(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -878,6 +885,7 @@ class ObjectifyTestCase(HelperTestCase):
root.s = "test"
self.assertTrue(isinstance(root.s, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_str_intliteral(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -885,6 +893,7 @@ class ObjectifyTestCase(HelperTestCase):
root.s = "3"
self.assertTrue(isinstance(root.s, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_str_floatliteral(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -892,6 +901,7 @@ class ObjectifyTestCase(HelperTestCase):
root.s = "3.72"
self.assertTrue(isinstance(root.s, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_str_mul(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -904,6 +914,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertRaises(TypeError, operator.mul, root.s, "honk")
self.assertRaises(TypeError, operator.mul, "honk", root.s)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_str_add(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -914,6 +925,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertEqual("test" + s, root.s + s)
self.assertEqual(s + "test", s + root.s)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_str_mod(self):
s = "%d %f %s %r"
el = objectify.DataElement(s)
@@ -979,6 +991,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertTrue(isinstance(value, objectify.StringElement))
self.assertEqual(value, "3.20")
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_ustr(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -986,6 +999,7 @@ class ObjectifyTestCase(HelperTestCase):
root.s = _str("test")
self.assertTrue(isinstance(root.s, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_ustr_intliteral(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -993,6 +1007,7 @@ class ObjectifyTestCase(HelperTestCase):
root.s = _str("3")
self.assertTrue(isinstance(root.s, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_ustr_floatliteral(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -1000,6 +1015,7 @@ class ObjectifyTestCase(HelperTestCase):
root.s = _str("3.72")
self.assertTrue(isinstance(root.s, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_ustr_mul(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -1012,6 +1028,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertRaises(TypeError, operator.mul, root.s, _str("honk"))
self.assertRaises(TypeError, operator.mul, _str("honk"), root.s)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_ustr_add(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -1037,6 +1054,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertTrue(isinstance(value, objectify.StringElement))
self.assertEqual(value, _str("3.20"))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_int(self):
Element = self.Element
root = Element("{objectified}root")
@@ -1053,6 +1071,7 @@ class ObjectifyTestCase(HelperTestCase):
value = objectify.DataElement(123)
self.assertEqual(hash(value), hash(123))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_float(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -1069,6 +1088,7 @@ class ObjectifyTestCase(HelperTestCase):
value = objectify.DataElement(5.5)
self.assertEqual(hash(value), hash(5.5))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_float_precision(self):
# test not losing precision by shortened float str() value
# repr(2.305064300557): '2.305064300557'
@@ -1088,6 +1108,7 @@ class ObjectifyTestCase(HelperTestCase):
s = "2.305064300557"
self.assertEqual(objectify.FloatElement(s), float(s))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_float_precision_consistency(self):
# test consistent FloatElement values for the different instantiation
# possibilities
@@ -1169,6 +1190,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertEqual(value.text, None)
self.assertEqual(value.pyval, None)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_unregistered(self):
Element = self.Element
SubElement = self.etree.SubElement
@@ -1331,6 +1353,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertEqual(["why", "try"],
strs)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_str_cmp(self):
XML = self.XML
root = XML(_bytes('<root><b>test</b><b>taste</b><b></b><b/></root>'))
@@ -1358,6 +1381,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertEqual(root.b, "")
self.assertEqual("", root.b)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_int_cmp(self):
XML = self.XML
root = XML(_bytes('<root><b>5</b><b>6</b></root>'))
@@ -1380,6 +1404,7 @@ class ObjectifyTestCase(HelperTestCase):
# float + long share the NumberElement implementation with int
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_type_bool_cmp(self):
XML = self.XML
root = XML(_bytes('<root><b>false</b><b>true</b></root>'))
@@ -2049,6 +2074,7 @@ class ObjectifyTestCase(HelperTestCase):
before = [objectify.getRegisteredTypes()[0].name],
after = [objectify.getRegisteredTypes()[1].name])
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_registered_type_stringify(self):
from datetime import datetime
def parse_date(value):
@@ -2519,46 +2545,55 @@ class ObjectifyTestCase(HelperTestCase):
# E-Factory tests, need to use sub-elements as root element is always
# type-looked-up as ObjectifiedElement (no annotations)
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_int(self):
E = objectify.E
root = E.root(E.val(23))
self.assertTrue(isinstance(root.val, objectify.IntElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_float(self):
E = objectify.E
root = E.root(E.val(233.23))
self.assertTrue(isinstance(root.val, objectify.FloatElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_str(self):
E = objectify.E
root = E.root(E.val("what?"))
self.assertTrue(isinstance(root.val, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_unicode(self):
E = objectify.E
root = E.root(E.val(_str("blöödy häll", encoding="ISO-8859-1")))
self.assertTrue(isinstance(root.val, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_bool(self):
E = objectify.E
root = E.root(E.val(True))
self.assertTrue(isinstance(root.val, objectify.BoolElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_none(self):
E = objectify.E
root = E.root(E.val(None))
self.assertTrue(isinstance(root.val, objectify.NoneElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_value_concatenation(self):
E = objectify.E
root = E.root(E.val(1, "foo", 2.0, "bar ", True, None))
self.assertTrue(isinstance(root.val, objectify.StringElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_attrib(self):
E = objectify.E
root = E.root(foo="bar")
self.assertEqual(root.get("foo"), "bar")
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_nested(self):
E = objectify.E
DataElement = objectify.DataElement
@@ -2573,6 +2608,7 @@ class ObjectifyTestCase(HelperTestCase):
self.assertTrue(isinstance(root.value[0], objectify.IntElement))
self.assertTrue(isinstance(root.value[1], objectify.FloatElement))
+ @unittest.skipIf(IS_PYPY, "broken on pypy")
def test_efactory_subtype(self):
class Attribute(objectify.ObjectifiedDataElement):
def __init__(self):
@@ -2674,7 +2710,8 @@ def test_suite():
suite = unittest.TestSuite()
suite.addTests([unittest.makeSuite(ObjectifyTestCase)])
suite.addTests(doctest.DocTestSuite(objectify))
- suite.addTests([make_doctest('../../../doc/objectify.txt')])
+ if not IS_PYPY:
+ suite.addTests([make_doctest('../../../doc/objectify.txt')])
return suite
if __name__ == '__main__':
diff --git a/src/lxml/tests/test_xpathevaluator.py b/src/lxml/tests/test_xpathevaluator.py
index 13ee97ec..6d162c6d 100644
--- a/src/lxml/tests/test_xpathevaluator.py
+++ b/src/lxml/tests/test_xpathevaluator.py
@@ -8,7 +8,7 @@ from __future__ import absolute_import
import unittest, sys
-from .common_imports import etree, HelperTestCase, _bytes, BytesIO, doctest, make_doctest
+from .common_imports import etree, HelperTestCase, _bytes, BytesIO, doctest, make_doctest, IS_PYPY
class ETreeXPathTestCase(HelperTestCase):
@@ -740,8 +740,9 @@ def test_suite():
suite.addTests([unittest.makeSuite(ETreeXPathExsltTestCase)])
suite.addTests([unittest.makeSuite(ETreeETXPathClassTestCase)])
suite.addTests([doctest.DocTestSuite()])
- suite.addTests(
- [make_doctest('../../../doc/xpathxslt.txt')])
+ if not IS_PYPY:
+ suite.addTests(
+ [make_doctest('../../../doc/xpathxslt.txt')])
return suite
if __name__ == '__main__':
diff --git a/src/lxml/tests/test_xslt.py b/src/lxml/tests/test_xslt.py
index cde23357..41f8d78b 100644
--- a/src/lxml/tests/test_xslt.py
+++ b/src/lxml/tests/test_xslt.py
@@ -17,6 +17,8 @@ from textwrap import dedent
from tempfile import NamedTemporaryFile, mkdtemp
is_python3 = sys.version_info[0] >= 3
+is_pypy = (getattr(sys, 'implementation', None) == 'pypy' or
+ getattr(sys, 'pypy_version_info', None) is not None)
try:
unicode
@@ -2085,8 +2087,9 @@ def test_suite():
suite.addTests([unittest.makeSuite(Py3XSLTTestCase)])
suite.addTests(
[make_doctest('../../../doc/extensions.txt')])
- suite.addTests(
- [make_doctest('../../../doc/xpathxslt.txt')])
+ if not is_pypy:
+ suite.addTests(
+ [make_doctest('../../../doc/xpathxslt.txt')])
return suite
if __name__ == '__main__':
--
2.25.0
diff --git a/doc/element_classes.txt b/doc/element_classes.txt
index 4b1e72e8..fda9ea07 100644
--- a/doc/element_classes.txt
+++ b/doc/element_classes.txt
@@ -576,10 +576,10 @@ subclasses for elements of this namespace:
>>> print(honk_element[0].honk())
HONK
- >>> print(honk_element[0].honking)
+ >>> print(honk_element[0].honking) # doctest: +ELLIPSIS
Traceback (most recent call last):
...
- AttributeError: 'HonkNSElement' object has no attribute 'honking'
+ AttributeError: 'HonkNSElement' object has no attribute 'honking'...
>>> print(honk_element[1].text) # uses fallback for non-elements
comment

View File

@ -0,0 +1,108 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{8..10} )
inherit distutils-r1 optfeature toolchain-funcs
DESCRIPTION="A Pythonic binding for the libxml2 and libxslt libraries"
HOMEPAGE="
https://lxml.de/
https://pypi.org/project/lxml/
https://github.com/lxml/lxml
"
SRC_URI="https://github.com/lxml/lxml/archive/${P}.tar.gz -> ${P}.gh.tar.gz"
S="${WORKDIR}"/lxml-${P}
LICENSE="BSD"
SLOT="0"
KEYWORDS="amd64 arm arm64 x86"
IUSE="doc examples +threads test"
RESTRICT="!test? ( test )"
# Note: lib{xml2,xslt} are used as C libraries, not Python modules.
DEPEND="
>=dev-libs/libxml2-2.9.12-r2
>=dev-libs/libxslt-1.1.28"
RDEPEND="
${DEPEND}
"
BDEPEND="
virtual/pkgconfig
>=dev-python/cython-0.29.29[${PYTHON_USEDEP}]
doc? (
$(python_gen_any_dep '
dev-python/docutils[${PYTHON_USEDEP}]
dev-python/pygments[${PYTHON_USEDEP}]
dev-python/sphinx[${PYTHON_USEDEP}]
dev-python/sphinx_rtd_theme[${PYTHON_USEDEP}]
')
)
test? (
dev-python/cssselect[${PYTHON_USEDEP}]
)
"
PATCHES=(
"${FILESDIR}"/${PN}-4.6.0-tests-pypy.patch
)
python_check_deps() {
use doc || return 0
has_version -b "dev-python/docutils[${PYTHON_USEDEP}]" &&
has_version -b "dev-python/pygments[${PYTHON_USEDEP}]" &&
has_version -b "dev-python/sphinx[${PYTHON_USEDEP}]" &&
has_version -b "dev-python/sphinx_rtd_theme[${PYTHON_USEDEP}]"
}
python_prepare_all() {
# avoid replacing PYTHONPATH in tests.
sed -i -e '/sys\.path/d' test.py || die
# don't use some random SDK on Darwin
sed -i -e '/_ldflags =/s/=.*isysroot.*darwin.*None/= None/' \
setupinfo.py || die
distutils-r1_python_prepare_all
}
python_compile() {
tc-export PKG_CONFIG
distutils-r1_python_compile
}
python_compile_all() {
use doc && emake html
}
python_test() {
local dir=${BUILD_DIR}/test$(python_get_sitedir)/lxml
local -x PATH=${BUILD_DIR}/test/usr/bin:${PATH}
cp -al "${BUILD_DIR}"/{install,test} || die
cp -al src/lxml/tests "${dir}/" || die
cp -al src/lxml/html/tests "${dir}/html/" || die
ln -rs "${S}"/doc "${dir}"/../../ || die
"${EPYTHON}" test.py -vv --all-levels -p || die "Test ${test} fails with ${EPYTHON}"
}
python_install_all() {
if use doc; then
local DOCS=( README.rst *.txt doc/*.txt )
local HTML_DOCS=( doc/html/. )
fi
if use examples; then
dodoc -r samples
fi
distutils-r1_python_install_all
}
pkg_postinst() {
optfeature "Support for BeautifulSoup as a parser backend" dev-python/beautifulsoup4
optfeature "Translates CSS selectors to XPath 1.0 expressions" dev-python/cssselect
}

View File

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<maintainer type="project">
<email>b@edevau.net</email>
<name>Andreas Billmeier</name>
</maintainer>
<upstream>
<remote-id type="pypi">lxml</remote-id>
<maintainer status="unknown">
<email>lxml-dev@lxml.de</email>
<name>lxml dev team</name>
</maintainer>
</upstream>
</pkgmetadata>