Initial revision
[silc.git] / apps / silcer / macros / gperf-check.m4
diff --git a/apps/silcer/macros/gperf-check.m4 b/apps/silcer/macros/gperf-check.m4
new file mode 100644 (file)
index 0000000..1b73d3f
--- /dev/null
@@ -0,0 +1,79 @@
+dnl
+dnl AC_PROG_GPERF (MINIMUM-VERSION)
+dnl
+dnl Check for availability of gperf.
+dnl Abort if not found or if current version is not up to par.
+dnl
+
+AC_DEFUN([AC_PROG_GPERF],[
+       AC_PATH_PROG(GPERF, gperf, no)
+       if test "$GPERF" = no; then
+               AC_MSG_ERROR(Could not find gperf)
+       fi
+       min_gperf_version=ifelse([$1], ,2.7,$1)
+       AC_MSG_CHECKING(for gperf - version >= $min_gperf_version)
+       gperf_major_version=`$GPERF --version | \
+               sed 's/GNU gperf \([[0-9]]*\).\([[0-9]]*\)/\1/'`
+       gperf_minor_version=`$GPERF --version | \
+               sed 's/GNU gperf \([[0-9]]*\).\([[0-9]]*\)/\2/'`
+       no_gperf=""
+dnl
+dnl Now check if the installed gperf is sufficiently new.
+dnl
+       AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static char*
+my_strdup (char *str)
+{
+  char *new_str;
+  
+  if (str)
+    {
+      new_str = malloc ((strlen (str) + 1) * sizeof(char));
+      strcpy (new_str, str);
+    }
+  else
+    new_str = NULL;
+  
+  return new_str;
+}
+
+int 
+main ()
+{
+  char  *tmp_version;
+  
+  int    major;
+  int    minor;
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = my_strdup("$min_gperf_version");
+  if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) {
+    printf ("%s, bad version string\n", "$min_gperf_version");
+    exit (1);
+  }
+
+  if (($gperf_major_version > major) ||
+      (($gperf_major_version == major) && ($gperf_minor_version >= minor))) {
+    return 0;
+  } else {
+    printf ("\n");
+    printf ("*** An old version of gperf ($gperf_major_version.$gperf_minor_version) was found.\n");
+    printf ("*** You need a version of gperf newer than %d.%d.%d.  The latest version of\n",
+              major, minor);
+    printf ("*** gperf is always available from ftp://ftp.gnu.org.\n");
+    printf ("***\n");
+    return 1;
+  }
+}
+],,no_gperf=yes,[/bin/true])
+       if test "x$no_gperf" = x ; then
+               AC_MSG_RESULT(yes)
+       else
+               AC_MSG_RESULT(no)
+       fi
+
+])