
* Rewrote the whole architecture to achieve extreme modularity * Added the ability to build a multiprotocol bot * Added cabal integration * Added configuration handling the XMonad style * Added configuration in ~/.hsbot * Refactored many many named and functions * Refactored data structures * Cleaned a big bunch of stuff
58 lines
1.7 KiB
Haskell
58 lines
1.7 KiB
Haskell
module Main (main) where
|
|
|
|
import Control.Monad (when)
|
|
import Prelude hiding (catch)
|
|
import System.Directory
|
|
import System.Environment
|
|
import System.Exit
|
|
import System.FilePath
|
|
import System.Info
|
|
import System.IO
|
|
import System.Posix.Process (executeFile)
|
|
import System.Process
|
|
|
|
-- | Dynamic launching function
|
|
main :: IO ()
|
|
main = do
|
|
args <- getArgs
|
|
case args of
|
|
[] -> buildLaunch
|
|
["--help"] -> usage
|
|
_ -> fail "unrecognized flags"
|
|
|
|
usage :: IO ()
|
|
usage = do
|
|
self <- getProgName
|
|
putStr . unlines $
|
|
concat ["Usage: ", self, " [OPTION]"] :
|
|
"Options:" :
|
|
" --help : Print this message" :
|
|
[]
|
|
|
|
buildLaunch :: IO ()
|
|
buildLaunch = do
|
|
_ <- recompile
|
|
dir <- getAppUserDataDirectory "hsbot"
|
|
args <- getArgs
|
|
_ <- executeFile (dir ++ "/hsbot-" ++ arch ++ "-" ++ os) False args Nothing
|
|
return ()
|
|
|
|
recompile :: IO (Bool)
|
|
recompile = do
|
|
dir <- getAppUserDataDirectory "hsbot"
|
|
let binn = "hsbot-"++arch++"-"++os
|
|
base = dir </> "hsbot"
|
|
err = base ++ ".errors"
|
|
src = base ++ ".hs"
|
|
errorHandle <- openFile err WriteMode
|
|
exitCode <- waitForProcess =<< runProcess "ghc" ["--make", "hsbot.hs", "-fforce-recomp", "-XScopedTypeVariables", "-o", binn] (Just dir)
|
|
Nothing Nothing Nothing (Just errorHandle)
|
|
hClose errorHandle
|
|
when (exitCode /= ExitSuccess) $ do
|
|
ghcErr <- readFile err
|
|
let msg = unlines $
|
|
["Error detected while loading hsbot configuration file: " ++ src]
|
|
++ lines ghcErr ++ ["","Please check the file for errors."]
|
|
hPutStrLn stderr msg
|
|
return (exitCode == ExitSuccess)
|
|
|