Minor cleanup and bug fixes.

This commit is contained in:
Todd Gamblin 2014-06-17 19:26:45 -05:00
parent c8414a8a40
commit 4608b674e5
7 changed files with 26 additions and 20 deletions

View file

@ -22,6 +22,9 @@
# along with this program; if not, write to the Free Software Foundation, # along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # 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 os
import re import re
import shutil import shutil

View file

@ -26,9 +26,9 @@
from subprocess import check_call, check_output from subprocess import check_call, check_output
import llnl.util.tty as tty import llnl.util.tty as tty
from llnl.util.filesystem import join_path
import spack import spack
from spack import join_path
description = "Create a new installation of spack in another prefix" description = "Create a new installation of spack in another prefix"

View file

@ -51,6 +51,15 @@ def concretize_version(self, spec):
"""If the spec is already concrete, return. Otherwise take """If the spec is already concrete, return. Otherwise take
the most recent available version, and default to the package's the most recent available version, and default to the package's
version if there are no avaialble versions. 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. # return if already concrete.
if spec.versions.concrete: if spec.versions.concrete:
@ -100,15 +109,6 @@ def concretize_compiler(self, spec):
this one has a strict compiler requirement. Otherwise, try to this one has a strict compiler requirement. Otherwise, try to
build with the compiler that will be used by libraries that build with the compiler that will be used by libraries that
link to this one, to maximize compatibility. 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: if spec.compiler and spec.compiler.concrete:
return return

View file

@ -654,8 +654,9 @@ def do_install(self, **kwargs):
try: try:
tty.msg("Building %s." % self.name) tty.msg("Building %s." % self.name)
# create the install directory (allow the layout to handle # create the install directory. The install layout
# this in case it needs to add extra files) # handles this in case so that it can use whatever
# package naming scheme it likes.
spack.install_layout.make_path_for_spec(self.spec) spack.install_layout.make_path_for_spec(self.spec)
# Set up process's build environment before running install. # 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_build_environment_variables(self)
build_env.set_module_variables_for_package(self) build_env.set_module_variables_for_package(self)
# Subclasses implement install() to do the build & # Subclasses implement install() to do the real work.
# install work.
self.install(self.spec, self.prefix) self.install(self.spec, self.prefix)
# Ensure that something was actually installed.
if not os.listdir(self.prefix): if not os.listdir(self.prefix):
raise InstallError( raise InstallError(
"Install failed for %s. Nothing was installed!" "Install failed for %s. Nothing was installed!"
% self.name) % self.name)
if not keep_stage:
# On successful install, remove the stage. # On successful install, remove the stage.
# Leave it if there is an error if not keep_stage:
self.stage.destroy() self.stage.destroy()
tty.msg("Successfully installed %s" % self.name) tty.msg("Successfully installed %s" % self.name)

View file

@ -145,7 +145,7 @@ def _setup(self):
back to making the stage inside spack.stage_path. back to making the stage inside spack.stage_path.
""" """
# Create the top-level stage directory # Create the top-level stage directory
spack.mkdirp(spack.stage_path) mkdirp(spack.stage_path)
self._cleanup_dead_links() self._cleanup_dead_links()
# If this is a named stage, then construct a named path. # If this is a named stage, then construct a named path.

View file

@ -22,6 +22,7 @@
# along with this program; if not, write to the Free Software Foundation, # along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
import os
import unittest import unittest
import shutil import shutil
from contextlib import closing from contextlib import closing
@ -82,11 +83,12 @@ def test_install_and_uninstall(self):
# Get a basic concrete spec for the trivial install package. # Get a basic concrete spec for the trivial install package.
spec = Spec(install_test_package) spec = Spec(install_test_package)
spec.concretize() spec.concretize()
self.assertTrue(spec.concrete)
# Get the package # Get the package
pkg = spack.db.get(spec) 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) archive_path = join_path(self.stage.path, archive_name)
pkg.url = 'file://' + archive_path pkg.url = 'file://' + archive_path
@ -94,5 +96,5 @@ def test_install_and_uninstall(self):
pkg.do_install() pkg.do_install()
pkg.do_uninstall() pkg.do_uninstall()
except Exception, e: except Exception, e:
if pkg: pkg.remove_prefix() pkg.remove_prefix()
raise raise

View file

@ -22,6 +22,8 @@
# along with this program; if not, write to the Free Software Foundation, # along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
__all__ = ['Executable', 'when']
import os import os
import sys import sys
import re import re
@ -30,7 +32,6 @@
import llnl.util.tty as tty import llnl.util.tty as tty
from spack.error import SpackError from spack.error import SpackError
class Executable(object): class Executable(object):
"""Class representing a program that can be run on the command line.""" """Class representing a program that can be run on the command line."""
def __init__(self, name): def __init__(self, name):