diff --git a/ats-pkg.cabal b/ats-pkg.cabal
--- a/ats-pkg.cabal
+++ b/ats-pkg.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: ats-pkg
-version: 2.6.0.3
+version: 2.6.1.0
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
@@ -51,6 +51,7 @@
         Language.ATS.Package.Dependency
         Language.ATS.Package.Compiler
         Language.ATS.Package.Build
+        Language.ATS.Package.Build.Cabal
         Language.ATS.Package.Build.IO
         Language.ATS.Package.Upgrade
         Language.ATS.Package.Config
diff --git a/src/Language/ATS/Package.hs b/src/Language/ATS/Package.hs
--- a/src/Language/ATS/Package.hs
+++ b/src/Language/ATS/Package.hs
@@ -12,6 +12,7 @@
                             , upgradeBin
                             -- * Cabal helper functions
                             , cabalHooks
+                            , atsPolyglotBuild
                             -- * Types
                             , Version (..)
                             , Pkg (..)
@@ -30,6 +31,7 @@
                             ) where
 
 import           Language.ATS.Package.Build
+import           Language.ATS.Package.Build.Cabal
 import           Language.ATS.Package.Compiler
 import           Language.ATS.Package.Dependency
 import           Language.ATS.Package.Dhall
diff --git a/src/Language/ATS/Package/Build.hs b/src/Language/ATS/Package/Build.hs
--- a/src/Language/ATS/Package/Build.hs
+++ b/src/Language/ATS/Package/Build.hs
@@ -7,7 +7,6 @@
 module Language.ATS.Package.Build ( mkPkg
                                   , pkgToAction
                                   , build
-                                  , cabalHooks
                                   , buildAll
                                   , check
                                   ) where
@@ -21,9 +20,6 @@
 import           Development.Shake.Check
 import           Development.Shake.Clean
 import           Development.Shake.Man
-import           Distribution.PackageDescription      hiding (Executable, includes, options)
-import           Distribution.Simple                  hiding (Version, showVersion)
-import           Distribution.Simple.Setup
 import           Language.ATS.Package.Compiler
 import           Language.ATS.Package.Config
 import           Language.ATS.Package.Dependency
@@ -43,20 +39,6 @@
 -- | Build in current directory or indicated directory
 buildAll :: Maybe FilePath -> IO ()
 buildAll p = on (>>) (=<< wants p) fetchCompiler setupCompiler
-
-buildCabal :: Args -> ConfigFlags -> IO HookedBuildInfo
-buildCabal _ _ = do
-    build mempty
-    libDir <- (<> "/") <$> getCurrentDirectory
-    pure (modifyLib libDir emptyHookedBuildInfo)
-
-modifyLib :: String -> HookedBuildInfo -> HookedBuildInfo
-modifyLib libDir = first (over _Just modify)
-    where modify bi = let olds = extraLibDirs bi
-            in bi { extraLibDirs = (libDir <>) <$> olds }
-
-cabalHooks :: UserHooks
-cabalHooks = simpleUserHooks { preConf = buildCabal }
 
 -- | Build a set of targets
 build :: [String] -- ^ Targets
diff --git a/src/Language/ATS/Package/Build/Cabal.hs b/src/Language/ATS/Package/Build/Cabal.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/ATS/Package/Build/Cabal.hs
@@ -0,0 +1,39 @@
+-- | Integration with @Cabal@.
+module Language.ATS.Package.Build.Cabal ( cabalHooks
+                                        , atsPolyglotBuild
+                                        ) where
+
+import           Distribution.PackageDescription
+import           Distribution.Simple
+import           Distribution.Simple.LocalBuildInfo
+import           Language.ATS.Package.Build
+import           Quaalude
+
+atsPolyglotBuild :: IO ()
+atsPolyglotBuild = defaultMainWithHooks cabalHooks
+
+configureCabal :: IO LocalBuildInfo -> IO LocalBuildInfo
+configureCabal = (<*>) $ do
+    build mempty
+    libDir <- (<> "/") <$> getCurrentDirectory
+    pure (modifyConf libDir)
+
+modifyBuildInfo :: String -> BuildInfo -> BuildInfo
+modifyBuildInfo libDir bi = let olds = extraLibDirs bi
+    in bi { extraLibDirs = (libDir <>) <$> olds }
+
+modifyConf :: String -> LocalBuildInfo -> LocalBuildInfo
+modifyConf libDir bi = let old = localPkgDescr bi
+    in bi { localPkgDescr = modifyPkgDescr libDir old }
+
+modifyPkgDescr :: String -> PackageDescription -> PackageDescription
+modifyPkgDescr libDir pd = let old = library pd
+    in pd { library = fmap (modifyLibrary libDir) old }
+
+modifyLibrary :: String -> Library -> Library
+modifyLibrary libDir lib = let old = libBuildInfo lib
+    in lib { libBuildInfo = modifyBuildInfo libDir old }
+
+cabalHooks :: UserHooks
+cabalHooks = let defConf = confHook simpleUserHooks
+    in simpleUserHooks { confHook = configureCabal .* defConf }
