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