## Copyright (C) 2013 Red Hat, Inc.# SPDX-License-Identifier: LGPL-2.1-or-laterm4_include([version.m4])AC_INIT([Cockpit],[VERSION_NUMBER],[devel@lists.cockpit-project.org],[cockpit],[https://cockpit-project.org/])AC_CONFIG_SRCDIR([src])AC_CONFIG_HEADERS([config.h])AC_CONFIG_AUX_DIR([tools])AM_INIT_AUTOMAKE([1.11 foreign dist-xz no-dist-gzip subdir-objects])# we want tar-ustar to avoid introducing extra metadata (ctime, atime) which# only adds useless non-determinism to the result. we also want to sort.am__tar='tar --format=ustar --sort=name --owner=root:0 --group=root:0 -chf - "$$tardir"'AC_USE_SYSTEM_EXTENSIONSAC_SYS_LARGEFILEAC_PROG_RANLIB# This is required to find the correct `ar` for cross-compilingAC_CHECK_TOOL(AR, ar)AC_CHECK_FUNCS(pidfd_getpid)AM_SILENT_RULES([yes])AC_MSG_CHECKING([whether to install to prefix only])AC_ARG_ENABLE([prefix-only],[AS_HELP_STRING([--enable-prefix-only], [Whether to install to prefix only])],[], [enable_prefix_only=no])AC_MSG_RESULT($enable_prefix_only)# --enable-selinux-policy=[type]AC_MSG_CHECKING([whether to build selinux policy, and which])AC_ARG_ENABLE([selinux-policy], [AS_HELP_STRING([--enable-selinux-policy=type], [Whether to build selinux policy, and which])])if test "${enable_selinux_policy:=no}" = 'yes'; thenAC_MSG_ERROR([--enable-selinux-policy requires a type (eg: targeted)])fiAM_CONDITIONAL(SELINUX_POLICY_ENABLED, test "$enable_selinux_policy" != "no")AC_SUBST(SELINUX_POLICY_TYPE, [${enable_selinux_policy}])AC_MSG_RESULT($enable_selinux_policy)AC_SEARCH_LIBS([argp_parse], [argp])case "$ac_cv_search_argp_parse" inno) AC_MSG_FAILURE([failed to find argp_parse]) ;;-l*) argp_LIBS="$ac_cv_search_argp_parse" ;;*) argp_LIBS= ;;esacAC_SUBST([argp_LIBS])AC_SEARCH_LIBS([fts_close], [fts])case "$ac_cv_search_fts_close" inno) AC_MSG_FAILURE([failed to find fts_close]) ;;-l*) fts_LIBS="$ac_cv_search_fts_close" ;;*) fts_LIBS= ;;esacAC_SUBST([fts_LIBS])# pkg-configGLIB_API_VERSION="GLIB_VERSION_2_68"PKG_CHECK_MODULES(glib, [gio-2.0 >= 2.68 gio-unix-2.0])glib_CFLAGS="${glib_CFLAGS} -DGLIB_VERSION_MIN_REQUIRED=$GLIB_API_VERSION"glib_CFLAGS="${glib_CFLAGS} -DGLIB_VERSION_MAX_ALLOWED=$GLIB_API_VERSION"PKG_CHECK_MODULES(libsystemd, [libsystemd >= 235])PKG_CHECK_MODULES(json_glib, [json-glib-1.0 >= 1.4])PKG_CHECK_MODULES(gnutls, [gnutls >= 3.6.0])PKG_CHECK_MODULES(krb5, [krb5-gssapi >= 1.11 krb5 >= 1.11])# pamAC_CHECK_HEADER([security/pam_appl.h], ,[AC_MSG_ERROR([Couldn't find PAM headers. Try installing pam-devel])])PAM_LIBS="-lpam"COCKPIT_SESSION_LIBS="$COCKPIT_SESSION_LIBS $PAM_LIBS"# pam module directoryAC_ARG_WITH([pamdir],[AS_HELP_STRING([--with-pamdir=DIR],[directory to install pam modules in])],[], [with_pamdir='${libdir}/security'])pamdir=$with_pamdirAC_SUBST(pamdir)# cryptAC_CHECK_HEADER([crypt.h], ,[AC_MSG_ERROR([Couldn't find crypt headers. Try installing glibc-headers])])AC_CHECK_LIB(crypt, crypt_r, [ true ],[AC_MSG_ERROR([Couldn't find crypt library. Try installing glibc-devel])])COCKPIT_WS_LIBS="$COCKPIT_WS_LIBS -lcrypt"# systemdAC_ARG_WITH([systemdunitdir], [AS_HELP_STRING([--with-systemdunitdir=DIR],[directory to install systemd unit files in])])if test ! -z "$with_systemdunitdir"; thensystemdunitdir=$with_systemdunitdirelif test "$enable_prefix_only" = "yes"; thensystemdunitdir='${prefix}/lib/systemd/system'elsePKG_CHECK_MODULES(SYSTEMD, [systemd])AC_MSG_CHECKING(for systemd unit dir)systemdunitdir=$($PKG_CONFIG systemd --variable=systemdsystemunitdir)if test "$systemdunitdir" = ""; thenAC_MSG_ERROR([systemd's pkg-config file doesn't contain 'systemdsystemunitdir' variable])fiAC_MSG_RESULT($systemdunitdir)fiAC_SUBST([systemdunitdir], [$systemdunitdir])# We need msgcat, msgfmt, and xgettext, but they're all in the same# package as xgettext, and we find them by PATH, so just check for the one.AC_PATH_PROG([XGETTEXT], [xgettext], [no])if test "$XGETTEXT" = "no"; thenAC_MSG_ERROR([Please install gettext tools])fi# ssh-addAC_PATH_PROG([SSH_ADD], [ssh-add], [/usr/bin/ssh-add], [$PATH:/usr/local/sbin:/usr/sbin:/sbin])AC_DEFINE_UNQUOTED([PATH_SSH_ADD], ["$SSH_ADD"], [Location of ssh-add binary])# ssh-agentAC_PATH_PROG([SSH_AGENT], [ssh-agent], [/usr/bin/ssh-agent], [$PATH:/usr/local/bin:/usr/bin:/bin])AC_DEFINE_UNQUOTED([PATH_SSH_AGENT], ["$SSH_AGENT"], [Location of ssh-agent binary])# Address sanitizerAC_MSG_CHECKING([for asan flags])AC_ARG_ENABLE(asan,AS_HELP_STRING([--enable-asan=no/yes],[Turn the Address Sanitizer on or off]))if test "$enable_asan" = "yes"; thenCFLAGS="$CFLAGS -fsanitize=address -O1 -fno-omit-frame-pointer -g"asan_status="yes"elseasan_status="no"fiAM_CONDITIONAL(WITH_ASAN, test "$enable_asan" = "yes")AC_MSG_RESULT($asan_status)# admin users groupAC_ARG_WITH([admin-group],[AS_HELP_STRING([--with-admin-group=GROUP],[system group to which admin users belong])],[admin_group=$withval],[AC_MSG_CHECKING([for system group to which admin users belong])CANDIDATE_GROUPS="wheel sudo root"admin_group="$(getent group ${CANDIDATE_GROUPS} | head -n1 | cut -f1 -d:)"if test -n "$admin_group"; thenAC_MSG_RESULT([$admin_group])elseAC_MSG_RESULT([unable to detect])AC_MSG_ERROR([none of '${CANDIDATE_GROUPS}' exist: please specify a group with --with-admin-group=])fi])AC_SUBST(admin_group)# Default PATH for cockpit-sessionAC_ARG_WITH([default-session-path],[AS_HELP_STRING([--with-default-session-path=PATH],[The value for the PATH environment variable in a session started by cockpit-session])],[default_session_path=$withval],[AC_MSG_CHECKING([for cockpit-session PATH value])if test "$(readlink /sbin)" == "usr/bin"; then# This is Arch where "sbin" is symlinked to "bin" and# "/bin" is symlinked to "/usr/bin". We use the# normal Arch PATH which omits "sbin" and "/bin" for# those reasons. Otherwise "pkexec" will find# cockpit-bridge in "/usr/sbin" and our rule won't# match.default_session_path=/usr/local/sbin:/usr/local/bin:/usr/binelsedefault_session_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binfiAC_MSG_RESULT([$default_session_path])])AC_DEFINE_UNQUOTED([DEFAULT_SESSION_PATH], ["$default_session_path"], [Default value of PATH for cockpit-session])# DocumentationAC_MSG_CHECKING([whether to build documentation])AC_ARG_ENABLE(doc,AS_HELP_STRING([--disable-doc],[Disable building documentation]))if test "$enable_doc" = "no"; thenAC_MSG_RESULT($enable_doc)elseif test "$enable_doc" = ""; thendisable_msg="(perhaps --disable-doc)"fienable_doc="yes"AC_MSG_RESULT($enable_doc)has_asciidoctor="no"AC_MSG_RESULT($has_asciidoctor)AC_PATH_PROG([ASCIIDOCTOR], [asciidoctor], [no])if test "$ASCIIDOCTOR" != "no"; thenhas_asciidoctor="yes"AC_SUBST(ASCIIDOCTOR)fifiAM_CONDITIONAL([ENABLE_DOC], [test "$enable_doc" = "yes"])AM_CONDITIONAL([HAS_ASCIIDOCTOR], [test "$has_asciidoctor" = "yes"])# Default for AllowMultiHostAC_MSG_CHECKING([for AllowMultiHost default])AC_ARG_ENABLE(multihost,AS_HELP_STRING([--enable-multihost],[Set AllowMultiHost to true by default]),[], [enable_multihost=no])AC_MSG_RESULT($enable_multihost)if test "$enable_multihost" = "no"; thenmultihost_def=0elsemultihost_def=1fiAC_DEFINE_UNQUOTED(ALLOW_MULTIHOST_DEFAULT, [$multihost_def], [default for AllowMultiHost configuration setting])# cockpit-clientAC_MSG_CHECKING([whether to install cockpit-client])AC_ARG_ENABLE([cockpit-client],[AS_HELP_STRING([--enable-cockpit-client], [Whether to install cockpit-client])],[], [enable_cockpit_client=no])AC_MSG_RESULT($enable_cockpit_client)AM_CONDITIONAL([ENABLE_COCKPIT_CLIENT], [test "$enable_cockpit_client" = "yes"])# DebugAC_MSG_CHECKING([for debug mode])AC_ARG_ENABLE(debug,AS_HELP_STRING([--enable-debug=no/default/yes],[Turn on or off debugging]))if test "$enable_debug" != "no"; thenAC_DEFINE_UNQUOTED(WITH_DEBUG, 1, [Print debug output])AC_DEFINE_UNQUOTED(_DEBUG, 1, [In debug mode])CFLAGS="$CFLAGS -g"fidebugdir='${prefix}/src/debug'if test "$enable_debug" = "yes"; thendebug_status="yes"debugdir=CFLAGS="$CFLAGS -O0"NODE_ENV="development"elif test "$enable_debug" = "no"; thendebug_status="no"CFLAGS="$CFLAGS -O2"NODE_ENV="production"elsedebug_status="default"NODE_ENV="${NODE_ENV:-production}"fiAM_CONDITIONAL(WITH_DEBUG, test "$enable_debug" = "yes")AC_MSG_RESULT($debug_status)AC_SUBST(NODE_ENV)AC_SUBST(debugdir)# CoverageAC_MSG_CHECKING([whether to build with coverage])AC_ARG_ENABLE([coverage],[AS_HELP_STRING([--enable-coverage], [Whether to enable coverage testing])],[],[enable_coverage=no])if test "$enable_coverage" = "yes"; thenif test "$GCC" != "yes"; thenAC_MSG_ERROR(Coverage testing requires GCC)fiCFLAGS="$CFLAGS -O0 -g --coverage"LDFLAGS="$LDFLAGS --coverage"fiAM_CONDITIONAL([WITH_COVERAGE], [test "$enable_coverage" = "yes"])AC_MSG_RESULT([$enable_coverage])# StrictAC_ARG_ENABLE(strict, [AS_HELP_STRING([--enable-strict], [Strict code compilation])])AC_MSG_CHECKING([build strict])if test "$enable_strict" = "yes"; thenCFLAGS="$CFLAGS -Werror"elseenable_strict="no"fiAC_MSG_RESULT($enable_strict)AM_PATH_PYTHON([3.6])# Generate#AC_SUBST(PAM_LIBS)AC_CONFIG_FILES([Makefilesrc/tls/cockpit-certificate-helpersrc/ws/cockpit-desktop])AC_OUTPUTdnl ==========================================================================echo "Cockpit $VERSION================prefix: ${prefix}exec_prefix: ${exec_prefix}libdir: ${libdir}libexecdir: ${libexecdir}bindir: ${bindir}sbindir: ${sbindir}datarootdir: ${datarootdir}datadir: ${datadir}sysconfdir: ${sysconfdir}localstatedir: ${localstatedir}pamdir: ${pamdir}systemd unit dir: ${systemdunitdir}compiler: ${CC}cflags: ${CFLAGS}cppflags: ${CPPFLAGS}admin group: ${admin_group}cockpit-session PATH: ${default_session_path}Building docs: ${enable_doc}Has asciidoctor: ${has_asciidoctor}Debug mode: ${debug_status}Node environment: ${NODE_ENV}With coverage: ${enable_coverage}With address sanitizer: ${asan_status}SELinux Policy: ${enable_selinux_policy}cockpit-client: ${enable_cockpit_client}ssh-add: ${SSH_ADD}ssh-agent: ${SSH_AGENT}Now type 'make' to compile cockpit."