Observed
When a plugin's action runs a program built from the plugin's own package, the consumer must name that program on the edge:
plugins = { version = "…", features = ["tools-embed"], host-module = true, tools = ["mcpp-embed"] }
The tool is an implementation detail of the feature. Naming it on the edge makes it part of the consumer's contract, so renaming or removing it breaks consumers on upgrade. This is how tools = ["mcpp-deps"] had to be removed in a breaking release (mcpp-community/mcpp-plugins#32).
Request
Let a feature declare the package tools it needs, for example [features.tools-embed] tools = ["mcpp-embed"]. The engine would build them when the feature is selected, and mcpp::dep_bin would find them, with nothing on the consumer's edge.
Observed
When a plugin's action runs a program built from the plugin's own package, the consumer must name that program on the edge:
The tool is an implementation detail of the feature. Naming it on the edge makes it part of the consumer's contract, so renaming or removing it breaks consumers on upgrade. This is how
tools = ["mcpp-deps"]had to be removed in a breaking release (mcpp-community/mcpp-plugins#32).Request
Let a feature declare the package tools it needs, for example
[features.tools-embed] tools = ["mcpp-embed"]. The engine would build them when the feature is selected, andmcpp::dep_binwould find them, with nothing on the consumer's edge.