python / python/cpython

Building against libuuid without pkgconfig fails if OSSP uuid is installed

Open
#147,977 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

build extension-modules type-bug
Dominant language
Python
Stars
77.2k
Forks
35.9k
PR merge metrics
PR metrics pending

Description

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with Modules/_uuidmodule.c and inspect how configure generates HAVE_UUID_H, HAVE_UUID_UUID_H, and MODULE__UUID_CFLAGS in pyconfig.h and Makefile. Reproduce the failure on AlmaLinux 9 using the commands in the issue, then verify that building without pkgconfig and with OSSP uuid installed succeeds and includes the intended libuuid header.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
build-system
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.