From bff667051b1d23ebd2e8222f7458b980390c1c37 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Sun, 8 Sep 2019 10:48:50 -0500 Subject: Fix PyQt installation (#12479) * Fix PyQt installation * Switch dependency type * Replace SIP dependency with resource * Relax py-pyqt4 Qt dependency --- lib/spack/docs/build_systems/sippackage.rst | 12 ++++++-- lib/spack/spack/build_systems/sip.py | 44 +++++++++++++++++++++-------- 2 files changed, 41 insertions(+), 15 deletions(-) (limited to 'lib') diff --git a/lib/spack/docs/build_systems/sippackage.rst b/lib/spack/docs/build_systems/sippackage.rst index cb744e858f..1f0fb7b426 100644 --- a/lib/spack/docs/build_systems/sippackage.rst +++ b/lib/spack/docs/build_systems/sippackage.rst @@ -51,15 +51,21 @@ Build system dependencies ``SIPPackage`` requires several dependencies. Python is needed to run the ``configure.py`` build script, and to run the resulting Python libraries. Qt is needed to provide the ``qmake`` command. SIP is also -needed to build the package. All of these dependencies are automatically -added via the base class +needed to build the package. SIP is an unusual dependency in that it +must be installed in the same installation directory as the package, +so instead of a ``depends_on``, we use a ``resource``. All of these +dependencies are automatically added via the base class .. code-block:: python extends('python') depends_on('qt', type='build') - depends_on('py-sip', type='build') + + resource(name='sip', + url='https://www.riverbankcomputing.com/static/Downloads/sip/4.19.18/sip-4.19.18.tar.gz', + sha256='c0bd863800ed9b15dcad477c4017cdb73fa805c25908b0240564add74d697e1e', + destination='.') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/lib/spack/spack/build_systems/sip.py b/lib/spack/spack/build_systems/sip.py index 6d51ff57bd..da2c770ba7 100644 --- a/lib/spack/spack/build_systems/sip.py +++ b/lib/spack/spack/build_systems/sip.py @@ -4,11 +4,10 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import inspect -import os from llnl.util.filesystem import working_dir -from spack.directives import depends_on, extends -from spack.package import PackageBase, run_after +from spack.directives import depends_on, extends, resource +from spack.package import PackageBase, run_before, run_after class SIPPackage(PackageBase): @@ -32,22 +31,46 @@ class SIPPackage(PackageBase): # build-system class we are using build_system_class = 'SIPPackage' + #: Name of private sip module to install alongside package + sip_module = 'sip' + #: Callback names for install-time test install_time_test_callbacks = ['import_module_test'] extends('python') depends_on('qt') - depends_on('py-sip') - def configure_file(self): - """Returns the name of the configure file to use.""" - return 'configure.py' + resource(name='sip', + url='https://www.riverbankcomputing.com/static/Downloads/sip/4.19.18/sip-4.19.18.tar.gz', + sha256='c0bd863800ed9b15dcad477c4017cdb73fa805c25908b0240564add74d697e1e', + destination='.') def python(self, *args, **kwargs): """The python ``Executable``.""" inspect.getmodule(self).python(*args, **kwargs) + @run_before('configure') + def install_sip(self): + args = [ + '--sip-module={0}'.format(self.sip_module), + '--bindir={0}'.format(self.prefix.bin), + '--destdir={0}'.format(inspect.getmodule(self).site_packages_dir), + '--incdir={0}'.format(inspect.getmodule(self).python_include_dir), + '--sipdir={0}'.format(self.prefix.share.sip), + '--stubsdir={0}'.format(inspect.getmodule(self).site_packages_dir), + ] + + with working_dir('sip-4.19.18'): + self.python('configure.py', *args) + + inspect.getmodule(self).make() + inspect.getmodule(self).make('install') + + def configure_file(self): + """Returns the name of the configure file to use.""" + return 'configure.py' + def configure(self, spec, prefix): """Configure the package.""" configure = self.configure_file() @@ -58,11 +81,8 @@ class SIPPackage(PackageBase): '--verbose', '--confirm-license', '--qmake', spec['qt'].prefix.bin.qmake, - '--sip', spec['py-sip'].prefix.bin.sip, - '--sip-incdir', os.path.join( - spec['py-sip'].prefix, - spec['python'].package.python_include_dir - ), + '--sip', prefix.bin.sip, + '--sip-incdir', inspect.getmodule(self).python_include_dir, '--bindir', prefix.bin, '--destdir', inspect.getmodule(self).site_packages_dir, ]) -- cgit v1.2.3-70-g09d2