]>
Commit | Line | Data |
---|---|---|
7460295f | 1 | AC_PREREQ(2.57) |
bf1ec4d2 MG |
2 | |
3 | dnl This is the one location where the authoritative version number is stored | |
9be467c0 | 4 | AC_INIT(shellinabox, 2.10, markus@shellinabox.com) |
dfcade5d | 5 | VCS_REVISION=239 |
fe338aa8 MG |
6 | AC_SUBST(VCS_REVISION) |
7 | AC_DEFINE_UNQUOTED(VCS_REVISION, "${VCS_REVISION}", | |
8 | [Most recent revision number in the version control system]) | |
bf1ec4d2 MG |
9 | |
10 | dnl Set up autoconf/automake for building C libraries and binaries with GCC | |
c593cf68 | 11 | CFLAGS="${CFLAGS:--Os}" |
7460295f | 12 | AM_INIT_AUTOMAKE |
bdd01e84 | 13 | AM_CONFIG_HEADER(config.h) |
7460295f | 14 | AC_PROG_CC |
c593cf68 | 15 | AC_LANG_WERROR |
7460295f MG |
16 | AC_PROG_INSTALL |
17 | AC_PROG_LIBTOOL | |
18 | AC_SUBST(LIBTOOL_DEPS) | |
19 | AC_C_CONST | |
20 | AC_PROG_GCC_TRADITIONAL | |
bf1ec4d2 MG |
21 | |
22 | dnl Check for header files that do not exist on all platforms | |
ac96c090 MG |
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]) | |
bf1ec4d2 MG |
25 | |
26 | dnl Most systems require linking against libutil.so in order to get login_tty() | |
a3876a41 MG |
27 | AC_CHECK_FUNCS(login_tty, [], |
28 | [AC_CHECK_LIB(util, login_tty, | |
29 | [LIBS="-lutil $LIBS" | |
30 | AC_DEFINE(HAVE_LOGIN_TTY)])]) | |
bf1ec4d2 | 31 | |
572ac014 MG |
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 | |
4101fea2 | 36 | AC_CHECK_FUNCS([getgrgid_r getgrnam_r gethostbyname_r getpwnam_r getpwuid_r \ |
242e6c5b | 37 | openpty strcasestr getresuid getresgid setresuid setresgid ]) |
572ac014 | 38 | |
bf1ec4d2 | 39 | dnl We prefer ptsname_r(), but will settle for ptsname() if necessary |
29135474 MG |
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>], | |
c593cf68 | 47 | [char buf[10]; ptsname_r(0, buf, sizeof(buf));], |
29135474 MG |
48 | [AC_DEFINE(HAVE_PTSNAME_R, 1, |
49 | Define to 1 if you have a re-entrant version of ptsname)]) | |
bf1ec4d2 | 50 | |
572ac014 MG |
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 | ||
bc83b450 MG |
58 | dnl Not every system has support for isnan() |
59 | AC_TRY_LINK([#include <math.h>], | |
9b08d350 | 60 | [if (isnan(0.0)) return 1;], |
bc83b450 MG |
61 | [AC_DEFINE(HAVE_ISNAN, 1, |
62 | Define to 1 if you have support for isnan)]) | |
63 | ||
e7fe02f0 MG |
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 | ||
6868aeb4 MG |
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 | ||
242e6c5b MG |
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));], | |
83 | [], | |
84 | [AC_DEFINE(HAVE_ATTRIBUTE_UNUSED, 1, | |
85 | Define to 1 if you have support for the "unused" attribute)]) | |
86 | ||
b0ff8793 MG |
87 | dnl Check the function signature of getgrouplist() |
88 | AC_TRY_LINK([#define _BSD_SOURCE | |
89 | #include <grp.h> | |
90 | #include <unistd.h>], | |
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)]) | |
94 | ||
2eb60237 MG |
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. | |
97 | AC_ARG_ENABLE(login, | |
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) | |
106 | fi | |
107 | ||
bf1ec4d2 MG |
108 | dnl We automatically detect SSL support, but allow users to disable it |
109 | AC_ARG_ENABLE(ssl, | |
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.]) | |
115 | ||
116 | dnl We automatically detect PAM support, but allow users to disable it | |
117 | AC_ARG_ENABLE(pam, | |
118 | [ --disable-pam PAM support is necessary in order to authenticate | |
119 | users for running programs other than their default | |
120 | login shell.]) | |
121 | ||
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.]) | |
135 | ||
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]) | |
139 | fi | |
140 | ||
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 ]) | |
145 | fi | |
146 | ||
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, | |
153 | [LIBS="-ldl $LIBS" | |
154 | AC_DEFINE(HAVE_DLOPEN)], | |
155 | [enable_runtime_loading=no])]) | |
156 | fi | |
157 | ||
158 | dnl If runtime loading has been disabled, add OpenSSL and PAM as hard | |
159 | dnl dependencies. | |
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 | |
572ac014 MG |
163 | AC_CHECK_HEADER(openssl/bio.h, |
164 | [AC_CHECK_HEADER(openssl/err.h, | |
10d0a6b0 | 165 | [AC_CHECK_HEADER(openssl/ssl.h, [LIBS="-lssl -lcrypto $LIBS"])])]) |
bf1ec4d2 MG |
166 | fi |
167 | ||
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"]) | |
172 | fi | |
173 | fi | |
174 | ||
33aa8fe1 MG |
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) | |
179 | ])]) | |
180 | ||
bf1ec4d2 | 181 | dnl Generate output files |
7460295f MG |
182 | AC_CONFIG_FILES([Makefile]) |
183 | AC_OUTPUT |