indygreg / python-zstandard

Python bindings to the Zstandard (zstd) compression library
BSD 3-Clause "New" or "Revised" License
512 stars 90 forks source link

add explicit <unistd.h> include #209

Closed rathann closed 6 months ago

rathann commented 1 year ago

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 https://github.com/python/cpython/pull/108783 .

indygreg commented 6 months ago

unistd.h was added back into Python.h in python/cpython#112026. So this is no longer needed.

rathann commented 6 months ago

It will be needed for Python 3.14, though, as the upstream discussion indicates the intention to re-land the changes then.