summaryrefslogtreecommitdiff
path: root/setupinfo.py
diff options
context:
space:
mode:
authorscoder <stefan_ml@behnel.de>2015-03-19 20:19:22 +0100
committerscoder <stefan_ml@behnel.de>2015-03-19 20:19:22 +0100
commit148fd51102e0e45f903c5ae169dd63f19875d578 (patch)
treed00b37c1866583632176d707eb7bd32d584de320 /setupinfo.py
parent1e4c4692e6c55f47b6886e6f654a37e4d53c6e43 (diff)
parent738d3584530ffdb32952dda079749f6715438df1 (diff)
downloadpython-lxml-148fd51102e0e45f903c5ae169dd63f19875d578.tar.gz
Merge pull request #164 from msabramo/friendlier_error_when_libxml2_not_installed
Friendlier error when libxml2 not installed
Diffstat (limited to 'setupinfo.py')
-rw-r--r--setupinfo.py28
1 files changed, 26 insertions, 2 deletions
diff --git a/setupinfo.py b/setupinfo.py
index 796caf40..6b4c9846 100644
--- a/setupinfo.py
+++ b/setupinfo.py
@@ -1,6 +1,6 @@
import sys, os, os.path
from distutils.core import Extension
-from distutils.errors import DistutilsOptionError
+from distutils.errors import CompileError, DistutilsOptionError
from versioninfo import get_base_dir
try:
@@ -198,9 +198,33 @@ def find_dependencies(module):
def extra_setup_args():
result = {}
if CYTHON_INSTALLED:
- result['cmdclass'] = {'build_ext': build_pyx}
+ class CheckLibxml2BuildExt(build_pyx):
+ """Subclass to check whether libxml2 is available"""
+
+ def run(self):
+ try:
+ build_pyx.run(self)
+ except CompileError as e:
+ print('Compile failed: %s' % e)
+ if not has_libxml2():
+ sys.stderr.write('*********************************************************************************\n')
+ sys.stderr.write('Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?\n')
+ if sys.platform in ('darwin',):
+ sys.stderr.write('Perhaps try: xcode-select --install\n')
+ sys.stderr.write('*********************************************************************************\n')
+ raise
+
+ result['cmdclass'] = {'build_ext': CheckLibxml2BuildExt}
return result
+def has_libxml2():
+ from distutils import ccompiler
+ compiler = ccompiler.new_compiler()
+ return compiler.has_function(
+ 'xmlXPathInit',
+ include_dirs=['/usr/include/libxml2'], includes=['libxml/xpath.h'],
+ libraries=['xml2'])
+
def libraries():
if sys.platform in ('win32',):
libs = ['libxslt', 'libexslt', 'libxml2', 'iconv']