I was following a tutorial on writing external modules with Cython: https://lxml.de/capi.html#writing-external-modules-in-cython and couldn't compile the given example. Here is the error:
> python setup.py build_ext --inplace
running build_ext
building 'helloworld' extension
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30037\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\Users\Balsa\Envs\oll\lib\site-packages\lxml -IC:\Users\Balsa\Envs\oll\lib\site-packages\lxml\includes -IC:\Users\Balsa\Envs\oll\include -Ic:\users\balsa\appdata\local\programs\python\python36\include -Ic:\users\balsa\appdata\local\programs\python\python36\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30037\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30037\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt" /Tchelloworld.c /Fobuild\temp.win-amd64-3.6\Release\helloworld.obj
helloworld.c
C:\Users\Balsa\Envs\oll\lib\site-packages\lxml\includes\libxml/encoding.h(28): fatal error C1083: Cannot open include file: 'iconv.h': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Tools\\MSVC\\14.29.30037\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
Versions:
Python : sys.version_info(major=3, minor=6, micro=8, releaselevel='final', serial=0)
lxml.etree : (4, 3, 2, 0)
libxml used : (2, 9, 5)
libxml compiled : (2, 9, 5)
libxslt used : (1, 1, 30)
libxslt compiled : (1, 1, 30)
Note: I have also tried with the newest version of lxml and the same error happened.
Thanks for the report. It seems reasonable to include the libiconv header files in the static wheels, if they are a direct dependency of the libxml2 headers.
PR welcome. See "setup_ extra_options( )" in setup.py. Currently, it only includes the header files of libxml2 and libxslt, which etree directly depends on. libiconv should be added.