packages feed

cabal2nix-2.0: Setup.lhs

#! /usr/bin/env runhaskell

> module Main ( main ) where
>
> import Data.Char
> import Data.Maybe
> import Distribution.PackageDescription
> import Distribution.Simple
> import Distribution.Simple.LocalBuildInfo
> import Distribution.Simple.Program
> import Distribution.Simple.Setup
>
> main :: IO ()
> main = defaultMainWithHooks simpleUserHooks
>        { hookedPrograms = map simpleProgram programs
>        , confHook = configure
>        }
>
> programs :: [String]
> programs = ["nix-instantiate", "nix-build", "nix-env", "nix-store"]
>
> configure :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags -> IO LocalBuildInfo
> configure (gpd, hbi) flags = do
>   lbi' <- confHook simpleUserHooks (gpd, hbi) flags
>   let paths = map (\p -> (p, maybe p programPath (lookupProgram (simpleProgram p) (withPrograms lbi)))) programs
>       descr = localPkgDescr lbi'
>       lib = fromJust (library descr)
>       libbi = libBuildInfo lib
>       lbi = lbi' { localPkgDescr = descr
>                    { library = Just (lib { libBuildInfo = libbi { cppOptions = cppOptions libbi ++ map fmtCppArg paths } })
>                    }
>                  }
>   return lbi
>
> fmtCppArg :: (String, FilePath) -> String
> fmtCppArg (prg, path) = "-DPATH_TO_" ++ map mangle prg ++ "=" ++ show path
>   where
>     mangle :: Char -> Char
>     mangle '-' = '_'
>     mangle c = toUpper c