module CabalBounds.Args
( Args(..)
, get
, outputFile
, defaultDrop
, defaultUpdate
) where
import System.Console.CmdArgs hiding (ignore)
#ifdef CABAL
import Data.Version (showVersion)
import Paths_cabal_bounds (version)
#endif
data Args = Drop { upper :: Bool
, library :: Bool
, executable :: [String]
, testSuite :: [String]
, benchmark :: [String]
, only :: [String]
, ignore :: [String]
, outputCabalFile :: String
, cabalFile :: String
}
| Update { lower :: Bool
, upper :: Bool
, library :: Bool
, executable :: [String]
, testSuite :: [String]
, benchmark :: [String]
, only :: [String]
, ignore :: [String]
, outputCabalFile :: String
, cabalFile :: String
, setupConfigFile :: String
}
deriving (Data, Typeable, Show, Eq)
get :: IO Args
get = cmdArgsRun . cmdArgsMode $ modes [dropArgs, updateArgs]
&= program "cabal-bounds"
&= summary summaryInfo
&= help "A command line program for managing the bounds/versions of the dependencies in a cabal file."
&= helpArg [explicit, name "help", name "h"]
&= versionArg [explicit, name "version", name "v", summary versionInfo]
where
summaryInfo = ""
outputFile :: Args -> FilePath
outputFile args
| null $ outputCabalFile args = cabalFile args
| otherwise = outputCabalFile args
defaultDrop :: Args
defaultDrop = Drop
{ upper = False
, library = False
, executable = []
, testSuite = []
, benchmark = []
, only = []
, ignore = []
, outputCabalFile = ""
, cabalFile = ""
}
defaultUpdate :: Args
defaultUpdate = Update
{ lower = False
, upper = False
, library = False
, executable = []
, testSuite = []
, benchmark = []
, only = []
, ignore = []
, outputCabalFile = ""
, cabalFile = ""
, setupConfigFile = ""
}
dropArgs :: Args
dropArgs = Drop
{ upper = def &= explicit &= name "upper" &= name "U" &= help "Only the upper bound is dropped, otherwise both - the lower and upper - bounds are dropped."
, library = def &= explicit &= name "library" &= name "l" &= help "Only the bounds of the library are dropped."
, executable = def &= help "Only the bounds of the executable are dropped."
, testSuite = def &= help "Only the bounds of the test suite are dropped."
, benchmark = def &= help "Only the bounds of the benchmark are dropped."
, only = def &= explicit &= name "only" &= name "O" &= help "Only the bounds of the dependency are modified."
, ignore = def &= explicit &= name "ignore" &= name "I" &= help "This dependency is ignored, not modified in any way."
, outputCabalFile = def &= explicit &= name "outputCabalFile" &= name "o" &= help "Save modified cabal file to file, if empty, the cabal file is modified inplace."
, cabalFile = def &= argPos 0 &= typ "CABAL-FILE"
}
updateArgs :: Args
updateArgs = Update
{ lower = def &= explicit &= name "lower" &= name "L" &= help "Only the lower bound is updated."
, upper = def &= explicit &= name "upper" &= name "U" &= help "Only the upper bound is updated."
, library = def &= explicit &= name "library" &= name "l" &= help "Only the bounds of the library are updated."
, executable = def &= help "Only the bounds of the executable are updated."
, testSuite = def &= help "Only the bounds of the test suite are updated."
, benchmark = def &= help "Only the bounds of the benchmark are updated."
, only = def &= explicit &= name "only" &= name "O" &= help "Only the bounds of the dependency are modified."
, ignore = def &= explicit &= name "ignore" &= name "I" &= help "This dependency is ignored, not modified in any way."
, outputCabalFile = def &= explicit &= name "outputCabalFile" &= name "o" &= help "Save modified cabal file to file, if empty, the cabal file is modified inplace."
, cabalFile = def &= argPos 0 &= typ "CABAL-FILE"
, setupConfigFile = def &= argPos 1 &= typ "SETUP-CONFIG-FILE"
}
versionInfo :: String
versionInfo =
#ifdef CABAL
"cabal-bounds version " ++ showVersion version
#else
"cabal-bounds version unknown (not built with cabal)"
#endif