# # Copyright (C) 2013 Red Hat, Inc. # SPDX-License-Identifier: LGPL-2.1-or-later m4_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_EXTENSIONS AC_SYS_LARGEFILE AC_PROG_RANLIB # This is required to find the correct `ar` for cross-compiling AC_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'; then AC_MSG_ERROR([--enable-selinux-policy requires a type (eg: targeted)]) fi AM_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" in no) AC_MSG_FAILURE([failed to find argp_parse]) ;; -l*) argp_LIBS="$ac_cv_search_argp_parse" ;; *) argp_LIBS= ;; esac AC_SUBST([argp_LIBS]) AC_SEARCH_LIBS([fts_close], [fts]) case "$ac_cv_search_fts_close" in no) AC_MSG_FAILURE([failed to find fts_close]) ;; -l*) fts_LIBS="$ac_cv_search_fts_close" ;; *) fts_LIBS= ;; esac AC_SUBST([fts_LIBS]) # pkg-config GLIB_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]) # pam AC_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 directory AC_ARG_WITH([pamdir], [AS_HELP_STRING([--with-pamdir=DIR], [directory to install pam modules in])], [], [with_pamdir='${libdir}/security']) pamdir=$with_pamdir AC_SUBST(pamdir) # crypt AC_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" # systemd AC_ARG_WITH([systemdunitdir], [AS_HELP_STRING([--with-systemdunitdir=DIR], [directory to install systemd unit files in])]) if test ! -z "$with_systemdunitdir"; then systemdunitdir=$with_systemdunitdir elif test "$enable_prefix_only" = "yes"; then systemdunitdir='${prefix}/lib/systemd/system' else PKG_CHECK_MODULES(SYSTEMD, [systemd]) AC_MSG_CHECKING(for systemd unit dir) systemdunitdir=$($PKG_CONFIG systemd --variable=systemdsystemunitdir) if test "$systemdunitdir" = ""; then AC_MSG_ERROR([systemd's pkg-config file doesn't contain 'systemdsystemunitdir' variable]) fi AC_MSG_RESULT($systemdunitdir) fi AC_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"; then AC_MSG_ERROR([Please install gettext tools]) fi # ssh-add AC_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-agent AC_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 sanitizer AC_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"; then CFLAGS="$CFLAGS -fsanitize=address -O1 -fno-omit-frame-pointer -g" asan_status="yes" else asan_status="no" fi AM_CONDITIONAL(WITH_ASAN, test "$enable_asan" = "yes") AC_MSG_RESULT($asan_status) # admin users group AC_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"; then AC_MSG_RESULT([$admin_group]) else AC_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-session AC_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/bin else default_session_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin fi AC_MSG_RESULT([$default_session_path]) ]) AC_DEFINE_UNQUOTED([DEFAULT_SESSION_PATH], ["$default_session_path"], [Default value of PATH for cockpit-session]) # Documentation AC_MSG_CHECKING([whether to build documentation]) AC_ARG_ENABLE(doc, AS_HELP_STRING([--disable-doc], [Disable building documentation]) ) if test "$enable_doc" = "no"; then AC_MSG_RESULT($enable_doc) else if test "$enable_doc" = ""; then disable_msg="(perhaps --disable-doc)" fi enable_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"; then has_asciidoctor="yes" AC_SUBST(ASCIIDOCTOR) fi fi AM_CONDITIONAL([ENABLE_DOC], [test "$enable_doc" = "yes"]) AM_CONDITIONAL([HAS_ASCIIDOCTOR], [test "$has_asciidoctor" = "yes"]) # Default for AllowMultiHost AC_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"; then multihost_def=0 else multihost_def=1 fi AC_DEFINE_UNQUOTED(ALLOW_MULTIHOST_DEFAULT, [$multihost_def], [default for AllowMultiHost configuration setting]) # cockpit-client AC_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"]) # Debug AC_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"; then AC_DEFINE_UNQUOTED(WITH_DEBUG, 1, [Print debug output]) AC_DEFINE_UNQUOTED(_DEBUG, 1, [In debug mode]) CFLAGS="$CFLAGS -g" fi debugdir='${prefix}/src/debug' if test "$enable_debug" = "yes"; then debug_status="yes" debugdir= CFLAGS="$CFLAGS -O0" NODE_ENV="development" elif test "$enable_debug" = "no"; then debug_status="no" CFLAGS="$CFLAGS -O2" NODE_ENV="production" else debug_status="default" NODE_ENV="${NODE_ENV:-production}" fi AM_CONDITIONAL(WITH_DEBUG, test "$enable_debug" = "yes") AC_MSG_RESULT($debug_status) AC_SUBST(NODE_ENV) AC_SUBST(debugdir) # Coverage AC_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"; then if test "$GCC" != "yes"; then AC_MSG_ERROR(Coverage testing requires GCC) fi CFLAGS="$CFLAGS -O0 -g --coverage" LDFLAGS="$LDFLAGS --coverage" fi AM_CONDITIONAL([WITH_COVERAGE], [test "$enable_coverage" = "yes"]) AC_MSG_RESULT([$enable_coverage]) # Strict AC_ARG_ENABLE(strict, [ AS_HELP_STRING([--enable-strict], [Strict code compilation]) ]) AC_MSG_CHECKING([build strict]) if test "$enable_strict" = "yes"; then CFLAGS="$CFLAGS -Werror" else enable_strict="no" fi AC_MSG_RESULT($enable_strict) AM_PATH_PYTHON([3.6]) # Generate # AC_SUBST(PAM_LIBS) AC_CONFIG_FILES([ Makefile src/tls/cockpit-certificate-helper src/ws/cockpit-desktop ]) AC_OUTPUT dnl ========================================================================== 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."