Skip to content

gh-82909: Update PC/pyconfig.h to allow disabling pragma based auto-linking #19740

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

Merged
merged 5 commits into from
Mar 10, 2025

Conversation

jcfr
Copy link
Contributor

@jcfr jcfr commented Apr 27, 2020

Define PY_NO_LINK_LIB to build extension disabling pragma based
auto-linking. This is relevant when using build-system generator
(e.g CMake) where the linking is explicitly handled

https://bugs.python.org/issue38728

@jcfr jcfr requested a review from a team as a code owner April 27, 2020 19:19
@the-knights-who-say-ni

This comment was marked as resolved.

@jcfr

This comment was marked as resolved.

@jcfr
Copy link
Contributor Author

jcfr commented May 6, 2020

@zooba Thanks for your patience, let me know if you need anything else to move forward with the integration 🙏

@mathstuf
Copy link

No news entry in Misc/NEWS.d/next/

@jcfr Seems like a release note could be added in the meantime.

@mathstuf
Copy link

Ping? Any update here? It'd be nice to have this in 3.9.

@mathstuf
Copy link

mathstuf commented Sep 5, 2021

Seems this will miss 3.10 as well.

@kwryankrattiger
Copy link

Ping. This would be really really nice to have sometime soon 👍

@zooba
Copy link
Member

zooba commented Dec 9, 2021

I thought we'd already added this? I guess if it's not there, then we should.

Definitely needs a NEWS entry, probably deserves a What's New as well. Not sure if there's any place in the documentation that would suit, but if so, we should mention it for sure.

@jcfr
Copy link
Contributor Author

jcfr commented Dec 9, 2021

Definitely needs a NEWS entry

I can definitely add an entry, What about the C-API section ? See https://github.com/python/cpython/tree/main/Misc/NEWS.d/next/C%20API

@arhadthedev arhadthedev changed the title bpo-38728: Update PC/pyconfig.h to allow disabling pragma based auto-linking gh-82909: Update PC/pyconfig.h to allow disabling pragma based auto-linking Apr 2, 2023
@arhadthedev arhadthedev added build The build process and cross-build OS-windows labels Apr 2, 2023
@arhadthedev
Copy link
Member

I added draft documentation and the NEWS entry for the macro. However, they need improvements.

@jcfr
Copy link
Contributor Author

jcfr commented Apr 3, 2023

@arhadthedev Thanks for your help moving this forward 🙏

@zooba
Copy link
Member

zooba commented Apr 3, 2023

I haven't tested the commands added to the docs, but if they do work as described and produce the files, then this looks fine to me.

@tasty0tomato
Copy link

It seems that if building Python by oneself, python's lib file will not be found in virtual environment. Hope this issue fixes as quickly as possible

@zooba
Copy link
Member

zooba commented Jun 26, 2023

No, virtual environment is only for Python libraries. You'll need to look in base_prefix to find native import libraries.

@tasty0tomato
Copy link

tasty0tomato commented Jun 26, 2023

@zooba My question is like this:rosinality/stylegan2-pytorch#325 (comment)

So, is it more like to be a question about venv?

@zooba
Copy link
Member

zooba commented Jun 27, 2023

It looks like Torch is deciding those settings, and it's deciding wrong about where to find the libs files.

