X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=utils%2FinstallPackage%2FinstallPackage.hs;h=2c3d245fc89014299b054a67032af4d6d594f32b;hb=54b748e03297e970bbef9d00a96139798009af0d;hp=65eab5664b1808e7c1b9077429be6c65b4d8f83f;hpb=e7d5df5d11379fb95ffd980b56a97ee143720d6a;p=ghc-hetmet.git diff --git a/utils/installPackage/installPackage.hs b/utils/installPackage/installPackage.hs index 65eab56..2c3d245 100644 --- a/utils/installPackage/installPackage.hs +++ b/utils/installPackage/installPackage.hs @@ -1,4 +1,5 @@ +import Control.Monad import Data.Maybe import Distribution.PackageDescription import Distribution.PackageDescription.Parse @@ -13,10 +14,6 @@ import Distribution.Text import Distribution.Verbosity import System.Environment --- XXX This will need to be changed -distPref :: FilePath -distPref = defaultDistPref - main :: IO () main = do args <- getArgs @@ -25,28 +22,44 @@ main iprefix : ibindir : ilibdir : ilibexecdir : idynlibdir : idatadir : idocdir : ihtmldir : ihaddockdir : args' -> - let verbosity = mkVerbosity args' - in doInstall verbosity ghcpkg ghcpkgconf destdir topdir - iprefix ibindir ilibdir ilibexecdir idynlibdir idatadir - idocdir ihtmldir ihaddockdir + case parseArgs args' of + (verbosity, distPref, enableShellWrappers, strip) -> + doInstall verbosity distPref enableShellWrappers strip + ghcpkg ghcpkgconf destdir topdir + iprefix ibindir ilibdir ilibexecdir + idynlibdir idatadir idocdir ihtmldir + ihaddockdir _ -> error ("Bad arguments: " ++ show args) -mkVerbosity :: [String] -> Verbosity -mkVerbosity [] = normal -mkVerbosity ['-':'v':v] = readEOrFail flagToVerbosity v -mkVerbosity args = error ("Bad arguments: " ++ show args) +-- XXX We should really make Cabal do the hardwork here +parseArgs :: [String] + -> (Verbosity, -- verbosity + FilePath, -- dist prefix + Bool, -- enable shell wrappers? + Bool) -- strip exe? +parseArgs = f normal defaultDistPref False True + where f _ dp esw strip (('-':'v':val):args) + = f (readEOrFail flagToVerbosity val) dp esw strip args + f v _ esw strip ("--distpref":dp:args) = f v dp esw strip args + f v dp _ strip ("--enable-shell-wrappers":args) = f v dp True strip args + f v dp esw _ ("--disable-executable-stripping":args) = f v dp esw False args + f v dp esw strip [] = (v, dp, esw, strip) + f _ _ _ _ args = error ("Bad arguments: " ++ show args) -doInstall :: Verbosity -> FilePath -> FilePath -> FilePath -> FilePath +doInstall :: Verbosity -> FilePath -> Bool -> Bool + -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> FilePath -> IO () -doInstall verbosity ghcpkg ghcpkgconf destdir topdir +doInstall verbosity distPref enableShellWrappers strip + ghcpkg ghcpkgconf destdir topdir iprefix ibindir ilibdir ilibexecdir idynlibdir idatadir idocdir ihtmldir ihaddockdir = do let userHooks = simpleUserHooks copyto = if null destdir then NoCopyDest else CopyTo destdir copyFlags = defaultCopyFlags { + copyUseWrapper = toFlag enableShellWrappers, copyDest = toFlag copyto, copyVerbosity = toFlag verbosity } @@ -56,7 +69,7 @@ doInstall verbosity ghcpkg ghcpkgconf destdir topdir regGenScript = toFlag $ False, regInPlace = toFlag $ False } - lbi <- getConfig verbosity + lbi <- getConfig verbosity distPref let pd = localPkgDescr lbi i = installDirTemplates lbi -- This is an almighty hack. We need to register @@ -85,7 +98,8 @@ doInstall verbosity ghcpkg ghcpkgconf destdir topdir htmldir = toPathTemplate' ihtmldir, haddockdir = toPathTemplate' ihaddockdir } - lbi_copy = lbi { installDirTemplates = i_copy } + lbi_copy = lbi { installDirTemplates = i_copy, + stripExes = strip } -- When we run GHC we give it a $topdir that includes the -- $compiler/lib/ part of libsubdir, so we only want the -- $pkgid part in the package.conf file. This is a bit of @@ -111,7 +125,11 @@ doInstall verbosity ghcpkg ghcpkgconf destdir topdir lbi_reg = lbi { installDirTemplates = i_reg, withPrograms = progs' } (copyHook simpleUserHooks) pd lbi_copy userHooks copyFlags - (regHook simpleUserHooks) pd_reg lbi_reg userHooks registerFlags + -- Cabal prints a scary "Package contains no library to register" + -- message if we call register but this is an executable package. + -- We therefore don't call it if we don't have a library for it. + when (isJust (library pd_reg)) $ + (regHook simpleUserHooks) pd_reg lbi_reg userHooks registerFlags return () replaceTopdir :: FilePath -> FilePath -> FilePath @@ -121,8 +139,8 @@ replaceTopdir topdir ('$':'h':'t':'t':'p':'t':'o':'p':'d':'i':'r':p) replaceTopdir _ p = p -- Get the build info, merging the setup-config and buildinfo files. -getConfig :: Verbosity -> IO LocalBuildInfo -getConfig verbosity = do +getConfig :: Verbosity -> FilePath -> IO LocalBuildInfo +getConfig verbosity distPref = do lbi <- getPersistBuildConfig distPref maybe_infoFile <- defaultHookedPackageDesc case maybe_infoFile of