Ensure this is available, too
[nbd.git] / configure.ac
blob4b7600701f67a24c0fd0c35dbccb7c28eb2ba3cd
1 dnl Configure script for NBD system
2 dnl (c) 1998 Martin Mares <mj@ucw.cz>, (c) 2000 Pavel Machek <pavel@ucw.cz>,
3 dnl (c) 2003-2006 Wouter Verhelst <wouter@debian.org>
4 AC_INIT([nbd],
5   m4_esyscmd(support/genver.sh | tr -d '\n'),
6   [nbd@other.debian.org],,
7   [http://nbd.sourceforge.net/])
8 m4_define([serial_tests], [
9   m4_esyscmd([automake --version |
10               head -1 |
11               awk '{split ($NF,a,"."); if (a[1] == 1 && a[2] >= 12) { print "serial-tests" }}'
12   ])
14 AM_INIT_AUTOMAKE(foreign dist-xz serial_tests subdir-objects)
15 AM_MAINTAINER_MODE([enable])
16 AC_CONFIG_MACRO_DIR([support])
17 LT_INIT
19 AC_ARG_ENABLE(
20   lfs,
21   AC_HELP_STRING(--disable-lfs,Disable Large File Support (default on)),
22   [
23     if test "x$enableval" = "xyes" ; then
24       NBD_LFS=1
25     else
26       NBD_LFS=0
27     fi
28   ],
29   [NBD_LFS=1]
31 AC_MSG_CHECKING([whether Large File Support should be enabled])
32 if test $NBD_LFS -eq 1; then
33   AC_DEFINE(NBD_LFS,1, [Define to 1 if Large File Support should be enabled])
34   AC_MSG_RESULT([yes])
35 else
36   AC_DEFINE(NBD_LFS,0)
37   AC_MSG_RESULT([no])
40 AC_ARG_ENABLE(
41   syslog,
42   AC_HELP_STRING(--enable-syslog,Enable Syslog logging),
43   [
44     if test "x$enableval" = "xyes" ; then
45       ISSERVER=1
46     else
47       ISSERVER=0
48     fi
49   ],
50   [ISSERVER=0]
53 AC_MSG_CHECKING([whether syslog logging is requested])
54 if test $ISSERVER -eq 1; then
55   AC_DEFINE(ISSERVER,1, [Define to 1 if you want nbd-server to log through syslog])
56   AC_MSG_RESULT([yes])
57 else
58   AC_MSG_RESULT([no])
61 AC_ARG_ENABLE(
62   debug,
63   AC_HELP_STRING(--enable-debug,Build a debugging version of the server),
64   [
65     if test "x$enableval" = "xyes"; then
66       DODBG=1
67     else
68       DODBG=0
69     fi
70   ],
71   [DODBG=0]
74 AC_MSG_CHECKING([whether a debugging version is requested])
75 if test $DODBG -eq 1; then
76   AC_MSG_RESULT([yes])
77   if test $ISSERVER -eq 1; then
78     AC_MSG_ERROR([You requested both syslog logging and a debugging version of the server. Bad idea!])
79   fi
80   AC_DEFINE(DODBG,1,[Define if you want a debugging version of nbd-server (lots of copious output)])
81   AC_DEFINE(NOFORK,1,[Define if you do not want the nbd-server to fork()])
82 else
83   AC_MSG_RESULT([no])
86 AC_ARG_ENABLE(
87   sdp,
88   AC_HELP_STRING(--enable-sdp,Build a version of nbd-server with support for the Socket Direct Protocol (SDP). Requires you to build and install a kernel with the InfiniBand patches (default disabled)),
89   [
90     if test "x$enableval" = "xyes"; then
91       AC_DEFINE(WITH_SDP, 1, [Define to 1 if you have and want support for the Socket Direct Protocol])
92     fi
93   ]
96 AC_ARG_ENABLE(
97   [gznbd],
98   [AS_HELP_STRING([--enable-gznbd],[Build gznbd too (nbd server with on-the-fly decompression of images. NOTE: no support for newstyle protocol.)])],
99   [
100     AS_IF(
101       [test "x$enableval" = "xyes"],
102       [ENABLE_GZNBD=yes],
103       [ENABLE_GZNBD=no]
104     )
105   ],
106   [ENABLE_GZNBD=no]
109 AC_PROG_CC_C99
110 AC_PROG_CPP
111 AC_PROG_INSTALL
112 PKG_PROG_PKG_CONFIG
113 AC_CANONICAL_HOST
114 AC_C_BIGENDIAN
115 AC_C_INLINE
116 AC_C_CONST
117 AC_CHECK_SIZEOF(unsigned short int)
118 AC_CHECK_SIZEOF(unsigned int)
119 AC_CHECK_SIZEOF(unsigned long int)
120 AC_CHECK_SIZEOF(unsigned long long int)
121 AC_STRUCT_DIRENT_D_TYPE
122 AC_CHECK_FUNCS([llseek alarm gethostbyname inet_ntoa memset socket strerror strstr mkstemp fdatasync])
123 HAVE_FL_PH=no
125 AC_CHECK_FUNC(fallocate,
126   [
127     AC_CHECK_HEADERS([linux/falloc.h])
128     if test "x$ac_cv_header_linux_falloc_h" = "xyes"
129     then
130       AC_CHECK_DECL(FALLOC_FL_PUNCH_HOLE, [HAVE_FL_PH=yes], [HAVE_FL_PH=no], [[#include <linux/falloc.h>]])
131     fi
132   ]
135 AC_MSG_CHECKING([for FALLOC_FL_PUNCH_HOLE support])
136 if test "x$HAVE_FL_PH" = "xyes"
137 then
138         AC_DEFINE(HAVE_FALLOC_PH, 1, [Define to 1 if you have FALLOC_FL_PUNCH_HOLE])
139         AC_MSG_RESULT([yes])
140 else
141         AC_DEFINE(HAVE_FALLOC_PH, 0, [Define to 1 if you have FALLOC_FL_PUNCH_HOLE])
142         AC_MSG_RESULT([no])
145 AC_CHECK_FUNC(splice, [HAVE_SPLICE=yes], [HAVE_SPLICE=no])
146 if test "$HAVE_SPLICE" = "yes"
147 then
148         HAVE_SETPIPE_SZ=no
149         AC_CHECK_DECL(F_SETPIPE_SZ, [HAVE_SETPIPE_SZ=yes],
150                 [
151                         unset ac_cv_have_decl_F_SETPIPE_SZ
152                         AC_CHECK_HEADERS([linux/fcntl.h])
153                         if test "$ac_cv_header_linux_fcntl_h" = "yes"
154                         then
155                                 AC_CHECK_DECL(F_SETPIPE_SZ, [HAVE_SETPIPE_SZ=define], [HAVE_SETPIPE_SZ=no], [[#include <linux/fcntl.h>]])
156                         fi
157                 ],
158                 [[
159                         #define _GNU_SOURCE
160                         #include <fcntl.h>
161                 ]]
162         )
163         AC_MSG_CHECKING([for F_SETPIPE_SZ support])
164         case $HAVE_SETPIPE_SZ in
165                 yes)
166                         AC_DEFINE(HAVE_SPLICE, 1, [Define to 1 if we have splice support])
167                         AC_MSG_RESULT([yes])
168                 ;;
169                 define)
170                         AC_DEFINE(HAVE_SPLICE, 1, [Define to 1 if we have splice support])
171                         AC_DEFINE(F_SETPIPE_SZ, 1031, [Define to 1031 if we have kernel support but no userspace support])
172                         AC_MSG_RESULT([yes])
173                 ;;
174                 no)
175                         AC_MSG_RESULT([missing, disabling splice support])
176                 ;;
177         esac
180 m4_ifndef([PKG_CHECK_MODULES], [m4_fatal([Missing pkg-config M4 macros. Please ensure that pkg-config is installed.])])
182 dnl AC_MSG_CHECKING([where to puth systemd unit files])
183 dnl AC_ARG_WITH(
184 dnl   systemd,
185 dnl   AS_HELP_STRING([--with-systemd=loc|pkgconfig],[Install systemd files in loc; if passing pkgconfig, use pkg-config to detect the correct location and install there.])
186 dnl   [
187 dnl     if test "x$enableval" = "xyes"; then
188 dnl       ENABLE_SYSTEMD=yes
189 dnl     else
190 dnl       ENABLE_SYSTEMD=no
191 dnl     fi
192 dnl   ],[]
193 dnl )
194 dnl 
195 dnl if test "x$ENABLE_SYSTEMD" != "xno"; then
196 dnl     PKG_CHECK_VAR([SYSTEMDUNIT],[systemd],systemdsystemunitdir],[AC_SUBST([SYSTEMDLOC], [$SYSTEMDUNIT])])
197 dnl fi
198 dnl AM_CONDITIONAL(SYSTEMD, [test ! -z "$SYSTEMDUNIT"])
199 dnl if test ! -z $SYSTEMDUNIT; then
200 dnl     AC_MSG_RESULT([$SYSTEMDUNIT])
201 dnl else
202 dnl     case $ENABLE_SYSTEMD in
203 dnl             no)
204 dnl                     AC_MSG_RESULT([disabled])
205 dnl             ;;
206 dnl             yes)
207 dnl                     AC_MSG_ERROR([systemd not found])
208 dnl             ;;
209 dnl             *)
210 dnl                     AC_MSG_RESULT([not found])
211 dnl             ;;
212 dnl     esac
213 dnl fi
215 AC_ARG_WITH([gnutls],
216         [AS_HELP_STRING([--without-gnutls],
217                 [do not use gnutls])],
218         [],
219         [with_gnutls=check]
221 if test "x$with_gnutls" != "xno"; then
222         PKG_CHECK_MODULES(GnuTLS, [gnutls >= 2.12.0],
223                 [HAVE_GNUTLS=1
224                 AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if you have a GnuTLS version of 2.12 or above])],
225                 [if test "x$with_gnutls" = "xyes"; then
226                         AC_MSG_ERROR([--with-gnutls given but cannot find gnutls])
227                 else
228                         HAVE_GNUTLS=0
229                         AC_DEFINE(HAVE_GNUTLS, 0)
230                 fi]
231         )
232 else
233         HAVE_GNUTLS=0
234         AC_DEFINE(HAVE_GNUTLS, 0)
236 AM_CONDITIONAL([GNUTLS], [test "x$HAVE_GNUTLS" = "x1"])
238 AC_CHECK_HEADERS([winioctl.h], [], [],
239 [#include <io.h>
240 #include <windef.h>
241 #include <winbase.h>
243 HAVE_FSCTL_SET_ZERO_DATA=no
244 if test "x$ac_cv_header_winioctl_h" = "xyes"
245 then
246         AC_CHECK_DECL(FSCTL_SET_ZERO_DATA, [HAVE_FSCTL_SET_ZERO_DATA=yes], [HAVE_FSCTL_SET_ZERO_DATA=no],
247         [#include <windef.h>
248         #include <winbase.h>
249         #include <winioctl.h>
250         ])
252 if test "x$HAVE_FSCTL_SET_ZERO_DATA" = "xyes"
253 then
254         AC_DEFINE(HAVE_FSCTL_SET_ZERO_DATA, 1, [Define to 1 if you have FSCTL_SET_ZERO_DATA])
255 else
256         AC_DEFINE(HAVE_FSCTL_SET_ZERO_DATA, 0, [Define to 1 if you have FSCTL_SET_ZERO_DATA])
259 AC_CHECK_FUNC([sync_file_range],
260         [AC_DEFINE([HAVE_SYNC_FILE_RANGE], [sync_file_range(2) is not supported], [sync_file_range(2) is supported])],
261         [])
262 AC_FUNC_FORK
263 AC_FUNC_SETVBUF_REVERSED
264 AC_MSG_CHECKING(whether client should be built)
265 AS_CASE([$host_os],
266   [linux*], [NBD_CLIENT_NAME="nbd-client"; AC_MSG_RESULT(yes)],
267   [NBD_CLIENT_NAME=""; AC_MSG_RESULT(no)]
269 AC_MSG_CHECKING(whether to expect tlshuge test to fail)
270 AS_CASE([$host_os],
271   [darwin*], [RUN_XFAIL=tlshuge; AC_MSG_RESULT(yes)],
272   [RUN_XFAIL=""; AC_MSG_RESULT(no)]
274 AC_SUBST([RUN_XFAIL])
275 AM_CONDITIONAL(CLIENT, [test ! -z "$NBD_CLIENT_NAME"])
276 AC_SEARCH_LIBS(bind, socket,, AC_MSG_ERROR([Could not find an implementation of the bind() system call]))
277 AC_SEARCH_LIBS(inet_ntoa, nsl,, AC_MSG_ERROR([Could not find an implementation of the inet_ntoa() system call]))
278 AC_SEARCH_LIBS(daemon, resolv,, AC_MSG_ERROR([Could not find an implementation of the daemon() system call]))
279 AC_CHECK_HEADERS([sys/mount.h],,,
280 [[#include <sys/param.h>
282 AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h sys/ioctl.h sys/socket.h syslog.h linux/types.h sys/dirent.h sys/uio.h])
283 PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.26.0 gthread-2.0 >= 2.26.0], [HAVE_GLIB=yes], AC_MSG_ERROR([Missing glib]))
285 my_save_cflags="$CFLAGS"
286 CFLAGS="-Wdeprecated-declarations -Werror $GLIB_CFLAGS"
287 AC_MSG_CHECKING([if we are using an old glib 2.0 library])
288 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
289         [[#include <glib.h>]],
290         [[g_thread_init(NULL);]])],
291         [
292                 AC_MSG_RESULT(yes)
293                 AC_DEFINE(HAVE_OLD_GLIB, 1, [Define to 1 if you have an old glib library])
294         ],
295         [
296                 AC_MSG_RESULT(no)
297                 AC_DEFINE(HAVE_OLD_GLIB, 0, [Define to 1 if you have an old glib library])
298         ]
300 CFLAGS="$my_save_cflags"
302 AC_MSG_CHECKING([whether _BSD_SOURCE needs to be defined for DT_* macros])
303 AC_PREPROC_IFELSE(
304         [AC_LANG_PROGRAM([[#include <dirent.h>]],
305                          [[#ifndef DT_UNKNOWN
306 #error nope
307 #endif]])],
308         [AC_MSG_RESULT([no]); NEED_BSD_SOURCE=0],
309         [AC_MSG_RESULT([yes]); NEED_BSD_SOURCE=1])
310 AC_DEFINE([NEED_BSD_SOURCE], $NEED_BSD_SOURCE, [Define to 1 if _BSD_SOURCE needs to be defined before certain inclusions])
312 AC_ARG_WITH([libnl],
313         [AS_HELP_STRING([--without-libnl],
314                 [do not use libnl])],
315         [],
316         [with_libnl=check]
318 if test "x$with_libnl" != "xno"; then
319         PKG_CHECK_MODULES(LIBNL3, libnl-genl-3.0 >= 3.1,
320                 [HAVE_NETLINK=1
321                 AC_DEFINE(HAVE_NETLINK, 1, [Define to 1 if we have netlink support])
322                 CFLAGS+=" $LIBNL3_CFLAGS"
323                 LIBS+=" $LIBNL3_LIBS"],
324                 [if test "x$with_libnl" = "xyes"; then
325                         AC_MSG_ERROR([--with-libnl given but cannot find libnl])
326                 else
327                         HAVE_NETLINK=0
328                         AC_DEFINE(HAVE_NETLINK, 0)
329                 fi]
330         )
331 else
332         HAVE_NETLINK=0
333         AC_DEFINE(HAVE_NETLINK, 0, [Define to 1 if we have netlink support])
336 AC_HEADER_SYS_WAIT
337 AC_TYPE_OFF_T
338 AC_TYPE_PID_T
339 AM_CPPFLAGS=$AM_CPPFLAGS" -DSYSCONFDIR='\"$sysconfdir\"'"
340 AC_SUBST(AM_CPPFLAGS)
341 AM_CONDITIONAL(GZNBD, [test "x$ENABLE_GZNBD" = "xyes"])
342 AC_CONFIG_HEADERS([config.h])
343 AC_CONFIG_LINKS([tests/run/buffer.c:buffer.c
344                  tests/run/crypto-gnutls.c:crypto-gnutls.c
345                  tests/run/cliserv.c:cliserv.c])
346 AC_CONFIG_FILES([Makefile
347                  doc/Doxyfile
348                  doc/Makefile
349                  man/Makefile
350                  gznbd/Makefile
351                  tests/Makefile
352                  tests/code/Makefile
353                  tests/run/Makefile
354                  man/nbd-client.8.sh
355                  man/nbd-server.5.sh
356                  man/nbd-server.1.sh
357                  man/nbd-trdump.1.sh
358                  man/nbdtab.5.sh
359                  systemd/Makefile
360                  systemd/nbd@.service.sh
361                 ])
362 AC_OUTPUT