diff options
Diffstat (limited to 'configure.ac')
| -rw-r--r-- | configure.ac | 1251 |
1 files changed, 817 insertions, 434 deletions
diff --git a/configure.ac b/configure.ac index 1a09854224b..e2d6fd66cec 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -dnl Copyright (c) 2006-2012 Red Hat, Inc. <http://www.redhat.com> +dnl Copyright (c) 2006-2016 Red Hat, Inc. <http://www.redhat.com> dnl This file is part of GlusterFS. dnl dnl This file is licensed to you under your choice of the GNU Lesser @@ -13,7 +13,7 @@ AC_INIT([glusterfs], AC_SUBST([PACKAGE_RELEASE], [m4_esyscmd([build-aux/pkg-version --release])]) -AM_INIT_AUTOMAKE(tar-pax) +AM_INIT_AUTOMAKE([tar-pax foreign]) # Removes warnings when using automake 1.14 around (...but option 'subdir-objects' is disabled ) #but libglusterfs fails to build with contrib (Then are not set up that way?) @@ -21,28 +21,21 @@ AM_INIT_AUTOMAKE(tar-pax) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES(yes)]) -if make --help 2>&1 | grep -q no-print-directory; then - AM_MAKEFLAGS="$AM_MAKEFLAGS --no-print-directory"; -fi - -if make --help 2>&1 | grep -q quiet; then - AM_MAKEFLAGS="$AM_MAKEFLAGS --quiet" -fi - -if libtool --help 2>&1 | grep -q quiet; then - AM_LIBTOOLFLAGS="--quiet"; -fi - -AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_HEADERS([config.h site.h]) AC_CONFIG_FILES([Makefile libglusterfs/Makefile libglusterfs/src/Makefile - libglusterfs/src/gfdb/Makefile + libglusterd/Makefile + libglusterd/src/Makefile geo-replication/src/peer_gsec_create geo-replication/src/peer_mountbroker + geo-replication/src/peer_mountbroker.py + geo-replication/src/peer_georep-sshkey.py extras/peer_add_secret_pub - geo-replication/syncdaemon/configinterface.py + geo-replication/syncdaemon/conf.py + geo-replication/gsyncd.conf + extras/snap_scheduler/conf.py glusterfsd/Makefile glusterfsd/src/Makefile rpc/Makefile @@ -51,8 +44,6 @@ AC_CONFIG_FILES([Makefile rpc/rpc-transport/Makefile rpc/rpc-transport/socket/Makefile rpc/rpc-transport/socket/src/Makefile - rpc/rpc-transport/rdma/Makefile - rpc/rpc-transport/rdma/src/Makefile rpc/xdr/Makefile rpc/xdr/src/Makefile xlators/Makefile @@ -67,13 +58,9 @@ AC_CONFIG_FILES([Makefile xlators/storage/Makefile xlators/storage/posix/Makefile xlators/storage/posix/src/Makefile - xlators/storage/bd/Makefile - xlators/storage/bd/src/Makefile xlators/cluster/Makefile xlators/cluster/afr/Makefile xlators/cluster/afr/src/Makefile - xlators/cluster/stripe/Makefile - xlators/cluster/stripe/src/Makefile xlators/cluster/dht/Makefile xlators/cluster/dht/src/Makefile xlators/cluster/ec/Makefile @@ -89,19 +76,23 @@ AC_CONFIG_FILES([Makefile xlators/performance/io-threads/src/Makefile xlators/performance/io-cache/Makefile xlators/performance/io-cache/src/Makefile - xlators/performance/symlink-cache/Makefile - xlators/performance/symlink-cache/src/Makefile xlators/performance/quick-read/Makefile xlators/performance/quick-read/src/Makefile xlators/performance/open-behind/Makefile xlators/performance/open-behind/src/Makefile xlators/performance/md-cache/Makefile xlators/performance/md-cache/src/Makefile + xlators/performance/nl-cache/Makefile + xlators/performance/nl-cache/src/Makefile xlators/debug/Makefile + xlators/debug/sink/Makefile + xlators/debug/sink/src/Makefile xlators/debug/trace/Makefile xlators/debug/trace/src/Makefile xlators/debug/error-gen/Makefile xlators/debug/error-gen/src/Makefile + xlators/debug/delay-gen/Makefile + xlators/debug/delay-gen/src/Makefile xlators/debug/io-stats/Makefile xlators/debug/io-stats/src/Makefile xlators/protocol/Makefile @@ -117,40 +108,34 @@ AC_CONFIG_FILES([Makefile xlators/features/Makefile xlators/features/arbiter/Makefile xlators/features/arbiter/src/Makefile + xlators/features/thin-arbiter/Makefile + xlators/features/thin-arbiter/src/Makefile xlators/features/changelog/Makefile xlators/features/changelog/src/Makefile xlators/features/changelog/lib/Makefile xlators/features/changelog/lib/src/Makefile - xlators/features/changetimerecorder/Makefile - xlators/features/changetimerecorder/src/Makefile - xlators/features/glupy/Makefile - xlators/features/glupy/examples/Makefile - xlators/features/glupy/src/Makefile - xlators/features/glupy/src/setup.py - xlators/features/glupy/src/__init__.py - xlators/features/glupy/src/glupy/Makefile xlators/features/locks/Makefile xlators/features/locks/src/Makefile xlators/features/quota/Makefile xlators/features/quota/src/Makefile xlators/features/marker/Makefile xlators/features/marker/src/Makefile + xlators/features/selinux/Makefile + xlators/features/selinux/src/Makefile + xlators/features/sdfs/Makefile + xlators/features/sdfs/src/Makefile xlators/features/read-only/Makefile xlators/features/read-only/src/Makefile xlators/features/compress/Makefile xlators/features/compress/src/Makefile - xlators/features/mac-compat/Makefile - xlators/features/mac-compat/src/Makefile + xlators/features/namespace/Makefile + xlators/features/namespace/src/Makefile xlators/features/quiesce/Makefile xlators/features/quiesce/src/Makefile xlators/features/barrier/Makefile xlators/features/barrier/src/Makefile - xlators/features/ganesha/Makefile - xlators/features/ganesha/src/Makefile xlators/features/index/Makefile xlators/features/index/src/Makefile - xlators/features/protect/Makefile - xlators/features/protect/src/Makefile xlators/features/gfid-access/Makefile xlators/features/gfid-access/src/Makefile xlators/features/trash/Makefile @@ -167,16 +152,23 @@ AC_CONFIG_FILES([Makefile xlators/features/bit-rot/src/Makefile xlators/features/bit-rot/src/stub/Makefile xlators/features/bit-rot/src/bitd/Makefile + xlators/features/leases/Makefile + xlators/features/leases/src/Makefile + xlators/features/cloudsync/Makefile + xlators/features/cloudsync/src/Makefile + xlators/features/utime/Makefile + xlators/features/utime/src/Makefile + xlators/features/cloudsync/src/cloudsync-plugins/Makefile + xlators/features/cloudsync/src/cloudsync-plugins/src/Makefile + xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/Makefile + xlators/features/cloudsync/src/cloudsync-plugins/src/cloudsyncs3/src/Makefile + xlators/features/cloudsync/src/cloudsync-plugins/src/cvlt/Makefile + xlators/features/cloudsync/src/cloudsync-plugins/src/cvlt/src/Makefile + xlators/features/metadisp/Makefile + xlators/features/metadisp/src/Makefile xlators/playground/Makefile xlators/playground/template/Makefile xlators/playground/template/src/Makefile - xlators/encryption/Makefile - xlators/encryption/rot-13/Makefile - xlators/encryption/rot-13/src/Makefile - xlators/encryption/crypt/Makefile - xlators/encryption/crypt/src/Makefile - xlators/features/qemu-block/Makefile - xlators/features/qemu-block/src/Makefile xlators/system/Makefile xlators/system/posix-acl/Makefile xlators/system/posix-acl/src/Makefile @@ -191,18 +183,25 @@ AC_CONFIG_FILES([Makefile doc/Makefile extras/Makefile extras/glusterd.vol + extras/cliutils/Makefile extras/init.d/Makefile extras/init.d/glusterd.plist extras/init.d/glusterd-Debian extras/init.d/glusterd-Redhat extras/init.d/glusterd-FreeBSD extras/init.d/glusterd-SuSE + extras/init.d/glustereventsd-Debian + extras/init.d/glustereventsd-Redhat + extras/init.d/glustereventsd-FreeBSD extras/ganesha/Makefile extras/ganesha/config/Makefile extras/ganesha/scripts/Makefile extras/ganesha/ocf/Makefile extras/systemd/Makefile extras/systemd/glusterd.service + extras/systemd/glustereventsd.service + extras/systemd/glusterfssharedstorage.service + extras/systemd/gluster-ta-volume.service extras/run-gluster.tmpfiles extras/benchmarking/Makefile extras/hook-scripts/Makefile @@ -211,9 +210,15 @@ AC_CONFIG_FILES([Makefile extras/ocf/volume extras/LinuxRPM/Makefile extras/geo-rep/Makefile + extras/geo-rep/schedule_georep.py + extras/firewalld/Makefile extras/hook-scripts/add-brick/Makefile extras/hook-scripts/add-brick/pre/Makefile extras/hook-scripts/add-brick/post/Makefile + extras/hook-scripts/create/Makefile + extras/hook-scripts/create/post/Makefile + extras/hook-scripts/delete/Makefile + extras/hook-scripts/delete/pre/Makefile extras/hook-scripts/start/Makefile extras/hook-scripts/start/post/Makefile extras/hook-scripts/set/Makefile @@ -223,13 +228,16 @@ AC_CONFIG_FILES([Makefile extras/hook-scripts/reset/Makefile extras/hook-scripts/reset/post/Makefile extras/hook-scripts/reset/pre/Makefile + extras/python/Makefile extras/snap_scheduler/Makefile + events/Makefile + events/src/Makefile + events/src/eventsapiconf.py + events/tools/Makefile contrib/fuse-util/Makefile contrib/umountd/Makefile - contrib/uuid/uuid_types.h glusterfs-api.pc libgfchangelog.pc - libgfdb.pc api/Makefile api/src/Makefile api/examples/Makefile @@ -241,10 +249,12 @@ AC_CONFIG_FILES([Makefile heal/Makefile heal/src/Makefile glusterfs.spec - tools/glusterfind/src/tool.conf - tools/glusterfind/glusterfind - tools/glusterfind/Makefile - tools/glusterfind/src/Makefile]) + tools/glusterfind/src/tool.conf + tools/glusterfind/glusterfind + tools/glusterfind/Makefile + tools/glusterfind/src/Makefile + tools/setgfid2path/Makefile + tools/setgfid2path/src/Makefile]) AC_CANONICAL_HOST @@ -265,10 +275,124 @@ AC_ARG_ENABLE([debug], [Enable debug build options.])) if test "x$enable_debug" = "xyes"; then BUILD_DEBUG=yes - CFLAGS="${CFLAGS} -g -O0 -DDEBUG" + GF_CFLAGS="${GF_CFLAGS} -g -O0 -DDEBUG" else BUILD_DEBUG=no - CFLAGS="${CFLAGS} -g -O2" +fi + +SANITIZER=none + +AC_ARG_ENABLE([asan], + AC_HELP_STRING([--enable-asan], + [Enable Address Sanitizer support])) +if test "x$enable_asan" = "xyes"; then + SANITIZER=asan + AC_CHECK_LIB([asan], [__asan_init], , + [AC_MSG_ERROR([--enable-asan requires libasan.so, exiting])]) + GF_CFLAGS="${GF_CFLAGS} -O2 -g -fsanitize=address -fno-omit-frame-pointer" + GF_LDFLAGS="${GF_LDFLAGS} -lasan" +fi + +AC_ARG_ENABLE([tsan], + AC_HELP_STRING([--enable-tsan], + [Enable Thread Sanitizer support])) +if test "x$enable_tsan" = "xyes"; then + if test "x$SANITIZER" != "xnone"; then + AC_MSG_ERROR([only one sanitizer can be enabled at once]) + fi + SANITIZER=tsan + AC_CHECK_LIB([tsan], [__tsan_init], , + [AC_MSG_ERROR([--enable-tsan requires libtsan.so, exiting])]) + if test "x$ac_cv_lib_tsan___tsan_init" = xyes; then + AC_MSG_CHECKING([whether tsan API can be used]) + saved_CFLAGS=${CFLAGS} + CFLAGS="${CFLAGS} -fsanitize=thread" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([ + [#include <sanitizer/tsan_interface.h>]], + [[__tsan_create_fiber(0)]])], + [TSAN_API=yes], [TSAN_API=no]) + AC_MSG_RESULT([$TSAN_API]) + if test x$TSAN_API = "xyes"; then + AC_DEFINE(HAVE_TSAN_API, 1, [Define if tsan API can be used.]) + fi + CFLAGS=${saved_CFLAGS} + fi + GF_CFLAGS="${GF_CFLAGS} -O2 -g -fsanitize=thread -fno-omit-frame-pointer" + GF_LDFLAGS="${GF_LDFLAGS} -ltsan" +fi + +AC_ARG_ENABLE([ubsan], + AC_HELP_STRING([--enable-ubsan], + [Enable Undefined Behavior Sanitizer support])) +if test "x$enable_ubsan" = "xyes"; then + if test "x$SANITIZER" != "xnone"; then + AC_MSG_ERROR([only one sanitizer can be enabled at once]) + fi + SANITIZER=ubsan + AC_CHECK_LIB([ubsan], [__ubsan_default_options], , + [AC_MSG_ERROR([--enable-ubsan requires libubsan.so, exiting])]) + GF_CFLAGS="${GF_CFLAGS} -O2 -g -fsanitize=undefined -fno-omit-frame-pointer" + GF_LDFLAGS="${GF_LDFLAGS} -lubsan" +fi + +# Initialize CFLAGS before usage +BUILD_TCMALLOC=no +AC_ARG_ENABLE([tcmalloc], + AC_HELP_STRING([--enable-tcmalloc], + [Enable linking with tcmalloc library.])) +if test "x$enable_tcmalloc" = "xyes"; then + BUILD_TCMALLOC=yes + GF_CFLAGS="${GF_CFLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free" + AC_CHECK_LIB([tcmalloc], [malloc], [], + [AC_MSG_ERROR([when --enable-tcmalloc is used, tcmalloc library needs to be present])]) + GF_LDFLAGS="-ltcmalloc ${GF_LDFLAGS}" +fi + + +dnl When possible, prefer libtirpc over glibc rpc. +dnl +dnl On newer linux with only libtirpc, use libtirpc. (Specifying +dnl --without-libtirpc is an error.) +dnl +dnl on older linux with glibc rpc and WITH libtirpc, use libtirpc +dnl by default except when configured with --without-libtirpc. +dnl +dnl on old linux with glibc rpc and WITHOUT libtirpc, default to +dnl use glibc rpc. +dnl +AC_ARG_WITH([libtirpc], + [AC_HELP_STRING([--without-libtirpc], [Use legacy glibc RPC.])], + [with_libtirpc="no"], [with_libtirpc="yes"]) + +dnl ipv6-default is off by default +dnl +dnl ipv6-default requires libtirpc. (glibc rpc does not support IPv6.) +dnl ipv6-default can only be enabled if libtipc is enabled. +dnl +AC_ARG_WITH([ipv6-default], + AC_HELP_STRING([--with-ipv6-default], [Set IPv6 as default.]), + [with_ipv6_default=${with_libtirpc}], [with_ipv6_default="no"]) + +AC_CHECK_FILE([/etc/centos-release]) +if test "x$ac_cv_file__etc_centos_release" = "xyes"; then + if grep "release 6" /etc/centos-release; then + with_ipv6_default="no" + fi +fi + +dnl On some distributions '-ldl' isn't automatically added to LIBS +AC_CHECK_LIB([dl], [dlopen], [LIB_DL=-ldl]) +AC_SUBST(LIB_DL) + +AC_ARG_ENABLE([privport_tracking], + AC_HELP_STRING([--disable-privport_tracking], + [Disable internal tracking of privileged ports.])) +TRACK_PRIVPORTS="yes" +if test x"$enable_privport_tracking" = x"no"; then + TRACK_PRIVPORTS="no" + AC_DEFINE(GF_DISABLE_PRIVPORT_TRACKING, 1, + [Disable internal tracking of privileged ports.]) fi case $host_os in @@ -278,18 +402,42 @@ case $host_os in fi # OSX version lesser than 9 has llvm/clang optimization issues which leads to various segfaults if test "`/usr/bin/sw_vers | grep ProductVersion: | cut -f 2 | cut -d. -f2`" -lt 9; then - CFLAGS="${CFLAGS} -g -O0 -DDEBUG" + GF_CFLAGS="${GF_CFLAGS} -g -O0 -DDEBUG" fi ;; esac +# --enable-valgrind prevents calling dlclose(), this leaks memory +AC_ARG_ENABLE([valgrind], + AC_HELP_STRING([--enable-valgrind@<:@=memcheck,drd@:>@], + [Enable valgrind for resource leak (memcheck, which is + the default) or thread synchronization (drd) debugging.])) +case x$enable_valgrind in + xmemcheck|xyes) + AC_DEFINE(RUN_WITH_MEMCHECK, 1, + [Define if all processes should run under 'valgrind --tool=memcheck'.]) + VALGRIND_TOOL=memcheck + ;; + xdrd) + AC_DEFINE(RUN_WITH_DRD, 1, + [Define if all processes should run under 'valgrind --tool=drd'.]) + VALGRIND_TOOL=drd + ;; + x|xno) + VALGRIND_TOOL=no + ;; + *) + AC_MSG_ERROR([Please specify --enable-valgrind@<:@=memcheck,drd@:>@]) + ;; +esac + AC_ARG_WITH([previous-options], [AS_HELP_STRING([--with-previous-options], [read config.status for configure options]) ], [ if test -r ./config.status && \ args=$(grep 'ac_cs_config=' config.status | \ - sed -e 's/.*"\(.*\)".*/\1/'| sed -e "s/'//g") ; then + sed -e 's/.*"\(.*\)".*/\1/' -e "s/'//g" -e "s/--with-previous-options//g") ; then echo "###" echo "### Rerunning as '$0 $args'" echo "###" @@ -310,10 +458,11 @@ AC_ARG_WITH(mountutildir, AC_SUBST(mountutildir) AC_ARG_WITH(systemddir, - [ --with-systemddir=DIR systemd service files in DIR @<:@/usr/lib/systemd/system@:>@], + [ --with-systemddir=DIR systemd service files in DIR @<:@PREFIX/lib/systemd/system@:>@], [systemddir=$withval], - [systemddir='/usr/lib/systemd/system']) + [systemddir='${prefix}/lib/systemd/system']) AC_SUBST(systemddir) +AM_CONDITIONAL([USE_SYSTEMD], test [ -d '/usr/lib/systemd/system' ]) AC_ARG_WITH(initdir, [ --with-initdir=DIR init.d scripts in DIR @<:@/etc/init.d@:>@], @@ -341,6 +490,13 @@ AC_ARG_WITH([ocf], ) AC_SUBST(OCF_SUBDIR) +AC_ARG_WITH([server], + [AS_HELP_STRING([--without-server], [do not build server components])], + [with_server='no'], + [with_server='yes'], + ) +AM_CONDITIONAL([WITH_SERVER], [test x$with_server = xyes]) + # LEX needs a check AC_PROG_LEX if test "x${LEX}" != "xflex" -a "x${FLEX}" != "xlex"; then @@ -387,34 +543,61 @@ AC_CHECK_HEADERS([sys/ioctl.h], AC_DEFINE(HAVE_IOCTL_IN_SYS_IOCTL_H, 1, [have sy AC_CHECK_HEADERS([sys/extattr.h]) +AC_CHECK_HEADERS([openssl/dh.h]) + +AC_CHECK_HEADERS([openssl/ecdh.h]) + +AC_CHECK_LIB([ssl], [SSL_CTX_get0_param], [AC_DEFINE([HAVE_SSL_CTX_GET0_PARAM], [1], [define if found OpenSSL SSL_CTX_get0_param])]) + dnl Math library -case $host_os in - linux*) - MATH_LIB='' - ;; - *) - MATH_LIB='-lm' - ;; -esac +AC_CHECK_LIB([m], [pow], [MATH_LIB='-lm'], [MATH_LIB='']) AC_SUBST(MATH_LIB) -dnl use libuuid.so or fall-back to contrib/uuid +dnl depend on libuuid.so PKG_CHECK_MODULES([UUID], [uuid], - [HAVE_LIBUUID=yes + [have_uuid=yes AC_DEFINE(HAVE_LIBUUID, 1, [have libuuid.so]) PKGCONFIG_UUID=uuid], - [HAVE_LIBUUID=no - UUID_CFLAGS='-I$(CONTRIBDIR)/uuid']) -AM_CONDITIONAL([HAVE_LIBUUID], [test x$HAVE_LIBUUID = xyes]) + [have_uuid=no]) +AM_CONDITIONAL([HAVE_LIBUUID], [test x$have_uuid = xyes]) + +dnl older version of libuuid (from e2fsprogs) require including uuid/uuid.h +saved_CFLAGS=${CFLAGS} +CFLAGS="${CFLAGS} ${UUID_CFLAGS}" +AC_CHECK_HEADER([uuid.h], [], [AC_CHECK_HEADER([uuid/uuid.h])], + [[#if HAVE_UUID_H + #include <uuid.h> + #endif + ]]) +CFLAGS=${saved_CFLAGS} +if test "x$ac_cv_header_uuid_uuid_h" = "xyes"; then + UUID_CFLAGS="${UUID_CFLAGS} -I$(pkg-config --variable=includedir uuid)/uuid" + have_uuid=yes +fi + +if test "x$have_uuid" != "xyes"; then + case $host_os in + *freebsd*) + AC_MSG_ERROR([e2fsprogs-libuuid is required to build glusterfs]) + ;; + linux*) + AC_MSG_ERROR([libuuid is required to build glusterfs]) + ;; + *) + AC_MSG_ERROR([a Linux compatible libuuid is required to build glusterfs]) + ;; + esac +fi + dnl libglusterfs needs uuid.h, practically everything depends on it -GF_CPPFLAGS="${GF_CPPFLAGS} ${UUID_CFLAGS}" +GF_CFLAGS="${GF_CFLAGS} ${UUID_CFLAGS}" dnl PKGCONFIG_UUID is used for the dependency in *.pc.in files AC_SUBST(PKGCONFIG_UUID) dnl NetBSD does not support POSIX ACLs :-( case $host_os in - *netbsd*) - AC_MSG_WARN([NetBSD does not support POSIX ACLs... disabling them]) + *netbsd* | darwin*) + AC_MSG_WARN([platform does not support POSIX ACLs... disabling them]) ACL_LIBS='' USE_POSIX_ACLS='0' BUILD_POSIX_ACLS='no' @@ -453,6 +636,8 @@ AC_SUBST(ZLIB_LIBS) AC_CHECK_HEADERS([linux/falloc.h]) +AC_CHECK_HEADERS([linux/oom.h], AC_DEFINE(HAVE_LINUX_OOM_H, 1, [have linux/oom.h])) + dnl Mac OS X does not have spinlocks AC_CHECK_FUNC([pthread_spin_init], [have_spinlock=yes]) if test "x${have_spinlock}" = "xyes"; then @@ -482,6 +667,57 @@ if test "x${have_umount2}" = "xyes"; then AC_DEFINE(HAVE_UMOUNT2, 1, [define if found umount2]) fi +dnl Check Python Availability +have_python=no +dnl if the user has not specified a python, pick one +if test -z "${PYTHON}"; then + case $host_os in + freebsd*) + if test -x /usr/local/bin/python3; then + PYTHON=/usr/local/bin/python3 + else + PYTHON=/usr/local/bin/python2 + fi + ;; + *) + if test -x /usr/bin/python3; then + PYTHON=/usr/bin/python3 + else + PYTHON=/usr/bin/python2 + fi + ;; + esac +fi +AM_PATH_PYTHON([2.6],,[:]) +if test -n "${PYTHON}"; then + have_python=yes +fi +AM_CONDITIONAL(HAVE_PYTHON, test "x$have_python" = "xyes") + +dnl Use pkg-config to get runtime search path missing from ${PYTHON}-config +dnl Just do "true" on failure so that configure does not bail out +dnl Note: python 2.6's devel pkg (e.g. in CentOS/RHEL 6) does not have +dnl pkg-config files, so this work-around instead +if test "x${PYTHON_VERSION}" = "x2.6"; then + PYTHON_CFLAGS=$(python-config --includes) + PYTHON_LIBS=$(python-config --libs) +else + PKG_CHECK_MODULES([PYTHON], "python-${PYTHON_VERSION}",,true) +fi + +PYTHON_CFLAGS=$(echo ${PYTHON_CFLAGS} | sed -e 's|-I|-isystem |') + +BUILD_PYTHON_SITE_PACKAGES=${pythondir} +AC_SUBST(BUILD_PYTHON_SITE_PACKAGES) + +# Eval two times to expand fully. First eval replaces $exec_prefix into $prefix +# Second eval will expand $prefix +build_python_site_packages_temp="${pythondir}" +eval build_python_site_packages_temp=\"${build_python_site_packages_temp}\" +eval build_python_site_packages_temp=\"${build_python_site_packages_temp}\" +BUILD_PYTHON_SITE_PACKAGES_EXPANDED=${build_python_site_packages_temp} +AC_SUBST(BUILD_PYTHON_SITE_PACKAGES_EXPANDED) + # FUSE section AC_ARG_ENABLE([fuse-client], AC_HELP_STRING([--disable-fuse-client], @@ -493,65 +729,25 @@ if test "x$enable_fuse_client" != "xno"; then BUILD_FUSE_CLIENT="yes" fi -AC_ARG_ENABLE([bd-xlator], - AC_HELP_STRING([--enable-bd-xlator], [Build BD xlator])) - -if test "x$enable_bd_xlator" != "xno"; then - AC_CHECK_LIB([lvm2app], - [lvm_init,lvm_lv_from_name], - [HAVE_BD_LIB="yes"], - [HAVE_BD_LIB="no"]) - -if test "x$HAVE_BD_LIB" = "xyes"; then - # lvm_lv_from_name() has been made public with lvm2-2.02.79 - AC_CHECK_DECLS( - [lvm_lv_from_name], - [NEED_LVM_LV_FROM_NAME_DECL="no"], - [NEED_LVM_LV_FROM_NAME_DECL="yes"], - [[#include <lvm2app.h>]]) - fi -fi - -if test "x$enable_bd_xlator" = "xyes" -a "x$HAVE_BD_LIB" = "xno"; then - echo "BD xlator requested but required lvm2 development library not found." - exit 1 -fi - -BUILD_BD_XLATOR=no -if test "x${enable-bd-xlator}" != "xno" -a "x${HAVE_BD_LIB}" = "xyes"; then - BUILD_BD_XLATOR=yes - AC_DEFINE(HAVE_BD_XLATOR, 1, [define if lvm2app library found and bd xlator - enabled]) - if test "x$NEED_LVM_LV_FROM_NAME_DECL" = "xyes"; then - AC_DEFINE(NEED_LVM_LV_FROM_NAME_DECL, 1, [defined if lvm_lv_from_name() - was not found in the lvm2app.h header, but can be linked]) - fi -fi - -AM_CONDITIONAL([ENABLE_BD_XLATOR], [test x$BUILD_BD_XLATOR = xyes]) +AC_SUBST(FUSE_CLIENT_SUBDIR) -# start encryption/crypt section +AC_ARG_ENABLE([fuse-notifications], + AS_HELP_STRING([--disable-fuse-notifications], [Disable FUSE notifications])) -AC_CHECK_HEADERS([openssl/cmac.h], [have_cmac_h=yes], [have_cmac_h=no]) +AS_IF([test "x$enable_fuse_notifications" != "xno"], [ + AC_DEFINE([HAVE_FUSE_NOTIFICATIONS], [1], [Use FUSE notifications]) +]) -AC_ARG_ENABLE([crypt-xlator], - AC_HELP_STRING([--enable-crypt-xlator], [Build crypt encryption xlator])) +# end FUSE section -if test "x$enable_crypt_xlator" = "xyes" -a "x$have_cmac_h" = "xno"; then - AC_MSG_ERROR([Encryption xlator requires OpenSSL with cmac.h]) -fi -BUILD_CRYPT_XLATOR=no -if test "x$enable_crypt_xlator" != "xno" -a "x$have_cmac_h" = "xyes"; then - BUILD_CRYPT_XLATOR=yes - AC_DEFINE(HAVE_CRYPT_XLATOR, 1, [enable building crypt encryption xlator]) +AC_CHECK_LIB([ssl], TLS_method, [HAVE_OPENSSL_1_1="yes"], [HAVE_OPENSSL_1_1="no"]) +if test "x$HAVE_OPENSSL_1_1" = "xyes"; then + AC_DEFINE([HAVE_TLS_METHOD], [1], [Using OpenSSL-1.1 TLS_method]) +else + AC_CHECK_LIB([ssl], TLSv1_2_method, [AC_DEFINE([HAVE_TLSV1_2_METHOD], [1], [Using OpenSSL-1.0 TLSv1_2_method])]) fi -AM_CONDITIONAL([ENABLE_CRYPT_XLATOR], [test x$BUILD_CRYPT_XLATOR = xyes]) - -AC_SUBST(FUSE_CLIENT_SUBDIR) -# end FUSE section - # FUSERMOUNT section AC_ARG_ENABLE([fusermount], @@ -569,33 +765,6 @@ fi AC_SUBST(FUSERMOUNT_SUBDIR) #end FUSERMOUNT section -# QEMU_BLOCK section - -AC_ARG_ENABLE([qemu-block], - AC_HELP_STRING([--enable-qemu-block], - [Build QEMU Block formats translator])) - -if test "x$enable_qemu_block" != "xno"; then - PKG_CHECK_MODULES([GLIB], [glib-2.0], - [HAVE_GLIB_2="yes"], - [HAVE_GLIB_2="no"]) -fi - -if test "x$enable_qemu_block" = "xyes" -a "x$HAVE_GLIB_2" = "xno"; then - echo "QEMU Block formats translator requires libglib-2.0, but missing." - exit 1 -fi - -BUILD_QEMU_BLOCK=no -if test "x${enable_qemu_block}" != "xno" -a "x${HAVE_GLIB_2}" = "xyes"; then - BUILD_QEMU_BLOCK=yes - AC_DEFINE(HAVE_QEMU_BLOCK, 1, [define if libglib-2.0 library found and QEMU - Block translator enabled]) -fi - - -# end QEMU_BLOCK section - # EPOLL section AC_ARG_ENABLE([epoll], AC_HELP_STRING([--disable-epoll], @@ -609,53 +778,6 @@ if test "x$enable_epoll" != "xno"; then fi # end EPOLL section - -# IBVERBS section -AC_ARG_ENABLE([ibverbs], - AC_HELP_STRING([--disable-ibverbs], - [Do not build the ibverbs transport])) - -if test "x$enable_ibverbs" != "xno"; then - AC_CHECK_LIB([ibverbs], - [ibv_get_device_list], - [HAVE_LIBIBVERBS="yes"], - [HAVE_LIBIBVERBS="no"]) - AC_CHECK_LIB([rdmacm], [rdma_create_id], [HAVE_RDMACM="yes"], [HAVE_RDMACM="no"]) - if test "x$HAVE_RDMACM" = "xyes" ; then - AC_CHECK_DECLS( - [RDMA_OPTION_ID_REUSEADDR], - [], - [AC_ERROR([Need at least version 1.0.15 of librdmacm])], - [[#include <rdma/rdma_cma.h>]]) - fi -fi - -if test "x$enable_ibverbs" = "xyes"; then - if test "x$HAVE_LIBIBVERBS" = "xno"; then - echo "ibverbs-transport requested, but libibverbs is not present." - exit 1 - fi - - if test "x$HAVE_RDMACM" = "xno"; then - echo "ibverbs-transport requested, but librdmacm is not present." - exit 1 - fi -fi - -BUILD_RDMA=no -BUILD_IBVERBS=no -if test "x$enable_ibverbs" != "xno" -a "x$HAVE_LIBIBVERBS" = "xyes" -a "x$HAVE_RDMACM" = "xyes"; then - IBVERBS_SUBDIR=ib-verbs - BUILD_IBVERBS=yes - RDMA_SUBDIR=rdma - BUILD_RDMA=yes -fi - -AC_SUBST(IBVERBS_SUBDIR) -AC_SUBST(RDMA_SUBDIR) -# end IBVERBS section - - # SYNCDAEMON section AC_ARG_ENABLE([georeplication], AC_HELP_STRING([--disable-georeplication], @@ -663,6 +785,9 @@ AC_ARG_ENABLE([georeplication], BUILD_SYNCDAEMON=no case $host_os in + freebsd*) +#do nothing + ;; linux*) #do nothing ;; @@ -675,25 +800,20 @@ case $host_os in ;; esac SYNCDAEMON_COMPILE=0 -if test "x$enable_georeplication" != "xno"; then - SYNCDAEMON_SUBDIR=geo-replication - SYNCDAEMON_COMPILE=1 - - BUILD_SYNCDAEMON="yes" - AM_PATH_PYTHON([2.4]) - echo -n "checking if python is python 2.x... " - if echo $PYTHON_VERSION | grep ^2; then - : +if test "x${with_server}" = "xyes" -a "x${enable_georeplication}" != "xno"; then + if test "x${have_python}" = "xno" ; then + AC_MSG_ERROR([only python 2 and 3 are supported]) else - echo no - AC_MSG_ERROR([only python 2.x is supported]) - fi - echo -n "checking if python has ctypes support... " - if "$PYTHON" -c 'import ctypes' 2>/dev/null; then - echo yes - else - echo no - AC_MSG_ERROR([python does not have ctypes support]) + SYNCDAEMON_SUBDIR=geo-replication + SYNCDAEMON_COMPILE=1 + + BUILD_SYNCDAEMON="yes" + AC_MSG_CHECKING([if python has ctypes support...]) + if "${PYTHON}" -c 'import ctypes' 2>/dev/null; then + AC_MSG_RESULT("yes") + else + AC_MSG_ERROR([python does not have ctypes support]) + fi fi fi AC_SUBST(SYNCDAEMON_COMPILE) @@ -701,10 +821,53 @@ AC_SUBST(SYNCDAEMON_SUBDIR) # end SYNCDAEMON section # only install scripts from extras/geo-rep when enabled -if test "x$enable_georeplication" != "xno"; then +if test "x${with_server}" = "xyes" -a "x$enable_georeplication" != "xno"; then GEOREP_EXTRAS_SUBDIR=geo-rep fi AC_SUBST(GEOREP_EXTRAS_SUBDIR) +AM_CONDITIONAL(USE_GEOREP, test "x$enable_georeplication" != "xno") + +# METADISP section +AC_ARG_ENABLE([metadisp], + AC_HELP_STRING([--enable-metadisp], + [Enable the metadata dispersal xlator])) +BUILD_METADISP=no +if test "x${enable_metadisp}" = "xyes"; then + BUILD_METADISP=yes +fi +AM_CONDITIONAL([BUILD_METADISP], [test "x$BUILD_METADISP" = "xyes"]) +# end METADISP section + +# Events section +AC_ARG_ENABLE([events], + AC_HELP_STRING([--disable-events], + [Do not install Events components])) + +BUILD_EVENTS=no +EVENTS_ENABLED=0 +EVENTS_SUBDIR= +if test "x$enable_events" != "xno"; then + EVENTS_SUBDIR=events + EVENTS_ENABLED=1 + + BUILD_EVENTS="yes" + + if test "x${have_python}" = "xno"; then + if test "x${enable_events}" = "xyes"; then + AC_MSG_ERROR([python 2 or 3 required. exiting.]) + fi + AC_MSG_WARN([python not found, disabling events]) + EVENTS_SUBDIR= + EVENTS_ENABLED=0 + BUILD_EVENTS="no" + else + AC_DEFINE(USE_EVENTS, 1, [define if events enabled]) + fi +fi +AC_SUBST(EVENTS_ENABLED) +AC_SUBST(EVENTS_SUBDIR) +AM_CONDITIONAL([BUILD_EVENTS], [test "x${BUILD_EVENTS}" = "xyes"]) +# end Events section # CDC xlator - check if libz is present if so enable HAVE_LIB_Z BUILD_CDC=yes @@ -722,56 +885,21 @@ AC_SUBST(ZLIB_CFLAGS) AC_SUBST(ZLIB_LIBS) # end CDC xlator secion -# Data tiering requires sqlite -AC_ARG_ENABLE([tiering], - AC_HELP_STRING([--disable-tiering], - [Disable data classification/tiering]), - [BUILD_GFDB="${enableval}"], [BUILD_GFDB="yes"]) - -if test "x${BUILD_GFDB}" = "xyes"; then - PKG_CHECK_MODULES([SQLITE], [sqlite3], - AC_DEFINE(USE_GFDB, 1), - AC_MSG_ERROR([pass --disable-tiering to build without sqlite])) -else - AC_DEFINE(USE_GFDB, 0, [no sqlite, gfdb is disabled]) -fi - -AC_SUBST(SQLITE_CFLAGS) -AC_SUBST(SQLITE_LIBS) -AM_CONDITIONAL(BUILD_GFDB, test "x${BUILD_GFDB}" = "xyes") -AM_CONDITIONAL(USE_GFDB, test "x${BUILD_GFDB}" = "xyes") - -# check for systemtap/dtrace -BUILD_SYSTEMTAP=no -AC_MSG_CHECKING([whether to include systemtap tracing support]) -AC_ARG_ENABLE([systemtap], - [AS_HELP_STRING([--enable-systemtap], - [Enable inclusion of systemtap trace support])], - [ENABLE_SYSTEMTAP="${enableval}"], [ENABLE_SYSTEMTAP="def"]) - -AM_CONDITIONAL([ENABLE_SYSTEMTAP], [test "x${ENABLE_SYSTEMTAP}" = "xyes"]) -AC_MSG_RESULT(${ENABLE_SYSTEMTAP}) - -if test "x${ENABLE_SYSTEMTAP}" != "xno"; then - AC_CHECK_PROG(DTRACE, dtrace, "yes", "no") - AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND="yes"], - [SDT_H_FOUND="no"]) -fi +#start firewalld section +BUILD_FIREWALLD="no" +AC_ARG_ENABLE([firewalld], + AC_HELP_STRING([--enable-firewalld], + [enable installation configuration for firewalld]), + [BUILD_FIREWALLD="${enableval}"], [BUILD_FIREWALLD="no"]) -if test "x${ENABLE_SYSTEMTAP}" = "xyes"; then - if test "x${DTRACE}" = "xno"; then - AC_MSG_ERROR([dtrace not found]) - elif test "$x{SDT_H_FOUND}" = "xno"; then - AC_MSG_ERROR([systemtap support needs sys/sdt.h header]) - fi +if test "x${with_server}" = "xyes" -a "x${BUILD_FIREWALLD}" = "xyes"; then + if !(test -d /usr/lib/firewalld/services 1>/dev/null 2>&1) ; then + BUILD_FIREWALLD="no (firewalld not installed)" + fi fi +AM_CONDITIONAL([USE_FIREWALLD],test ["x${BUILD_FIREWALLD}" = "xyes"]) -if test "x${DTRACE}" = "xyes" -a "x${SDT_H_FOUND}" = "xyes"; then - AC_MSG_CHECKING([x"${DTRACE}"xy"${SDT_H_FOUND}"y]) - AC_DEFINE([HAVE_SYSTEMTAP], [1], [Define to 1 if using probes.]) - BUILD_SYSTEMTAP=yes -fi -# end of systemtap/dtrace +#endof firewald section # xml-output AC_ARG_ENABLE([xml-output], @@ -779,8 +907,7 @@ AC_ARG_ENABLE([xml-output], [Disable the xml output])) BUILD_XML_OUTPUT="yes" if test "x$enable_xml_output" != "xno"; then - #check if libxml is present if so enable HAVE_LIB_XML - m4_ifdef([AM_PATH_XML2],[AM_PATH_XML2([2.6.19])], [no_xml=yes]) + PKG_CHECK_MODULES([XML], [libxml-2.0], [], [no_xml="yes"]) if test "x${no_xml}" = "x"; then AC_DEFINE([HAVE_LIB_XML], [1], [Define to 1 if using libxml2.]) else @@ -800,27 +927,86 @@ else fi # end of xml-output +dnl cloudsync section +BUILD_CLOUDSYNC="no" +AC_CHECK_LIB([curl], [curl_easy_setopt], [LIBCURL="-lcurl"]) +if test -n "$LIBCURL";then + HAVE_LIBCURL="yes" +fi +AC_CHECK_HEADERS([openssl/hmac.h openssl/evp.h openssl/bio.h openssl/buffer.h], [HAVE_OPENSSL="yes"]) +if test "x$HAVE_LIBCURL" = "xyes" -a "x$HAVE_OPENSSL" = "xyes";then + HAVE_AMAZONS3="yes" +fi +AM_CONDITIONAL([BUILD_AMAZONS3_PLUGIN], [test "x$HAVE_AMAZONS3" = "xyes"]) +if test "x$HAVE_AMAZONS3" = "xyes";then + BUILD_CLOUDSYNC="yes" +fi +BUILD_CVLT_PLUGIN="no" +case $host_os in +#enable cvlt plugin only for linux platforms + linux*) + BUILD_CVLT_PLUGIN="yes" + BUILD_CLOUDSYNC="yes" + ;; + *) + ;; +esac +AM_CONDITIONAL([BUILD_CVLT_PLUGIN], [test "x$BUILD_CVLT_PLUGIN" = "xyes"]) +AM_CONDITIONAL([BUILD_CLOUDSYNC], [test "x$BUILD_CLOUDSYNC" = "xyes"]) +dnl end cloudsync section + +dnl SELinux feature enablement +case $host_os in + linux*) + AC_ARG_ENABLE([selinux], + AC_HELP_STRING([--disable-selinux], + [Disable SELinux features]), + [USE_SELINUX="${enableval}"], [USE_SELINUX="yes"]) + ;; + *) + USE_SELINUX=no + ;; +esac +AM_CONDITIONAL(USE_SELINUX, test "x${USE_SELINUX}" = "xyes") +dnl end of SELinux feature enablement + AC_CHECK_HEADERS([execinfo.h], [have_backtrace=yes]) if test "x${have_backtrace}" = "xyes"; then AC_DEFINE(HAVE_BACKTRACE, 1, [define if found backtrace]) fi AC_SUBST(HAVE_BACKTRACE) +dnl Old (before C11) compiler can compile (but not link) this: +dnl +dnl int main () { +dnl _Static_assert(1, "True"); +dnl return 0; +dnl } +dnl +dnl assuming that _Static_assert is an implicitly declared function. So +dnl we're trying to link just to make sure that this is not the case. + +AC_MSG_CHECKING([whether $CC supports C11 _Static_assert]) +AC_TRY_LINK([], [_Static_assert(1, "True");], + [STATIC_ASSERT=yes], [STATIC_ASSERT=no]) + +AC_MSG_RESULT([$STATIC_ASSERT]) +if test x$STATIC_ASSERT = "xyes"; then + AC_DEFINE(HAVE_STATIC_ASSERT, 1, [Define if C11 _Static_assert is supported.]) +fi + if test "x${have_backtrace}" != "xyes"; then AC_TRY_COMPILE([#include <math.h>], [double x=0.0; x=ceil(0.0);], - [have_math_h=yes], + [], AC_MSG_ERROR([need math library for libexecinfo])) -if test "x${have_math_h}" = "xyes"; then - LIBS="$LIBS -lm" -fi fi dnl glusterfs prints memory usage to stderr by sending it SIGUSR1 -AC_CHECK_FUNC([malloc_stats], [have_malloc_stats=yes]) -if test "x${have_malloc_stats}" = "xyes"; then - AC_DEFINE(HAVE_MALLOC_STATS, 1, [define if found malloc_stats]) +AC_CHECK_FUNC([mallinfo], [have_mallinfo=yes]) +if test "x${have_mallinfo}" = "xyes"; then + AC_DEFINE(HAVE_MALLINFO, 1, [define if found mallinfo]) fi -AC_SUBST(HAVE_MALLOC_STATS) +AC_SUBST(HAVE_MALLINFO) dnl Linux, Solaris, Cygwin AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec]) @@ -828,7 +1014,7 @@ dnl FreeBSD, NetBSD AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec]) case $host_os in *netbsd*) - CFLAGS="${CFLAGS} -D_INCOMPLETE_XOPEN_C063 -DCONFIG_MACHINE_BSWAP_H" + GF_CFLAGS="${GF_CFLAGS} -D_INCOMPLETE_XOPEN_C063 -DCONFIG_MACHINE_BSWAP_H" ;; esac AC_CHECK_FUNC([linkat], [have_linkat=yes]) @@ -841,24 +1027,42 @@ dnl check for Monotonic clock AC_CHECK_LIB([rt], [clock_gettime], , AC_MSG_WARN([System doesn't have monotonic clock using contrib])) -dnl Check for argp +dnl check for argp, FreeBSD has the header in /usr/local/include +case $host_os in + *freebsd*) + CFLAGS="${CFLAGS} -isystem /usr/local/include" + ARGP_LDADD=-largp + ;; + *netbsd*) + ARGP_LDADD=-largp + ;; +esac +dnl argp-standalone does not provide a pkg-config file AC_CHECK_HEADER([argp.h], AC_DEFINE(HAVE_ARGP, 1, [have argp])) - -BUILD_ARGP_STANDALONE=no -if test "x${ac_cv_header_argp_h}" = "xno"; then - AC_CONFIG_SUBDIRS(contrib/argp-standalone) - BUILD_ARGP_STANDALONE=yes - ARGP_STANDALONE_CPPFLAGS='-I${top_srcdir}/contrib/argp-standalone' - ARGP_STANDALONE_LDADD='${top_builddir}/contrib/argp-standalone/libargp.a' - ARGP_STANDALONE_DIR='${top_builddir}/contrib/argp-standalone' +if test "x$ac_cv_header_argp_h" != "xyes"; then + AC_MSG_ERROR([argp.h not found, install libargp or argp-standalone]) fi - -dnl libglusterfs needs argp.h, practically everything depends on it -GF_CPPFLAGS="${GF_CPPFLAGS} ${ARGP_STANDALONE_CPPFLAGS}" - -AC_SUBST(ARGP_STANDALONE_CPPFLAGS) -AC_SUBST(ARGP_STANDALONE_LDADD) -AC_SUBST(ARGP_STANDALONE_DIR) +AC_SUBST(ARGP_LDADD) + +dnl Check for atomic operation support +AC_MSG_CHECKING([for gcc __atomic builtins]) +AC_TRY_LINK([], [int v; __atomic_load_n(&v, __ATOMIC_ACQUIRE);], + [have_atomic_builtins=yes], [have_atomic_builtins=no]) +if test "x${have_atomic_builtins}" = "xyes"; then + AC_DEFINE(HAVE_ATOMIC_BUILTINS, 1, [define if __atomic_*() builtins are available]) +fi +AC_SUBST(HAVE_ATOMIC_BUILTINS) +AC_MSG_RESULT([$have_atomic_builtins]) + +dnl __sync_*() will not be needed if __atomic_*() is available +AC_MSG_CHECKING([for gcc __sync builtins]) +AC_TRY_LINK([], [__sync_synchronize();], + [have_sync_builtins=yes], [have_sync_builtins=no]) +if test "x${have_sync_builtins}" = "xyes"; then + AC_DEFINE(HAVE_SYNC_BUILTINS, 1, [define if __sync_*() builtins are available]) +fi +AC_SUBST(HAVE_SYNC_BUILTINS) +AC_MSG_RESULT([$have_sync_builtins]) AC_CHECK_HEADER([malloc.h], AC_DEFINE(HAVE_MALLOC_H, 1, [have malloc.h])) @@ -882,6 +1086,63 @@ if test "x${have_posix_fallocate}" = "xyes"; then AC_DEFINE(HAVE_POSIX_FALLOCATE, 1, [define if posix_fallocate exists]) fi +# On fedora-29, copy_file_range syscall and the libc API both are present. +# Whereas, on some machines such as centos-7, RHEL-7, the API is not there. +# Only the system call is present. So, this change is to determine whether +# the API is present or not. If not, then check whether the system call is +# present or not. Accordingly sys_copy_file_range function will first call +# the API if it is there. Otherwise it will call syscall(SYS_copy_file_range). +AC_CHECK_FUNC([copy_file_range], [have_copy_file_range=yes]) +if test "x${have_copy_file_range}" = "xyes"; then + AC_DEFINE(HAVE_COPY_FILE_RANGE, 1, [define if copy_file_range exists]) +else + OLD_CFLAGS=${CFLAGS} + CFLAGS="-D_GNU_SOURCE" + AC_CHECK_DECL([SYS_copy_file_range], , , [#include <sys/syscall.h>]) + if test "x${ac_cv_have_decl_SYS_copy_file_range}" = "xyes"; then + AC_DEFINE(HAVE_COPY_FILE_RANGE_SYS, 1, [define if SYS_copy_file_range is available]) + fi + CFLAGS=${OLD_CFLAGS} +fi + +AC_CHECK_FUNC([syncfs], [have_syncfs=yes]) +if test "x${have_syncfs}" = "xyes"; then + AC_DEFINE(HAVE_SYNCFS, 1, [define if syncfs exists]) +else + OLD_CFLAGS=${CFLAGS} + CFLAGS="-D_GNU_SOURCE" + AC_CHECK_DECL([SYS_syncfs], , , [#include <sys/syscall.h>]) + if test "x${ac_cv_have_decl_SYS_syncfs}" = "xyes"; then + AC_DEFINE(HAVE_SYNCFS_SYS, 1, [define if SYS_syncfs is available]) + fi + CFLAGS=${OLD_CFLAGS} +fi + +BUILD_NANOSECOND_TIMESTAMPS=no +AC_CHECK_FUNC([utimensat], [have_utimensat=yes]) +if test "x${have_utimensat}" = "xyes"; then + BUILD_NANOSECOND_TIMESTAMPS=yes + AC_DEFINE(HAVE_UTIMENSAT, 1, [define if utimensat exists]) +fi + +OLD_CFLAGS=${CFLAGS} +CFLAGS="-D_GNU_SOURCE" +AC_CHECK_DECL([SEEK_HOLE], , , [#include <unistd.h>]) +if test "x${ac_cv_have_decl_SEEK_HOLE}" = "xyes"; then + AC_DEFINE(HAVE_SEEK_HOLE, 1, [define if SEEK_HOLE is available]) +fi +CFLAGS=${OLD_CFLAGS} + +AC_CHECK_FUNC([accept4], [have_accept4=yes]) +if test "x${have_accept4}" = "xyes"; then + AC_DEFINE(HAVE_ACCEPT4, 1, [define if accept4 exists]) +fi + +AC_CHECK_FUNC([paccept], [have_paccept=yes]) +if test "x${have_paccept}" = "xyes"; then +AC_DEFINE(HAVE_PACCEPT, 1, [define if paccept exists]) +fi + # Check the distribution where you are compiling glusterfs on GF_DISTRIBUTION= @@ -902,30 +1163,56 @@ fi AC_SUBST(GF_DISTRIBUTION) GF_HOST_OS="" -GF_LDFLAGS="-rdynamic" +GF_LDFLAGS="${GF_LDFLAGS} -rdynamic" + +dnl see --with-libtirpc option check above, libtirpc(-devel) is required for +dnl ipv6-default +if test "x${with_libtirpc}" = "xyes" || test "x${with_ipv6_default}" = "xyes" ; then + PKG_CHECK_MODULES([TIRPC], [libtirpc], + [with_libtirpc="yes"; GF_CFLAGS="$GF_CFLAGS $TIRPC_CFLAGS"; GF_LDFLAGS="$GF_LDFLAGS $TIRPC_LIBS";], + [with_libtirpc="missing"; with_ipv6_default="no"]) +fi + +if test "x${with_libtirpc}" = "xmissing" ; then + AC_CHECK_HEADERS([rpc/rpc.h],[ + AC_MSG_WARN([ + --------------------------------------------------------------------------------- + libtirpc (and/or ipv6-default) were enabled but libtirpc-devel is not installed. + Disabling libtirpc and ipv6-default and falling back to legacy glibc rpc headers. + This is a transitional warning message. Eventually it will be an error message. + ---------------------------------------------------------------------------------])],[ + AC_MSG_ERROR([ + --------------------------------------------------------------------------------- + libtirpc (and/or ipv6-default) were enabled but libtirpc-devel is not installed + and there were no legacy glibc rpc headers and library to fall back to. + ---------------------------------------------------------------------------------])]) +fi + +if test "x$with_ipv6_default" = "xyes" ; then + GF_CFLAGS="$GF_CFLAGS -DIPV6_DEFAULT" +fi dnl check for gcc -Werror=format-security -saved_GF_CFLAGS="-Wformat -Werror=format-security" +saved_CFLAGS=$CFLAGS +CFLAGS="-Wformat -Werror=format-security" AC_MSG_CHECKING([whether $CC accepts -Werror=format-security]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [cc_werror_format_security=yes], [cc_werror_format_security=no]) echo $cc_werror_format_security -if test "x$cc_werror_format_security" = "xno"; then - GF_CFLAGS="$GF_CFLAGS" -else - GF_CFLAGS="$saved_GF_CFLAGS $GF_CFLAGS" +if test "x$cc_werror_format_security" = "xyes"; then + GF_CFLAGS="$GF_CFLAGS ${CFLAGS}" fi +CFLAGS="$saved_CFLAGS" dnl check for gcc -Werror=implicit-function-declaration -saved_GF_CFLAGS=$GF_CFLAGS -GF_CFLAGS="-Werror=implicit-function-declaration" +saved_CFLAGS=$CFLAGS +CFLAGS="-Werror=implicit-function-declaration" AC_MSG_CHECKING([whether $CC accepts -Werror=implicit-function-declaration]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [cc_werror_implicit=yes], [cc_werror_implicit=no]) echo $cc_werror_implicit -if test "x$cc_werror_implicit" = "xno"; then - GF_CFLAGS="$saved_GF_CFLAGS" -else - GF_CFLAGS="$saved_GF_CFLAGS $GF_CFLAGS" +if test "x$cc_werror_implicit" = "xyes"; then + GF_CFLAGS="${GF_CFLAGS} ${CFLAGS}" fi +CFLAGS="$saved_CFLAGS" dnl clang is mostly GCC-compatible, but its version is much lower, dnl so we have to check for it. @@ -962,20 +1249,25 @@ fi old_prefix=$prefix if test "x$prefix" = xNONE; then - prefix=$ac_default_prefix + prefix=$ac_default_prefix +fi +old_exec_prefix=$exec_prefix +if test "x$exec_prefix" = xNONE; then + exec_prefix="$(eval echo $prefix)" fi -GLUSTERFS_LIBEXECDIR="$(eval echo $prefix)/libexec/glusterfs" -GLUSTERFSD_MISCDIR="$(eval echo $prefix)/var/lib/misc/glusterfsd" +GLUSTERFS_LIBEXECDIR="$(eval echo $libexecdir)/glusterfs" prefix=$old_prefix +exec_prefix=$old_exec_prefix ### Dirty hacky stuff to make LOCALSTATEDIR work if test "x$prefix" = xNONE; then test $localstatedir = '${prefix}/var' && localstatedir=$ac_default_prefix/var localstatedir=/var - LOCALSTATEDIR=$(eval echo ${localstatedir}) -else - LOCALSTATEDIR=$(eval echo ${localstatedir}) fi +localstatedir="$(eval echo ${localstatedir})" +LOCALSTATEDIR=$localstatedir + +GLUSTERFSD_MISCDIR="$(eval echo ${localstatedir})/lib/misc/glusterfsd" old_prefix=$prefix if test "x$prefix" = xNONE; then @@ -985,6 +1277,7 @@ GLUSTERD_VOLFILE="$(eval echo ${sysconfdir})/glusterfs/glusterd.vol" prefix=$old_prefix +GFAPI_EXTRA_LDFLAGS='-Wl,--version-script=$(top_srcdir)/api/src/gfapi.map' case $host_os in linux*) GF_HOST_OS="GF_LINUX_HOST_OS" @@ -1004,9 +1297,9 @@ case $host_os in GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_BASENAME" GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_DIRNAME" GF_FUSE_CFLAGS="-DFUSERMOUNT_DIR=\\\"\$(sbindir)\\\"" - GF_LDADD="${ARGP_STANDALONE_LDADD}" + GF_LDADD="${ARGP_LDADD}" if test "x$ac_cv_header_execinfo_h" = "xyes"; then - GF_LDFLAGS="-lexecinfo" + GF_LDFLAGS="${GF_LDFLAGS} -lexecinfo" fi GF_FUSE_LDADD="-lperfuse" BUILD_FUSE_CLIENT=yes @@ -1017,17 +1310,13 @@ case $host_os in ;; *freebsd*) GF_HOST_OS="GF_BSD_HOST_OS" - GF_CFLAGS="${GF_CFLAGS} ${ARGP_STANDALONE_CPPFLAGS} -O0" - GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_BASENAME" - GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_DIRNAME" - GF_CFLAGS="${GF_CFLAGS} -D_LIBGEN_H_" GF_CFLAGS="${GF_CFLAGS} -DO_DSYNC=0" GF_CFLAGS="${GF_CFLAGS} -Dxdr_quad_t=xdr_longlong_t" GF_CFLAGS="${GF_CFLAGS} -Dxdr_u_quad_t=xdr_u_longlong_t" GF_FUSE_CFLAGS="-DFUSERMOUNT_DIR=\\\"\$(sbindir)\\\"" - GF_LDADD="${ARGP_STANDALONE_LDADD}" + GF_LDADD="${ARGP_LDADD}" if test "x$ac_cv_header_execinfo_h" = "xyes"; then - GF_LDFLAGS="-lexecinfo" + GF_LDFLAGS="${GF_LDFLAGS} -lexecinfo" fi BUILD_FUSE_CLIENT=yes BUILD_FUSERMOUNT=no @@ -1037,29 +1326,41 @@ case $host_os in darwin*) GF_HOST_OS="GF_DARWIN_HOST_OS" LIBTOOL=glibtool - GF_CFLAGS="${GF_CFLAGS} ${ARGP_STANDALONE_CPPFLAGS} " GF_CFLAGS="${GF_CFLAGS} -D_REENTRANT -D_XOPEN_SOURCE " GF_CFLAGS="${GF_CFLAGS} -D_DARWIN_USE_64_BIT_INODE " GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_BASENAME" GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_DIRNAME" - GF_LDADD="${ARGP_STANDALONE_LDADD}" - GF_LDFLAGS="" + GF_LDADD="${ARGP_LDADD}" + GF_LDFLAGS="${GF_LDFLAGS}" GF_FUSE_CFLAGS="-I\$(CONTRIBDIR)/macfuse" BUILD_FUSERMOUNT="no" FUSERMOUNT_SUBDIR="" GLUSTERD_WORKDIR="${LOCALSTATEDIR}/db/glusterd" - ;; -esac - -case $host_os in - darwin*) GFAPI_EXTRA_LDFLAGS='-Wl,-alias_list,$(top_srcdir)/api/src/gfapi.aliases' ;; - *) - GFAPI_EXTRA_LDFLAGS='-Wl,--version-script=$(top_srcdir)/api/src/gfapi.map' - ;; esac +# Default value for sbindir +prefix_temp=$prefix +exec_prefix_temp=$exec_prefix + +test "${prefix}" = "NONE" && prefix="${ac_default_prefix}" +test "${exec_prefix}" = "NONE" && exec_prefix='${prefix}' +sbintemp="${sbindir}" +eval sbintemp=\"${sbintemp}\" +eval sbintemp=\"${sbintemp}\" +SBIN_DIR=${sbintemp} + +sysconfdirtemp="${sysconfdir}" +eval sysconfdirtemp=\"${sysconfdirtemp}\" +SYSCONF_DIR=${sysconfdirtemp} + +prefix=$prefix_temp +exec_prefix=$exec_prefix_temp + +AC_SUBST(SBIN_DIR) +AC_SUBST(SYSCONF_DIR) + # lazy umount emulation UMOUNTD_SUBDIR="" if test "x${GF_HOST_OS}" != "xGF_LINUX_HOST_OS" ; then @@ -1067,15 +1368,21 @@ if test "x${GF_HOST_OS}" != "xGF_LINUX_HOST_OS" ; then fi AC_SUBST(UMOUNTD_SUBDIR) -# enable/disable QEMU -AM_CONDITIONAL([ENABLE_QEMU_BLOCK], [test x$BUILD_QEMU_BLOCK = xyes]) - # enable debug section AC_ARG_ENABLE([debug], AC_HELP_STRING([--enable-debug], [Enable debug build options.])) +AC_ARG_ENABLE([mempool], + AC_HELP_STRING([--disable-mempool], + [Disable the Gluster memory pooler.])) + +USE_MEMPOOL="yes" +if test "x$enable_mempool" = "xno"; then + USE_MEMPOOL="no" + AC_DEFINE(GF_DISABLE_MEMPOOL, 1, [Disable the Gluster memory pooler.]) +fi # syslog section AC_ARG_ENABLE([syslog], @@ -1096,7 +1403,7 @@ AC_CHECK_LIB([readline -lcurses],[readline],[RLLIBS="-lreadline -lcurses"]) AC_CHECK_LIB([readline -ltermcap],[readline],[RLLIBS="-lreadline -ltermcap"]) AC_CHECK_LIB([readline -lncurses],[readline],[RLLIBS="-lreadline -lncurses"]) -if test "x$RLLIBS" != "x"; then +if test -n "$RLLIBS"; then if test "x$RL_UNDO" = "xyes"; then AC_DEFINE(HAVE_READLINE, 1, [readline enabled CLI]) BUILD_READLINE=yes @@ -1109,104 +1416,41 @@ fi BUILD_LIBAIO=no AC_CHECK_LIB([aio],[io_setup],[LIBAIO="-laio"]) -if test "x$LIBAIO" != "x"; then +if test -n "$LIBAIO"; then AC_DEFINE(HAVE_LIBAIO, 1, [libaio based POSIX enabled]) BUILD_LIBAIO=yes fi -# glupy section -BUILD_GLUPY=no -have_python2=no -have_Python_h=no - -AM_PATH_PYTHON() -if echo $PYTHON_VERSION | grep ^2; then - have_python2=yes +dnl gnfs section +BUILD_GNFS="no" +RPCBIND_SERVICE="" +AC_ARG_ENABLE([gnfs], + AC_HELP_STRING([--enable-gnfs], + [Enable legacy gnfs server xlator.])) +if test "x${with_server}" = "xyes" -a "x$enable_gnfs" = "xyes"; then + BUILD_GNFS="yes" + GF_CFLAGS="$GF_CFLAGS -DBUILD_GNFS" + RPCBIND_SERVICE="rpcbind.service" fi - -# Save flags before testing python -saved_CFLAGS=$CFLAGS -saved_CPPFLAGS=$CPPFLAGS -saved_LDFLAGS=$LDFLAGS - -# Use pkg-config to get runtime search patch missing from ${PYTHON}-config -# Just do "true" on failure so that configure does not bail out -PKG_CHECK_MODULES([PYTHON], "python-$PYTHON_VERSION",,true) -CFLAGS="`${PYTHON}-config --cflags`" -CPPFLAGS=$CFLAGS -LDFLAGS="${PYTHON_LIBS} -L`${PYTHON}-config --prefix`/lib -L`${PYTHON}-config --prefix`/$libdir `${PYTHON}-config --ldflags`" - -AC_CHECK_HEADERS([python$PYTHON_VERSION/Python.h],[have_Python_h=yes],[]) -AC_ARG_ENABLE([glupy], - AS_HELP_STRING([--enable-glupy], - [build glupy])) -case x$enable_glupy in - xyes) - if test "x$have_python2" = "xyes" -a "x$have_Python_h" = "xyes"; then - BUILD_GLUPY=yes - PYTHONDEV_CFLAGS="$CFLAGS" - PYTHONDEV_CPPFLAGS="$CPPFLAGS" - PYTHONDEV_LDFLAGS="$LDFLAGS" - AC_SUBST(PYTHONDEV_CFLAGS) - AC_SUBST(PYTHONDEV_CPPFLAGS) - AC_SUBST(PYTHONDEV_LDFLAGS) - else - AC_MSG_ERROR([glupy requires python-devel/python-dev package and python2.x]) - fi - ;; - xno) - ;; - *) - if test "x$have_python2" = "xyes" -a "x$have_Python_h" = "xyes"; then - BUILD_GLUPY=yes - PYTHONDEV_CFLAGS="$CFLAGS" - PYTHONDEV_CPPFLAGS="$CPPFLAGS" - PYTHONDEV_LDFLAGS="$LDFLAGS" - AC_SUBST(PYTHONDEV_CFLAGS) - AC_SUBST(PYTHONDEV_CPPFLAGS) - AC_SUBST(PYTHONDEV_LDFLAGS) - else - AC_MSG_WARN([ - --------------------------------------------------------------------------------- - cannot build glupy. python 2.x and python-devel/python-dev package are required. - ---------------------------------------------------------------------------------]) - fi - ;; -esac -# Restore flags -CFLAGS=$saved_CFLAGS -CPPFLAGS=$saved_CPPFLAGS -LDFLAGS=$saved_LDFLAGS - -case $host_os in - darwin*) - BUILD_GLUPY=no - ;; -esac - -if test "x$BUILD_GLUPY" = "xyes"; then - BUILD_PYTHON_SITE_PACKAGES=`$PYTHON -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())'` - BUILD_PYTHON_INC=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_inc()"` - BUILD_PYTHON_LIB=python$PYTHON_VERSION - GLUPY_SUBDIR=glupy - GLUPY_SUBDIR_MAKEFILE=xlators/features/glupy/Makefile - GLUPY_SUBDIR_SRC_MAKEFILE=xlators/features/glupy/src/Makefile - echo "building glupy with -isystem $BUILD_PYTHON_INC -l $BUILD_PYTHON_LIB" - AC_SUBST(BUILD_PYTHON_SITE_PACKAGES) - AC_SUBST(BUILD_PYTHON_INC) - AC_SUBST(BUILD_PYTHON_LIB) - AC_SUBST(GLUPY_SUBDIR) - AC_SUBST(GLUPY_SUBDIR_MAKEFILE) - AC_SUBST(GLUPY_SUBDIR_SRC_MAKEFILE) -fi -# end glupy section +AM_CONDITIONAL([BUILD_GNFS], [test x$BUILD_GNFS = xyes]) +AC_SUBST(BUILD_GNFS) +AC_SUBST(RPCBIND_SERVICE) +dnl end gnfs section dnl Check for userspace-rcu -PKG_CHECK_MODULES([URCU], [liburcu-bp]) +PKG_CHECK_MODULES([URCU], [liburcu-bp], [], + [AC_CHECK_HEADERS([urcu-bp.h], + [URCU_LIBS='-lurcu-bp'], + AC_MSG_ERROR([liburcu-bp not found]))]) PKG_CHECK_MODULES([URCU_CDS], [liburcu-cds >= 0.8], [], [PKG_CHECK_MODULES([URCU_CDS], [liburcu-cds >= 0.7], - [AC_DEFINE(URCU_0_7, 1, [Define if liburcu 0.7 is found])], - [AC_MSG_ERROR([liburcu >= 0.7 required])])]) + [AC_DEFINE(URCU_OLD, 1, [Define if liburcu 0.6 or 0.7 is found]) + USE_CONTRIB_URCU='yes'], + [AC_CHECK_HEADERS([urcu/cds.h], + [AC_DEFINE(URCU_OLD, 1, [Define if liburcu 0.6 or 0.7 is found]) + URCU_CDS_LIBS='-lurcu-cds' + USE_CONTRIB_URCU='yes'], + [AC_MSG_ERROR([liburcu-cds not found])])])]) BUILD_UNITTEST="no" AC_ARG_ENABLE([cmocka], @@ -1242,6 +1486,114 @@ AC_SUBST(UNITTEST_LDFLAGS) AC_SUBST(CFLAGS) # end enable debug section +# EC dynamic code generation section + +EC_DYNAMIC_SUPPORT="none" +EC_DYNAMIC_ARCH="none" + +AC_ARG_ENABLE([ec-dynamic], + AC_HELP_STRING([--disable-ec-dynamic], + [Disable all dynamic code generation extensions for EC module])) + +AC_ARG_ENABLE([ec-dynamic-intel], + AC_HELP_STRING([--disable-ec-dynamic-intel], + [Disable all INTEL dynamic code generation extensions for EC module])) + +AC_ARG_ENABLE([ec-dynamic-arm], + AC_HELP_STRING([--disable-ec-dynamic-arm], + [Disable all ARM dynamic code generation extensions for EC module])) + +AC_ARG_ENABLE([ec-dynamic-x64], + AC_HELP_STRING([--disable-ec-dynamic-x64], + [Disable dynamic INTEL x64 code generation for EC module])) + +AC_ARG_ENABLE([ec-dynamic-sse], + AC_HELP_STRING([--disable-ec-dynamic-sse], + [Disable dynamic INTEL SSE code generation for EC module])) + +AC_ARG_ENABLE([ec-dynamic-avx], + AC_HELP_STRING([--disable-ec-dynamic-avx], + [Disable dynamic INTEL AVX code generation for EC module])) + +AC_ARG_ENABLE([ec-dynamic-neon], + AC_HELP_STRING([--disable-ec-dynamic-neon], + [Disable dynamic ARM NEON code generation for EC module])) + +if test "x$enable_ec_dynamic" != "xno"; then + case $host in + x86_64*) + if test "x$enable_ec_dynamic_intel" != "xno"; then + if test "x$enable_ec_dynamic_x64" != "xno"; then + EC_DYNAMIC_SUPPORT="$EC_DYNAMIC_SUPPORT x64" + AC_DEFINE(USE_EC_DYNAMIC_X64, 1, [Defined if using dynamic INTEL x64 code]) + fi + if test "x$enable_ec_dynamic_sse" != "xno"; then + EC_DYNAMIC_SUPPORT="$EC_DYNAMIC_SUPPORT sse" + AC_DEFINE(USE_EC_DYNAMIC_SSE, 1, [Defined if using dynamic INTEL SSE code]) + fi + if test "x$enable_ec_dynamic_avx" != "xno"; then + EC_DYNAMIC_SUPPORT="$EC_DYNAMIC_SUPPORT avx" + AC_DEFINE(USE_EC_DYNAMIC_AVX, 1, [Defined if using dynamic INTEL AVX code]) + fi + + if test "x$EC_DYNAMIC_SUPPORT" != "xnone"; then + EC_DYNAMIC_ARCH="intel" + fi + fi + ;; + arm*) + if test "x$enable_ec_dynamic_arm" != "xno"; then + if test "x$enable_ec_dynamic_neon" != "xno"; then + EC_DYNAMIC_SUPPORT="$EC_DYNAMIC_SUPPORT neon" + AC_DEFINE(USE_EC_DYNAMIC_NEON, 1, [Defined if using dynamic ARM NEON code]) + fi + + if test "x$EC_DYNAMIC_SUPPORT" != "xnone"; then + EC_DYNAMIC_ARCH="arm" + fi + fi + ;; + esac + + EC_DYNAMIC_SUPPORT="${EC_DYNAMIC_SUPPORT#none }" +fi + +AM_CONDITIONAL([ENABLE_EC_DYNAMIC_INTEL], [test "x$EC_DYNAMIC_ARCH" = "xintel"]) +AM_CONDITIONAL([ENABLE_EC_DYNAMIC_ARM], [test "x$EC_DYNAMIC_ARCH" = "xarm"]) + +AM_CONDITIONAL([ENABLE_EC_DYNAMIC_X64], [test "x${EC_DYNAMIC_SUPPORT##*x64*}" = "x"]) +AM_CONDITIONAL([ENABLE_EC_DYNAMIC_SSE], [test "x${EC_DYNAMIC_SUPPORT##*sse*}" = "x"]) +AM_CONDITIONAL([ENABLE_EC_DYNAMIC_AVX], [test "x${EC_DYNAMIC_SUPPORT##*avx*}" = "x"]) +AM_CONDITIONAL([ENABLE_EC_DYNAMIC_NEON], [test "x${EC_DYNAMIC_SUPPORT##*neon*}" = "x"]) + +AC_SUBST(USE_EC_DYNAMIC_X64) +AC_SUBST(USE_EC_DYNAMIC_SSE) +AC_SUBST(USE_EC_DYNAMIC_AVX) +AC_SUBST(USE_EC_DYNAMIC_NEON) + +# end EC dynamic code generation section + +dnl libglusterfs.so uses math functions +GF_LDADD="${GF_LDADD} ${MATH_LIB}" + +case $host_os in + dnl Can't use libtool's portable "-no-undefined" as it seems to be ignored on Linux + linux*) + GF_NO_UNDEFINED='-Wl,--no-undefined' + ;; + darwin*) + GF_NO_UNDEFINED='-Wl,-undefined' + ;; + *) + dnl There's an issue on FreeBSD with reference to __progname used in some parts of code + GF_NO_UNDEFINED='' + ;; +esac +dnl GF_XLATOR_DEFAULT_LDFLAGS is for most xlators that expose a common set of symbols +GF_XLATOR_DEFAULT_LDFLAGS='-avoid-version -export-symbols $(top_srcdir)/xlators/xlator.sym $(UUID_LIBS) $(GF_NO_UNDEFINED) $(TIRPC_LIBS)' +dnl GF_XLATOR_LDFLAGS is for xlators that expose extra symbols, e.g. dht +GF_XLATOR_LDFLAGS='-avoid-version $(UUID_LIBS) $(GF_NO_UNDEFINED) $(TIRPC_LIBS)' + AC_SUBST(GF_HOST_OS) AC_SUBST(GF_CFLAGS) AC_SUBST(GF_LDFLAGS) @@ -1252,18 +1604,34 @@ AC_SUBST(RLLIBS) AC_SUBST(LIBAIO) AC_SUBST(AM_MAKEFLAGS) AC_SUBST(AM_LIBTOOLFLAGS) +AC_SUBST(GF_NO_UNDEFINED) +AC_SUBST(GF_XLATOR_DEFAULT_LDFLAGS) +AC_SUBST(GF_XLATOR_LDFLAGS) +AC_SUBST(GF_XLATOR_MGNT_LIBADD) + +case $host_os in + *freebsd*) + GF_XLATOR_MGNT_LIBADD="-lutil -lprocstat" + ;; +esac CONTRIBDIR='$(top_srcdir)/contrib' AC_SUBST(CONTRIBDIR) GF_CPPDEFINES='-D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -D$(GF_HOST_OS)' -GF_CPPINCLUDES='-I$(top_srcdir)/libglusterfs/src' +GF_CPPINCLUDES='-include $(top_builddir)/config.h -include $(top_builddir)/site.h -I$(top_srcdir)/libglusterfs/src -I$(top_builddir)/libglusterfs/src' +if test "x${USE_CONTRIB_URCU}" = "xyes"; then + GF_CPPINCLUDES="${GF_CPPINCLUDES} -I\$(CONTRIBDIR)/userspace-rcu" +fi GF_CPPFLAGS="$GF_CPPFLAGS $GF_CPPDEFINES $GF_CPPINCLUDES" AC_SUBST([GF_CPPFLAGS]) AM_CONDITIONAL([GF_LINUX_HOST_OS], test "${GF_HOST_OS}" = "GF_LINUX_HOST_OS") AM_CONDITIONAL([GF_DARWIN_HOST_OS], test "${GF_HOST_OS}" = "GF_DARWIN_HOST_OS") AM_CONDITIONAL([GF_BSD_HOST_OS], test "${GF_HOST_OS}" = "GF_BSD_HOST_OS") +if test "${GF_HOST_OS}" = "GF_BSD_HOST_OS"; then + AC_DEFINE(GF_BSD_HOST_OS, 1, [This is a BSD compatible OS.]) +fi AC_SUBST(GLUSTERD_WORKDIR) AM_CONDITIONAL([GF_INSTALL_GLUSTERD_WORKDIR], test ! -d ${GLUSTERD_WORKDIR} && test -d ${sysconfdir}/glusterd ) @@ -1285,8 +1653,6 @@ GFAPI_VERSION="7."${PACKAGE_VERSION} LIBGFCHANGELOG_VERSION="0.0.1" AC_SUBST(GFAPI_VERSION) AC_SUBST(LIBGFCHANGELOG_VERSION) -LIBGFDB_VERSION="0.0.1" -AC_SUBST(LIBGFDB_VERSION) dnl libtool versioning LIBGFXDR_LT_VERSION="0:1:0" @@ -1313,22 +1679,39 @@ echo echo "GlusterFS configure summary" echo "===========================" echo "FUSE client : $BUILD_FUSE_CLIENT" -echo "Infiniband verbs : $BUILD_IBVERBS" echo "epoll IO multiplex : $BUILD_EPOLL" -echo "argp-standalone : $BUILD_ARGP_STANDALONE" echo "fusermount : $BUILD_FUSERMOUNT" echo "readline : $BUILD_READLINE" echo "georeplication : $BUILD_SYNCDAEMON" echo "Linux-AIO : $BUILD_LIBAIO" echo "Enable Debug : $BUILD_DEBUG" -## echo "systemtap : $BUILD_SYSTEMTAP" -echo "Block Device xlator : $BUILD_BD_XLATOR" -echo "glupy : $BUILD_GLUPY" +echo "Run with Valgrind : $VALGRIND_TOOL" +echo "Sanitizer enabled : $SANITIZER" echo "Use syslog : $USE_SYSLOG" echo "XML output : $BUILD_XML_OUTPUT" -echo "QEMU Block formats : $BUILD_QEMU_BLOCK" -echo "Encryption xlator : $BUILD_CRYPT_XLATOR" echo "Unit Tests : $BUILD_UNITTEST" +echo "Track priv ports : $TRACK_PRIVPORTS" echo "POSIX ACLs : $BUILD_POSIX_ACLS" -echo "Data Classification : $BUILD_GFDB" +echo "SELinux features : $USE_SELINUX" +echo "firewalld-config : $BUILD_FIREWALLD" +echo "Events : $BUILD_EVENTS" +echo "EC dynamic support : $EC_DYNAMIC_SUPPORT" +echo "Use memory pools : $USE_MEMPOOL" +echo "Nanosecond m/atimes : $BUILD_NANOSECOND_TIMESTAMPS" +echo "Server components : $with_server" +echo "Legacy gNFS server : $BUILD_GNFS" +echo "IPV6 default : $with_ipv6_default" +echo "Use TIRPC : $with_libtirpc" +echo "With Python : ${PYTHON_VERSION}" +echo "Cloudsync : $BUILD_CLOUDSYNC" +echo "Metadata dispersal : $BUILD_METADISP" +echo "Link with TCMALLOC : $BUILD_TCMALLOC" echo + +# dnl Note: ${X^^} capitalization assumes bash >= 4.x +if test "x$SANITIZER" != "xnone"; then + echo "Note: since glusterfs processes are daemon processes, use" + echo "'export ${SANITIZER^^}_OPTIONS=log_path=/path/to/xxx.log' to collect" + echo "sanitizer output. Further details and more options can be" + echo "found at https://github.com/google/sanitizers." +fi |
