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