From 7d535dea5dd1fc8d3af0cbee38c90febc75318b9 Mon Sep 17 00:00:00 2001
From: ijones <ijones@syntaxpolice.org>
Date: Wed, 16 Feb 2005 06:37:41 +0000
Subject: [PATCH] added --gen-script to register and unregister

---
 Distribution/Make.hs            |  8 ++++----
 Distribution/Setup.hs           | 36 ++++++++++++++++++++-------------
 Distribution/Simple.hs          | 10 ++++-----
 Distribution/Simple/Register.hs | 17 ++++++++--------
 tests/ModuleTest.hs             |  2 +-
 5 files changed, 40 insertions(+), 33 deletions(-)

diff --git a/Distribution/Make.hs b/Distribution/Make.hs
index 72c60f3e72..67b1347d10 100644
--- a/Distribution/Make.hs
+++ b/Distribution/Make.hs
@@ -159,11 +159,11 @@ defaultMainNoRead pkg_descr
 
             SDistCmd -> basicCommand "SDist" "make dist" (parseSDistArgs args [])
 
-            RegisterCmd uInst -> basicCommand "Register" "make register"
-                                              (parseRegisterArgs (uInst,0) args [])
+            RegisterCmd uInst genScript -> basicCommand "Register" "make register"
+                                           (parseRegisterArgs (uInst,genScript, 0) args [])
 
-            UnregisterCmd uInst -> basicCommand "Unregister" "make unregister"
-                                              (parseUnregisterArgs (uInst, 0) args [])
+            UnregisterCmd uInst genScript -> basicCommand "Unregister" "make unregister"
+                                           (parseUnregisterArgs (uInst, genScript, 0) args [])
             ProgramaticaCmd -> basicCommand "Programatica" "make programatica"
                                         (parseProgramaticaArgs args [])
 
diff --git a/Distribution/Setup.hs b/Distribution/Setup.hs
index f73407e570..ecbfa13826 100644
--- a/Distribution/Setup.hs
+++ b/Distribution/Setup.hs
@@ -91,8 +91,8 @@ data Action = ConfigCmd ConfigFlags       -- config
             | ProgramaticaCmd             -- pfesetup
             | InstallCmd Bool -- install (install-prefix) (--user flag)
             | SDistCmd                    -- sdist
-            | RegisterCmd Bool            -- register (--user flag)
-            | UnregisterCmd Bool          -- unregister (--user flag)
+            | RegisterCmd   Bool Bool     -- register (--user flag, --gen-script)
+            | UnregisterCmd Bool Bool     -- unregister (--user flag, --gen-script)
 	    | HelpCmd			  -- help
 --            | NoCmd -- error case, help case.
 --             | TestCmd 1.0?
@@ -137,8 +137,10 @@ data Flag a = GhcFlag | NhcFlag | HugsFlag
           | WithCompiler FilePath | WithHcPkg FilePath | Prefix FilePath
           | WithHaddock FilePath | WithHappy FilePath | WithAlex FilePath
           | WithHsc2hs FilePath | WithCpphs FilePath
-          -- For install and register:
+          -- For install, register, and unregister:
           | UserFlag | GlobalFlag
+          -- for register & unregister
+          | GenScriptFlag
           -- For copy:
           | InstPrefix FilePath
           -- For everyone:
@@ -447,13 +449,15 @@ registerCmd = Cmd {
            Option "" ["user"] (NoArg UserFlag)
                "upon registration, register this package in the user's local package database",
            Option "" ["global"] (NoArg GlobalFlag)
-               "(default) upon registration, register this package in the system-wide package database"
+               "(default) upon registration, register this package in the system-wide package database",
+           Option "" ["gen-script"] (NoArg GenScriptFlag)
+               "Instead of performing the register command, generate a script to register later"
            ],
-        cmdAction      = RegisterCmd False
+        cmdAction      = RegisterCmd False False
         }
 
--- | Flags to @register@ and @unregister@: (user package, verbose)
-type RegisterFlags = (Bool,Int)
+-- | Flags to @register@ and @unregister@: (user package, gen-script, verbose)
+type RegisterFlags = (Bool, Bool, Int)
 
 parseRegisterArgs :: RegisterFlags -> [String] -> [OptDescr a] ->
                      IO (RegisterFlags, [a], [String])
