Replies: 7 comments
-
As a side question, how should dependencies on one of the conflicting packages be handled? For BoringSSL, perhaps a section in the CONTROL file reading |
Beta Was this translation helpful? Give feedback.
-
This is definitely a design decision with several reasonable alternatives. First, the immediate issue of "package A has the same headers as package B". We have a list of every currently installed file (which powers the Second, is the larger question of what to do about alternatives? The examples @sdcb listed cover the two most interesting scenarios from a library author's point of view:
From the final user's perspective, I think there are a few core scenarios.
I can see two overarching choices here:
The core principles of Vcpkg are to serve the final user's wishes as much as possible, even at the expense of expression in the portfiles or static analysis. This is along the same lines as why ports cannot specify version requirements in their dependencies; it is entirely left for the end user to decide what version they will use. Because of this, I am heavily on the side of option 2 above. I have some ideas for how option 2 could be implemented (e.g. |
Beta Was this translation helpful? Give feedback.
-
I overlooked that issue and posted a new one. Sorry for that. I think most of the ideas I has are very similar to the thinks discussed in here. This is what I originally posted in the other issue:
@ras0219-msft mentioned the following:
Having the interface name being the same as the default port would not allow a port to specify that it wants explicitly that library. So if port works with |
Beta Was this translation helpful? Give feedback.
-
@ras0219-msft would you accept a PR with an implementation as proposed by me above? Maybe I can first write a specification in the docs folder as you did in #1205 |
Beta Was this translation helpful? Give feedback.
-
A brief spec would be great; I think a lot of wording could be copied from these issues as well to help fill it out quickly!
That's true. I really dread giving libraries the ability to specify incompatibilities like that (A -> B, C -> D, B and D conflict) since it's almost certain to be overly restrictive. I guess we can just rely on our public curation to stop that from happening.
What about making those "interfaces" into just empty ports with a dependency on their "default" implementation? So, for example:
Then, the other libs can have
There might still be some internal "magic" that has to happen when handling these packages though, since I would imagine the naïve implementation to result in
or
which is arguably not quite right. Maybe whenever you install a package that has |
Beta Was this translation helpful? Give feedback.
-
This sound like a very nice solution! I will try to sum everything up so that we have a clear plan on what we want and how to get it. |
Beta Was this translation helpful? Give feedback.
-
Any progress on this? I would like to use boringssl instead of openssl. |
Beta Was this translation helpful? Give feedback.
-
Some packages shared same header and cannot install them all at once, like:
Can we add a definition in CONTROL defines the exclusive port, and give a user-friendly notice when installing the exclusive library.
Beta Was this translation helpful? Give feedback.
All reactions