On Sat, Sep 3, 2016 at 10:46 AM, Stefan Behnel <stefan...@behnel.de> wrote:
> Erik Bray schrieb am 25.04.2016 um 17:18:
>> As some of you already know I've been doing some work on Cython on
>> Cygwin [in the process I I'm constantly mixing the two up in speech,
>> but maybe in writing I'll do better :)].
>>
>> There are several issues with the tests on Cygwin, and that's one
>> thing I'll work on.  But a major annoyance I've encountered when
>> running any tests is a huge number of warnings from gcc such as:
>>
>> embray@PC-pret-47 ~/src/cython
>> $ CFLAGS="-O0" ./runtests.py -vv --no-cpp addloop
>> Python 2.7.10 (default, Jun  1 2015, 18:05:38)
>> [GCC 4.9.2]
>>
>> Running tests against Cython 0.24 f68b5bd0fa620d0dc26166bffe5fe42d94068720
>> Backends: c
>>
>> runTest (__main__.CythonRunTestCase)
>> compiling (c) and running addloop ...
>> === C/C++ compiler error output: ===
>> In file included from /usr/include/python2.7/Python.h:58:0,
>>                  from addloop.c:4:
>> /usr/include/python2.7/pyport.h:69:27: warning: ISO C90 does not
>> support ‘long long’ [-Wlong-long]
>>  #define PY_LONG_LONG long long
>>                            ^
>> /usr/include/python2.7/pyport.h:793:34: note: in definition of macro
>> ‘PyAPI_FUNC’
>>  #       define PyAPI_FUNC(RTYPE) RTYPE
>>                                   ^
>> /usr/include/python2.7/intobject.h:46:21: note: in expansion of macro
>> ‘PY_LONG_LONG’
>>  PyAPI_FUNC(unsigned PY_LONG_LONG) PyInt_AsUnsignedLongLongMask(PyObject *);
>>                      ^
>> In file included from /usr/include/python2.7/Python.h:58:0,
>>                  from addloop.c:4:
>> ...
>>
>> And so on.
>>
>> For now an easy workaround is to add -Wno-long-long to the compiler
>> flags.  But I was curious why I was seeing this in Cygwin but not on
>> my Ubuntu system, and here's why:
>>
>> In runtests.py there is a check
>>
>> https://github.com/cython/cython/blob/master/runtests.py#L829
>>
>> if self.language=='c' and compiler='gcc':
>>     ext_compile_flags.extend(['-std=c89', '-pedantic'])
>>
>> where in this case `compiler` is assigned
>> `sysconfig.get_config_var('CC')`.  On my Linux system this expands to
>> "x86_64-linux-gnu-gcc -pthread".  Whereas on Cygwin (and probably many
>> other systems) it expands simply to "gcc".
>>
>> I'm guessing that to do what it intended the above line should read
>> "and 'gcc' in compiler".
>
> Yes.
>
>> But this also raises the question: Why are the tests run with these
>> flags?  If Python was configured with HAVE_LONG_LONG, then these
>> warnings will be inevitable.
>
> Thanks for bringing this up. Adding "-Wno-long-long" seems the right thing
> to do, given that this depends on CPython and not Cython.
>
> Given that CPython *can* be configured without PY_LONG_LONG support,
> however, we should then guard any such code in Cython with HAVE_LONG_LONG,
> as CPython does internally, so that it actually compiles without it.
>
> I would otherwise like to keep those compiler flags, even if they didn't
> serve us yet, because it is not intended to put all too many constraints on
> the C compiler. Supporting C89, at least whenever possible, would be nice.

An alternative could be to just remove them on cygwin.  Or maybe,
though I haven't tested this I don't think, changing `-std=c89` to
`-std=gnu89`.  newlib, which is the libc implementation used by
Cygwin, has some bugs in its headers that can crop up in odd ways when
using `-std=c<xx>`, but with the GNU extensions it's usually a bit
more permissive.
_______________________________________________
cython-devel mailing list
cython-devel@python.org
https://mail.python.org/mailman/listinfo/cython-devel

Reply via email to