Building against libuuid without pkgconfig fails if OSSP uuid is installed
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece por Modules/_uuidmodule.c e inspecione como configure gera HAVE_UUID_H, HAVE_UUID_UUID_H e MODULE__UUID_CFLAGS em pyconfig.h e Makefile. Reproduza a falha no AlmaLinux 9 usando os comandos indicados na issue e, em seguida, verifique se o build sem pkgconfig e com OSSP uuid instalado é bem-sucedido e inclui o header libuuid pretendido.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- build-system
- Tipo de issue
- Bug
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Status de atividade
- Pouca atividade
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 70/100