-
Notifications
You must be signed in to change notification settings - Fork 697
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
New build-tool-depends
goals to complement build-tools
#3708
Comments
I updated the description slightly, and removed the user-configurability of the mapping; I don't think we're going to do that. |
Related comment: ATM specifying |
So for my work towards (the reduced goals of) #4047, I think the next step is basically desugaring On the actual code side, one can now grep for |
OK. Do you need a roadmap or are you enough in the brainspace to figure it out? The current semantics of build-tools is this:
|
haskell#3708 says that an entry without an explicit exe component is shorthand for all exe components, but this complicates parsing so I'm punting for now: an explicit component name is required.
haskell#3708 says that an entry without an explicit exe component is shorthand for all exe components, but this complicates parsing so I'm punting for now: an explicit component name is required.
Yep by me. |
tool-depend
goals to complement build-tools
build-tool-depend
goals to complement build-tools
build-tool-depend
goals to complement build-tools
build-tool-depends
goals to complement build-tools
When you write
build-tools: alex
, Cabal checks that an executable of this name is installed. It is jointly the responsibility of the package manager, e.g.,cabal-install
, to arrange for an executable namedalex
to be installed.In a recent commit (c0a4860) we added a special case in cabal-install to handle "well known" build-tools like alex and happy, building and installing them automatically when they are requested in
build-tools
. However, there remains a more general problem of letting users ask for an executable, which is known to live in a particular package.build-tools
as currently specified cannot really handle this, because it is specified to only specify executable names (not package names.) So it seems we really need a new field to give this information. Here is the proposal:tool-depends
field, which consists ofpkg:exename version-constraints
specifications, e.g.,tool-depends: gtk2hs-buildtools:gtk2hs2hs < 2.0
. This means that we must build thegtk2hsc2hs
executable fromgtk2hs-buildtools
before building this package. In principle cabal-install need only build thegtk2hsc2hs
executable, although it's also permissible to just build all the executables in the package (if, e.g., the Setup script doesn't supportper-component Cabal <https://github.com/ezyang/ghc-proposals/blob/master/proposals/0000-componentized-cabal.rst>
_). If qualification is omitted it is assumed that you need ALL executables from the package.build-tools
refers exclusively to non-packaged executables, e.g. provided by the system. However, for backwards compatibility, we introduce an internal mapping hard-coded into cabal-install which maps somebuild-tools
fields to package names. The intended interpretation is thatbuild-tools: happy > 0.4
actually elaborates totool-depends: happy:happy > 0.4
.This mapping will be configurable using thebuild-tool-packages
field in acabal-project
and also modifiable by command line argument. (Names can be bikeshedded of course.)Examples:
tool-depends: mytoolpkg
: cabal-install will install all executables defined by a package namedmytoolpkg
, and ensure they are available prior to building this package.tool-depends: mytoolpkg:mytool
: cabal-install will install the executablemytool
frommytoolpkg
before building this packagebuild-tools: happy
: this is equivalent to writingtool-depends: happy:happy
.build-tools: someprog
: as before this does not effect solver behavior; there just simply needs to be asomeprog
in the path.Note: this was originally conceived by @ezyang as part of #220 (which has been addressed); however, since this represents an extension of the
.cabal
format and hasn't yet been implemented it's been split out into its own issue.The text was updated successfully, but these errors were encountered: