python / python/cpython

Building against libuuid without pkgconfig fails if OSSP uuid is installed

Đang mở
#147,977 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

build extension-modules type-bug
Ngôn ngữ chính
Python
Star
77.2k
Fork
35.9k
Chỉ số merge pull request
Chỉ số pull request đang chờ

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với Modules/_uuidmodule.c và kiểm tra cách configure tạo HAVE_UUID_H, HAVE_UUID_UUID_H và MODULE__UUID_CFLAGS trong pyconfig.h và Makefile. Tái hiện lỗi trên AlmaLinux 9 bằng các lệnh được nêu trong issue, sau đó xác minh rằng việc build không có pkgconfig và với OSSP uuid đã được cài đặt sẽ thành công và bao gồm header libuuid dự định.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
build-system
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
70/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.