mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-25 03:17:13 +00:00
45 lines
2.1 KiB
Diff
45 lines
2.1 KiB
Diff
--- a/src/XMonad/Core.hs
|
|
+++ b/src/XMonad/Core.hs
|
|
@@ -48,6 +48,7 @@ import System.Posix.Types (ProcessID)
|
|
import System.Process
|
|
import System.Directory
|
|
import System.Exit
|
|
+import System.Environment (lookupEnv)
|
|
import Graphics.X11.Xlib
|
|
import Graphics.X11.Xlib.Extras (Event)
|
|
import Data.Typeable
|
|
@@ -463,6 +464,7 @@ recompile force = io $ do
|
|
err = base ++ ".errors"
|
|
src = base ++ ".hs"
|
|
lib = dir </> "lib"
|
|
+ ghc <- fromMaybe "ghc" <$> liftIO (lookupEnv "NIX_GHC")
|
|
libTs <- mapM getModTime . Prelude.filter isSource =<< allFiles lib
|
|
srcT <- getModTime src
|
|
binT <- getModTime bin
|
|
@@ -471,7 +473,7 @@ recompile force = io $ do
|
|
-- temporarily disable SIGCHLD ignoring:
|
|
uninstallSignalHandlers
|
|
status <- bracket (openFile err WriteMode) hClose $ \h ->
|
|
- waitForProcess =<< runProcess "ghc" ["--make", "xmonad.hs", "-i", "-ilib", "-fforce-recomp", "-main-is", "main", "-v0", "-o",binn] (Just dir)
|
|
+ waitForProcess =<< runProcess ghc ["--make", "xmonad.hs", "-i", "-ilib", "-fforce-recomp", "-main-is", "main", "-v0", "-o",binn] (Just dir)
|
|
Nothing Nothing Nothing (Just h)
|
|
|
|
-- re-enable SIGCHLD:
|
|
@@ -480,6 +482,7 @@ recompile force = io $ do
|
|
-- now, if it fails, run xmessage to let the user know:
|
|
when (status /= ExitSuccess) $ do
|
|
ghcErr <- readFile err
|
|
+ xmessage <- fromMaybe "xmessage" <$> liftIO (lookupEnv "XMONAD_XMESSAGE")
|
|
let msg = unlines $
|
|
["Error detected while loading xmonad configuration file: " ++ src]
|
|
++ lines (if null ghcErr then show status else ghcErr)
|
|
@@ -487,7 +490,7 @@ recompile force = io $ do
|
|
-- nb, the ordering of printing, then forking, is crucial due to
|
|
-- lazy evaluation
|
|
hPutStrLn stderr msg
|
|
- forkProcess $ executeFile "xmessage" True ["-default", "okay", msg] Nothing
|
|
+ forkProcess $ executeFile xmessage True ["-default", "okay", msg] Nothing
|
|
return ()
|
|
return (status == ExitSuccess)
|
|
else return True
|