{- | Module : $Header$ Description : Main module Copyright : (c) 2005 Martin Engelke 2011 - 2016 Björn Peemöller License : BSD-3-clause Maintainer : bjp@informatik.uni-kiel.de Stability : experimental Portability : portable Command line tool for generating Curry representations (e.g. FlatCurry, AbstractCurry) for a Curry source file including all imported modules. -} module Main (main) where import Curry.Base.Monad (runCYIO) import Base.Messages import Files.CymakePath (cymakeGreeting, cymakeVersion) import CurryBuilder (buildCurry) import CompilerOpts (Options (..), CymakeMode (..), getCompilerOpts, usage) -- |The command line tool cymake main :: IO () main = getCompilerOpts >>= cymake -- |Invoke the curry builder w.r.t the command line arguments cymake :: (String, Options, [String], [String]) -> IO () cymake (prog, opts, files, errs) = case optMode opts of ModeHelp -> printUsage prog ModeVersion -> printVersion ModeNumericVersion -> printNumericVersion ModeMake | not (null errs) -> badUsage prog errs | null files -> badUsage prog ["No input files"] | otherwise -> runCYIO (mapM_ (buildCurry opts) files) >>= either abortWithMessages continueWithMessages where continueWithMessages = warnOrAbort (optWarnOpts opts) . snd -- |Print the usage information of the command line tool printUsage :: String -> IO () printUsage prog = putStrLn $ usage prog -- |Print the program version printVersion :: IO () printVersion = putStrLn cymakeGreeting -- |Print the numeric program version printNumericVersion :: IO () printNumericVersion = putStrLn cymakeVersion -- |Print errors and abort execution on bad parameters badUsage :: String -> [String] -> IO () badUsage prog errs = do putErrsLn $ map (\ err -> prog ++ ": " ++ err) errs abortWith ["Try '" ++ prog ++ " --help' for more information"]