summaryrefslogtreecommitdiff
path: root/ghc/utils/ghc-pkg
diff options
context:
space:
mode:
authorsimonpj <unknown>2005-01-27 10:45:48 +0000
committersimonpj <unknown>2005-01-27 10:45:48 +0000
commit508a505e9853984bfdaa3ad855ae3fcbc6d31787 (patch)
treeafeecb94e0ff35cb877e5d48e110c39b0ce6993f /ghc/utils/ghc-pkg
parentf9d8c8e0ab44b24d06b654d98543e8b39d4ebeca (diff)
downloadhaskell-508a505e9853984bfdaa3ad855ae3fcbc6d31787.tar.gz
[project @ 2005-01-27 10:44:00 by simonpj]
-------------------------------------------- Replace hi-boot files with hs-boot files -------------------------------------------- This major commit completely re-organises the way that recursive modules are dealt with. * It should have NO EFFECT if you do not use recursive modules * It is a BREAKING CHANGE if you do ====== Warning: .hi-file format has changed, so if you are ====== updating into an existing HEAD build, you'll ====== need to make clean and re-make The details: [documentation still to be done] * Recursive loops are now broken with Foo.hs-boot (or Foo.lhs-boot), not Foo.hi-boot * An hs-boot files is a proper source file. It is compiled just like a regular Haskell source file: ghc Foo.hs generates Foo.hi, Foo.o ghc Foo.hs-boot generates Foo.hi-boot, Foo.o-boot * hs-boot files are precisely a subset of Haskell. In particular: - they have the same import, export, and scoping rules - errors (such as kind errors) in hs-boot files are checked You do *not* need to mention the "original" name of something in an hs-boot file, any more than you do in any other Haskell module. * The Foo.hi-boot file generated by compiling Foo.hs-boot is a machine- generated interface file, in precisely the same format as Foo.hi * When compiling Foo.hs, its exports are checked for compatibility with Foo.hi-boot (previously generated by compiling Foo.hs-boot) * The dependency analyser (ghc -M) knows about Foo.hs-boot files, and generates appropriate dependencies. For regular source files it generates Foo.o : Foo.hs Foo.o : Baz.hi -- Foo.hs imports Baz Foo.o : Bog.hi-boot -- Foo.hs source-imports Bog For a hs-boot file it generates similar dependencies Bog.o-boot : Bog.hs-boot Bog.o-boot : Nib.hi -- Bog.hs-boto imports Nib * ghc -M is also enhanced to use the compilation manager dependency chasing, so that ghc -M Main will usually do the job. No need to enumerate all the source files. * The -c flag is no longer a "compiler mode". It simply means "omit the link step", and synonymous with -no-link.
Diffstat (limited to 'ghc/utils/ghc-pkg')
-rw-r--r--ghc/utils/ghc-pkg/Main.hs14
1 files changed, 9 insertions, 5 deletions
diff --git a/ghc/utils/ghc-pkg/Main.hs b/ghc/utils/ghc-pkg/Main.hs
index ce1e0b5bc1..d6da9146f0 100644
--- a/ghc/utils/ghc-pkg/Main.hs
+++ b/ghc/utils/ghc-pkg/Main.hs
@@ -309,7 +309,7 @@ registerPackage :: FilePath
-> IO ()
registerPackage input defines db_stack auto_ghci_libs update force = do
let
- db_to_operate_on = head db_stack
+ db_to_operate_on = my_head "db" db_stack
db_filename = fst db_to_operate_on
--
checkConfigAccess db_filename
@@ -541,7 +541,7 @@ checkDuplicates db_stack pkg update = do
when (not update && exposed pkg && not (null exposed_pkgs_with_same_name)) $
die ("trying to register " ++ showPackageId pkgid
++ " as exposed, but "
- ++ showPackageId (package (head exposed_pkgs_with_same_name))
+ ++ showPackageId (package (my_head "when" exposed_pkgs_with_same_name))
++ " is also exposed.")
@@ -633,9 +633,10 @@ updatePackageDB db_stack pkgs new_pkg = do
resolveDep pkgid
| realVersion pkgid = pkgid
| otherwise = lookupDep (pkgName pkgid)
-
+-- = pkgid
+
lookupDep name
- = head [ pid | p <- concat (map snd db_stack),
+ = my_head "dep" [ pid | p <- concat (map snd db_stack),
let pid = package p,
pkgName pid == name ]
@@ -768,7 +769,7 @@ oldRunit clis = do
let auto_ghci_libs = any isAuto clis
where isAuto OF_AutoGHCiLibs = True; isAuto _ = False
- input_file = head ([ f | (OF_Input f) <- clis] ++ ["-"])
+ input_file = my_head "inp" ([ f | (OF_Input f) <- clis] ++ ["-"])
force = OF_Force `elem` clis
@@ -786,6 +787,9 @@ oldRunit clis = do
_ -> do prog <- getProgramName
die (usageInfo (usageHeader prog) flags)
+my_head s [] = error s
+my_head s (x:xs) = x
+
-- ---------------------------------------------------------------------------
#ifdef OLD_STUFF