From 4608b674e512595f934fe942187847abae950bb4 Mon Sep 17 00:00:00 2001 From: Todd Gamblin Date: Tue, 17 Jun 2014 19:26:45 -0500 Subject: [PATCH] Minor cleanup and bug fixes. --- lib/spack/llnl/util/filesystem.py | 3 +++ lib/spack/spack/cmd/bootstrap.py | 2 +- lib/spack/spack/concretize.py | 18 +++++++++--------- lib/spack/spack/package.py | 12 ++++++------ lib/spack/spack/stage.py | 2 +- lib/spack/spack/test/install.py | 6 ++++-- lib/spack/spack/util/executable.py | 3 ++- 7 files changed, 26 insertions(+), 20 deletions(-) diff --git a/lib/spack/llnl/util/filesystem.py b/lib/spack/llnl/util/filesystem.py index 2ec8c61cfa..80341f3ddc 100644 --- a/lib/spack/llnl/util/filesystem.py +++ b/lib/spack/llnl/util/filesystem.py @@ -22,6 +22,9 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## +__all__ = ['install', 'expand_user', 'working_dir', 'touch', 'mkdirp', + 'join_path', 'ancestor', 'can_access'] + import os import re import shutil diff --git a/lib/spack/spack/cmd/bootstrap.py b/lib/spack/spack/cmd/bootstrap.py index 11fc67e519..31c908d42b 100644 --- a/lib/spack/spack/cmd/bootstrap.py +++ b/lib/spack/spack/cmd/bootstrap.py @@ -26,9 +26,9 @@ from subprocess import check_call, check_output import llnl.util.tty as tty +from llnl.util.filesystem import join_path import spack -from spack import join_path description = "Create a new installation of spack in another prefix" diff --git a/lib/spack/spack/concretize.py b/lib/spack/spack/concretize.py index 312b9ce1b1..d4c7c25dca 100644 --- a/lib/spack/spack/concretize.py +++ b/lib/spack/spack/concretize.py @@ -51,6 +51,15 @@ def concretize_version(self, spec): """If the spec is already concrete, return. Otherwise take the most recent available version, and default to the package's version if there are no avaialble versions. + + TODO: In many cases we probably want to look for installed + versions of each package and use an installed version + if we can link to it. The policy implemented here will + tend to rebuild a lot of stuff becasue it will prefer + a compiler in the spec to any compiler already- + installed things were built with. There is likely + some better policy that finds some middle ground + between these two extremes. """ # return if already concrete. if spec.versions.concrete: @@ -100,15 +109,6 @@ def concretize_compiler(self, spec): this one has a strict compiler requirement. Otherwise, try to build with the compiler that will be used by libraries that link to this one, to maximize compatibility. - - TODO: In many cases we probably want to look for installed - versions of each package and use *that* version if we - can link to it. The policy implemented here will - tend to rebuild a lot of stuff becasue it will prefer - a compiler in the spec to any compiler already- - installed things were built with. There is likely - some better policy that finds some middle ground - between these two extremes. """ if spec.compiler and spec.compiler.concrete: return diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index fff471599a..ef8b639adf 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -654,8 +654,9 @@ def do_install(self, **kwargs): try: tty.msg("Building %s." % self.name) - # create the install directory (allow the layout to handle - # this in case it needs to add extra files) + # create the install directory. The install layout + # handles this in case so that it can use whatever + # package naming scheme it likes. spack.install_layout.make_path_for_spec(self.spec) # Set up process's build environment before running install. @@ -663,18 +664,17 @@ def do_install(self, **kwargs): build_env.set_build_environment_variables(self) build_env.set_module_variables_for_package(self) - # Subclasses implement install() to do the build & - # install work. + # Subclasses implement install() to do the real work. self.install(self.spec, self.prefix) + # Ensure that something was actually installed. if not os.listdir(self.prefix): raise InstallError( "Install failed for %s. Nothing was installed!" % self.name) + # On successful install, remove the stage. if not keep_stage: - # On successful install, remove the stage. - # Leave it if there is an error self.stage.destroy() tty.msg("Successfully installed %s" % self.name) diff --git a/lib/spack/spack/stage.py b/lib/spack/spack/stage.py index df2fe83dac..8574df71e9 100644 --- a/lib/spack/spack/stage.py +++ b/lib/spack/spack/stage.py @@ -145,7 +145,7 @@ def _setup(self): back to making the stage inside spack.stage_path. """ # Create the top-level stage directory - spack.mkdirp(spack.stage_path) + mkdirp(spack.stage_path) self._cleanup_dead_links() # If this is a named stage, then construct a named path. diff --git a/lib/spack/spack/test/install.py b/lib/spack/spack/test/install.py index ac3753c948..a92bd92289 100644 --- a/lib/spack/spack/test/install.py +++ b/lib/spack/spack/test/install.py @@ -22,6 +22,7 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## +import os import unittest import shutil from contextlib import closing @@ -82,11 +83,12 @@ def test_install_and_uninstall(self): # Get a basic concrete spec for the trivial install package. spec = Spec(install_test_package) spec.concretize() + self.assertTrue(spec.concrete) # Get the package pkg = spack.db.get(spec) - # Fake some values + # Fake the URL for the package so it downloads from a file. archive_path = join_path(self.stage.path, archive_name) pkg.url = 'file://' + archive_path @@ -94,5 +96,5 @@ def test_install_and_uninstall(self): pkg.do_install() pkg.do_uninstall() except Exception, e: - if pkg: pkg.remove_prefix() + pkg.remove_prefix() raise diff --git a/lib/spack/spack/util/executable.py b/lib/spack/spack/util/executable.py index 6dea46a5c8..d65f7ed922 100644 --- a/lib/spack/spack/util/executable.py +++ b/lib/spack/spack/util/executable.py @@ -22,6 +22,8 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## +__all__ = ['Executable', 'when'] + import os import sys import re @@ -30,7 +32,6 @@ import llnl.util.tty as tty from spack.error import SpackError - class Executable(object): """Class representing a program that can be run on the command line.""" def __init__(self, name):