@@ -467,12 +471,13 @@ parseRegisterArgs cfg args customOpts =
     (_, _, errs) -> do putStrLn "Errors: "
                        mapM_ putStrLn errs
                        exitWith (ExitFailure 1)
-  where updateCfg (fl:flags) (uFlag,verbose) = updateCfg flags $
+  where updateCfg (fl:flags) (uFlag, genScriptFlag, verbose) = updateCfg flags $
           case fl of
-            UserFlag        -> (True,verbose)
-            GlobalFlag      -> (False,verbose)
-            Verbose n       -> (uFlag,n)
-            Lift _          -> (uFlag,verbose)
+            UserFlag        -> (True, genScriptFlag, verbose)
+            GlobalFlag      -> (False, genScriptFlag, verbose)
+            Verbose n       -> (uFlag,genScriptFlag, n)
+            GenScriptFlag   -> (uFlag, True, verbose)
+            Lift _          -> (uFlag,genScriptFlag, verbose)
             _               -> error $ "Unexpected flag!"
         updateCfg [] t = t
 
@@ -485,9 +490,12 @@ unregisterCmd = Cmd {
            Option "" ["user"] (NoArg UserFlag)
                "unregister this package in the user's local package database",
            Option "" ["global"] (NoArg GlobalFlag)
-               "(default) unregister this package in the system-wide package database"
+               "(default) unregister this package in the system-wide package database",
+           Option "" ["gen-script"] (NoArg GenScriptFlag)
+               "Instead of performing the unregister command, generate a script to unregister later"
+
            ],
-        cmdAction      = UnregisterCmd False
+        cmdAction      = UnregisterCmd False False
         }
 
 parseUnregisterArgs :: RegisterFlags -> [String] -> [OptDescr a] ->
diff --git a/Distribution/Simple.hs b/Distribution/Simple.hs
index 05528b046f..a60636eaea 100644
--- a/Distribution/Simple.hs
+++ b/Distribution/Simple.hs
@@ -301,7 +301,7 @@ defaultMainWorker pkg_descr_in action args hooks
                       (die "Hugs cannot yet install user-only packages.")
 		install pkg_descr localbuildinfo (Nothing, verbose)
                 when (hasLibs pkg_descr)
-                         (register pkg_descr localbuildinfo flags)
+                         (register pkg_descr localbuildinfo (uInst, False, verbose))
                 postHook postInst args flags localbuildinfo
 
             SDistCmd -> do
@@ -313,15 +313,15 @@ defaultMainWorker pkg_descr_in action args hooks
 		sdist srcPref distPref verbose pps pkg_descr
                 postHook postSDist args verbose localbuildinfo
 
-            RegisterCmd uInst -> do
-                (flags, _, args) <- parseRegisterArgs (uInst,0) args []
+            RegisterCmd uInst genScript -> do
+                (flags, _, args) <- parseRegisterArgs (uInst, genScript, 0) args []
                 pkg_descr <- hookOrInArgs preReg args flags
 		localbuildinfo <- getPersistBuildConfig
 		when (hasLibs pkg_descr) (register pkg_descr localbuildinfo flags)
                 postHook postReg args flags localbuildinfo
 
-            UnregisterCmd uInst -> do
-                (flags,_, args) <- parseUnregisterArgs (uInst,0) args []
+            UnregisterCmd uInst genScript -> do
+                (flags,_, args) <- parseUnregisterArgs (uInst,genScript, 0) args []
                 pkg_descr <- hookOrInArgs preUnreg args flags
 		localbuildinfo <- getPersistBuildConfig
 		unregister pkg_descr localbuildinfo flags
diff --git a/Distribution/Simple/Register.hs b/Distribution/Simple/Register.hs
index f4d5f677a8..f276927f33 100644
--- a/Distribution/Simple/Register.hs
+++ b/Distribution/Simple/Register.hs
@@ -99,13 +99,12 @@ unregScriptLocation = "unregister.sh"
 register :: PackageDescription -> LocalBuildInfo
          -> RegisterFlags -- ^Install in the user's database?; verbose
          -> IO ()
