packages feed

yi-0.2: Setup.hs

#!/usr/bin/env runhaskell
module Main where

import Distribution.Simple
import Distribution.Setup
import Distribution.PackageDescription
import Distribution.Simple.LocalBuildInfo
import System.Info
import System.Process
import Data.List
import System.IO
import System.Exit
import Data.Maybe

main :: IO ()
main = defaultMainWithHooks defaultUserHooks
       { postConf = pC, preBuild = setConfigInfo }

pC :: Args -> ConfigFlags -> PackageDescription -> LocalBuildInfo -> IO ExitCode
pC args a b lbi = do
    fmap (const ()) $ (postConf defaultUserHooks) args a b lbi  -- call default function (necessary ?)
    getLibDir (compilerPath . compiler $ lbi) >>= \libdir ->
      writeFile ".libdir" libdir
    return $ ExitSuccess
  where getLibDir ghcPath = do 
          (_, out, _, pid) <- runInteractiveProcess ghcPath ["--print-libdir"]
                                                           Nothing Nothing
          libDir <- hGetLine out
          waitForProcess pid
          return libDir

setConfigInfo args _
    = readFile ".libdir" >>= \libdir ->
      return
      (Nothing,
       [("yi", emptyBuildInfo
         { options = [(GHC,[mkOpt ("GHC_LIBDIR",show libdir)])] })])
    where mkOpt (name,def) = "-D"++name++"="++def

-- Marc Weber: I don't like this patch because it's using the .libdir
-- file to store the libdir. There must be a better way but I don't
-- want to spend more time on this.