Homebrew公式中的替代依赖项(例如,与gcc一起使用)

Sea*_*her 5 homebrew dependencies gcc

如何在Homebrew公式中描述替代依赖项?我正在考虑两种不同的类型.

1.替代包装

我的公式可以取决于包装,P或者Q它必须有一个.所以,我也想要

depends_on 'P'
Run Code Online (Sandbox Code Playgroud)

要么

depends_on 'Q'
Run Code Online (Sandbox Code Playgroud)

我至少需要一个.

2.同一包的替代标志

我的公式需要另一个X用于构建的包,它需要一个X带有两个标志之一的包,AB.也就是说,我也想要

depends_on 'X' => [:build, 'A']
Run Code Online (Sandbox Code Playgroud)

要么

depends_on 'X' => [:build, 'B']
Run Code Online (Sandbox Code Playgroud)

我至少需要一个.

这些替代依赖项有用的具体示例是依赖于的公式gcc.gcc(例如gcc4[3-9])有多个包,可以由上面的#1支持.gcc有一个enable-all-languages暗示的标志enable-java,所以如果需要的公式gcj将使用#2来指定替代标志.

Sea*_*her 2

我最近发现可以通过选项有条件地确定依赖关系。总体方案是:

option 'with-Q', 'Depend on Q instead of P'

depends_on 'P' if !build.with?('Q')
depends_on 'Q' if  build.with?('Q')
Run Code Online (Sandbox Code Playgroud)

这也可以用于具有替代标志的一个依赖项。这个例子取自我的pdftk公式

option 'with-java', 'Build gcc using --with-java instead of --with-all-languages'

depends_on 'gcc' => ['with-all-languages'] if !build.with?('java')
depends_on 'gcc' => ['with-java']          if  build.with?('java')
Run Code Online (Sandbox Code Playgroud)

这不是处理替代依赖项的完美解决方案,但它可能是 Homebrew 支持的唯一解决方案。