Skip to content

Commit 5322814

Browse files
committed
More Haskell install script stuff
1 parent 0baca29 commit 5322814

4 files changed

Lines changed: 1322 additions & 13 deletions

File tree

Makefile

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ bin/mcabal: $(RTS)/*.c $(RTS)/*.h $(RTS)/*/*.h #generated/mcabal.c
8080
@mkdir -p bin
8181
$(CCEVAL) generated/mcabal.c $(CCLIBS) -o bin/mcabal
8282

83+
# Compile cpphs from distribution, with C compiler
84+
bin/install: $(RTS)/*.c $(RTS)/*.h $(RTS)/*/*.h #generated/install.c
85+
@mkdir -p bin
86+
$(CCEVAL) generated/install.c $(CCLIBS) -o bin/install
87+
8388
# Compile combinator evaluator
8489
bin/mhseval: $(RTS)/*.c $(RTS)/*.h $(RTS)/*/*.h
8590
@mkdir -p bin
@@ -128,6 +133,10 @@ generated/mhs.c: bin/mhs src/*/*.hs
128133
@mkdir -p generated
129134
bin/mhs -z $(MHSINC) $(MAINMODULE) -ogenerated/mhs.c
130135

136+
generated/install.c: bin/mhs Tools/Install.hs
137+
@mkdir -p generated
138+
bin/mhs -z $(MHSINC) -iTools Install -ogenerated/install.c
139+
131140
ghcgen: bin/gmhs src/*/*.hs lib/*.hs lib/*/*.hs lib/*/*/*.hs
132141
bin/gmhs $(MHSINC) $(MAINMODULE) -ogenerated/mhs.c
133142

@@ -177,7 +186,7 @@ bootstrapcpphs: bin/mhs cpphssrc/malcolm-wallace-universe/.git
177186
MHSCPPHS=$(USECPPHS) bin/mhs -z -XCPP '-DMIN_VERSION_base(x,y,z)=((x)<4||(x)==4&&(y)<19||(x)==4&&(y)==19&&(z)<=1)' -icpphscompat -icpphssrc/malcolm-wallace-universe/polyparse-1.12/src -icpphssrc/malcolm-wallace-universe/cpphs-1.20.9 cpphssrc/malcolm-wallace-universe/cpphs-1.20.9/cpphs.hs -ogenerated/cpphs.c
178187

179188
mhs.conf: mhs.conf.in
180-
sed -e "s,GMPFLAGS,$(MHSGMPCCFLAGS)," -e "s,GMPLIBS,$(MHSGMPCCLIBS)," mhs.conf.in > mhs.conf
189+
sed -e "s,%GMPFLAGS,$(MHSGMPCCFLAGS)," -e "s,%GMPLIBS,$(MHSGMPCCLIBS)," mhs.conf.in > mhs.conf
181190

182191
# Run test examples with ghc-compiled compiler
183192
runtest: bin/mhseval bin/gmhs tests/*.hs
@@ -326,6 +335,7 @@ $(MCABALBIN)/mcabal: bin/mcabal
326335
preparedist: newmhsz bootstrapcpphs
327336
rm -f generated/mcabal.c generated/mhseval.js generated/base.pkg
328337
$(MAKE) generated/mcabal.c
338+
$(MAKE) generated/install.c
329339
$(MAKE) generated/mhseval.js
330340
$(MAKE) generated/base.pkg
331341

Tools/Install.hs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module Install where
22
import Control.Monad
3+
import Data.Char
34
import Data.List
45
import Data.Maybe
56
import 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

3536
install :: Flags -> IO ()
3637
install 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

168169
copyDir :: Flags -> FilePath -> FilePath -> IO ()
169170
copyDir 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

176179
splitOn :: String -> String -> [String]
@@ -183,11 +186,11 @@ splitOn d = loop []
183186
macroExpand :: Flags -> String -> String
184187
macroExpand 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

Comments
 (0)