summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAdam J. Stewart <ajstewart426@gmail.com>2017-08-04 16:52:10 -0500
committerGitHub <noreply@github.com>2017-08-04 16:52:10 -0500
commit7eb263effe3ac6f2f79e4f6c060b7ae96b7a9cc8 (patch)
treeb4a96b5d44a7bcc7ce4cd2bb7ae676a5c0efdc6a /lib
parentb8ed61cfea58c8cab5c86d6c0189512605890444 (diff)
downloadspack-7eb263effe3ac6f2f79e4f6c060b7ae96b7a9cc8.tar.gz
spack-7eb263effe3ac6f2f79e4f6c060b7ae96b7a9cc8.tar.bz2
spack-7eb263effe3ac6f2f79e4f6c060b7ae96b7a9cc8.tar.xz
spack-7eb263effe3ac6f2f79e4f6c060b7ae96b7a9cc8.zip
Add a SConsPackage base class (#4936)
* Add a SConsPackage base class * Make Matlab extendable * Most dependencies are actually required * Cantera requires older version of fmt
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/docs/packaging_guide.rst3
-rw-r--r--lib/spack/spack/__init__.py2
-rw-r--r--lib/spack/spack/build_systems/scons.py92
-rw-r--r--lib/spack/spack/cmd/build.py1
-rw-r--r--lib/spack/spack/cmd/create.py13
5 files changed, 104 insertions, 7 deletions
diff --git a/lib/spack/docs/packaging_guide.rst b/lib/spack/docs/packaging_guide.rst
index 5d7d69e3d7..af3f7b408a 100644
--- a/lib/spack/docs/packaging_guide.rst
+++ b/lib/spack/docs/packaging_guide.rst
@@ -2121,6 +2121,9 @@ The classes that are currently provided by Spack are:
| :py:class:`.QMakePackage` | Specialized class for packages |
| | build using QMake |
+-------------------------------+----------------------------------+
+ | :py:class:`.SConsPackage` | Specialized class for packages |
+ | | built using SCons |
+ +-------------------------------+----------------------------------+
| :py:class:`.WafPackage` | Specialized class for packages |
| | built using Waf |
+-------------------------------+----------------------------------+
diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py
index aca906f2e9..e8a010bb26 100644
--- a/lib/spack/spack/__init__.py
+++ b/lib/spack/spack/__init__.py
@@ -173,6 +173,7 @@ from spack.build_systems.makefile import MakefilePackage
from spack.build_systems.autotools import AutotoolsPackage
from spack.build_systems.cmake import CMakePackage
from spack.build_systems.qmake import QMakePackage
+from spack.build_systems.scons import SConsPackage
from spack.build_systems.waf import WafPackage
from spack.build_systems.python import PythonPackage
from spack.build_systems.r import RPackage
@@ -187,6 +188,7 @@ __all__ += [
'AutotoolsPackage',
'CMakePackage',
'QMakePackage',
+ 'SConsPackage',
'WafPackage',
'PythonPackage',
'RPackage',
diff --git a/lib/spack/spack/build_systems/scons.py b/lib/spack/spack/build_systems/scons.py
new file mode 100644
index 0000000000..694ed936cc
--- /dev/null
+++ b/lib/spack/spack/build_systems/scons.py
@@ -0,0 +1,92 @@
+##############################################################################
+# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/llnl/spack
+# Please also see the NOTICE and LICENSE files for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+
+import inspect
+
+from spack.directives import depends_on
+from spack.package import PackageBase, run_after
+
+
+class SConsPackage(PackageBase):
+ """Specialized class for packages built using SCons.
+
+ See http://scons.org/documentation.html for more information.
+
+ This class provides the following phases that can be overridden:
+
+ 1. :py:meth:`~.SConsPackage.build`
+ 2. :py:meth:`~.SConsPackage.install`
+
+ Packages that use SCons as a build system are less uniform than packages
+ that use other build systems. Developers can add custom subcommands or
+ variables that control the build. You will likely need to override
+ :py:meth:`~.SConsPackage.build_args` to pass the appropriate variables.
+ """
+ #: Phases of a SCons package
+ phases = ['build', 'install']
+
+ #: To be used in UI queries that require to know which
+ #: build-system class we are using
+ build_system_class = 'SConsPackage'
+
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['test']
+
+ depends_on('scons', type='build')
+
+ def build_args(self, spec, prefix):
+ """Arguments to pass to build."""
+ return []
+
+ def build(self, spec, prefix):
+ """Build the package."""
+ args = self.build_args(spec, prefix)
+
+ inspect.getmodule(self).scons(*args)
+
+ def install_args(self, spec, prefix):
+ """Arguments to pass to install."""
+ return []
+
+ def install(self, spec, prefix):
+ """Install the package."""
+ args = self.install_args(spec, prefix)
+
+ inspect.getmodule(self).scons('install', *args)
+
+ # Testing
+
+ def test(self):
+ """Run unit tests after build.
+
+ By default, does nothing. Override this if you want to
+ add package-specific tests.
+ """
+ pass
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/cmd/build.py b/lib/spack/spack/cmd/build.py
index 8ecaca9c12..a4821214d6 100644
--- a/lib/spack/spack/cmd/build.py
+++ b/lib/spack/spack/cmd/build.py
@@ -35,6 +35,7 @@ build_system_to_phase = {
AutotoolsPackage: 'build',
CMakePackage: 'build',
QMakePackage: 'build',
+ SConsPackage: 'build',
WafPackage: 'build',
PythonPackage: 'build',
PerlPackage: 'build',
diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index d8507d1108..ca49eb03fa 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -208,15 +208,14 @@ class QMakePackageTemplate(PackageTemplate):
class SconsPackageTemplate(PackageTemplate):
"""Provides appropriate overrides for SCons-based packages"""
- dependencies = """\
- # FIXME: Add additional dependencies if required.
- depends_on('scons', type='build')"""
+ base_class_name = 'SConsPackage'
body = """\
- def install(self, spec, prefix):
- # FIXME: Add logic to build and install here.
- scons('prefix={0}'.format(prefix))
- scons('install')"""
+ def build_args(self, spec, prefix):
+ # FIXME: Add arguments to pass to build.
+ # FIXME: If not needed delete this function
+ args = []
+ return args"""
class WafPackageTemplate(PackageTemplate):