| # Configure script for Ganeti |
| m4_define([gnt_version_major], [2]) |
| m4_define([gnt_version_minor], [9]) |
| m4_define([gnt_version_revision], [7]) |
| m4_define([gnt_version_suffix], []) |
| m4_define([gnt_version_full], |
| m4_format([%d.%d.%d%s], |
| gnt_version_major, gnt_version_minor, |
| gnt_version_revision, gnt_version_suffix)) |
| |
| AC_PREREQ(2.59) |
| AC_INIT(ganeti, gnt_version_full, ganeti@googlegroups.com) |
| AC_CONFIG_AUX_DIR(autotools) |
| AC_CONFIG_SRCDIR(configure) |
| AM_INIT_AUTOMAKE([1.9 foreign tar-ustar -Wall -Wno-portability] |
| m4_esyscmd([case `automake --version | head -n 1` in |
| *1.11*);; |
| *) echo serial-tests;; |
| esac])) |
| |
| AC_SUBST([VERSION_MAJOR], gnt_version_major) |
| AC_SUBST([VERSION_MINOR], gnt_version_minor) |
| AC_SUBST([VERSION_REVISION], gnt_version_revision) |
| AC_SUBST([VERSION_SUFFIX], gnt_version_suffix) |
| AC_SUBST([VERSION_FULL], gnt_version_full) |
| |
| # --with-haskell-flags= |
| AC_ARG_WITH([haskell-flags], |
| [AS_HELP_STRING([--with-haskell-flags=FLAGS], |
| [Extra flags to pass to GHC] |
| )], |
| [hextra_configure="$withval"], |
| [hextra_configure=""]) |
| AC_SUBST(HEXTRA_CONFIGURE, $hextra_configure) |
| |
| # --with-ssh-initscript=... |
| AC_ARG_WITH([ssh-initscript], |
| [AS_HELP_STRING([--with-ssh-initscript=SCRIPT], |
| [SSH init script to use (default is /etc/init.d/ssh)] |
| )], |
| [ssh_initd_script="$withval"], |
| [ssh_initd_script="/etc/init.d/ssh"]) |
| AC_SUBST(SSH_INITD_SCRIPT, $ssh_initd_script) |
| |
| # --with-export-dir=... |
| AC_ARG_WITH([export-dir], |
| [AS_HELP_STRING([--with-export-dir=DIR], |
| [directory to use by default for instance image] |
| [ exports (default is /srv/ganeti/export)] |
| )], |
| [export_dir="$withval"], |
| [export_dir="/srv/ganeti/export"]) |
| AC_SUBST(EXPORT_DIR, $export_dir) |
| |
| # --with-ssh-config-dir=... |
| AC_ARG_WITH([ssh-config-dir], |
| [AS_HELP_STRING([--with-ssh-config-dir=DIR], |
| [ directory with ssh host keys ] |
| [ (default is /etc/ssh)] |
| )], |
| [ssh_config_dir="$withval"], |
| [ssh_config_dir="/etc/ssh"]) |
| AC_SUBST(SSH_CONFIG_DIR, $ssh_config_dir) |
| |
| # --with-xen-config-dir=... |
| AC_ARG_WITH([xen-config-dir], |
| [AS_HELP_STRING([--with-xen-config-dir=DIR], |
| m4_normalize([Xen configuration directory |
| (default: /etc/xen)]))], |
| [xen_config_dir="$withval"], |
| [xen_config_dir=/etc/xen]) |
| AC_SUBST(XEN_CONFIG_DIR, $xen_config_dir) |
| |
| # --with-os-search-path=... |
| # do a bit of black sed magic to for quoting of the strings in the list |
| AC_ARG_WITH([os-search-path], |
| [AS_HELP_STRING([--with-os-search-path=LIST], |
| [comma separated list of directories to] |
| [ search for OS images (default is /srv/ganeti/os)] |
| )], |
| [os_search_path=`echo -n "$withval" | sed -e "s/\([[^,]]*\)/'\1'/g"`], |
| [os_search_path="'/srv/ganeti/os'"]) |
| AC_SUBST(OS_SEARCH_PATH, $os_search_path) |
| |
| # --with-extstorage-search-path=... |
| # same black sed magic for quoting of the strings in the list |
| AC_ARG_WITH([extstorage-search-path], |
| [AS_HELP_STRING([--with-extstorage-search-path=LIST], |
| [comma separated list of directories to] |
| [ search for External Storage Providers] |
| [ (default is /srv/ganeti/extstorage)] |
| )], |
| [es_search_path=`echo -n "$withval" | sed -e "s/\([[^,]]*\)/'\1'/g"`], |
| [es_search_path="'/srv/ganeti/extstorage'"]) |
| AC_SUBST(ES_SEARCH_PATH, $es_search_path) |
| |
| # --with-iallocator-search-path=... |
| # do a bit of black sed magic to for quoting of the strings in the list |
| AC_ARG_WITH([iallocator-search-path], |
| [AS_HELP_STRING([--with-iallocator-search-path=LIST], |
| [comma separated list of directories to] |
| [ search for instance allocators (default is $libdir/ganeti/iallocators)] |
| )], |
| [iallocator_search_path=`echo -n "$withval" | sed -e "s/\([[^,]]*\)/'\1'/g"`], |
| [iallocator_search_path="'$libdir/$PACKAGE_NAME/iallocators'"]) |
| AC_SUBST(IALLOCATOR_SEARCH_PATH, $iallocator_search_path) |
| |
| # --with-xen-bootloader=... |
| AC_ARG_WITH([xen-bootloader], |
| [AS_HELP_STRING([--with-xen-bootloader=PATH], |
| [bootloader for Xen hypervisor (default is empty)] |
| )], |
| [xen_bootloader="$withval"], |
| [xen_bootloader=]) |
| AC_SUBST(XEN_BOOTLOADER, $xen_bootloader) |
| |
| # --with-xen-kernel=... |
| AC_ARG_WITH([xen-kernel], |
| [AS_HELP_STRING([--with-xen-kernel=PATH], |
| [DomU kernel image for Xen hypervisor (default is /boot/vmlinuz-3-xenU)] |
| )], |
| [xen_kernel="$withval"], |
| [xen_kernel="/boot/vmlinuz-3-xenU"]) |
| AC_SUBST(XEN_KERNEL, $xen_kernel) |
| |
| # --with-xen-initrd=... |
| AC_ARG_WITH([xen-initrd], |
| [AS_HELP_STRING([--with-xen-initrd=PATH], |
| [DomU initrd image for Xen hypervisor (default is /boot/initrd-3-xenU)] |
| )], |
| [xen_initrd="$withval"], |
| [xen_initrd="/boot/initrd-3-xenU"]) |
| AC_SUBST(XEN_INITRD, $xen_initrd) |
| |
| # --with-kvm-kernel=... |
| AC_ARG_WITH([kvm-kernel], |
| [AS_HELP_STRING([--with-kvm-kernel=PATH], |
| [Guest kernel image for KVM hypervisor (default is /boot/vmlinuz-3-kvmU)] |
| )], |
| [kvm_kernel="$withval"], |
| [kvm_kernel="/boot/vmlinuz-3-kvmU"]) |
| AC_SUBST(KVM_KERNEL, $kvm_kernel) |
| |
| # --with-kvm-path=... |
| AC_ARG_WITH([kvm-path], |
| [AS_HELP_STRING([--with-kvm-path=PATH], |
| [absolute path to the kvm binary] |
| [ (default is /usr/bin/kvm)] |
| )], |
| [kvm_path="$withval"], |
| [kvm_path="/usr/bin/kvm"]) |
| AC_SUBST(KVM_PATH, $kvm_path) |
| |
| # --with-lvm-stripecount=... |
| AC_ARG_WITH([lvm-stripecount], |
| [AS_HELP_STRING([--with-lvm-stripecount=NUM], |
| [the default number of stripes to use for LVM volumes] |
| [ (default is 1)] |
| )], |
| [lvm_stripecount="$withval"], |
| [lvm_stripecount=1]) |
| AC_SUBST(LVM_STRIPECOUNT, $lvm_stripecount) |
| |
| # --with-ssh-login-user=... |
| AC_ARG_WITH([ssh-login-user], |
| [AS_HELP_STRING([--with-ssh-login-user=USERNAME], |
| [user to use for SSH logins within the cluster (default is root)] |
| )], |
| [ssh_login_user="$withval"], |
| [ssh_login_user=root]) |
| AC_SUBST(SSH_LOGIN_USER, $ssh_login_user) |
| |
| # --with-ssh-console-user=... |
| AC_ARG_WITH([ssh-console-user], |
| [AS_HELP_STRING([--with-ssh-console-user=USERNAME], |
| [user to use for SSH logins to access instance consoles (default is root)] |
| )], |
| [ssh_console_user="$withval"], |
| [ssh_console_user=root]) |
| AC_SUBST(SSH_CONSOLE_USER, $ssh_console_user) |
| |
| # --with-default-user=... |
| AC_ARG_WITH([default-user], |
| [AS_HELP_STRING([--with-default-user=USERNAME], |
| [default user for daemons] |
| [ (default is to run all daemons as root)] |
| )], |
| [user_default="$withval"], |
| [user_default=root]) |
| |
| # --with-default-group=... |
| AC_ARG_WITH([default-group], |
| [AS_HELP_STRING([--with-default-group=GROUPNAME], |
| [default group for daemons] |
| [ (default is to run all daemons under group root)] |
| )], |
| [group_default="$withval"], |
| [group_default=root]) |
| |
| # --with-user-prefix=... |
| AC_ARG_WITH([user-prefix], |
| [AS_HELP_STRING([--with-user-prefix=PREFIX], |
| [prefix for daemon users] |
| [ (default is to run all daemons as root; use --with-default-user] |
| [ to change the default)] |
| )], |
| [user_masterd="${withval}masterd"; |
| user_rapi="${withval}rapi"; |
| user_confd="${withval}confd"; |
| user_luxid="${withval}luxid"; |
| user_noded="$user_default"; |
| user_mond="$user_default"], |
| [user_masterd="$user_default"; |
| user_rapi="$user_default"; |
| user_confd="$user_default"; |
| user_luxid="$user_default"; |
| user_noded="$user_default"; |
| user_mond="$user_default"]) |
| AC_SUBST(MASTERD_USER, $user_masterd) |
| AC_SUBST(RAPI_USER, $user_rapi) |
| AC_SUBST(CONFD_USER, $user_confd) |
| AC_SUBST(LUXID_USER, $user_luxid) |
| AC_SUBST(NODED_USER, $user_noded) |
| AC_SUBST(MOND_USER, $user_mond) |
| |
| # --with-group-prefix=... |
| AC_ARG_WITH([group-prefix], |
| [AS_HELP_STRING([--with-group-prefix=PREFIX], |
| [prefix for daemon POSIX groups] |
| [ (default is to run all daemons under group root; use] |
| [ --with-default-group to change the default)] |
| )], |
| [group_rapi="${withval}rapi"; |
| group_admin="${withval}admin"; |
| group_confd="${withval}confd"; |
| group_luxid="${withval}luxid"; |
| group_masterd="${withval}masterd"; |
| group_noded="$group_default"; |
| group_daemons="${withval}daemons"; |
| group_mond="$group_default"], |
| [group_rapi="$group_default"; |
| group_admin="$group_default"; |
| group_confd="$group_default"; |
| group_luxid="$group_default"; |
| group_masterd="$group_default"; |
| group_noded="$group_default"; |
| group_daemons="$group_default"; |
| group_mond="$group_default"]) |
| AC_SUBST(RAPI_GROUP, $group_rapi) |
| AC_SUBST(ADMIN_GROUP, $group_admin) |
| AC_SUBST(CONFD_GROUP, $group_confd) |
| AC_SUBST(LUXID_GROUP, $group_luxid) |
| AC_SUBST(MASTERD_GROUP, $group_masterd) |
| AC_SUBST(NODED_GROUP, $group_noded) |
| AC_SUBST(DAEMONS_GROUP, $group_daemons) |
| AC_SUBST(MOND_GROUP, $group_mond) |
| |
| # Print the config to the user |
| AC_MSG_NOTICE([Running ganeti-masterd as $group_masterd:$group_masterd]) |
| AC_MSG_NOTICE([Running ganeti-rapi as $user_rapi:$group_rapi]) |
| AC_MSG_NOTICE([Running ganeti-confd as $user_confd:$group_confd]) |
| AC_MSG_NOTICE([Running ganeti-luxid as $user_luxid:$group_luxid]) |
| AC_MSG_NOTICE([Group for daemons is $group_daemons]) |
| AC_MSG_NOTICE([Group for clients is $group_admin]) |
| |
| # --enable-drbd-barriers |
| AC_ARG_ENABLE([drbd-barriers], |
| [AS_HELP_STRING([--enable-drbd-barriers], |
| m4_normalize([enable the DRBD barriers functionality by |
| default (>= 8.0.12) (default: enabled)]))], |
| [[if test "$enableval" != no; then |
| DRBD_BARRIERS=n |
| DRBD_NO_META_FLUSH=False |
| else |
| DRBD_BARRIERS=bf |
| DRBD_NO_META_FLUSH=True |
| fi |
| ]], |
| [DRBD_BARRIERS=n |
| DRBD_NO_META_FLUSH=False |
| ]) |
| AC_SUBST(DRBD_BARRIERS, $DRBD_BARRIERS) |
| AC_SUBST(DRBD_NO_META_FLUSH, $DRBD_NO_META_FLUSH) |
| |
| # --enable-syslog[=no/yes/only] |
| AC_ARG_ENABLE([syslog], |
| [AS_HELP_STRING([--enable-syslog], |
| [enable use of syslog (default: disabled), one of no/yes/only])], |
| [[case "$enableval" in |
| no) |
| SYSLOG=no |
| ;; |
| yes) |
| SYSLOG=yes |
| ;; |
| only) |
| SYSLOG=only |
| ;; |
| *) |
| SYSLOG= |
| ;; |
| esac |
| ]], |
| [SYSLOG=no]) |
| |
| if test -z "$SYSLOG" |
| then |
| AC_MSG_ERROR([invalid value for syslog, choose one of no/yes/only]) |
| fi |
| AC_SUBST(SYSLOG_USAGE, $SYSLOG) |
| |
| AC_ARG_ENABLE([restricted-commands], |
| [AS_HELP_STRING([--enable-restricted-commands], |
| m4_normalize([enable restricted commands in the node daemon |
| (default: disabled)]))], |
| [[if test "$enableval" = no; then |
| enable_restricted_commands=False |
| else |
| enable_restricted_commands=True |
| fi |
| ]], |
| [enable_restricted_commands=False]) |
| AC_SUBST(ENABLE_RESTRICTED_COMMANDS, $enable_restricted_commands) |
| |
| # --with-disk-separator=... |
| AC_ARG_WITH([disk-separator], |
| [AS_HELP_STRING([--with-disk-separator=STRING], |
| [Disk index separator, useful if the default of ':' is handled] |
| [ specially by the hypervisor] |
| )], |
| [disk_separator="$withval"], |
| [disk_separator=":"]) |
| AC_SUBST(DISK_SEPARATOR, $disk_separator) |
| |
| # Check common programs |
| AC_PROG_INSTALL |
| AC_PROG_LN_S |
| |
| # Check for the ip command |
| AC_ARG_VAR(IP_PATH, [ip path]) |
| AC_PATH_PROG(IP_PATH, [ip], []) |
| if test -z "$IP_PATH" |
| then |
| AC_MSG_ERROR([ip command not found]) |
| fi |
| |
| # Check for pandoc |
| AC_ARG_VAR(PANDOC, [pandoc path]) |
| AC_PATH_PROG(PANDOC, [pandoc], []) |
| if test -z "$PANDOC" |
| then |
| AC_MSG_WARN([pandoc not found, man pages rebuild will not be possible]) |
| fi |
| |
| # Check for python-sphinx |
| AC_ARG_VAR(SPHINX, [sphinx-build path]) |
| AC_PATH_PROG(SPHINX, [sphinx-build], []) |
| if test -z "$SPHINX" |
| then |
| AC_MSG_WARN(m4_normalize([sphinx-build not found, documentation rebuild will |
| not be possible])) |
| else |
| # Sphinx exits with code 1 when it prints its usage |
| sphinxver=`{ $SPHINX --version 2>&1 || :; } | head -n 3` |
| |
| if ! echo "$sphinxver" | grep -q -w -e '^Sphinx' -e '^Usage:'; then |
| AC_MSG_ERROR([Unable to determine Sphinx version]) |
| |
| # Note: Character classes ([...]) need to be double quoted due to autoconf |
| # using m4 |
| elif ! echo "$sphinxver" | grep -q -E \ |
| '^Sphinx[[[:space:]]]+(\(sphinx-build\)[[[:space:]]]+|v)[[1-9]]\>'; then |
| AC_MSG_ERROR([Sphinx 1.0 or higher is required]) |
| fi |
| fi |
| AM_CONDITIONAL([HAS_SPHINX], [test -n "$SPHINX"]) |
| |
| AC_ARG_ENABLE([manpages-in-doc], |
| [AS_HELP_STRING([--enable-manpages-in-doc], |
| m4_normalize([include man pages in HTML documentation |
| (requires sphinx; default disabled)]))], |
| [case "$enableval" in |
| yes) manpages_in_doc=yes ;; |
| no) manpages_in_doc= ;; |
| *) |
| AC_MSG_ERROR([Bad value $enableval for --enable-manpages-in-doc]) |
| ;; |
| esac |
| ], |
| [manpages_in_doc=]) |
| AM_CONDITIONAL([MANPAGES_IN_DOC], [test -n "$manpages_in_doc"]) |
| AC_SUBST(MANPAGES_IN_DOC, $manpages_in_doc) |
| |
| if test -z "$SPHINX" -a -n "$manpages_in_doc"; then |
| AC_MSG_ERROR([Including man pages in HTML documentation requires sphinx]) |
| fi |
| |
| # Check for graphviz (dot) |
| AC_ARG_VAR(DOT, [dot path]) |
| AC_PATH_PROG(DOT, [dot], []) |
| if test -z "$DOT" |
| then |
| AC_MSG_WARN(m4_normalize([dot (from the graphviz suite) not found, |
| documentation rebuild not possible])) |
| fi |
| |
| # Check for pylint |
| AC_ARG_VAR(PYLINT, [pylint path]) |
| AC_PATH_PROG(PYLINT, [pylint], []) |
| if test -z "$PYLINT" |
| then |
| AC_MSG_WARN([pylint not found, checking code will not be possible]) |
| fi |
| |
| # Check for pep8 |
| AC_ARG_VAR(PEP8, [pep8 path]) |
| AC_PATH_PROG(PEP8, [pep8], []) |
| if test -z "$PEP8" |
| then |
| AC_MSG_WARN([pep8 not found, checking code will not be complete]) |
| fi |
| AM_CONDITIONAL([HAS_PEP8], [test -n "$PEP8"]) |
| |
| # Check for python-coverage |
| AC_ARG_VAR(PYCOVERAGE, [python-coverage path]) |
| AC_PATH_PROGS(PYCOVERAGE, [python-coverage coverage], []) |
| if test -z "$PYCOVERAGE" |
| then |
| AC_MSG_WARN(m4_normalize([python-coverage or coverage not found, evaluating |
| Python test coverage will not be possible])) |
| fi |
| |
| # Check for socat |
| AC_ARG_VAR(SOCAT, [socat path]) |
| AC_PATH_PROG(SOCAT, [socat], []) |
| if test -z "$SOCAT" |
| then |
| AC_MSG_ERROR([socat not found]) |
| fi |
| |
| # Check for qemu-img |
| AC_ARG_VAR(QEMUIMG_PATH, [qemu-img path]) |
| AC_PATH_PROG(QEMUIMG_PATH, [qemu-img], []) |
| if test -z "$QEMUIMG_PATH" |
| then |
| AC_MSG_WARN([qemu-img not found, using ovfconverter will not be possible]) |
| fi |
| |
| # --enable-confd |
| ENABLE_CONFD= |
| AC_ARG_ENABLE([confd], |
| [AS_HELP_STRING([--enable-confd], |
| [enable the ganeti-confd daemon (default: check)])], |
| [], |
| [enable_confd=check]) |
| |
| ENABLE_MOND= |
| AC_ARG_ENABLE([monitoring], |
| [AS_HELP_STRING([--enable-monitoring], |
| [enable the ganeti monitoring daemon (default: check)])], |
| [], |
| [enable_monitoring=check]) |
| |
| # Check for ghc |
| AC_ARG_VAR(GHC, [ghc path]) |
| AC_PATH_PROG(GHC, [ghc], []) |
| if test -z "$GHC"; then |
| AC_MSG_FAILURE([ghc not found, compilation will not possible]) |
| fi |
| |
| AC_MSG_CHECKING([checking for extra GHC flags]) |
| GHC_BYVERSION_FLAGS= |
| # check for GHC supported flags that vary accross versions |
| for flag in -fwarn-incomplete-uni-patterns; do |
| if $GHC -e '0' $flag >/dev/null 2>/dev/null; then |
| GHC_BYVERSION_FLAGS="$GHC_BYVERSION_FLAGS $flag" |
| fi |
| done |
| AC_MSG_RESULT($GHC_BYVERSION_FLAGS) |
| AC_SUBST(GHC_BYVERSION_FLAGS) |
| |
| # Check for ghc-pkg |
| AC_ARG_VAR(GHC_PKG, [ghc-pkg path]) |
| AC_PATH_PROG(GHC_PKG, [ghc-pkg], []) |
| if test -z "$GHC_PKG"; then |
| AC_MSG_FAILURE([ghc-pkg not found, compilation will not be possible]) |
| fi |
| |
| # check for modules, first custom/special checks |
| AC_MSG_NOTICE([checking for required haskell modules]) |
| HS_PARALLEL3= |
| AC_GHC_PKG_CHECK([parallel-3.*], [HS_PARALLEL3=-DPARALLEL3], |
| [AC_GHC_PKG_REQUIRE(parallel)], t) |
| AC_SUBST(HS_PARALLEL3) |
| |
| # and now standard modules |
| AC_GHC_PKG_REQUIRE(curl) |
| AC_GHC_PKG_REQUIRE(json) |
| AC_GHC_PKG_REQUIRE(network) |
| AC_GHC_PKG_REQUIRE(mtl) |
| AC_GHC_PKG_REQUIRE(bytestring) |
| AC_GHC_PKG_REQUIRE(utf8-string) |
| AC_GHC_PKG_REQUIRE(hslogger) |
| |
| # extra modules for confd functionality |
| HS_REGEX_PCRE=-DNO_REGEX_PCRE |
| has_confd=False |
| if test "$enable_confd" != no; then |
| CONFD_PKG= |
| AC_GHC_PKG_CHECK([regex-pcre], [HS_REGEX_PCRE=], |
| [CONFD_PKG="$CONFD_PKG regex-pcre"]) |
| AC_GHC_PKG_CHECK([Crypto], [], [CONFD_PKG="$CONFD_PKG Crypto"]) |
| AC_GHC_PKG_CHECK([text], [], [CONFD_PKG="$CONFD_PKG text"]) |
| AC_GHC_PKG_CHECK([hinotify], [], [CONFD_PKG="$CONFD_PKG hinotify"]) |
| AC_GHC_PKG_CHECK([vector], [], [CONFD_PKG="$CONFD_PKG vector"]) |
| if test -z "$CONFD_PKG"; then |
| has_confd=True |
| elif test "$enable_confd" = check; then |
| AC_MSG_WARN(m4_normalize([The required extra libraries for confd were |
| not found ($CONFD_PKG), confd disabled])) |
| else |
| AC_MSG_FAILURE(m4_normalize([The confd functionality was requested, but |
| required libraries were not found: |
| $CONFD_PKG])) |
| fi |
| fi |
| AC_SUBST(HS_REGEX_PCRE) |
| if test "$has_confd" = True; then |
| AC_MSG_NOTICE([Enabling confd usage]) |
| fi |
| AC_SUBST(ENABLE_CONFD, $has_confd) |
| AM_CONDITIONAL([ENABLE_CONFD], [test x$has_confd = xTrue]) |
| |
| #extra modules for monitoring daemon functionality |
| has_monitoring=False |
| if test "$enable_monitoring" != no; then |
| MONITORING_PKG= |
| AC_GHC_PKG_CHECK([attoparsec], [], |
| [MONITORING_PKG="$MONITORING_PKG attoparsec"]) |
| AC_GHC_PKG_CHECK([snap-server], [], |
| [MONITORING_PKG="$MONITORING_PKG snap-server"]) |
| AC_GHC_PKG_CHECK([process], [], |
| [MONITORING_PKG="$MONITORING_PKG process"]) |
| MONITORING_DEP= |
| if test "$has_confd" = False; then |
| MONITORING_DEP="$MONITORING_DEP confd" |
| fi |
| has_monitoring_pkg=False |
| if test -z "$MONITORING_PKG"; then |
| has_monitoring_pkg=True |
| elif test "$enable_monitoring" = check; then |
| AC_MSG_WARN(m4_normalize([The required extra libraries for the monitoring |
| daemon were not found ($MONITORING_PKG), |
| monitoring disabled])) |
| else |
| AC_MSG_FAILURE(m4_normalize([The monitoring functionality was requested, but |
| required libraries were not found: |
| $MONITORING_PKG])) |
| fi |
| has_monitoring_dep=False |
| if test -z "$MONITORING_DEP"; then |
| has_monitoring_dep=True |
| elif test "$enable_monitoring" = check; then |
| AC_MSG_WARN(m4_normalize([The optional Ganeti components required for the |
| monitoring agent were not enabled |
| ($MONITORING_DEP), monitoring disabled])) |
| else |
| AC_MSG_FAILURE(m4_normalize([The monitoring functionality was requested, but |
| required optional Ganeti components were not |
| found: $MONITORING_DEP])) |
| fi |
| |
| fi |
| if test "$has_monitoring_pkg" = True -a "$has_monitoring_dep" = True; then |
| has_monitoring=True |
| AC_MSG_NOTICE([Enabling the monitoring agent usage]) |
| fi |
| AC_SUBST(ENABLE_MOND, $has_monitoring) |
| AM_CONDITIONAL([ENABLE_MOND], [test "$has_monitoring" = True]) |
| |
| # development modules |
| HS_NODEV= |
| AC_GHC_PKG_CHECK([QuickCheck-2.*], [], [HS_NODEV=1], t) |
| AC_GHC_PKG_CHECK([test-framework-0.6*], [], [HS_NODEV=1], t) |
| AC_GHC_PKG_CHECK([test-framework-hunit], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([test-framework-quickcheck2], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([temporary], [], [HS_NODEV=1]) |
| # FIXME: unify checks for non-test libraries (attoparsec, hinotify, ...) |
| # that are needed to execute the tests, avoiding the duplication |
| # of the checks. |
| AC_GHC_PKG_CHECK([attoparsec], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([vector], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([process], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([snap-server], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([regex-pcre], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([Crypto], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([text], [], [HS_NODEV=1]) |
| AC_GHC_PKG_CHECK([hinotify], [], [HS_NODEV=1]) |
| if test -n "$HS_NODEV"; then |
| AC_MSG_WARN(m4_normalize([Required development modules were not found, |
| you won't be able to run Haskell unittests])) |
| else |
| AC_MSG_NOTICE([Haskell development modules found, unittests enabled]) |
| fi |
| AC_SUBST(HS_NODEV) |
| |
| HTOOLS=yes |
| AC_SUBST(HTOOLS) |
| |
| # --enable-split-query |
| ENABLE_SPLIT_QUERY= |
| AC_ARG_ENABLE([split-query], |
| [AS_HELP_STRING([--enable-split-query], |
| [enable use of custom query daemon via confd])], |
| [[case "$enableval" in |
| no) |
| enable_split_query=False |
| ;; |
| yes) |
| enable_split_query=True |
| ;; |
| *) |
| echo "Invalid value for enable-confd '$enableval'" |
| exit 1 |
| ;; |
| esac |
| ]], |
| [[case "x${has_confd}x" in |
| xTruex) |
| enable_split_query=True |
| ;; |
| *) |
| enable_split_query=False |
| ;; |
| esac]]) |
| AC_SUBST(ENABLE_SPLIT_QUERY, $enable_split_query) |
| |
| if test x$enable_split_query = xTrue -a x$has_confd != xTrue; then |
| AC_MSG_ERROR([Split queries require the confd daemon]) |
| fi |
| |
| if test x$enable_split_query = xTrue; then |
| AC_MSG_NOTICE([Split query functionality enabled]) |
| fi |
| |
| # Check for HsColour |
| HS_APIDOC=no |
| AC_ARG_VAR(HSCOLOUR, [HsColour path]) |
| AC_PATH_PROG(HSCOLOUR, [HsColour], []) |
| if test -z "$HSCOLOUR"; then |
| AC_MSG_WARN(m4_normalize([HsColour not found, htools API documentation will |
| not be generated])) |
| fi |
| |
| # Check for haddock |
| AC_ARG_VAR(HADDOCK, [haddock path]) |
| AC_PATH_PROG(HADDOCK, [haddock], []) |
| if test -z "$HADDOCK"; then |
| AC_MSG_WARN(m4_normalize([haddock not found, htools API documentation will |
| not be generated])) |
| fi |
| if test -n "$HADDOCK" && test -n "$HSCOLOUR"; then |
| HS_APIDOC=yes |
| fi |
| AC_SUBST(HS_APIDOC) |
| |
| # Check for hlint |
| AC_ARG_VAR(HLINT, [hlint path]) |
| AC_PATH_PROG(HLINT, [hlint], []) |
| if test -z "$HLINT"; then |
| AC_MSG_WARN([hlint not found, checking code will not be possible]) |
| fi |
| |
| if test "$HTOOLS" != yes && test "$ENABLE_CONFD" = True; then |
| AC_MSG_ERROR(m4_normalize([cannot enable ganeti-confd if |
| htools support is not enabled])) |
| fi |
| |
| AM_CONDITIONAL([WANT_HTOOLS], [test "$HTOOLS" = yes]) |
| AM_CONDITIONAL([WANT_HSTESTS], [test "x$HS_NODEV" = x]) |
| AM_CONDITIONAL([WANT_HSAPIDOC], [test "$HS_APIDOC" = yes]) |
| AM_CONDITIONAL([HAS_HLINT], [test "$HLINT"]) |
| |
| # Check for fakeroot |
| AC_ARG_VAR(FAKEROOT_PATH, [fakeroot path]) |
| AC_PATH_PROG(FAKEROOT_PATH, [fakeroot], []) |
| if test -z "$FAKEROOT_PATH"; then |
| AC_MSG_WARN(m4_normalize([fakeroot not found, tests that must run as root |
| will not be executed])) |
| fi |
| AM_CONDITIONAL([HAS_FAKEROOT], [test "x$FAKEROOT_PATH" != x]) |
| |
| SOCAT_USE_ESCAPE= |
| AC_ARG_ENABLE([socat-escape], |
| [AS_HELP_STRING([--enable-socat-escape], |
| [use escape functionality available in socat >= 1.7 (default: detect |
| automatically)])], |
| [[if test "$enableval" = yes; then |
| SOCAT_USE_ESCAPE=True |
| else |
| SOCAT_USE_ESCAPE=False |
| fi |
| ]]) |
| |
| if test -z "$SOCAT_USE_ESCAPE" |
| then |
| if $SOCAT -hh | grep -w -q escape; then |
| SOCAT_USE_ESCAPE=True |
| else |
| SOCAT_USE_ESCAPE=False |
| fi |
| fi |
| |
| AC_SUBST(SOCAT_USE_ESCAPE) |
| |
| SOCAT_USE_COMPRESS= |
| AC_ARG_ENABLE([socat-compress], |
| [AS_HELP_STRING([--enable-socat-compress], |
| [use OpenSSL compression option available in patched socat builds |
| (see INSTALL for details; default: detect automatically)])], |
| [[if test "$enableval" = yes; then |
| SOCAT_USE_COMPRESS=True |
| else |
| SOCAT_USE_COMPRESS=False |
| fi |
| ]]) |
| |
| if test -z "$SOCAT_USE_COMPRESS" |
| then |
| if $SOCAT -hhh | grep -w -q openssl-compress; then |
| SOCAT_USE_COMPRESS=True |
| else |
| SOCAT_USE_COMPRESS=False |
| fi |
| fi |
| |
| AC_SUBST(SOCAT_USE_COMPRESS) |
| |
| if man --help | grep -q -e --warnings |
| then |
| MAN_HAS_WARNINGS=1 |
| else |
| MAN_HAS_WARNINGS= |
| AC_MSG_WARN(m4_normalize([man does not support --warnings, man page checks |
| will not be possible])) |
| fi |
| |
| AC_SUBST(MAN_HAS_WARNINGS) |
| |
| # Check for Python |
| AM_PATH_PYTHON(2.6) |
| |
| AC_PYTHON_MODULE(OpenSSL, t) |
| AC_PYTHON_MODULE(simplejson, t) |
| AC_PYTHON_MODULE(pyparsing, t) |
| AC_PYTHON_MODULE(pyinotify, t) |
| AC_PYTHON_MODULE(pycurl, t) |
| AC_PYTHON_MODULE(bitarray, t) |
| AC_PYTHON_MODULE(ipaddr, t) |
| AC_PYTHON_MODULE(mock) |
| AC_PYTHON_MODULE(affinity) |
| AC_PYTHON_MODULE(paramiko) |
| |
| # Development-only Python modules |
| PY_NODEV= |
| AC_PYTHON_MODULE(yaml) |
| if test $HAVE_PYMOD_YAML == "no"; then |
| PY_NODEV="$PY_NODEV yaml" |
| fi |
| |
| if test -n "$PY_NODEV"; then |
| AC_MSG_WARN(m4_normalize([Required development modules ($PY_NODEV) were not |
| found, you won't be able to run Python unittests])) |
| else |
| AC_MSG_NOTICE([Python development modules found, unittests enabled]) |
| fi |
| AC_SUBST(PY_NODEV) |
| AM_CONDITIONAL([PY_UNIT], [test -n $PY_NODEV]) |
| |
| AC_CONFIG_FILES([ Makefile ]) |
| |
| AC_OUTPUT |