packages feed

cdeps-0.1.3.0: app/Main.hs

module Main (main) where

import           Control.Monad
import           Data.Bool             (bool)
import           Data.Foldable
import           Data.Semigroup        hiding (getAll)
import           Data.Version          (showVersion)
import           Language.C.Dependency
import           Options.Applicative
import           Paths_cdeps           (version)

includes' :: Parser [FilePath]
includes' = many $ strOption
    (long "include"
    <> metavar "DIR"
    <> short 'I'
    <> help "Directories for inclusions."
    <> dirCompletions)

noRecurse :: Parser Bool
noRecurse = switch
    (long "no-recurse"
    <> short 'r'
    <> help "Do not search for dependencies recursively.")

data Command = Dump FilePath [FilePath] Bool

dump :: Parser Command
dump = Dump
    <$> target
    <*> includes'
    <*> noRecurse

dirCompletions :: HasCompleter f => Mod f a
dirCompletions = action "directory"

cCompletions :: HasCompleter f => Mod f a
cCompletions = completer . bashCompleter $ "file -X '!*.c' -o plusdirs"

target :: Parser FilePath
target = argument str
    (metavar "SOURCE"
    <> help "C source file"
    <> cCompletions)

run :: Command -> IO ()
run (Dump cSrc is nr) = (traverse_ putStrLn <=< go is) cSrc
    where go = bool getAll getCDepends nr

versionInfo :: Parser (a -> a)
versionInfo = infoOption ("cdeps version: " ++ showVersion version) (short 'V' <> long "version" <> help "Show version")

wrapper :: ParserInfo Command
wrapper = info (helper <*> versionInfo <*> dump)
    (fullDesc
    <> progDesc "CDeps finds local dependencies for builds"
    <> header "cdeps - a tool for tracking build dependencies")

main :: IO ()
main = run =<< execParser wrapper