Fixes for sysctl checks in strict builds of hwloc.
authorPavan Balaji <balaji@mcs.anl.gov>
Sat, 4 May 2013 16:34:21 +0000 (11:34 -0500)
committerPavan Balaji <balaji@mcs.anl.gov>
Sun, 5 May 2013 15:50:32 +0000 (10:50 -0500)
Do a full link test instead of just using AC_CHECK_FUNCS, which just
checks to see if the symbol exists or not.  For example, the prototype
of sysctl uses u_int, which on some platforms (such as FreeBSD) is
only defined under __BSD_VISIBLE, __USE_BSD or other similar
definitions.  So while the symbols "sysctl" and "sysctlbyname" might
still be available in libc (which autoconf checks for), they might not
be actually usable.

No reviewer.

src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4

index 8a6445f..2ffb4ad 100644 (file)
@@ -439,7 +439,20 @@ EOF])
       #include <sys/param.h>
       #endif
     ])
-    AC_CHECK_FUNCS([sysctl sysctlbyname])
+
+    # Do a full link test instead of just using AC_CHECK_FUNCS, which
+    # just checks to see if the symbol exists or not.  For example,
+    # the prototype of sysctl uses u_int, which on some platforms
+    # (such as FreeBSD) is only defined under __BSD_VISIBLE, __USE_BSD
+    # or other similar definitions.  So while the symbols "sysctl" and
+    # "sysctlbyname" might still be available in libc (which autoconf
+    # checks for), they might not be actually usable.
+    AC_TRY_LINK([#include <sys/sysctl.h>],
+                [return sysctl(NULL,0,NULL,NULL,NULL,0);],
+                AC_DEFINE([HAVE_SYSCTL],[1],[Define to '1' if sysctl is present and usable]))
+    AC_TRY_LINK([#include <sys/sysctl.h>],
+                [return sysctlbyname(NULL,NULL,NULL,NULL,0);],
+                AC_DEFINE([HAVE_SYSCTLBYNAME],[1],[Define to '1' if sysctlbyname is present and usable]))
 
     case ${target} in
       *-*-mingw*|*-*-cygwin*)