@@ -13,20 +13,18 @@ module HsBindgen.Cli.Preprocess (
1313 , exec
1414 ) where
1515
16- import Control.Exception (Exception (.. ), throwIO )
17- import Control.Monad (unless , void )
18- import Data.Maybe (maybeToList )
19- import GHC.Generics (Generic )
16+ import Control.Exception (Exception (.. ))
2017import Options.Applicative hiding (info )
2118import System.Directory (createDirectoryIfMissing , doesDirectoryExist )
2219
2320import HsBindgen
2421import HsBindgen.App
25- import HsBindgen.Artefact
22+ import HsBindgen.Backend.UniqueId
2623import HsBindgen.Config
2724import HsBindgen.Config.Internal
2825import HsBindgen.Errors
2926import HsBindgen.Frontend.RootHeader
27+ import HsBindgen.Imports
3028import HsBindgen.Language.Haskell qualified as Hs
3129
3230{- ------------------------------------------------------------------------------
@@ -42,21 +40,21 @@ info = progDesc "Generate Haskell module from C headers"
4240
4341data Opts = Opts {
4442 config :: Config
45- , configPP :: ConfigPP
43+ , uniqueId :: UniqueId
4644 , hsModuleName :: Hs. ModuleName
4745 , hsOutputDir :: FilePath
4846 , outputDirPolicy :: OutputDirPolicy
4947 , outputBindingSpec :: Maybe FilePath
48+ -- NOTE: Inputs (arguments) must be last, options must go before it.
5049 , inputs :: [UncheckedHashIncludeArg ]
51- -- NOTE inputs (arguments) must be last, options must go before it
5250 }
5351 deriving (Generic )
5452
5553parseOpts :: Parser Opts
5654parseOpts =
5755 Opts
5856 <$> parseConfig
59- <*> parseConfigPP
57+ <*> parseUniqueId
6058 <*> parseHsModuleName
6159 <*> parseHsOutputDir
6260 <*> parseOutputDirPolicy
@@ -78,18 +76,18 @@ exec GlobalOpts{..} Opts{..} = do
7876 unless exists $
7977 throwIO (OutputDirectoryMissingException hsOutputDir)
8078
81- void $ run $ (sequenceArtefacts artefacts) :* Nil
79+ void $ run $ artefacts
8280 where
8381 bindgenConfig :: BindgenConfig
84- bindgenConfig = toBindgenConfigPP config configPP
82+ bindgenConfig = toBindgenConfig config uniqueId hsModuleName
8583
86- run :: Artefacts as -> IO ( NP I as )
87- run = hsBindgen tracerConfig bindgenConfig hsModuleName inputs
84+ run :: Artefact a -> IO a
85+ run = hsBindgen tracerConfig bindgenConfig inputs
8886
89- artefacts :: [ Artefact () ]
90- artefacts =
91- writeBindingsMultiple hsOutputDir
92- : [ writeBindingSpec file | file <- maybeToList outputBindingSpec ]
87+ artefacts :: Artefact ()
88+ artefacts = do
89+ writeBindingsMultiple hsOutputDir
90+ forM_ outputBindingSpec writeBindingSpec
9391
9492{- ------------------------------------------------------------------------------
9593 Exception
0 commit comments