spack build, spack configure : added commands
This commit is contained in:
parent
484aaf50cc
commit
bdf4832269
43
lib/spack/spack/cmd/build.py
Normal file
43
lib/spack/spack/cmd/build.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 LICENSE file 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 spack.cmd.configure as cfg
|
||||||
|
|
||||||
|
from spack import *
|
||||||
|
|
||||||
|
description = 'Stops at build stage when installing a package, if possible'
|
||||||
|
|
||||||
|
build_system_to_phase = {
|
||||||
|
CMakePackage: 'build',
|
||||||
|
AutotoolsPackage: 'build'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def setup_parser(subparser):
|
||||||
|
cfg.setup_parser(subparser)
|
||||||
|
|
||||||
|
|
||||||
|
def build(parser, args):
|
||||||
|
cfg._stop_at_phase_during_install(args, build, build_system_to_phase)
|
90
lib/spack/spack/cmd/configure.py
Normal file
90
lib/spack/spack/cmd/configure.py
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 LICENSE file 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 argparse
|
||||||
|
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
import spack.cmd
|
||||||
|
import spack.cmd.install as inst
|
||||||
|
|
||||||
|
from spack import *
|
||||||
|
|
||||||
|
description = 'Stops at configuration stage when installing a package, if possible' # NOQA: ignore=E501
|
||||||
|
|
||||||
|
|
||||||
|
build_system_to_phase = {
|
||||||
|
CMakePackage: 'cmake',
|
||||||
|
AutotoolsPackage: 'configure'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def setup_parser(subparser):
|
||||||
|
subparser.add_argument(
|
||||||
|
'package',
|
||||||
|
nargs=argparse.REMAINDER,
|
||||||
|
help="spec of the package to install"
|
||||||
|
)
|
||||||
|
subparser.add_argument(
|
||||||
|
'-v', '--verbose',
|
||||||
|
action='store_true',
|
||||||
|
help="Print additional output during builds"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _stop_at_phase_during_install(args, calling_fn, phase_mapping):
|
||||||
|
if not args.package:
|
||||||
|
tty.die("configure requires at least one package argument")
|
||||||
|
|
||||||
|
# TODO: to be refactored with code in install
|
||||||
|
specs = spack.cmd.parse_specs(args.package, concretize=True)
|
||||||
|
if len(specs) != 1:
|
||||||
|
tty.error('only one spec can be installed at a time.')
|
||||||
|
spec = specs.pop()
|
||||||
|
pkg = spec.package
|
||||||
|
try:
|
||||||
|
key = [cls for cls in phase_mapping if isinstance(pkg, cls)].pop()
|
||||||
|
phase = phase_mapping[key]
|
||||||
|
# Install package dependencies if needed
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
inst.setup_parser(parser)
|
||||||
|
tty.msg('Checking dependencies for {0}'.format(args.package))
|
||||||
|
cli_args = ['-v'] if args.verbose else []
|
||||||
|
install_args = parser.parse_args(cli_args + ['--only=dependencies'])
|
||||||
|
install_args.package = args.package
|
||||||
|
inst.install(parser, install_args)
|
||||||
|
# Install package and stop at the given phase
|
||||||
|
cli_args = ['-v'] if args.verbose else []
|
||||||
|
install_args = parser.parse_args(cli_args + ['--only=package'])
|
||||||
|
install_args.package = args.package
|
||||||
|
inst.install(parser, install_args, stop_at=phase)
|
||||||
|
except IndexError:
|
||||||
|
tty.error(
|
||||||
|
'Package {0} has no {1} phase, or its {1} phase is not separated from install'.format( # NOQA: ignore=E501
|
||||||
|
spec.name, calling_fn.__name__)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def configure(parser, args):
|
||||||
|
_stop_at_phase_during_install(args, configure, build_system_to_phase)
|
@ -74,7 +74,7 @@ def setup_parser(subparser):
|
|||||||
help="Run tests during installation of a package.")
|
help="Run tests during installation of a package.")
|
||||||
|
|
||||||
|
|
||||||
def install(parser, args):
|
def install(parser, args, **kwargs):
|
||||||
if not args.package:
|
if not args.package:
|
||||||
tty.die("install requires at least one package argument")
|
tty.die("install requires at least one package argument")
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ def install(parser, args):
|
|||||||
|
|
||||||
# Parse cli arguments and construct a dictionary
|
# Parse cli arguments and construct a dictionary
|
||||||
# that will be passed to Package.do_install API
|
# that will be passed to Package.do_install API
|
||||||
kwargs = {
|
kwargs.update({
|
||||||
'keep_prefix': args.keep_prefix,
|
'keep_prefix': args.keep_prefix,
|
||||||
'keep_stage': args.keep_stage,
|
'keep_stage': args.keep_stage,
|
||||||
'install_deps': 'dependencies' in args.things_to_install,
|
'install_deps': 'dependencies' in args.things_to_install,
|
||||||
@ -96,7 +96,7 @@ def install(parser, args):
|
|||||||
'verbose': args.verbose,
|
'verbose': args.verbose,
|
||||||
'fake': args.fake,
|
'fake': args.fake,
|
||||||
'dirty': args.dirty
|
'dirty': args.dirty
|
||||||
}
|
})
|
||||||
|
|
||||||
# Spec from cli
|
# Spec from cli
|
||||||
specs = spack.cmd.parse_specs(args.package, concretize=True)
|
specs = spack.cmd.parse_specs(args.package, concretize=True)
|
||||||
|
@ -1263,13 +1263,9 @@ def build_process():
|
|||||||
# A StopIteration exception means that do_install
|
# A StopIteration exception means that do_install
|
||||||
# was asked to stop early from clients
|
# was asked to stop early from clients
|
||||||
tty.msg(e.message)
|
tty.msg(e.message)
|
||||||
except Exception:
|
tty.msg(
|
||||||
tty.warn("Keeping install prefix in place despite error.",
|
'Package stage directory : {0}'.format(self.stage.source_path)
|
||||||
"Spack will think this package is installed. " +
|
)
|
||||||
"Manually remove this directory to fix:",
|
|
||||||
self.prefix,
|
|
||||||
wrap=False)
|
|
||||||
raise
|
|
||||||
finally:
|
finally:
|
||||||
# Remove the install prefix if anything went wrong during install.
|
# Remove the install prefix if anything went wrong during install.
|
||||||
if not keep_prefix:
|
if not keep_prefix:
|
||||||
|
Loading…
Reference in New Issue
Block a user