packages feed

sindre-0.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 sindreHooks
sindreHooks = simpleUserHooks { postInst = sindrePostInst
                              , postCopy = sindrePostCopy }

sindre = "sindre"

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

sindrePostInst a (InstallFlags { installPackageDB = db, installVerbosity = v }) =
  sindrePostCopy a (defaultCopyFlags { copyDest = Flag NoCopyDest, copyVerbosity = v })

sindrePostCopy 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)
     unless isWindows $ do
       copyFileVerbose v "sinmenu" (bin "sinmenu")
       fs <- getFileStatus (bin "sindre")
       setFileMode (bin "sinmenu") $ fileMode fs
       putStrLn $ "Installing manpage in " ++ mandir dirs
       createDirectoryIfMissing True $ mandir dirs `combine` "man1"
       copyFileVerbose v "sindre.1" (mandir dirs `combine` "man1" `combine` "sindre.1")
       createDirectoryIfMissing True $ mandir dirs `combine` "man1"
       copyFileVerbose v "sinmenu.1" (mandir dirs `combine` "man1" `combine` "sinmenu.1")