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