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