diff --git a/ats-setup.cabal b/ats-setup.cabal
--- a/ats-setup.cabal
+++ b/ats-setup.cabal
@@ -1,5 +1,5 @@
 name:                ats-setup
-version:             0.3.0.1
+version:             0.3.0.2
 synopsis:            ATS scripts for Cabal builds
 description:         This package contains various scripts that go in a package's @Setup.hs@ to make building libraries with ATS dependencies easier.
 license:             BSD3
diff --git a/src/Distribution/ATS.hs b/src/Distribution/ATS.hs
--- a/src/Distribution/ATS.hs
+++ b/src/Distribution/ATS.hs
@@ -64,9 +64,16 @@
                                     , postBuild = \_ _ _ -> maybeCleanBuild
                                     }
 
+installCompiler :: IO ()
+installCompiler = do
+    b <- doesFileExist "ats-deps/0.3.9/done"
+    unless b $
+        fetchCompiler' >>
+        setupCompiler'
+
 -- | Same as 'atsUserHooks', but installs @atslib@ as well.
 atsLibUserHooks :: [ATSDependency] -> UserHooks
-atsLibUserHooks deps = simpleUserHooks { preConf = \_ _ -> mconcat [ fetchCompiler', setupCompiler', fetchDependencies deps ] >> pure emptyHookedBuildInfo
+atsLibUserHooks deps = simpleUserHooks { preConf = \_ _ -> mconcat [ installCompiler, fetchDependencies deps ] >> pure emptyHookedBuildInfo
                                        , postBuild = \_ _ _ -> maybeCleanBuild
                                        }
 -- TODO custom directory?
diff --git a/src/Distribution/ATS/Compiler.hs b/src/Distribution/ATS/Compiler.hs
--- a/src/Distribution/ATS/Compiler.hs
+++ b/src/Distribution/ATS/Compiler.hs
@@ -70,3 +70,4 @@
     void $ readCreateProcess ((proc "make" []) { cwd = Just cd, std_err = CreatePipe }) ""
     withCompiler "Installing" v
     void $ readCreateProcess ((proc "make" ["install"]) { cwd = Just cd, std_err = CreatePipe }) ""
+    writeFile (cd ++ "/done") ""
