From 1bc7a22d57a8f0529b8d1c61e867f34533e1fa36 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sat, 13 Feb 2010 21:43:08 +0000 Subject: [PATCH] make main function importable, for benchmarking. There must be a better way.. --- HledgerMain.hs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ hledger.cabal | 1 + hledger.hs | 46 ++++------------------------------------------ 3 files changed, 52 insertions(+), 42 deletions(-) create mode 100644 HledgerMain.hs diff --git a/HledgerMain.hs b/HledgerMain.hs new file mode 100644 index 000000000..57a17afd2 --- /dev/null +++ b/HledgerMain.hs @@ -0,0 +1,47 @@ +{-# LANGUAGE CPP #-} +{-| +The main function is in this separate module so it can be imported by +benchmark scripts. As a side benefit, this avoids a weakness of sp, which +doesn't allow both #! and \{\-\# lines. +-} + +module HledgerMain where +#if __GLASGOW_HASKELL__ <= 610 +import Prelude hiding (putStr, putStrLn) +import System.IO.UTF8 +#endif + +import Commands.All +import Ledger +import Options +import Tests +import Utils (withLedgerDo) +import Version (versionmsg, binaryfilename) + +main :: IO () +main = do + (opts, cmd, args) <- parseArguments + run cmd opts args + where + run cmd opts args + | Help `elem` opts = putStr usage + | Version `elem` opts = putStrLn versionmsg + | BinaryFilename `elem` opts = putStrLn binaryfilename + | cmd `isPrefixOf` "balance" = withLedgerDo opts args cmd balance + | cmd `isPrefixOf` "convert" = withLedgerDo opts args cmd convert + | cmd `isPrefixOf` "print" = withLedgerDo opts args cmd print' + | cmd `isPrefixOf` "register" = withLedgerDo opts args cmd register + | cmd `isPrefixOf` "histogram" = withLedgerDo opts args cmd histogram + | cmd `isPrefixOf` "add" = withLedgerDo opts args cmd add + | cmd `isPrefixOf` "stats" = withLedgerDo opts args cmd stats +#ifdef VTY + | cmd `isPrefixOf` "ui" = withLedgerDo opts args cmd ui +#endif +#ifdef WEB + | cmd `isPrefixOf` "web" = withLedgerDo opts args cmd web +#endif +#ifdef CHART + | cmd `isPrefixOf` "chart" = withLedgerDo opts args cmd chart +#endif + | cmd `isPrefixOf` "test" = runtests opts args >> return () + | otherwise = putStr usage diff --git a/hledger.cabal b/hledger.cabal index ccc07849b..d5c3e7192 100644 --- a/hledger.cabal +++ b/hledger.cabal @@ -82,6 +82,7 @@ executable hledger Commands.Print Commands.Register Commands.Stats + HledgerMain Ledger Ledger.Account Ledger.AccountName diff --git a/hledger.hs b/hledger.hs index cf28f13c9..538d4c4d0 100644 --- a/hledger.hs +++ b/hledger.hs @@ -1,9 +1,8 @@ --- #!/usr/bin/env runhaskell <- sp doesn't like -{-# LANGUAGE CPP #-} +#!/usr/bin/env runhaskell {-| hledger - a ledger-compatible text-based accounting tool. -Copyright (c) 2007-2009 Simon Michael +Copyright (c) 2007-2010 Simon Michael Released under GPL version 3 or later. hledger is a partial haskell clone of John Wiegley's "ledger" text-based @@ -33,45 +32,8 @@ or ghci: > > t <- myTimelog See "Ledger.Ledger" for more examples. + -} module Main where -#if __GLASGOW_HASKELL__ <= 610 -import Prelude hiding (putStr, putStrLn) -import System.IO.UTF8 -#endif - -import Commands.All -import Ledger -import Options -import Tests -import Utils (withLedgerDo) -import Version (versionmsg, binaryfilename) - -main :: IO () -main = do - (opts, cmd, args) <- parseArguments - run cmd opts args - where - run cmd opts args - | Help `elem` opts = putStr usage - | Version `elem` opts = putStrLn versionmsg - | BinaryFilename `elem` opts = putStrLn binaryfilename - | cmd `isPrefixOf` "balance" = withLedgerDo opts args cmd balance - | cmd `isPrefixOf` "convert" = withLedgerDo opts args cmd convert - | cmd `isPrefixOf` "print" = withLedgerDo opts args cmd print' - | cmd `isPrefixOf` "register" = withLedgerDo opts args cmd register - | cmd `isPrefixOf` "histogram" = withLedgerDo opts args cmd histogram - | cmd `isPrefixOf` "add" = withLedgerDo opts args cmd add - | cmd `isPrefixOf` "stats" = withLedgerDo opts args cmd stats -#ifdef VTY - | cmd `isPrefixOf` "ui" = withLedgerDo opts args cmd ui -#endif -#ifdef WEB - | cmd `isPrefixOf` "web" = withLedgerDo opts args cmd web -#endif -#ifdef CHART - | cmd `isPrefixOf` "chart" = withLedgerDo opts args cmd chart -#endif - | cmd `isPrefixOf` "test" = runtests opts args >> return () - | otherwise = putStr usage +import HledgerMain (main)