Alternative dependencies in a Homebrew formula (e.

2019-06-22 05:26发布

问题:

How can I describe alternative dependencies in a Homebrew formula? There are two different kinds I'm thinking of.

1. Alternative packages

My formula can depend on package P or Q, but it must have one of them. So, I want either

depends_on 'P'

or

depends_on 'Q'

and I need at least one.

2. Alternative flags for the same package

My formula requires another package X for building, and it needs a package X with one of two flags, A and B. That is, I want either

depends_on 'X' => [:build, 'A']

or

depends_on 'X' => [:build, 'B']

and I need at least one.

Example

A specific example of where these alternative dependencies would be useful is a formula depending on gcc. There are multiple packages for gcc (e.g. gcc4[3-9]), which could be supported by #1 above. gcc has a flag enable-all-languages which implies enable-java, so if a formula that requires gcj would use #2 to specify the alternative flags.

回答1:

I recently discovered that it is possible to have dependencies conditionally determined by options. The general scheme is:

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

depends_on 'P' if !build.with?('Q')
depends_on 'Q' if  build.with?('Q')

This can also be used for one dependency with alternative flags. This example is taken from my pdftk formula:

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')

This is not a perfect solution to dealing with alternative dependencies, but it is probably the only one that Homebrew will support.