1# -*- Autoconf -*- 2# Process this file with autoconf to produce a configure script. 3 4AC_PREREQ([2.62]) 5AC_INIT([istgt], [0.5]) 6AC_CONFIG_SRCDIR([src/istgt.c]) 7AC_CONFIG_HEADERS([src/config.h]) 8 9# Checks for programs. 10AC_PROG_CC([clang gcc cc]) 11AC_PROG_INSTALL 12AC_PROG_RANLIB 13AC_PROG_SED 14AC_PROG_MKDIR_P 15 16# clagn with -O3 17if test "$CC" = "clang" && test "$ac_test_CFLAGS" != "set"; then 18 CFLAGS="-g -O3" 19fi 20 21# host OS related 22vboxinc="/usr/local/src/virtualbox/*/include" 23vboxlib="/usr/local/lib/virtualbox" 24AC_SUBST([rctemplate], [""]) 25AC_SUBST([rcdir], ['${prefix}/etc/rc.d']) 26AC_CANONICAL_HOST 27case "$host_os" in 28*linux*) 29 tmp="/usr/src/virtualbox/*/include" 30 if test -d "`echo $tmp`"; then 31 vboxinc=$tmp 32 fi 33 vboxlib="/usr/lib/virtualbox" 34 AC_SUBST([rctemplate], ["istgt_linux.sh.in"]) 35 AC_SUBST([rcdir], ['/etc/init.d']) 36 AC_DEFINE([_GNU_SOURCE], 1, [Define if linux host]) 37 ;; 38*netbsd*) 39 AC_SUBST([rctemplate], ["istgt_netbsd.sh.in"]) 40 AC_SUBST([rcdir], ['/etc/rc.d']) 41 ;; 42*dragonfly*|*freebsd*) 43 tmp="/usr/ports/emulators/virtualbox-ose/work/*/include" 44 if test -d "`echo $tmp`"; then 45 vboxinc=$tmp 46 else 47 tmp="/usr/ports/emulators/virtualbox-ose-legacy/work/*/include" 48 if test -d "`echo $tmp`"; then 49 vboxinc=$tmp 50 fi 51 fi 52 vboxlib="/usr/local/lib/virtualbox" 53 AC_SUBST([rctemplate], ["istgt.sh.in"]) 54 AC_SUBST([rcdir], ['${prefix}/etc/rc.d']) 55 if test "$mandir" = '${datarootdir}/man'; then 56 AC_SUBST([mandir], ['${prefix}/man']) 57 fi 58 ;; 59esac 60 61# Checks for libraries. 62AC_CHECK_LIB([pthread], [pthread_create]) 63AC_CHECK_LIB([md], [MD5Update], , 64 [AC_CHECK_LIB([crypto], [MD5_Update])]) 65AC_CHECK_LIB([cam], [cam_open_spec_device]) 66 67# Checks for header files. 68AC_CHECK_HEADERS([arpa/inet.h fcntl.h inttypes.h limits.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h]) 69 70# Checks for typedefs, structures, and compiler characteristics. 71AC_C_INLINE 72AC_TYPE_INT32_T 73AC_TYPE_INT64_T 74AC_TYPE_OFF_T 75AC_TYPE_PID_T 76AC_TYPE_SIZE_T 77AC_TYPE_SSIZE_T 78AC_STRUCT_ST_BLOCKS 79AC_TYPE_UINT16_T 80AC_TYPE_UINT32_T 81AC_TYPE_UINT64_T 82AC_TYPE_UINT8_T 83 84# Checks for library functions. 85AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK 86AC_FUNC_MALLOC 87AC_FUNC_REALLOC 88AC_CHECK_FUNCS([ftruncate memset realpath socket strcasecmp strchr strncasecmp strspn strtol strtoull]) 89 90# check compatibility 91AC_SYS_LARGEFILE 92AC_CHECK_HEADERS([aio.h sched.h uuid.h sys/disk.h sys/disklabel.h]) 93AC_CHECK_HEADERS([pthread.h]) 94AC_CHECK_HEADERS([pthread_np.h], [], [], 95[#if HAVE_PTHREAD_H 96#include <pthread.h> 97#endif 98]) 99AC_CHECK_FUNCS([strlcpy arc4random srandomdev pthread_yield sched_yield]) 100AC_CHECK_FUNCS([pthread_set_name_np setproctitle]) 101AC_SUBST([MKDEP]) 102AC_PATH_PROG([MKDEP], ["mkdep"]) 103#if test -z "$MKDEP"; then 104# AC_PATH_PROG([MKDEP], ["makedepend"]) 105#fi 106 107# paths 108configdir="$ac_default_prefix/etc/istgt" 109mediadir="/var/istgt" 110if test "$prefix" != "NONE"; then 111 configdir="$prefix/etc/istgt" 112fi 113AC_ARG_WITH([configdir], 114 AS_HELP_STRING([--with-configdir=DIR], [(default PREFIX/etc/istgt)]), 115 [case $withval in 116 yes|no) 117 ;; 118 *) 119 configdir="$withval" 120 ;; 121 esac]) 122AC_SUBST([configdir]) 123AC_ARG_WITH([mediadir], 124 AS_HELP_STRING([--with-mediadir=DIR], [(default /var/istgt)]), 125 [case $withval in 126 yes|no) 127 ;; 128 *) 129 mediadir="$withval" 130 ;; 131 esac]) 132AC_SUBST([mediadir]) 133 134# startup script directory 135AC_ARG_WITH([rcdir], 136 AS_HELP_STRING([--with-rcdir=DIR], [(default PREFIX/etc/rc.d)]), 137 [case $withval in 138 yes|no) 139 ;; 140 *) 141 rcdir="$withval" 142 ;; 143 esac]) 144AC_SUBST([rcdir]) 145 146# test for -fstack-protector 147saved_CFLAGS="$CFLAGS" 148AC_MSG_CHECKING([whether the C compiler accepts -fstack-protector]) 149CFLAGS="$CFLAGS -fstack-protector" 150AC_TRY_COMPILE(,, 151 AC_MSG_RESULT(yes); saved_CFLAGS="$CFLAGS", 152 AC_MSG_RESULT(no)) 153CFLAGS="$saved_CFLAGS" 154 155# test for -Wall 156saved_CFLAGS="$CFLAGS" 157AC_MSG_CHECKING([whether the C compiler accepts -Wall]) 158CFLAGS="$CFLAGS -Wall" 159AC_TRY_COMPILE(,, 160 AC_MSG_RESULT(yes); saved_CFLAGS="$CFLAGS", 161 AC_MSG_RESULT(no)) 162CFLAGS="$saved_CFLAGS" 163 164# test for -Wextra 165saved_CFLAGS="$CFLAGS" 166AC_MSG_CHECKING([whether the C compiler accepts -Wextra]) 167CFLAGS="$CFLAGS -Wextra" 168AC_TRY_COMPILE(,, 169 AC_MSG_RESULT(yes); saved_CFLAGS="$CFLAGS", 170 AC_MSG_RESULT(no)) 171CFLAGS="$saved_CFLAGS" 172 173# check enable features 174AC_MSG_CHECKING([whether to use debug mode]) 175AC_ARG_ENABLE([debug], 176 AS_HELP_STRING([--enable-debug], [enable debug(logging)]), 177 AC_MSG_RESULT(yes); AC_DEFINE([DEBUG], 1, [Define if enable debug]), 178 AC_MSG_RESULT(no)) 179AC_SUBST([DEBUG]) 180 181AC_MSG_CHECKING([whether to use symlink device]) 182AC_ARG_ENABLE([symlink-device], 183 AS_HELP_STRING([--enable-symlink-device], [allow symlink device]), 184 AC_MSG_RESULT(yes); AC_DEFINE([ALLOW_SYMLINK_DEVICE], 1, [Define if enable symlink-device]), 185 AC_MSG_RESULT(no)) 186AC_SUBST([ALLOW_SYMLINK_DEVICE]) 187 188AC_MSG_CHECKING([which syslog facility to use]) 189AC_ARG_WITH([logfacility], 190 AS_HELP_STRING([--with-logfacility], [syslog facility to log with (default "local7")]), 191 [case $with_logfacility in 192 daemon|auth|authpriv|local0|local1|local2|local3|local4|local5|local6|local7) 193 logfacility=$with_logfacility 194 ;; 195 *) AC_MSG_ERROR(["unsupported facility $with_logfacility"]) 196 ;; 197 esac], 198 [logfacility="local7"]) 199AC_DEFINE_UNQUOTED([DEFAULT_LOG_FACILITY], ["$logfacility"], [syslog facility]) 200AC_MSG_RESULT("$logfacility") 201 202AC_MSG_CHECKING([which syslog priority to use]) 203AC_ARG_WITH([logpriority], 204 AS_HELP_STRING([--with-logpriority], [syslog priority to log with (default "info")]), 205 [case $with_logpriority in 206 emerg|alert|crit|err|warning|notice|info|debug) 207 logpriority=$with_logpriority 208 ;; 209 *) AC_MSG_ERROR(["unsupported priority $with_logpriority"]) 210 ;; 211 esac], 212 [logpriority="info"]) 213AC_DEFINE_UNQUOTED([DEFAULT_LOG_PRIORITY], ["$logpriority"], [syslog priority]) 214AC_MSG_RESULT("$logpriority") 215 216#AC_MSG_CHECKING([whether to use asynchronous io]) 217#AC_ARG_WITH([aio], 218# AS_HELP_STRING([--with-aio], [use aio (default "no")]), 219# [case $with_aio in 220# yes) 221# AC_DEFINE([USE_AIO], 1, [use aio]) 222# AC_MSG_RESULT(yes) 223# ;; 224# *) 225# AC_MSG_RESULT(no) 226# ;; 227# esac], 228# AC_MSG_RESULT(no)) 229#AC_SUBST([USE_AIO]) 230 231# vbox support 232vbox="no" 233AC_MSG_CHECKING([VirtualBox Virtual Disk support]) 234AC_ARG_WITH([vbox], 235 AS_HELP_STRING([--with-vbox=INC], [VirtualBox include]), 236 [case $with_vbox in 237 no) 238 AC_MSG_RESULT([no]) 239 ;; 240 yes|*) 241 AC_MSG_RESULT([yes]) 242 vbox="yes" 243 if test "$with_vbox" != "yes"; then 244 vboxinc="$with_vbox" 245 fi 246 ;; 247 esac], 248 [AC_MSG_RESULT([no])]) 249AC_ARG_WITH([vboxlib], 250 AS_HELP_STRING([--with-vboxlib=LIB], [VirtualBox lib]), 251 [case $with_vboxlib in 252 no) 253 ;; 254 yes|*) 255 vbox="yes" 256 if test "$with_vboxlib" != "yes"; then 257 vboxlib="$with_vboxlib" 258 fi 259 ;; 260 esac], 261 []) 262# vbox support yes? 263if test "$vbox" = "yes"; then 264 vboxinc=`echo $vboxinc` 265 vboxlib=`echo $vboxlib` 266 if test ! -d "$vboxinc"; then 267 AC_MSG_ERROR([not directory: $vboxinc]) 268 fi 269 if test ! -d "$vboxlib"; then 270 AC_MSG_ERROR([not directory: $vboxlib]) 271 fi 272 CPPFLAGS="$CPPFLAGS -I$vboxinc" 273 LDFLAGS="$LDFLAGS -Wl,-rpath,$vboxlib" 274 LIBS="$LIBS $vboxlib/VBoxDDU.so $vboxlib/VBoxRT.so" 275 AC_DEFINE([USE_VBOXVD], 1, [Use vbox virtual disk support]) 276 # define vbox include version 277 changequote(<<, >>) 278 vbox_major=`$SED -e '/^VBOX_VERSION_MAJOR[ ]*=/!d' -e 's/.*=[^0-9]*\([0-9]*\).*/\1/' $vboxinc/../Config.kmk` 279 vbox_minor=`$SED -e '/^VBOX_VERSION_MINOR[ ]*=/!d' -e 's/.*=[^0-9]*\([0-9]*\).*/\1/' $vboxinc/../Config.kmk` 280 vbox_build=`$SED -e '/^VBOX_VERSION_BUILD[ ]*=/!d' -e 's/.*=[^0-9]*\([0-9]*\).*/\1/' $vboxinc/../Config.kmk` 281 changequote([, ]) 282 AC_DEFINE_UNQUOTED([ISTGT_VBOXINC_VERSION_MAJOR], [$vbox_major], [VBox include major]) 283 AC_DEFINE_UNQUOTED([ISTGT_VBOXINC_VERSION_MINOR], [$vbox_minor], [VBox include minor]) 284 AC_DEFINE_UNQUOTED([ISTGT_VBOXINC_VERSION_BUILD], [$vbox_build], [VBox include build]) 285fi 286 287# check for PTHREAD_MUTEX_ADAPTIVE_NP 288AC_MSG_CHECKING([for PTHREAD_MUTEX_ADAPTIVE_NP]) 289AC_TRY_COMPILE([ 290#include <pthread.h> 291], 292[ 293 return (PTHREAD_MUTEX_ADAPTIVE_NP); 294], 295[AC_MSG_RESULT([yes]) 296AC_DEFINE([HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], [1], [Define 1 if you have the value.])], 297[AC_MSG_RESULT([no])] 298) 299 300AC_CHECK_HEADERS([sys/types.h]) 301AC_CHECK_HEADERS([machine/atomic.h], [], [], 302[#if HAVE_SYS_TYPES_H 303#include <sys/types.h> 304#endif 305]) 306AC_CHECK_HEADERS([sys/atomic.h]) 307 308# for FeeeBSD 309#AC_CHECK_FUNCS([atomic_store_rel_int atomic_load_acq_int]) 310#AC_CHECK_FUNCS([atomic_cmpset_ptr atomic_cmpset_64 atomic_cmpset_32]) 311 312# for NetBSD 313#AC_CHECK_FUNCS([atomic_swap_uint atomic_or_uint_nv]) 314#AC_CHECK_FUNCS([atomic_cas_ptr atomic_cas_64 atomic_cas_32]) 315 316atomic="no" 317AC_MSG_CHECKING([for atomic operations]) 318AC_TRY_LINK([ 319#if HAVE_SYS_TYPES_H 320#include <sys/types.h> 321#endif 322#include <machine/atomic.h> 323], 324[ 325 int x, y; 326 atomic_store_rel_int(&x, 1); 327 y = atomic_load_acq_int(&x); 328], 329[AC_DEFINE([USE_ATOMIC], [1], [Use atomic]) 330AC_DEFINE([HAVE_ATOMIC_STORE_REL_INT], [1], [Define 1 if you have the function.]) 331AC_DEFINE([HAVE_ATOMIC_LOAD_ACQ_INT], [1], [Define 1 if you have the function.]) 332atomic="yes"] 333) 334if test $atomic = "no"; then 335AC_TRY_LINK([ 336#if HAVE_SYS_TYPES_H 337#include <sys/types.h> 338#endif 339#include <sys/atomic.h> 340], 341[ 342 unsigned int x, y; 343 atomic_swap_uint(&x, 1); 344 y = atomic_or_uint_nv(&x, 0); 345], 346[AC_DEFINE([USE_ATOMIC], [1], [Use atomic]) 347AC_DEFINE([HAVE_ATOMIC_SWAP_UINT], [1], [Define 1 if you have the function.]) 348AC_DEFINE([HAVE_ATOMIC_OR_UINT_NV], [1], [Define 1 if you have the function.]) 349atomic="yes"] 350) 351fi 352AC_TRY_LINK([ 353#if HAVE_SYS_TYPES_H 354#include <sys/types.h> 355#endif 356#include <sys/atomic.h> 357], 358[ 359 membar_producer(); 360], 361[AC_DEFINE([HAVE_MEMBAR_PRODUCER], [1], [Define 1 if you have the function.])] 362) 363AC_MSG_RESULT($atomic) 364 365# for gcc builtin 366#AC_CHECK_FUNCS([__sync_fetch_and_add __sync_val_compare_and_swap]) 367#AC_CHECK_FUNCS([__sync_synchronize]) 368 369gcc_atomic="no" 370AC_MSG_CHECKING([for gcc builtin atomic operations]) 371AC_TRY_LINK([ 372#if HAVE_SYS_TYPES_H 373#include <sys/types.h> 374#endif 375], 376[ 377 unsigned int x, y; 378 y = __sync_fetch_and_add(&x, 0); 379 __sync_val_compare_and_swap(&x, y, 2); 380], 381[AC_DEFINE([USE_GCC_ATOMIC], [1], [Use gcc builtin atomic]) 382AC_DEFINE([HAVE_GCC_ATOMIC_FETCH_AND_ADD_UINT], [1], [Define 1 if you have the function.]) 383AC_DEFINE([HAVE_GCC_ATOMIC_VAL_COMPARE_AND_SWAP_UINT], [1], [Define 1 if you have the function.]) 384gcc_atomic="yes"] 385) 386AC_TRY_LINK([ 387#if HAVE_SYS_TYPES_H 388#include <sys/types.h> 389#endif 390], 391[ 392 __sync_synchronize(); 393], 394[AC_DEFINE([HAVE_GCC_ATOMIC_SYNCHRONIZE], [1], [Define 1 if you have the function.])] 395) 396AC_MSG_RESULT($gcc_atomic) 397 398AC_CONFIG_FILES([Makefile src/Makefile etc/Makefile doc/Makefile]) 399AC_CONFIG_FILES([src/build.h]) 400AC_OUTPUT 401