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