Log information about xmonad compile + avoid unnecessary recompile

Particularly with the addition of build scripts, it can be tricky to figure out
what XMonad is doing when attempting recompilation.  This makes it clearer by
adding some logging.

Due to this logging, I noticed that the lag of xmonad start was because it was
always recompiling!  When I startup my computer, I do not want it to delay
rebuilding my window manager. This also fixes that issue such that it only
recompiles XMonad if it is going to reinvoke due to getProgName not being the
expected string.
This commit is contained in:
Michael Sloan
2018-05-09 18:21:06 -07:00
parent ecf1a0ca0d
commit b6d92b4e38
3 changed files with 64 additions and 17 deletions

View File

@@ -23,6 +23,18 @@
* Restored compatability with GHC version prior to 8.0.1 by removing the
dependency on directory version 1.2.3.
* xmonad no longer always recompile on startup. Now it only does so if the
executable does not have the name that would be used for the compilation
output. The purpose of recompiling and executing the results in this case is
so that the `xmonad` executable in the package can be used with custom
configurations.
### Enhancements
* Whenever xmonad recompiles, it now explains how it is attempting to
recompile, by outputting logs to stderr. If you are using xmonad as a custom
X session, then this will end up in a `.xsession-errors` file.
## 0.13 (February 10, 2017)
### Breaking Changes

View File

@@ -606,9 +606,36 @@ recompile force = io $ do
useBuildscript <- do
exists <- doesFileExist buildscript
if exists then isExecutable buildscript else return False
if exists
then do
isExe <- isExecutable buildscript
if isExe
then do
trace $ "XMonad will use build script at " ++ show buildscript ++ " to recompile."
return True
else do
trace $ unlines
[ "XMonad will not use build script, because " ++ show buildscript ++ " is not executable."
, "Suggested resolution to use it: chmod u+x " ++ show buildscript
]
return False
else do
trace $
"XMonad will use ghc to recompile, because " ++ show buildscript ++ " does not exist."
return False
if force || useBuildscript || any (binT <) (srcT : libTs)
shouldRecompile <-
if useBuildscript || force
then return True
else if any (binT <) (srcT : libTs)
then do
trace "XMonad doing recompile because some files have changed."
return True
else do
trace "XMonad skipping recompile because it is not forced (e.g. via --recompile), and neither xmonad.hs nor any *.hs / *.lhs / *.hsc files in lib/ have been changed."
return False
if shouldRecompile
then do
-- temporarily disable SIGCHLD ignoring:
uninstallSignalHandlers
@@ -621,7 +648,9 @@ recompile force = io $ do
installSignalHandlers
-- now, if it fails, run xmessage to let the user know:
when (status /= ExitSuccess) $ do
if status == ExitSuccess
then trace "XMonad recompilation process exited with success!"
else do
ghcErr <- readFile err
let msg = unlines $
["Error detected while loading xmonad configuration file: " ++ src]

View File

@@ -113,12 +113,18 @@ usage = do
--
buildLaunch :: IO ()
buildLaunch = do
whoami <- getProgName
let compiledConfig = "xmonad-"++arch++"-"++os
unless (whoami == compiledConfig) $ do
trace $ concat
[ "XMonad is recompiling and replacing itself another XMonad process because the current process is called "
, show whoami
, " but the compiled configuration should be called "
, show compiledConfig
]
recompile False
dir <- getXMonadDataDir
args <- getArgs
whoami <- getProgName
let compiledConfig = "xmonad-"++arch++"-"++os
unless (whoami == compiledConfig) $
executeFile (dir </> compiledConfig) False args Nothing
sendRestart :: IO ()