summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/qscintilla/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/qscintilla/package.py')
-rw-r--r--var/spack/repos/builtin/packages/qscintilla/package.py78
1 files changed, 76 insertions, 2 deletions
diff --git a/var/spack/repos/builtin/packages/qscintilla/package.py b/var/spack/repos/builtin/packages/qscintilla/package.py
index 9bee719c13..ec20257676 100644
--- a/var/spack/repos/builtin/packages/qscintilla/package.py
+++ b/var/spack/repos/builtin/packages/qscintilla/package.py
@@ -20,10 +20,14 @@ class Qscintilla(QMakePackage):
version('2.10.2', sha256='14b31d20717eed95ea9bea4cd16e5e1b72cee7ebac647cba878e0f6db6a65ed0', preferred=True)
variant('designer', default=False, description="Enable pluging for Qt-Designer")
- # No 'python' variant, since Python bindings will be
- # built by PyQt5+qsci instead
+ variant('python', default=False, description="Build python bindings")
depends_on('qt')
+ depends_on('py-pyqt5 +qsci_api', type=('build', 'run'), when='+python ^qt@5')
+ depends_on('py-pyqt4 +qsci_api', type=('build', 'run'), when='+python ^qt@4')
+ depends_on('python', type=('build', 'run'), when='+python')
+
+ extends('python', when='+python')
@run_before('qmake')
def chdir(self):
@@ -66,3 +70,73 @@ class Qscintilla(QMakePackage):
makefile.filter(r'\$\(INSTALL_ROOT\)' +
self.spec['qt'].prefix, '$(INSTALL_ROOT)')
make('install')
+
+ @run_after('install')
+ def make_qsci(self):
+ if '+python' in self.spec:
+ if '^py-pyqt4' in self.spec:
+ py_pyqtx = 'py-pyqt4'
+ pyqtx = 'PyQt4'
+ elif '^py-pyqt5' in self.spec:
+ py_pyqtx = 'py-pyqt5'
+ pyqtx = 'PyQt5'
+
+ with working_dir(join_path(self.stage.source_path, 'Python')):
+ pydir = join_path(
+ self.prefix,
+ self.spec['python'].package.site_packages_dir,
+ pyqtx)
+ mkdirp(os.path.join(self.prefix.share.sip, pyqtx))
+ python = self.spec['python'].command
+ python('configure.py', '--pyqt=' + pyqtx,
+ '--sip=' + self.spec['py-sip'].prefix.bin.sip,
+ '--qsci-incdir=' + self.spec.prefix.include,
+ '--qsci-libdir=' + self.spec.prefix.lib,
+ '--qsci-sipdir=' +
+ os.path.join(self.prefix.share.sip, pyqtx),
+ '--apidir=' + self.prefix.share.qsci,
+ '--destdir=' + pydir,
+ '--pyqt-sipdir=' + os.path.join(
+ self.spec[py_pyqtx].prefix.share.sip, pyqtx),
+ '--sip-incdir=' +
+ join_path(self.spec['py-sip'].prefix.include,
+ 'python' +
+ str(self.spec['python'].version.up_to(2))),
+ '--stubsdir=' + pydir)
+
+ # Fix build errors
+ # "QAbstractScrollArea: No such file or directory"
+ # "qprinter.h: No such file or directory"
+ # ".../Qsci.so: undefined symbol: _ZTI10Qsci...."
+ qscipro = FileFilter('Qsci/Qsci.pro')
+ if '^qt@4' in self.spec:
+ qtx = 'qt4'
+ elif '^qt@5' in self.spec:
+ qtx = 'qt5'
+
+ link_qscilibs = 'LIBS += -L' + self.prefix.lib +\
+ ' -lqscintilla2_' + qtx
+ qscipro.filter('TEMPLATE = lib',
+ 'TEMPLATE = lib\nQT += widgets' +
+ '\nQT += printsupport\n' + link_qscilibs)
+
+ make()
+
+ # Fix installation prefixes
+ makefile = FileFilter('Makefile')
+ makefile.filter(r'\$\(INSTALL_ROOT\)', '')
+ makefile = FileFilter('Qsci/Makefile')
+ makefile.filter(r'\$\(INSTALL_ROOT\)', '')
+
+ make('install')
+
+ @run_after('install')
+ def extend_path_setup(self):
+ # See github issue #14121 and PR #15297
+ module = self.spec['py-sip'].variants['module'].value
+ if module != 'sip':
+ module = module.split('.')[0]
+ with working_dir(site_packages_dir):
+ with open(os.path.join(module, '__init__.py'), 'w') as f:
+ f.write('from pkgutil import extend_path\n')
+ f.write('__path__ = extend_path(__path__, __name__)\n')