Blob Blame Raw
diff -rN -u old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs
--- old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs	2011-01-22 14:49:22.000000000 +1000
+++ new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Configure.hs	2011-01-22 14:49:22.000000000 +1000
@@ -488,6 +488,7 @@
                     withVanillaLib      = fromFlag $ configVanillaLib cfg,
                     withProfLib         = fromFlag $ configProfLib cfg,
                     withSharedLib       = fromFlag $ configSharedLib cfg,
+                    withDynExe          = fromFlag $ configDynExe cfg,
                     withProfExe         = fromFlag $ configProfExe cfg,
                     withOptimization    = fromFlag $ configOptimization cfg,
                     withGHCiLib         = fromFlag $ configGHCiLib cfg,
diff -u ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs.orig ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs
--- ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs.orig	2010-11-13 04:10:09.000000000 +1000
+++ ghc-7.0.1/libraries/Cabal/Distribution/Simple/GHC.hs	2011-01-22 14:52:52.000000000 +1000
@@ -537,6 +537,7 @@
      info verbosity "Building C Sources..."
      sequence_ [do let (odir,args) = constructCcCmdLine lbi libBi clbi pref
                                                         filename verbosity
+                                                        False
                                                         (withProfLib lbi)
                    createDirectoryIfMissingVerbose verbosity True odir
                    runGhcProg args
@@ -671,7 +672,7 @@
    info verbosity "Building C Sources."
    sequence_ [do let (odir,args) = constructCcCmdLine lbi exeBi clbi
                                           exeDir filename verbosity
-                                          (withProfExe lbi)
+                                          (withDynExe lbi) (withProfExe lbi)
                  createDirectoryIfMissingVerbose verbosity True odir
                  runGhcProg args
              | filename <- cSources exeBi]
@@ -679,7 +680,7 @@
   srcMainFile <- findFile (exeDir : hsSourceDirs exeBi) modPath
 
   let cObjs = map (`replaceExtension` objExtension) (cSources exeBi)
-  let binArgs linkExe profExe =
+  let binArgs linkExe dynExe profExe =
              "--make"
           :  (if linkExe
                  then ["-o", targetDir </> exeNameReal]
@@ -691,6 +692,9 @@
           ++ ["-l"++lib | lib <- extraLibs exeBi]
           ++ ["-L"++libDir | libDir <- extraLibDirs exeBi]
           ++ concat [["-framework", f] | f <- PD.frameworks exeBi]
+          ++ if dynExe
+                then ["-dynamic"]
+                else []
           ++ if profExe
                 then ["-prof",
                       "-hisuf", "p_hi",
@@ -704,9 +708,9 @@
   -- run at compile time needs to be the vanilla ABI so it can
   -- be loaded up and run by the compiler.
   when (withProfExe lbi && TemplateHaskell `elem` allExtensions exeBi)
-     (runGhcProg (binArgs False False))
+     (runGhcProg (binArgs (withDynExe lbi) False False))
 
-  runGhcProg (binArgs True (withProfExe lbi))
+  runGhcProg (binArgs True (withDynExe lbi) (withProfExe lbi))
 
 -- | Filter the "-threaded" flag when profiling as it does not
 --   work with ghc-6.8 and older.
@@ -836,9 +840,9 @@
     ierror     = error ("internal error: unexpected package db stack: " ++ show dbstack)
 
 constructCcCmdLine :: LocalBuildInfo -> BuildInfo -> ComponentLocalBuildInfo
-                   -> FilePath -> FilePath -> Verbosity -> Bool
+                   -> FilePath -> FilePath -> Verbosity -> Bool -> Bool
                    ->(FilePath,[String])
-constructCcCmdLine lbi bi clbi pref filename verbosity profiling
+constructCcCmdLine lbi bi clbi pref filename verbosity dynamic profiling
   =  let odir | compilerVersion (compiler lbi) >= Version [6,4,1] []  = pref
               | otherwise = pref </> takeDirectory filename
                         -- ghc 6.4.1 fixed a bug in -odir handling
@@ -852,6 +856,7 @@
          -- option to ghc here when compiling C code, so that the PROFILING
          -- macro gets defined. The macro is used in ghc's Rts.h in the
          -- definitions of closure layouts (Closures.h).
+         ++ ["-dynamic" | dynamic]
          ++ ["-prof" | profiling])
 
 ghcCcOptions :: LocalBuildInfo -> BuildInfo -> ComponentLocalBuildInfo
diff -rN -u old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs
--- old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs	2011-01-22 14:49:22.000000000 +1000
+++ new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/LocalBuildInfo.hs	2011-01-22 14:49:22.000000000 +1000
@@ -118,6 +118,7 @@
         withVanillaLib:: Bool,  -- ^Whether to build normal libs.
         withProfLib   :: Bool,  -- ^Whether to build profiling versions of libs.
         withSharedLib :: Bool,  -- ^Whether to build shared versions of libs.
+        withDynExe    :: Bool,  -- ^Whether to link executables dynamically
         withProfExe   :: Bool,  -- ^Whether to build executables for profiling.
         withOptimization :: OptimisationLevel, -- ^Whether to build with optimization (if available).
         withGHCiLib   :: Bool,  -- ^Whether to build libs suitable for use with GHCi.
diff -rN -u old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs
--- old-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs	2011-01-22 14:49:22.000000000 +1000
+++ new-ghc-7.0.1/libraries/Cabal/Distribution/Simple/Setup.hs	2011-01-22 14:49:22.000000000 +1000
@@ -270,6 +270,7 @@
     configVanillaLib    :: Flag Bool,     -- ^Enable vanilla library
     configProfLib       :: Flag Bool,     -- ^Enable profiling in the library
     configSharedLib     :: Flag Bool,     -- ^Build shared library
+    configDynExe        :: Flag Bool,     -- ^Enable dynamic linking of the executables.
     configProfExe       :: Flag Bool,     -- ^Enable profiling in the executables.
     configConfigureArgs :: [String],      -- ^Extra arguments to @configure@
     configOptimization  :: Flag OptimisationLevel,  -- ^Enable optimization.
@@ -301,6 +302,7 @@
     configVanillaLib   = Flag True,
     configProfLib      = Flag False,
     configSharedLib    = Flag False,
+    configDynExe       = Flag False,
     configProfExe      = Flag False,
     configOptimization = Flag NormalOptimisation,
     configProgPrefix   = Flag (toPathTemplate ""),
@@ -388,10 +390,16 @@
          configSharedLib (\v flags -> flags { configSharedLib = v })
          (boolOpt [] [])
 
+      ,option "" ["executable-dynamic"]
+         "Executable dynamic linking (fedora patch)"
+         configDynExe (\v flags -> flags { configDynExe = v })
+         (boolOpt [] [])
+
       ,option "" ["executable-profiling"]
          "Executable profiling"
          configProfExe (\v flags -> flags { configProfExe = v })
          (boolOpt [] [])
+
       ,multiOption "optimization"
          configOptimization (\v flags -> flags { configOptimization = v })
          [optArg' "n" (Flag . flagToOptimisationLevel)
@@ -553,6 +561,7 @@
     configVanillaLib    = mempty,
     configProfLib       = mempty,
     configSharedLib     = mempty,
+    configDynExe        = mempty,
     configProfExe       = mempty,
     configConfigureArgs = mempty,
     configOptimization  = mempty,
@@ -583,6 +592,7 @@
     configVanillaLib    = combine configVanillaLib,
     configProfLib       = combine configProfLib,
     configSharedLib     = combine configSharedLib,
+    configDynExe        = combine configDynExe,
     configProfExe       = combine configProfExe,
     configConfigureArgs = combine configConfigureArgs,
     configOptimization  = combine configOptimization,