Repository navigation
<lock.h> filename is too generic #136759
Copy link
Copy link
Closed
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancementA feature request or enhancement
Description
Activity
- addedtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Jul 18, 2025 - addedtype-featureA feature request or enhancementA feature request or enhancementinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)and removedtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
on Jul 18, 2025 I would very mildly argue this is a bug in that it's a regression: a third-party extension that built fine on Python 3.12 doesn't build on 3.13+ and there's no obvious way to make it build. But I don't feel super strongly about it. :)
Reacted by Itamar OrenYes, let's rename
lock.htopylock.h. Let's also renamecpython/lock.htocpython/pylock.hfor consistency.Reacted by Antonio Spadaro- added a commit that references this issue
on Jul 24, 2025 Unfortunately the PR would have to reverted back for 3.13 and likely won't make it into 3.14 as @zooba explained at #137075 (comment)
- added a commit that references this issue
on Aug 3, 2025 Closing as revert was completed and 3.14 backport was closed.
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-featureA feature request or enhancementA feature request or enhancement
Bug report
Bug description:
Starting with CPython 3.13, there is now a file
lock.hin the Python include directory (not in a further subdirectory). This causes problems when building with other projects or third-party libraries that already have a file namedlock.h. See, for instance, mit-athena/python-afs#6 which is building Cython bindings to OpenAFS, which also has an include file of that same name. The compilation environment seems to search CPython's headers before OpenAFS's, meaning that#include <lock.h>now incorrectly picks up CPython's.To be fair, there are a number of other generic header names too (
object.h,import.h,warnings.h, etc.), and also to be fair,<lock.h>is too generic a name for OpenAFS to use, too, especially since it installs to/usr/include/lock.h. But many of the other Python includes have been around since the 1990s, and so people have already dealt with avoiding conflicts with those names, and conversely AFS's lock.h dates from the 1990s (or earlier) too.It looks like something similar was done for
buffer.h->pybuffer.hin #31201.Would a PR to rename the top-level include to e.g.
pylock.h(either leavingcpython/lock.halone, or renaming it too) be accepted? As far as I can tell, the file name oflock.his an implementation detail of the public interfacePython.h, and not itself a public interface.On a more general note, is it worth trying to change things to make the installed header directory contain only
Python.hand no other files?cc @colesbury and @vstinner who might be interested
CPython versions tested on:
3.13
Operating systems tested on:
Linux
Linked PRs
lock.htopylock.h(GH-137041) #137072lock.htopylock.h(GH-137041) #137075lock.htopylock.h(GH-137041) (#137075) #137166