packages feed

gsmenu-1.1: Setup.hs

#!/usr/bin/env runhaskell

import Distribution.Simple.Setup (CopyDest(..),ConfigFlags(..),BuildFlags(..),
                                  CopyFlags(..),RegisterFlags(..),InstallFlags(..),
                                  defaultRegisterFlags,fromFlagOrDefault,Flag(..),
                                  defaultCopyFlags)
import Distribution.Simple
import Distribution.Simple.LocalBuildInfo
                            (LocalBuildInfo(..),absoluteInstallDirs)
import Distribution.Simple.Configure (configCompilerAux)
import Distribution.PackageDescription (PackageDescription(..))
import Distribution.Simple.InstallDirs
                            (InstallDirs(..))
import Distribution.Simple.Program 
                            (Program(..),ConfiguredProgram(..),ProgramConfiguration(..),
                             ProgramLocation(..),simpleProgram,lookupProgram,
                             rawSystemProgramConf)
import Distribution.Simple.Utils
import Distribution.Verbosity
import Data.Char (isSpace, showLitChar)
import Data.List (isSuffixOf,isPrefixOf)
import Data.Maybe (listToMaybe,isJust)
import Data.Version
import Control.Monad (when,unless)
import Text.ParserCombinators.ReadP (readP_to_S)
import System.Exit
import System.IO (hGetContents,hClose,hPutStr,stderr)
import System.IO.Error (try)
import System.Process (runInteractiveProcess,waitForProcess)
import System.Posix
import System.Directory
import System.Info (os)
import System.FilePath

main = defaultMainWithHooks gsmenuHooks
gsmenuHooks = simpleUserHooks { postInst = gsmenuPostInst
                              , postCopy = gsmenuPostCopy }

gsmenu = "gsmenu"

isWindows :: Bool
isWindows = os == "mingw" -- XXX

gsmenuPostInst a (InstallFlags { installPackageDB = db, installVerbosity = v }) pd lbi =
    do  gsmenuPostCopy a (defaultCopyFlags { copyDest = Flag NoCopyDest, copyVerbosity = v }) pd lbi

gsmenuPostCopy a (CopyFlags { copyDest = cdf, copyVerbosity = vf }) pd lbi =
    do let v         = fromFlagOrDefault normal vf
           cd        = fromFlagOrDefault NoCopyDest cdf
           dirs      = absoluteInstallDirs pd lbi cd
           bin       = combine (bindir dirs)
       when (not isWindows) $ do
         copyFileVerbose v ("gsmenu_path") (bin "gsmenu_path")
         fs <- getFileStatus (bin "gsmenu")
         setFileMode (bin "gsmenu_path") $ fileMode fs
         putStrLn $ "Installing manpage in " ++ mandir dirs
         createDirectoryIfMissing True $ mandir dirs
         copyFileVerbose v ("gsmenu.1") (mandir dirs `combine` "man1" `combine` "gsmenu.1")