btrfs-0.1.0.0: Setup.hs
import Distribution.Simple
import Distribution.Simple.Setup
import Distribution.Simple.Utils
import Distribution.Simple.BuildPaths
import Distribution.Simple.LocalBuildInfo
import Distribution.PackageDescription
import Distribution.ModuleName (fromString)
import System.IO
import System.FilePath
main :: IO ()
main = defaultMainWithHooks simpleUserHooks
{ confHook = customConf
, buildHook = customBuild
}
customConf gh cFlags = do
lbi <- confHook simpleUserHooks gh cFlags
-- modify the package description to add the auto-generated module
let desc = localPkgDescr lbi
Just lib = library desc
modName = fromString "System.Linux.Btrfs.ByteString"
lib' = lib {exposedModules = exposedModules lib ++ [modName]}
desc' = desc {library = Just lib'}
return lbi {localPkgDescr = desc'}
customBuild desc lbi hooks bFlags = do
let verbosity = fromFlag (buildVerbosity bFlags)
-- create System/Linux/Btrfs/ByteString.hsc
let dir = autogenModulesDir lbi </> "System/Linux/Btrfs"
createDirectoryIfMissingVerbose verbosity True dir
withFile (dir </> "ByteString.hsc") WriteMode $ \oHdl -> do
hPutStrLn oHdl "#define BTRFS_RAW_PATHS 1"
withFile "System/Linux/Btrfs.hsc" ReadMode $ \iHdl -> do
_ <- hGetLine iHdl -- skip the first line
contents <- hGetContents iHdl
hPutStr oHdl contents
buildHook simpleUserHooks desc lbi hooks bFlags