> Hi Pierre,

> Pierre Neidhardt <mail@ambrevar.xyz> skribis:

> > One of the biggest struggle we had when discussing it was figuring out
> > what to do about parameter propagation across dependencies.

> > For instance, what if we want to build "all packages without X support"?
> > This means that the parameter must traverse all inputs recursively if we
> > don't want to drag X indirectly.

> > If I understand your change correctly, the patch is only applying
> > parameters to the given package and it's not propagated to the inputs,
> > is that correct?

> That’s correct: in this patch set parameters are per-package, and I
think it’s easier to start simple, but we could implement what you
describe without too much hassle I think.

> For example, you’d type ‘--with-parameters=x11=false’, and that’d be
applied to all the packages that have an ‘x11’ parameter.

> Ludo’.

I have done a lot of work with the Conan package manager, a c++ language package manager, that has grown in capability. It is not fully functional, but works on the hash of the key parameters of the package (name, version, etc.) to find the right reproducible binary. Two important parameters are "options" and "settings".

Options are per-package, and generally affect none below it. You can specify defaults for the options in the package, and also call for specific options on dependencies in package "recipes". There are also ways to define incompatibilities and substitutes. On the command line, you can specify options with -o,--options, with no namespace needed for the package you are installing, and package:option to specify for other packages pulled in. I prefer this syntax to all the equal signs you proposed (though I defer if this is standard throughout Guix/Guile)

Settings are more "system-wide", though being a language package manager, it does not have a "system". The same settings are applied to the whole tree during an install, and are usually things like compiler, architecture, and build type. These settings are chosen through a profile file, of which there is a default generated for a given computer. Settings can also be set at the command line during install with -s,--settings, but of course there is no namespacing.

https://docs.conan.io/en/latest/mastering/conditional.html

I think there is a lot of good stuff in Conan that Guix could learn from. It's a lot closer in architecture than any of the traditional system package managers.

If you would, please forward this to the mailing list that this message was from, as I am not currently on that list.

Sincerely,
Stephen Christie