-
-
Notifications
You must be signed in to change notification settings - Fork 274
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
META: {{ stdlib("c") }}
migration
#2102
Comments
@conda-forge/core, I think this would be worth an announcement? |
@conda-forge/core, the blockers for regro/cf-scripts#2135 are all close to being resolved. In case someone still has feedback on that PR, please let me know! I'm planning to start this as soon as the we have smithy and https://github.com/regro/conda-forge-feedstock-check-solvable done. |
Exciting times - the piggy back migrator was merged, and should start working in the next couple of hours in conjunction with the boost 1.84 migration. 🤩🥳 I'll try to keep an eye on this, but please ping me (or comment here) if something seems to be going wrong! |
See: conda-forge/conda-forge.github.io#2102 Signed-off-by: Julien Jerphanion <git@jjerphan.xyz>
I went through the open PRs of the boost migration today, and I think we've reached a point where we could switch on the piggyback for all migrations now. In any case, if you find an issue with what the bot is proposing (w.r.t. stdlib-changes), please let us know in regro/cf-scripts#2328. |
Are the Windows pinnings missing Something like: c_stdlib_version:
- 2019 # [win and x86_64]
- 2022 # [win and arm64] |
AFAIU, this shouldn't be necessary (kinda like we don't have CC @isuruf, since this was based on his suggestion originally. |
FWIW, pulling in vs2022 is problematic in the sense that the windows STL (C++ standard library) requires There also seem to be some problems in gazebo w.r.t. pulling in vs2022 (CC @Traverso), so considering all that, I'm going to add the version pins for windows for now (which stops pulling in both vs2019 & vs2022, and fixed compilation in conda-forge/dcgp-python-feedstock#24, for example). |
Another issue related to pulling in vs2022 in arrow:
|
I would say that is because the version (year) of the msvc package is part of the package name whereas gcc and clang do not include the version in the name. c_compiler:
- gcc # [linux]
- clang # [osx]
- vs2019 # [win and x86_64]
- vs2022 # [win and arm64]
c_compiler_version: # [unix]
- 12 # [linux]
- 16 # [osx]
- 10 # [os.environ.get("CF_CUDA_ENABLED", "False") == "True" and linux]
- 11 # [os.environ.get("CF_CUDA_ENABLED", "False") == "True" and linux] |
That was my bad. We need a repodata patch that does https://github.com/conda-forge/vc-feedstock/pull/75/files |
It seems that now builds that have previously installing both We shouldn't have both at the same time, i.e. we need to change rust. But how should the |
It should be fine to use |
If you got directed here by the linter...
A short overview of the situation and what to do can be found is in this announcement. For the gory details, see below...
One of the few things that conda cannot ship sanely & safely is the C standard library that is an integral part of the operating system (certainly on UNIX), and very ABI-sensitive. This is also the reason why distributions that do ship the C standard library (glibc on linux) stay on the same version for the lifetime of that distribution. Which in turn is why the glibc version is the "clock" measuring distro age in PEP600, and thus manylinux wheels (statistics).
For almost the entire duration of conda-forge's existence (AFAIU; some of this is way before my time), the underlying C standard library has not changed from:
Given that glibc 2.12 is almost 14 years old (and CentOS 6 is EOL for over 3 years), and that macOS 10.9 is EOL since over 7 years (with Apple aggressively pushing users to upgrade), a lot of modern packages are starting to require newer, sometimes way newer glibc versions (the reason we were able to hold out so long w.r.t. OSX is that we ship our own C++ standard library, but we cannot do that for C). With the breadth of feature expansion in the C23 standard, this will also continue well into the future, as projects eventually start picking up these things.
For packages already requiring a newer C stdlib, there have been work-arounds in place for a long time:
- sysroot_linux-64 2.17 # [linux64]
- MACOSX_DEPLOYMENT_TARGET
But these are ultimately hacks, and not ready to support a wide-scale roll-out. This is what has blocked us from releasing libcxx 17.0 for example, since it requires macOS >=10.13, and would virally spread that requirement to essentially all packages that use C++ in any of their dependencies (which means +/- all of conda-forge).
The need to move to greener pastures has been clear for a long time, though the work involved is painful and it wasn't clear how to do it exactly. In any case, we've already announced that:
The latter announcement already explicitly added a caveat that we need to figure out how to do this first, because the fact that we've never really bumped the C stdlib baseline version on linux or osx, means that it's crept into lots of places as a silent assumption waiting to break. The most critical thing being correct metadata for the produced packages - in particular, if some package requires a newer C stdlib than a user has (as identified by the
__glibc
/__osx
virtual packages; which need at least conda >=4.8), the package should not ever be installed.After several discussions in cf/core, as well as with people from Anaconda & Prefix, we now have identified a way forward which involves a new jinja-function
{{ stdlib("c") }}
to match{{ compiler("c") }}
. This is a welcome increase in expressivity, as indeed the version of the C standard library and compiler are very distinct things (as for other languages as well...), but with the substantial downside that no recipes are using this functionality yet. This means we have to add this function to essentially all compiled recipes, to ensure we have the mechanics in place for later bumping the minimum required version (while also allowing selective opt-ins to newer or older versions per feedstock).The function is designed in many ways in parallel with the
{{ compiler("...") }}
jinja, and so the corresponding keys inconda_build_config.yaml
should be unsurprising:The required functionality was merged into conda-build as of 3.28, but some bugs are still being ironed out and it'll likely not yet be fully functional until the upcoming conda-build 24.3.
This issue is intended for discussion, questions, etc. for this entire effort, beyond the specifics that will arise for glibc 2.17 resp. macos 10.13.
stdlib
jinja function conda/conda-build#5053Backport patch fixing stdlib detection conda-build-feedstock#220(came through conda-build 24.3)sysroot_{{ target }}
on linux andvs_{{ target }}
on windowsc_stdlib{,_version}
to global pinning: add stdlib metapackages to pinning conda-forge-pinning-feedstock#5499stdlib_version
for determining macOS SDK version in.ci_support/
and cf-ci-setup conda-smithy#1884c_stdlib{,_version}
fromalways_keep_keys
in configure_feedstock.py conda-smithy#1908{{ stdlib("c") }}
variable is incorrect for noarch packages conda-smithy#1924c_stdlib_version
to Linux variants staged-recipes#26206vs20YY_{{ target }}
constrainsvs_{{ target }} 20YY
conda-forge-repodata-patches-feedstock#701m2w64_
prefix in stdlib piggyback regro/cf-scripts#2551{{ stdlib("c") }}
if they don't have it alreadyThe text was updated successfully, but these errors were encountered: