{-# LANGUAGE CPP #-}
import Data.Version.Extra (readVersion)
import Distribution.Package
import Distribution.Text (simpleParse)
import Distribution.Version
#if MIN_VERSION_simple_cmd_args(0,1,7)
#else
import Options.Applicative
#endif
import SimpleCmdArgs
import Cmds
import Depends
main :: IO ()
main =
simpleCmdArgs Nothing "Cabal file tool"
"cabal-file can access and compare .cabal files from the cache" $
subcommands
[ Subcommand "diff" "Diff .cabal files of package versions" $
diffCmd <$> strArg "PKG" <*> versionArg <*> versionArg
, Subcommand "list" "List package versions" $
listPkg <$> optional pkgArg
, Subcommand "latest" "Latest package version" $
latestPkg <$> pkgArg
, Subcommand "files" "List all index files" $
pure listFiles
, Subcommand "get" "Get .cabal file for package version" $
saveCabal <$> pkgIdArg
, Subcommand "date" "Timestamp for package version (revision)" $
dateCabal <$> pkgIdArg
, Subcommand "show" "Show .cabal file for package version" $
showCabal <$> pkgIdArg
, Subcommand "metadata" "Show metadata for package version" $
showMetadata <$> pkgIdArg
, Subcommand "preferred" "Show preferred versions for package" $
preferCmd <$> pkgArg
, Subcommand "depends" "Print package dependencies" $
dependsCmd <$> switchWith 'q' "quiet" "No depends section headers"
<*> detailOpt
<*> optional depsOpt
<*> optional (strArg "DIRorCABAL")
]
where
versionArg :: Parser Version
versionArg = argumentWith versionM "VERSION"
versionM = maybeReader (Just . mkVersion' . readVersion)
pkgIdArg :: Parser PackageIdentifier
pkgIdArg = argumentWith (maybeReader simpleParse) "PKG[VER]"
pkgArg :: Parser PackageName
pkgArg = argumentWith (maybeReader simpleParse) "PKG"
detailOpt :: Parser Details
detailOpt =
flagWith' Detail 'd' "detail" "Show version ranges" <|>
flagWith Normal Unique 'u' "unique" "Remove self and build-depends from other depends"
depsOpt :: Parser Deps
depsOpt =
flagWith' Build 'b' "build" "Only build-depends" <|>
flagWith' Setup 's' "setup" "Only setup-depends" <|>
flagWith' Tool 't' "tool" "Only tool-build-depends" <|>
flagWith' Legacy 'l' "legacy" "Only build-tools" <|>
flagWith' CLib 'c' "clibs" "Only extra-libraries" <|>
flagWith' PkgConfig 'p' "pkgconfig" "Only extra-libraries" <|>
flagWith' NotBuild 'B' "not-build" "Hide build-depends"