import Distribution.Simple
import Distribution.Simple.Setup
import Distribution.Simple.Program
import Distribution.Simple.Program.Types
import Distribution.Simple.LocalBuildInfo
import Distribution.PackageDescription
main :: IO ()
main = defaultMainWithHooks simpleUserHooks {
buildHook = buildCPlusPlus
}
buildCPlusPlus :: PackageDescription -> LocalBuildInfo -> UserHooks -> BuildFlags -> IO ()
buildCPlusPlus pkg buildInfo hooks flags = do
-- library
progc "clang++" flags
["-stdlib=libc++", "-o", "cbits/hsprotobuf.o", "-c", "cbits/hsprotobuf.cc"]
case executables pkg of
[Executable {exeName = "protobuf-native-test"}] -> do
progc "clang++" flags
["-stdlib=libc++", "-o", "tests/person.pb.o", "-c", "tests/person.pb.cc"]
[] -> return ()
e -> error $ "unknown build target: " ++ show e
buildHook simpleUserHooks pkg buildInfo hooks flags
progc prog flags cc_flags = do
let verb = fromFlag (buildVerbosity flags)
clang <- findProgramLocation verb prog
let clang' = case clang of
Just x -> x
Nothing -> error $ prog ++ " not on path"
runProgram verb (simpleConfiguredProgram prog (FoundOnSystem clang')) cc_flags