Description
setuptools version
69.0.3
Python version
3.12
OS
Windows
Additional environment information
No response
Description
Using cffi to generate a wrapper for libcurl. On Windows, cffi links with -lpython312
for mingw and so the build does not work on other versions of Python.
gcc -shared -s build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\release\_libcurl_cffi.o build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\release\_libcurl_cffi.def -LE:\libs\x86_64-windows -LC:\Users\user\AppData\Local\Temp\Mxt236\var\log\xwin\build-env-ywcrviwm\libs -LC:\Users\user\scoop\apps\python\current\libs -LC:\Users\user\scoop\apps\python\current -LC:\Users\user\AppData\Local\Temp\Mxt236\var\log\xwin\build-env-ywcrviwm\PCbuild\amd64 -lcurl -lpython312 -lvcruntime140 -o build\lib.win-amd64-cpython-312\_libcurl_cffi.pyd
Manually changing the -lpython312
to -lpython3
fixes the issue. I'm not sure where this command gets generated - opened issue with cffi who redirected to setuptools.
Python build command line I used is as follows:
python3 -m build -w . -C="--build-option=build" -C="--build-option=--compiler" -C="--build-option=mingw32" -C="--build-option=bdist_wheel" -C="--build-option=--py-limited-api" -C="--build-option=cp32"
This works fine on Linux and OSX which don't need the --compiler=mingw32
flag but link with -lpython3
, making the wheels generated functional with all versions of Python since 3.2.
Expected behavior
setuptools should link with -lpython3
when using --py-limited-api
with mingw32.
How to Reproduce
On Windows with mingw32-x64 installed (scoop install mingw):
git clone https://github.com/genotrance/mcurl
cd mcurl
bash build.sh
Will get a wheel created which will only run on the Python version that was used to build the wheel.
Output
...
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win-amd64-cpython-312
creating build\lib.win-amd64-cpython-312\mcurl
copying mcurl\gen.py -> build\lib.win-amd64-cpython-312\mcurl
copying mcurl\__init__.py -> build\lib.win-amd64-cpython-312\mcurl
running egg_info
writing mcurl.egg-info\PKG-INFO
writing dependency_links to mcurl.egg-info\dependency_links.txt
writing requirements to mcurl.egg-info\requires.txt
writing top-level names to mcurl.egg-info\top_level.txt
reading manifest file 'mcurl.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
adding license file 'LICENSE.txt'
writing manifest file 'mcurl.egg-info\SOURCES.txt'
copying mcurl\cacert.pem -> build\lib.win-amd64-cpython-312\mcurl
running build_ext
generating cffi module 'build\\temp.win-amd64-cpython-312\\Release\\_libcurl_cffi.c'
creating build\temp.win-amd64-cpython-312
creating build\temp.win-amd64-cpython-312\Release
building '_libcurl_cffi' extension
creating build\temp.win-amd64-cpython-312\Release\build
creating build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312
creating build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\release
gcc -mdll -O -Wall -DCURL_DISABLE_DEPRECATION -IE:\Dropbox\Private\github\mcurl\mcurllib\x86_64-windows/dl/LibCURL/include/curl -IC:\Users\gt\AppData\Local\Temp\Mxt236\var\log\xwin\build-env-ywcrviwm\include -IC:\Users\gt\scoop\apps\python\current\include -IC:\Users\gt\scoop\apps\pytho
n\current\Include -c build\temp.win-amd64-cpython-312\Release\_libcurl_cffi.c -o build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\release\_libcurl_cffi.o
writing build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\release\_libcurl_cffi.def
gcc -shared -s build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\release\_libcurl_cffi.o build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\release\_libcurl_cffi.def -LE:\Dropbox\Private\github\mcurl\mcurllib\x86_64-windows -LC:\Users\gt\A
ppData\Local\Temp\Mxt236\var\log\xwin\build-env-ywcrviwm\libs -LC:\Users\gt\scoop\apps\python\current\libs -LC:\Users\gt\scoop\apps\python\current -LC:\Users\gt\AppData\Local\Temp\Mxt236\var\log\xwin\build-env-ywcrviwm\PCbuild\amd64 -lcurl -lpython312 -lvcruntime140 -o build\lib.win-am
d64-cpython-312\_libcurl_cffi.pyd
installing to build\bdist.win-amd64\wheel
running install
running install_lib
creating build\bdist.win-amd64
creating build\bdist.win-amd64\wheel
creating build\bdist.win-amd64\wheel\mcurl
copying build\lib.win-amd64-cpython-312\mcurl\cacert.pem -> build\bdist.win-amd64\wheel\.\mcurl
copying build\lib.win-amd64-cpython-312\mcurl\gen.py -> build\bdist.win-amd64\wheel\.\mcurl
copying build\lib.win-amd64-cpython-312\mcurl\__init__.py -> build\bdist.win-amd64\wheel\.\mcurl
copying build\lib.win-amd64-cpython-312\_libcurl_cffi.pyd -> build\bdist.win-amd64\wheel\.
running install_egg_info
Copying mcurl.egg-info to build\bdist.win-amd64\wheel\.\mcurl-8.6.0.0-py3.12.egg-info
running install_scripts
creating build\bdist.win-amd64\wheel\mcurl-8.6.0.0.dist-info\WHEEL
creating 'E:\Dropbox\Private\github\mcurl\dist\.tmp-kd4m1sg_\mcurl-8.6.0.0-cp32-abi3-win_amd64.whl' and adding 'build\bdist.win-amd64\wheel' to it
adding '_libcurl_cffi.pyd'
adding 'mcurl/__init__.py'
adding 'mcurl/cacert.pem'
adding 'mcurl/gen.py'
adding 'mcurl-8.6.0.0.dist-info/LICENSE.txt'
adding 'mcurl-8.6.0.0.dist-info/METADATA'
adding 'mcurl-8.6.0.0.dist-info/WHEEL'
adding 'mcurl-8.6.0.0.dist-info/top_level.txt'
adding 'mcurl-8.6.0.0.dist-info/RECORD'
removing build\bdist.win-amd64\wheel
Successfully built mcurl-8.6.0.0-cp32-abi3-win_amd64.whl