]> andersk Git - test.git/blob - configure.ac
Added support for building with toolchains that don't support symbol aliasing.
[test.git] / configure.ac
1 AC_PREREQ(2.57)
2
3 dnl This is the one location where the authoritative version number is stored
4 AC_INIT(shellinabox, 2.10, markus@shellinabox.com)
5 VCS_REVISION=229
6 AC_SUBST(VCS_REVISION)
7 AC_DEFINE_UNQUOTED(VCS_REVISION, "${VCS_REVISION}",
8                    [Most recent revision number in the version control system])
9
10 dnl Set up autoconf/automake for building C libraries and binaries with GCC
11 CFLAGS="${CFLAGS:--Os}"
12 AM_INIT_AUTOMAKE
13 AM_CONFIG_HEADER(config.h)
14 AC_PROG_CC
15 AC_LANG_WERROR
16 AC_PROG_INSTALL
17 AC_PROG_LIBTOOL
18 AC_SUBST(LIBTOOL_DEPS)
19 AC_C_CONST
20 AC_PROG_GCC_TRADITIONAL
21
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])
25
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,
29                 [LIBS="-lutil $LIBS"
30                  AC_DEFINE(HAVE_LOGIN_TTY)])])
31
32 dnl Use strlcat() instead of strncat() to avoid spurious warnings
33 AC_CHECK_FUNCS([strlcat])
34
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 ])
38
39 dnl We prefer ptsname_r(), but will settle for ptsname() if necessary
40 AC_TRY_LINK([#ifndef _XOPEN_SOURCE
41              #define _XOPEN_SOURCE
42              #endif
43              #ifndef _GNU_SOURCE
44              #define _GNU_SOURCE
45              #endif
46              #include <stdlib.h>],
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)])
50
51 dnl Apparently, some systems define sigwait() but fail to implement it
52 AC_TRY_LINK([#include <pthread.h>
53              #include <signal.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)])
57
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)])
63
64 dnl Even if utmpx.h exists, not all systems have support for updwtmpx()
65 AC_TRY_LINK([#include <utmp.h>],
66             [updwtmp(0, 0);],
67             [AC_DEFINE(HAVE_UPDWTMP, 1,
68                        Define to 1 if you have support for updwtmp)])
69 AC_TRY_LINK([#include <utmpx.h>],
70             [updwtmpx(0, 0);],
71             [AC_DEFINE(HAVE_UPDWTMPX, 1,
72                        Define to 1 if you have support for updwtmpx)])
73
74 dnl Check if the compiler supports aliasing of symbols
75 AC_TRY_LINK([void x(void) { };
76              void y(void) __attribute__((alias("x")));],
77             [y();],
78             [AC_DEFINE(HAVE_ATTRIBUTE_ALIAS, 1,
79                        Define to 1 if you have support for symbol aliasing)])
80
81 dnl On some systems, calling /bin/login does not work. Disable the LOGIN
82 dnl feature, if the user tells us that it does not do the right thing.
83 AC_ARG_ENABLE(login,
84               [  --disable-login           on some systems (e.g. Fedora), calling /bin/login
85                             does not work well. If you know that your system
86                             suffers from this problem, set this option to
87                             remove support for the LOGIN keyword in the
88                             service description.])
89 if test "x$enable_login" != xno; then
90   AC_DEFINE(HAVE_BIN_LOGIN, 1,
91                                 Set if you want support for calling /bin/login)
92 fi
93
94 dnl We automatically detect SSL support, but allow users to disable it
95 AC_ARG_ENABLE(ssl,
96               [  --disable-ssl             if available at built-time, support for SSL
97                             connections will be enabled. It can still be
98                             disabled at run-time, either on the daemon's
99                             command line or if the operating system does not
100                             have the OpenSSL libraries available.])
101
102 dnl We automatically detect PAM support, but allow users to disable it
103 AC_ARG_ENABLE(pam,
104               [  --disable-pam             PAM support is necessary in order to authenticate
105                             users for running programs other than their default
106                             login shell.])
107
108 dnl We try to always use dlopen() instead of linking libraries dynamically, as
109 dnl this reduces the hard run-time dependencies that our binary has. But we
110 dnl allow users to disable this feature.
111 AC_ARG_ENABLE(runtime-loading,
112               [  --disable-runtime-loading ShellInABox will try to load the OpenSSL, and PAM
113                             libraries at run-time, if it has been compiled with
114                             support for these libraries, and if the operating
115                             system supports dynamic loading of libraries. This
116                             allows you to install the same binary on different
117                             systems independent of whether they have OpenSSL
118                             and PAM enabled.  If you would rather directly link
119                             these libraries into the binary, thus making them a
120                             hard dependency, then disable runtime-loading.])
121
122 dnl Only test for OpenSSL headers, if not explicitly disabled
123 if test "x$enable_ssl" != xno; then
124   AC_CHECK_HEADERS([openssl/bio.h openssl/err.h openssl/ssl.h])
125 fi
126
127 dnl Only test for PAM headers, if not explicitly disabled
128 if test "x$enable_pam" != xno; then
129   AC_CHECK_HEADERS([security/pam_appl.h security/pam_client.h                 \
130                     security/pam_misc.h ])
131 fi
132
133 dnl Only test for dlopen(), if not explicitly disabled. Add required libdl.so
134 dnl library if necessary. Also, if dlopen() is not available on this system,
135 dnl explicitly disable runtime loading.
136 if test "x$enable_runtime_loading" != xno; then
137   AC_CHECK_FUNCS(dlopen, [],
138                  [AC_CHECK_LIB(dl, dlopen,
139                                [LIBS="-ldl $LIBS"
140                                 AC_DEFINE(HAVE_DLOPEN)],
141                                [enable_runtime_loading=no])])
142 fi
143
144 dnl If runtime loading has been disabled, add OpenSSL and PAM as hard
145 dnl dependencies.
146 if test "x$enable_runtime_loading" == xno; then
147   dnl Link against OpenSSL libraries, unless SSL support has been disabled
148   if test "x$enable_ssl" != xno; then
149     AC_CHECK_HEADER(openssl/bio.h,
150       [AC_CHECK_HEADER(openssl/err.h,
151         [AC_CHECK_HEADER(openssl/ssl.h, [LIBS="-lssl -lcrypto $LIBS"])])])
152   fi
153
154   dnl Link against PAM libraries, unless PAM support has been disabled
155   if test "x$enable_pam" != xno; then
156     AC_CHECK_HEADER(security/pam_appl.h, [LIBS="-lpam $LIBS"])
157     AC_CHECK_HEADER(security/pam_misc.h, [LIBS="-lpam_misc $LIBS"])
158   fi
159 fi
160
161 AC_CHECK_LIB(z, deflate, [
162   AC_CHECK_HEADER(zlib.h, [LIBS="-lz $LIBS"
163                            AC_DEFINE(HAVE_ZLIB, 1,
164                            Define to 1 if zlib development files are installed)
165 ])])
166
167 dnl Generate output files
168 AC_CONFIG_FILES([Makefile])
169 AC_OUTPUT
This page took 0.262217 seconds and 5 git commands to generate.