1diff -Naur ghc-paths-0.1.0.9/GHC/Paths.hs ghc-paths-0.1.0.9-new/GHC/Paths.hs
2--- ghc-paths-0.1.0.9/GHC/Paths.hs 2012-12-16 13:53:45.720148396 +0100
3+++ ghc-paths-0.1.0.9-new/GHC/Paths.hs 2012-12-16 17:22:12.765576568 +0100
4@@ -1,13 +1,35 @@
5 {-# LANGUAGE CPP #-}
6+{-# LANGUAGE ScopedTypeVariables #-}
7
8 module GHC.Paths (
9 ghc, ghc_pkg, libdir, docdir
10 ) where
11
12+import Control.Exception as E
13+import Data.Maybe
14+import System.Environment
15+import System.IO.Unsafe
16+
17+-- Yes, there's lookupEnv now, but we want to be compatible
18+-- with older GHCs.
19+checkEnv :: String -> IO (Maybe String)
20+checkEnv var = E.catch (fmap Just (getEnv var))
21+ (\ (e :: IOException) -> return Nothing)
22+
23+nixLibdir, nixDocdir, nixGhc, nixGhcPkg :: Maybe FilePath
24+nixLibdir = unsafePerformIO (checkEnv "NIX_GHC_LIBDIR")
25+nixDocdir = unsafePerformIO (checkEnv "NIX_GHC_DOCDIR")
26+nixGhc = unsafePerformIO (checkEnv "NIX_GHC")
27+nixGhcPkg = unsafePerformIO (checkEnv "NIX_GHCPKG")
28+{-# NOINLINE nixLibdir #-}
29+{-# NOINLINE nixDocdir #-}
30+{-# NOINLINE nixGhc #-}
31+{-# NOINLINE nixGhcPkg #-}
32+
33 libdir, docdir, ghc, ghc_pkg :: FilePath
34
35-libdir = GHC_PATHS_LIBDIR
36-docdir = GHC_PATHS_DOCDIR
37+libdir = fromMaybe GHC_PATHS_LIBDIR nixLibdir
38+docdir = fromMaybe GHC_PATHS_DOCDIR nixDocdir
39
40-ghc = GHC_PATHS_GHC
41-ghc_pkg = GHC_PATHS_GHC_PKG
42+ghc = fromMaybe GHC_PATHS_GHC nixGhc
43+ghc_pkg = fromMaybe GHC_PATHS_GHC_PKG nixGhcPkg