diff --git a/Debian/Deb.hs b/Debian/Deb.hs
--- a/Debian/Deb.hs
+++ b/Debian/Deb.hs
@@ -4,15 +4,15 @@
 import Control.Monad
 
 import Debian.Control.Common
+import System.Directory (canonicalizePath, getTemporaryDirectory)
 import System.Exit (ExitCode(..))
 import System.Process (readProcessWithExitCode)
 import System.Unix.Directory (withTemporaryDirectory, withWorkingDirectory)
-import System.Unix.FilePath (realpath)
 
 fields :: (ControlFunctions a) => FilePath -> IO (Control' a)
 fields debFP =
     withTemporaryDirectory ("fields.XXXXXX") $ \tmpdir ->
-      do debFP <- realpath debFP
+      do debFP <- canonicalizePath debFP
          withWorkingDirectory tmpdir $
            do (res, out, err) <- readProcessWithExitCode "ar" ["x",debFP,"control.tar.gz"] ""
               when (res /= ExitSuccess) (error $ "Dpkg.fields: " ++ show out ++ "\n" ++ show err ++ "\n" ++ show res)
diff --git a/Debian/GenBuildDeps.hs b/Debian/GenBuildDeps.hs
--- a/Debian/GenBuildDeps.hs
+++ b/Debian/GenBuildDeps.hs
@@ -137,18 +137,27 @@
                 map fst . filter (maybe True (== source) . snd) $ pairs
                 -- concat . map binaries . catMaybes . map snd . filter (\ (_, x) -> maybe True (== source) x) $ pairs
 
+-- | 
+data ReadyTarget a
+    = ReadyTarget { ready :: a
+                  -- ^ Some target whose build dependencies are all satisfied
+                  , waiting :: [a]
+                  -- ^ The targets that are waiting for the ready target
+                  , other :: [a]
+                  -- ^ The rest of the targets that need to be built
+                  }
+
 data BuildableInfo a
-    = BuildableInfo 
-      { readyTriples :: [(a, [a], [a])]
-      , allBlocked :: [a]
-      }
+    = BuildableInfo
+      { readyTargets :: [ReadyTarget a]
+      , allBlocked :: [a] }
     | CycleInfo
       { depPairs :: [(a, a)] }
 
--- |Given an ordering function representing the dependencies on a
--- list of packages, return a triple: One ready package, the packages
--- that depend on the ready package directly or indirectly, and all
--- the other packages.
+-- | Given an ordering function representing the dependencies on a
+-- list of packages, return a ReadyTarget triple: One ready package,
+-- the packages that depend on the ready package directly or
+-- indirectly, and all the other packages.
 buildable :: (a -> a -> Ordering) -> [a] -> BuildableInfo a
 buildable cmp packages =
     -- Find all packages which can't reach any other packages in the
@@ -160,14 +169,15 @@
       -- We have some buildable packages, return them along with
       -- the list of packages each one directly blocks
       (allReady, blocked) ->
-          BuildableInfo 
-          { readyTriples = map (makeTriple blocked allReady) allReady,
-            allBlocked = map ofVertex blocked }
+          BuildableInfo { readyTargets = map (makeReady blocked allReady) allReady
+                        , allBlocked = map ofVertex blocked }
     where
-      makeTriple blocked ready thisReady =
+      makeReady blocked ready thisReady =
           let otherReady = filter (/= thisReady) ready
               (directlyBlocked, otherBlocked) = partition (\ x -> elem x (reachable isDep thisReady)) blocked in
-          (ofVertex thisReady, map ofVertex directlyBlocked, map ofVertex (otherReady ++ otherBlocked))
+          ReadyTarget { ready = ofVertex thisReady
+                      , waiting = map ofVertex directlyBlocked
+                      , other = map ofVertex (otherReady ++ otherBlocked) }
       --allDeps x = (ofVertex x, map ofVertex (filter (/= x) (reachable hasDep x)))
       isDep = buildG (0, length packages - 1) edges'
       edges' = map (\ (a, b) -> (b, a)) edges''
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -2,9 +2,9 @@
 
 import Distribution.Simple
 import Distribution.Simple.Program
-import System.Cmd
 import System.Directory
 import System.Exit
+import System.Process
 
 main = copyFile "debian/changelog" "changelog" >>
        defaultMainWithHooks simpleUserHooks {
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,21 @@
+haskell-debian (3.81.3) unstable; urgency=low
+
+  * Remove spurious dependency on Cabal.
+
+ -- David Fox <dsf@seereason.com>  Tue, 15 Jul 2014 06:58:42 -0700
+
+haskell-debian (3.81.2) unstable; urgency=low
+
+  * Update debian build dependencies.
+
+ -- David Fox <dsf@seereason.com>  Sat, 05 Jul 2014 22:30:43 -0700
+
+haskell-debian (3.81.1) unstable; urgency=low
+
+  * Modernize cabal file.
+
+ -- David Fox <dsf@seereason.com>  Sat, 17 May 2014 06:36:43 -0700
+
 haskell-debian (3.81) unstable; urgency=low
 
   * Replace library pretty and library ansi-wl-pprint with an ultra-simple
diff --git a/debian.cabal b/debian.cabal
--- a/debian.cabal
+++ b/debian.cabal
@@ -1,5 +1,5 @@
 Name:           debian
-Version:        3.81
+Version:        3.81.3
 License:        BSD3
 License-File:   debian/copyright
 Author:         David Fox <dsf@seereason.com>, Jeremy Shaw <jeremy@seereason.com>, Clifford Beshers <beshers@seereason.com>
@@ -8,7 +8,7 @@
 Homepage:       http://src.seereason.com/haskell-debian
 Build-Type:     Simple
 Synopsis:       Modules for working with the Debian package system
-Cabal-Version: >= 1.6
+Cabal-Version: >= 1.9
 Description:
   This library includes modules covering some basic data types defined by
   the Debian policy manual - version numbers, control file syntax, etc.
@@ -16,9 +16,6 @@
   Test/Main.hs, Test/Changes.hs, Test/Dependencies.hs,
   Test/SourcesList.hs, Test/VersionPolicy.hs, Test/Versions.hs, Test/Control.hs, changelog, debian/changelog, debian/changelog.pre-debian
 
-Flag cabal19
- Description: True if Cabal >= 1.9 is available
-
 Flag listlike
  Description: Use process-listlike instead of process-extra
  Default: True
@@ -52,12 +49,6 @@
  else
    build-depends: process-extras
  ghc-options: -Wall -O2
- if flag(cabal19)
-   build-depends: Cabal >= 1.9
-   cpp-options: -DCABAL19
- else
-   build-depends: Cabal >= 1.8
-   cpp-options: -DCABAL18
  Extensions: ExistentialQuantification CPP
  Exposed-modules:
         Debian.Apt.Dependencies,
@@ -100,41 +91,29 @@
         Test.Versions
 
 Executable fakechanges
- Main-is: utils/FakeChanges.hs
+ Hs-Source-Dirs: utils
+ Main-is: FakeChanges.hs
+ Build-Depends: base, debian, directory, filepath
  ghc-options: -threaded -W -O2
  Extensions:           ExistentialQuantification CPP
- if flag(cabal19)
-   build-depends: Cabal >= 1.9
-   cpp-options: -DCABAL19
- else
-   build-depends: Cabal >= 1.8
-   cpp-options: -DCABAL18
 
 Executable debian-report
- Main-is: utils/Report.hs
+ Hs-Source-Dirs: utils
+ Main-is: Report.hs
+ Build-Depends: base, debian, HaXml, unix
  ghc-options: -threaded -W -O2
  C-Sources:           cbits/gwinsz.c
  Include-Dirs:        cbits
  Install-Includes:    gwinsz.h
  Extensions:           ExistentialQuantification CPP
  Build-Depends: pretty
- if flag(cabal19)
-   build-depends: Cabal >= 1.9
-   cpp-options: -DCABAL19
- else
-   build-depends: Cabal >= 1.8
-   cpp-options: -DCABAL18
 
 Executable apt-get-build-depends
- Main-is: utils/AptGetBuildDeps.hs
+ Hs-Source-Dirs: utils
+ Main-is: AptGetBuildDeps.hs
+ Build-Depends: base, debian, process
  ghc-options: -threaded -W -O2
  Extensions:           ExistentialQuantification CPP
- if flag(cabal19)
-   build-depends: Cabal >= 1.9
-   cpp-options: -DCABAL19
- else
-   build-depends: Cabal >= 1.8
-   cpp-options: -DCABAL18
 
 source-repository head
   type:     darcs
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,21 @@
+haskell-debian (3.81.3) unstable; urgency=low
+
+  * Remove spurious dependency on Cabal.
+
+ -- David Fox <dsf@seereason.com>  Tue, 15 Jul 2014 06:58:42 -0700
+
+haskell-debian (3.81.2) unstable; urgency=low
+
+  * Update debian build dependencies.
+
+ -- David Fox <dsf@seereason.com>  Sat, 05 Jul 2014 22:30:43 -0700
+
+haskell-debian (3.81.1) unstable; urgency=low
+
+  * Modernize cabal file.
+
+ -- David Fox <dsf@seereason.com>  Sat, 17 May 2014 06:36:43 -0700
+
 haskell-debian (3.81) unstable; urgency=low
 
   * Replace library pretty and library ansi-wl-pprint with an ultra-simple
diff --git a/debian/copyright b/debian/copyright
--- a/debian/copyright
+++ b/debian/copyright
@@ -38,3 +38,4 @@
 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/utils/FakeChanges.hs b/utils/FakeChanges.hs
--- a/utils/FakeChanges.hs
+++ b/utils/FakeChanges.hs
@@ -3,8 +3,8 @@
 import Debian.Util.FakeChanges
 import System.Environment
 import System.Console.GetOpt
+import System.Directory (canonicalizePath)
 import System.FilePath
-import System.Unix.FilePath (realpath)
 
 data Flag 
     = OutputDir FilePath
@@ -32,7 +32,7 @@
        (changesFP, contents) <- fakeChanges files
        outdir <-
            case opts of
-             [OutputDir dir] -> realpath dir
+             [OutputDir dir] -> canonicalizePath dir
              _ -> return "."
        writeFile (outdir </> changesFP) $! contents
 
