Hi!
Haha! So obvious now that you've pointed it out!! Yes, I confirm that
this is the problem! I never even thought to look for such macros
upstream! Thanks!
OK, can I propose a patch to uclibc-ng to change the naming of the
unused fields to include "uclibc" in the name. This is in the style of
glibc, which does the same (only with __glibc_unused)
Signed off: Ed Wildgoose <lists(a)wildgooses.com>
--- /usr/include/bits/stat.h.orig 2020-06-11 16:14:05.995149761 +0000
+++ /usr/include/bits/stat.h 2020-06-11 16:14:47.344220485 +0000
@@ -99,11 +99,11 @@
unsigned long int st_ctimensec; /* Nsecs of last status change. */
#endif
#if __WORDSIZE == 64
- long int ___unused[3];
+ long int __uclibc__unused[3];
#else
# ifndef __USE_FILE_OFFSET64
- unsigned long int __unused4;
- unsigned long int __unused5;
+ unsigned long int __uclibc_unused4;
+ unsigned long int __uclibc_unused5;
# else
__ino64_t st_ino; /* File serial number. */
# endif
@@ -160,7 +160,7 @@
unsigned long int st_ctimensec; /* Nsecs of last status change. */
#endif
#if __WORDSIZE == 64
- long int __unused[3];
+ long int __uclibc_unused[3];
#else
__ino64_t st_ino; /* File serial number. */
#endif
On 10/06/2020 22:00, Yann Sionneau wrote:
Hello Ed,
Maybe it is due to this
https://github.com/rsmarples/dhcpcd/blob/709e6b1a38ef87ada75354e968a9b35eca…
?
Could you try renaming __unused[3] as ___unused[3] (with an extra
leading '_') to see if it compiles?
Regards,
Yann
Le 10/06/2020 à 22:51, Ed W a écrit :
> Hi, Could someone please take a look at my errors below and see if
> this is a uclibc problem? I'm struggling to understand.
>
> System is gentoo/hardened/uclibc-ng. Using gcc-9.3.0, uclibc-1.0.33 in
> a chroot on x86-64
>
> Using dhcpcd-8+, ie observe the same on 9.x and various 8.x versions.
> Specifically testing dhcpcd-8.1.9 in this case.
>
> Error on compilation looks like:
>
> In file included from /usr/include/sys/stat.h:106,
> from /usr/include/fcntl.h:37,
> from if.c:58:
> /usr/include/bits/stat.h:102:22: error: expected identifier or '('
> before '[' token
> 102 | long int __unused[3];
> | ^
>
>
> If I comment out the "#include <fcntl.h>" in if.c, then it compiles
> without error.
>
> Also, if I convert the definition from the form "__unused[3]" to
> separate lines like "long int __unused1", etc, then it also compiles
> without error.
>
> I'm not clear why an array definition in a struct is triggering this
> compiler error? Any thoughts? Is this something that dhcpcd is doing
> wrong?
>
>
> Thanks for any help. Full log below
>
> Ed W
>
>
> # ./configure
> configure args:
> Deriving operating system from ... x86_64-unknown-linux
> Configuring dhcpcd for ... linux
> Enabling INET support
> Enabling ARP support
> Enabling ARPing support
> Enabling IPv4LL support
> Enabling INET6 support
> Enabling DHCPv6 support
> Enabling Authentication
> Using compiler .. cc
> cc (Gentoo Hardened 9.3.0 p2) 9.3.0
> dhcpcd-definitions.conf will be embedded in dhcpcd itself
> Testing for nl80211 ... yes
> Testing for IN6_ADDR_GEN_MODE_NONE ... yes
> Testing for getifaddrs ... yes
> Testing for ifaddrs.ifa_addrflags ... no
> Testing for clock_gettime ... yes
> Testing for inet_ntoa ... yes
> Testing for arc4random ... no
> Testing for arc4random_uniform ... no
> Testing for open_memstream ... yes
> Testing for pidfile_lock ... no
> Testing for setproctitle ... no
> Testing for strlcpy ... yes
> Testing for strtoi ... no
> Testing for consttime_memequal ... no
> Testing for dprintf ... yes
> Testing for TAILQ_FOREACH_SAFE ... no
> Testing for TAILQ_FOREACH_MUTABLE ... no
> Testing for TAILQ_CONCAT ...yes
> Testing for rb_tree_init ... no
> Testing for reallocarray ... no
> Testing for kqueue1 ... no
> Testing for kqueue ... no
> Testing for epoll ... yes
> Testing for be64enc ... no
> Testing for fls64 ... no
> Testing for MD5Init ... no
> Testing for sha2.h ... no
> Testing for SHA256_Init ... no
> Testing for SHA256Init ... no
> Testing for hmac ... no
> Checking for libudev ... yes
> Checking udev_monitor_filter_add_match_subsystem_devtype ... yes
> Checking udev_device_get_is_initialized ... yes
> Testing for dlopen ... yes
> Checking for ntpd ... /usr/sbin/ntpd (50-ntp.conf)
> Checking for chronyd ... not found
> Checking for ypbind ... not found
>
> SYSCONFDIR = /etc
> SBINDIR = /sbin
> LIBDIR = /lib
> LIBEXECDIR = /libexec
> DBDIR = /var/db/dhcpcd
> RUNDIR = /var/run
> MANDIR = /usr/share/man
> DATADIR = /usr/share
> HOOKSCRIPTS = 50-ntp.conf
> EGHOOKSCRIPTS =
> STATUSARG =
>
> chroot:twocubed dhcpcd-8.1.9 # make
> for x in src hooks; do cd $x; make all || exit $?; cd ..; done
> make[1]: Entering directory
> '/var/tmp/portage/net-misc/dhcpcd-8.1.9/work/dhcpcd-8.1.9/src'
> cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
> -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV
> -I.. -I../src -I./crypt -c common.c -o common.o
> cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
> -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV
> -I.. -I../src -I./crypt -c control.c -o control.o
> cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
> -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV
> -I.. -I../src -I./crypt -c dhcpcd.c -o dhcpcd.o
> cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
> -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV
> -I.. -I../src -I./crypt -c duid.c -o duid.o
> cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
> -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV
> -I.. -I../src -I./crypt -c eloop.c -o eloop.o
> cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
> -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV
> -I.. -I../src -I./crypt -c logerr.c -o logerr.o
> cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE
> -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
> -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV
> -I.. -I../src -I./crypt -c if.c -o if.o
> In file included from /usr/include/sys/stat.h:106,
> from /usr/include/fcntl.h:37,
> from if.c:58:
> /usr/include/bits/stat.h:102:22: error: expected identifier or '('
> before '[' token
> 102 | long int __unused[3];
> | ^
> /usr/include/bits/stat.h:163:22: error: expected identifier or '('
> before '[' token
> 163 | long int __unused[3];
> | ^
> make[1]: *** [Makefile:55: if.o] Error 1
> make[1]: Leaving directory
> '/var/tmp/portage/net-misc/dhcpcd-8.1.9/work/dhcpcd-8.1.9/src'
> make: *** [Makefile:24: all] Error 2
>
>
> _______________________________________________
> devel mailing list
> devel(a)uclibc-ng.org
>
https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel