{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} #if __GLASGOW_HASKELL__ <= 784 import Control.Applicative #endif import qualified Codec.Archive.Tar as Tar import Codec.Compression.GZip (decompress) import Control.Monad (when) import Distribution.Simple import Distribution.Simple.Setup import Distribution.Types.HookedBuildInfo import Distribution.Types.PackageDescription import Network.HTTP.Client hiding (decompress) import Network.HTTP.Client.TLS (tlsManagerSettings) import System.Directory -- TODO make this pre-configure? main = defaultMainWithHooks myHooks where myHooks = simpleUserHooks { preConf = buildScript , postClean = cleanATS } cleanATS :: Args -> CleanFlags -> PackageDescription -> () -> IO () cleanATS _ _ _ _ = removeDirectoryRecursive "ATS2-Postiats-include-0.3.8" buildScript :: Args -> ConfigFlags -> IO HookedBuildInfo buildScript _ _ = do needsSetup <- not <$> doesDirectoryExist "ATS2-Postiats-include-0.3.8" when needsSetup $ do putStrLn "Fetching libraries..." manager <- newManager tlsManagerSettings initialRequest <- parseRequest "https://downloads.sourceforge.net/project/ats2-lang/ats2-lang/ats2-postiats-0.3.8/ATS2-Postiats-include-0.3.8.tgz" response <- responseBody <$> httpLbs (initialRequest { method = "GET" }) manager putStrLn "Unpacking libraries..." Tar.unpack "." . Tar.read . decompress $ response pure emptyHookedBuildInfo