2 import Distribution.PackageDescription
3 import Distribution.Setup
4 import Distribution.Simple
5 import Distribution.Simple.Configure
6 import Distribution.Simple.LocalBuildInfo
7 import Distribution.Simple.Utils
8 import Distribution.Verbosity
10 import System.Environment
13 main = do args <- getArgs
15 pref : ghcpkg : args' ->
16 let verbosity = case args' of
23 _ -> error ("Bad arguments: " ++ show args)
24 in doit pref ghcpkg verbosity
26 error "Missing arguments"
28 doit :: FilePath -> FilePath -> Verbosity -> IO ()
29 doit pref ghcpkg verbosity =
30 do let userHooks = simpleUserHooks
31 copyFlags = CopyFlags {
32 copyDest = NoCopyDest,
33 copyVerbose = verbosity
35 registerFlags = RegisterFlags {
36 regUser = MaybeUserGlobal,
39 regWithHcPkg = Just ghcpkg,
40 regVerbose = verbosity
42 pdFile <- defaultPackageDesc verbosity
43 pd <- readPackageDescription verbosity pdFile
44 lbi <- getPersistBuildConfig
45 let -- XXX This is an almighty hack, shadowing the base Setup.hs hack
46 lib' = case library pd of
49 exposedModules = filter (("GHC.Prim" /=))
53 error "Expected a library, but none found"
54 pd' = pd { library = Just lib' }
55 -- When coying, we need to actually give a concrete
56 -- directory to copy to rather than "$topdir"
57 lbi_copy = lbi { prefix = pref }
58 -- When we run GHC we give it a $topdir that includes the
59 -- $compiler/lib/ part of libsubdir, so we only want the
60 -- $pkgid part in the package.conf file. This is a bit of
62 lbi_register = lbi { libsubdir = "$pkgid" }
63 (copyHook simpleUserHooks) pd' lbi_copy userHooks copyFlags
64 (regHook simpleUserHooks) pd' lbi_register userHooks registerFlags