Discussion:
make failure with NO_IPV6 and >=glibc-2.2
(too old to reply)
Eray Aslan
2012-01-05 15:31:12 UTC
Permalink
Trying to build postfix with:
$ make 'CCARGS= -DNO_IPV6 -DHAS_CDB -I/usr/include/cdb' 'AUXLIBS=-Wl,-O1
-Wl,--as-needed -lcdb' makefiles && make

results in:
[...]
gcc -Wmissing-prototypes -Wformat -DNO_IPV6 -DHAS_CDB -I/usr/include/cdb
-DHAS_PCRE -DSNAPSHOT -g -O -I. -DLINUX3 -c cidr_match.c
In file included from cidr_match.c:53:0:
/usr/include/arpa/inet.h:65:22: error: conflicting types for ‘inet_ntop’
./sys_defs.h:1345:20: note: previous declaration of ‘inet_ntop’ was here
make: *** [cidr_match.o] Error 1
make: *** [update] Error 1

man 3 inet_ntop says:
[...]
CONFORMING TO
POSIX.1-2001. Note that RFC 2553 defines a prototype where the
last argument size is of type size_t. Many systems follow RFC
2553.
Glibc 2.0 and 2.1 have size_t, but 2.2 and later have socklen_t.

The patch below works for me with glibc-2.14. Glibc-2.2 was released in
2000 but I do not know if you want to drop support for <glibc-2.2.

--- a/src/util/sys_compat.c
+++ b/src/util/sys_compat.c
@@ -293,7 +293,7 @@ int closefrom(int lowfd)

/* inet_ntop - convert binary address to printable address */

-const char *inet_ntop(int af, const void *src, char *dst, size_t size)
+const char *inet_ntop(int af, const void *src, char *dst, socklen_t size)
{
const unsigned char *addr;
char buffer[sizeof("255.255.255.255")];
--- a/src/util/sys_defs.h
+++ b/src/util/sys_defs.h
@@ -748,7 +748,7 @@ extern int initgroups(const char *, int);
#include <sys/types.h>
#define UINT32_TYPE unsigned int
#define UINT16_TYPE unsigned short
-#include <features.h>
+#include <sys/socket.h>
#define USE_PATHS_H
#define HAS_FLOCK_LOCK
#define HAS_FCNTL_LOCK
@@ -1342,7 +1342,7 @@ extern int dup2_pass_on_exec(int oldd, int newd);
#define EMULATE_IPV4_ADDRINFO
#define MISSING_INET_PTON
#define MISSING_INET_NTOP
-extern const char *inet_ntop(int, const void *, char *, size_t);
+extern const char *inet_ntop(int, const void *, char *, socklen_t);
extern int inet_pton(int, const char *, void *);

#endif
--
Eray Aslan
Wietse Venema
2012-01-05 16:16:40 UTC
Permalink
Eray Aslan:
# .IP \fB-DNO_IPV6\fR
# Do not build with IPv6 support.
# By default, IPv6 support is compiled in on platforms that
# are known to have IPv6 support.
#
# Note: this directive is for debugging and testing only. It
# is not guaranteed to work on all platforms.

In other words, no support.

Wietse

Loading...