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