mirror of
https://github.com/xmonad/xmonad.git
synced 2025-08-02 21:21:52 -07:00
Merge pull request #167 from mgsloan/log-recompilation-info
Log information about xmonad compile + avoid unnecessary recompile
This commit is contained in:
12
CHANGES.md
12
CHANGES.md
@@ -43,6 +43,18 @@
|
|||||||
* Restored compatability with GHC version prior to 8.0.1 by removing the
|
* Restored compatability with GHC version prior to 8.0.1 by removing the
|
||||||
dependency on directory version 1.2.3.
|
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)
|
## 0.13 (February 10, 2017)
|
||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
|
@@ -607,9 +607,36 @@ recompile force = io $ do
|
|||||||
|
|
||||||
useBuildscript <- do
|
useBuildscript <- do
|
||||||
exists <- doesFileExist buildscript
|
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
|
then do
|
||||||
-- temporarily disable SIGCHLD ignoring:
|
-- temporarily disable SIGCHLD ignoring:
|
||||||
uninstallSignalHandlers
|
uninstallSignalHandlers
|
||||||
@@ -622,17 +649,19 @@ recompile force = io $ do
|
|||||||
installSignalHandlers
|
installSignalHandlers
|
||||||
|
|
||||||
-- now, if it fails, run xmessage to let the user know:
|
-- now, if it fails, run xmessage to let the user know:
|
||||||
when (status /= ExitSuccess) $ do
|
if status == ExitSuccess
|
||||||
ghcErr <- readFile err
|
then trace "XMonad recompilation process exited with success!"
|
||||||
let msg = unlines $
|
else do
|
||||||
["Error detected while loading xmonad configuration file: " ++ src]
|
ghcErr <- readFile err
|
||||||
++ lines (if null ghcErr then show status else ghcErr)
|
let msg = unlines $
|
||||||
++ ["","Please check the file for errors."]
|
["Error detected while loading xmonad configuration file: " ++ src]
|
||||||
-- nb, the ordering of printing, then forking, is crucial due to
|
++ lines (if null ghcErr then show status else ghcErr)
|
||||||
-- lazy evaluation
|
++ ["","Please check the file for errors."]
|
||||||
hPutStrLn stderr msg
|
-- nb, the ordering of printing, then forking, is crucial due to
|
||||||
forkProcess $ executeFile "xmessage" True ["-default", "okay", replaceUnicode msg] Nothing
|
-- lazy evaluation
|
||||||
return ()
|
hPutStrLn stderr msg
|
||||||
|
forkProcess $ executeFile "xmessage" True ["-default", "okay", replaceUnicode msg] Nothing
|
||||||
|
return ()
|
||||||
return (status == ExitSuccess)
|
return (status == ExitSuccess)
|
||||||
else return True
|
else return True
|
||||||
where getModTime f = E.catch (Just <$> getModificationTime f) (\(SomeException _) -> return Nothing)
|
where getModTime f = E.catch (Just <$> getModificationTime f) (\(SomeException _) -> return Nothing)
|
||||||
|
@@ -113,12 +113,18 @@ usage = do
|
|||||||
--
|
--
|
||||||
buildLaunch :: IO ()
|
buildLaunch :: IO ()
|
||||||
buildLaunch = do
|
buildLaunch = do
|
||||||
recompile False
|
|
||||||
dir <- getXMonadDataDir
|
|
||||||
args <- getArgs
|
|
||||||
whoami <- getProgName
|
whoami <- getProgName
|
||||||
let compiledConfig = "xmonad-"++arch++"-"++os
|
let compiledConfig = "xmonad-"++arch++"-"++os
|
||||||
unless (whoami == compiledConfig) $
|
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
|
||||||
executeFile (dir </> compiledConfig) False args Nothing
|
executeFile (dir </> compiledConfig) False args Nothing
|
||||||
|
|
||||||
sendRestart :: IO ()
|
sendRestart :: IO ()
|
||||||
|
Reference in New Issue
Block a user