#! /usr/bin/env runhaskell
>
> import Control.Monad
> import Distribution.Simple
> import Distribution.PackageDescription
> import System.IO
> import System.Directory
>
> copyFileWithPrefix src tgt prefix =
> readFile src >>= \txt -> writeFile tgt (prefix ++ txt)
>
> copyFiles srcdir tgtdir prefix = do
> files <- getDirectoryContents srcdir
> forM_ files $ \fname -> do
> let src = srcdir ++ fname
> tgt = tgtdir ++ fname
> doesFileExist src >>= \b -> when b $ copyFileWithPrefix src tgt prefix
> doesDirectoryExist src>>= \b -> when ( b && fname /= "." && fname /= ".." ) $ do
> createDirectoryIfMissing False tgt
> copyFiles (src ++ "/") (tgt ++ "/") prefix
>
> thePrefix = "-- DO NOT EDIT THIS FILE\n{-# OPTIONS_GHC -DBITSTRING_BIGENDIAN #-}\n"
>
> myPreBuildHook args buildflags = do
> createDirectoryIfMissing False "Data/BitString"
> copyFileWithPrefix "Data/BitString.hs" "Data/BitString/BigEndian.hs" thePrefix
> return $ emptyHookedBuildInfo
>
> myPostCleanHook args cleanflags pdep mlocalbuildinfo = do
> removeDirectoryRecursive "Data/BitString"
>
> myUserHooks = simpleUserHooks
> { preBuild = myPreBuildHook
> , postClean = myPostCleanHook
> }
>
> main = do
> defaultMainWithHooks myUserHooks
>