Browse Source

unix: Don't use -Wno-error=cpp or #warning; fix strict alias warning.

For the sake of older versions of gcc (and other compilers), don't use
the #warning CPP directive, nor the -Wno-error=cpp option.

Also, fix a strict alias warning in modffi.c for older compilers, and
add a test for ffi module.

Addresses issue #847.
pull/852/head
Damien George 10 years ago
parent
commit
17598d49e1
  1. 2
      tests/run-tests
  2. 21
      tests/unix/ffi_float.py
  3. 2
      tests/unix/ffi_float.py.exp
  4. 2
      unix/Makefile
  5. 4
      unix/modffi.c
  6. 3
      unix/modsocket.c

2
tests/run-tests

@ -149,7 +149,7 @@ def main():
if args.test_dirs is None:
if pyb is None:
# run PC tests
test_dirs = ('basics', 'micropython', 'float', 'import', 'io', 'misc', 'unicode')
test_dirs = ('basics', 'micropython', 'float', 'import', 'io', 'misc', 'unicode', 'unix')
else:
# run pyboard tests
test_dirs = ('basics', 'micropython', 'float', 'pyb', 'pybnative', 'inlineasm')

21
tests/unix/ffi_float.py

@ -0,0 +1,21 @@
# test ffi float support
import ffi
def ffi_open(names):
err = None
for n in names:
try:
mod = ffi.open(n)
return mod
except OSError as e:
err = e
raise err
libc = ffi_open(('libc.so', 'libc.so.0', 'libc.so.6'))
strtof = libc.func("f", "strtof", "sp")
print('%.6f' % strtof('1.23', None))
strtod = libc.func("d", "strtod", "sp")
print('%.6f' % strtod('1.23', None))

2
tests/unix/ffi_float.py.exp

@ -0,0 +1,2 @@
1.230000
1.230000

2
unix/Makefile

@ -18,7 +18,7 @@ INC += -I$(PY_SRC)
INC += -I$(BUILD)
# compiler settings
CWARN = -Wall -Werror -Wno-error=cpp
CWARN = -Wall -Werror
CFLAGS = $(INC) $(CWARN) -ansi -std=gnu99 -DUNIX $(CFLAGS_MOD) $(COPT) $(CFLAGS_EXTRA)
# Debugging/Optimization

4
unix/modffi.c

@ -146,8 +146,8 @@ STATIC mp_obj_t return_ffi_value(ffi_arg val, char type)
case 'v':
return mp_const_none;
case 'f': {
float *p = (float*)&val;
return mp_obj_new_float(*p);
union { ffi_arg ffi; float flt; } val_union = { .ffi = val };
return mp_obj_new_float(val_union.flt);
}
case 'd': {
double *p = (double*)&val;

3
unix/modsocket.c

@ -371,7 +371,8 @@ STATIC mp_obj_t mod_socket_getaddrinfo(mp_uint_t n_args, const mp_obj_t *args) {
hints.ai_flags = AI_NUMERICSERV;
#ifdef __UCLIBC_MAJOR__
#if __UCLIBC_MAJOR__ == 0 && (__UCLIBC_MINOR__ < 9 || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ <= 32))
#warning Working around uClibc bug with numeric service name
// "warning" requires -Wno-cpp which is a relatively new gcc option, so we choose not to use it.
//#warning Working around uClibc bug with numeric service name
// Older versions og uClibc have bugs when numeric ports in service
// arg require also hints.ai_socktype (or hints.ai_protocol) != 0
// This actually was fixed in 0.9.32.1, but uClibc doesn't allow to

Loading…
Cancel
Save