diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:59:45 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-16 19:59:45 +0000 |
commit | 82a9d6bb47d4eb7fe4dbe6ee783ae6923af01b13 (patch) | |
tree | 70ae347ee99aa1f19b6269773cdeb686e03e607f /configure.ac | |
parent | Initial commit. (diff) | |
download | cockpit-82a9d6bb47d4eb7fe4dbe6ee783ae6923af01b13.tar.xz cockpit-82a9d6bb47d4eb7fe4dbe6ee783ae6923af01b13.zip |
Adding upstream version 311.upstream/311upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 502 |
1 files changed, 502 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..ad8c853 --- /dev/null +++ b/configure.ac @@ -0,0 +1,502 @@ +# This file is part of Cockpit. +# +# Copyright (C) 2013 Red Hat, Inc. +# +# Cockpit is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. +# +# Cockpit is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Cockpit; If not, see <http://www.gnu.org/licenses/>. + +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( + closefrom +) + +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) + +# --disable-polkit +AC_MSG_CHECKING([whether to build polkit support]) +AC_ARG_ENABLE(polkit, AS_HELP_STRING([--disable-polkit], [Disable usage of polkit])) +AM_CONDITIONAL(WITH_POLKIT, test "$enable_polkit" != 'no') +if test "$enable_polkit" != 'no'; then + AC_DEFINE([WITH_POLKIT], 1, [Whether to build with polkit support]) +fi +AC_MSG_RESULT(${enable_polkit:=yes}) + +# --disable-ssh +AC_MSG_CHECKING([whether to build cockpit-ssh]) +AC_ARG_ENABLE(ssh, AS_HELP_STRING([--disable-ssh], [Disable cockpit-ssh build and libssh dependency])) +AM_CONDITIONAL(WITH_COCKPIT_SSH, test "$enable_ssh" != "no") +AC_MSG_RESULT(${enable_ssh:=yes}) + +# --enable-old-bridge +AC_MSG_CHECKING([whether to install the old C cockpit-bridge]) +AC_ARG_ENABLE(old_bridge, AS_HELP_STRING([--enable-old-bridge], [Install old C cockpit-bridge])) +AM_CONDITIONAL(WITH_OLD_BRIDGE, test "$enable_old_bridge" = "yes") +AC_MSG_RESULT(${enable_old_bridge:=no}) + +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_56" +PKG_CHECK_MODULES(glib, [gio-2.0 >= 2.56 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]) +if test "$enable_polkit" != "no"; then + PKG_CHECK_MODULES(polkit, [polkit-agent-1 >= 0.105]) +fi +if test "$enable_ssh" != "no"; then + PKG_CHECK_MODULES(libssh, [libssh >= 0.8.5]) + old_CFLAGS=$CFLAGS; CFLAGS=$libssh_CFLAGS + old_LIBS=$LIBS; LIBS=$libssh_LIBS + AC_CHECK_FUNCS(ssh_userauth_publickey_auto_get_current_identity) + CFLAGS=$old_CFLAGS + LIBS=$old_LIBS +fi + +# 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" + +# pcp +AC_MSG_CHECKING([whether to build with PCP]) +AC_ARG_ENABLE(pcp, AS_HELP_STRING([--disable-pcp], [Disable usage of PCP])) + +if test "$enable_pcp" = "no"; then + AC_MSG_RESULT($enable_pcp) + +else + if test "$enable_pcp" = ""; then + disable_msg="(perhaps --disable-pcp)" + fi + + enable_pcp="yes" + AC_MSG_RESULT($enable_pcp) + + AC_CHECK_HEADER([pcp/pmapi.h], , + [AC_MSG_ERROR([Couldn't find pcp headers $disable_msg])] + ) + AC_CHECK_HEADERS([pcp/import.h pcp/pmda.h], , + [AC_MSG_ERROR([Couldn't find pcp headers $disable_msg])], + [#include <pcp/pmapi.h>] + ) + AC_CHECK_LIB(pcp, pmNewContext, [ true ], + [AC_MSG_ERROR([Couldn't find pcp library $disable_msg])] + ) + AC_CHECK_LIB(pcp_pmda, pmdaCacheLookup, [ true ], + [AC_MSG_ERROR([Couldn't find pcp_pmda library $disable_msg])] + ) + AC_CHECK_LIB(pcp_import, pmiStart, [ true ], + [AC_MSG_ERROR([Couldn't find pcp_import library $disable_msg])] + ) + COCKPIT_PCP_LIBS="$COCKPIT_PCP_LIBS -lpcp" +fi + +AM_CONDITIONAL([ENABLE_PCP], [test "$enable_pcp" = "yes"]) + +# 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) + +# User and group for running cockpit web server (cockpit-tls or -ws in customized setups) + +AC_ARG_WITH(cockpit_user, + AS_HELP_STRING([--with-cockpit-user=<user>], + [User for running cockpit (root)] + ) + ) +AC_ARG_WITH(cockpit_group, + AS_HELP_STRING([--with-cockpit-group=<group>], + [Group for running cockpit] + ) + ) +if test -z "$with_cockpit_user"; then + COCKPIT_USER=root + COCKPIT_GROUP= +else + COCKPIT_USER=$with_cockpit_user + if test -z "$with_cockpit_group"; then + COCKPIT_GROUP=$with_cockpit_user + else + COCKPIT_GROUP=$with_cockpit_group + fi +fi + +AC_SUBST(COCKPIT_USER) +AC_SUBST(COCKPIT_GROUP) + +# User for running cockpit-ws instances from cockpit-tls + +AC_ARG_WITH(cockpit_ws_instance_user, + AS_HELP_STRING([--with-cockpit-ws-instance-user=<user>], + [User for running cockpit-ws instances from cockpit-tls (root)] + ) + ) +AC_ARG_WITH(cockpit_ws_instance_group, + AS_HELP_STRING([--with-cockpit-ws-instance-group=<group>], + [Group for running cockpit-ws instances from cockpit-tls] + ) + ) +if test -z "$with_cockpit_ws_instance_user"; then + if test "$COCKPIT_USER" != "root"; then + AC_MSG_ERROR([--with-cockpit-ws-instance-user is required when setting --with-cockpit-user]) + fi + COCKPIT_WSINSTANCE_USER=root +else + COCKPIT_WSINSTANCE_USER=$with_cockpit_ws_instance_user + if test -z "$with_cockpit_ws_instance_group"; then + COCKPIT_WSINSTANCE_GROUP=$with_cockpit_ws_instance_user + else + COCKPIT_WSINSTANCE_GROUP=$with_cockpit_ws_instance_group + fi +fi + +AC_SUBST(COCKPIT_WSINSTANCE_USER) +AC_SUBST(COCKPIT_WSINSTANCE_GROUP) + +# 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 wont + # 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) + + AC_PATH_PROG([XSLTPROC], [xsltproc], [no]) + if test "$XSLTPROC" = "no"; then + AC_MSG_ERROR([the xsltproc command was not found $disable_msg]) + fi + + AC_PATH_PROG([XMLTO], [xmlto], [no]) + if test "$XMLTO" = "no"; then + AC_MSG_ERROR([the xmlto command was not found $disable_msg]) + fi + + AC_SUBST(XSLTPROC) + AC_SUBST(XMLTO) +fi + +AM_CONDITIONAL([ENABLE_DOC], [test "$enable_doc" = "yes"]) + +# 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"]) + +if test "$enable_cockpit_client" = "yes" && test "$enable_old_bridge" = "yes"; then + AC_MSG_ERROR([--enable-cockpit-client conflicts with --enable-old-bridge]) +fi + +# 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 +doc/guide/version +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} + + cockpit-ws user: ${COCKPIT_USER} + cockpit-ws group: ${COCKPIT_GROUP} + cockpit-ws instance user: ${COCKPIT_WSINSTANCE_USER} + cockpit-ws instance group: ${COCKPIT_WSINSTANCE_GROUP} + admin group: ${admin_group} + cockpit-session PATH: ${default_session_path} + + Building docs: ${enable_doc} + Debug mode: ${debug_status} + Node environment: ${NODE_ENV} + With coverage: ${enable_coverage} + With address sanitizer: ${asan_status} + With PCP: ${enable_pcp} + With polkit: ${enable_polkit} + SELinux Policy: ${enable_selinux_policy} + + cockpit-client: ${enable_cockpit_client} + cockpit-ssh: ${enable_ssh} + + ssh-add: ${SSH_ADD} + ssh-agent: ${SSH_AGENT} + +Now type 'make' to compile cockpit." |