Closed Ahmed-Biad-2001 closed 4 months ago
Hi @Ahmed-Biad-2001 thanks a lot for your question!
When you control enough variables of your setup that defining custom compatibility rules makes sense, conan provides the compatibility
extension points, in the form of the compatibility.py
plugin and the compatibility()
method in recipes (Docs here)
With those, you'll be able to define custom rules for when and which kind of compatible packages could be fetch instead of the requested ones. By default, conan implements compatibility over the cppstd
setting, and the linked documentation (and its references) also has examples on adding other fields as part of the compatibility checks. Please do let us know if you need further help, we're happy to help
PD: Your conan install . --build=none
command has a syntax error, you're probably looking for --build=never
:)
Hello @RubenRBS, thanks for the clarifications. Though I'm still having trouble to make it work.
Basically I'm returning a setting that is the same than SDL, but I get the same error. What did I miss?
======== Closest binaries ========
libtool/2.4.7
libtool/2.4.7#08316dad5c72c541ed21e039e4cf217b%1702300906.107 (2023-12-11 13:21:46 UTC)
libtool/2.4.7#08316dad5c72c541ed21e039e4cf217b:b647c43bfefae3f830561ca202b6cfd935b56205
remote: conancenter
settings: Linux, x86_64, Release, gcc, 11
options: fPIC=True, shared=False
diff
settings
expected: compiler.version=14
existing: compiler.version=11
explanation: This binary was built with different settings.
conanfile.py
def compatibility(self):
# SDL 2 compatibility
return [{"settings": [('compiler.version', '11'), ('compiler','gcc')] }]
As a side hint: it is possible to directly specify the compiler.version
independently for each dependency, so you can do in you profile:
[settings]
compiler=gcc
compiler.version=14
libtool/*:compiler.version=11
And this will bring that binary, but still define compiler.version=14
for yourself and other binaries.
It is a pattern, so you can define also compiler.version=11
for all dependencies and &:compiler.version=14
just for your "consumer", the &
is a placeholder that mean the current consumer of dependencies.
Also, for production environments it is recommended to build the packages from source with your desired settings and store those binaries in your own server. Read for example https://docs.conan.io/2/devops/using_conancenter.html
What is your question?
I am trying to install a specific binary package, using
conan install . --build=none
, but I noticed the package ID it chooses is different than the one I want, so it fails.By running
conan graph explain . --build=none
, I notice that it doesn't fetch the binary because of a difference in compiler version in my profile.Is there a way to tell it to not match the compiler version?
Conan version 2.4.1 My default profile:
conanfile.py:
Have you read the CONTRIBUTING guide?