ref: 6e642424b9080214e3ddf09d761a07938cb4a50d
parent: aa42c0ef8a45a3d912864e26c1d5939135e0badd
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Mon Jul 29 17:15:58 EDT 2024
Make it possible to install mhs in ~/.mcabal/bin and use base package.
--- a/Makefile
+++ b/Makefile
@@ -21,7 +21,8 @@
GHCPROF= # -prof -fprof-late #-prof -fprof-auto
GHCFLAGS= $(GHCEXTS) $(GHCINCS) $(GHCWARNS) $(GHCOPTS) $(GHCTOOL) $(GHCPKGS) $(GHCOUT) $(GHCPROF)
#
-MHSINC= -i -isrc -ilib -ipaths -ilib/simple-readline
+MHSINCNP= -i -imhs -isrc -ilib -ilib/simple-readline
+MHSINC=$(MHSINCNP) -ipaths
#
.PHONY: clean bootstrap install ghcgen newmhs cachelib timecompile exampletest cachetest runtest runtestmhs everytest everytestmhs nfibtest info
@@ -132,7 +133,7 @@
#
clean:
- rm -rf src/*/*.hi src/*/*.o *.comb *.tmp *~ bin/* a.out $(GHCOUTDIR) tmp/* Tools/*.o Tools/*.hi dist-newstyle generated/*-stage* .mhscache targets.conf .mhscache
+ rm -rf src/*/*.hi src/*/*.o *.comb *.tmp *~ bin/* a.out $(GHCOUTDIR) tmp/* Tools/*.o Tools/*.hi dist-newstyle generated/*-stage* .mhscache targets.conf .mhscache mdist dist-mcabal
make clean -f Makefile.emscripten
cd tests; make clean
-cabal clean
@@ -182,3 +183,32 @@
emscripten: bin/mhs targets.conf
make test -f Makefile.emscripten
+
+######
+
+VERSION=0.9.15.0
+MCABAL=$(HOME)/.mcabal
+MCABALMHS=$(MCABAL)/mhs-$(VERSION)
+MCABALMHSMHS=$(MCABALMHS)/mhs-$(VERSION)
+MDATA=$(MCABALMHSMHS)/data
+MRUNTIME=$(MDATA)/src/runtime
+MCABALBIN=$(MCABAL)/bin
+MDIST=mdist
+BASE=base-$(VERSION)
+BASEMODULES=Control.Applicative Control.Arrow Control.DeepSeq Control.Error Control.Exception Control.Exception.Internal Control.Monad Control.Monad.Fail Control.Monad.ST Control.Monad.ST_Type Data.Array Data.Bits Data.Bool Data.Bool_Type Data.Bounded Data.Char Data.Char_Type Data.Complex Data.Constraint Data.Double Data.Dynamic Data.Either Data.Enum Data.Eq Data.Float Data.FloatW Data.Floating Data.Foldable Data.Fractional Data.Function Data.Functor Data.Functor.Const Data.Functor.Identity Data.IOArray Data.IORef Data.Int Data.Int.Instances Data.Int.IntN Data.Integer Data.Integer_Type Data.Integral Data.Ix Data.List Data.List.NonEmpty Data.List_Type Data.Maybe Data.Maybe_Type Data.Monoid Data.Num Data.Ord Data.Ordering_Type Data.Proxy Data.Ratio Data.Ratio_Type Data.Real Data.RealFloat Data.RealFrac Data.Records Data.STRef Data.Semigroup Data.String Data.Time.Clock Data.Time.Format Data.Traversable Data.Tuple Data.Type.Equality Data.TypeLits Data.Typeable Data.Version Data.Void Data.Word Data.ZipList Debug.Trace Foreign.C.String Foreign.C.Types Foreign.ForeignPtr Foreign.Marshal.Alloc Foreign.Marshal.Array Foreign.Marshal.Utils Foreign.Ptr Foreign.Storable GHC.Stack GHC.Types Numeric Numeric.FormatFloat Numeric.Natural Prelude Primitives System.Cmd System.Compress System.Directory System.Environment System.Exit System.IO System.IO.MD5 System.IO.PrintOrRun System.IO.Serialize System.IO.TimeMilli System.IO.Unsafe System.IO_Handle System.Info System.Process Text.Printf Text.Read Text.Read.Lex Text.Read.Numeric Text.Show TimeCompat Unsafe.Coerce
+
+$(MCABALBIN)/mhs: bin/mhs
+ @mkdir -p $(MCABALBIN)
+ @mkdir -p $(MDIST)
+ @echo 'module Paths_MicroHs where {import Data.Version; version :: Version; version = makeVersion [0,9,15,0]; getDataDir :: IO FilePath; getDataDir = return "$(MDATA)" }' > $(MDIST)/Paths_MicroHs.hs+ bin/mhs -z $(MHSINCNP) -i$(MDIST) MicroHs.Main -o$(MCABALBIN)/mhs
+
+$(MCABALMHS)/packages/$(BASE).pkg: bin/mhs lib/*.hs
+ @mkdir -p $(MRUNTIME)
+ cp src/runtime/*.[ch] $(MRUNTIME)
+ @echo $$PATH | tr ':' '\012' | grep -q $(MCABALBIN) || echo '***' Add $(MCABALBIN) to the PATH
+ bin/mhs -P$(BASE) -o$(BASE).pkg -ilib $(BASEMODULES)
+ bin/mhs -Q -a -a$(MCABALMHS) $(BASE).pkg
+ @rm $(BASE).pkg
+
+installmcabal: bin/mhs $(MCABAL)/bin/mhs $(MCABALMHS)/packages/$(BASE).pkg
--- a/MicroHs.cabal
+++ b/MicroHs.cabal
@@ -25,6 +25,7 @@
ghc/**/*.hs
lib/**/*.hs
lib/**/*.hs-boot
+ mhs/*.hs
paths/Paths_MicroHs.hs
src/runtime/*.c
src/runtime/*.h
--- a/lib/Compat.hs
+++ /dev/null
@@ -1,5 +1,0 @@
--- Copyright 2023 Lennart Augustsson
--- See LICENSE file for full license.
-module Compat() where
-import Prelude() -- do not import Prelude
--- So we can import Compat, which is full of stuff for GHC.
--- a/lib/PrimTable.hs
+++ /dev/null
@@ -1,4 +1,0 @@
--- Copyright 2023 Lennart Augustsson
--- See LICENSE file for full license.
-module PrimTable() where
-import Prelude() -- do not import Prelude
--- a/lib/libs.cabal
+++ b/lib/libs.cabal
@@ -21,7 +21,6 @@
Control.Monad
Control.Monad.Fail
Control.Monad.ST
- Control.Monad.State.Strict
Data.Bits
Data.Bool
Data.Bounded
--- /dev/null
+++ b/mhs/Compat.hs
@@ -1,0 +1,5 @@
+-- Copyright 2023 Lennart Augustsson
+-- See LICENSE file for full license.
+module Compat() where
+import Prelude() -- do not import Prelude
+-- So we can import Compat, which is full of stuff for GHC.
--- /dev/null
+++ b/mhs/PrimTable.hs
@@ -1,0 +1,4 @@
+-- Copyright 2023 Lennart Augustsson
+-- See LICENSE file for full license.
+module PrimTable() where
+import Prelude() -- do not import Prelude
--- a/src/MicroHs/Compile.hs
+++ b/src/MicroHs/Compile.hs
@@ -356,7 +356,7 @@
loadPkg :: Flags -> FilePath -> StateIO Cache ()
loadPkg flags fn = do
when (loading flags || verbosityGT flags 0) $
- liftIO $ putStrLn $ "loading package " ++ fn
+ liftIO $ putStrLn $ "Loading package " ++ fn
pkg <- liftIO $ readSerialized fn
modify $ addPackage pkg
--- a/src/MicroHs/FFI.hs
+++ b/src/MicroHs/FFI.hs
@@ -14,7 +14,7 @@
wrappers = [ t | (ImpWrapper, t) <- ffiImports]
dynamics = [ t | (ImpDynamic, t) <- ffiImports]
includes = "mhsffi.h" : catMaybes [ inc | (ImpStatic inc _addr _name, _) <- ffiImports ]
- addrs = [ (name, t) | (ImpStatic _inc True name, t) <- ffiImports ]
+ addrs = [ (name, t) | (ImpStatic _inc True name, t) <- ffiImports, name `notElem` runtimeFFI ]
funcs = [ (name, t) | (ImpStatic _inc False name, t) <- ffiImports, name `notElem` runtimeFFI ]
funcs' = uniqFst funcs
addrs' = uniqFst addrs
--- a/src/MicroHs/Flags.hs
+++ b/src/MicroHs/Flags.hs
@@ -19,7 +19,7 @@
installPkg :: Bool, -- install a package
target :: String -- Compile target defined in target.conf
}
- -- deriving (Show)
+ deriving (Show)
verbosityGT :: Flags -> Int -> Bool
verbosityGT flags v = verbose flags > v
--- a/src/MicroHs/Main.hs
+++ b/src/MicroHs/Main.hs
@@ -41,13 +41,15 @@
main = do
args <- getArgs
dir <- getMhsDir
- home <- getHomeDirectory
+ dataDir <- getDataDir
case args of
["--version"] -> putStrLn $ "MicroHs, version " ++ mhsVersion ++ ", combinator file version " ++ combVersion
["--numeric-version"] -> putStrLn mhsVersion
_ -> do
- let dflags = (defaultFlags dir){ pkgPath = [home ++ "/.mcabal/mhs-" ++ mhsVersion] }+ let dflags = (defaultFlags dir){ pkgPath = pkgPaths }(flags, mdls, rargs) = decodeArgs dflags [] args
+ pkgPaths | dir == dataDir && dir /= "." = [dataDir ++ "/../.."] -- This is a bit ugly
+ | otherwise = [] -- No package search path
case listPkg flags of
Just p -> mainListPkg flags p
Nothing ->
@@ -55,7 +57,9 @@
Just p -> mainBuildPkg flags p mdls
Nothing ->
if installPkg flags then mainInstallPackage flags mdls else
- withArgs rargs $
+ withArgs rargs $ do
+ when (verbosityGT flags 0) $
+ putStrLn $ "flags = " ++ show flags
case mdls of
[] -> mainInteractive flags
[s] -> mainCompile flags (mkIdentSLoc (SLoc "command-line" 0 0) s)
--
⑨