소스 검색

Detect sysctl() symbols in configure

Symbols could be enum values, not necessary macros
Evgeny Grin (Karlson2k) 2 년 전
부모
커밋
97dec411eb
2개의 변경된 파일53개의 추가작업 그리고 7개의 파일을 삭제
  1. 43 3
      configure.ac
  2. 10 4
      src/microhttpd/test_client_put_stop.c

+ 43 - 3
configure.ac

@@ -2643,10 +2643,48 @@ MHD_CHECK_FUNC([[sysctl]], [[
 #ifdef HAVE_SYS_SYSCTL_H
 #include <sys/sysctl.h>
 #endif
-#ifdef HAVE_STDDEF_H
+#if defined(HAVE_STDDEF_H)
 #include <stddef.h>
+#elif defined(HAVE_STDLIB_H)
+#include <stdlib.h>
 #endif
-  ]], [[int mib[2] = {CTL_KERN, KERN_MAXPROC}; i][f (sysctl(mib, 2, NULL, NULL, NULL, 0)) return 1;]]
+  ]], [[
+      int mib[2] = {0, 0}; /* Avoid any platform-specific values */
+      i][f (sysctl(mib, 2, NULL, NULL, NULL, 0)) return 1;
+  ]],
+  [
+    AC_CHECK_DECLS([CTL_NET,PF_INET,IPPROTO_ICMP,ICMPCTL_ICMPLIM],[],[],
+      [[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif /* HAVE_SYS_TYPES_H */
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif /* HAVE_SYS_SYSCTL_H */
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif /* HAVE_SYS_SYSCTL_H */
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif /* HAVE_SYS_SOCKET_H */
+#ifdef HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif /* HAVE_NETINET_IN_SYSTM_H */
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif /* HAVE_NETINET_IN_H */
+#ifdef HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif /* HAVE_NETINET_IP_H */
+#ifdef HAVE_NETINET_IP_ICMP_H
+#include <netinet/ip_icmp.h>
+#endif /* HAVE_NETINET_IP_ICMP_H */
+#ifdef HAVE_NETINET_ICMP_VAR_H
+#include <netinet/icmp_var.h>
+#endif /* HAVE_NETINET_ICMP_VAR_H */
+      ]]
+    )
+  ]
 )
 
 MHD_CHECK_FUNC([[sysctlbyname]], [[
@@ -2656,8 +2694,10 @@ MHD_CHECK_FUNC([[sysctlbyname]], [[
 #ifdef HAVE_SYS_SYSCTL_H
 #include <sys/sysctl.h>
 #endif
-#ifdef HAVE_STDDEF_H
+#if defined(HAVE_STDDEF_H)
 #include <stddef.h>
+#elif defined(HAVE_STDLIB_H)
+#include <stdlib.h>
 #endif
   ]], [[sysctlbyname("test", NULL, NULL, NULL, 0);]]
 )

+ 10 - 4
src/microhttpd/test_client_put_stop.c

@@ -305,8 +305,12 @@ test_global_init (void)
       }
     }
 #endif
-#if defined(HAVE_SYSCTL) && defined(CTL_NET) && defined(PF_INET) && \
-    defined(IPPROTO_ICMP) && defined(ICMPCTL_ICMPLIM)
+#if defined(HAVE_SYSCTL) && defined(HAVE_DECL_CTL_NET) && \
+    defined(HAVE_DECL_PF_INET) && defined(HAVE_DECL_IPPROTO_ICMP) && \
+    defined(HAVE_DECL_ICMPCTL_ICMPLIM)
+    /* Macros may have zero values */
+#if HAVE_DECL_CTL_NET && HAVE_DECL_PF_INET && HAVE_DECL_IPPROTO_ICMP && \
+    HAVE_DECL_ICMPCTL_ICMPLIM
     if (1)
     {
       int mib[4];
@@ -366,8 +370,10 @@ test_global_init (void)
 #endif /* _MHD_HEAVY_TESTS */
       }
     }
-#endif /* HAVE_SYSCTL && CTL_NET && PF_INET &&
-          IPPROTO_ICMP && ICMPCTL_ICMPLIM */
+#endif /* HAVE_DECL_CTL_NET && HAVE_DECL_PF_INET && HAVE_DECL_IPPROTO_ICMP && \
+          HAVE_DECL_ICMPCTL_ICMPLIM */
+#endif /* HAVE_SYSCTL && HAVE_DECL_CTL_NET && HAVE_DECL_PF_INET &&
+          HAVE_DECL_IPPROTO_ICMP && HAVE_DECL_ICMPCTL_ICMPLIM */
   }
   if (MHD_YES != MHD_is_feature_supported (MHD_FEATURE_AUTOSUPPRESS_SIGPIPE))
   {