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