Permalink
Browse files

Compiling only .[l]hs[c] files

Should take care of issue #371
  • Loading branch information...
jaor committed Dec 8, 2018
1 parent 52f1a0b commit 108200581a0d3b898254bf278f959178587bd856
Showing with 16 additions and 11 deletions.
  1. +0 −1 examples/xmobar.hs
  2. +3 −3 src/Xmobar/App/Compile.hs
  3. +13 −7 src/Xmobar/App/Main.hs
@@ -16,7 +16,6 @@
-- and xmobar will compile and launch it for you and
------------------------------------------------------------------------------


import Xmobar

-- Example user-defined plugin
@@ -17,7 +17,7 @@
------------------------------------------------------------------------------


module Xmobar.App.Compile(recompile, xmessage) where
module Xmobar.App.Compile(recompile, trace, xmessage) where

import Control.Monad.IO.Class
import Control.Monad.Fix (fix)
@@ -70,12 +70,12 @@ shouldRecompile verb src bin lib = do
binT <- getModTime bin
if any (binT <) (srcT : libTs)
then do
trace verb "Xmobar doing recompile because some files have changed."
trace verb "Xmobar recompiling because some files have changed."
return True
else do
trace verb $ "Xmobar skipping recompile because it is not forced "
++ "(e.g. via --recompile), and not any *.hs / *.lhs / *.hsc"
++ "files in lib/ have been changed."
++ " files in lib/ have been changed."
return False
where isSource = flip elem [".hs",".lhs",".hsc"] . takeExtension
allFiles t = do
@@ -28,6 +28,7 @@ import System.Posix.Process (executeFile)
import System.Environment (getArgs)
import System.FilePath
import System.FilePath.Posix (takeBaseName, takeDirectory)
import Text.Parsec.Error (ParseError)

import Graphics.X11.Xlib

@@ -40,7 +41,7 @@ import Xmobar.X11.Text
import Xmobar.X11.Window
import Xmobar.App.Opts
import Xmobar.App.EventLoop (startLoop, startCommand)
import Xmobar.App.Compile (recompile)
import Xmobar.App.Compile (recompile, trace)
import Xmobar.App.Config

xmobar :: Config -> IO ()
@@ -66,12 +67,17 @@ cleanupThreads vars =
for_ (concat vars) $ \(asyncs, _) ->
for_ asyncs cancel

buildLaunch :: Bool -> Bool -> FilePath -> IO ()
buildLaunch verb force p = do
buildLaunch :: Bool -> Bool -> FilePath -> ParseError -> IO ()
buildLaunch verb force p e = do
let exec = takeBaseName p
dir = takeDirectory p
recompile dir exec force verb
executeFile (dir </> exec) False [] Nothing
ext = takeExtension p
if ext `elem` [".hs", ".hsc", ".lhs"]
then recompile dir exec force verb >>
executeFile (dir </> exec) False [] Nothing
else trace True ("Invalid configuration file: " ++ show e) >>
trace True "\n(No compilation attempted: \
\only .hs, .hsc or .lhs files are compiled)"

xmobar' :: [String] -> Config -> IO ()
xmobar' defs cfg = do
@@ -93,6 +99,6 @@ xmobarMain = do
_ -> xmobar defaultConfig
Just p -> do r <- readConfig defaultConfig p
case r of
Left _ ->
buildLaunch (verboseFlag flags) (recompileFlag flags) p
Left e ->
buildLaunch (verboseFlag flags) (recompileFlag flags) p e
Right (c, defs) -> doOpts c flags >>= xmobar' defs

0 comments on commit 1082005

Please sign in to comment.