ssuominen    14/10/27 05:59:09

  Added:               
                        
python-poppler-qt4-0.18.1-update_for_new_PyQt4_build.patch
  Log:
  Version bump; with a patch for new PyQt4 build system; with Python 3.x 
support.
  
  (Portage version: 2.2.12/cvs/Linux x86_64, signed Manifest commit with key 
4868F14D)

Revision  Changes    Path
1.1                  
dev-python/python-poppler-qt4/files/python-poppler-qt4-0.18.1-update_for_new_PyQt4_build.patch

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/python-poppler-qt4/files/python-poppler-qt4-0.18.1-update_for_new_PyQt4_build.patch?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/dev-python/python-poppler-qt4/files/python-poppler-qt4-0.18.1-update_for_new_PyQt4_build.patch?rev=1.1&content-type=text/plain

Index: python-poppler-qt4-0.18.1-update_for_new_PyQt4_build.patch
===================================================================
>From 099924f9b359b82696e3aa9f159616ff09d2da97 Mon Sep 17 00:00:00 2001
From: Philip Lorenz <[email protected]>
Date: Tue, 8 Jul 2014 18:23:49 +0200
Subject: [PATCH 3/3] Support PyQt's "new" build system

PyQt4 ships with a configure.py and configure-ng.py script for
configuration. The former produced the "pyqtconfig" module which was
used to determine various flags required for compilation of
python-poppler-qt4. The configure.py script has been causing some issues
([1]) and upstream suggests to use configure-ng.py instead as the old
configuration script is deprecated ([2]).

This patch adapts setup.py to work without the "pyqtconfig" module by
looking up the required config values via the new mechanisms endorsed by
upstream. Additionally, it adds the --qt-include-dir, --pyqt-sip-dir,
--pyqt-sip-flags command line arguments to the "build_ext" command which
can be used to set those values manually.

[1] http://www.riverbankcomputing.com/pipermail/pyqt/2014-June/034344.html
[2] http://www.riverbankcomputing.com/pipermail/pyqt/2014-June/034354.html
---
 setup.py | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 94 insertions(+), 20 deletions(-)

diff --git a/setup.py b/setup.py
index 56f3e3f..c43c5e4 100644
--- a/setup.py
+++ b/setup.py
@@ -56,14 +56,6 @@ except ImportError:
     pass
 ### end
 
