blob: a66f5362658f01786751eea9195e4c7018393efb [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
AC_PREREQ([2.61])
AC_INIT([guacamole-server], [1.6.0])
AC_CONFIG_AUX_DIR([build-aux])
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
AM_SILENT_RULES([yes])
LT_PREREQ([2.2])
LT_INIT([dlopen])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_MACRO_DIR([m4])
# Use TAP test driver for tests (part of automake)
AC_REQUIRE_AUX_FILE([tap-driver.sh])
# Programs
AC_PROG_CC
AC_PROG_CC_C99
AC_PROG_LIBTOOL
# Initialize pkg-config support
PKG_PROG_PKG_CONFIG()
# Headers
AC_CHECK_HEADERS([fcntl.h stdlib.h string.h sys/socket.h time.h sys/time.h syslog.h unistd.h cairo/cairo.h pngstruct.h])
# Source characteristics
AC_DEFINE([_GNU_SOURCE], [1], [Uses GNU-specific APIs (if available)])
AC_DEFINE([_XOPEN_SOURCE], [700], [Uses X/Open and POSIX APIs])
AC_DEFINE([__BSD_VISIBLE], [1], [Uses BSD-specific APIs (if available)])
# Check for availability of non-portable sched_getaffinity() function (one of
# several possible routes for determining the number of available processors)
AC_CHECK_FUNCS([sched_getaffinity])
# Check for whether math library is required
AC_CHECK_LIB([m], [cos],
[MATH_LIBS=-lm],
[AC_CHECK_DECL([cos],,
AC_MSG_ERROR("Complex math functions are missing and no libm was found")
[#include <math.h>])])
# libpng
AC_CHECK_LIB([png], [png_write_png], [PNG_LIBS=-lpng],
AC_MSG_ERROR("libpng is required for writing png messages"))
# libjpeg
AC_CHECK_LIB([jpeg], [jpeg_start_compress], [JPEG_LIBS=-ljpeg],
AC_MSG_ERROR("libjpeg is required for writing jpeg messages"))
# Cairo
AC_CHECK_LIB([cairo], [cairo_create], [CAIRO_LIBS=-lcairo],
AC_MSG_ERROR("Cairo is required for drawing instructions"))
# libpthread
AC_CHECK_LIB([pthread], [pthread_create], [PTHREAD_LIBS=-lpthread
AC_DEFINE([HAVE_LIBPTHREAD],,
[Whether libpthread was found])])
# librt
AC_CHECK_FUNC([timer_create], [AC_MSG_RESULT([timer_create was found without librt.])],
[AC_CHECK_LIB([rt], [timer_create],
[AC_MSG_RESULT([timer_create was found in librt.])
RT_LIBS=-lrt],
[AC_MSG_ERROR([timer_create could not be found.])])
])
# Include libdl for dlopen() if necessary
AC_CHECK_LIB([dl], [dlopen],
[DL_LIBS=-ldl],
[AC_CHECK_DECL([dlopen],,
AC_MSG_ERROR("libdl is required on systems which do not otherwise provide dlopen()"),
[#include <dlfcn.h>])])
#
# libuuid
#
have_libuuid=disabled
AC_ARG_WITH([libuuid],
[AS_HELP_STRING([--with-libuuid],
[use libuuid to generate unique identifiers @<:@default=check@:>@])],
[],
[with_libuuid=check])
if test "x$with_libuuid" != "xno"
then
have_libuuid=yes
AC_CHECK_LIB([uuid], [uuid_generate],
[UUID_LIBS=-luuid]
[AC_DEFINE([HAVE_LIBUUID],, [Whether libuuid is available])],
[have_libuuid=no])
fi
# OSSP UUID (if libuuid is unavilable)
if test "x${have_libuuid}" != "xyes"
then
AC_CHECK_LIB([ossp-uuid], [uuid_make], [UUID_LIBS=-lossp-uuid],
AC_CHECK_LIB([uuid], [uuid_make], [UUID_LIBS=-luuid],
AC_MSG_ERROR([
--------------------------------------------
Unable to find libuuid or the OSSP UUID library.
Either libuuid (from util-linux) or the OSSP UUID library is required for
guacamole-server to be built.
--------------------------------------------])))
# Check for and validate OSSP uuid.h header
AC_CHECK_HEADERS([ossp/uuid.h])
AC_CHECK_DECL([uuid_make],,
AC_MSG_ERROR("No OSSP uuid.h found in include path"),
[#ifdef HAVE_OSSP_UUID_H
#include <ossp/uuid.h>
#else
#include <uuid.h>
#endif
])
fi
# cunit
AC_CHECK_LIB([cunit], [CU_run_test], [CUNIT_LIBS=-lcunit])
AC_SUBST(DL_LIBS)
AC_SUBST(MATH_LIBS)
AC_SUBST(PNG_LIBS)
AC_SUBST(JPEG_LIBS)
AC_SUBST(CAIRO_LIBS)
AC_SUBST(RT_LIBS)
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(UUID_LIBS)
AC_SUBST(CUNIT_LIBS)
# Library functions
AC_CHECK_FUNCS([clock_gettime gettimeofday memmove memset select strdup nanosleep])
AC_CHECK_DECL([png_get_io_ptr],
[AC_DEFINE([HAVE_PNG_GET_IO_PTR],,
[Whether png_get_io_ptr() is defined])],,
[#include <png.h>])
AC_CHECK_DECL([cairo_format_stride_for_width],
[AC_DEFINE([HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH],,
[Whether cairo_format_stride_for_width() is defined])],,
[#include <cairo/cairo.h>])
AC_CHECK_DECL([poll],
[AC_DEFINE([HAVE_POLL],,
[Whether poll() is defined])],,
[#include <poll.h>])
AC_CHECK_DECL([strlcpy],
[AC_DEFINE([HAVE_STRLCPY],,
[Whether strlcpy() is defined])],,
[#include <string.h>])
AC_CHECK_DECL([strlcat],
[AC_DEFINE([HAVE_STRLCAT],,
[Whether strlcat() is defined])],,
[#include <string.h>])
AC_CHECK_DECL([strnstr],
[AC_DEFINE([HAVE_STRNSTR],,
[Whether strnstr() is defined])],,
[#include <string.h>])
# Typedefs
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
# Bundled libguac
AC_SUBST([LIBGUAC_LTLIB], '$(top_builddir)/src/libguac/libguac.la')
AC_SUBST([LIBGUAC_INCLUDE], '-I$(top_srcdir)/src/libguac')
# Common non-libguac utility library
AC_SUBST([COMMON_LTLIB], '$(top_builddir)/src/common/libguac_common.la')
AC_SUBST([COMMON_INCLUDE], '-I$(top_srcdir)/src/common')
# Common PulseAudio utility library
AC_SUBST([PULSE_LTLIB], '$(top_builddir)/src/pulse/libguac_pulse.la')
AC_SUBST([PULSE_INCLUDE], '-I$(top_srcdir)/src/pulse')
# Common base SSH client
AC_SUBST([COMMON_SSH_LTLIB], '$(top_builddir)/src/common-ssh/libguac_common_ssh.la')
AC_SUBST([COMMON_SSH_INCLUDE], '-I$(top_srcdir)/src/common-ssh')
# Kubernetes support
AC_SUBST([LIBGUAC_CLIENT_KUBERNETES_LTLIB], '$(top_builddir)/src/protocols/kubernetes/libguac-client-kubernetes.la')
AC_SUBST([LIBGUAC_CLIENT_KUBERNETES_INCLUDE], '-I$(top_srcdir)/src/protocols/kubernetes')
# RDP support
AC_SUBST([LIBGUAC_CLIENT_RDP_LTLIB], '$(top_builddir)/src/protocols/rdp/libguac-client-rdp.la')
AC_SUBST([LIBGUAC_CLIENT_RDP_INCLUDE], '-I$(top_srcdir)/src/protocols/rdp')
# Terminal emulator
AC_SUBST([TERMINAL_LTLIB], '$(top_builddir)/src/terminal/libguac-terminal.la')
AC_SUBST([TERMINAL_INCLUDE], '-I$(top_srcdir)/src/terminal $(PANGO_CFLAGS) $(PANGOCAIRO_CFLAGS) $(COMMON_INCLUDE)')
# Init directory
AC_ARG_WITH(init_dir,
[AS_HELP_STRING([--with-init-dir=<path>],
[install init scripts to the given directory])
],init_dir=$withval)
AM_CONDITIONAL([ENABLE_INIT], [test "x${init_dir}" != "x"])
AC_SUBST(init_dir)
# Systemd directory
AC_ARG_WITH(systemd_dir,
[AS_HELP_STRING([--with-systemd-dir=<path>],
[install systemd units to the given directory])
],systemd_dir=$withval)
AM_CONDITIONAL([ENABLE_SYSTEMD], [test "x${systemd_dir}" != "x"])
AC_SUBST(systemd_dir)
# guacd config file
AC_ARG_WITH(guacd_conf,
[AS_HELP_STRING([--with-guacd-conf=<path>],
[the full path to the guacd config file @<:@default=/etc/guacamole/guacd.conf@:>@])],
[guacd_conf=$withval],
[guacd_conf=/etc/guacamole/guacd.conf])
AC_DEFINE_UNQUOTED([GUACD_CONF_FILE], ["$guacd_conf"], [The full path to the guacd config file])
#
# libavcodec
#
have_libavcodec=disabled
AC_ARG_WITH([libavcodec],
[AS_HELP_STRING([--with-libavcodec],
[use libavcodec when encoding video @<:@default=check@:>@])],
[],
[with_libavcodec=check])
if test "x$with_libavcodec" != "xno"
then
have_libavcodec=yes
PKG_CHECK_MODULES([AVCODEC], [libavcodec],, [have_libavcodec=no]);
fi
AM_CONDITIONAL([ENABLE_AVCODEC], [test "x${have_libavcodec}" = "xyes"])
#
# libavformat
#
have_libavformat=disabled
AC_ARG_WITH([libavformat],
[AS_HELP_STRING([--with-libavformat],
[use libavformat when encoding video @<:@default=check@:>@])],
[],
[with_libavformat=check])
if test "x$with_libavformat" != "xno"
then
have_libavformat=yes
PKG_CHECK_MODULES([AVFORMAT], [libavformat],, [have_libavformat=no]);
fi
AM_CONDITIONAL([ENABLE_AVFORMAT], [test "x${have_libavformat}" = "xyes"])
#
# libavutil
#
have_libavutil=disabled
AC_ARG_WITH([libavutil],
[AS_HELP_STRING([--with-libavutil],
[use libavutil when encoding video @<:@default=check@:>@])],
[],
[with_libavutil=check])
if test "x$with_libavutil" != "xno"
then
have_libavutil=yes
PKG_CHECK_MODULES([AVUTIL], [libavutil],, [have_libavutil=no]);
fi
AM_CONDITIONAL([ENABLE_AVUTIL], [test "x${have_libavutil}" = "xyes"])
#
# libswscale
#
have_libswscale=disabled
AC_ARG_WITH([libswscale],
[AS_HELP_STRING([--with-libswscale],
[use libswscale when encoding video @<:@default=check@:>@])],
[],
[with_libswscale=check])
if test "x$with_libswscale" != "xno"
then
have_libswscale=yes
PKG_CHECK_MODULES([SWSCALE], [libswscale],, [have_libswscale=no]);
fi
AM_CONDITIONAL([ENABLE_SWSCALE], [test "x${have_libswscale}" = "xyes"])
#
# libssl
#
have_ssl=disabled
SSL_LIBS=
AC_ARG_WITH([ssl],
[AS_HELP_STRING([--with-ssl],
[support SSL encryption @<:@default=check@:>@])],
[],
[with_ssl=check])
if test "x$with_ssl" != "xno"
then
have_ssl=yes
AC_CHECK_HEADER(openssl/ssl.h,, [have_ssl=no])
AC_CHECK_LIB([ssl], [SSL_CTX_new], [SSL_LIBS="$SSL_LIBS -lssl -lcrypto"], [have_ssl=no])
if test "x${have_ssl}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
Unable to find libssl.
guacd will not support SSL connections.
--------------------------------------------])
else
AC_DEFINE([ENABLE_SSL],, [Whether SSL-related support is enabled])
# OpenSSL 1.1 does away with explicit threading callbacks
AC_MSG_CHECKING([whether libssl requires threading callbacks])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <openssl/opensslv.h>
#if OPENSSL_VERSION_NUMBER < 0x10100000L
#error Threading callbacks required.
#endif
int main() {
return 0;
}
]])],
[AC_MSG_RESULT([no])],
[AC_MSG_RESULT([yes])
AC_DEFINE([OPENSSL_REQUIRES_THREADING_CALLBACKS],,
[Whether OpenSSL requires explicit threading callbacks for threadsafety])])
fi
fi
AM_CONDITIONAL([ENABLE_SSL], [test "x${have_ssl}" = "xyes"])
AC_SUBST(SSL_LIBS)
#
# Winsock
#
have_winsock=disabled
WINSOCK_LIBS=
AC_ARG_WITH([winsock],
[AS_HELP_STRING([--with-winsock],
[support Windows Sockets API @<:@default=check@:>@])],
[],
[with_winsock=check])
if test "x$with_winsock" != "xno"
then
have_winsock=yes
AC_CHECK_LIB([wsock32], [main],
[WINSOCK_LIBS="-lwsock32"]
[AC_DEFINE([ENABLE_WINSOCK],,
[Whether Windows Socket API support is enabled])],
[have_winsock=no])
fi
AM_CONDITIONAL([ENABLE_WINSOCK], [test "x${have_winsock}" = "xyes"])
AC_SUBST(WINSOCK_LIBS)
#
# Ogg Vorbis
#
have_vorbis=disabled
VORBIS_LIBS=
AC_ARG_WITH([vorbis],
[AS_HELP_STRING([--with-vorbis],
[support Ogg Vorbis @<:@default=check@:>@])],
[],
[with_vorbis=check])
if test "x$with_vorbis" != "xno"
then
have_vorbis=yes
AC_CHECK_HEADER(vorbis/vorbisenc.h,, [have_vorbis=no])
AC_CHECK_LIB([ogg], [ogg_stream_init], [VORBIS_LIBS="$VORBIS_LIBS -logg"], [have_vorbis=no])
AC_CHECK_LIB([vorbis], [vorbis_block_init], [VORBIS_LIBS="$VORBIS_LIBS -lvorbis"], [have_vorbis=no])
AC_CHECK_LIB([vorbisenc], [vorbis_encode_init], [VORBIS_LIBS="$VORBIS_LIBS -lvorbisenc"], [have_vorbis=no])
if test "x${have_vorbis}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
Unable to find libogg / libvorbis / libvorbisenc.
Sound will not be encoded with Ogg Vorbis.
--------------------------------------------])
else
AC_DEFINE([ENABLE_OGG],,
[Whether support for Ogg Vorbis is enabled])
fi
fi
AM_CONDITIONAL([ENABLE_OGG], [test "x${have_vorbis}" = "xyes"])
AC_SUBST(VORBIS_LIBS)
#
# PulseAudio
#
have_pulse=disabled
PULSE_LIBS=
AC_ARG_WITH([pulse],
[AS_HELP_STRING([--with-pulse],
[support PulseAudio @<:@default=check@:>@])],
[],
[with_pulse=check])
if test "x$with_pulse" != "xno"
then
have_pulse=yes
AC_CHECK_LIB([pulse], [pa_context_new], [PULSE_LIBS="$PULSE_LIBS -lpulse"], [have_pulse=no])
if test "x${have_pulse}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
Unable to find libpulse
Sound support for VNC will be disabled
--------------------------------------------])
else
AC_DEFINE([ENABLE_PULSE],, [Whether PulseAudio support is enabled])
fi
fi
AM_CONDITIONAL([ENABLE_PULSE], [test "x${have_pulse}" = "xyes"])
AC_SUBST(PULSE_LIBS)
#
# PANGO
#
have_pango=disabled
AC_ARG_WITH([pango],
[AS_HELP_STRING([--with-pango],
[support Pango text layout @<:@default=check@:>@])],
[],
[with_pango=check])
if test "x$with_pango" != "xno"
then
have_pango=yes
PKG_CHECK_MODULES([PANGO], [pango],, [have_pango=no]);
PKG_CHECK_MODULES([PANGOCAIRO], [pangocairo],, [have_pango=no]);
fi
#
# Terminal emulator
#
have_terminal=disabled
AC_ARG_WITH([terminal],
[AS_HELP_STRING([--with-terminal],
[support text-based protocols @<:@default=check@:>@])],
[],
[with_terminal=check])
if test "x$with_terminal" != "xno"
then
have_terminal=yes
if test "x${have_pango}" != "xyes"
then
have_terminal=no
fi
fi
AM_CONDITIONAL([ENABLE_TERMINAL], [test "x${have_terminal}" = "xyes"])
#
# libVNCServer
#
have_libvncserver=disabled
VNC_LIBS=
AC_ARG_WITH([vnc],
[AS_HELP_STRING([--with-vnc],
[support VNC @<:@default=check@:>@])],
[],
[with_vnc=check])
if test "x$with_vnc" != "xno"
then
have_libvncserver=yes
AC_CHECK_LIB([vncclient], [rfbInitClient], [VNC_LIBS="$VNC_LIBS -lvncclient"], [have_libvncserver=no])
fi
#
# Underlying libvncserver usage of gcrypt
#
if test "x${have_libvncserver}" = "xyes"
then
# Whether libvncserver was built against libgcrypt
AC_CHECK_DECL([LIBVNCSERVER_WITH_CLIENT_GCRYPT],
[AC_CHECK_HEADER(gcrypt.h,,
[AC_MSG_WARN([
--------------------------------------------
libvncserver appears to be built against
libgcrypt, but the libgcrypt headers
could not be found. VNC will be disabled.
--------------------------------------------])
have_libvncserver=no])],,
[[#include <rfb/rfbconfig.h>]])
fi
AM_CONDITIONAL([ENABLE_VNC], [test "x${have_libvncserver}" = "xyes"])
AC_SUBST(VNC_LIBS)
#
# Repeater support within libVNCServer
#
if test "x${have_libvncserver}" = "xyes"
then
have_vnc_repeater=yes
AC_CHECK_MEMBERS([rfbClient.destHost, rfbClient.destPort],
[], [have_vnc_repeater=no],
[[#include <rfb/rfbclient.h>]])
if test "x${have_vnc_repeater}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
No repeater support found in libvncclient.
Support for VNC repeaters will not be built.
--------------------------------------------])
else
AC_DEFINE([ENABLE_VNC_REPEATER],,
[Whether support for VNC repeaters is enabled.])
fi
fi
#
# Listening support within libVNCServer
#
if test "x${have_libvncserver}" = "xyes"
then
have_vnc_listen=yes
AC_CHECK_DECL([listenForIncomingConnectionsNoFork],
[], [have_vnc_listen=no],
[[#include <rfb/rfbclient.h>]])
if test "x${have_vnc_listen}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
No listening support found in libvncclient.
Support for listen-mode connections will not be built.
--------------------------------------------])
else
AC_DEFINE([ENABLE_VNC_LISTEN],,
[Whether support for listen-mode VNC connections is enabled.])
fi
fi
#
# TLS Locking Support within libVNCServer
#
if test "x${have_libvncserver}" = "xyes"
then
have_vnc_tls_locking=yes
AC_CHECK_MEMBERS([rfbClient.LockWriteToTLS, rfbClient.UnlockWriteToTLS],
[], [have_vnc_tls_locking=no],
[[#include <rfb/rfbclient.h>]])
if test "x${have_vnc_tls_locking}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
This version of libvncclient lacks support
for TLS locking. VNC connections that use
TLS may experience instability as documented
in GUACAMOLE-414])
else
AC_DEFINE([ENABLE_VNC_TLS_LOCKING],,
[Whether support for TLS locking within VNC is enabled.])
fi
fi
#
# Generic credential support within libVNCServer (authentication beyond
# basic, standard VNC passwords)
#
if test "x${have_libvncserver}" = "xyes"
then
have_vnc_creds=yes
AC_CHECK_MEMBERS([rfbClient.GetCredential],
[], [have_vnc_creds=no],
[[#include <rfb/rfbclient.h>]])
if test "x${have_vnc_creds}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
No generic credential support found in libvncclient.
VNC authentication support will be limited to passwords.
--------------------------------------------])
else
AC_DEFINE([ENABLE_VNC_GENERIC_CREDENTIALS],,
[Whether support for generic VNC credentials is available.])
fi
fi
#
# libVNCserver support for the rfbSetDesktopSizeMsg message, which allows the
# VNC client to send its dimensions to the server, requesting that the server
# resize itself to match. If libvnc lacks this message, remote resize will
# be completely disabled.
#
if test "x${have_libvncserver}" = "xyes"
then
have_vnc_size_msg=yes
AC_CHECK_TYPE([rfbSetDesktopSizeMsg],
[], [have_vnc_size_msg=no],
[[#include <rfb/rfbproto.h>]])
if test "x${have_vnc_size_msg}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------------------
No support for rfbSetDesktopSizeMsg in libvncclient.
VNC support for remote display resize will be disabled.
--------------------------------------------------------])
else
AC_DEFINE([LIBVNC_HAS_SIZE_MSG],,
[Whether VNC client will support sending desktop size messages.])
fi
fi
#
# libVNCserver support for the screen structure, which allows for tracking
# multiple screens that are part of a larger frame buffer display. If this
# feature is missing, the VNC client may still attempt to send the display
# resize messages, but will assume that there is a one-to-one relationship
# between the screen size and the frame buffer size (which is currently safe
# for Guacamole, as it lacks multi-monitor/screen support).
#
if test "x${have_libvncserver}" = "xyes"
then
have_vnc_screen=yes
AC_CHECK_MEMBERS([rfbClient.screen],
[], [have_vnc_screen=no],
[[#include <rfb/rfbclient.h>]])
if test "x${have_vnc_screen}" = "xyes"
then
AC_DEFINE([LIBVNC_CLIENT_HAS_SCREEN],,
[Whether rfbClient contains the screen data structure.])
fi
fi
#
# libVNCserver support for the requestedResize member, which enables the
# client to pause frame buffer updates during a resize operation. If support
# for this is missing, Guacamole may still attempt to send the resize requests
# to the remote display, but there may be odd display behavior just before,
# during, or just after the resize, if a display update message happens to
# coincide closely enough with a display resize message.
#
if test "x${have_libvncserver}" = "xyes"
then
have_vnc_requestedresize=yes
AC_CHECK_MEMBERS([rfbClient.requestedResize],
[], [have_vnc_requestedresize=no],
[[#include <rfb/rfbclient.h>]])
if test "x${have_vnc_requestedresize}" = "xyes"
then
AC_DEFINE([LIBVNC_CLIENT_HAS_REQUESTED_RESIZE],,
[Whether rfbClient contains the requestedResize member.])
fi
fi
#
# FreeRDP (libfreerdpX, libfreerdp-clientX, and libwinprX)
#
freerdp_version=
have_freerdp=disabled
FREERDP_PLUGIN_DIR=
AC_ARG_WITH([rdp],
[AS_HELP_STRING([--with-rdp],
[support RDP @<:@default=check@:>@])],
[],
[with_rdp=check])
# FreeRDP plugin directory
AC_ARG_WITH(freerdp_plugin_dir,
[AS_HELP_STRING([--with-freerdp-plugin-dir=<path>],
[install FreeRDP plugins to the given directory @<:@default=check@:>@])
],FREERDP_PLUGIN_DIR=$withval)
# Preserve CPPFLAGS so it can be restored later, following the addition of
# options specific to FreeRDP tests
OLDCPPFLAGS="$CPPFLAGS"
if test "x$with_rdp" != "xno"
then
freerdp_version="(3.x)"
have_freerdp=yes
PKG_CHECK_MODULES([RDP], [freerdp3 freerdp-client3 winpr3],
[CPPFLAGS="${RDP_CFLAGS} -Werror $CPPFLAGS"]
[AS_IF([test "x${FREERDP_PLUGIN_DIR}" = "x"],
[FREERDP_PLUGIN_DIR="`$PKG_CONFIG --variable=libdir freerdp3`/freerdp3"])],
[AC_MSG_WARN([
--------------------------------------------
Unable to find FreeRDP3 (libfreerdp3 / libfreerdp-client3 / libwinpr3).
Checking for FreeRDP2.
--------------------------------------------])
have_freerdp=no])
fi
if test "x$with_rdp" != "xno" -a "x${have_freerdp}" = "xno"
then
freerdp_version="(2.x)"
have_freerdp=yes
PKG_CHECK_MODULES([RDP], [freerdp2 freerdp-client2 winpr2],
[CPPFLAGS="${RDP_CFLAGS} -Werror $CPPFLAGS"]
[AS_IF([test "x${FREERDP_PLUGIN_DIR}" = "x"],
[FREERDP_PLUGIN_DIR="`$PKG_CONFIG --variable=libdir freerdp2`/freerdp2"])],
[AC_MSG_WARN([
--------------------------------------------
Unable to find FreeRDP2 (libfreerdp2 / libfreerdp-client2 / libwinpr2)
RDP will be disabled.
--------------------------------------------])
have_freerdp=no])
fi
# Available color conversion functions
if test "x${have_freerdp}" = "xyes"
then
# FreeRDP 2.0.0-rc3 and older referred to FreeRDPConvertColor() as
# ConvertColor()
AC_CHECK_DECL([FreeRDPConvertColor],
[AC_DEFINE([HAVE_FREERDPCONVERTCOLOR],,
[Whether FreeRDPConvertColor() is defined])],,
[#include <freerdp/codec/color.h>])
fi
# It is difficult or impossible to test for variations in FreeRDP behavior in
# between releases, as the change in behavior may not (yet) be associated with
# a corresponding change in version number and may not have any detectable
# effect on the FreeRDP API
AC_ARG_ENABLE(allow_freerdp_snapshots,
[AS_HELP_STRING([--enable-allow-freerdp-snapshots],
[allow building against unknown development snapshots of FreeRDP])
],allow_freerdp_snapshots=yes)
if test "x${have_freerdp}" = "xyes" -a "x${allow_freerdp_snapshots}" != "xyes"
then
AC_MSG_CHECKING([whether FreeRDP appears to be a development version])
AC_EGREP_CPP([\"[0-9]+\\.[0-9]+\\.[0-9]+(-rc[0-9]+)?\"], [
#include <freerdp/version.h>
FREERDP_VERSION_FULL
],
[AC_MSG_RESULT([no])],
[AC_MSG_RESULT([yes])]
[AC_MSG_ERROR([
--------------------------------------------
You are building against a development version of FreeRDP. Non-release
versions of FreeRDP may have differences in behavior that are impossible to
check for at build time. This may result in memory leaks or other strange
behavior.
*** PLEASE USE A RELEASED VERSION OF FREERDP IF POSSIBLE ***
If you are ABSOLUTELY CERTAIN that building against this version of FreeRDP
is OK, rerun configure with the --enable-allow-freerdp-snapshots
--------------------------------------------])])
fi
# Variation in memory internal allocation/free behavior for bitmaps
if test "x${have_freerdp}" = "xyes"
then
# FreeRDP 2.0.0-rc0 and older automatically free rdpBitmap and its
# associated data member within Bitmap_Free(), relying on the
# implementation-specific free handler to free only implementation-specific
# data. This changed in commit 2cf10cc, and implementations must now
# manually free all data associated with the rdpBitmap, even data which
# was not allocated by the implementation.
AC_MSG_CHECKING([whether Bitmap_Free() frees the rdpBitmap and its image data])
AC_EGREP_CPP([\"2\\.0\\.0-dev\"], [
#include <freerdp/version.h>
FREERDP_VERSION_FULL
],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([FREERDP_BITMAP_FREE_FREES_BITMAP],,
[Whether Bitmap_Free() frees the rdpBitmap and its image data])],
[AC_MSG_RESULT([no])])
fi
# Variation in memory internal allocation/free behavior for channel streams
if test "x${have_freerdp}" = "xyes"
then
# FreeRDP 2.0.0-rc3 through 2.0.0-rc4 automatically free the wStream
# provided to pVirtualChannelWriteEx(). This changed in commit 1b78b59, and
# implementations must manually free the wStream after it is no longer
# needed (after the write is complete or cancelled).
AC_MSG_CHECKING([whether pVirtualChannelWriteEx() frees the wStream upon completion])
AC_EGREP_CPP([\"2\\.0\\.0-(rc|dev)[3-4]\"], [
#include <freerdp/version.h>
FREERDP_VERSION_FULL
],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([FREERDP_SVC_CORE_FREES_WSTREAM],,
[Whether pVirtualChannelWriteEx() frees the wStream upon completion])],
[AC_MSG_RESULT([no])])
fi
# Glyph callback variants
if test "x${have_freerdp}" = "xyes"
then
# FreeRDP 2.0.0-rc3 and older used UINT32 for integer parameters to all
# rdpGlyph callbacks
AC_MSG_CHECKING([whether rdpGlyph callbacks accept INT32 integer parameters])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/freerdp.h>
#include <freerdp/graphics.h>
#include <winpr/wtypes.h>
BOOL test_begindraw(rdpContext* context, INT32 x, INT32 y,
INT32 width, INT32 height, UINT32 fgcolor, UINT32 bgcolor,
BOOL redundant);
rdpGlyph glyph = {
.BeginDraw = test_begindraw
};
int main() {
return (int) glyph.BeginDraw(NULL, 0, 0, 0, 0, 0, 0, FALSE);
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([FREERDP_GLYPH_CALLBACKS_ACCEPT_INT32],,
[Whether rdpGlyph callbacks accept INT32 integer parameters])],
[AC_MSG_RESULT([no])])
fi
# CLIPRDR callback variants
if test "x${have_freerdp}" = "xyes"
then
# FreeRDP 2.0.0-rc3 and older did not use const for CLIPRDR callbacks
AC_MSG_CHECKING([whether CLIPRDR callbacks require const for their final parameter])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/client/cliprdr.h>
#include <winpr/wtypes.h>
UINT test_monitor_ready(CliprdrClientContext* cliprdr,
const CLIPRDR_MONITOR_READY* monitor_ready);
CliprdrClientContext context = {
.MonitorReady = test_monitor_ready
};
int main() {
return (int) context.MonitorReady(NULL, NULL);
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([FREERDP_CLIPRDR_CALLBACKS_REQUIRE_CONST],,
[Whether CLIPRDR callbacks require const for the final parameter])],
[AC_MSG_RESULT([no])])
fi
# RAIL callback variants
if test "x${have_freerdp}" = "xyes"
then
# FreeRDP 2.0.0-rc3 and older did not use const for RAIL callbacks
AC_MSG_CHECKING([whether RAIL callbacks require const for their final parameter])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/client/rail.h>
#include <winpr/wtypes.h>
UINT test_server_handshake(RailClientContext* rail,
const RAIL_HANDSHAKE_ORDER* handshake);
RailClientContext context = {
.ServerHandshake = test_server_handshake
};
int main() {
return (int) context.ServerHandshake(NULL, NULL);
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([FREERDP_RAIL_CALLBACKS_REQUIRE_CONST],,
[Whether RAIL callbacks require const for the final parameter])],
[AC_MSG_RESULT([no])])
fi
# Support for receiving unannounced orders from the RDP server
if test "x${have_freerdp}" = "xyes"
then
AC_CHECK_MEMBERS([rdpSettings.AllowUnanouncedOrdersFromServer],,
[AC_MSG_WARN([
--------------------------------------------
This version of FreeRDP does not support relaxed order checks. RDP servers
that send orders that the client did not announce as supported (such as the
VirtualBox RDP server) will likely not be usable.
See: https://issues.apache.org/jira/browse/GUACAMOLE-962
--------------------------------------------])],
[[#include <freerdp/freerdp.h>]])
fi
# Updated certificate verification callback (introduced with 2.0.0, not present
# in 2.0.0-rc4 or earlier)
if test "x${have_freerdp}" = "xyes"
then
AC_CHECK_MEMBERS([freerdp.VerifyCertificateEx],,,
[[#include <freerdp/freerdp.h>]])
fi
if test "x${have_freerdp}" = "xyes"
then
AC_CHECK_DECLS([winpr_aligned_free],
[AC_DEFINE([HAVE_WINPR_ALIGNED],,
[Defined if winpr_aligned_free() and winpr_aligned_malloc() are available])],,
[#include <winpr/crt.h>])
fi
if test "x${have_freerdp}" = "xyes"
then
AC_MSG_CHECKING([whether CLIPRDR structs have a common CLIPRDR_HEADER])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/client/cliprdr.h>
int main() {
CLIPRDR_FORMAT_LIST list;
list.common.msgType = 0;
(void)list;
return 0;
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([HAVE_CLIPRDR_HEADER],,
[Defined if CLIPRDR structs have a common CLIPRDR_HEADER])],
[AC_MSG_RESULT([no])])
fi
if test "x${have_freerdp}" = "xyes"
then
AC_CHECK_DECLS([FreeRDPReadColor],
[AC_DEFINE([USE_UPDATED_RW_COLOR_FUNCS],,
[Defined if FreeRDPReadColor() and FreeRDPWriteColor() are available])],,
[#include <freerdp/codec/color.h>])
fi
if test "x${have_freerdp}" = "xyes"
then
AC_CHECK_DECLS([freerdp_settings_set_pointer],
[AC_DEFINE([HAVE_SETTERS_GETTERS],,
[Defined if freerdp_settings_set_pointer is available])],,
[#include <freerdp/settings.h>])
fi
if test "x${have_freerdp}" = "xyes"
then
AC_MSG_CHECKING([whether freerdp structs have a context])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/freerdp.h>
int main() {
freerdp* instance = freerdp_new();
/* We cast to void to prevent unused variable warnings */
(void)instance->context->input;
(void)instance->context->settings;
freerdp_free(instance);
return 0;
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([FREERDP_HAS_CONTEXT],,
[FreeRDP structs have a context])],
[AC_MSG_RESULT([no])])
fi
if test "x${have_freerdp}" = "xyes"
then
AC_CHECK_DECL([freerdp_shall_disconnect_context],
[AC_DEFINE([HAVE_DISCONNECT_CONTEXT],,
[Defined if 'freerdp_shall_disconnect_context' is available in FreeRDP])],,
[#include <freerdp/freerdp.h>])
fi
if test "x${have_freerdp}" = "xyes"
then
# Check whether FreeRDP 3.x requires const for GetPluginData
AC_MSG_CHECKING([whether GetPluginData requires const for the returned args])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/dvc.h>
/* A dummy function that matches the expected signature of GetPluginData */
const ADDIN_ARGV* dummy_GetPluginData(IDRDYNVC_ENTRY_POINTS* pEntryPoints) {
return NULL;
}
int main() {
/* Create a dummy IDRDYNVC_ENTRY_POINTS struct */
IDRDYNVC_ENTRY_POINTS entryPoints;
/* Manually set the GetPluginData pointer for testing */
entryPoints.GetPluginData = dummy_GetPluginData;
const ADDIN_ARGV* result = entryPoints.GetPluginData(&entryPoints);
/* Casting to void to avoid unused variable warning */
(void)result;
return 0;
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([PLUGIN_DATA_CONST],,
[Defined if GetPluginData returns a pointer to a const ADDIN_ARGV])],
[AC_MSG_RESULT([no])])
fi
if test "x${have_freerdp}" = "xyes"
then
# Check whether glyph.New expects a const rdpGlyph* parameter
AC_MSG_CHECKING([whether glyph.New expects a const rdpGlyph* parameter])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/graphics.h>
BOOL mock_glyph_new(rdpContext* context, const rdpGlyph* glyph) {
return TRUE;
}
int main() {
rdpGlyph* glyph = (rdpGlyph*) malloc(sizeof(rdpGlyph));
glyph->New = mock_glyph_new;
free(glyph);
return 0;
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([RDP_GLYPH_NEW_REQUIRES_CONST],,
[Defined if glyph.New expects a const rdpGlyph* parameter])],
[AC_MSG_RESULT([no])])
fi
if test "x${have_freerdp}" = "xyes"
then
# Check whether pointer.Set expects a const rdpPointer* parameter
AC_MSG_CHECKING([whether pointer.Set expects a const rdpPointer* parameter])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/graphics.h>
BOOL mock_pointer_set(rdpContext* context, const rdpPointer* pointer) {
return TRUE;
}
int main() {
rdpPointer* pointer = (rdpPointer*) malloc(sizeof(rdpPointer));
pointer->Set = mock_pointer_set;
free(pointer);
return 0;
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([RDP_POINTER_SET_REQUIRES_CONST],,
[Defined if pointer.Set expects a const rdpPointer* parameter])],
[AC_MSG_RESULT([no])])
fi
if test "x${have_freerdp}" = "xyes"
then
AC_MSG_CHECKING([whether freerdp instance supports LoadChannels])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <freerdp/freerdp.h>
/* Mock LoadChannels function with the expected signature */
BOOL load_channels(freerdp* instance) {
return TRUE;
}
int main() {
freerdp* instance = freerdp_new();
instance->LoadChannels = load_channels;
freerdp_free(instance);
return 0;
}
]])],
[AC_MSG_RESULT([yes])]
[AC_DEFINE([RDP_INST_HAS_LOAD_CHANNELS],,
[Defined if freerdp instance supports LoadChannels])],
[AC_MSG_RESULT([no])])
fi
# Restore CPPFLAGS, removing FreeRDP-specific options needed for testing
CPPFLAGS="$OLDCPPFLAGS"
AC_SUBST(FREERDP_PLUGIN_DIR)
AM_CONDITIONAL([ENABLE_RDP], [test "x${have_freerdp}" = "xyes"])
#
# libssh2
#
have_libssh2=disabled
SSH_LIBS=
AC_ARG_WITH([ssh],
[AS_HELP_STRING([--with-ssh],
[support SSH @<:@default=check@:>@])],
[],
[with_ssh=check])
AC_ARG_ENABLE(ssh_agent,
[AS_HELP_STRING([--enable-ssh-agent],
[enable built-in ssh-agent])
],enable_ssh_agent=yes)
if test "x$with_ssh" != "xno"
then
have_libssh2=yes
AC_CHECK_LIB([ssh2], [libssh2_userauth_publickey_frommemory],
[SSH_LIBS="$SSH_LIBS -lssh2"],
[have_libssh2=no])
fi
AM_CONDITIONAL([ENABLE_COMMON_SSH], [test "x${have_libssh2}" = "xyes" \
-a "x${have_ssl}" = "xyes"])
AM_COND_IF([ENABLE_COMMON_SSH],
[AC_DEFINE([ENABLE_COMMON_SSH],,
[Whether support for the common SSH core is enabled])])
AM_CONDITIONAL([ENABLE_SSH], [test "x${have_libssh2}" = "xyes" \
-a "x${have_terminal}" = "xyes" \
-a "x${have_ssl}" = "xyes"])
AC_SUBST(SSH_LIBS)
#
# Underlying crypto library usage of libssh2
#
if test "x${have_libssh2}" = "xyes"
then
# Whether libssh2 was built against libgcrypt
AC_CHECK_LIB([ssh2], [gcry_control],
[AC_CHECK_HEADER(gcrypt.h,
[AC_DEFINE([LIBSSH2_USES_GCRYPT],,
[Whether libssh2 was built against libgcrypt])],
[AC_MSG_WARN([
--------------------------------------------
libssh2 appears to be built against libgcrypt, but the libgcrypt headers
could not be found. SSH will be disabled.
--------------------------------------------])
have_libssh2=no])])
fi
#
# Agent forwarding support within libssh2
#
have_ssh_agent=no
if test "x${have_libssh2}" = "xyes" -a "x${enable_ssh_agent}" = "xyes"
then
AC_CHECK_DECL([libssh2_channel_request_auth_agent],
[have_ssh_agent=yes], [],
[[#include <libssh2.h>]])
if test "x${have_ssh_agent}" = "xno"
then
AC_MSG_ERROR([
--------------------------------------------
Agent forwarding support was requested but no such support was found
in libssh2.
--------------------------------------------])
else
AC_DEFINE([ENABLE_SSH_AGENT],,
[Whether agent forwarding support for SSH is enabled])
fi
fi
AM_CONDITIONAL([ENABLE_SSH_AGENT], [test "x${have_ssh_agent}" = "xyes" \
-a "x${enable_ssh_agent}" = "xyes"])
#
# libtelnet
#
have_libtelnet=disabled
TELNET_LIBS=
AC_ARG_WITH([telnet],
[AS_HELP_STRING([--with-telnet],
[support Telnet @<:@default=check@:>@])],
[],
[with_telnet=check])
if test "x$with_telnet" != "xno"
then
have_libtelnet=yes
AC_CHECK_LIB([telnet], [telnet_init],
[TELNET_LIBS="$TELNET_LIBS -ltelnet"],
[have_libtelnet=no])
fi
AM_CONDITIONAL([ENABLE_TELNET], [test "x${have_libtelnet}" = "xyes" \
-a "x${have_terminal}" = "xyes"])
AC_SUBST(TELNET_LIBS)
#
# libwebp
#
have_webp=disabled
WEBP_LIBS=
AC_ARG_WITH([webp],
[AS_HELP_STRING([--with-webp],
[support WebP image encoding @<:@default=check@:>@])],
[],
[with_webp=check])
if test "x$with_webp" != "xno"
then
have_webp=yes
AC_CHECK_HEADER(webp/encode.h,, [have_webp=no])
AC_CHECK_LIB([webp], [WebPEncode], [WEBP_LIBS="$WEBP_LIBS -lwebp"], [have_webp=no])
if test "x${have_webp}" = "xno"
then
AC_MSG_WARN([
--------------------------------------------
Unable to find libwebp.
Images will not be encoded using WebP.
--------------------------------------------])
else
AC_DEFINE([ENABLE_WEBP],, [Whether WebP support is enabled])
fi
fi
AM_CONDITIONAL([ENABLE_WEBP], [test "x${have_webp}" = "xyes"])
AC_SUBST(WEBP_LIBS)
#
# libwebsockets
#
have_libwebsockets=disabled
WEBSOCKETS_LIBS=
AC_ARG_WITH([websockets],
[AS_HELP_STRING([--with-websockets],
[support WebSockets @<:@default=check@:>@])],
[],
[with_websockets=check])
if test "x$with_websockets" != "xno"
then
have_libwebsockets=yes
AC_CHECK_LIB([websockets],
[lws_create_context],
[WEBSOCKETS_LIBS="$WEBSOCKETS_LIBS -lwebsockets"],
[AC_MSG_WARN([
--------------------------------------------
Unable to find libwebsockets.
Support for Kubernetes will be disabled.
--------------------------------------------])
have_libwebsockets=no])
fi
if test "x$with_websockets" != "xno"
then
# Check for client-specific closed event, which must be used in favor of
# the generic closed event if libwebsockets is recent enough to provide
# this
AC_CHECK_DECL([LWS_CALLBACK_CLIENT_CLOSED],
[AC_DEFINE([HAVE_LWS_CALLBACK_CLIENT_CLOSED],,
[Whether LWS_CALLBACK_CLIENT_CLOSED is defined])],,
[#include <libwebsockets.h>])
# Older versions of libwebsockets may not define a flag for requesting
# global initialization of OpenSSL, instead performing that initialization
# by default
AC_CHECK_DECL([LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT],
[AC_DEFINE([HAVE_LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT],,
[Whether LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT is defined])],,
[#include <libwebsockets.h>])
# Older versions of libwebsockets do not define special macros for SSL
# connection flags, instead relying on documented integer values
AC_CHECK_DECL([LCCSCF_USE_SSL],
[AC_DEFINE([HAVE_LCCSCF_USE_SSL],,
[Whether LCCSCF_USE_SSL is defined])],,
[#include <libwebsockets.h>])
# Older versions of libwebsockets do not define a dummy callback which
# must be invoked after the main event callback is invoked; the main event
# callback must instead manually return zero
AC_CHECK_DECL([lws_callback_http_dummy],
[AC_DEFINE([HAVE_LWS_CALLBACK_HTTP_DUMMY],,
[Whether lws_callback_http_dummy() is defined])],,
[#include <libwebsockets.h>])
fi
AM_CONDITIONAL([ENABLE_WEBSOCKETS],
[test "x${have_libwebsockets}" = "xyes"])
AC_SUBST(WEBSOCKETS_LIBS)
#
# Kubernetes
#
AC_ARG_ENABLE([kubernetes],
[AS_HELP_STRING([--disable-kubernetes],
[do not build support for attaching to Kubernetes pods])],
[],
[enable_kubernetes=yes])
AM_CONDITIONAL([ENABLE_KUBERNETES], [test "x${enable_kubernetes}" = "xyes" \
-a "x${have_libwebsockets}" = "xyes" \
-a "x${have_ssl}" = "xyes" \
-a "x${have_terminal}" = "xyes"])
#
# guacd
#
AC_ARG_ENABLE([guacd],
[AS_HELP_STRING([--disable-guacd],
[do not build the Guacamole proxy daemon])],
[],
[enable_guacd=yes])
AM_CONDITIONAL([ENABLE_GUACD], [test "x${enable_guacd}" = "xyes"])
#
# guacenc
#
AC_ARG_ENABLE([guacenc],
[AS_HELP_STRING([--disable-guacenc],
[do not build the Guacamole video encoding tool])],
[],
[enable_guacenc=yes])
AM_CONDITIONAL([ENABLE_GUACENC], [test "x${enable_guacenc}" = "xyes" \
-a "x${have_libavcodec}" = "xyes" \
-a "x${have_libavutil}" = "xyes" \
-a "x${have_libswscale}" = "xyes" \
-a "x${have_libavformat}" = "xyes"])
#
# guaclog
#
AC_ARG_ENABLE([guaclog],
[AS_HELP_STRING([--disable-guaclog],
[do not build the Guacamole input logging tool])],
[],
[enable_guaclog=yes])
AM_CONDITIONAL([ENABLE_GUACLOG], [test "x${enable_guaclog}" = "xyes"])
#
# Output Makefiles
#
AC_CONFIG_FILES([Makefile
doc/libguac/Doxyfile
doc/libguac-terminal/Doxyfile
src/common/Makefile
src/common/tests/Makefile
src/common-ssh/Makefile
src/common-ssh/tests/Makefile
src/terminal/Makefile
src/libguac/Makefile
src/libguac/tests/Makefile
src/guacd/Makefile
src/guacd/man/guacd.8
src/guacd/man/guacd.conf.5
src/guacenc/Makefile
src/guacenc/man/guacenc.1
src/guaclog/Makefile
src/guaclog/man/guaclog.1
src/pulse/Makefile
src/protocols/kubernetes/Makefile
src/protocols/kubernetes/tests/Makefile
src/protocols/rdp/Makefile
src/protocols/rdp/tests/Makefile
src/protocols/ssh/Makefile
src/protocols/telnet/Makefile
src/protocols/vnc/Makefile])
AC_OUTPUT
#
# Protocol build status
#
AM_COND_IF([ENABLE_KUBERNETES], [build_kubernetes=yes], [build_kubernetes=no])
AM_COND_IF([ENABLE_RDP], [build_rdp=yes], [build_rdp=no])
AM_COND_IF([ENABLE_SSH], [build_ssh=yes], [build_ssh=no])
AM_COND_IF([ENABLE_TELNET], [build_telnet=yes], [build_telnet=no])
AM_COND_IF([ENABLE_VNC], [build_vnc=yes], [build_vnc=no])
#
# Service / tool build status
#
AM_COND_IF([ENABLE_GUACD], [build_guacd=yes], [build_guacd=no])
AM_COND_IF([ENABLE_GUACENC], [build_guacenc=yes], [build_guacenc=no])
AM_COND_IF([ENABLE_GUACLOG], [build_guaclog=yes], [build_guaclog=no])
#
# Init scripts
#
AM_COND_IF([ENABLE_INIT], [build_init="${init_dir}"], [build_init=no])
#
# Systemd units
#
AM_COND_IF([ENABLE_SYSTEMD], [build_systemd="${systemd_dir}"], [build_systemd=no])
#
# FreeRDP plugins
#
AM_COND_IF([ENABLE_RDP], [build_rdp_plugins="${FREERDP_PLUGIN_DIR}"], [build_rdp_plugins=no])
#
# Display summary
#
echo "
------------------------------------------------
$PACKAGE_NAME version $PACKAGE_VERSION
------------------------------------------------
Library status:
freerdp ............. ${have_freerdp} ${freerdp_version}
pango ............... ${have_pango}
libavcodec .......... ${have_libavcodec}
libavformat ......... ${have_libavformat}
libavutil ........... ${have_libavutil}
libssh2 ............. ${have_libssh2}
libssl .............. ${have_ssl}
libswscale .......... ${have_libswscale}
libtelnet ........... ${have_libtelnet}
libVNCServer ........ ${have_libvncserver}
libvorbis ........... ${have_vorbis}
libpulse ............ ${have_pulse}
libwebsockets ....... ${have_libwebsockets}
libwebp ............. ${have_webp}
wsock32 ............. ${have_winsock}
Protocol support:
Kubernetes .... ${build_kubernetes}
RDP ........... ${build_rdp}
SSH ........... ${build_ssh}
Telnet ........ ${build_telnet}
VNC ........... ${build_vnc}
Services / tools:
guacd ...... ${build_guacd}
guacenc .... ${build_guacenc}
guaclog .... ${build_guaclog}
FreeRDP plugins: ${build_rdp_plugins}
Init scripts: ${build_init}
Systemd units: ${build_systemd}
Type \"make\" to compile $PACKAGE_NAME.
"