1# ublksrv 2# Copyright (C) Ming Lei 3# SPDX-License-Identifier: MIT or GPL-2.0-only 4 5AC_INIT([ublksrv], 6 m4_esyscmd(utils/genver.sh | tr -d '\n'), 7 [https://github.com/ming1/ubdsrv],, 8 [https://github.com/ming1/ubdsrv]) 9 10AC_CONFIG_MACRO_DIR([m4]) 11m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],[], 12 [m4_define([AC_USE_SYSTEM_EXTENSIONS],[])]) 13AC_USE_SYSTEM_EXTENSIONS 14AC_SYS_LARGEFILE 15 16AM_SILENT_RULES([yes]) 17 18dnl NB: Do not [quote] this parameter. 19AM_INIT_AUTOMAKE([foreign subdir-objects]) 20LT_INIT 21 22AC_CANONICAL_HOST 23 24AC_PROG_SED 25 26dnl Check for basic C environment. 27AC_PROG_CC 28AC_PROG_INSTALL 29AC_PROG_CPP 30 31AC_C_PROTOTYPES 32test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant]) 33 34AM_PROG_CC_C_O 35 36AX_PTHREAD 37 38dnl Check for C++. 39AC_PROG_CXX 40 41AS_CASE([$CXX], 42 [*clang++*], [ENABLE_CORO_FLAG=""], 43 [*g++*], [ENABLE_CORO_FLAG="-fcoroutines"], 44 [ENABLE_CORO_FLAG=""] 45) 46 47CXXFLAGS="$CXXFLAGS $ENABLE_CORO_FLAG" 48 49 50dnl --enable-gcc-warnings to turn on GCC warnings (for developers). 51AC_ARG_ENABLE([gcc-warnings], 52 [AS_HELP_STRING([--enable-gcc-warnings], 53 [turn on lots of GCC warnings (for developers)])], 54 [case $enableval in 55 yes|no) ;; 56 *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;; 57 esac 58 gcc_warnings=$enableval], 59 [gcc_warnings=no] 60) 61if test "x$gcc_warnings" = "xyes"; then 62 # Enable normal GCC warnings and a few more: 63 # - Warn about variable length arrays on stack. 64 # - Warn about large stack frames (since we may be used from threads). 65 # 66 # TODO: Address 'sign-compare' errors and remove -Wno-sign-compare 67 # TODO: Address 'parentheses' errors and remove -Wno-parentheses 68 WARNINGS_CFLAGS="-Wall -Werror -Wuninitialized -Wmaybe-uninitialized -Wno-sign-compare -Wno-parentheses" 69 AC_C_COMPILE_FLAGS([WARNINGS_CFLAGS], 70 [-Wvla -Wframe-larger-than=5000 -Wstack-usage=10000], 71 [$CFLAGS -Werror]) 72 AC_SUBST([WARNINGS_CFLAGS]) 73fi 74 75AC_ARG_ENABLE( 76 debug, 77 AS_HELP_STRING([--enable-debug],[Build a debug version of ublk(default disabled)]), 78 [ 79 if test "x$enableval" = "xyes"; then 80 AC_DEFINE(DEBUG, 1, [Define to 1 if you want to build debug version]) 81 fi 82 ] 83) 84 85dnl Check for liburing (required). 86PKG_CHECK_MODULES([LIBURING], [liburing >= 2.2]) 87 88dnl Check if io_uring_prep_sendmsg_zc which isn't supported on 2.2 yet 89AC_MSG_CHECKING([for io_uring_prep_sendmsg_zc]) 90AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 91 #include <liburing.h> 92]], [[ 93 int i = IORING_CQE_F_NOTIF; 94]])], 95[AC_MSG_RESULT([yes]) 96 AM_CONDITIONAL([HAVE_LIBURING_SEND_ZC], true) 97 AC_DEFINE([HAVE_LIBURING_SEND_ZC], [1], [Define to 1 if liburing supports send zc])], 98[AC_MSG_RESULT([no]) 99 AM_CONDITIONAL([HAVE_LIBURING_SEND_ZC], false)]) 100 101#gnutls is only for nbd target, borrowed from nbd-client project 102AC_ARG_WITH([gnutls], 103 [AS_HELP_STRING([--without-gnutls], 104 [do not use gnutls])], 105 [], 106 [with_gnutls=check] 107) 108if test "x$with_gnutls" != "xno"; then 109 PKG_CHECK_MODULES(GnuTLS, [gnutls >= 2.12.0], 110 [HAVE_GNUTLS=1 111 AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if you have a GnuTLS version of 2.12 or above])], 112 [if test "x$with_gnutls" = "xyes"; then 113 AC_MSG_ERROR([--with-gnutls given but cannot find gnutls]) 114 else 115 HAVE_GNUTLS=0 116 AC_DEFINE(HAVE_GNUTLS, 0) 117 fi] 118 ) 119else 120 HAVE_GNUTLS=0 121 AC_DEFINE(HAVE_GNUTLS, 0) 122fi 123AM_CONDITIONAL([GNUTLS], [test "x$HAVE_GNUTLS" = "x1"]) 124 125AC_ARG_ENABLE( 126 sdp, 127 AS_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)]), 128 [ 129 if test "x$enableval" = "xyes"; then 130 AC_DEFINE(WITH_SDP, 1, [Define to 1 if you have and want support for the Socket Direct Protocol]) 131 fi 132 ] 133) 134 135AC_ARG_ENABLE( 136 lfs, 137 AS_HELP_STRING([--disable-lfs],[Disable Large File Support (default on)]), 138 [ 139 if test "x$enableval" = "xyes" ; then 140 NBD_LFS=1 141 else 142 NBD_LFS=0 143 fi 144 ], 145 [NBD_LFS=1] 146) 147AC_MSG_CHECKING([whether Large File Support should be enabled]) 148if test $NBD_LFS -eq 1; then 149 AC_DEFINE(NBD_LFS,1, [Define to 1 if Large File Support should be enabled]) 150 AC_MSG_RESULT([yes]) 151else 152 AC_DEFINE(NBD_LFS,0) 153 AC_MSG_RESULT([no]) 154fi 155 156AC_CHECK_PROGS([DOXYGEN], [doxygen]) 157if test -z "$DOXYGEN"; then 158 AC_MSG_WARN([Doxygen not found - continue without Doxygen support]) 159fi 160AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"]) 161 162dnl Produce output files. 163AC_CONFIG_HEADERS([config.h]) 164 165AC_CONFIG_FILES([Makefile 166 include/Makefile 167 lib/Makefile 168 tests/Makefile 169 ublksrv.pc]) 170 171AC_OUTPUT 172