【问题标题】:Is there a way to gracefully refuse to install an opam package on an unsupported OS?有没有办法优雅地拒绝在不受支持的操作系统上安装 opam 包?
【发布时间】:2021-09-30 02:45:21
【问题描述】:

我正在开发一个 opam 包,它希望将来可以在所有操作系统上运行,但目前仅在 Linux 上构建。我想告诉尝试在 MacOS 上安装的用户,该过程不会成功。我在 opam 包描述中看到过这样的事情:

opam-version: "2.0"
authors: "Person Maintainerson"
maintainer: "Person Maintainerson"
build: [
  ["./configure"
  "amd64-linux" {os = "linux"}
  "amd64-macosx" {os = "macos"}
  "amd64-cygwin" {os = "cygwin"}]
  [make]
]
install: [
  [make "install"]
]
synopsis: "A one-line description"
url {
  src: "proto://path/to/source.tar.gz"
}

但我不知道如何告诉 opam 不要做某事。

opam manual 中有关于如何为失败打印特定消息的描述,但从示例中我不清楚<filter> 的语法是什么。

post-messages: [ <string> { <filter> } ... ]:允许在安装结束后向用户打印特定消息。特殊的布尔变量 failure 在过滤器的范围内定义,可用于在出现错误时打印消息(通常是关于如何解决它的提示,或指向未解决问题的链接)。 success 也被定义为 !failure 的语法糖。

【问题讨论】:

    标签: ocaml opam


    【解决方案1】:

    有一个 available: 字段应该适用于此:http://opam.ocaml.org/doc/Packaging.html#Advanced-usage

    操作系统限制:可用字段是一个公式,它根据操作系统或其他全局 opam 变量确定您的包的可用性。例如:

    available: [ os != "macos" ]

    在你的情况下,我认为应该是[ os = "linux" ]

    顺便说一句,如果您决定使用dune-project 文件来生成您的opam 文件,您将需要一个模板,如下所示:https://github.com/yawaramin/ocaml-decimal/blob/2907175c02ca1bb117ee9703b8d642b721a3d6e8/decimal.opam.template

    这是因为dune-project 文件(尚)不支持available: opam 字段,因此它们需要这个额外的模板文件来传递它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多