discord / erlpack

High Performance Erlang Term Format Packer
MIT License
220 stars 65 forks source link

Fails to install on Windows #7

Open gdude2002 opened 8 years ago

gdude2002 commented 8 years ago

Seems to be expecting a missing header - I'm really not sure what the equivalent for VC is, though.

C:\Users\-gdude2002>pip2 install erlpack --upgrade
Collecting erlpack
  Using cached erlpack-0.3.2.tar.gz
Installing collected packages: erlpack
  Running setup.py install for erlpack ... error
    Complete output from command c:\python27\python2.exe -u -c "import setuptools, tokenize;__file__='c:\\users\\-gdude~1\\appdata\\local\\temp\\pip-build-hzxf06\\erlpack\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\users\-gdude~1\appdata\local\temp\pip-bhjey9-record\install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    creating build
    creating build\lib.win-amd64-2.7
    creating build\lib.win-amd64-2.7\erlpack
    copying py\erlpack\constants.py -> build\lib.win-amd64-2.7\erlpack
    copying py\erlpack\types.py -> build\lib.win-amd64-2.7\erlpack
    copying py\erlpack\__init__.py -> build\lib.win-amd64-2.7\erlpack
    running build_ext
    building 'erlpack._packer' extension
    creating build\temp.win-amd64-2.7
    creating build\temp.win-amd64-2.7\Release
    creating build\temp.win-amd64-2.7\Release\py
    creating build\temp.win-amd64-2.7\Release\py\erlpack
    C:\Users\-gdude2002\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ic:\python27\include -Ic:\python27\PC /Tppy/erlpack/_packer.cpp /Fobuild\temp.win-amd64-2.7\Release\py/erlpack/_packer.obj -O3
    cl : Command line warning D9002 : ignoring unknown option '-O3'
    _packer.cpp
    py/erlpack/_packer.cpp(253) : fatal error C1083: Cannot open include file: 'stdint.h': No such file or directory
    error: command 'C:\\Users\\-gdude2002\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C++ for Python\\9.0\\VC\\Bin\\amd64\\cl.exe' failed with exit status 2

    ----------------------------------------
Command "c:\python27\python2.exe -u -c "import setuptools, tokenize;__file__='c:\\users\\-gdude~1\\appdata\\local\\temp\\pip-build-hzxf06\\erlpack\\setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record c:\users\-gdude~1\appdata\local\temp\pip-bhjey9-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in c:\users\-gdude~1\appdata\local\temp\pip-build-hzxf06\erlpack\
gdude2002 commented 8 years ago

Alright, so it turns out that stdint.h is a C99 thing, and wasn't added before Visual C++ 2010. That's likely the issue with this, since MS's official tools for Python module compilation are pretty old.

gdude2002 commented 8 years ago

It might be better to include or download something like this for portability.

gdude2002 commented 8 years ago

According to Danny on the Discord API server, there's a bunch more C99 stuff used in erlpack.

Maybe you guys could ship wheels? I know you're already building for Windows, and you've already got erlpack on PyPi, so it'd just be an extra build step, wouldn't it?

gdude2002 commented 8 years ago

I talked to Jake on the API server about this, and he stated that you guys aren't in a position to build wheels regularly - so, he half-jokingly asked me to do it. And so, I've done it.

https://bamboo.gserv.me/browse/DSCRD-ERLPK/latest

These wheels are built for Python 2.7.x using the MSVC bundled with Visual Studio 2015, for both x86 and x64 on Windows 10 Pro x64, and will automatically be built whenever you guys push a commit to the master branch.

Python 2.7 for Windows is compiled with MSVC 2008, and so usually you'd also want your extensions compiled with MSVC 2008. However, since MSVC 2008 doesn't actually support C99, I had to use a later version anyway, so I figured going with the latest was the best idea.