diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py index da7088640f..6697e00e40 100644 --- a/lib/spack/spack/__init__.py +++ b/lib/spack/spack/__init__.py @@ -26,7 +26,7 @@ import tempfile from llnl.util.filesystem import * -# This lives in $prefix/lib/spac/spack/__file__ +# This lives in $prefix/lib/spack/spack/__file__ prefix = ancestor(__file__, 4) # The spack script itself diff --git a/lib/spack/spack/cmd/install.py b/lib/spack/spack/cmd/install.py index 2374d02feb..2c2deb2803 100644 --- a/lib/spack/spack/cmd/install.py +++ b/lib/spack/spack/cmd/install.py @@ -43,6 +43,9 @@ def setup_parser(subparser): subparser.add_argument( '-n', '--no-checksum', action='store_true', dest='no_checksum', help="Do not check packages against checksum") + subparser.add_argument( + '--fake', action='store_true', dest='fake', + help="Fake install. Just remove the prefix and touch a fake file in it.") subparser.add_argument( 'packages', nargs=argparse.REMAINDER, help="specs of packages to install") @@ -59,4 +62,5 @@ def install(parser, args): package = spack.db.get(spec) package.do_install(keep_prefix=args.keep_prefix, keep_stage=args.keep_stage, - ignore_deps=args.ignore_deps) + ignore_deps=args.ignore_deps, + fake=args.fake) diff --git a/lib/spack/spack/hooks/__init__.py b/lib/spack/spack/hooks/__init__.py index 4f0d574e49..98b7f2323f 100644 --- a/lib/spack/spack/hooks/__init__.py +++ b/lib/spack/spack/hooks/__init__.py @@ -47,8 +47,11 @@ def all_hook_modules(): modules = [] for name in list_modules(spack.hooks_path): + mod_name = __name__ + '.' + name path = join_path(spack.hooks_path, name) + ".py" - modules.append(imp.load_source('spack.hooks', path)) + mod = imp.load_source(mod_name, path) + modules.append(mod) + return modules diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index bb6180c521..9c67b0bb51 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -709,9 +709,10 @@ def do_install(self, **kwargs): Package implementations should override install(). """ # whether to keep the prefix on failure. Default is to destroy it. - keep_prefix = kwargs.get('keep_prefix', False) - keep_stage = kwargs.get('keep_stage', False) - ignore_deps = kwargs.get('ignore_deps', False) + keep_prefix = kwargs.get('keep_prefix', False) + keep_stage = kwargs.get('keep_stage', False) + ignore_deps = kwargs.get('ignore_deps', False) + fake_install = kwargs.get('fake', False) if not self.spec.concrete: raise ValueError("Can only install concrete packages.") @@ -725,7 +726,8 @@ def do_install(self, **kwargs): if not ignore_deps: self.do_install_dependencies() - self.do_patch() + if not fake_install: + self.do_patch() # Fork a child process to do the build. This allows each # package authors to have full control over their environment, @@ -750,8 +752,14 @@ 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 real work. - self.install(self.spec, self.prefix) + if fake_install: + mkdirp(self.prefix.bin) + touch(join_path(self.prefix.bin, 'fake')) + mkdirp(self.prefix.lib) + mkdirp(self.prefix.man1) + else: + # 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):