There's a revamp of sysconfig going on that will eventually provide a better option for them to find it, but for now, either they need to use sys.base_prefix instead of sys.prefix, or if they already are (which they might be), then there's something wrong with your venv (maybe you've chained multiple venvs together in some unsupported way?)

@tasty0tomato
Copy link

@zooba I can give some additional informations. For exmaple,
The source code of python is on D:\Python-3.10.12,
The binary file of Windows and also the dll file are on D:\Python-3.10.12\PCbuild\amd64

And that's maybe why dll file cannot be found?

@zooba
Copy link
Member

zooba commented Jun 28, 2023

Yeah, many tools are not going to work well when running from a CPython build directory. It's an unsupported configuration.

Try using the PC/layout tool (e.g. python PC\layout --copy <directory> --preset-default) to create an installed-shape directory. That will have the libs at the usual place relative to python.exe. (You need to re-run the command if you rebuild Python, but it does incremental copying. Also, don't run the copied Python from the CPython source directory or it'll get the wrong Lib dir.)

@mathstuf
Copy link

Any progress here? I see conflicts, so at least a rebase is in order. It'd be nice to get this into 3.13 at least…

@vstinner Interested in shepherding this C API change at all?

@zooba
Copy link
Member

zooba commented Dec 28, 2023

A rebase ought to be enough, and when someone confirms that the build commands shown in the new documentation are correct then this can be merged (as per my last message).

@KerstinKeller
Copy link

This would potentially be extremly helpful, any chance that this will get merged at some point?

@zooba
Copy link
Member

zooba commented Nov 21, 2024

It looks like the rebase isn't coming, so someone will need to submit a new PR.

It also looks like my last hesitation was that the commands in the docs weren't tested.

jcfr and others added 5 commits March 2, 2025 15:51
…linking

Define PY_NO_LINK_LIB to build extension disabling pragma based
auto-linking. This is relevant when using build-system generator
(e.g CMake) where the linking is explicitly handled
@jcfr jcfr force-pushed the fix-issue-38728 branch from a799772 to 23c9af6 Compare March 2, 2025 20:53
Copy link
Member

@zooba zooba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing wrong with the PR as it is, but I think we can do a bit of tidying here if you want.

Comment on lines 311 to +314
#ifdef MS_COREDLL
# if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN)
/* not building the core - must be an ext */
# if defined(_MSC_VER)
# if defined(_MSC_VER) && !defined(Py_NO_LINK_LIB)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole set of conditions is pretty ugly... any interest in simplifying?

Ideally in this order:

  • check if the feature is explicitly disabled (new variable)
  • check if we're in a context where it should be implicitly disabled (Py_BUILD_CORE[_BUILTIN])
  • check if the compiler supports it (_MSC_VER)

The order doesn't need to be spelled out to anyone reading it, but it should make it easiest to read (the first check has the best name) and easiest to maintain (alternate compilers can be supported in the "middle", not the edges).

It also really doesn't need to be indented by 8 characters. Four would be plenty.

/* Define Py_NO_LINK_LIB to build extension disabling pragma
based auto-linking.
This is relevant when using build-system generator (e.g CMake) where
the linking is explicitly handled */
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment isn't important for this file, though a short header above the entire block (something like "automatically reference python3x.lib") might make it easier to understand the purpose without reading the whole way through.

@zooba
Copy link
Member

zooba commented Mar 10, 2025

Guess we're not getting those improvements, so we'll leave them for later. Should be an easy first contribution for a sprint.

@zooba zooba merged commit c3487c9 into python:main Mar 10, 2025
39 checks passed
@jcfr
Copy link
Contributor Author

jcfr commented Mar 15, 2025

Thanks everyone for the help moving this forward 🙏

Osyotr added a commit to Osyotr/vcpkg that referenced this pull request Apr 5, 2025
seehwan pushed a commit to seehwan/cpython that referenced this pull request Apr 16, 2025
…auto-linking (pythonGH-19740)

Define Py_NO_LINK_LIB to build extension disabling pragma based auto-linking. This is relevant when using build-system generator (e.g CMake) where the linking is explicitly handled
:file:`Python.h` triggers an implicit, configure-aware link with the
library. The header file chooses :file:`pythonXY_d.lib` for Debug,
:file:`pythonXY.lib` for Release, and :file:`pythonX.lib` for Release with
the `Limited API <stable-application-binary-interface>`_ enabled.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See also #134830

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build The build process and cross-build OS-windows
Projects
None yet
Development

Successfully merging this pull request may close these issues.

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy