From 314120212d5c8be288b000e32991b00b8b20deee Mon Sep 17 00:00:00 2001
From: Todd Gamblin <tgamblin@llnl.gov>
Date: Wed, 8 Apr 2015 00:22:46 -0700
Subject: Complete diy command.

---
 lib/spack/spack/cmd/diy.py | 44 ++++++++++++++++++++++++++++++++++++++++----
 1 file 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,19 +22,29 @@
 # 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.
-- 
cgit v1.2.3-70-g09d2