自定义字段以某种方式到达buildHook?

问题描述 投票:0回答:1

我想传递一些自定义的、可执行的库配置(最好是一整袋的键值对,但至少是单个的 String)从我的 .cabal 一直到 Setup.hs's buildHook.

供参考: buildHook的参数。

buildHook 
    :: PackageDescription 
    -> LocalBuildInfo
    -> UserHooks
    -> BuildFlags -> IO ()

所以我希望得到的是... PackageDescription's library executables 字段,让我可以在不影响所有其他Cabal阶段的情况下访问自定义字段,我可以将其放在 .cabal 文件。这里有一个虚构的例子,基本上可以做到尽善尽美。

...

executable my-exe
  main-is: my-main.hs
  ...
  plugin-args:
    myplugin:
      foo: bar
      baz: quux 

所以我可以检索所有的 myplugin 键值对来获得 "foo" |-> "bar", "baz" |-> "quux" 等某种关联数据结构中。HashMap.

请注意,我已经在做激烈的暴力在我的。Setup.hs所以欢迎任何形式的黑客建议。如果需要,我可以覆盖所有 Setup.hs 钩子,以忽略everything-but-中的一些设置。buildHook如果需要一些解决方案的话,我想从我的.cabal文件中传递一些自定义的、可执行的library配置(最好是一整袋键值对,但至少是一个字符串)到Setup.com。

plugins hook customization cabal
1个回答
0
投票

虽然我没有在用户文档中找到它,但有一个叫 这块 BuildInfo 类型:

customFieldsBI :: [(String, String)]

自定义领域 x-,存储在一个简单的assoc-list中。

所以你可以写

...
executable my-exe
  main-is: my-main.hs
  ...
  plugin-args:
    x-myplugin: foo

然后用 lookup "x-myplugin" . view customFieldsBI :: (HasBuildInfo bi) => bi -> Maybe String.

特别是: ExecutableLibraryHasBuildInfo 实例,所以你只需遍历一下 PackageDescriptionbuildHook 并对其进行处理 String 那里的价值。

© www.soinside.com 2019 - 2024. All rights reserved.