66{-# LANGUAGE LambdaCase #-}
77{-# LANGUAGE MultiWayIf #-}
88{-# LANGUAGE OverloadedStrings #-}
9- {-# LANGUAGE PackageImports #-}
109{-# LANGUAGE ScopedTypeVariables #-}
1110{-# LANGUAGE TypeFamilies #-}
1211{-# LANGUAGE ViewPatterns #-}
@@ -28,76 +27,94 @@ module Stack.Setup
2827 , downloadStackExe
2928 ) where
3029
31- import qualified Codec.Archive.Tar as Tar
32- import Conduit
33- import Control.Applicative (empty )
34- import "cryptonite" Crypto.Hash (SHA1 (.. ), SHA256 (.. ))
35- import Pantry.Internal.AesonExtended
36- import qualified Data.Aeson.KeyMap as KeyMap
37- import qualified Data.ByteString as S
38- import qualified Data.ByteString.Lazy as LBS
39- import qualified Data.Conduit.Binary as CB
40- import Data.Conduit.Lazy (lazyConsume )
41- import qualified Data.Conduit.List as CL
42- import Data.Conduit.Process.Typed (createSource )
43- import Data.Conduit.Zlib (ungzip )
44- import qualified Data.Map as Map
45- import qualified Data.Set as Set
46- import qualified Data.Text as T
47- import qualified Data.Text.Lazy as TL
48- import qualified Data.Text.Encoding as T
49- import qualified Data.Text.Lazy.Encoding as TL
50- import qualified Data.Text.Encoding.Error as T
51- import qualified Data.Yaml as Yaml
52- import Distribution.System (OS , Arch (.. ), Platform (.. ))
53- import qualified Distribution.System as Cabal
54- import Distribution.Text (simpleParse )
55- import Distribution.Types.PackageName (mkPackageName )
56- import Distribution.Version (mkVersion )
57- import Network.HTTP.Client (redirectCount )
58- import Network.HTTP.StackClient (CheckHexDigest (.. ), HashCheck (.. ),
59- getResponseBody , getResponseStatusCode , httpLbs , httpJSON ,
60- mkDownloadRequest , parseRequest , parseUrlThrow , setGitHubHeaders ,
61- setHashChecks , setLengthCheck , verifiedDownloadWithProgress , withResponse ,
62- setRequestMethod )
63- import Network.HTTP.Simple (getResponseHeader )
64- import Path hiding (fileExtension )
65- import Path.CheckInstall (warnInstallSearchPathIssues )
66- import Path.Extended (fileExtension )
67- import Path.Extra (toFilePathNoTrailingSep )
68- import Path.IO hiding (findExecutable , withSystemTempDir )
69- import qualified Pantry
70- import qualified RIO
71- import RIO.List
72- import RIO.Process
73- import Stack.Build.Haddock (shouldHaddockDeps )
74- import Stack.Build.Source (loadSourceMap , hashSourceMapData )
75- import Stack.Build.Target (NeedTargets (.. ), parseTargets )
76- import Stack.Constants
77- import Stack.Constants.Config (distRelativeDir )
78- import Stack.GhcPkg (createDatabase , getGlobalDB , mkGhcPackagePath , ghcPkgPathEnvVar )
79- import Stack.Prelude hiding (Display (.. ))
80- import Stack.SourceMap
81- import Stack.Setup.Installed (Tool (.. ), extraDirs , filterTools ,
82- installDir , getCompilerVersion ,
83- listInstalled , markInstalled , tempInstallDir ,
84- toolString , unmarkInstalled )
85- import Stack.Storage.User (loadCompilerPaths , saveCompilerPaths )
86- import Stack.Types.Build
87- import Stack.Types.Compiler
88- import Stack.Types.CompilerBuild
89- import Stack.Types.Config
90- import Stack.Types.Docker
91- import Stack.Types.SourceMap
92- import Stack.Types.Version
93- import qualified System.Directory as D
94- import System.Environment (getExecutablePath , lookupEnv )
95- import System.IO.Error (isPermissionError )
96- import System.FilePath (searchPathSeparator )
97- import qualified System.FilePath as FP
98- import System.Permissions (setFileExecutable )
99- import System.Uname (getRelease )
100- import Data.List.Split (splitOn )
30+ import qualified Codec.Archive.Tar as Tar
31+ import Conduit
32+ ( ConduitT , await , concatMapMC , filterCE , foldMC , yield )
33+ import Control.Applicative ( empty )
34+ import Crypto.Hash ( SHA1 (.. ), SHA256 (.. ) )
35+ import qualified Data.Aeson.KeyMap as KeyMap
36+ import qualified Data.ByteString as S
37+ import qualified Data.ByteString.Lazy as LBS
38+ import qualified Data.Conduit.Binary as CB
39+ import Data.Conduit.Lazy ( lazyConsume )
40+ import qualified Data.Conduit.List as CL
41+ import Data.Conduit.Process.Typed ( createSource )
42+ import Data.Conduit.Zlib ( ungzip )
43+ import Data.List.Split ( splitOn )
44+ import qualified Data.Map as Map
45+ import qualified Data.Set as Set
46+ import qualified Data.Text as T
47+ import qualified Data.Text.Lazy as TL
48+ import qualified Data.Text.Encoding as T
49+ import qualified Data.Text.Lazy.Encoding as TL
50+ import qualified Data.Text.Encoding.Error as T
51+ import qualified Data.Yaml as Yaml
52+ import Distribution.System ( Arch (.. ), OS , Platform (.. ) )
53+ import qualified Distribution.System as Cabal
54+ import Distribution.Text ( simpleParse )
55+ import Distribution.Types.PackageName ( mkPackageName )
56+ import Distribution.Version ( mkVersion )
57+ import Network.HTTP.Client ( redirectCount )
58+ import Network.HTTP.StackClient
59+ ( CheckHexDigest (.. ), HashCheck (.. ), getResponseBody
60+ , getResponseStatusCode , httpLbs , httpJSON
61+ , mkDownloadRequest , parseRequest , parseUrlThrow
62+ , setGitHubHeaders , setHashChecks , setLengthCheck
63+ , verifiedDownloadWithProgress , withResponse
64+ , setRequestMethod
65+ )
66+ import Network.HTTP.Simple ( getResponseHeader )
67+ import Pantry.Internal.AesonExtended
68+ ( Value (.. ), WithJSONWarnings (.. ), logJSONWarnings )
69+ import Path
70+ ( (</>) , dirname , filename , parent , parseAbsDir , parseAbsFile
71+ , parseRelDir , parseRelFile , toFilePath
72+ )
73+ import Path.CheckInstall ( warnInstallSearchPathIssues )
74+ import Path.Extended ( fileExtension )
75+ import Path.Extra ( toFilePathNoTrailingSep )
76+ import Path.IO hiding ( findExecutable , withSystemTempDir )
77+ import RIO.List
78+ ( headMaybe , intercalate , intersperse , isPrefixOf
79+ , maximumByMaybe , sort , sortBy , stripPrefix )
80+ import RIO.Process
81+ ( EnvVars , HasProcessContext (.. ), ProcessContext
82+ , augmentPath , augmentPathMap , doesExecutableExist , envVarsL
83+ , exeSearchPathL , getStdout , mkProcessContext , modifyEnvVars
84+ , proc , readProcess_ , readProcessStdout , runProcess
85+ , runProcess_ , setStdout , waitExitCode , withModifyEnvVars
86+ , withProcessWait , withWorkingDir , workingDirL
87+ )
88+ import Stack.Build.Haddock ( shouldHaddockDeps )
89+ import Stack.Build.Source ( hashSourceMapData , loadSourceMap )
90+ import Stack.Build.Target ( NeedTargets (.. ), parseTargets )
91+ import Stack.Constants
92+ import Stack.Constants.Config ( distRelativeDir )
93+ import Stack.GhcPkg
94+ ( createDatabase , getGlobalDB , ghcPkgPathEnvVar
95+ , mkGhcPackagePath )
96+ import Stack.Prelude
97+ import Stack.SourceMap
98+ import Stack.Setup.Installed
99+ ( Tool (.. ), extraDirs , filterTools , getCompilerVersion
100+ , installDir , listInstalled , markInstalled , tempInstallDir
101+ , toolString , unmarkInstalled
102+ )
103+ import Stack.Storage.User ( loadCompilerPaths , saveCompilerPaths )
104+ import Stack.Types.Build
105+ import Stack.Types.Compiler
106+ import Stack.Types.CompilerBuild
107+ import Stack.Types.Config
108+ import Stack.Types.Docker
109+ import Stack.Types.SourceMap
110+ import Stack.Types.Version
111+ import qualified System.Directory as D
112+ import System.Environment ( getExecutablePath , lookupEnv )
113+ import System.IO.Error ( isPermissionError )
114+ import System.FilePath ( searchPathSeparator )
115+ import qualified System.FilePath as FP
116+ import System.Permissions ( setFileExecutable )
117+ import System.Uname ( getRelease )
101118
102119-- | Type representing exceptions thrown by functions exported by the
103120-- "Stack.Setup" module
@@ -161,7 +178,7 @@ instance Exception SetupException where
161178 displayException (UnknownCompilerVersion oskeys wanted known) = concat
162179 [ " Error: [S-9443]\n "
163180 , " No setup information found for "
164- , T. unpack $ utf8BuilderToText $ RIO. display wanted
181+ , T. unpack $ utf8BuilderToText $ display wanted
165182 , " on your platform.\n This probably means a GHC bindist has not yet been added for OS key '"
166183 , T. unpack (T. intercalate " ', '" (sort $ Set. toList oskeys))
167184 , " '.\n Supported versions: "
@@ -1136,7 +1153,7 @@ buildGhcFromSource getSetupInfo' installed (CompilerRepository url) commitId fla
11361153 then pure (compilerTool,CompilerBuildStandard )
11371154 else do
11381155 -- clone the repository and execute the given commands
1139- Pantry. withRepo (Pantry. SimpleRepo url commitId RepoGit ) $ do
1156+ withRepo (SimpleRepo url commitId RepoGit ) $ do
11401157 -- withRepo is guaranteed to set workingDirL, so let's get it
11411158 mcwd <- traverse parseAbsDir =<< view workingDirL
11421159 cwd <- maybe (throwIO WorkingDirectoryInvalidBug ) pure mcwd
@@ -1157,7 +1174,7 @@ buildGhcFromSource getSetupInfo' installed (CompilerRepository url) commitId fla
11571174 maybe (throwIO HadrianScriptNotFound ) pure $ listToMaybe foundHadrianPaths
11581175
11591176 logSticky $ " Building GHC from source with `"
1160- <> RIO. display flavour
1177+ <> display flavour
11611178 <> " ` flavour. It can take a long time (more than one hour)..."
11621179
11631180 -- We need to provide an absolute path to the script since
@@ -1844,13 +1861,13 @@ setup7z si = do
18441861 .| foldMC
18451862 (\ count bs -> do
18461863 let count' = count + S. length bs
1847- logSticky $ " Extracted " <> RIO. display count' <> " files"
1864+ logSticky $ " Extracted " <> display count' <> " files"
18481865 pure count'
18491866 )
18501867 0
18511868 logStickyDone $
18521869 " Extracted total of " <>
1853- RIO. display total <>
1870+ display total <>
18541871 " files from " <>
18551872 archiveDisplay
18561873 waitExitCode p
@@ -1869,11 +1886,11 @@ chattyDownload label downloadInfo path = do
18691886 req <- parseUrlThrow $ T. unpack url
18701887 logSticky $
18711888 " Preparing to download " <>
1872- RIO. display label <>
1889+ display label <>
18731890 " ..."
18741891 logDebug $
18751892 " Downloading from " <>
1876- RIO. display url <>
1893+ display url <>
18771894 " to " <>
18781895 fromString (toFilePath path) <>
18791896 " ..."
@@ -1899,7 +1916,7 @@ chattyDownload label downloadInfo path = do
18991916 mkDownloadRequest req
19001917 x <- verifiedDownloadWithProgress dReq path label mtotalSize
19011918 if x
1902- then logStickyDone (" Downloaded " <> RIO. display label <> " ." )
1919+ then logStickyDone (" Downloaded " <> display label <> " ." )
19031920 else logStickyDone " Already downloaded."
19041921 where
19051922 mtotalSize = downloadInfoContentLength downloadInfo
@@ -2224,7 +2241,7 @@ downloadStackExe platforms0 archiveInfo destDir checkPath testExe = do
22242241 , destDir </> relFileStackDotTmp
22252242 )
22262243
2227- logInfo $ " Downloading from: " <> RIO. display archiveURL
2244+ logInfo $ " Downloading from: " <> display archiveURL
22282245
22292246 liftIO $ do
22302247 case () of
0 commit comments