ats-setup 0.2.0.1 → 0.3.0.0
raw patch · 3 files changed
+83/−1 lines, 3 filesdep +bytestringdep +dependencydep +filemanipPVP ok
version bump matches the API change (PVP)
Dependencies added: bytestring, dependency, filemanip, process, unix
API changes (from Hackage documentation)
+ Distribution.ATS: fetchCompiler :: Maybe FilePath -> Version -> IO ()
+ Distribution.ATS: packageCompiler :: FilePath -> IO ()
+ Distribution.ATS: setupCompiler :: Maybe FilePath -> Version -> IO ()
Files
- ats-setup.cabal +8/−1
- src/Distribution/ATS.hs +5/−0
- src/Distribution/ATS/Compiler.hs +70/−0
ats-setup.cabal view
@@ -1,5 +1,5 @@ name: ats-setup-version: 0.2.0.1+version: 0.3.0.0 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@@ -21,6 +21,7 @@ library hs-source-dirs: src exposed-modules: Distribution.ATS+ other-modules: Distribution.ATS.Compiler build-depends: base >= 4.8 && < 5 , Cabal >= 2.0 , directory@@ -29,6 +30,12 @@ , tar , http-client , parallel-io+ , process+ , bytestring+ , directory+ , filemanip+ , dependency+ , unix default-language: Haskell2010 if flag(development) ghc-options: -Werror
src/Distribution/ATS.hs view
@@ -11,6 +11,10 @@ , intinf , atsPrelude , atsContrib+ -- * Functions involving the compiler+ , fetchCompiler+ , setupCompiler+ , packageCompiler ) where import qualified Codec.Archive.Tar as Tar@@ -19,6 +23,7 @@ import Control.Monad import Data.Bool import Data.List (intercalate)+import Distribution.ATS.Compiler import Distribution.PackageDescription import Distribution.Simple import Distribution.Simple.LocalBuildInfo
+ src/Distribution/ATS/Compiler.hs view
@@ -0,0 +1,70 @@+{-# LANGUAGE OverloadedStrings #-}++-- | This module contains scripts to fetch the compiler.+module Distribution.ATS.Compiler+ ( packageCompiler+ , fetchCompiler+ , setupCompiler+ ) where++import qualified Codec.Archive.Tar as Tar+import Codec.Compression.GZip (compress, decompress)+import Control.Monad (void, when)+import qualified Data.ByteString.Lazy as BS+import Data.Dependency+import Data.Maybe (fromMaybe)+import Network.HTTP.Client hiding (decompress)+import Network.HTTP.Client.TLS (tlsManagerSettings)+import System.Directory+import System.Environment (getEnv)+import System.FilePath.Find (find)+import System.Posix.Files+import System.Process++compilerDir :: Maybe FilePath -> Version -> IO FilePath+compilerDir mp v = fromMaybe <$> def <*> pure mp+ where def = (++ ("/.atspkg/" ++ show v)) <$> getEnv "HOME"++packageCompiler :: FilePath -> IO ()+packageCompiler directory = do+ files <- find (pure True) (pure True) directory+ bytes <- fmap Tar.write . Tar.pack directory $ fmap (drop $ length (directory :: String) + 1) files+ BS.writeFile (directory ++ ".tar.gz") (compress bytes)++pkgUrl :: Version -> String+pkgUrl v = "https://github.com/vmchale/atspkg/raw/master/pkgs/ATS2-Postiats-" ++ show v ++ ".tar.gz"++withCompiler :: String -> Version -> IO ()+withCompiler s v = putStrLn $ s ++ " compiler v" ++ show v ++ "..."++fetchCompiler :: Maybe FilePath -> Version -> IO ()+fetchCompiler mp v = do++ cd <- compilerDir mp v+ needsSetup <- not <$> doesDirectoryExist cd++ when needsSetup $ do++ withCompiler "Fetching" v+ manager <- newManager tlsManagerSettings+ initialRequest <- parseRequest $ pkgUrl v+ response <- responseBody <$> httpLbs (initialRequest { method = "GET" }) manager++ withCompiler "Unpacking" v+ Tar.unpack cd . Tar.read . decompress $ response++setupCompiler :: Maybe FilePath -> Version -> IO ()+setupCompiler mp v = do++ withCompiler "Configuring" v+ cd <- compilerDir mp v+ let configurePath = cd ++ "/configure"+ setFileMode configurePath ownerModes+ setFileMode (cd ++ "/autogen.sh") ownerModes+ void $ readCreateProcess ((proc (cd ++ "/autogen.sh") []) { cwd = Just cd }) ""+ void $ readCreateProcess ((proc configurePath ["--prefix", cd]) { cwd = Just cd }) ""++ withCompiler "Building" v+ void $ readCreateProcess ((proc "make" []) { cwd = Just cd, std_err = CreatePipe }) ""+ withCompiler "Installing" v+ void $ readCreateProcess ((proc "make" ["install"]) { cwd = Just cd, std_err = CreatePipe }) ""