-
-
Notifications
You must be signed in to change notification settings - Fork 30.9k
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
gh-108765: Python.h no longer includes <unistd.h> #108783
Conversation
543f991
to
f2f1abe
Compare
I merged my PR. If it causes too many trouble in 3rd party C extensions (require to update too many C extensions before Python 3.13 beta1), I can make this change conditional only in the limited C API version 3.13, as I did for other headers in
I consider that |
breaks signalmodule.c |
Would you mind to elaborate your comment "a little bit"? What is broken? Is it a build issue? On which Python version? On which OS (name, version) and compiler (name, version)? |
signalmodule.c calls pause() and alarm() (under #ifdef HAVE_{PAUSE,ALARM} guards), which are defined in unistd.h On the Python version where you deleted unistd.h from Python.h, of course. |
Hum, in fact, <unistd.h> is included indirectly by pycore_pythread.h. But well, I wrote PR #111402 to make it extra clear. |
Which is not necessarily included when signalmodule.c is compiled ... it wasn't in my build. (Which I've abandoned ... I never actually intended to build the top of tree.)
Seems like the right thing to do. |
You didn't reply to my question about OS and compiler... Also, pycore_pythread.h was modified recently. |
This fixes the following compilation error with Python 3.13.0a1: ``` c-ext/backend_c.c:275:13: error: implicit declaration of function ‘sysconf’; did you mean ‘sscanf’? [-Werror=implicit-function-declaration] 275 | count = sysconf(_SC_NPROCESSORS_ONLN); | ^~~~~~~ | sscanf ``` According to https://docs.python.org/3.13/whatsnew/3.13.html: Python.h no longer includes the <unistd.h> standard header file. If needed, it should now be included explicitly. For example, it provides the functions: read(), write(), close(), isatty(), lseek(), getpid(), getcwd(), sysconf() and getpagesize(). As a consequence, _POSIX_SEMAPHORES and _POSIX_THREADS macros are no longer defined by Python.h. The HAVE_UNISTD_H and HAVE_PTHREAD_H macros defined by Python.h can be used to decide if <unistd.h> and <pthread.h> header files can be included. See python/cpython#108783 .
📚 Documentation preview 📚: https://cpython-previews--108783.org.readthedocs.build/