/Setup.hs

http://github.com/Eelis/geordi · Haskell · 26 lines · 22 code · 3 blank · 1 comment · 0 complexity · 86528a2fb5dbf5f9d3a2cc6f87de6930 MD5 · raw file

  1. #! /usr/bin/env runhaskell
  2. import Distribution.Simple
  3. import Distribution.Simple.Setup (ConfigFlags, InstallFlags)
  4. import Distribution.PackageDescription (PackageDescription(..))
  5. import Distribution.Simple.LocalBuildInfo (LocalBuildInfo(..))
  6. import Distribution.Simple.InstallDirs (initialPathTemplateEnv, prefix, bindir, datadir, datasubdir, fromPathTemplate, installDirsTemplateEnv, packageTemplateEnv, substPathTemplate)
  7. import System.Posix.Files (setFileMode, ownerModes)
  8. main :: IO ()
  9. main = defaultMainWithHooks $ autoconfUserHooks { postInst = myPostInst }
  10. myPostInst :: Args -> InstallFlags -> PackageDescription -> LocalBuildInfo -> IO ()
  11. myPostInst args flags pkg_descr lbi = do
  12. (pre, _:post) <- fmap (span (/= "DATA=\"\"") . lines) $ readFile "scripts/compile-prelude"
  13. let
  14. idt = installDirTemplates lbi
  15. env = installDirsTemplateEnv idt
  16. idt' = fmap (fromPathTemplate
  17. . substPathTemplate env
  18. . substPathTemplate (packageTemplateEnv (package pkg_descr))) idt
  19. -- This makes little sense to me, but it works...
  20. to = bindir idt' ++ "/geordi-compile-prelude"
  21. writeFile to $ unlines $ pre ++ ["DATA=\"" ++ datadir idt' ++ "/" ++ datasubdir idt' ++ "/\""] ++ post
  22. setFileMode to ownerModes
  23. postInst autoconfUserHooks args flags pkg_descr lbi