diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2012, Kevin Quick
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Kevin Quick nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+import Distribution.Simple
+main :: IO ()
+main = defaultMain
diff --git a/cabal-progdeps.cabal b/cabal-progdeps.cabal
new file mode 100644
--- /dev/null
+++ b/cabal-progdeps.cabal
@@ -0,0 +1,40 @@
+name:          cabal-progdeps
+version:       1.0
+synopsis:      Show dependencies of program being built in current directory
+
+description:
+
+  This utility can be used to display the version dependency
+  information for the program being built in the current directory.
+  Essentially it parses the dist/setup-config and displays the
+  information in a readable format.  This can be very helpful when
+  adding version constraints to your package's dependencies in that it
+  shows what your package is currently built (or configured to be
+  built) with.
+  .
+  n.b. It's called "progdeps" instead of "pkgdeps" because it's
+  examining the build information in the current directory and not
+  actual packages.
+  .
+  Usage: cabal-progdeps
+  .
+  Works with cabal-dev and cabal.
+  .
+
+category:      Distribution
+license:       BSD3
+license-file:  LICENSE
+author:        Kevin Quick
+maintainer:    quick@sparq.org
+build-type:    Simple
+cabal-version: >= 1.2
+
+
+Executable cabal-progdeps
+  Main-is: progdeps.hs
+  Build-Depends:
+    base >= 4 && < 5,
+    Cabal > 1.10 && < 2,
+    filepath >= 1.2 && < 1.3,
+    directory >= 1.1 && < 1.2
+  ghc-options:         -Wall
diff --git a/progdeps.hs b/progdeps.hs
new file mode 100644
--- /dev/null
+++ b/progdeps.hs
@@ -0,0 +1,61 @@
+module Main where
+
+import System.Directory (getCurrentDirectory)
+import System.FilePath ( (</>) )
+import System.Exit (exitSuccess, exitWith, ExitCode(..))
+import System.Environment (getArgs, getProgName)
+import Data.List (intercalate)
+import Data.Char (toUpper)
+import Control.Applicative ( (<$>) )
+import Control.Monad (when)
+import Distribution.Simple.LocalBuildInfo
+import Distribution.InstalledPackageInfo (showInstalledPackageInfoField
+                                         -- ,showInstalledPackageInfo
+                                         )
+import Distribution.Simple.PackageIndex (topologicalOrder)
+
+exitUsage :: IO ()
+exitUsage = do  putStr "Usage: "
+                putStr =<< getProgName
+                putStrLn " [progdir]"
+                putStrLn ""
+                putStrLn "  Shows the current package dependency versions for the"
+                putStrLn "  cabal-built program in progdir (default=current directory)."
+                exitWith $ ExitFailure 2
+
+mktable :: [[String]] -> [String]
+mktable cols = zipLists "" (mkcol widths) cols
+    where zipLists e f ls = if all null ls then []
+                            else f (map (headOr e) ls) : zipLists e f (map (tailOr []) ls)
+          headOr d = head . \l -> l ++ [d]
+          tailOr d = tail . \l -> l ++ d
+          widths = [ maximum (map length c) | c <- cols ]
+          mkcol _ [] = ""
+          mkcol s (a:bs) = let (sz:szs) = s
+                               fillsz = if length a < sz then sz - length a else 0
+                               fill = replicate fillsz ' '
+                           in a ++ fill ++ "| " ++ mkcol szs bs
+
+main :: IO ()
+main = do args <- getArgs
+          when ("-h" `elem` args) exitUsage
+          when ("--help" `elem` args) exitUsage
+          when (length args > 1) exitUsage
+          curdir <- return . head . (++) args . flip (:) [] =<< getCurrentDirectory
+          let progcfgName = curdir </> "dist" </> "setup-config"
+          progcfg <- lines <$> readFile progcfgName
+          -- always 2 lines: a version declaration followed by the LocalBuildInfo `show'
+          let cdata = (read . head . tail $ progcfg) :: LocalBuildInfo
+              showfld f = blnkOrVal f . showInstalledPackageInfoField $ f
+              blnkOrVal f = maybe (const " ") (\g -> drop (2 + length f) . g)
+              pkglist = topologicalOrder . installedPkgs $ cdata
+              fldcol n = (:) (map toUpper n) . map (showfld n)
+          putStrLn $ head progcfg
+          -- putStrLn . show . withPrograms $ cdata
+          putStrLn . intercalate "\n" $ mktable [ fldcol "name" pkglist
+                                                , fldcol "version" pkglist
+                                                , fldcol "stability" pkglist
+                                                , fldcol "category" pkglist
+                                                ]
+          -- putStrLn . intercalate "\n\n" . map showInstalledPackageInfo $ pkglist
+          exitSuccess
