diff options
author | Adam Vogt <vogt.adam@gmail.com> | 2009-03-22 00:29:07 +0100 |
---|---|---|
committer | Adam Vogt <vogt.adam@gmail.com> | 2009-03-22 00:29:07 +0100 |
commit | 9b9f065f0a38b1fbe2467b669a79fe4c274d9a30 (patch) | |
tree | 92c068528b2a95cc70d9e852f5e2efb44e5f5384 | |
parent | 806dec564e2b55b91df1c963e56ad3937b5b87f8 (diff) | |
download | xmonad-9b9f065f0a38b1fbe2467b669a79fe4c274d9a30.tar.gz xmonad-9b9f065f0a38b1fbe2467b669a79fe4c274d9a30.tar.xz xmonad-9b9f065f0a38b1fbe2467b669a79fe4c274d9a30.zip |
Add lib to ghc searchpath with recompilation check
Ignore-this: 8827fb02fe1101d7b66f05d363bef038
darcs-hash:20090321232907-1499c-69dd8a1d22d2c8f28a6545ec20713d519dbc7ac4.gz
-rw-r--r-- | XMonad/Core.hs | 17 | ||||
-rw-r--r-- | xmonad.cabal | 2 |
2 files changed, 14 insertions, 5 deletions
diff --git a/XMonad/Core.hs b/XMonad/Core.hs index 7e17550..c5aeef8 100644 --- a/XMonad/Core.hs +++ b/XMonad/Core.hs @@ -37,6 +37,7 @@ import Control.Exception (catch, try, bracket, throw, finally, Exception(ExitExc import Control.Applicative import Control.Monad.State import Control.Monad.Reader +import System.FilePath import System.IO import System.Info import System.Posix.Process (executeFile, forkProcess, getAnyProcessStatus, createSession) @@ -49,6 +50,7 @@ import System.Exit import Graphics.X11.Xlib import Graphics.X11.Xlib.Extras (Event) import Data.Typeable +import Data.List ((\\)) import Data.Maybe (isJust) import Data.Monoid import Data.Maybe (fromMaybe) @@ -405,18 +407,20 @@ recompile :: MonadIO m => Bool -> m Bool recompile force = io $ do dir <- getXMonadDir let binn = "xmonad-"++arch++"-"++os - bin = dir ++ "/" ++ binn - base = dir ++ "/" ++ "xmonad" + bin = dir </> binn + base = dir </> "xmonad" err = base ++ ".errors" src = base ++ ".hs" + lib = dir </> "lib" + libTs <- mapM getModTime =<< allFiles lib srcT <- getModTime src binT <- getModTime bin - if (force || srcT > binT) + if (force || srcT > binT || any (binT<) libTs) then do -- temporarily disable SIGCHLD ignoring: uninstallSignalHandlers status <- bracket (openFile err WriteMode) hClose $ \h -> do - waitForProcess =<< runProcess "ghc" ["--make", "xmonad.hs", "-i", "-fforce-recomp", "-v0", "-o",binn] (Just dir) + waitForProcess =<< runProcess "ghc" ["--make", "xmonad.hs", "-i", "-ilib", "-fforce-recomp", "-v0", "-o",binn] (Just dir) Nothing Nothing Nothing (Just h) -- re-enable SIGCHLD: @@ -436,6 +440,11 @@ recompile force = io $ do return (status == ExitSuccess) else return True where getModTime f = catch (Just <$> getModificationTime f) (const $ return Nothing) + allFiles t = do + let prep = map (t</>) . Prelude.filter (`notElem` [".",".."]) + cs <- prep <$> catch (getDirectoryContents t) (\_ -> return []) + ds <- filterM doesDirectoryExist cs + concat . ((cs \\ ds):) <$> mapM allFiles ds -- | Conditionally run an action, using a @Maybe a@ to decide. whenJust :: Monad m => Maybe a -> (a -> m ()) -> m () diff --git a/xmonad.cabal b/xmonad.cabal index b60913f..92623a3 100644 --- a/xmonad.cabal +++ b/xmonad.cabal @@ -41,7 +41,7 @@ library XMonad.StackSet if flag(small_base) - build-depends: base < 4 && >=3, containers, directory, process + build-depends: base < 4 && >=3, containers, directory, process, filepath else build-depends: base < 3 build-depends: X11>=1.4.3, mtl, unix |