Add vlogin, a terminal proxy for vserver ... enter.
[util-vserver.git] / configure.ac
1 dnl $Id$
2
3 dnl Copyright (C) 2003,2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
4 dnl  
5 dnl This program is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 2, or (at your option)
8 dnl any later version.
9 dnl  
10 dnl This program is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 dnl GNU General Public License for more details.
14 dnl  
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with this program; if not, write to the Free Software
17 dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 dnl  
19 dnl  
20 dnl As a special exception to the GNU General Public License, if you
21 dnl distribute this file as part of a program that contains a configuration
22 dnl script generated by Autoconf, you may include it under the same
23 dnl distribution terms that you use for the rest of that program.
24 dnl  
25
26 AC_PREREQ(2.57)
27 AC_INIT(util-vserver, 0.30.210, enrico.scholz@informatik.tu-chemnitz.de)
28 AC_CONFIG_SRCDIR([src/capchroot.c])
29 AC_CONFIG_HEADER([config.h])
30
31 AM_INIT_AUTOMAKE([1.9 gnits dist-bzip2 subdir-objects])
32 AM_MAINTAINER_MODE
33
34 AC_CANONICAL_BUILD
35 AC_CANONICAL_HOST
36
37 AC_SUBST(GPG_KEY, "0xFFD316AC53ACA43A!")
38
39 # Checks for programs.
40 AC_PROG_CXX
41 AC_PROG_CC
42 AC_PROG_INSTALL
43 AC_PROG_LN_S
44 AM_PROG_CC_C_O
45 ENSC_CXXCOMPILER
46 ENSC_C99COMPILER
47
48 ENSC_SET_SEARCHPATH([$PATH:/sbin:/usr/sbin:/usr/local/sbin])
49 ENSC_PATHPROG_STANDARD_TOOLS
50
51 ENSC_PATHPROG(IP,        ip,,      [Usually, this tool is shipped in the 'iproute' or 'iproute2' package of your distribution])
52 ENSC_PATHPROG(IPTABLES,  iptables)
53 ENSC_PATHPROG(MODPROBE,  modprobe)
54 ENSC_PATHPROG(NAMEIF,    nameif)
55 ENSC_PATHPROG(NOHUP,     nohup)
56 ENSC_PATHPROG(RMMOD,     rmmod)
57 ENSC_PATHPROG(VCONFIG,   vconfig,, [See http://www.candelatech.com/~greear/vlan.html; usually this tool is shipped in the 'vconfig' or 'vlan' package of your distribution])
58 ENSC_PATHPROG(WGET,      wget)
59 ENSC_PATHPROG(FILE,      file,    [file])
60 ENSC_PATHPROG(GZIP,      gzip,    [gzip])
61 ENSC_PATHPROG(BZIP2,     bzip2,   [bzip2])
62 ENSC_PATHPROG(CPIO,      cpio,    [cpio])
63 ENSC_PATHPROG(RESTORE,   restore, [restore])
64
65 ENSC_PATHPROG(DOXYGEN,   doxygen,  [:])
66 ENSC_PATHPROG(XSLTP,     xsltp,    [:])
67 ENSC_PATHPROG(XSLTPROC,  xsltproc, [:])
68
69
70 AM_CONDITIONAL(HAVE_XSLTP,    test "$XSLTP"    != ':')
71 AM_CONDITIONAL(HAVE_XSLTPROC, test "$XSLTPROC" != ':')
72         
73
74 ENSC_CHECK_CC_FLAG([-std=c99 -Wall -pedantic -W])
75 ENSC_CHECK_CXX_FLAG([-ansi   -Wall -pedantic -W -fmessage-length=0])
76
77 AC_MSG_CHECKING([whether to enable extra optimizations])
78 AC_ARG_ENABLE([extra-optimizations],
79               [AC_HELP_STRING([--disable-extra-optimizations],
80                               [disable certain extra optimizations (default: no)])],
81               [case "$enableval" in
82                   (yes) use_extra_optimizations=1;;
83                   (no)  use_extra_optimizations=;;
84                   (*)   AC_MSG_ERROR(['$enableval' is not a valid value for '--disable-extra-optimizations']);;
85                esac],
86               [use_extra_optimizations=1])
87
88 if test x"$use_extra_optimizations" = x; then
89         AC_MSG_RESULT(no)
90 else
91         AC_MSG_RESULT(yes)
92         ENSC_CHECK_CC_FLAG([-funit-at-a-time])
93         ENSC_CHECK_CXX_FLAG([-funit-at-a-time])
94 fi
95
96 AC_MSG_CHECKING([whether to enable debug-code in library])
97 AC_ARG_ENABLE([lib-debug],
98               [AC_HELP_STRING([--enable-lib-debug],
99                               [enable additional debug code in library (default: no)])],
100               [case "$enableval" in
101                   (yes) use_lib_debug=1;;
102                   (no)  use_lib_debug=;;
103                   (*)   AC_MSG_ERROR(['$enableval' is not a valid value for '--enable-lib-debug']);;
104                esac],
105               [ use_lib_debug= ])
106
107 if test x"$use_lib_debug" = x; then
108         AC_SUBST(LIB_DEBUG_CPPFLAGS, [-DNDEBUG])
109         AC_MSG_RESULT(no)
110 else
111         AC_SUBST(LIB_DEBUG_CPPFLAGS, [])
112         AC_MSG_RESULT(yes)
113 fi
114
115 AC_MSG_CHECKING([whether to enable expensive tests])
116 AC_ARG_ENABLE([expensive-tests],
117               [AC_HELP_STRING([--enable-expensive-tests],
118                               [disable tests which might be expensive on some systems (default: no)])],
119               [case "$enableval" in
120                  (yes|no)  use_expensive_tests=$enableval;;
121                  (*)       AC_MSG_ERROR(['$enableval' is not a valid value for '--enable-expensive-tests']);;
122                esac],
123               [ use_expensive_tests=no ])
124 AC_MSG_RESULT($use_expensive_tests)
125
126 AC_SUBST(ENSC_USE_EXPENSIVE_TESTS, "$use_expensive_tests")
127
128
129 ENSC_CHECK_PERSONALITY_FLAGS
130
131 AC_ARG_VAR(CC, [The C compiler])
132
133 ENSC_INITRDDIR(initrddir)
134 ENSC_RELEASE(RELEASE_CPPFLAGS)
135
136 dnl ###########################
137 dnl
138 dnl {some dietlibc related tests
139 dnl
140
141 case $host_cpu in
142         (i*86|athlon)   min_diet_ver=0.25;;
143         (ia64|hppa*)    min_diet_ver=0.29;;
144         (sparc*)        min_diet_ver=0.30;;
145         (*)             min_diet_ver=0.28;;
146 esac
147
148 ENSC_ENABLE_DIETLIBC(USE_DIETLIBC, [$min_diet_ver])
149
150 if test x"$ensc_have_dietlibc" = xno; then
151         AC_MSG_WARN([***                                                         ***])
152         AC_MSG_WARN([*** it is strongly recommended to link util-vserver against ***])
153         AC_MSG_WARN([*** dietlibc;  glibc's NSS functions are very unreliable in ***])
154         AC_MSG_WARN([*** chroot() environments,  so you have to  expect problems ***])
155         AC_MSG_WARN([*** there.                                                  ***])
156         AC_MSG_WARN([***                                                         ***])
157         AM_CONDITIONAL(USE_DIETLIBC_COMPAT, false)
158 else
159         # HACK: libtool does not have cmdline options to build only
160         # dynamic libraries; this can be done with the
161         # '--disable-static' ./configure option only.  As our static
162         # libraries will be build with dietlibc, we have to do set
163         # this option which is evaluated by 'AC_PROG_LIBTOOL'
164         # below.  Therefore, this macro must not be called earlier.
165         enable_static=no
166
167         ENSC_DIETLIBC_SANITYCHECK
168         ENSC_DIETLIBC_NEED_COMPAT(USE_DIETLIBC_COMPAT)
169 fi
170
171 AM_CONDITIONAL(ENSC_USE_DIETLIBC, test x"$ensc_have_dietlibc" = xyes)
172 AM_CONDITIONAL(ENSC_USE_GLIBC,    true)
173
174 # HACK: see comments at 'enable_static' above
175 AC_PROG_LIBTOOL
176 dnl
177 dnl dietlibc stuff ends here}
178 dnl
179 dnl ##########################
180
181
182 ENSC_UV_VROOTDIR(vserverdir)
183 ENSC_CHANGELOG([trunk])
184
185
186 dnl ##########################
187 dnl
188 dnl {Check whether to use external kernel headers
189 dnl
190 AC_MSG_CHECKING([whether to use internal kernel headers])
191 AC_ARG_ENABLE([internal-headers],
192               [AC_HELP_STRING([--disable-internal-headers],
193                               [use vserver specific headers from the kernel instead of the shipped versions (default: no)])],
194               [case "$enableval" in
195                   (yes|no) ;;
196                   (*)      AC_MSG_ERROR(['$i' is not a supported value for '--disable-internal-headers']);;
197                esac],
198               [enable_internal_headers=yes])
199
200 AM_CONDITIONAL(ENSC_ENABLE_INTERNAL_HEADERS, [test x"$enable_internal_headers" = xyes])
201 AC_MSG_RESULT([$enable_internal_headers])
202 dnl
203 dnl the check regarding external kernel headers ends here}
204 dnl
205 dnl ##########################
206
207 dnl ##########################
208 dnl
209 dnl {Check for the APIs to be used
210 dnl
211 AH_TEMPLATE(VC_ENABLE_API_COMPAT,   [Enable support for compatibility syscall API])
212 AH_TEMPLATE(VC_ENABLE_API_LEGACY,   [Enable support for old, /proc parsing API])
213 AH_TEMPLATE(VC_ENABLE_API_V11,      [Enable support for API of vserver 1.1.x])
214 AH_TEMPLATE(VC_ENABLE_API_FSCOMPAT, [Enable support for filesystem compatibility API])
215 AH_TEMPLATE(VC_ENABLE_API_V13OBS,   [Enable support for some obsoleted API of vserver 1.3.x])
216 AH_TEMPLATE(VC_ENABLE_API_V13,      [Enable support for API of vserver 1.3.x])
217 AH_TEMPLATE(VC_ENABLE_API_NET,      [Enable support for network context API])
218 AH_TEMPLATE(VC_ENABLE_API_OLDPROC,  [Enable API for a backward compatible /proc parsing])
219 AH_TEMPLATE(VC_ENABLE_API_OLDUTS,   [Enable API for a backward compatible uts handling])
220
221 AC_MSG_CHECKING([for supported APIs])
222 AC_ARG_ENABLE([apis],
223               [AC_HELP_STRING([--enable-apis=APIS],
224                               [enable support for the given apis; possible values are: legacy,compat,v11,fscompat,v13obs,v13,net, ALL,NOLEGACY (default: v13,net)])],
225               [],
226               [enable_apis=v13,net])
227
228 test x"$enable_apis" != xALL      || enable_apis='legacy,compat,v11,fscompat,v13obs,v13,net'
229 test x"$enable_apis" != xNOLEGACY || enable_apis='compat,v11,fscompat,v13,net'
230 enable_api_oldproc=
231 enable_api_olduts=
232 old_IFS=$IFS
233 IFS=,;
234
235 for i in $enable_apis; do
236         case "$i" in
237                 (compat)        AC_DEFINE(VC_ENABLE_API_COMPAT,   1)
238                                 enable_api_oldproc=${enable_api_oldproc:-1}
239                                 enable_api_olduts=${enable_api_olduts:-1}
240                                 ;;
241                 (legacy)        AC_DEFINE(VC_ENABLE_API_LEGACY,   1)
242                                 enable_api_oldproc=${enable_api_oldproc:-1}
243                                 enable_api_olduts=${enable_api_olduts:-1}
244                                 ;;
245                 (v11)           AC_DEFINE(VC_ENABLE_API_V11,      1)
246                                 enable_api_oldproc=${enable_api_oldproc:-1}
247                                 enable_api_olduts=${enable_api_olduts:-1}
248                                 ;;
249                 (fscompat)      AC_DEFINE(VC_ENABLE_API_FSCOMPAT, 1);;
250                 (v13obs)        AC_DEFINE(VC_ENABLE_API_V13OBS,   1)
251                                 AC_DEFINE(VC_ENABLE_API_V13,      1);;
252                 (v13)           AC_DEFINE(VC_ENABLE_API_V13,      1);;
253                 (net)           AC_DEFINE(VC_ENABLE_API_NET,      1);;
254                 (oldproc)       enable_api_oldproc=2;;
255                 (olduts)        enable_api_olduts=2;;
256                 (*)             AC_MSG_ERROR(['$i' is not a supported API]);;
257         esac
258 done
259 IFS=$old_IFS
260 if test x"$enable_api_oldproc" != x; then
261         AC_DEFINE(VC_ENABLE_API_OLDPROC, 1)
262         test x"$enable_api_oldproc" != x2 && enable_apis="$enable_apis,oldproc"
263 fi
264 if test x"$enable_api_olduts" != x; then
265         AC_DEFINE(VC_ENABLE_API_OLDUTS, 1)
266         test x"$enable_api_olduts" != x2 && enable_apis="$enable_apis,olduts"
267 fi
268 AC_MSG_RESULT([$enable_apis])
269 dnl
270 dnl the check for used APIs ends here}
271 dnl
272 dnl ##########################
273
274
275 ENSC_SYSCALLNR(vserver,273,[lib/syscall-fallback.h])
276 ENSC_SYSCALL
277 ENSC_CHECK_EXT2FS_HEADER
278 AC_CHECK_FUNCS([vserver])
279 AC_CHECK_DECLS(MS_MOVE,,,[#include <linux/fs.h>])
280 AC_CHECK_TYPES(xid_t,,,[#include <sys/types.h>])
281 AC_CHECK_TYPES(nid_t,,,[#include <sys/types.h>])
282
283 AC_CHECK_HEADERS([sys/capability.h])
284
285 dnl vlogin might need -lutil
286 if test x"$ensc_have_dietlibc" = xno; then
287         AC_CHECK_FUNC([openpty],, [AC_CHECK_LIB([util], [openpty],, [AC_MSG_ERROR([
288 ****
289 **** openpty could not be found
290 ****])])])
291 fi
292
293
294 dnl ########################
295 dnl
296 dnl {check for beecrypt
297 dnl
298 if test x"$ensc_cv_c99_c99compiler" = xyes; then
299         ensc_have_beecrypt=yes
300
301         if test x"$ensc_have_beecrypt" = xyes; then
302                 AC_CHECK_HEADER([beecrypt/beecrypt.h], [ : ],
303                                 [ ensc_have_beecrypt=no ])
304         fi
305                         
306         if test x"$ensc_have_beecrypt" = xyes; then
307                 AC_CHECK_LIB(beecrypt, hashFunctionContextInit, [ : ],
308                              [ ensc_have_beecrypt=no ])
309         fi
310
311         if test x"$ensc_have_beecrypt" != xyes; then
312                 AC_MSG_WARN([
313 ****
314 **** 'beecrypt' could not be found;
315 **** this will disable the build of 'vhashify'
316 ****])
317         fi
318 else
319         ensc_have_beecrypt=no
320 fi
321
322 AM_CONDITIONAL(ENSC_HAVE_BEECRYPT, test x"$ensc_have_beecrypt" = xyes)
323 AM_CONDITIONAL(ENSC_CAN_BEECRYPT_WITH_DIETLIBC, false)
324 dnl
325 dnl beecrypt stuff ends here}
326 dnl
327 dnl ########################
328
329
330 dnl BIG HACK! Do some autodetection here!
331 AC_DEFINE(UTMP_GID, [22], [The utmp gid-number])
332
333 if false; then
334         AC_DEFINE(HAVE_GROWING_STACK, [1], [Define to 1 if the stack is on growing addresses])
335 fi
336
337 AC_DEFINE(_FILE_OFFSET_BITS, [64], [Use 64bit interface for filesystem operations])
338
339 dnl ########################
340 dnl
341 dnl {The final info-page
342 dnl
343 ensc_cxx_affected=" (affected: vbuild, vcheck)"
344 ensc_c99_affected=" (affected: vunify, vcopy, vhashify, vdlimit)"
345 ensc_diet_msg=" (you have been warned)"
346 ensc_diet_version_msg=" ($ensc_version_dietlibc)"
347 ensc_diet_compat_msg=" (using -lcompat)"
348 test x"$ensc_cv_cxx_cxxcompiler"    = xno || ensc_cxx_affected=
349 test x"$ensc_cv_c99_c99compiler"    = xno || ensc_c99_affected=
350 test x"$ensc_have_dietlibc"         = xno || ensc_diet_msg=
351 test x"$ensc_version_dietlibc"     != x   || ensc_diet_version_msg=
352 test x"$ensc_have_dietlibc$ensc_cv_c_dietlibc_compat" = xyesyes || ensc_diet_compat_msg=
353
354 AH_BOTTOM([#include "compat.h"
355 ])
356 AC_CONFIG_COMMANDS_PRE([
357                         FEATURES_TXT="\
358 Features:
359                        CC: $CC, $($CC   --version | sed -e '1p;d')
360                       CXX: $CXX, $($CXX --version | sed -e '1p;d')
361                  CPPFLAGS: '$CPPFLAGS'
362                    CFLAGS: '$CFLAGS'
363                  CXXFLAGS: '$CXXFLAGS'
364                build/host: $build/$host
365              Use dietlibc: $ensc_have_dietlibc$ensc_diet_version_msg$ensc_diet_msg$ensc_diet_compat_msg
366        Build C++ programs: $ensc_cv_cxx_cxxcompiler$ensc_cxx_affected
367        Build C99 programs: $ensc_cv_c99_c99compiler$ensc_c99_affected
368            Available APIs: $enable_apis
369             ext2fs Source: $ensc_cv_test_ext2fs_header
370     syscall(2) invocation: $with_syscall
371       vserver(2) syscall#: $ensc_cv_value_syscall_vserver
372    
373 Paths:
374                    prefix: $prefix
375         sysconf-Directory: $sysconfdir
376             cfg-Directory: $sysconfdir/vservers
377          initrd-Directory: $initrddir
378        pkgstate-Directory: $localstatedir/run/vservers
379           vserver-Rootdir: $vserverdir
380 "
381                         echo "$FEATURES_TXT" >FEATURES.txt
382                         ])
383 dnl
384 dnl final info-page ends here}
385 dnl
386 dnl ########################
387
388 AC_CONFIG_FILES([util-vserver.spec Makefile distrib/Makefile lib/apidoc/Doxyfile])
389 AC_OUTPUT
390
391 AC_MSG_NOTICE([
392
393 $PACKAGE_STRING
394
395 $FEATURES_TXT])