-register pkg_descr lbi (userInst,verbose)
+register pkg_descr lbi (userInst, genScript, verbose)
   | isNothing (library pkg_descr) = do
     setupMessage "No package to register" pkg_descr
     return ()
   | otherwise = do
-    let writeRegScript = verbose > 10 -- FIX, thread new flag.
-    setupMessage (if writeRegScript
+    setupMessage (if genScript
                      then ("Writing registration script: " ++ regScriptLocation)
                      else "Registering")
                  pkg_descr
@@ -121,13 +120,13 @@ register pkg_descr lbi (userInst,verbose)
 			  GHC.maybeCreateLocalPackageConfig
 		          localConf <- GHC.localPackageConfig
 			  pkgConfWriteable <- GHC.canWriteLocalPackageConfig
-		          when (not pkgConfWriteable && not writeRegScript)
+		          when (not pkgConfWriteable && not genScript)
                                    $ userPkgConfErr localConf
 			  return ["--config-file=" ++ localConf]
 		else return []
 
         instConfExists <- doesFileExist installedPkgConfigFile
-        when (not instConfExists && not writeRegScript) $ do
+        when (not instConfExists && not genScript) $ do
           when (verbose > 0) $
             putStrLn ("create "++installedPkgConfigFile)
           writeInstalledConfig pkg_descr lbi
@@ -135,7 +134,7 @@ register pkg_descr lbi (userInst,verbose)
 	let register_flags 
 		| ghc_63_plus = ["update", installedPkgConfigFile]
 		| otherwise   = "--update-package":
-				 if writeRegScript
+				 if genScript
                                     then []
                                     else ["--input-file="++installedPkgConfigFile]
         
@@ -144,7 +143,7 @@ register pkg_descr lbi (userInst,verbose)
                         ++ config_flags)
         let pkgTool = compilerPkgTool (compiler lbi)
 
-        if writeRegScript
+        if genScript
          then rawSystemPipe regScriptLocation verbose
                            (showInstalledConfig pkg_descr lbi)
                            pkgTool allFlags
@@ -229,7 +228,7 @@ mkInstalledPackageInfo pkg_descr lbi
 -- Unregistration
 
 unregister :: PackageDescription -> LocalBuildInfo -> RegisterFlags -> IO ()
-unregister pkg_descr lbi (user_unreg, verbose) = do
+unregister pkg_descr lbi (user_unreg, genScript, verbose) = do
   setupMessage "Unregistering" pkg_descr
   let ghc_63_plus = compilerVersion (compiler lbi) >= Version [6,3] []
   let theName = pkgName (package pkg_descr)
@@ -248,7 +247,7 @@ unregister pkg_descr lbi (user_unreg, verbose) = do
         let removeCmd = if ghc_63_plus
                         then ["unregister",theName]
                         else ["--remove-package="++theName]
-	rawSystemEmit unregScriptLocation (verbose>10) verbose (compilerPkgTool (compiler lbi))
+	rawSystemEmit unregScriptLocation genScript verbose (compilerPkgTool (compiler lbi))
 	    (removeCmd++config_flags)
     Hugs -> do
         try $ removeDirectoryRecursive (hugsPackageDir pkg_descr lbi)
diff --git a/tests/ModuleTest.hs b/tests/ModuleTest.hs
index e1765cf19f..2445a805a3 100644
--- a/tests/ModuleTest.hs
+++ b/tests/ModuleTest.hs
@@ -346,7 +346,7 @@ tests currDir comp compConf = [
                   GHC  -> do checkTargetDir ghcTargetDir [".hi"]
                              doesFileExist (ghcTargetDir `joinFileName` "libHStest-1.0.a")
                                >>= assertBool "library doesn't exist"
-          dumpScriptFlag = "-v11"
+          dumpScriptFlag = "--gen-script"
 main :: IO ()
 main = do putStrLn "compile successful"
           putStrLn "-= Setup Tests =-"
-- 
GitLab