{-# LANGUAGE CPP #-} module Main (main) where import Distribution.Simple import Distribution.Simple.Program import Distribution.Simple.LocalBuildInfo import Distribution.PackageDescription import System.FilePath import System.Environment (getEnv, setEnv) import Distribution.Simple.LocalBuildInfo (installedPkgs) import Distribution.Simple.PackageIndex (lookupDependency) import Distribution.Package (Dependency, PackageName) import Distribution.Version (anyVersion) import Distribution.System (buildOS, OS(Windows, OSX)) import Distribution.InstalledPackageInfo import System.IO.Error #if defined(MIN_VERSION_Cabal) && MIN_VERSION_Cabal(2,0,0) _PackageName = mkPackageName #else _PackageName = PackageName #endif main :: IO () main = defaultMainWithHooks (simpleUserHooks { buildHook = myBuildHook }) myBuildHook pkg_descr local_bld_info user_hooks bld_flags = let fltkhsDependency = lookupDependency (installedPkgs local_bld_info) (Dependency (_PackageName "fltkhs") anyVersion) keepBuilding = (buildHook simpleUserHooks) pkg_descr local_bld_info user_hooks bld_flags in case fltkhsDependency of [] -> keepBuilding (_,[]):_ -> keepBuilding (_, (packageInfo:_)):_ -> mapM_ (updateEnv "LIBRARY_PATH") (libraryDirs packageInfo) >> keepBuilding updateEnv :: String -> String -> IO () updateEnv env value = do old <- tryIOError (getEnv env) setEnv env ((either (const value) (\old' -> value ++ (case buildOS of Windows -> ";" _ -> ":") ++ old' ) old))