python / python/cpython

Building against libuuid without pkgconfig fails if OSSP uuid is installed

未关闭
#147,977 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

build extension-modules type-bug
主要语言
Python
星标
77.2k
派生
35.9k
PR 合并指标
PR 指标待抓取

描述

Bug report

Bug description:

When building Python on a system where:

  • libuuid is installed without pkgconfig
  • OSSP uuid is installed (uuid-devel on RHEL/Rocky/Alma)
  • OSSP uuid's uuid.h is 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

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从 Modules/_uuidmodule.c 开始,检查 configure 如何在 pyconfig.h 和 Makefile 中生成 HAVE_UUID_H、HAVE_UUID_UUID_H 和 MODULE__UUID_CFLAGS。在 AlmaLinux 9 上使用 issue 中的命令重现该故障,然后验证在不使用 pkgconfig 且已安装 OSSP uuid 的情况下构建能够成功,并包含预期的 libuuid 头文件。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
build-system
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
冷清
描述清晰度
描述清楚
新手友好度
70/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。