11module Install where
22import Control.Monad
3+ import Data.Char
34import Data.List
45import Data.Maybe
56import Data.Word
@@ -30,15 +31,15 @@ main = do
3031 inst = fromMaybe (home </> " .mcabal" ) (instDirM flags)
3132 flags' = flags { exeSuffix = exe, cconf = cc, instDir = inst, conf = confText }
3233
33- install flags
34+ install flags'
3435
3536install :: Flags -> IO ()
3637install flags = do
3738 instBin flags
3839 vers <- init <$> mhsOut flags [" --numeric-version" ]
3940 let flags' = flags { version = vers }
4041 mkMachdep flags'
41- mkConf flags
42+ mkConf flags'
4243 copyRTS flags'
4344 copyBase flags'
4445 checkPath flags'
@@ -88,7 +89,7 @@ checkPath flags = do
8889 let paths = splitOn pathSep path
8990 pathSep | target flags == " windows" = " ;"
9091 | otherwise = " :"
91- bin = instDir flags </> bin
92+ bin = instDir flags </> " bin"
9293 when (bin `notElem` paths) $
9394 putStrLn $ " Please add " ++ bin ++ " to your PATH"
9495
@@ -107,7 +108,7 @@ mhsOut flags args = do
107108 let exe = " bin" </> " mhs" <.> exeSuffix flags
108109 msg flags $ unwords (exe: args)
109110 if dryRun flags then
110- return " MHSOUT"
111+ return " MHSOUT\n "
111112 else
112113 readProcess exe args " "
113114
@@ -167,10 +168,12 @@ copy flags src dst = do
167168
168169copyDir :: Flags -> FilePath -> FilePath -> IO ()
169170copyDir flags src dst = do
171+ msg flags $ unwords [" cp -r" , src, dst]
172+ let flags' = flags{ quiet = not (verbose flags) }
170173 mkdir flags dst
171174 let one file = do
172- d <- doesDirectoryExist file
173- (if d then copyDir else copy) flags (src </> file) (dst </> file)
175+ d <- doesDirectoryExist (src </> file)
176+ (if d then copyDir else copy) flags' (src </> file) (dst </> file)
174177 mapM_ one =<< listDirectory src
175178
176179splitOn :: String -> String -> [String ]
@@ -183,11 +186,11 @@ splitOn d = loop []
183186macroExpand :: Flags -> String -> String
184187macroExpand flags = loop
185188 where loop [] = []
186- loop (' $' : cs) = p ++ loop r where (p, r) = expnd (macros flags) cs
189+ loop (' %' : cs) =
190+ let (mn, rest) = span nameChar cs
191+ nameChar c = isAlphaNum c || c == ' _'
192+ in fromMaybe " " (lookup mn (macros flags)) ++ loop rest
187193 loop (c: cs) = c : loop cs
188- expnd [] s = (" " , s)
189- expnd ((m,e): ms) s | Just r <- stripPrefix m s = (e, r)
190- | otherwise = expnd ms s
191194
192195-----
193196
0 commit comments