git.iko.soy/typeable/cabal2nix
on v2.0 help sign in
40 lines 1.4 kB history raw
1#! /usr/bin/env runhaskell
3> module Main ( main ) where
4>
5> import Data.Char
6> import Data.Maybe
7> import Distribution.PackageDescription
8> import Distribution.Simple
9> import Distribution.Simple.LocalBuildInfo
10> import Distribution.Simple.Program
11> import Distribution.Simple.Setup
13> main :: IO ()
14> main = defaultMainWithHooks simpleUserHooks
15> { hookedPrograms = map simpleProgram programs
16> , confHook = configure
17> }
19> programs :: [String]
20> programs = ["nix-instantiate", "nix-build", "nix-env", "nix-store"]
22> configure :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags -> IO LocalBuildInfo
23> configure (gpd, hbi) flags = do
24> lbi' <- confHook simpleUserHooks (gpd, hbi) flags
25> let paths = map (\p -> (p, maybe p programPath (lookupProgram (simpleProgram p) (withPrograms lbi)))) programs
26> descr = localPkgDescr lbi'
27> lib = fromJust (library descr)
28> libbi = libBuildInfo lib
29> lbi = lbi' { localPkgDescr = descr
30> { library = Just (lib { libBuildInfo = libbi { cppOptions = cppOptions libbi ++ map fmtCppArg paths } })
31> }
32> }
33> return lbi
35> fmtCppArg :: (String, FilePath) -> String
36> fmtCppArg (prg, path) = "-DPATH_TO_" ++ map mangle prg ++ "=" ++ show path
37> where
38> mangle :: Char -> Char
39> mangle '-' = '_'
40> mangle c = toUpper c