[Barrelfish-users] Make Hake works in ghc 7.4 and 7.6
Wang Nan
wangnan0 at huawei.com
Mon Apr 1 04:27:41 CEST 2013
Hi,
I suggest a patch which makes hake to work in both ghc 7.4 and 7.6. The
patch is based on release 2013-03-22.
Hake won't not generage makefile with IIModule in Main.hs. ghc 7.4 and
7.6 can only load compiled plugin (.o) when it imported using IIDecl.
diff -r 12e657e0ed48 hake/ArchDefaults.hs
--- a/hake/ArchDefaults.hs Fri Mar 22 13:15:31 2013 +0100
+++ b/hake/ArchDefaults.hs Mon Apr 01 10:33:39 2013 +0800
@@ -112,7 +112,8 @@
optDependencies =
[ PreDep InstallTree arch "/include/errors/errno.h",
PreDep InstallTree arch
"/include/barrelfish_kpi/capbits.h",
- PreDep InstallTree arch "/include/asmoffsets.h" ],
+ PreDep InstallTree arch
"/include/trace_definitions/trace_defs.h",
+ PreDep InstallTree arch "/include/asmoffsets.h" ],
optLdFlags = ldFlags arch,
optLdCxxFlags = ldCxxFlags arch,
optLibs = stdLibs arch,
diff -r 12e657e0ed48 hake/Main.hs
--- a/hake/Main.hs Fri Mar 22 13:15:31 2013 +0100
+++ b/hake/Main.hs Mon Apr 01 10:33:39 2013 +0800
@@ -19,9 +19,14 @@
import System.Exit
import GHC hiding (Target)
import GHC.Paths ( libdir )
-import DynFlags ( defaultLogAction,
+import DynFlags (
+#if __GLASGOW_HASKELL__ < 706
+ defaultLogAction,
+#else
+ defaultFatalMessager, defaultFlushOut,
+#endif
xopt_set,
- ExtensionFlag (Opt_DeriveDataTypeable) )
+ ExtensionFlag (Opt_DeriveDataTypeable, Opt_Cpp) )
import Data.Dynamic
import Data.Maybe
import Data.List
@@ -357,15 +362,19 @@
-> IO [(String,HRule)]
evalHakeFiles o allfiles hakefiles =
let imports = [ "Hakefiles"]
- all_imports = imports
+ all_imports = ("Prelude":"HakeTypes":imports)
moddirs = [ (opt_installdir o) ./. "hake",
".",
(opt_bfsourcedir o) ./. "hake" ]
- in do
+ in do
+#if __GLASGOW_HASKELL__ < 706
defaultErrorHandler defaultLogAction $ do
+#else
+ defaultErrorHandler defaultFatalMessager defaultFlushOut $ do
+#endif
runGhc (Just libdir) $ do
dflags <- getSessionDynFlags
- let dflags1 = foldl xopt_set dflags [ Opt_DeriveDataTypeable ]
+ let dflags1 = foldl xopt_set dflags [ Opt_DeriveDataTypeable,
Opt_Cpp ]
_ <- setSessionDynFlags dflags1{
importPaths = moddirs,
hiDir = Just "./hake",
@@ -374,8 +383,7 @@
targets <- mapM (\m -> guessTarget m Nothing) imports
setTargets targets
load LoadAllTargets
- modlist <- mapM (\m -> findModule (mkModuleName m) Nothing)
all_imports
- setContext [IIModule m | m <- modlist]
+ setContext [(IIDecl . simpleImportDecl) (mkModuleName m) | m
<- (all_imports)]
val <- dynCompileExpr "Hakefiles.hf :: [(String, HRule)]"
return (fromDyn val [("failed",Error "failed")])
diff -r 12e657e0ed48 hake/RuleDefs.hs
--- a/hake/RuleDefs.hs Fri Mar 22 13:15:31 2013 +0100
+++ b/hake/RuleDefs.hs Mon Apr 01 10:33:39 2013 +0800
@@ -884,11 +884,11 @@
appGetOptionsForArch arch args =
(options arch) { extraIncludes =
[ NoDep SrcTree "src" a | a <-
Args.addIncludes args],
- optIncludes = (optIncludes $ options arch) \\
+ optIncludes = (optIncludes $ options arch) \\\
[ NoDep SrcTree "src" i | i <-
Args.omitIncludes args ],
- optFlags = (optFlags $ options arch) \\
+ optFlags = (optFlags $ options arch) \\\
[ Str f | f <- Args.omitCFlags args ],
- optCxxFlags = (optCxxFlags $ options arch) \\
+ optCxxFlags = (optCxxFlags $ options arch) \\\
[ Str f | f <- Args.omitCxxFlags
args ],
optSuffix = "_for_app_" ++ Args.target args,
extraFlags = Args.addCFlags args ++
Args.addCxxFlags args,
@@ -933,11 +933,11 @@
libGetOptionsForArch arch args =
(options arch) { extraIncludes =
[ NoDep SrcTree "src" a | a <-
Args.addIncludes args],
- optIncludes = (optIncludes $ options arch) \\
+ optIncludes = (optIncludes $ options arch) \\\
[ NoDep SrcTree "src" i | i <-
Args.omitIncludes args ],
- optFlags = (optFlags $ options arch) \\
+ optFlags = (optFlags $ options arch) \\\
[ Str f | f <- Args.omitCFlags args ],
- optCxxFlags = (optCxxFlags $ options arch) \\
+ optCxxFlags = (optCxxFlags $ options arch) \\\
[ Str f | f <- Args.omitCxxFlags
args ],
optSuffix = "_for_lib_" ++ Args.target args,
extraFlags = Args.addCFlags args ++
Args.addCxxFlags args,
diff -r 12e657e0ed48 hake/hake.sh
--- a/hake/hake.sh Fri Mar 22 13:15:31 2013 +0100
+++ b/hake/hake.sh Mon Apr 01 10:33:39 2013 +0800
@@ -125,6 +125,7 @@
echo "Building hake..."
ghc -O --make -XDeriveDataTypeable \
+ -cpp \
-package ghc \
-package ghc-paths \
-o hake/hake \
diff -r 12e657e0ed48 lib/openssl-1.0.0d/Hakefile
--- a/lib/openssl-1.0.0d/Hakefile Fri Mar 22 13:15:31 2013 +0100
+++ b/lib/openssl-1.0.0d/Hakefile Mon Apr 01 10:33:39 2013 +0800
@@ -11,7 +11,7 @@
--------------------------------------------------------------------------
-- file list generated with this command:
-- asq at schlaptop2:~/tmp/openssl/compile_linux/openssl-1.0.0d/crypto$ \
--- for i in [ `objdump -f libcrypto.a |sed -e '/o:/!d' -e 's/o:.*/c/' `; \
+-- for i in [ `objdump -f libcrypto.a |sed -e '/o:/!d' -e 's/o:.*/c/' `; \
-- do find . -name $i; done |sed -e 's/^/"/'|sed -e 's/$/",/' >> \
--
/home/asq/hg/barrelfish.dyn_adpt/usr/skb/testapps/openssl-1.0.0d/crypto/Hakefile
diff -r 12e657e0ed48 tools/mackerel/Fields.hs
--- a/tools/mackerel/Fields.hs Fri Mar 22 13:15:31 2013 +0100
+++ b/tools/mackerel/Fields.hs Mon Apr 01 10:33:39 2013 +0800
@@ -121,11 +121,11 @@
-- are polymorphic so that they don't need to know how large the total
-- load unit is (32 bits? 8 bits?) etc.
--
-extract_mask :: (Bits a) => Rec -> Integer -> a
+extract_mask :: (Num a, Bits a) => Rec -> Integer -> a
extract_mask f sz =
foldl setBit 0 (enumFromTo (fromInteger $ offset f)
(fromInteger $ (offset f) + (size f) - 1))
-insert_mask :: (Bits a) => Rec -> Integer -> a
+insert_mask :: (Num a, Bits a) => Rec -> Integer -> a
insert_mask f sz =
foldl complementBit (extract_mask f sz) (enumFromTo 0 (fromInteger
sz - 1))
diff -r 12e657e0ed48 tools/mackerel/Main.hs
--- a/tools/mackerel/Main.hs Fri Mar 22 13:15:31 2013 +0100
+++ b/tools/mackerel/Main.hs Mon Apr 01 10:33:39 2013 +0800
@@ -26,6 +26,9 @@
import qualified ShiftDriver
import Checks
import Dev
+#if __GLASGOW_HASKELL__ >= 706
+import Control.Exception
+#endif
--
-- Command line options and parsing code
diff -r 12e657e0ed48 tools/mackerel/ShiftDriver.hs
--- a/tools/mackerel/ShiftDriver.hs Fri Mar 22 13:15:31 2013 +0100
+++ b/tools/mackerel/ShiftDriver.hs Mon Apr 01 10:33:39 2013 +0800
@@ -306,12 +306,12 @@
--
-- Functions to generate masks to select or deselect a subfield of bits
--
-select_mask :: (Bits a) => Integer -> Integer -> Integer -> a
+select_mask :: (Num a, Bits a) => Integer -> Integer -> Integer -> a
select_mask word_size start width =
foldl setBit 0 (enumFromTo (fromInteger $ start)
(fromInteger $ start + width - 1))
-deselect_mask :: (Bits a) => Integer -> Integer -> Integer -> a
+deselect_mask :: (Num a, Bits a) => Integer -> Integer -> Integer -> a
deselect_mask word_size start width =
foldl complementBit (select_mask word_size start width)
(enumFromTo 0 (fromInteger word_size - 1))
More information about the Barrelfish-users
mailing list