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