From c1662ba7b982a8502dc9f32031b7cb518df7f60e Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sun, 16 May 2010 00:01:00 +0200 Subject: Rewrote nearly everything! * 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 --- Main.hs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) (limited to 'Main.hs') diff --git a/Main.hs b/Main.hs index 982c699..5e528ca 100644 --- a/Main.hs +++ b/Main.hs @@ -1,9 +1,58 @@ -module Main where +module Main (main) where -import Hsbot +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 - imain + 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) -- cgit v1.2.3