AS_VAR_POPDEF([ac_Search])dnl
])
+dnl checks that the system provides a given struct type
+dnl defines HAVE_FOO if the type struct FOO exists.
+AC_DEFUN([SQUID_CHECK_STRUCT],[
+ squid_chk_struct="HAVE_$1"
+ AC_MSG_CHECKING([for struct $1])
+ SQUID_TOUPPER_VAR_CONTENTS([squid_chk_struct])
+ AC_COMPILE_IFELSE([
+ AC_LANG_SOURCE([[$2]],[[struct $1 a;]])
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED([$squid_chk_struct],1,[Define to 1 if struct $1 is provided by the system])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+ unset squid_chk_struct
+])
+
dnl Check for Cyrus SASL
AC_DEFUN([SQUID_CHECK_SASL],[
squid_cv_check_sasl="auto"
// WinSock2.h defines these for Windows
#if HAVE_WINSOCK2_H
#include <winsock2.h>
-#define CMSG_H_ // prevent re-definition
#endif
-#ifndef CMSG_H_
-#define CMSG_H_
+// sockaddr_un might be in sys/un.h if not pulled in already
+#if HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
-/* mostly windows-specific */
-#ifndef CMSG_SPACE
+#if !HAVE_CMSGHDR
struct cmsghdr {
- unsigned int cmsg_len;
- int cmsg_level;
- int cmsg_type;
+ unsigned int cmsg_len;
+ int cmsg_level;
+ int cmsg_type;
unsigned char cmsg_data[16]; /* dummy */
/* followed by UCHAR cmsg_data[]; */
-} ;
+};
+#endif
/* lifted off https://metacpan.org/source/SAMPO/Socket-PassAccessRights-0.03/passfd.c */
#ifndef CMSG_DATA
& ~(sizeof (size_t) - 1))
#endif
+#ifndef CMSG_SPACE
# define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+ CMSG_ALIGN (sizeof (struct cmsghdr)))
#undef HAVE_CONSTANT_CMSG_SPACE
#define HAVE_CONSTANT_CMSG_SPACE 1
+#endif
#ifndef CMSG_LEN
# define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
#endif
+#if !HAVE_IOVEC
+struct iovec {
+ void *iov_base;
+ size_t iov_len;
+};
+#endif
+
+#if !HAVE_MSGHDR
struct msghdr {
void *msg_name; /* Address to send to/receive from. */
socklen_t msg_namelen; /* Length of address data. */
int msg_flags; /* Flags on received message. */
};
+#endif
-struct iovec {
- void *iov_base;
- size_t iov_len;
-};
+#if !HAVE_SOCKADDR_UN
struct sockaddr_un {
char sun_family;
char sun_path[256]; /* pathname */
};
+#endif
+
+#ifndef SUN_LEN
# define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \
+ strlen ((ptr)->sun_path))
-
-#endif /* CMSG_SPACE */
+#endif
#ifndef SCM_RIGHTS
#define SCM_RIGHTS 1
#define AF_LOCAL 1
#endif
-#endif /* CMSG_H_ */
-
// CMSG_SPACE is not constant on some systems (in particular Max OS X),
// provide a replacement that can be used at build time in that case
// NP: this must go below our replacement definitions.
AC_MSG_RESULT(no)
])
+SQUID_CHECK_STRUCT([cmsghdr],[
+ #if HAVE_SYS_SOCKET_H
+ #include <sys/socket.h>
+ #endif
+ #if HAVE_WINSOCK2_H
+ #include <winsock2.h>
+ #endif
+])
+
+SQUID_CHECK_STRUCT([iovec],[
+ #if HAVE_SYS_SOCKET_H
+ #include <sys/socket.h>
+ #endif
+ #if HAVE_WINSOCK2_H
+ #include <winsock2.h>
+ #endif
+])
+
+SQUID_CHECK_STRUCT([msghdr],[
+ #if HAVE_SYS_SOCKET_H
+ #include <sys/socket.h>
+ #endif
+ #if HAVE_WINSOCK2_H
+ #include <winsock2.h>
+ #endif
+])
+
+SQUID_CHECK_STRUCT([sockaddr_un],[
+ #if HAVE_SYS_UN_H
+ #include <sys/un.h>
+ #endif
+ #if HAVE_SYS_SOCKET_H
+ #include <sys/socket.h>
+ #endif
+ #if HAVE_WINSOCK2_H
+ #include <winsock2.h>
+ #endif
+])
+
SQUID_CHECK_FUNC_STRNSTR
SQUID_CHECK_FUNC_VACOPY
SQUID_CHECK_FUNC___VACOPY