3 dnl This is the one location where the authoritative version number is stored
4 AC_INIT(shellinabox, 2.10, markus@shellinabox.com)
7 AC_DEFINE_UNQUOTED(VCS_REVISION, "${VCS_REVISION}",
8 [Most recent revision number in the version control system])
10 dnl Set up autoconf/automake for building C libraries and binaries with GCC
11 CFLAGS="${CFLAGS:--Os}"
13 AM_CONFIG_HEADER(config.h)
18 AC_SUBST(LIBTOOL_DEPS)
20 AC_PROG_GCC_TRADITIONAL
22 dnl Check for header files that do not exist on all platforms
23 AC_CHECK_HEADERS([libutil.h pthread.h pty.h strings.h sys/prctl.h sys/uio.h \
24 util.h utmp.h utmpx.h])
26 dnl Most systems require linking against libutil.so in order to get login_tty()
27 AC_CHECK_FUNCS(login_tty, [],
28 [AC_CHECK_LIB(util, login_tty,
30 AC_DEFINE(HAVE_LOGIN_TTY)])])
32 dnl Use strlcat() instead of strncat() to avoid spurious warnings
33 AC_CHECK_FUNCS([strlcat])
35 dnl Prefer thread-safe functions, if available
36 AC_CHECK_FUNCS([getgrgid_r getgrnam_r gethostbyname_r getpwnam_r getpwuid_r \
37 openpty strcasestr getresuid getresgid setresuid setresgid ])
39 dnl We prefer ptsname_r(), but will settle for ptsname() if necessary
40 AC_TRY_LINK([#ifndef _XOPEN_SOURCE
47 [char buf[10]; ptsname_r(0, buf, sizeof(buf));],
48 [AC_DEFINE(HAVE_PTSNAME_R, 1,
49 Define to 1 if you have a re-entrant version of ptsname)])
51 dnl Apparently, some systems define sigwait() but fail to implement it
52 AC_TRY_LINK([#include <pthread.h>
54 [sigset_t s; int n; sigwait(&s, &n);],
55 [AC_DEFINE(HAVE_SIGWAIT, 1,
56 Define to 1 if you have a working sigwait)])
58 dnl Not every system has support for isnan()
59 AC_TRY_LINK([#include <math.h>],
60 [if (isnan(0.0)) return 1;],
61 [AC_DEFINE(HAVE_ISNAN, 1,
62 Define to 1 if you have support for isnan)])
64 dnl Even if utmpx.h exists, not all systems have support for updwtmpx()
65 AC_TRY_LINK([#include <utmp.h>],
67 [AC_DEFINE(HAVE_UPDWTMP, 1,
68 Define to 1 if you have support for updwtmp)])
69 AC_TRY_LINK([#include <utmpx.h>],
71 [AC_DEFINE(HAVE_UPDWTMPX, 1,
72 Define to 1 if you have support for updwtmpx)])
74 dnl Check if the compiler supports aliasing of symbols
75 AC_TRY_LINK([void x(void) { };
76 void y(void) __attribute__((alias("x")));],
78 [AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
79 Define to 1 if you have support for symbol aliasing)])
81 dnl Check if the compiler has support to mark parameters as unused
82 AC_TRY_LINK([void x(int i __attribute__((unused))) __attribute__((unused));],
84 [AC_DEFINE(HAVE_ATTRIBUTE_UNUSED, 1,
85 Define to 1 if you have support for the "unused" attribute)])
87 dnl Check the function signature of getgrouplist()
88 AC_TRY_LINK([#define _BSD_SOURCE
91 [int (*f)(const char *, int, int *, int *) = getgrouplist;],
92 [AC_DEFINE(HAVE_GETGROUPLIST_TAKES_INTS, 1,
93 Define to 1 if getgrouplist() takes ints as arguments)])
95 dnl On some systems, calling /bin/login does not work. Disable the LOGIN
96 dnl feature, if the user tells us that it does not do the right thing.
98 [ --disable-login on some systems (e.g. Fedora), calling /bin/login
99 does not work well. If you know that your system
100 suffers from this problem, set this option to
101 remove support for the LOGIN keyword in the
102 service description.])
103 if test "x$enable_login" != xno; then
104 AC_DEFINE(HAVE_BIN_LOGIN, 1,
105 Set if you want support for calling /bin/login)
108 dnl We automatically detect SSL support, but allow users to disable it
110 [ --disable-ssl if available at built-time, support for SSL
111 connections will be enabled. It can still be
112 disabled at run-time, either on the daemon's
113 command line or if the operating system does not
114 have the OpenSSL libraries available.])
116 dnl We automatically detect PAM support, but allow users to disable it
118 [ --disable-pam PAM support is necessary in order to authenticate
119 users for running programs other than their default
122 dnl We try to always use dlopen() instead of linking libraries dynamically, as
123 dnl this reduces the hard run-time dependencies that our binary has. But we
124 dnl allow users to disable this feature.
125 AC_ARG_ENABLE(runtime-loading,
126 [ --disable-runtime-loading ShellInABox will try to load the OpenSSL, and PAM
127 libraries at run-time, if it has been compiled with
128 support for these libraries, and if the operating
129 system supports dynamic loading of libraries. This
130 allows you to install the same binary on different
131 systems independent of whether they have OpenSSL
132 and PAM enabled. If you would rather directly link
133 these libraries into the binary, thus making them a
134 hard dependency, then disable runtime-loading.])
136 dnl Only test for OpenSSL headers, if not explicitly disabled
137 if test "x$enable_ssl" != xno; then
138 AC_CHECK_HEADERS([openssl/bio.h openssl/err.h openssl/ssl.h])
141 dnl Only test for PAM headers, if not explicitly disabled
142 if test "x$enable_pam" != xno; then
143 AC_CHECK_HEADERS([security/pam_appl.h security/pam_client.h \
144 security/pam_misc.h ])
147 dnl Only test for dlopen(), if not explicitly disabled. Add required libdl.so
148 dnl library if necessary. Also, if dlopen() is not available on this system,
149 dnl explicitly disable runtime loading.
150 if test "x$enable_runtime_loading" != xno; then
151 AC_CHECK_FUNCS(dlopen, [],
152 [AC_CHECK_LIB(dl, dlopen,
154 AC_DEFINE(HAVE_DLOPEN)],
155 [enable_runtime_loading=no])])
158 dnl If runtime loading has been disabled, add OpenSSL and PAM as hard
160 if test "x$enable_runtime_loading" == xno; then
161 dnl Link against OpenSSL libraries, unless SSL support has been disabled
162 if test "x$enable_ssl" != xno; then
163 AC_CHECK_HEADER(openssl/bio.h,
164 [AC_CHECK_HEADER(openssl/err.h,
165 [AC_CHECK_HEADER(openssl/ssl.h, [LIBS="-lssl -lcrypto $LIBS"])])])
168 dnl Link against PAM libraries, unless PAM support has been disabled
169 if test "x$enable_pam" != xno; then
170 AC_CHECK_HEADER(security/pam_appl.h, [LIBS="-lpam $LIBS"])
171 AC_CHECK_HEADER(security/pam_misc.h, [LIBS="-lpam_misc $LIBS"])
175 AC_CHECK_LIB(z, deflate, [
176 AC_CHECK_HEADER(zlib.h, [LIBS="-lz $LIBS"
177 AC_DEFINE(HAVE_ZLIB, 1,
178 Define to 1 if zlib development files are installed)
181 dnl Generate output files
182 AC_CONFIG_FILES([Makefile])