Hi!
When building pkgtools/pkg and NetBSD 10 or current, there's a new
build failure compared to NetBSD 9.
--- libpkg_la-pkg_elf.lo ---
In file included from /usr/include/link_elf.h:7,
from /usr/include/link.h:40,
from pkg_elf.c:52:
/usr/include/sys/exec_elf.h:112:3: error: conflicting types for 'Elf32_Ehdr'; have 'struct <anonymous>'
112 | } Elf32_Ehdr;
| ^~~~~~~~~~
In file included from /usr/include/elfdefinitions.h:34,
from /usr/include/libelf.h:40,
from /usr/include/gelf.h:34,
from pkg_elf.c:49:
/usr/include/sys/elfdefinitions.h:1969:3: note: previous declaration of 'Elf32_Ehdr' with type 'Elf32_Ehdr'
1969 | } Elf32_Ehdr;
| ^~~~~~~~~~
/usr/include/sys/exec_elf.h:129:3: error: conflicting types for 'Elf64_Ehdr'; have 'struct <anonymous>'
129 | } Elf64_Ehdr;
| ^~~~~~~~~~
/usr/include/sys/elfdefinitions.h:1988:3: note: previous declaration of 'Elf64_Ehdr' with type 'Elf64_Ehdr'
1988 | } Elf64_Ehdr;
| ^~~~~~~~~~
/usr/include/sys/exec_elf.h:424:3: error: conflicting types for 'Elf32_Phdr'; have 'struct <anonymous>'
424 | } Elf32_Phdr;
| ^~~~~~~~~~
/usr/include/sys/elfdefinitions.h:2172:3: note: previous declaration of 'Elf32_Phdr' with type 'Elf32_Phdr'
2172 | } Elf32_Phdr;
| ^~~~~~~~~~
(this goes on for many other symbols, I'll attach the log)
The header file inclusion chain in libpkg/pkg_elf.c is:
#include <gelf.h>
...
#if defined(HAVE_LINK_H) && !defined(__DragonFly__) && defined(HAVE_LIBELF)
#include <link.h>
#endif
gelf.h
-> libelf.h
-> /usr/include/elfdefinitions.h
-> /usr/include/sys/elfdefinitions.h
link.h
-> link_elf.h
-> sys/exec_elf.h
Are these headers expected to conflict, and the bug is in the program
including both? In this case, which header should it include?
Or is this a bug in our headers?
Cheers,
Thomas
Attachment:
log.gz
Description: Binary data