1# Process this file with autoconf to produce a configure script 2 3AC_PREREQ(2.65) 4AC_INIT([xrdp], [0.9.16], [xrdp-devel@googlegroups.com]) 5AC_CONFIG_HEADERS(config_ac.h:config_ac-h.in) 6AM_INIT_AUTOMAKE([1.7.2 foreign]) 7AC_CONFIG_MACRO_DIR([m4]) 8AC_PROG_CC 9AC_C_CONST 10AC_PROG_LIBTOOL 11 12PKG_PROG_PKG_CONFIG 13if test "x$PKG_CONFIG" = "x"; then 14 AC_MSG_ERROR([please install pkg-config]) 15fi 16 17AC_CONFIG_SUBDIRS([libpainter librfxcodec]) 18 19# Use silent rules by default if supported by Automake 20m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) 21 22case $host_os in 23 *linux*) 24 linux=yes 25 ;; 26 *kfreebsd*) 27 linux=yes # only used in instfiles/ so that’s ok for us for now 28 ;; 29 *freebsd*|*dragonfly*) 30 freebsd=yes 31 ;; 32 *netbsd*) 33 netbsd=yes 34 ;; 35 *openbsd*) 36 openbsd=yes 37 ;; 38 *darwin*) 39 macos=yes 40 ;; 41esac 42 43AM_CONDITIONAL(LINUX, [test "x$linux" = xyes]) 44AM_CONDITIONAL(FREEBSD, [test "x$freebsd" = xyes]) 45AM_CONDITIONAL(OPENBSD, [test "x$openbsd" = xyes]) 46AM_CONDITIONAL(NETBSD, [test "x$netbsd" = xyes]) 47AM_CONDITIONAL(MACOS, [test "x$macos" = xyes]) 48 49AC_ARG_WITH([socketdir], 50 [AS_HELP_STRING([--with-socketdir=DIR], 51 [Use directory for UNIX sockets (default: /tmp/.xrdp)])], 52 [], [with_socketdir="/tmp/.xrdp"]) 53AC_SUBST([socketdir], [$with_socketdir]) 54 55AC_ARG_WITH([systemdsystemunitdir], 56 AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files, no to disable]), 57 [], [ 58if test "x$linux" = xyes; then 59 with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) 60fi 61]) 62 63if test "x$with_systemdsystemunitdir" != xno; then 64 AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) 65fi 66AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != xno ]) 67 68AC_ARG_ENABLE(tests, 69 AC_HELP_STRING([--enable-tests], 70 [Ensure dependencies for the tests are installed]), 71 [ensure_tests_deps=yes], []) 72AC_ARG_ENABLE(pam, AS_HELP_STRING([--enable-pam], 73 [Build PAM support (default: yes)]), 74 [], [enable_pam=yes]) 75AM_CONDITIONAL(SESMAN_NOPAM, [test x$enable_pam != xyes]) 76AC_ARG_ENABLE(vsock, AS_HELP_STRING([--enable-vsock], 77 [Build AF_VSOCK support (default: no)]), 78 [], [enable_vsock=no]) 79AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--enable-ipv6], 80 [Build IPv6 support (default: no, experimental)]), 81 [], [enable_ipv6=no]) 82AC_ARG_ENABLE(ipv6only, AS_HELP_STRING([--enable-ipv6only], 83 [Build IPv6-only (default: no)]), 84 [], [enable_ipv6only=no]) 85AC_ARG_ENABLE(kerberos, AS_HELP_STRING([--enable-kerberos], 86 [Build kerberos support (prefer --enable-pam if available) (default: no)]), 87 [], [enable_kerberos=no]) 88AC_ARG_ENABLE(bsd, AS_HELP_STRING([--enable-bsd], 89 [Build BSD auth support (default: no)]), 90 [bsd=true], [bsd=false]) 91AM_CONDITIONAL(SESMAN_BSD, [test x$bsd = xtrue]) 92AM_CONDITIONAL(SESMAN_KERBEROS, [test x$enable_kerberos = xyes]) 93AC_ARG_ENABLE(pamuserpass, AS_HELP_STRING([--enable-pamuserpass], 94 [Build PAM userpass support (default: no)]), 95 [], [enable_pamuserpass=no]) 96AM_CONDITIONAL(SESMAN_PAMUSERPASS, [test x$enable_pamuserpass = xyes]) 97AC_ARG_ENABLE(pam-config, AS_HELP_STRING([--enable-pam-config=CONF], 98 [Select PAM config to install: arch, debian, redhat, suse, freebsd, macos, unix 99 (default: autodetect)])) 100 101AC_ARG_ENABLE(xrdpdebug, AS_HELP_STRING([--enable-xrdpdebug], 102 [Build debug (default: no)]), 103 [], [enable_xrdpdebug=no]) 104AM_CONDITIONAL(XRDP_DEBUG, [test x$enable_xrdpdebug = xyes]) 105AC_ARG_ENABLE(neutrinordp, AS_HELP_STRING([--enable-neutrinordp], 106 [Build neutrinordp module (default: no)]), 107 [], [enable_neutrinordp=no]) 108AM_CONDITIONAL(XRDP_NEUTRINORDP, [test x$enable_neutrinordp = xyes]) 109AC_ARG_ENABLE(jpeg, AS_HELP_STRING([--enable-jpeg], 110 [Build jpeg module (default: no)]), 111 [], [enable_jpeg=no]) 112AM_CONDITIONAL(XRDP_JPEG, [test x$enable_jpeg = xyes]) 113AC_ARG_ENABLE(tjpeg, AS_HELP_STRING([--enable-tjpeg], 114 [Build turbo jpeg module (default: no)]), 115 [], [enable_tjpeg=no]) 116AM_CONDITIONAL(XRDP_TJPEG, [test x$enable_tjpeg = xyes]) 117AC_ARG_ENABLE(fuse, AS_HELP_STRING([--enable-fuse], 118 [Build fuse(clipboard file / drive redir) (default: no)]), 119 [], [enable_fuse=no]) 120AM_CONDITIONAL(XRDP_FUSE, [test x$enable_fuse = xyes]) 121AC_ARG_ENABLE(xrdpvr, AS_HELP_STRING([--enable-xrdpvr], 122 [Build xrdpvr module (default: no)]), 123 [], [enable_xrdpvr=no]) 124AM_CONDITIONAL(XRDP_XRDPVR, [test x$enable_xrdpvr = xyes]) 125AC_ARG_ENABLE(fdkaac, AS_HELP_STRING([--enable-fdkaac], 126 [Build aac(audio codec) (default: no)]), 127 [], [enable_fdkaac=no]) 128AM_CONDITIONAL(XRDP_FDK_AAC, [test x$enable_fdkaac = xyes]) 129AC_ARG_ENABLE(opus, AS_HELP_STRING([--enable-opus], 130 [Build opus(audio codec) (default: no)]), 131 [], [enable_opus=no]) 132AM_CONDITIONAL(XRDP_OPUS, [test x$enable_opus = xyes]) 133AC_ARG_ENABLE(mp3lame, AS_HELP_STRING([--enable-mp3lame], 134 [Build lame mp3(audio codec) (default: no)]), 135 [], [enable_mp3lame=no]) 136AM_CONDITIONAL(XRDP_MP3LAME, [test x$enable_mp3lame = xyes]) 137AC_ARG_ENABLE(pixman, AS_HELP_STRING([--enable-pixman], 138 [Use pixman library (default: no)]), 139 [], [enable_pixman=no]) 140AM_CONDITIONAL(XRDP_PIXMAN, [test x$enable_pixman = xyes]) 141 142AC_ARG_ENABLE(painter, AS_HELP_STRING([--disable-painter], 143 [Do not use included painter library (default: no)]), 144 [], [enable_painter=yes]) 145AM_CONDITIONAL(XRDP_PAINTER, [test x$enable_painter = xyes]) 146 147AC_ARG_ENABLE(rfxcodec, AS_HELP_STRING([--disable-rfxcodec], 148 [Do not use included librfxcodec library (default: no)]), 149 [], [enable_rfxcodec=yes]) 150AM_CONDITIONAL(XRDP_RFXCODEC, [test x$enable_rfxcodec = xyes]) 151 152AC_ARG_ENABLE(rdpsndaudin, AS_HELP_STRING([--enable-rdpsndaudin], 153 [Use rdpsnd audio in (default: no)]), 154 [], [enable_rdpsndaudin=no]) 155AM_CONDITIONAL(XRDP_RDPSNDAUDIN, [test x$enable_rdpsndaudin = xyes]) 156 157# configure compiler options and CFLAGS 158AX_GCC_FUNC_ATTRIBUTE([format]) 159AX_TYPE_SOCKLEN_T 160AX_CFLAGS_WARN_ALL 161AX_APPEND_COMPILE_FLAGS([-Wwrite-strings]) 162 163AM_COND_IF([LINUX], 164 [AX_APPEND_COMPILE_FLAGS([-Werror])]) # bsd has warnings that have not been fixed yet 165 166AM_COND_IF([XRDP_DEBUG], 167 [AX_APPEND_COMPILE_FLAGS([-g -O0])], 168 [AX_APPEND_COMPILE_FLAGS([-O2])]) 169 170# Don't fail without working nasm if rfxcodec is not enabled 171if test "x$enable_rfxcodec" != xyes; then 172 with_simd=no 173 export with_simd 174fi 175 176# Check if -ldl is needed to use dlopen() 177DLOPEN_LIBS= 178AC_CHECK_FUNC(dlopen, [], 179 [AC_CHECK_LIB(dl, dlopen, [DLOPEN_LIBS=-ldl])]) 180AC_SUBST(DLOPEN_LIBS) 181 182# checking for openssl 183if test "x$freebsd" = "xyes"; then 184 # FreeBSD may have two OpenSSL, base and port however 185 # base OpenSSL doesn.t have openssl.pc file. 186 PKG_CHECK_MODULES( 187 [OPENSSL], 188 [openssl >= 0], 189 [freebsd_openssl=port], 190 [ 191 AC_CHECK_HEADER( 192 [openssl/rc4.h], 193 [freebsd_openssl=base], 194 [AC_MSG_ERROR([please install libssl-dev or openssl-devel])], 195 [#include <stdlib.h>]) 196 ] 197 ) 198 199 if test "x$freebsd_openssl" = "xport"; then 200 OPENSSL_BIN=`$PKG_CONFIG --variable=exec_prefix openssl`/bin 201 elif test "x$freebsd_openssl" = "xbase"; then 202 OPENSSL_BIN=/usr/bin 203 fi 204else 205 # OpenSSL detection for other OS 206 PKG_CHECK_MODULES([OPENSSL], [openssl >= 0], [], 207 [AC_MSG_ERROR([please install libssl-dev or openssl-devel])]) 208 OPENSSL_BIN=`$PKG_CONFIG --variable=exec_prefix openssl`/bin 209fi 210 211# look for openssl binary 212AC_PATH_PROGS([OPENSSL], [openssl], [:], [$OPENSSL_BIN:$PATH]) 213 214# checking for PAM variation 215# Linux-PAM is used in Linux systems 216# OpenPAM is used by FreeBSD, NetBSD, DragonFly BSD and OS X 217# OpenBSD uses BSD Authentication rather than both PAMs 218AC_CHECK_HEADER([security/_pam_types.h], 219 [AC_DEFINE([HAVE__PAM_TYPES_H], 1, [Using Linux-PAM], [])]) 220AC_CHECK_HEADER([security/pam_constants.h], 221 [AC_DEFINE([HAVE_PAM_CONSTANTS_H], 1, [Using OpenPAM], [])]) 222 223# Check only one auth mechanism is specified, and give it a name 224auth_cnt=0 225auth_mech="Builtin" 226if test x$enable_pam = xyes 227then 228 auth_cnt=`expr $auth_cnt + 1` 229 auth_mech="PAM" 230fi 231if test x$bsd = xtrue 232then 233 auth_cnt=`expr $auth_cnt + 1` 234 auth_mech="BSD" 235fi 236if test x$enable_kerberos = xyes 237then 238 auth_cnt=`expr $auth_cnt + 1` 239 auth_mech="Kerberos" 240fi 241if test x$enable_pamuserpass = xyes 242then 243 auth_cnt=`expr $auth_cnt + 1` 244 auth_mech="PAM userpass" 245fi 246 247if test $auth_cnt -gt 1 248then 249 AC_MSG_ERROR([--enable-pam, --enable-bsd, --enable-pamuserpass and --enable-kerberos are mutually exclusive]) 250fi 251 252# checking if pam should be autodetected. 253if test "x$enable_pam" = "xyes" 254then 255 if test -z "$enable_bsd" 256 then 257 AC_CHECK_HEADER([security/pam_appl.h], [], 258 [AC_MSG_ERROR([please install libpam0g-dev or pam-devel])]) 259 fi 260 if test "x$enable_pam_config" = "x"; then 261 PAM_RULES="auto" 262 else 263 pam_config_file="$srcdir/instfiles/pam.d/xrdp-sesman.$enable_pam_config" 264 if test -f "$pam_config_file"; then 265 PAM_RULES="$enable_pam_config" 266 else 267 AC_MSG_ERROR([PAM file "$pam_config_file" is not available]) 268 fi 269 fi 270fi 271 272AC_SUBST(PAM_RULES) 273 274if test "x$enable_vsock" = "xyes" 275then 276 enable_vsock=yes 277 AC_CHECK_HEADERS([linux/socket.h linux/vm_sockets.h], 278 [AC_DEFINE([XRDP_ENABLE_VSOCK], 1, [Enable AF_VSOCK])], 279 [], 280 [#include <sys/socket.h>]) 281fi 282 283if test "x$enable_ipv6only" = "xyes" 284then 285 enable_ipv6=yes 286 AC_DEFINE([XRDP_ENABLE_IPV6ONLY],1,[Enable IPv6 only]) 287fi 288 289if test "x$enable_ipv6" = "xyes" 290then 291 AC_DEFINE([XRDP_ENABLE_IPV6],1,[Enable IPv6]) 292fi 293 294if test "x$enable_pam" = "xyes" 295then 296 AC_DEFINE([USE_PAM],1,[Enable PAM]) 297fi 298 299AS_IF( [test "x$enable_neutrinordp" = "xyes"] , [PKG_CHECK_MODULES(FREERDP, freerdp >= 1.0.0)] ) 300 301# checking for libjpeg 302if test "x$enable_jpeg" = "xyes" 303then 304 AC_CHECK_HEADER([jpeglib.h], [], 305 [AC_MSG_ERROR([please install libjpeg-dev or libjpeg-devel])]) 306fi 307 308# checking for fuse 309if test "x$enable_fuse" = "xyes" 310then 311 PKG_CHECK_MODULES([FUSE], [fuse >= 2.6], [], 312 [AC_MSG_ERROR([please install libfuse-dev or fuse-devel])]) 313fi 314 315# checking for fdk aac 316if test "x$enable_fdkaac" = "xyes" 317then 318 PKG_CHECK_MODULES([FDKAAC], [fdk-aac >= 0.1.0], [], 319 [AC_MSG_ERROR([please install libfdk-aac-dev or fdk-aac-devel])]) 320fi 321 322# checking for opus 323if test "x$enable_opus" = "xyes" 324then 325 AC_CHECK_HEADER([opus/opus.h], [], 326 [AC_MSG_ERROR([please install libopus-dev or opus-devel])]) 327fi 328 329# checking for lame mp3 330if test "x$enable_mp3lame" = "xyes" 331then 332 AC_CHECK_HEADER([lame/lame.h], [], 333 [AC_MSG_ERROR([please install libmp3lame-dev or lamemp3-devel])]) 334fi 335 336AS_IF( [test "x$enable_pixman" = "xyes"] , [PKG_CHECK_MODULES(PIXMAN, pixman-1 >= 0.1.0)] ) 337 338# checking for TurboJPEG 339if test "x$enable_tjpeg" = "xyes" 340then 341if test ! -z "$TURBOJPEG_PATH" 342then 343 # env var TURBOJPEG_PATH has been defined, use that 344 AC_CHECK_HEADER([$TURBOJPEG_PATH/include/turbojpeg.h], [], 345 [AC_MSG_ERROR([could not find TurboJPEG in dir specified by env variable TURBOJPEG_PATH ($TURBOJPEG_PATH)])]) 346 347 AC_SUBST(TurboJpegIncDir, ["-I$TURBOJPEG_PATH/include"]) 348 AC_SUBST(TurboJpegLibDir, ["-L$TURBOJPEG_PATH/lib -Wl,-rpath -Wl,$TURBOJPEG_PATH/lib"]) 349elif test -e /opt/libjpeg-turbo/lib64 350then 351 # TurboJPEG has been installed to /opt on a 64 bit m/c 352 AC_SUBST(TurboJpegIncDir, ["-I/opt/libjpeg-turbo/include"]) 353 AC_SUBST(TurboJpegLibDir, ["-L/opt/libjpeg-turbo/lib64 -Wl,-rpath -Wl,/opt/libjpeg-turbo/lib64"]) 354elif test -e /opt/libjpeg-turbo/lib32 355then 356 # TurboJPEG has been installed to /opt on a 32 bit m/c 357 AC_SUBST(TurboJpegIncDir, ["-I/opt/libjpeg-turbo/include"]) 358 AC_SUBST(TurboJpegLibDir, ["-L/opt/libjpeg-turbo/lib32 -Wl,-rpath -Wl,/opt/libjpeg-turbo/lib32"]) 359else 360 # check in default location 361 AC_CHECK_HEADER([/usr/include/turbojpeg.h], [], 362 [AC_MSG_ERROR([please install TurboJPEG ])]) 363 AC_SUBST(TurboJpegIncDir, [""]) 364 AC_SUBST(TurboJpegLibDir, [""]) 365fi 366fi 367 368AC_PATH_XTRA 369if test "x$no_x" == "xyes"; then 370 AC_MSG_ERROR([please install libx11-dev or libX11-devel]) 371fi 372 373save_CFLAGS="$CFLAGS" 374CFLAGS="$CFLAGS $X_CFLAGS" 375 376# checking for Xfixes 377AC_CHECK_HEADER([X11/extensions/Xfixes.h], [], 378 [AC_MSG_ERROR([please install libxfixes-dev or libXfixes-devel])], 379 [#include <X11/Xlib.h>]) 380 381# checking for Xrandr 382AC_CHECK_HEADER([X11/extensions/Xrandr.h], [], 383 [AC_MSG_ERROR([please install libxrandr-dev or libXrandr-devel])], 384 [#include <X11/Xlib.h>]) 385 386CFLAGS="$save_CFLAGS" 387 388# perform unit tests if libcheck found 389if test "x$ensure_tests_deps" == "xyes"; then 390 PKG_CHECK_MODULES([CHECK], [check >= 0.10.0], 391 [perform_unit_tests=yes], 392 [AC_MSG_ERROR([please install check, the unit test framework])]) 393else 394 PKG_CHECK_MODULES([CHECK], [check >= 0.10.0], 395 [perform_unit_tests=yes], 396 [perform_unit_tests=no]) 397fi 398 399if test "x$perform_unit_tests" == "xyes"; then 400 AC_MSG_NOTICE([libcheck found, unit tests will be performed]) 401else 402 AC_MSG_NOTICE([libcheck not found, unit tests will be skipped]) 403fi 404# -- end perform unit tests 405 406AC_SUBST([moduledir], '${libdir}/xrdp') 407 408AC_ARG_ENABLE([strict-locations], 409 [AS_HELP_STRING([--enable-strict-locations], 410 [Use standard Autoconf install directories unless overridden 411 (default: use /etc and /var)])], 412 [], [enable_strict_locations=no]) 413 414if test "x$enable_strict_locations" != "xyes"; then 415 sysconfdir="/etc"; 416 localstatedir="/var"; 417fi 418 419PKG_INSTALLDIR 420 421AC_CHECK_HEADERS([sys/prctl.h]) 422 423AC_CONFIG_FILES([ 424 common/Makefile 425 docs/Makefile 426 docs/man/Makefile 427 genkeymap/Makefile 428 instfiles/default/Makefile 429 instfiles/init.d/Makefile 430 instfiles/Makefile 431 instfiles/pam.d/Makefile 432 instfiles/pulse/Makefile 433 instfiles/rc.d/Makefile 434 keygen/Makefile 435 libxrdp/Makefile 436 Makefile 437 mc/Makefile 438 neutrinordp/Makefile 439 pkgconfig/Makefile 440 pkgconfig/xrdp.pc 441 pkgconfig/xrdp-uninstalled.pc 442 sesman/chansrv/Makefile 443 sesman/libscp/Makefile 444 sesman/Makefile 445 sesman/tools/Makefile 446 tests/Makefile 447 tests/common/Makefile 448 tests/memtest/Makefile 449 tools/Makefile 450 tools/devel/Makefile 451 tools/devel/tcp_proxy/Makefile 452 vnc/Makefile 453 xrdpapi/Makefile 454 xrdp/Makefile 455 xrdpvr/Makefile 456 xup/Makefile 457]) 458 459AC_REQUIRE_AUX_FILE([tap-driver.sh]) 460AC_OUTPUT 461 462echo "" 463echo "xrdp will be compiled with:" 464echo "" 465echo " mp3lame $enable_mp3lame" 466echo " opus $enable_opus" 467echo " fdkaac $enable_fdkaac" 468echo " jpeg $enable_jpeg" 469echo " turbo jpeg $enable_tjpeg" 470echo " rfxcodec $enable_rfxcodec" 471echo " painter $enable_painter" 472echo " pixman $enable_pixman" 473echo " fuse $enable_fuse" 474echo " ipv6 $enable_ipv6" 475echo " ipv6only $enable_ipv6only" 476echo " vsock $enable_vsock" 477echo " auth mechanism $auth_mech" 478echo " debug $enable_xrdpdebug" 479echo " rdpsndaudin $enable_rdpsndaudin" 480echo "" 481echo " strict_locations $enable_strict_locations" 482echo " prefix $prefix" 483echo " exec_prefix $exec_prefix" 484echo " libdir $libdir" 485echo " bindir $bindir" 486echo " sysconfdir $sysconfdir" 487echo "" 488echo " unit tests performable $perform_unit_tests" 489echo "" 490echo " CFLAGS = $CFLAGS" 491echo " LDFLAGS = $LDFLAGS" 492 493# xrdp_configure_options.h will be written to the build directory, not the source directory 494echo '#define XRDP_CONFIGURE_OPTIONS \' > ./xrdp_configure_options.h 495./config.status --config | xargs -n 1 | sed -e 's/^/" /' -e 's/$/\\n" \\/' >> ./xrdp_configure_options.h 496echo '""' >> ./xrdp_configure_options.h 497 498