Browse Source

[1527] Disable perfdhcp if getifaddrs() is not available

This is a fairly complex function so instead of writing a replacement
for it, compile a short program that outputs a message saying that
perfdhcp is not supported on that operating system.
Stephen Morris 13 years ago
parent
commit
5a18f69235
3 changed files with 39 additions and 1 deletions
  1. 11 0
      configure.ac
  2. 1 1
      tests/tools/Makefile.am
  3. 27 0
      tests/tools/perfdhcp/perfdhcp.c

+ 11 - 0
configure.ac

@@ -861,10 +861,20 @@ EV_SET(NULL, 0, 0, 0, 0, 0, udata);],
 	])
 fi
 
+# perfdhcp: If the clock_gettime() function does not exist on the system,
+# use an alternative supplied in the code based on gettimeofday().
 CLOCK_GETTIME_LDFLAGS=
 AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_GETTIME_LDFLAGS=-lrt], [])
 AC_SUBST([CLOCK_GETTIME_LDFLAGS])
 
+# perfdhcp: if getifaddrs() does not exist, have the code output a message
+# that it can't be run on this version of the operating system.  For the
+# systems on which BIND 10 is built, this means Solaris 10. (Replacements
+# for this function are long and involved, and the function is reported present
+# on Solaris 11 and later, either in the libsocket or libnsl libraries.)
+AC_SEARCH_LIBS([getifaddrs], [socket nsl],
+               [AC_DEFINE([HAVE_GETIFADDRS], [1], [getifaddrs() present])])
+
 # /dev/poll issue: ASIO uses /dev/poll by default if it's available (generally
 # the case with Solaris).  Unfortunately its /dev/poll specific code would
 # trigger the gcc's "missing-field-initializers" warning, which would
@@ -1031,6 +1041,7 @@ AC_CONFIG_FILES([Makefile
                  tests/tools/Makefile
                  tests/tools/badpacket/Makefile
                  tests/tools/badpacket/tests/Makefile
+                 tests/tools/perfdhcp/Makefile
                ])
 AC_OUTPUT([doc/version.ent
            compatcheck/sqlite3-difftbl-check.py

+ 1 - 1
tests/tools/Makefile.am

@@ -2,4 +2,4 @@
 # portable (at least not exist on our Solaris buildbot).  For a short term
 # workaround we stop building it until it's resolved.
 #SUBDIRS = badpacket perfdhcp
-SUBDIRS = badpacket
+SUBDIRS = badpacket perfdhcp

+ 27 - 0
tests/tools/perfdhcp/perfdhcp.c

@@ -14,6 +14,31 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+#include <config.h>
+
+#ifndef HAVE_GETIFADDRS
+
+/*
+ * Solaris 10 does not have the getifaddrs() function available (although it
+ * is present on Solaris 11 and later).  For the present we will not implement
+ * a replacement (as we do with clock_gettime) as the implementation is
+ * relatively complex.  Just output a message saying that the utility is not
+ * supported on this operating system.
+ */
+
+#include <stdio.h>
+
+int
+main(const int argc, char* const argv[])
+{
+    fprintf(stderr, "perfdhcp is not supported on this version of the operating system\n");
+    return (1);
+}
+
+#else
+
+/* getifaddrs() present, so the code should compile */
+
 #ifdef __linux__
 #define _GNU_SOURCE
 #endif
@@ -3494,3 +3519,5 @@ main(const int argc, char * const argv[])
 	else
 		exit(3);
 }
+
+#endif  /* HAVE_GETIFADDRS */