diff --git a/configure.ac b/configure.ac index 4113bc78..b37129a5 100644 --- a/configure.ac +++ b/configure.ac @@ -46,15 +46,19 @@ AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([config.h]) - ### Checks for programs AC_PROG_AWK AC_PROG_INSTALL AC_PROG_RANLIB -AC_PROG_CC + +AC_PROG_CC_STDC AM_PROG_CC_C_O # Private automake macro, tsk, tsk, tsk... _AM_DEPENDENCIES(CC) +AC_DEFINE([_XOPEN_SOURCE], [600], + [Request POSIX-1.2001 with XSI Extension]) +# Note: this is after AC_PROG_CC_STDC, because Solaris cc fails with +# _XOPEN_SOURCE unless switched to C99, which breaks AC_PROG_CC_STDC. AC_ARG_VAR(NROFF, [nroff command]) AC_CHECK_PROG(NROFF, groff, [GROFF_NO_SGR= groff -Tascii -U], nroff) @@ -168,6 +172,7 @@ main(int argc, char *argv[]) ### Checks for library functions AC_CHECK_FUNCS(getaddrinfo) +MY_WORKING_IN6_IS_ADDR_V4MAPPED MY_FUNC_MAKECONTEXT diff --git a/m4/my_working_in6_is_addr_v4mapped.m4 b/m4/my_working_in6_is_addr_v4mapped.m4 new file mode 100644 index 00000000..2c476826 --- /dev/null +++ b/m4/my_working_in6_is_addr_v4mapped.m4 @@ -0,0 +1,20 @@ +AC_DEFUN([MY_WORKING_IN6_IS_ADDR_V4MAPPED], [ + AC_CACHE_CHECK([whether IN6_IS_ADDR_V4MAPPED works], + my_cv_func_in6_is_addr_v4mapped, [ + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([[#include +int foo(struct sockaddr_in6 *sap6) +{ + return IN6_IS_ADDR_V4MAPPED(&sap6->sin6_addr); +}]])], + [my_cv_func_in6_is_addr_v4mapped=yes], + [my_cv_func_in6_is_addr_v4mapped=no])]) + AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_addr.s6_addr], + [my_member_sockaddr_in6_sin6_addr_s6_addr=yes], + [my_member_sockaddr_in6_sin6_addr_s6_addr=no], + [[#include ]]) + if test "x$my_cv_func_in6_is_addr_v4mapped$my_member_sockaddr_in6_sin6_addr_s6_addr" = xyesyes; then + AC_DEFINE([HAVE_WORKING_IN6_IS_ADDR_V4MAPPED], [1], + [Define if you have a working IN6_IS_ADDR_V4MAPPED()]) + fi +]) diff --git a/src/client/configure.ac b/src/client/configure.ac index 00aac39e..76268544 100644 --- a/src/client/configure.ac +++ b/src/client/configure.ac @@ -44,6 +44,9 @@ AC_INIT([Wolfpack Empire Client], AC_CONFIG_SRCDIR([empire.6]) AC_CONFIG_HEADERS([config.h]) +AC_DEFINE([_XOPEN_SOURCE], [600], + [Request POSIX-1.2001 with XSI Extension]) + ### Checks for programs. AC_PROG_CC diff --git a/src/lib/common/rdsched.c b/src/lib/common/rdsched.c index a98ec0a4..05b518c2 100644 --- a/src/lib/common/rdsched.c +++ b/src/lib/common/rdsched.c @@ -30,9 +30,6 @@ * Markus Armbruster, 2007-2011 */ -/* Required for strptime() */ -#define _XOPEN_SOURCE 500 - #include #include diff --git a/src/lib/empthread/pthread.c b/src/lib/empthread/pthread.c index 2d8b5092..3e02132d 100644 --- a/src/lib/empthread/pthread.c +++ b/src/lib/empthread/pthread.c @@ -33,9 +33,6 @@ * Ron Koenderink, 2007-2009 */ -/* Required for PTHREAD_STACK_MIN on some systems, e.g. Solaris: */ -#define _XOPEN_SOURCE 500 - #include #include diff --git a/src/lib/global/constants.c b/src/lib/global/constants.c index 252a8a96..1e09e586 100644 --- a/src/lib/global/constants.c +++ b/src/lib/global/constants.c @@ -29,7 +29,7 @@ * Known contributors to this file: * Ken Stevens, 1995 * Steve McClure, 1996 - * Markus Armbruster, 2004-2014 + * Markus Armbruster, 2004-2020 */ #include @@ -41,7 +41,11 @@ char *privname = "Deity forgot to edit econfig"; /* E-mail of the deity */ char *privlog = "careless@invalid"; /* Divine hosts and networks */ -char *privip = "127.0.0.1 ::1"; +char *privip = "127.0.0.1 ::1" +#ifndef HAVE_WORKING_IN6_IS_ADDR_V4MAPPED + " ::ffff:127.0.0.1" /* See sockaddr_ntop() */ +#endif + ; char *post_crash_dump_hook = ""; diff --git a/src/lib/player/accept.c b/src/lib/player/accept.c index a631f79b..0ec2a93f 100644 --- a/src/lib/player/accept.c +++ b/src/lib/player/accept.c @@ -28,7 +28,7 @@ * * Known contributors to this file: * Dave Pare, 1994 - * Markus Armbruster, 2005-2014 + * Markus Armbruster, 2005-2020 */ #include @@ -228,10 +228,12 @@ sockaddr_ntop(struct sockaddr *sap, char *buf, size_t bufsz) else { sap6 = (struct sockaddr_in6 *)sap; addr = &sap6->sin6_addr; +#ifdef HAVE_WORKING_IN6_IS_ADDR_V4MAPPED if (IN6_IS_ADDR_V4MAPPED(&sap6->sin6_addr)) { af = AF_INET; addr = sap6->sin6_addr.s6_addr + 12; } +#endif } return inet_ntop(af, addr, buf, bufsz); #else