Building against libuuid without pkgconfig fails if OSSP uuid is installed
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
Bug report
Bug description:
When building Python on a system where:
- libuuid is installed without pkgconfig
- OSSP uuid is installed (
uuid-develon RHEL/Rocky/Alma) - OSSP uuid's
uuid.his installed as/usr/include/uuid.h(the case on RHEL/Rocky/Alma)
the build fails with the following error:
./Modules/_uuidmodule.c: In function ‘py_uuid_generate_time_safe’:
./Modules/_uuidmodule.c:31:12: error: storage size of ‘uuid’ isn’t known
31 | uuid_t uuid;
| ^~~~
./Modules/_uuidmodule.c:35:11: error: implicit declaration of function ‘uuid_generate_time_safe’; did you mean ‘py_uuid_generate_time_safe’? [-Werror=implicit-function-declaration]
35 | res = uuid_generate_time_safe(uuid);
| ^~~~~~~~~~~~~~~~~~~~~~~
| py_uuid_generate_time_safe
This is because on such a system, both HAVE_UUID_H and HAVE_UUID_UUID_H become set:
$ grep 'HAVE_UUID.*_H' pyconfig.h
#define HAVE_UUID_H 1
#define HAVE_UUID_UUID_H 1
-I/usr/include/uuid does not get added to CFLAGS:
$ grep ^MODULE__UUID_CFLAGS Makefile
MODULE__UUID_CFLAGS=
and Modules/_uuidmodule.c currently checks HAVE_UUID_H before HAVE_UUID_UUID_H:
#if defined(HAVE_UUID_H)
// AIX, FreeBSD, libuuid with pkgconf
#include <uuid.h>
#elif defined(HAVE_UUID_UUID_H)
// libuuid without pkgconf
#include <uuid/uuid.h>
#endif
This causes the wrong uuid.h to be included.
The order in which HAVE_UUID_H and HAVE_UUID_UUID_H are checked was inverted in commit 8af6481f6b7d43646c47d8fa6cc6d5eb465e2b0f, but neither the commit itself or the related issue documents why the order was changed.
Building Python on a system with the properties described in this issue did work as expected in Python 3.10 (3.11 was the first release to include the reordering mentioned above).
Reproducer
docker run --rm -it almalinux:9
dnf install -y 'dnf-command(builddep)'
dnf --enablerepo=crb builddep -y python3
dnf --enablerepo=crb install -y uuid-devel
rm -f /usr/lib64/pkgconfig/uuid.pc
curl -O https://www.python.org/ftp/python/3.14.3/Python-3.14.3.tgz
tar -xf Python-3.14.3.tgz
cd Python-3.14.3
./configure
make -j$(nproc)
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with Modules/_uuidmodule.c and inspect how configure generates HAVE_UUID_H, HAVE_UUID_UUID_H, and MODULE__UUID_CFLAGS in pyconfig.h and Makefile. Reproduce the failure on AlmaLinux 9 using the commands in the issue, then verify that building without pkgconfig and with OSSP uuid installed succeeds and includes the intended libuuid header.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 70/100