Build the python code using automake.
[util-vserver.git] / configure.ac
1 dnl $Id: configure.ac 2539 2007-05-02 20:11:40Z 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.213, 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 # HACK: This needs to be before ENSC_DIETLIBC_NEED_COMPAT, or the alternative
142 # syscalls will never be enabled for glibc.
143 ENSC_SYSCALLNR(vserver,273,[lib/syscall-fallback.h])
144 ENSC_SYSCALL
145
146 dnl ###########################
147 dnl
148 dnl {some dietlibc related tests
149 dnl
150
151 case $host_cpu in
152         (i*86|athlon)   min_diet_ver=0.25;;
153         (ia64|hppa*)    min_diet_ver=0.29;;
154         (sparc*)        min_diet_ver=0.30;;
155         (x86_64)        min_diet_ver=0.27;;
156         (*)             min_diet_ver=0.28;;
157 esac
158
159 ENSC_ENABLE_DIETLIBC(USE_DIETLIBC, [$min_diet_ver])
160
161 if test x"$ensc_have_dietlibc" = xno; then
162         AC_MSG_WARN([***                                                         ***])
163         AC_MSG_WARN([*** it is strongly recommended to link util-vserver against ***])
164         AC_MSG_WARN([*** dietlibc;  glibc's NSS functions are very unreliable in ***])
165         AC_MSG_WARN([*** chroot() environments,  so you have to  expect problems ***])
166         AC_MSG_WARN([*** there.                                                  ***])
167         AC_MSG_WARN([***                                                         ***])
168         AM_CONDITIONAL(USE_DIETLIBC_COMPAT, false)
169 else
170         # HACK: libtool does not have cmdline options to build only
171         # dynamic libraries; this can be done with the
172         # '--disable-static' ./configure option only.  As our static
173         # libraries will be build with dietlibc, we have to do set
174         # this option which is evaluated by 'AC_PROG_LIBTOOL'
175         # below.  Therefore, this macro must not be called earlier.
176         enable_static=no
177
178         ENSC_DIETLIBC_NEED_COMPAT(USE_DIETLIBC_COMPAT)
179 fi
180
181 AM_CONDITIONAL(ENSC_USE_DIETLIBC, test x"$ensc_have_dietlibc" = xyes)
182 AM_CONDITIONAL(ENSC_USE_GLIBC,    true)
183
184 # HACK: see comments at 'enable_static' above
185 AC_PROG_LIBTOOL
186 dnl
187 dnl dietlibc stuff ends here}
188 dnl
189 dnl ##########################
190
191
192 ENSC_UV_VROOTDIR(vserverdir)
193 ENSC_CHANGELOG
194
195
196 dnl ##########################
197 dnl
198 dnl {Check whether to use external kernel headers
199 dnl
200 AC_MSG_CHECKING([whether to use internal kernel headers])
201 AC_ARG_ENABLE([internal-headers],
202               [AC_HELP_STRING([--disable-internal-headers],
203                               [use vserver specific headers from the kernel instead of the shipped versions (default: no)])],
204               [case "$enableval" in
205                   (yes|no) ;;
206                   (*)      AC_MSG_ERROR(['$i' is not a supported value for '--disable-internal-headers']);;
207                esac],
208               [enable_internal_headers=yes])
209
210 AM_CONDITIONAL(ENSC_ENABLE_INTERNAL_HEADERS, [test x"$enable_internal_headers" = xyes])
211 AC_MSG_RESULT([$enable_internal_headers])
212 dnl
213 dnl the check regarding external kernel headers ends here}
214 dnl
215 dnl ##########################
216
217 dnl ##########################
218 dnl
219 dnl {Check for the APIs to be used
220 dnl
221 AH_TEMPLATE(VC_ENABLE_API_COMPAT,   [Enable support for compatibility syscall API])
222 AH_TEMPLATE(VC_ENABLE_API_LEGACY,   [Enable support for old, /proc parsing API])
223 AH_TEMPLATE(VC_ENABLE_API_V11,      [Enable support for API of vserver 1.1.x])
224 AH_TEMPLATE(VC_ENABLE_API_FSCOMPAT, [Enable support for filesystem compatibility API])
225 AH_TEMPLATE(VC_ENABLE_API_V13OBS,   [Enable support for some obsoleted API of vserver 1.3.x])
226 AH_TEMPLATE(VC_ENABLE_API_V13,      [Enable support for API of vserver 1.3.x])
227 AH_TEMPLATE(VC_ENABLE_API_NET,      [Enable support for network context API])
228 AH_TEMPLATE(VC_ENABLE_API_V21,      [Enable support for API of vserver 2.1.x])
229 AH_TEMPLATE(VC_ENABLE_API_OLDPROC,  [Enable API for a backward compatible /proc parsing])
230 AH_TEMPLATE(VC_ENABLE_API_OLDUTS,   [Enable API for a backward compatible uts handling])
231
232 AC_MSG_CHECKING([for supported APIs])
233 AC_ARG_ENABLE([apis],
234               [AC_HELP_STRING([--enable-apis=APIS],
235                               [enable support for the given apis; possible values are: legacy,compat,v11,fscompat,v13obs,v13,net, ALL,NOLEGACY (default: v13,net,v21)])],
236               [],
237               [enable_apis=v13,net,v21])
238
239 test x"$enable_apis" != xALL      || enable_apis='legacy,compat,v11,fscompat,v13obs,v13,net,v21'
240 test x"$enable_apis" != xNOLEGACY || enable_apis='compat,v11,fscompat,v13,net,v21'
241 enable_api_oldproc=
242 enable_api_olduts=
243 old_IFS=$IFS
244 IFS=,;
245
246 for i in $enable_apis; do
247         case "$i" in
248                 (compat)        AC_DEFINE(VC_ENABLE_API_COMPAT,   1)
249                                 enable_api_oldproc=${enable_api_oldproc:-1}
250                                 enable_api_olduts=${enable_api_olduts:-1}
251                                 ;;
252                 (legacy)        AC_DEFINE(VC_ENABLE_API_LEGACY,   1)
253                                 enable_api_oldproc=${enable_api_oldproc:-1}
254                                 enable_api_olduts=${enable_api_olduts:-1}
255                                 ;;
256                 (v11)           AC_DEFINE(VC_ENABLE_API_V11,      1)
257                                 enable_api_oldproc=${enable_api_oldproc:-1}
258                                 enable_api_olduts=${enable_api_olduts:-1}
259                                 ;;
260                 (fscompat)      AC_DEFINE(VC_ENABLE_API_FSCOMPAT, 1);;
261                 (v13obs)        AC_DEFINE(VC_ENABLE_API_V13OBS,   1)
262                                 AC_DEFINE(VC_ENABLE_API_V13,      1);;
263                 (v13)           AC_DEFINE(VC_ENABLE_API_V13,      1);;
264                 (net)           AC_DEFINE(VC_ENABLE_API_NET,      1);;
265                 (v21)           AC_DEFINE(VC_ENABLE_API_V21,      1);;
266                 (oldproc)       enable_api_oldproc=2;;
267                 (olduts)        enable_api_olduts=2;;
268                 (*)             AC_MSG_ERROR(['$i' is not a supported API]);;
269         esac
270 done
271 IFS=$old_IFS
272 if test x"$enable_api_oldproc" != x; then
273         AC_DEFINE(VC_ENABLE_API_OLDPROC, 1)
274         test x"$enable_api_oldproc" != x2 && enable_apis="$enable_apis,oldproc"
275 fi
276 if test x"$enable_api_olduts" != x; then
277         AC_DEFINE(VC_ENABLE_API_OLDUTS, 1)
278         test x"$enable_api_olduts" != x2 && enable_apis="$enable_apis,olduts"
279 fi
280 AC_MSG_RESULT([$enable_apis])
281 dnl
282 dnl the check for used APIs ends here}
283 dnl
284 dnl ##########################
285
286
287 ENSC_CHECK_EXT2FS_HEADER
288 AC_CHECK_FUNCS([vserver])
289 AC_CHECK_DECLS(MS_MOVE,,,[#include <linux/fs.h>])
290 AC_CHECK_TYPES(xid_t,,,[#include <sys/types.h>])
291 AC_CHECK_TYPES(nid_t,,,[#include <sys/types.h>])
292
293 AC_CHECK_HEADERS([sys/capability.h])
294
295 dnl vlogin might need -lutil
296 if test x"$ensc_have_dietlibc" = xno; then
297         AC_CHECK_FUNC([openpty],, [AC_CHECK_LIB([util], [openpty],, [AC_MSG_ERROR([
298 ****
299 **** openpty could not be found
300 ****])])])
301 fi
302
303
304 dnl ########################
305 dnl
306 dnl {check for beecrypt
307 dnl
308 if test x"$ensc_cv_c99_c99compiler" = xyes; then
309         ensc_have_beecrypt=yes
310
311         if test x"$ensc_have_beecrypt" = xyes; then
312                 AC_CHECK_HEADER([beecrypt/beecrypt.h], [ : ],
313                                 [ ensc_have_beecrypt=no ])
314         fi
315                         
316         if test x"$ensc_have_beecrypt" = xyes; then
317                 AC_CHECK_LIB(beecrypt, hashFunctionContextInit, [ : ],
318                              [ ensc_have_beecrypt=no ])
319         fi
320
321         if test x"$ensc_have_beecrypt" != xyes; then
322                 AC_MSG_WARN([
323 ****
324 **** 'beecrypt' could not be found;
325 **** this will disable the build of 'vhashify'
326 ****])
327         fi
328 else
329         ensc_have_beecrypt=no
330 fi
331
332 AM_CONDITIONAL(ENSC_HAVE_BEECRYPT, test x"$ensc_have_beecrypt" = xyes)
333 AM_CONDITIONAL(ENSC_CAN_BEECRYPT_WITH_DIETLIBC, false)
334 dnl
335 dnl beecrypt stuff ends here}
336 dnl
337 dnl ########################
338
339 dnl ########################
340 dnl
341 dnl {check for libnl
342 dnl
343
344 ensc_have_libnl=yes
345 LIBNL_ROOT=`readlink -f ../libnl*/`
346 if test -d "$LIBNL_ROOT"; then
347         CFLAGS="$CFLAGS -I ${LIBNL_ROOT}/include"
348         LDFLAGS="$LDFLAGS -L${LIBNL_ROOT}/lib"
349 fi
350
351 if test x"$ensc_have_libnl" = xyes; then
352         AC_CHECK_HEADERS([asm/types.h stdint.h], [ : ],
353                          [ ensc_have_libnl=no ])
354         for b in 8 16 32 64; do
355                 for s in s u; do
356                         ensc_libnl_stdint_type=
357                         if test x"$s" = xu; then
358                                 ensc_libnl_stdint_type=u
359                         fi
360                         ensc_libnl_stdint_type="${ensc_libnl_stdint_type}int${b}_t"
361                         AC_CHECK_TYPES([__${s}${b}], [ : ],
362                                 [AC_DEFINE_UNQUOTED([__${s}${b}],
363                                                 [$ensc_libnl_stdint_type],
364                                                 [__${s}${b} type])],
365                                 [AC_INCLUDES_DEFAULT()
366 #ifdef HAVE_ASM_TYPES_H
367 #  include <asm/types.h>
368 #endif]
369                                 )
370                 done
371         done
372 fi
373
374 if test x"$ensc_have_libnl" = xyes; then
375         AC_CHECK_HEADERS([netlink/netlink.h netlink/route/addr.h], [ : ],
376                          [ ensc_have_libnl=no ], [AC_INCLUDES_DEFAULT()
377 #ifdef HAVE_ASM_TYPES_H
378 #  include <asm/types.h>
379 #endif]
380                 )
381 fi
382
383 if test x"$ensc_have_libnl" = xyes; then
384         AC_CHECK_LIB(nl, rtnl_addr_alloc, [ : ],
385                      [ ensc_have_libnl=no ])
386 fi
387
388 if test x"$ensc_have_libnl" != xyes; then
389         AC_MSG_WARN([
390 ****
391 **** 'libnl' could not be found;
392 **** this will disable the build of 'vip6-autod'
393 ****])
394 fi
395
396 AM_CONDITIONAL(ENSC_HAVE_LIBNL, test x"$ensc_have_libnl" = xyes)
397
398 dnl
399 dnl libnl stuff ends here}
400 dnl
401 dnl #######################
402
403 dnl
404 dnl Get python includes
405 dnl
406
407 AC_MSG_CHECKING([for python includes])
408 PYTHON_INCLUDES=`python-config --includes 2>/dev/null`
409 if test x"$PYTHON_INCLUDES" = x; then
410         python_inc_plat=`$PYTHON -c "from distutils.sysconfig import get_python_inc; print get_python_inc(1)"`
411         python_inc=`$PYTHON -c "from distutils.sysconfig import get_python_inc; print get_python_inc()"`
412         if test x"$python_inc_plat" != x; then
413                 PYTHON_INCLUDES="$PYTHON_INCLUDES -I$python_inc_plat"
414         fi
415         if test x"$python_inc" != x; then
416                 PYTHON_INCLUDES="$PYTHON_INCLUDES -I$python_inc"
417         fi
418 fi
419 AC_MSG_RESULT([$PYTHON_INCLUDES])
420 AC_SUBST(PYTHON_INCLUDES)
421
422
423 dnl Check what distro this is, use Gentoo initscripts if appropriate
424 AC_MSG_CHECKING([for host initscripts])
425 AC_ARG_WITH(initscripts, AC_HELP_STRING([--with-initscripts=TYPE], [force host initscripts; valid values are 'gentoo' and 'sysv' (default: guess)]), [
426         case "$withval" in
427         gentoo) ensc_with_init=gentoo;;
428         sysv)   ensc_with_init=sysv;;
429         *)      AC_MSG_ERROR([invalid initscripts value, only gentoo and sysv are supported]);;
430         esac
431         ], [
432         if test -e /etc/gentoo-release; then
433                 ensc_with_init=gentoo
434         else
435                 ensc_with_init=sysv
436         fi
437         ])
438 AC_MSG_RESULT([$ensc_with_init])
439 AM_CONDITIONAL(HAVE_GENTOO_INIT, test x"$ensc_with_init" = xgentoo)
440 AM_CONDITIONAL(HAVE_SYSV_INIT, test x"$ensc_with_init" = xsysv)
441
442
443 dnl BIG HACK! Do some autodetection here!
444 AC_DEFINE(UTMP_GID, [22], [The utmp gid-number])
445
446 if false; then
447         AC_DEFINE(HAVE_GROWING_STACK, [1], [Define to 1 if the stack is on growing addresses])
448 fi
449
450 AC_DEFINE(_FILE_OFFSET_BITS, [64], [Use 64bit interface for filesystem operations])
451
452 dnl ########################
453 dnl
454 dnl {The final info-page
455 dnl
456 ensc_cxx_affected=" (affected: vbuild, vcheck)"
457 ensc_c99_affected=" (affected: vunify, vcopy, vhashify, vdlimit)"
458 ensc_diet_msg=" (you have been warned)"
459 ensc_diet_version_msg=" ($ensc_version_dietlibc)"
460 ensc_diet_compat_msg=" (using -lcompat)"
461 test x"$ensc_cv_cxx_cxxcompiler"    = xno || ensc_cxx_affected=
462 test x"$ensc_cv_c99_c99compiler"    = xno || ensc_c99_affected=
463 test x"$ensc_have_dietlibc"         = xno || ensc_diet_msg=
464 test x"$ensc_version_dietlibc"     != x   || ensc_diet_version_msg=
465 test x"$ensc_have_dietlibc$ensc_cv_c_dietlibc_compat" = xyesyes || ensc_diet_compat_msg=
466
467 AH_BOTTOM([#include "compat.h"
468 ])
469 AC_CONFIG_COMMANDS_PRE([
470                         FEATURES_TXT="\
471 Features:
472                        CC: $CC, $($CC   --version | sed -e '1p;d')
473                       CXX: $CXX, $($CXX --version | sed -e '1p;d')
474                  CPPFLAGS: '$CPPFLAGS'
475                    CFLAGS: '$CFLAGS'
476                  CXXFLAGS: '$CXXFLAGS'
477                build/host: $build/$host
478              Use dietlibc: $ensc_have_dietlibc$ensc_diet_version_msg$ensc_diet_msg$ensc_diet_compat_msg
479        Build C++ programs: $ensc_cv_cxx_cxxcompiler$ensc_cxx_affected
480        Build C99 programs: $ensc_cv_c99_c99compiler$ensc_c99_affected
481            Available APIs: $enable_apis
482             ext2fs Source: $ensc_cv_test_ext2fs_header
483     syscall(2) invocation: $with_syscall
484       vserver(2) syscall#: $ensc_cv_value_syscall_vserver
485    
486 Paths:
487                    prefix: $prefix
488         sysconf-Directory: $sysconfdir
489             cfg-Directory: $sysconfdir/vservers
490          initrd-Directory: $initrddir
491        pkgstate-Directory: $localstatedir/run/vservers
492           vserver-Rootdir: $vserverdir
493 "
494                         echo "$FEATURES_TXT" >FEATURES.txt
495                         ])
496 dnl
497 dnl final info-page ends here}
498 dnl
499 dnl ########################
500
501 AC_CONFIG_FILES([util-vserver.spec Makefile distrib/Makefile lib/apidoc/Doxyfile python/Makefile])
502 AC_OUTPUT
503
504 AC_MSG_NOTICE([
505
506 $PACKAGE_STRING
507
508 $FEATURES_TXT])