blob: e44a0a44d190d626a7e3e7c0ca0b1c486ba1ac3c [file] [log] [blame]
# ublksrv
# Copyright (C) Ming Lei
# SPDX-License-Identifier: MIT or GPL-2.0-only
AC_INIT([ublksrv],
m4_esyscmd(utils/genver.sh | tr -d '\n'),
[https://github.com/ming1/ubdsrv],,
[https://github.com/ming1/ubdsrv])
AC_CONFIG_MACRO_DIR([m4])
m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],[],
[m4_define([AC_USE_SYSTEM_EXTENSIONS],[])])
AC_USE_SYSTEM_EXTENSIONS
AC_SYS_LARGEFILE
AM_SILENT_RULES([yes])
dnl NB: Do not [quote] this parameter.
AM_INIT_AUTOMAKE([foreign subdir-objects])
LT_INIT
AC_CANONICAL_HOST
AC_PROG_SED
dnl Check for basic C environment.
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_CPP
AC_C_PROTOTYPES
test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
AM_PROG_CC_C_O
AX_PTHREAD
dnl Check for C++.
AC_PROG_CXX
AS_CASE([$CXX],
[*clang++*], [ENABLE_CORO_FLAG=""],
[*g++*], [ENABLE_CORO_FLAG="-fcoroutines"],
[ENABLE_CORO_FLAG=""]
)
CXXFLAGS="$CXXFLAGS $ENABLE_CORO_FLAG"
dnl --enable-gcc-warnings to turn on GCC warnings (for developers).
AC_ARG_ENABLE([gcc-warnings],
[AS_HELP_STRING([--enable-gcc-warnings],
[turn on lots of GCC warnings (for developers)])],
[case $enableval in
yes|no) ;;
*) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
esac
gcc_warnings=$enableval],
[gcc_warnings=no]
)
if test "x$gcc_warnings" = "xyes"; then
# Enable normal GCC warnings and a few more:
# - Warn about variable length arrays on stack.
# - Warn about large stack frames (since we may be used from threads).
#
# TODO: Address 'sign-compare' errors and remove -Wno-sign-compare
# TODO: Address 'parentheses' errors and remove -Wno-parentheses
WARNINGS_CFLAGS="-Wall -Werror -Wuninitialized -Wmaybe-uninitialized -Wno-sign-compare -Wno-parentheses"
AC_C_COMPILE_FLAGS([WARNINGS_CFLAGS],
[-Wvla -Wframe-larger-than=5000 -Wstack-usage=10000],
[$CFLAGS -Werror])
AC_SUBST([WARNINGS_CFLAGS])
fi
AC_ARG_ENABLE(
debug,
AS_HELP_STRING([--enable-debug],[Build a debug version of ublk(default disabled)]),
[
if test "x$enableval" = "xyes"; then
AC_DEFINE(DEBUG, 1, [Define to 1 if you want to build debug version])
fi
]
)
dnl Check for liburing (required).
PKG_CHECK_MODULES([LIBURING], [liburing >= 2.2])
dnl Check if io_uring_prep_sendmsg_zc which isn't supported on 2.2 yet
AC_MSG_CHECKING([for io_uring_prep_sendmsg_zc])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <liburing.h>
]], [[
int i = IORING_CQE_F_NOTIF;
]])],
[AC_MSG_RESULT([yes])
AM_CONDITIONAL([HAVE_LIBURING_SEND_ZC], true)
AC_DEFINE([HAVE_LIBURING_SEND_ZC], [1], [Define to 1 if liburing supports send zc])],
[AC_MSG_RESULT([no])
AM_CONDITIONAL([HAVE_LIBURING_SEND_ZC], false)])
#gnutls is only for nbd target, borrowed from nbd-client project
AC_ARG_WITH([gnutls],
[AS_HELP_STRING([--without-gnutls],
[do not use gnutls])],
[],
[with_gnutls=check]
)
if test "x$with_gnutls" != "xno"; then
PKG_CHECK_MODULES(GnuTLS, [gnutls >= 2.12.0],
[HAVE_GNUTLS=1
AC_DEFINE(HAVE_GNUTLS, 1, [Define to 1 if you have a GnuTLS version of 2.12 or above])],
[if test "x$with_gnutls" = "xyes"; then
AC_MSG_ERROR([--with-gnutls given but cannot find gnutls])
else
HAVE_GNUTLS=0
AC_DEFINE(HAVE_GNUTLS, 0)
fi]
)
else
HAVE_GNUTLS=0
AC_DEFINE(HAVE_GNUTLS, 0)
fi
AM_CONDITIONAL([GNUTLS], [test "x$HAVE_GNUTLS" = "x1"])
AC_ARG_ENABLE(
sdp,
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)]),
[
if test "x$enableval" = "xyes"; then
AC_DEFINE(WITH_SDP, 1, [Define to 1 if you have and want support for the Socket Direct Protocol])
fi
]
)
AC_ARG_ENABLE(
lfs,
AS_HELP_STRING([--disable-lfs],[Disable Large File Support (default on)]),
[
if test "x$enableval" = "xyes" ; then
NBD_LFS=1
else
NBD_LFS=0
fi
],
[NBD_LFS=1]
)
AC_MSG_CHECKING([whether Large File Support should be enabled])
if test $NBD_LFS -eq 1; then
AC_DEFINE(NBD_LFS,1, [Define to 1 if Large File Support should be enabled])
AC_MSG_RESULT([yes])
else
AC_DEFINE(NBD_LFS,0)
AC_MSG_RESULT([no])
fi
AC_CHECK_PROGS([DOXYGEN], [doxygen])
if test -z "$DOXYGEN"; then
AC_MSG_WARN([Doxygen not found - continue without Doxygen support])
fi
AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"])
dnl Produce output files.
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile
include/Makefile
lib/Makefile
tests/Makefile
ublksrv.pc])
AC_OUTPUT