Re: [ITP] python-pybind11

Jon Turney via Cygwin-apps <[email protected]> Tue, 17 Mar 2026 16:31:00 +0000
Newsgroups gmane.os.cygwin.applications
Message-ID <[email protected]>
On 15/03/2026 16:57, Hamish McIntyre-Bhatty via Cygwin-apps wrote:
> On 15/03/2026 16:41, Jon Turney wrote:
>> On 15/03/2026 15:52, Hamish McIntyre-Bhatty via Cygwin-apps wrote:
>>> Hi all,
>>>
>>> pybind11 (https://pypi.org/project/pybind11/) is a dependency of 
>>> recent versions of python-imaging (a package I already maintain), and 
>>> as such I'd like to package it for Cygwin.
>>>
>>> The Cygport file is available at: https://gitlab.com/hamishmb/cygwin- 
>>> python-pybind11.
>>>
>>> pybind11 is in Debian: https://packages.debian.org/trixie/python3- 
>>> pybind11
>>
>> Thanks! I added this to your packages.
> Thank you!
>>
>> A few small comments on the cygport:

Oh, I also meant to say:

> SRC_URI="https://files.pythonhosted.org/packages/a5/98/9118a0659646f1628c592ef9bb48e0056efa6bf27c951fd12a178e0136fb/pybind11-3.0.2.tar.gz"
> SRC_DIR="pybind11-${VERSION}"

I think these lines are unneeded, since cygport already understands how 
to fetch and unpack packages from pypi.

>>  > PYTHON_WHEEL_VERSIONS="3.9:3.12"
>>
>> This is the default, and leaving it implicit will avoid the need to 
>> change it in future.
> Thanks, I didn't know I could leave that out, I shall amend it.
>>
>>> PKG_NAMES="python-pybind11-common python39-pybind11 python312-pybind11"
>> [...]
>>> python39_pybind11_REQUIRES="python39"
>>> python312_pybind11_REQUIRES="python312"
>>
>> You can write this as (something like):
>>
>>> PKG_NAMES="python-pybind11-common"
>>>
>>> for v in ${PYTHON_WHEEL_VERSIONS//:/ }
>>> do
>>>   PKG_NAMES+=" python${v/./}"
>>>   declare python${v/./}_REQUIRES+="python${v}"
>>> done
>>
> Good to know, but that is less clear to me, personally, probably because 
> I'm not all that familiar with shell scripting.

Fair enough.

>> I'm not sure about this part:
>>
>>> python_pybind11_common_REQUIRES="python39-pybind11 python312-pybind11"
>>> python_pybind11_common_CONTENTS="
>>>     usr/bin/
>>> "
>>
>> Maybe the name should just be python-pybind11, or even pybind11, if it 
>> installs a tool of that name?
> It install pybind11-config, so perhaps yes.
>>
>> I'm not sure about the arrangement of depending on python3{9,12}- 
>> pybind11 (and thus pulling in *both* python39 and python312) to ensure 
>> that the script works irrespective of what /usr/bin/python currently is).
>>
>> (In fact, because python-wheel installs /usr/bin/pybind11-config for 
>> each python version, we might well end up with it containing an 
>> explicitly versioned shebang for the last one it made, anyhow)
> You're probably right.
>>
>>
>> So, all in all, maybe it makes more sense to build this with the 
>> python3-wheel cygclass? (which only builds the package for a single 
>> version of python, the default, which is 3.9 currently) - especially 
>> if the primary way to use this is via the script, and the python 
>> module isn't expected to be used elsewhere. 
> 
> The python module gets imported when used by other modules like python- 
> imaging, so I don't think that would work, and we do need to build for 
> both Python 3.9 and 3.12, unless due to it being a pure-python module, 
> the module is compatible with both? The build times are very short 
> anyway, so I don't thinks that's too much of a concern?

In that case, maybe just forget about python_pybind11_common and simply 
write:
> python312_pybind11_CONTENTS+=" /usr/bin/pybind11-config"

This tool seems quite dangerous to use: notably, if '--includes' really 
gives you the flags for including python headers, it seems like pot-luck 
which python version they will be for, and there's no way to make that 
match the version you are actually building for...