Use standard autoconf macros instead of our own.
[tinc] / m4 / tuntap.m4
index 975567c..8c14a9b 100644 (file)
@@ -1,20 +1,44 @@
 dnl Check to find out whether the running kernel has support for TUN/TAP
 
-AC_DEFUN(tinc_TUNTAP,
+AC_DEFUN([tinc_TUNTAP],
 [
-AC_CACHE_CHECK([for linux/if_tun.h], tinc_cv_linux_if_tun_h,
-[ AC_TRY_COMPILE([#include <linux/if_tun.h>],
-  [int a = IFF_TAP],
-  if_tun_h="linux/if_tun.h",
-  if_tun_h="no")
-   if test $if_tun_h = no; then
-    AC_MSG_RESULT(none)
-  else
-    AC_DEFINE(HAVE_TUNTAP)
-    AC_DEFINE_UNQUOTED(LINUX_IF_TUN_H, "$if_tun_h")
-    AC_SUBST(LINUX_IF_TUN_H)
-    AC_MSG_RESULT($if_tun_h)
+  AC_ARG_WITH(kernel,
+    AS_HELP_STRING([--with-kernel=DIR], [give the directory with kernel sources (default: /usr/src/linux)]),
+    kerneldir="$withval",
+    kerneldir="/usr/src/linux"
+  )
+  
+  AC_CACHE_CHECK([for linux/if_tun.h], tinc_cv_linux_if_tun_h,
+  [ 
+    AC_COMPILE_IFELSE(
+      AC_LANG_PROGRAM([
+        #include "$kerneldir/include/linux/if_tun.h"
+       int a = IFF_TAP;
+      ]),
+      [if_tun_h="\"$kerneldir/include/linux/if_tun.h\""],
+      [AC_COMPILE_IFELSE(
+        AC_LANG_PROGRAM([
+         #include <linux/if_tun.h>
+          int a = IFF_TAP;
+       ]),
+        [if_tun_h="default"],
+        [if_tun_h="no"]
+      )]
+    )
+  
+    if test $if_tun_h = no; then
+      tinc_cv_linux_if_tun_h=none
+    else
+      tinc_cv_linux_if_tun_h="$if_tun_h"
+    fi
+  ])
+  
+  if test $tinc_cv_linux_if_tun_h != none; then
+    AC_DEFINE(HAVE_TUNTAP, 1, [Universal tun/tap driver present])
+    if test $tinc_cv_linux_if_tun_h != default; then
+     AC_DEFINE_UNQUOTED(LINUX_IF_TUN_H, $tinc_cv_linux_if_tun_h, [Location of if_tun.h])
+    fi
   fi
+  AC_SUBST(LINUX_IF_TUN_H)
   AC_SUBST(HAVE_TUNTAP)
 ])
-])