Fix API option parsing so oldproc and olduts are valid options
[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
60 ENSC_PATHPROG(DOXYGEN,   doxygen,  [:])
61 ENSC_PATHPROG(XSLTP,     xsltp,    [:])
62 ENSC_PATHPROG(XSLTPROC,  xsltproc, [:])
63
64
65 AM_CONDITIONAL(HAVE_XSLTP,    test "$XSLTP"    != ':')
66 AM_CONDITIONAL(HAVE_XSLTPROC, test "$XSLTPROC" != ':')
67         
68
69 ENSC_CHECK_CC_FLAG([-std=c99 -Wall -pedantic -W])
70 ENSC_CHECK_CXX_FLAG([-ansi   -Wall -pedantic -W -fmessage-length=0])
71
72 AC_MSG_CHECKING([whether to enable extra optimizations])
73 AC_ARG_ENABLE([extra-optimizations],
74               [AC_HELP_STRING([--disable-extra-optimizations],
75                               [disable certain extra optimizations (default: no)])],
76               [case "$enableval" in
77                   (yes) use_extra_optimizations=1;;
78                   (no)  use_extra_optimizations=;;
79                   (*)   AC_MSG_ERROR(['$enableval' is not a valid value for '--disable-extra-optimizations']);;
80                esac],
81               [use_extra_optimizations=1])
82
83 if test x"$use_extra_optimizations" = x; then
84         AC_MSG_RESULT(no)
85 else
86         AC_MSG_RESULT(yes)
87         ENSC_CHECK_CC_FLAG([-funit-at-a-time])
88         ENSC_CHECK_CXX_FLAG([-funit-at-a-time])
89 fi
90
91 AC_MSG_CHECKING([whether to enable debug-code in library])
92 AC_ARG_ENABLE([lib-debug],
93               [AC_HELP_STRING([--enable-lib-debug],
94                               [enable additional debug code in library (default: no)])],
95               [case "$enableval" in
96                   (yes) use_lib_debug=1;;
97                   (no)  use_lib_debug=;;
98                   (*)   AC_MSG_ERROR(['$enableval' is not a valid value for '--enable-lib-debug']);;
99                esac],
100               [ use_lib_debug= ])
101
102 if test x"$use_lib_debug" = x; then
103         AC_SUBST(LIB_DEBUG_CPPFLAGS, [-DNDEBUG])
104         AC_MSG_RESULT(no)
105 else
106         AC_SUBST(LIB_DEBUG_CPPFLAGS, [])
107         AC_MSG_RESULT(yes)
108 fi
109
110 AC_MSG_CHECKING([whether to enable expensive tests])
111 AC_ARG_ENABLE([expensive-tests],
112               [AC_HELP_STRING([--enable-expensive-tests],
113                               [disable tests which might be expensive on some systems (default: no)])],
114               [case "$enableval" in
115                  (yes|no)  use_expensive_tests=$enableval;;
116                  (*)       AC_MSG_ERROR(['$enableval' is not a valid value for '--enable-expensive-tests']);;
117                esac],
118               [ use_expensive_tests=no ])
119 AC_MSG_RESULT($use_expensive_tests)
120
121 AC_SUBST(ENSC_USE_EXPENSIVE_TESTS, "$use_expensive_tests")
122
123
124 ENSC_CHECK_PERSONALITY_FLAGS
125
126 AC_ARG_VAR(CC, [The C compiler])
127
128 ENSC_INITRDDIR(initrddir)
129 ENSC_RELEASE(RELEASE_CPPFLAGS)
130
131 dnl ###########################
132 dnl
133 dnl {some dietlibc related tests
134 dnl
135
136 case $host_cpu in
137         (i*86|athlon)   min_diet_ver=0.25;;
138         (ia64|hppa*)    min_diet_ver=0.29;;
139         (*)             min_diet_ver=0.28;;
140 esac
141
142 ENSC_ENABLE_DIETLIBC(USE_DIETLIBC, [$min_diet_ver])
143
144 if test x"$ensc_have_dietlibc" = xno; then
145         AC_MSG_WARN([***                                                         ***])
146         AC_MSG_WARN([*** it is strongly recommended to link util-vserver against ***])
147         AC_MSG_WARN([*** dietlibc;  glibc's NSS functions are very unreliable in ***])
148         AC_MSG_WARN([*** chroot() environments,  so you have to  expect problems ***])
149         AC_MSG_WARN([*** there.                                                  ***])
150         AC_MSG_WARN([***                                                         ***])
151         AM_CONDITIONAL(USE_DIETLIBC_COMPAT, false)
152 else
153         # HACK: libtool does not have cmdline options to build only
154         # dynamic libraries; this can be done with the
155         # '--disable-static' ./configure option only.  As our static
156         # libraries will be build with dietlibc, we have to do set
157         # this option which is evaluated by 'AC_PROG_LIBTOOL'
158         # below.  Therefore, this macro must not be called earlier.
159         enable_static=no
160
161         ENSC_DIETLIBC_SANITYCHECK
162         ENSC_DIETLIBC_NEED_COMPAT(USE_DIETLIBC_COMPAT)
163 fi
164
165 AM_CONDITIONAL(ENSC_USE_DIETLIBC, test x"$ensc_have_dietlibc" = xyes)
166 AM_CONDITIONAL(ENSC_USE_GLIBC,    true)
167
168 # HACK: see comments at 'enable_static' above
169 AC_PROG_LIBTOOL
170 dnl
171 dnl dietlibc stuff ends here}
172 dnl
173 dnl ##########################
174
175
176 ENSC_UV_VROOTDIR(vserverdir)
177 ENSC_CHANGELOG([trunk])
178
179
180 dnl ##########################
181 dnl
182 dnl {Check whether to use external kernel headers
183 dnl
184 AC_MSG_CHECKING([whether to use internal kernel headers])
185 AC_ARG_ENABLE([internal-headers],
186               [AC_HELP_STRING([--disable-internal-headers],
187                               [use vserver specific headers from the kernel instead of the shipped versions (default: no)])],
188               [case "$enableval" in
189                   (yes|no) ;;
190                   (*)      AC_MSG_ERROR(['$i' is not a supported value for '--disable-internal-headers']);;
191                esac],
192               [enable_internal_headers=yes])
193
194 AM_CONDITIONAL(ENSC_ENABLE_INTERNAL_HEADERS, [test x"$enable_internal_headers" = xyes])
195 AC_MSG_RESULT([$enable_internal_headers])
196 dnl
197 dnl the check regarding external kernel headers ends here}
198 dnl
199 dnl ##########################
200
201 dnl ##########################
202 dnl
203 dnl {Check for the APIs to be used
204 dnl
205 AH_TEMPLATE(VC_ENABLE_API_COMPAT,   [Enable support for compatibility syscall API])
206 AH_TEMPLATE(VC_ENABLE_API_LEGACY,   [Enable support for old, /proc parsing API])
207 AH_TEMPLATE(VC_ENABLE_API_V11,      [Enable support for API of vserver 1.1.x])
208 AH_TEMPLATE(VC_ENABLE_API_FSCOMPAT, [Enable support for filesystem compatibility API])
209 AH_TEMPLATE(VC_ENABLE_API_V13OBS,   [Enable support for some obsoleted API of vserver 1.3.x])
210 AH_TEMPLATE(VC_ENABLE_API_V13,      [Enable support for API of vserver 1.3.x])
211 AH_TEMPLATE(VC_ENABLE_API_NET,      [Enable support for network context API])
212 AH_TEMPLATE(VC_ENABLE_API_OLDPROC,  [Enable API for a backward compatible /proc parsing])
213 AH_TEMPLATE(VC_ENABLE_API_OLDUTS,   [Enable API for a backward compatible uts handling])
214
215 AC_MSG_CHECKING([for supported APIs])
216 AC_ARG_ENABLE([apis],
217               [AC_HELP_STRING([--enable-apis=APIS],
218                               [enable support for the given apis; possible values are: legacy,compat,v11,fscompat,v13obs,v13,net, ALL,NOLEGACY (default: v13,net)])],
219               [],
220               [enable_apis=v13,net])
221
222 test x"$enable_apis" != xALL      || enable_apis='legacy,compat,v11,fscompat,v13obs,v13,net'
223 test x"$enable_apis" != xNOLEGACY || enable_apis='compat,v11,fscompat,v13,net'
224 enable_api_oldproc=
225 enable_api_olduts=
226 old_IFS=$IFS
227 IFS=,;
228
229 for i in $enable_apis; do
230         case "$i" in
231                 (compat)        AC_DEFINE(VC_ENABLE_API_COMPAT,   1)
232                                 enable_api_oldproc=${enable_api_oldproc:-1}
233                                 enable_api_olduts=${enable_api_olduts:-1}
234                                 ;;
235                 (legacy)        AC_DEFINE(VC_ENABLE_API_LEGACY,   1)
236                                 enable_api_oldproc=${enable_api_oldproc:-1}
237                                 enable_api_olduts=${enable_api_olduts:-1}
238                                 ;;
239                 (v11)           AC_DEFINE(VC_ENABLE_API_V11,      1)
240                                 enable_api_oldproc=${enable_api_oldproc:-1}
241                                 enable_api_olduts=${enable_api_olduts:-1}
242                                 ;;
243                 (fscompat)      AC_DEFINE(VC_ENABLE_API_FSCOMPAT, 1);;
244                 (v13obs)        AC_DEFINE(VC_ENABLE_API_V13OBS,   1)
245                                 AC_DEFINE(VC_ENABLE_API_V13,      1);;
246                 (v13)           AC_DEFINE(VC_ENABLE_API_V13,      1);;
247                 (net)           AC_DEFINE(VC_ENABLE_API_NET,      1);;
248                 (oldproc)       enable_api_oldproc=2;;
249                 (olduts)        enable_api_olduts=2;;
250                 (*)             AC_MSG_ERROR(['$i' is not a supported API]);;
251         esac
252 done
253 IFS=$old_IFS
254 if test x"$enable_api_oldproc" != x; then
255         AC_DEFINE(VC_ENABLE_API_OLDPROC, 1)
256         test x"$enable_api_oldproc" != x2 && enable_apis="$enable_apis,oldproc"
257 fi
258 if test x"$enable_api_olduts" != x; then
259         AC_DEFINE(VC_ENABLE_API_OLDUTS, 1)
260         test x"$enable_api_olduts" != x2 && enable_apis="$enable_apis,olduts"
261 fi
262 AC_MSG_RESULT([$enable_apis])
263 dnl
264 dnl the check for used APIs ends here}
265 dnl
266 dnl ##########################
267
268
269 ENSC_SYSCALLNR(vserver,273,[lib/syscall-fallback.h])
270 ENSC_SYSCALL
271 ENSC_CHECK_EXT2FS_HEADER
272 AC_CHECK_FUNCS([vserver])
273 AC_CHECK_DECLS(MS_MOVE,,,[#include <linux/fs.h>])
274 AC_CHECK_TYPES(xid_t,,,[#include <sys/types.h>])
275 AC_CHECK_TYPES(nid_t,,,[#include <sys/types.h>])
276
277 AC_CHECK_HEADERS([sys/capability.h])
278
279
280 dnl ########################
281 dnl
282 dnl {check for beecrypt
283 dnl
284 if test x"$ensc_cv_c99_c99compiler" = xyes; then
285         ensc_have_beecrypt=yes
286
287         if test x"$ensc_have_beecrypt" = xyes; then
288                 AC_CHECK_HEADER([beecrypt/beecrypt.h], [ : ],
289                                 [ ensc_have_beecrypt=no ])
290         fi
291                         
292         if test x"$ensc_have_beecrypt" = xyes; then
293                 AC_CHECK_LIB(beecrypt, hashFunctionContextInit, [ : ],
294                              [ ensc_have_beecrypt=no ])
295         fi
296
297         if test x"$ensc_have_beecrypt" != xyes; then
298                 AC_MSG_WARN([
299 ****
300 **** 'beecrypt' could not be found;
301 **** this will disable the build of 'vhashify'
302 ****])
303         fi
304 else
305         ensc_have_beecrypt=no
306 fi
307
308 AM_CONDITIONAL(ENSC_HAVE_BEECRYPT, test x"$ensc_have_beecrypt" = xyes)
309 AM_CONDITIONAL(ENSC_CAN_BEECRYPT_WITH_DIETLIBC, false)
310 dnl
311 dnl beecrypt stuff ends here}
312 dnl
313 dnl ########################
314
315
316 dnl BIG HACK! Do some autodetection here!
317 AC_DEFINE(UTMP_GID, [22], [The utmp gid-number])
318
319 if false; then
320         AC_DEFINE(HAVE_GROWING_STACK, [1], [Define to 1 if the stack is on growing addresses])
321 fi
322
323 AC_DEFINE(_FILE_OFFSET_BITS, [64], [Use 64bit interface for filesystem operations])
324
325 dnl ########################
326 dnl
327 dnl {The final info-page
328 dnl
329 ensc_cxx_affected=" (affected: vbuild, vcheck)"
330 ensc_c99_affected=" (affected: vunify, vcopy, vhashify, vdlimit)"
331 ensc_diet_msg=" (you have been warned)"
332 ensc_diet_version_msg=" ($ensc_version_dietlibc)"
333 ensc_diet_compat_msg=" (using -lcompat)"
334 test x"$ensc_cv_cxx_cxxcompiler"    = xno || ensc_cxx_affected=
335 test x"$ensc_cv_c99_c99compiler"    = xno || ensc_c99_affected=
336 test x"$ensc_have_dietlibc"         = xno || ensc_diet_msg=
337 test x"$ensc_version_dietlibc"     != x   || ensc_diet_version_msg=
338 test x"$ensc_have_dietlibc$ensc_cv_c_dietlibc_compat" = xyesyes || ensc_diet_compat_msg=
339
340 AH_BOTTOM([#include "compat.h"
341 ])
342 AC_CONFIG_COMMANDS_PRE([
343                         FEATURES_TXT="\
344 Features:
345                        CC: $CC, $($CC   --version | sed -e '1p;d')
346                       CXX: $CXX, $($CXX --version | sed -e '1p;d')
347                  CPPFLAGS: '$CPPFLAGS'
348                    CFLAGS: '$CFLAGS'
349                  CXXFLAGS: '$CXXFLAGS'
350                build/host: $build/$host
351              Use dietlibc: $ensc_have_dietlibc$ensc_diet_version_msg$ensc_diet_msg$ensc_diet_compat_msg
352        Build C++ programs: $ensc_cv_cxx_cxxcompiler$ensc_cxx_affected
353        Build C99 programs: $ensc_cv_c99_c99compiler$ensc_c99_affected
354            Available APIs: $enable_apis
355             ext2fs Source: $ensc_cv_test_ext2fs_header
356     syscall(2) invocation: $with_syscall
357       vserver(2) syscall#: $ensc_cv_value_syscall_vserver
358    
359 Paths:
360                    prefix: $prefix
361         sysconf-Directory: $sysconfdir
362             cfg-Directory: $sysconfdir/vservers
363          initrd-Directory: $initrddir
364        pkgstate-Directory: $localstatedir/run/vservers
365           vserver-Rootdir: $vserverdir
366 "
367                         echo "$FEATURES_TXT" >FEATURES.txt
368                         ])
369 dnl
370 dnl final info-page ends here}
371 dnl
372 dnl ########################
373
374 AC_CONFIG_FILES([util-vserver.spec Makefile distrib/Makefile lib/apidoc/Doxyfile])
375 AC_OUTPUT
376
377 AC_MSG_NOTICE([
378
379 $PACKAGE_STRING
380
381 $FEATURES_TXT])