Building against libuuid without pkgconfig fails if OSSP uuid is installed
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da Modules/_uuidmodule.c e verifica come configure genera HAVE_UUID_H, HAVE_UUID_UUID_H e MODULE__UUID_CFLAGS in pyconfig.h e Makefile. Riproduci il problema su AlmaLinux 9 usando i comandi indicati nell’issue, quindi verifica che la compilazione senza pkgconfig e con OSSP uuid installato abbia esito positivo e includa l’header libuuid previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- build-system
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 70/100