diff --git a/shake-ext.cabal b/shake-ext.cabal
--- a/shake-ext.cabal
+++ b/shake-ext.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name: shake-ext
-version: 2.7.0.1
+version: 2.7.0.2
 license: BSD3
 license-file: LICENSE
 copyright: Copyright: (c) 2018 Vanessa McHale
diff --git a/src/Development/Shake/C.hs b/src/Development/Shake/C.hs
--- a/src/Development/Shake/C.hs
+++ b/src/Development/Shake/C.hs
@@ -32,7 +32,7 @@
 import           System.Info
 
 mkQualified :: Monoid a => Maybe a -> Maybe a -> a -> a
-mkQualified pre suff = h [g suff, f pre]
+mkQualified pre suff = h [f suff, g pre]
     where g = maybe id mappend
           f = maybe id (flip mappend)
           h = foldr fmap id
@@ -103,6 +103,15 @@
      -> CConfig
      -> Rules ()
 cBin cc sources bin cfg = bin %> \out -> ccAction cc sources out cfg
+
+-- HAVE:
+-- .atspkg/lib
+-- .atpskg/x86_64-unknown-redox/lib
+-- .atspkg/0.3.10
+--
+-- WANT:
+-- The ability to do cross builds w/ `atspkg install`
+-- The ability to install `atslib` as a cross library
 
 ccAction :: CmdResult r
          => CCompiler
diff --git a/src/Development/Shake/CCJS.hs b/src/Development/Shake/CCJS.hs
--- a/src/Development/Shake/CCJS.hs
+++ b/src/Development/Shake/CCJS.hs
@@ -3,10 +3,13 @@
 
 import           Data.Semigroup
 import           Development.Shake
+import           Development.Shake.FilePath
+import           System.Directory           (createDirectoryIfMissing)
 
 ccjs :: [FilePath] -> FilePattern -> Rules ()
 ccjs sources fp =
     fp %> \out -> do
         need sources
         (Stdout sout) <- command mempty "ccjs" (sources <> ["--externs=node"])
+        liftIO $ createDirectoryIfMissing True (takeDirectory out)
         liftIO $ writeFile out sout
diff --git a/src/Development/Shake/Cabal.hs b/src/Development/Shake/Cabal.hs
--- a/src/Development/Shake/Cabal.hs
+++ b/src/Development/Shake/Cabal.hs
@@ -66,4 +66,6 @@
         vers = pkgVersion (package descr)
         libs = toList (condLibrary pkg)
         normalSrc = (libraryToFiles <=< extract) =<< libs
-    pure (vers, extraSrc <> normalSrc)
+        dir = (fmap (<> "/") . hsSourceDirs . libBuildInfo <=< extract) =<< libs
+        dirge = ((<>) <$> dir <*>)
+    pure (vers, extraSrc <> dirge normalSrc)
diff --git a/src/Development/Shake/Check.hs b/src/Development/Shake/Check.hs
--- a/src/Development/Shake/Check.hs
+++ b/src/Development/Shake/Check.hs
@@ -9,6 +9,7 @@
                                , ghc
                                , compleat
                                , cabal
+                               , madlang
                                -- * Types
                                , MBool
                                ) where
@@ -16,7 +17,7 @@
 import           Control.Monad.IO.Class
 import           Development.Shake.TH
 
-$(mkExecChecks ["compleat", "pandoc", "autoconf", "cabal", "ghc"])
+$(mkExecChecks ["compleat", "pandoc", "autoconf", "cabal", "ghc", "madlang"])
 
 patsFilter :: (MonadIO m) => m Bool
 patsFilter = checkExecutable "pats-filter"
diff --git a/src/Development/Shake/FileDetect.hs b/src/Development/Shake/FileDetect.hs
--- a/src/Development/Shake/FileDetect.hs
+++ b/src/Development/Shake/FileDetect.hs
@@ -11,11 +11,15 @@
     , getShell
     , getDhall
     , getElm
+    , getMadlang
     ) where
 
 import           Control.Monad
 import           Data.Semigroup    ((<>))
 import           Development.Shake
+
+getMadlang :: Action [FilePath]
+getMadlang = getAll ["mad"]
 
 getElm :: Action [FilePath]
 getElm = getAll ["elm"]
diff --git a/src/Development/Shake/Linters.hs b/src/Development/Shake/Linters.hs
--- a/src/Development/Shake/Linters.hs
+++ b/src/Development/Shake/Linters.hs
@@ -6,6 +6,7 @@
                                  , shellcheck
                                  , ghc
                                  , dhall
+                                 , madlang
                                  -- * Formatters
                                  , clangFormat
                                  , atsfmt
@@ -21,8 +22,6 @@
 dhall :: Action ()
 dhall = mapM_ checkDhall =<< getDhall
 
--- TODO @cabal format@.
-
 checkDhall :: FilePath -> Action ()
 checkDhall dh = do
     contents <- liftIO $ readFile dh
@@ -50,6 +49,9 @@
 
 checkFiles :: String -> [FilePath] -> Action ()
 checkFiles str = mapM_ (cmd_ . ((str ++ " ") ++))
+
+madlang :: [FilePath] -> Action ()
+madlang = checkFiles "madlang check"
 
 -- | Lint @.sh@ files using
 -- [shellcheck](http://hackage.haskell.org/package/ShellCheck).
