Building against libuuid without pkgconfig fails if OSSP uuid is installed
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit Modules/_uuidmodule.c und untersuche, wie configure HAVE_UUID_H, HAVE_UUID_UUID_H und MODULE__UUID_CFLAGS in pyconfig.h und Makefile erzeugt. Reproduziere den Fehler auf AlmaLinux 9 mit den im Issue angegebenen Befehlen. Überprüfe anschließend, dass der Build ohne pkgconfig und mit installiertem OSSP uuid erfolgreich ist und den vorgesehenen libuuid-Header einbindet.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- build-system
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 70/100