@@ -44,6 +44,7 @@ import Data.Text qualified as Text
4444import Data.Word (Word16 )
4545
4646import System.Directory (doesDirectoryExist )
47+ import System.Environment (setEnv )
4748import System.Exit (ExitCode (.. ))
4849import System.FilePath
4950import System.IO (hClose )
@@ -246,47 +247,47 @@ data CDDLSpecs = CDDLSpecs {
246247 }
247248
248249
250+ -- | Use `cddlc` to resolve module directives (`;# include` and `;# import`).
251+ --
252+ -- The `CDDL_INCLUDE_PATH` environment variable must be set.
253+ cddlc :: FilePath -> IO BL. ByteString
254+ cddlc path = do
255+ (_, cddl, _) <- readProcessWithExitCode " cddlc" [" -u" , " -2" , " -t" , " cddl" , path] mempty
256+ return cddl
257+
249258readCDDLSpecs :: IO CDDLSpecs
250259readCDDLSpecs = do
251260 dir <- bool ( " cddl" </> " specs" ) -- False
252261 (" ouroboros-network-protocols" </> " cddl" </> " specs" ) -- True
253262 <$> doesDirectoryExist " ouroboros-network-protocols"
254- common <- BL. readFile (dir </ > " common.cddl " )
255- handshakeNodeToClient <- BL. readFile (dir </> " handshake-node-to-client.cddl " )
256- handshakeNodeToNodeV14ToLast <- BL. readFile (dir </> " handshake-node-to-node-v14 .cddl" )
257- chainSync <- BL. readFile (dir </> " chain-sync.cddl " )
258- blockFetch <- BL. readFile (dir </> " block-fetch .cddl" )
259- txSubmission2 <- BL. readFile (dir </> " tx-submission2 .cddl" )
260- keepAlive <- BL. readFile (dir </> " keep-alive .cddl" )
261- localTxSubmission <- BL. readFile (dir </> " local- tx-submission .cddl" )
262- localTxMonitor <- BL. readFile (dir </> " local-tx-monitor .cddl" )
263- localStateQuery <- BL. readFile (dir </> " local-state-query .cddl" )
264-
265- peerSharingNodeToNodeV14ToLast <- BL. readFile (dir </> " peer-sharing-v14 .cddl" )
266-
267- nodeToNodeVersionDataV14ToLast <- BL. readFile (dir </> " node-to-node-version-data -v14.cddl" )
268- -- append common definitions; they must be appended since the first
269- -- definition is the entry point for a cddl spec.
263+ setEnv " CDDL_INCLUDE_PATH " (dir <> " : " )
264+
265+ handshakeNodeToClient <- cddlc (dir </> " handshake-node-to-client .cddl" )
266+ handshakeNodeToNodeV14ToLast
267+ <- cddlc (dir </> " handshake-node-to-node-v14 .cddl" )
268+ chainSync <- cddlc (dir </> " chain-sync .cddl" )
269+ blockFetch <- cddlc (dir </> " block-fetch .cddl" )
270+ txSubmission2 <- cddlc (dir </> " tx-submission2 .cddl" )
271+ keepAlive <- cddlc (dir </> " keep-alive .cddl" )
272+ localTxSubmission <- cddlc (dir </> " local-tx-submission .cddl" )
273+ localTxMonitor <- cddlc (dir </> " local-tx-monitor.cddl " )
274+ localStateQuery <- cddlc (dir </> " local-state-query .cddl" )
275+
276+ peerSharingNodeToNodeV14ToLast <- cddlc (dir </> " peer-sharing -v14.cddl" )
277+ nodeToNodeVersionDataV14ToLast <- cddlc (dir </> " node-to-node-version-data-v14.cddl " )
278+
270279 return CDDLSpecs {
271- cddlHandshakeNodeToClient = CDDLSpec handshakeNodeToClient,
272- cddlHandshakeNodeToNodeV14ToLast = CDDLSpec handshakeNodeToNodeV14ToLast,
273- cddlChainSync = CDDLSpec $ chainSync
274- <> common,
275- cddlBlockFetch = CDDLSpec $ blockFetch
276- <> common,
277- cddlTxSubmission2 = CDDLSpec $ txSubmission2
278- <> common,
280+ cddlHandshakeNodeToClient = CDDLSpec handshakeNodeToClient,
281+ cddlHandshakeNodeToNodeV14ToLast = CDDLSpec handshakeNodeToNodeV14ToLast,
282+ cddlChainSync = CDDLSpec chainSync,
283+ cddlBlockFetch = CDDLSpec blockFetch,
284+ cddlTxSubmission2 = CDDLSpec txSubmission2,
279285 cddlKeepAlive = CDDLSpec keepAlive,
280- cddlLocalTxSubmission = CDDLSpec $ localTxSubmission
281- <> common,
282- cddlLocalTxMonitor = CDDLSpec $ localTxMonitor
283- <> common,
284- cddlLocalStateQuery = CDDLSpec $ localStateQuery
285- <> common,
286-
287- cddlPeerSharingNodeToNodeV14ToLast = CDDLSpec $ peerSharingNodeToNodeV14ToLast
288- <> common,
286+ cddlLocalTxSubmission = CDDLSpec localTxSubmission,
287+ cddlLocalTxMonitor = CDDLSpec localTxMonitor,
288+ cddlLocalStateQuery = CDDLSpec localStateQuery,
289289
290+ cddlPeerSharingNodeToNodeV14ToLast = CDDLSpec peerSharingNodeToNodeV14ToLast,
290291 cddlNodeToNodeVersionDataV14ToLast = CDDLSpec nodeToNodeVersionDataV14ToLast
291292 }
292293
@@ -846,7 +847,7 @@ unit_decodeChainSync spec =
846847 [ SomeAgency ChainSync. SingIdle
847848 , SomeAgency (ChainSync. SingNext ChainSync. SingCanAwait )
848849 , SomeAgency (ChainSync. SingNext ChainSync. SingMustReply )
849- , SomeAgency ( ChainSync. SingIntersect)
850+ , SomeAgency ChainSync. SingIntersect
850851 ]
851852 100
852853
@@ -873,8 +874,8 @@ unit_decodeTxSubmission2 spec =
873874 [ SomeAgency TxSubmission2. SingInit
874875 , SomeAgency $ TxSubmission2. SingTxIds TxSubmission2. SingBlocking
875876 , SomeAgency $ TxSubmission2. SingTxIds TxSubmission2. SingNonBlocking
876- , SomeAgency $ TxSubmission2. SingTxs
877- , SomeAgency $ TxSubmission2. SingIdle
877+ , SomeAgency TxSubmission2. SingTxs
878+ , SomeAgency TxSubmission2. SingIdle
878879 ]
879880 100
880881
0 commit comments