diff --git a/scripts/buildversion.py b/scripts/buildversion.py
index 1045049..ad47b90 100755
--- a/scripts/buildversion.py
+++ b/scripts/buildversion.py
@@ -4,7 +4,7 @@
 # Copyright (C) 2015  Kevin O'Connor <kevin@koconnor.net>
 #
 # This file may be distributed under the terms of the GNU GPLv3 license.
-import sys, os, subprocess, shlex, time, socket, optparse
+import sys, os, subprocess, shlex, time, socket, optparse, logging, traceback
 
 VERSION_FORMAT = """
 /* DO NOT EDIT!  This is an autogenerated file.  See scripts/buildversion.py. */
@@ -14,40 +14,51 @@
 
 # Run program and return the specified output
 def check_output(prog):
+    logging.debug("Running %s" % (repr(prog),))
     try:
         process = subprocess.Popen(shlex.split(prog), stdout=subprocess.PIPE)
         output = process.communicate()[0]
         retcode = process.poll()
     except OSError:
+        logging.debug("Exception on run: %s" % (traceback.format_exc(),))
         return ""
+    logging.debug("Got (code=%s): %s" % (retcode, repr(output)))
     if retcode:
         return ""
     try:
         return output.decode()
     except UnicodeError:
+        logging.debug("Exception on decode: %s" % (traceback.format_exc(),))
         return ""
 
 # Obtain version info from "git" program
 def git_version():
     if not os.path.exists('.git'):
+        logging.debug("No '.git' file/directory found")
         return ""
-    return check_output("git describe --tags --long --dirty").strip()
+    ver = check_output("git describe --tags --long --dirty").strip()
+    logging.debug("Got git version: %s" % (repr(ver),))
+    return ver
 
 # Look for version in a ".version" file.  Official release tarballs
 # have this file (see scripts/tarball.sh).
 def file_version():
     if not os.path.isfile('.version'):
+        logging.debug("No '.version' file found")
         return ""
     try:
         f = open('.version', 'r')
         ver = f.readline().strip()
         f.close()
     except OSError:
+        logging.debug("Exception on read: %s" % (traceback.format_exc(),))
         return ""
+    logging.debug("Got .version: %s" % (repr(ver),))
     return ver
 
 # Generate an output file with the version information
 def write_version(outfile, version, toolstr):
+    logging.debug("Write file %s and %s" % (repr(version), repr(toolstr)))
     sys.stdout.write("Version: %s\n" % (version,))
     f = open(outfile, 'w')
     f.write(VERSION_FORMAT % (version, toolstr))
@@ -74,6 +85,8 @@
             continue
         # Check for any version conflicts
         if versions[isbinutils] and versions[isbinutils] != ver:
+            logging.debug("Mixed version %s vs %s" % (
+                repr(versions[isbinutils]), repr(ver)))
             vers[isbinutils] = "mixed"
             continue
         versions[isbinutils] = ver
@@ -88,11 +101,15 @@
                     help="extra version string to append to version")
     opts.add_option("-t", "--tools", dest="tools", default="",
                     help="list of build programs to extract version from")
+    opts.add_option("-v", action="store_true", dest="verbose",
+                    help="enable debug messages")
 
     options, args = opts.parse_args()
     if len(args) != 1:
         opts.error("Incorrect arguments")
     outfile = args[0]
+    if options.verbose:
+        logging.basicConfig(level=logging.DEBUG)
 
     cleanbuild, toolstr = tool_versions(options.tools)
 
