Source code for spack.build_systems.scons

# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)


import inspect

from spack.directives import depends_on
from spack.package import PackageBase, run_after


[docs]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 = ['build_test'] depends_on('scons', type='build')
[docs] def build_args(self, spec, prefix): """Arguments to pass to build.""" return []
[docs] def build(self, spec, prefix): """Build the package.""" args = self.build_args(spec, prefix) inspect.getmodule(self).scons(*args)
[docs] def install_args(self, spec, prefix): """Arguments to pass to install.""" return []
[docs] def install(self, spec, prefix): """Install the package.""" args = self.install_args(spec, prefix) inspect.getmodule(self).scons('install', *args)
# Testing
[docs] def build_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)