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