-AC_MSG_CHECKING(whether there is a local nbd.h)
-if test -f nbd.h; then
- AC_DEFINE(HAVE_LOCAL_NBD_H,1, [Define to 1 if you want to use a local nbd.h (not provided, must be supplied by you)])
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-AC_CHECK_HEADERS([linux/nbd.h],,,
-[[#define u32 unsigned int
-#define u64 unsigned long int
-]])
+AC_MSG_CHECKING(where to find a working nbd.h)
+dnl We need to check for NBD_CMD_DISC, but that's part of an enum, it is not
+dnl #define'd. Therefore, we check for something which is differently #define'd
+dnl in the old or new versions, even if we don't really care about that.
+dnl This might break at some time, but it should work for now, so...
+AC_TRY_CPP([#include "nbd.h"
+#ifdef LOCAL_END_REQUEST
+#error not here
+#endif
+],
+ [AC_DEFINE(NBD_H, "nbd.h", Set to where a (recent enough) nbd.h can be found)
+ NBD_H='"nbd.h"'],
+ AC_TRY_CPP([#include <linux/nbd.h>
+#ifdef LOCAL_END_REQUEST
+#error not here
+#endif
+],
+ [AC_DEFINE(NBD_H, <linux/nbd.h>) NBD_H='<linux/nbd.h>'],
+ AC_MSG_ERROR(Could not find a (recent enough) nbd.h)
+ )
+)
+AC_MSG_RESULT($NBD_H)