Hi, In data mercoledì 10 agosto 2016 22:20:10 CEST, Jens Reyer ha scritto: > ~~~~~ > gcc -c -o virtual.o virtual.c -I. -I../../include -D__WINESRC__ -D_NTSYSTEM_ -D_REENTRANT -fPIC -Wall \ > -pipe -fno-strict-aliasing -Wdeclaration-after-statement -Wempty-body -Wignored-qualifiers \ > -Wstrict-prototypes -Wtype-limits -Wunused-but-set-parameter -Wvla -Wwrite-strings -Wpointer-arith \ > -Wlogical-op -gdwarf-2 -gstrict-dwarf -fno-omit-frame-pointer -Werror -Wdate-time -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wno-error > virtual.c: In function 'virtual_get_system_info': > virtual.c:1363:20: error: storage size of 'sinfo' isn't known > struct sysinfo sinfo; > ^ > virtual.c:1372:10: warning: implicit declaration of function 'sysinfo' [-Wimplicit-function-declaration] > if (!sysinfo(&sinfo)) > ^ > virtual.c:1363:20: warning: unused variable 'sinfo' [-Wunused-variable] > struct sysinfo sinfo; > ^ > Makefile:711: recipe for target 'virtual.o' failed > ~~~~~ sysinfo(2) is strictly specific to Linux. > The code is only called conditionally (ifdef HAVE_SYS_SYSINFO_H). > > It has "include <sys/sysinfo.h>", which is provided in: > /usr/include/i386-gnu/sys/sysinfo.h libc0.3-dev [hurd-i386] > /usr/include/i386-kfreebsd-gnu/sys/sysinfo.h libc0.1-dev [kfreebsd-i386] > > However "totalram" and "mem_unit" are only in: > /usr/include/linux/sysinfo.h linux-libc-dev > > So sysinfo.h exists on hurd/kfreebsd, but doesn't provide everything > necessary!? Is there a fix for this, or should we disable this code > on hurd/kfreebsd explicitly? Or am I on a completely wrong track here? Headers in sys/ and bits/ usually are implementations for the platform; since sys/sysinfo.h is not standard, you cannot assume that it exists only on a platform, nor what it provides. In this case, the upstream check is wrong: it should not check for sys/sysinfo.h and assume it's a Linux-ish implementation, but either: a) just limit the implementation to Linux unconditionally (as in the busybox code b) check for sys/sysinfo.h *and* sysinfo() in it Considering sysinfo() is not portable anyway, (b) might fail one day if a platform provide a different implementation with the same name (it's not standard after all). Hope it helps -- feel free to ask more. Thanks, -- Pino Toscano
Attachment:
signature.asc
Description: This is a digitally signed message part.