-
Notifications
You must be signed in to change notification settings - Fork 696
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Package global build-depends should apply constraints to all components #3404
Comments
Why not make the inclusion of a package in a component be implicit? This is how hpack works, and it works very well indeed. Why try to reduce the number of deps for non-library components? AFAIK the only downside of more deps is potential module name ambiguity. |
I guess that's OK. Then this is a special case of #2832 (instead of putting a (The reason why I didn't propose this originally was that I thought that if you have multiple test suite stanzas, you might want to specify a common bound for e.g. HUnit on all the test suites, without bringing in the dependency on the library which shouldn't depend on HUnit. But I guess this is a very weak reasoning.) |
Yup, I think it's best to err on the side of concision, particularly if a bit of boilerplate can be used for those less common cases. |
Yes, I think it would be better to just implement #2832. I like the |
OK, closing. |
A common complaint is that there is no capacity for shared Cabal fields between components, c.f. #1949 and #2832.
build-depends
in particular is a common complaint, since a common Cabal idiom is to rebuild the same source files as part of multiple components.I think there is at least a partial solution to this problem: top-level
build-depends
should be brought back, with the following semantics:p >= 3
in the top-level build depends, IF we would have solved for a version ofp
, then we apply the constraint that its version is>=3
build-depends: p
inside any component that wants to use p.In effect, we can centralize version bounds in one part of the Cabal file, while having fine granularity for specifying what components need what dependencies (so that the library doesn't need to depend on the package test suite). Of course the old syntax is still supported, so components can add their own bounds (toggled if the component is enabled.)
What do people think about this?
The text was updated successfully, but these errors were encountered: