hs-bindgen-1.0.0.0: app/HsBindgen/Cli/Info/UseDeclGraph.hs
-- | @hs-bindgen-cli info use-decl-graph@ command
--
-- Intended for qualified import.
--
-- > import HsBindgen.Cli.Info.UseDeclGraph qualified as UseDeclGraph
module HsBindgen.Cli.Info.UseDeclGraph (
-- * CLI help
info
-- * Options
, Opts(..)
, parseOpts
-- * Execution
, exec
) where
import Options.Applicative hiding (info)
import HsBindgen
import HsBindgen.App
import HsBindgen.ArtefactM
import HsBindgen.Config
import HsBindgen.Config.Internal (BindgenConfig)
import HsBindgen.Imports
import HsBindgen.IR.C qualified as C
import HsBindgen.Macro
{-------------------------------------------------------------------------------
CLI help
-------------------------------------------------------------------------------}
info :: InfoMod a
info = progDesc "Output the use-decl graph"
{-------------------------------------------------------------------------------
Options
-------------------------------------------------------------------------------}
data Opts = Opts {
config :: Config
, uniqueId :: UniqueId
, baseModuleName :: BaseModuleName
, output :: Maybe FilePath
, inputs :: [C.UncheckedRootDirective]
, filePolicy :: FilePolicy
, dirPolicy :: DirPolicy
}
parseOpts :: Parser Opts
parseOpts =
Opts
<$> parseConfig
<*> parseUniqueId
<*> parseBaseModuleName
<*> optional parseOutput'
<*> parseInputs
<*> parseFilePolicy
<*> parseDirPolicy
parseOutput' :: Parser FilePath
parseOutput' = strOption $ mconcat [
short 'o'
, long "output"
, metavar "PATH"
, help "Output path for the graph"
]
{-------------------------------------------------------------------------------
Execution
-------------------------------------------------------------------------------}
exec :: GlobalOpts -> Opts -> IO ()
exec global opts =
hsBindgen
global.unsafe
global.safe
bindgenConfig
opts.inputs
artefact
where
artefact :: Artefact CExpr ()
artefact = writeUseDeclGraph opts.filePolicy opts.dirPolicy opts.output
bindgenConfig :: BindgenConfig
bindgenConfig =
toBindgenConfig
opts.config
opts.uniqueId
opts.baseModuleName
def