-import PyQt4.pyqtconfig
-config = PyQt4.pyqtconfig.Configuration()
-
-pyqt_sip_dir = config.pyqt_sip_dir
-pyqt_sip_flags = config.pyqt_sip_flags
-qt_inc_dir = config.qt_inc_dir
-
-
 def pkg_config(package, attrs=None, include_only=False):
     """parse the output of pkg-config for a package.
     
@@ -107,17 +99,8 @@ def pkg_config_version(package):
         return tuple(map(int, re.findall(r'\d+', output)))
     except OSError:
         sys.stderr.write("Can't determine version of %s\n" % package)
-        
-
-ext_args = {
-    'include_dirs': [
-        qt_inc_dir,
-        os.path.join(qt_inc_dir, 'QtCore'),
-        os.path.join(qt_inc_dir, 'QtGui'),
-        os.path.join(qt_inc_dir, 'QtXml'),
-    ],
-}
 
+ext_args = {}
 pkg_config('poppler-qt4', ext_args)
 
 if 'libraries' not in ext_args:
@@ -131,17 +114,108 @@ class build_ext(build_ext_base):
     
     user_options = build_ext_base.user_options + [
         ('poppler-version=', None, "version of the poppler library"),
+        ('qmake-bin=', None, "Path to qmake binary"),
+        ('qt-include-dir=', None, "Path to Qt headers"),
+        ('pyqt-sip-dir=', None, "Path to PyQt's SIP files"),
+        ('pyqt-sip-flags=', None, "SIP flags used to generate PyQt bindings")
     ]
     
     def initialize_options (self):
         build_ext_base.initialize_options(self)
         self.poppler_version = None
 
+        self.qmake_bin = 'qmake'
+
+        self.qt_include_dir = None
+        self.pyqt_sip_dir = None
+        self.pyqt_sip_flags = None
+
     def finalize_options (self):
         build_ext_base.finalize_options(self)
+
+        if not self.qt_include_dir:
+            self.qt_include_dir = self.__find_qt_include_dir()
+
+        if not self.pyqt_sip_dir:
+            self.pyqt_sip_dir = self.__find_pyqt_sip_dir()
+
+        if not self.pyqt_sip_flags:
+            self.pyqt_sip_flags = self.__find_pyqt_sip_flags()
+
+        if not self.qt_include_dir:
+            raise SystemExit('Could not find Qt4 headers. '
+                             'Please specify via --qt-include-dir=')
+
+        if not self.pyqt_sip_dir:
+            raise SystemExit('Could not find PyQt SIP files. '
+                             'Please specify containing directory via '
+                             '--pyqt-sip-dir=')
+
+        if not self.pyqt_sip_flags:
+            raise SystemExit('Could not find PyQt SIP flags. '
+                             'Please specify via --pyqt-sip-flags=')
+
+        self.include_dirs += (self.qt_include_dir,
+                              os.path.join(self.qt_include_dir, 'QtCore'),
+                              os.path.join(self.qt_include_dir, 'QtGui'),
+                              os.path.join(self.qt_include_dir, 'QtXml'))
+
         if self.poppler_version is not None:
             self.poppler_version = tuple(map(int, re.findall(r'\d+', 
self.poppler_version)))
 
+    def __find_qt_include_dir(self):
+        if self.pyqtconfig:
+            return self.pyqtconfig.qt_inc_dir
+
+        try:
+            qt_version = subprocess.check_output([self.qmake_bin,
+                                                  '-query',
+                                                  'QT_VERSION'])
+            qt_version = qt_version.strip().decode("ascii")
+        except (OSError, subprocess.CalledProcessError) as e:
+            raise SystemExit('Failed to determine Qt version (%s).' % e)
+
+        if not qt_version.startswith("4."):
+            raise SystemExit('Unsupported Qt version (%s). '
+                             'Try specifying the path to qmake manually via '
+                             '--qmake-bin=' % qt_version)
+
+        try:
+            result =  subprocess.check_output([self.qmake_bin,
+                                               '-query',
+                                               'QT_INSTALL_HEADERS'])
+            return result.strip().decode(sys.getfilesystemencoding())
+        except (OSError, subprocess.CalledProcessError) as e:
+            raise SystemExit('Failed to determine location of Qt headers 
(%s).' % e)
+
+    def __find_pyqt_sip_dir(self):
+        if self.pyqtconfig:
+            return self.pyqtconfig.pyqt_sip_dir
+
+        import sipconfig
+
+        return os.path.join(sipconfig.Configuration().default_sip_dir, 'PyQt4')
+
+    def __find_pyqt_sip_flags(self):
+        if self.pyqtconfig:
+            return self.pyqtconfig.pyqt_sip_flags
+
+        from PyQt4 import QtCore
+
+        return QtCore.PYQT_CONFIGURATION.get('sip_flags', '')
+
+    @property
+    def pyqtconfig(self):
+        if not hasattr(self, '_pyqtconfig'):
+            try:
+                from PyQt4 import pyqtconfig
+
+                self._pyqtconfig = pyqtconfig.Configuration()
+            except ImportError:
+                self._pyqtconfig = None
+
+        return self._pyqtconfig
+
     def _sip_compile(self, sip_bin, source, sbf):
         
         # Disable features if older poppler-qt4 version is found.
@@ -176,8 +250,8 @@ class build_ext(build_ext_base):
         cmd += [
             "-c", self.build_temp,
             "-b", sbf,
-            "-I", pyqt_sip_dir]             # find the PyQt4 stuff
-        cmd += shlex.split(pyqt_sip_flags)  # use same SIP flags as for PyQt4
+            "-I", self.pyqt_sip_dir]             # find the PyQt4 stuff
+        cmd += shlex.split(self.pyqt_sip_flags)  # use same SIP flags as for 
PyQt4
         cmd.append(source)
         self.spawn(cmd)
 
-- 
2.0.2





Reply via email to