diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/cmd/diy.py | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/lib/spack/spack/cmd/diy.py b/lib/spack/spack/cmd/diy.py index 62ab2d11fe..6e7f10fba6 100644 --- a/lib/spack/spack/cmd/diy.py +++ b/lib/spack/spack/cmd/diy.py @@ -22,20 +22,30 @@ # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## +import sys +import os from external import argparse + +import llnl.util.tty as tty + import spack import spack.cmd +from spack.cmd.edit import edit_package +from spack.stage import DIYStage -description = "Build a package for an existing source directory." +description = "Do-It-Yourself: build from an existing source directory." def setup_parser(subparser): subparser.add_argument( '-i', '--ignore-dependencies', action='store_true', dest='ignore_deps', help="Do not try to install dependencies of requested packages.") subparser.add_argument( - '--keep-prefix', action='store_true', dest='keep_prefix', + '--keep-prefix', action='store_true', help="Don't remove the install prefix if installation fails.") subparser.add_argument( + '--skip-patch', action='store_true', + help="Skip patching for the DIY build.") + subparser.add_argument( 'spec', nargs=argparse.REMAINDER, help="specs to use for install. Must contain package AND verison.") @@ -44,14 +54,40 @@ def diy(self, args): if not args.spec: tty.die("spack diy requires a package spec argument.") - specs = spack.cmd.parse_specs(args.specs, concretize=True) + specs = spack.cmd.parse_specs(args.spec) if len(specs) > 1: tty.die("spack diy only takes one spec.") spec = specs[0] + if not spack.db.exists(spec.name): + tty.warn("No such package: %s" % spec.name) + create = tty.get_yes_or_no("Create this package?", default=False) + if not create: + tty.msg("Exiting without creating.") + sys.exit(1) + else: + tty.msg("Running 'spack edit -f %s'" % spec.name) + edit_package(spec.name, True) + return + + if not spec.version.concrete: + tty.die("spack diy spec must have a single, concrete version.") + + spec.concretize() package = spack.db.get(spec) + if package.installed: + tty.error("Already installed in %s" % package.prefix) + tty.msg("Uninstall or try adding a version suffix for this DIY build.") + sys.exit(1) + + # Forces the build to run out of the current directory. + package.stage = DIYStage(os.getcwd()) + + # TODO: make this an argument, not a global. + spack.do_checksum = False + package.do_install( keep_prefix=args.keep_prefix, ignore_deps=args.ignore_deps, - keep_stage=True) # don't remove stage dir for diy. + keep_stage=True) # don't remove source dir for DIY. |