Debian package format
[libguestfs.git] / configure.ac
1 # libguestfs
2 # Copyright (C) 2009 Red Hat Inc.
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 # major/minor/release must be numbers
19 m4_define([libguestfs_major],   [1])
20 m4_define([libguestfs_minor],   [0])
21 m4_define([libguestfs_release], [84])
22 # extra can be any string
23 m4_define([libguestfs_extra],   [])
24
25 AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release[]libguestfs_extra)
26 AC_CONFIG_AUX_DIR([build-aux])
27 AM_INIT_AUTOMAKE([foreign])
28
29 m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
30 AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
31
32 AC_CONFIG_MACRO_DIR([m4])
33
34 dnl Split up the version string.
35 AC_DEFINE([PACKAGE_VERSION_MAJOR],[libguestfs_major],[Major version number])
36 AC_DEFINE([PACKAGE_VERSION_MINOR],[libguestfs_minor],[Minor version number])
37 AC_DEFINE([PACKAGE_VERSION_RELEASE],[libguestfs_release],[Release number])
38 AC_DEFINE([PACKAGE_VERSION_EXTRA],["libguestfs_extra"],[Extra version string])
39
40 gl_EARLY
41 gl_INIT
42
43 AC_PROG_LIBTOOL
44
45 dnl Check for basic C environment.
46 AC_PROG_CC_STDC
47 AC_PROG_INSTALL
48 AC_PROG_CPP
49
50 AC_ARG_ENABLE([gcc-warnings],
51   [AS_HELP_STRING([--enable-gcc-warnings],
52                   [turn on lots of GCC warnings (for developers)])],
53   [case $enableval in
54      yes|no) ;;
55      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
56    esac
57    gl_gcc_warnings=$enableval],
58   [gl_gcc_warnings=no]
59 )
60
61 if test "$gl_gcc_warnings" = yes; then
62   gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
63   AC_SUBST([WERROR_CFLAGS])
64
65   nw=
66   # This, $nw, is the list of warnings we disable.
67   nw="$nw -Wdeclaration-after-statement" # too useful to forbid
68   nw="$nw -Waggregate-return"       # anachronistic
69   nw="$nw -Wc++-compat"             # We don't care about C++ compilers
70   nw="$nw -Wundef"                  # Warns on '#if GNULIB_FOO' etc in gnulib
71   nw="$nw -Wtraditional"            # Warns on #elif which we use often
72   nw="$nw -Wcast-qual"              # Too many warnings for now
73   nw="$nw -Wconversion"             # Too many warnings for now
74   nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
75   nw="$nw -Wsign-conversion"        # Too many warnings for now
76   nw="$nw -Wtraditional-conversion" # Too many warnings for now
77   nw="$nw -Wunreachable-code"       # Too many warnings for now
78   nw="$nw -Wpadded"                 # Our structs are not padded
79   nw="$nw -Wredundant-decls"        # openat.h declares e.g., mkdirat
80   nw="$nw -Wlogical-op"             # any use of fwrite provokes this
81   nw="$nw -Wvla"                    # two warnings in mount.c
82   # things I might fix soon:
83   nw="$nw -Wmissing-format-attribute" # daemon.h's asprintf_nowarn
84   nw="$nw -Winline"                 # daemon.h's asprintf_nowarn
85   nw="$nw -Wshadow"                 # numerous, plus we're not unanimous
86   # ?? -Wstrict-overflow
87   nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization
88                                     # was not possible, safe to ignore
89   nw="$nw -Wpacked"                 # Allow attribute((packed)) on structs
90
91   gl_MANYWARN_ALL_GCC([ws])
92   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
93   for w in $ws; do
94     gl_WARN_ADD([$w])
95   done
96   gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
97   gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
98   gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
99
100   # In spite of excluding -Wlogical-op above, it is enabled, as of
101   # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
102   gl_WARN_ADD([-Wno-logical-op])
103
104   gl_WARN_ADD([-fdiagnostics-show-option])
105
106   AC_SUBST([WARN_CFLAGS])
107
108   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
109   AC_DEFINE([_FORTIFY_SOURCE], [2],
110     [enable compile-time and run-time bounds-checking, and some warnings])
111   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
112 fi
113
114 AC_C_PROTOTYPES
115 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
116
117 AM_PROG_CC_C_O
118
119 dnl Work out how to specify the linker script to the linker.
120 VERSION_SCRIPT_FLAGS=-Wl,--version-script=
121 `/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
122     VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
123 AC_SUBST(VERSION_SCRIPT_FLAGS)
124
125 dnl Check support for 64 bit file offsets.
126 AC_SYS_LARGEFILE
127
128 dnl Check sizeof long.
129 AC_CHECK_SIZEOF([long])
130
131 dnl Headers.
132 AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h endian.h byteswap.h])
133
134 dnl Check for rpcgen and XDR library.  rpcgen is optional.
135 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
136 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
137 AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
138         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
139         ])
140
141 dnl Check for pod2man and pod2text.
142 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
143 test "x$POD2MAN" = "xno" &&
144      AC_MSG_ERROR([pod2man must be installed])
145 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
146 test "x$POD2TEXT" = "xno" &&
147      AC_MSG_ERROR([pod2text must be installed])
148
149 dnl Check for mkisofs.
150 AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
151         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
152 test "x$MKISOFS" = "xno" && AC_MSG_ERROR([mkisofs must be installed])
153
154 dnl Check for optional xmllint.
155 AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
156 AM_CONDITIONAL([HAVE_XMLLINT],[test "x$XMLLINT" != "xno"])
157
158 dnl Check for QEMU for running binaries on this $host_cpu, fall
159 dnl back to basic 'qemu'.  Allow the user to override it.
160 default_qemu="qemu-kvm qemu-system-$host_cpu qemu"
161 AC_ARG_WITH([qemu],
162         [AS_HELP_STRING([--with-qemu],
163           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
164         [],
165         [with_qemu="$default_qemu"])
166 AC_PATH_PROGS([QEMU],[$with_qemu],[no],
167         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec])
168 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
169 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
170
171 dnl Check that the chosen qemu has vmchannel support or we can
172 dnl fallback to null vmchannel (still using SLIRP).  See the
173 dnl discussion in the README file.
174 if test "x$vmchannel_test" != "xno"; then
175     AC_MSG_CHECKING([for guestfwd support in $QEMU])
176     if $QEMU --help | grep -sq guestfwd; then
177         AC_MSG_RESULT([yes])
178         vmchannel_guestfwd=guestfwd
179     else
180         AC_MSG_RESULT([no])
181         # Note that this test must be conditional on the previous
182         # test failing.  This is because recent qemu will throw
183         # up an SDL window and hang if we try to run this test.
184         AC_MSG_CHECKING([for "-net channel" (old guestfwd) support in $QEMU])
185         vmchannelout=`$QEMU -net channel /dev/zero 2>&1 ||:`
186         echo "vmchannel test command output: $vmchannelout" >&AS_MESSAGE_LOG_FD
187         if echo "$vmchannelout" | grep -sq "vmchannel wrong port number" ; then
188             AC_MSG_RESULT([yes])
189             vmchannel_guestfwd=net_channel
190         else
191             AC_MSG_RESULT([no])
192             vmchannel_guestfwd=no
193         fi
194     fi
195
196     AC_MSG_CHECKING([for "-net user" (user mode network) support in $QEMU])
197     if $QEMU --help | grep -sq -- "-net user"; then
198         AC_MSG_RESULT([yes])
199         vmchannel_net_user=yes
200     else
201         AC_MSG_RESULT([no])
202         vmchannel_net_user=no
203     fi
204
205     if test "x$vmchannel_net_user" = "xno" -a "x$vmchannel_guestfwd" = "xno"; then
206         AC_MSG_FAILURE(
207 [I did not find user mode network or vmchannel support in
208 $QEMU.
209
210 Either user mode networking or vmchannel support is vital for
211 libguestfs to operate.
212
213 Please read the relevant section in the README file for more
214 information about this.
215
216 You can override this test by setting the environment variable
217 vmchannel_test=no  However if you don't have the right support
218 in your qemu, then this just delays the pain.
219
220 If I am using the wrong qemu or you want to compile qemu from source
221 and install it in another location, then you should configure with
222 the --with-qemu option.
223 ])
224     fi
225 fi
226
227 dnl Set drive interface used by the guestfs_add_drive{,_ro} calls
228 dnl ('-drive ...,if=...' option to qemu).
229 dnl
230 dnl If you encounter performance problems with virtio (RHBZ#509383)
231 dnl then try '--with-drive-if=ide'.
232 AC_ARG_WITH([drive-if],
233         [AS_HELP_STRING([--with-drive-if],
234           [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
235         [],
236         [with_drive_if=virtio])
237 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
238
239 dnl Set interface used by the network.  Normally you should
240 dnl leave this at the default (virtio) but you can use the
241 dnl alternative (ne2k_pci) because of bugs in virtio networking
242 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
243 AC_ARG_WITH([net-if],
244         [AS_HELP_STRING([--with-net-if],
245           [set default net driver (virtio|ne2k_pci) @<:@default=virtio@:>@])],
246         [],
247         [with_net_if=virtio])
248 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
249
250 dnl Check for febootstrap etc.
251 AC_CHECK_PROG([FEBOOTSTRAP],
252         [febootstrap],[febootstrap],[no])
253 if test "x$FEBOOTSTRAP" != "xno"; then
254   AC_CHECK_PROG([FEBOOTSTRAP_RUN],
255         [febootstrap-run],[febootstrap-run],[no])
256   test "x$FEBOOTSTRAP_RUN" = "xno" && \
257      AC_MSG_ERROR([febootstrap-run must be installed])
258   AC_CHECK_PROG([FEBOOTSTRAP_INSTALL],
259         [febootstrap-install],[febootstrap-install],[no])
260   test "x$FEBOOTSTRAP_INSTALL" = "xno" && \
261      AC_MSG_ERROR([febootstrap-install must be installed])
262   AC_CHECK_PROG([FEBOOTSTRAP_MINIMIZE],
263         [febootstrap-minimize],[febootstrap-minimize],[no])
264   test "x$FEBOOTSTRAP_MINIMIZE" = "xno" && \
265      AC_MSG_ERROR([febootstrap-minimize must be installed])
266   AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS],
267         [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no])
268   test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
269      AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
270
271   dnl Check we have fakechroot >= 2.9 (it's an indirect requirement
272   dnl of febootstrap, but old versions will fail with yum).
273   AC_CHECK_PROG([FAKECHROOT],
274         [fakechroot],[fakechroot],[no])
275   test "x$FAKECHROOT" = "xno" && \
276     AC_MSG_ERROR([fakechroot must be installed])
277
278   AC_MSG_CHECKING([fakechroot version])
279   fakechroot_version=`$FAKECHROOT --version | awk '{print $3}'`
280   if test -z "$fakechroot_version"; then
281     AC_MSG_RESULT([failed])
282     AC_MSG_WARN([fakechroot --version command failed, proceeding anyway])
283   else
284     AC_MSG_RESULT([$fakechroot_version])
285     fakechroot_major=`echo "$fakechroot_version" | awk -F. '{print $1}'`
286     fakechroot_minor=`echo "$fakechroot_version" | awk -F. '{print $2}'`
287     if test "$fakechroot_major" -lt 2 -o \
288             \( "$fakechroot_major" -eq 2 -a "$fakechroot_minor" -lt 9 \); then
289         AC_MSG_ERROR([fakechroot version must be >= 2.9])
290     fi
291   fi
292   DIST="REDHAT"
293 else
294   # check for debootstrap and debirf
295   AC_CHECK_PROG([DEBOOTSTRAP],
296         [debootstrap],[debootstrap],[no])
297   test "x$DEBOOTSTRAP" = "xno" && \
298         AC_MSG_ERROR([Either febootstrap or debootstrap must be installed])
299   AC_CHECK_PROG([DEBIRF],[debirf],[debirf],[no])
300   test "x$DEBIRF" = "xno" &&
301         AC_MSG_ERROR([debirf must be installed])
302   DIST="DEBIAN"
303   case "$host_cpu" in
304       *86)
305           DEBIAN_KERNEL_ARCH=486
306           ;;
307       x86_64)
308           DEBIAN_KERNEL_ARCH=amd64
309           ;;
310       *)
311          DEBIAN_KERNEL_ARCH=$host_cpu
312          ;;
313    esac
314    AC_SUBST(DEBIAN_KERNEL_ARCH)
315 fi
316 AC_SUBST(DIST)
317
318
319 dnl --with-repo to specify a Fedora repository.
320 AC_ARG_WITH([repo],
321         [AS_HELP_STRING([--with-repo],
322           [set name of Fedora repository @<:@default=fedora-11@:>@])],
323         [],
324         [with_repo=fedora-11])
325 REPO="$with_repo"
326 AC_SUBST(REPO)
327 AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
328
329 dnl --with-updates to specify a Fedora updates repository.
330 AC_ARG_WITH([updates],
331         [AS_HELP_STRING([--with-updates],
332           [set name of Fedora updates repository @<:@default=updates-released-f11@:>@])],
333         [],
334         [with_updates=updates-released-f11])
335 UPDATES="$with_updates"
336 AC_SUBST(UPDATES)
337
338 dnl Define a symbol for the host CPU architecture.
339 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
340
341 dnl --with-mirror to specify a local Fedora mirror.
342 AC_ARG_WITH([mirror],
343         [AS_HELP_STRING([--with-mirror],
344           [set URI of a local Fedora mirror])],
345         [],
346         [with_mirror=])
347 MIRROR="$with_mirror"
348 AC_SUBST(MIRROR)
349
350 dnl Build the supermin appliance?  Please see README file before
351 dnl enabling this option.
352 AC_ARG_ENABLE([supermin],
353         [AS_HELP_STRING([--enable-supermin],
354           [enable supermin appliance (see README) @<:@default=no@:>@])],
355         [],
356         [enable_supermin=no])
357 AM_CONDITIONAL([SUPERMIN],[test "x$enable_supermin" = "xyes"])
358
359 if test "x$enable_supermin" = "xyes"; then
360     dnl Check febootstrap-to-initramfs accepts the --files option
361     dnl (febootstrap >= 2.2).
362     AC_MSG_CHECKING([for --files support in $FEBOOTSTRAP_TO_INITRAMFS])
363     out=`$FEBOOTSTRAP_TO_INITRAMFS 2>&1 ||:`
364     echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD
365     if ! echo "$out" | grep -sq -e --files ; then
366         AC_MSG_RESULT([no])
367         AC_MSG_FAILURE(
368 [febootstrap-to-initramfs does not support the --files option.
369
370 To build the supermin appliance, you need to upgrade to the latest
371 version of febootstrap.
372 ])
373     fi
374     AC_MSG_RESULT([yes])
375
376     dnl Check febootstrap-to-initramfs accepts the --nocompress option
377     dnl (febootstrap >= 2.3).
378     AC_MSG_CHECKING([for --nocompress support in $FEBOOTSTRAP_TO_INITRAMFS])
379     out=`$FEBOOTSTRAP_TO_INITRAMFS 2>&1 ||:`
380     echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD
381     if ! echo "$out" | grep -sq -e --nocompress ; then
382         AC_MSG_RESULT([no])
383         AC_MSG_FAILURE(
384 [febootstrap-to-initramfs does not support the --nocompress option.
385
386 To build the supermin appliance, you need to upgrade to the latest
387 version of febootstrap.
388 ])
389     fi
390     AC_MSG_RESULT([yes])
391 fi
392
393 dnl Enable packet dumps when in verbose mode.  This generates lots
394 dnl of debug info, only useful for people debugging the RPC mechanism.
395 AC_ARG_ENABLE([packet-dump],
396         [AS_HELP_STRING([--enable-packet-dump],
397           [enable packet dumps in verbose mode @<:@default=no@:>@])],
398         [AC_DEFINE([ENABLE_PACKET_DUMP],[1],[Enable packet dumps in verbose mode.])],
399         [])
400
401 dnl Readline.
402 AC_ARG_WITH([readline],
403     [AS_HELP_STRING([--with-readline],
404         [support fancy command line editing @<:@default=check@:>@])],
405     [],
406     [with_readline=check])
407
408 LIBREADLINE=
409 AS_IF([test "x$with_readline" != xno],
410     [AC_CHECK_LIB([readline], [main],
411         [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
412          AC_DEFINE([HAVE_LIBREADLINE], [1],
413                    [Define if you have libreadline])
414         ],
415         [if test "x$with_readline" != xcheck; then
416          AC_MSG_FAILURE(
417              [--with-readline was given, but test for readline failed])
418          fi
419         ], -lncurses)])
420
421 dnl For i18n.
422 AM_GNU_GETTEXT([external])
423 AM_GNU_GETTEXT_VERSION([0.17])
424
425 dnl hivex library (highly recommended).
426 dnl This used to be a part of libguestfs, but was spun off into its
427 dnl own separate upstream project in libguestfs 1.0.85.
428 HAVE_HIVEX=yes
429 PKG_CHECK_MODULES([HIVEX], [hivex],,[
430         HAVE_HIVEX=no
431         AC_MSG_WARN([Hivex library and headers are missing, so optional Windows Registry tools won't be built])])
432 AM_CONDITIONAL([HAVE_HIVEX],[test "x$HAVE_HIVEX" = "xyes"])
433 AC_SUBST([HIVEX_CFLAGS])
434 AC_SUBST([HIVEX_LIBS])
435
436 dnl FUSE is optional to build the FUSE module.
437 HAVE_FUSE=yes
438 PKG_CHECK_MODULES([FUSE],[fuse],,[
439         HAVE_FUSE=no
440         AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])
441 AM_CONDITIONAL([HAVE_FUSE],[test "x$HAVE_FUSE" = "xyes"])
442
443 dnl Check for OCaml (optional, for OCaml bindings).
444 AC_PROG_OCAML
445 AC_PROG_FINDLIB
446 AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
447
448 dnl Optional xml-light for running the generator.
449 OCAML_PKG_xml_light=no
450 if test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"; then
451     AC_CHECK_OCAML_PKG([xml-light])
452 fi
453 AM_CONDITIONAL([HAVE_XML_LIGHT],[test "x$OCAML_PKG_xml_light" != "xno"])
454
455 dnl Build the OCaml viewer example.  This has a lengthy list of
456 dnl dependencies and we don't attempt to detect them all.  Read
457 dnl the top of ocaml/examples/viewer.ml before enabling this.
458 AC_ARG_ENABLE([ocaml-viewer],
459         [AS_HELP_STRING([--enable-ocaml-viewer],
460           [enable OCaml viewer (see ocaml/examples) @<:@default=no@:>@])],
461         [],
462         [enable_ocaml_viewer=no])
463 AM_CONDITIONAL([BUILD_OCAML_VIEWER],[test "x$enable_ocaml_viewer" = "xyes"])
464
465 dnl Check for Perl (optional, for Perl bindings).
466 dnl XXX This isn't quite right, we should check for Perl devel library.
467 AC_CHECK_PROG([PERL],[perl],[perl],[no])
468
469 dnl Check for Perl modules that must be present to compile and
470 dnl test the Perl bindings.
471 missing_perl_modules=no
472 for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker; do
473     AC_MSG_CHECKING([for $pm])
474     if ! perl -M$pm -e1 >/dev/null 2>&1; then
475         AC_MSG_RESULT([no])
476         missing_perl_modules=yes
477     else
478         AC_MSG_RESULT([yes])
479     fi
480 done
481 if test "x$missing_perl_modules" = "xyes"; then
482     AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
483 fi
484
485 AM_CONDITIONAL([HAVE_PERL],
486     [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
487
488 dnl Check for Python (optional, for Python bindings).
489 AC_CHECK_PROG([PYTHON],[python],[python],[no])
490
491 PYTHON_PREFIX=
492 PYTHON_VERSION=
493 PYTHON_INCLUDEDIR=
494 PYTHON_SITE_PACKAGES=
495
496 if test "x$PYTHON" != "xno"; then
497     PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
498     PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
499     for d in \
500         $PYTHON_PREFIX/include/python$PYTHON_VERSION \
501         /usr/include/python$PYTHON_VERSION \
502         /usr/local/include/python$PYTHON_VERSION
503     do
504         AC_MSG_CHECKING([Python.h in $d])
505         if test -r "$d/Python.h"; then
506             AC_MSG_RESULT([found])
507             PYTHON_INCLUDEDIR=$d
508             break
509         fi
510         AC_MSG_RESULT([not found])
511     done
512     for d in \
513         $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
514         $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
515         /usr/lib64/python$PYTHON_VERSION/site-packages \
516         /usr/lib/python$PYTHON_VERSION/site-packages \
517         /usr/local/lib/python$PYTHON_VERSION/site-packages
518     do
519         AC_MSG_CHECKING([for $d])
520         if test -d "$d"; then
521             AC_MSG_RESULT([found])
522             PYTHON_SITE_PACKAGES=$d
523             break
524         fi
525         AC_MSG_RESULT([not found])
526     done
527 fi
528
529 AC_SUBST(PYTHON_PREFIX)
530 AC_SUBST(PYTHON_VERSION)
531 AC_SUBST(PYTHON_INCLUDEDIR)
532 AC_SUBST(PYTHON_SITE_PACKAGES)
533
534 AM_CONDITIONAL([HAVE_PYTHON],
535     [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
536
537 dnl Check for Ruby and rake (optional, for Ruby bindings).
538 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
539 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
540
541 AM_CONDITIONAL([HAVE_RUBY],
542     [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
543
544 dnl Check for Java.
545 AC_ARG_WITH(java_home,
546     [AS_HELP_STRING([--with-java-home],
547         [specify path to JDK directory @<:@default=check@:>@])],
548     [],
549     [with_java_home=check])
550
551 if test "x$with_java_home" != "xno"; then
552     if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
553     then
554         # Reject unsafe characters in $JAVA_HOME
555         jh_lf='
556 '
557         case $JAVA_HOME in
558           *[\\\"\#\$\&\'\`$jh_lf\ \     ]*)
559             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
560         esac
561         if test -d "$with_java_home"; then
562             JAVA_HOME="$with_java_home"
563         else
564             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
565         fi
566     fi
567
568     if test "x$JAVA_HOME" = "x"; then
569         # Look for Java in some likely locations.
570         for d in \
571             /usr/lib/jvm/java \
572             /usr/lib/jvm/java-6-openjdk
573         do
574             if test -d $d -a -f $d/bin/java; then
575                 JAVA_HOME=$d
576                 break
577             fi
578         done
579     fi
580
581     if test "x$JAVA_HOME" != "x"; then
582         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
583         if test ! -x "$JAVA_HOME/bin/java"; then
584             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
585         else
586             JAVA="$JAVA_HOME/bin/java"
587         fi
588         if test ! -x "$JAVA_HOME/bin/javac"; then
589             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
590         else
591             JAVAC="$JAVA_HOME/bin/javac"
592         fi
593         if test ! -x "$JAVA_HOME/bin/javah"; then
594             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
595         else
596             JAVAH="$JAVA_HOME/bin/javah"
597         fi
598         if test ! -x "$JAVA_HOME/bin/javadoc"; then
599             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
600         else
601             JAVADOC="$JAVA_HOME/bin/javadoc"
602         fi
603         if test ! -x "$JAVA_HOME/bin/jar"; then
604             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
605         else
606             JAR="$JAVA_HOME/bin/jar"
607         fi
608         java_version=`$JAVA -version 2>&1 | grep "java version"`
609         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
610
611         dnl Find jni.h.
612         AC_MSG_CHECKING([for jni.h])
613         if test -f "$JAVA_HOME/include/jni.h"; then
614             JNI_CFLAGS="-I$JAVA_HOME/include"
615         else
616             if test "`find $JAVA_HOME -name jni.h`" != ""; then
617                 head=`find $JAVA_HOME -name jni.h | tail -1`
618                 dir=`dirname "$head"`
619                 JNI_CFLAGS="-I$dir"
620             else
621                 AC_MSG_FAILURE([missing jni.h header file])
622             fi
623         fi
624         AC_MSG_RESULT([$JNI_CFLAGS])
625
626         dnl Find jni_md.h.
627         AC_MSG_CHECKING([for jni_md.h])
628         case "$build_os" in
629         *linux*) system="linux" ;;
630         *SunOS*) system="solaris" ;;
631         *cygwin*) system="win32" ;;
632         *) system="$build_os" ;;
633         esac
634         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
635             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
636         else
637             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
638                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
639                 dir=`dirname "$head"`
640                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
641             else
642                 AC_MSG_FAILURE([missing jni_md.h header file])
643             fi
644         fi
645         AC_MSG_RESULT([$JNI_CFLAGS])
646
647         dnl Need extra version flag?
648         AC_MSG_CHECKING([extra javac flags])
649         JAVAC_FLAGS=
650         javac_version=`$JAVAC -version 2>&1`
651         case "$javac_version" in
652         *Eclipse*)
653             JAVAC_FLAGS="-source 1.5" ;;
654         esac
655         AC_MSG_RESULT([$JAVAC_FLAGS])
656
657         dnl Where to install jarfiles.
658         dnl XXX How to make it configurable?
659         JAR_INSTALL_DIR=\${prefix}/share/java
660         JNI_INSTALL_DIR=\${libdir}
661
662         dnl JNI version.
663         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
664         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
665         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
666         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
667     fi
668 fi
669
670 AC_SUBST(JAVA_HOME)
671 AC_SUBST(JAVA)
672 AC_SUBST(JAVAC)
673 AC_SUBST(JAVAH)
674 AC_SUBST(JAVADOC)
675 AC_SUBST(JAR)
676 AC_SUBST(JNI_CFLAGS)
677 AC_SUBST(JAVAC_FLAGS)
678 AC_SUBST(JAR_INSTALL_DIR)
679 AC_SUBST(JNI_INSTALL_DIR)
680 AC_SUBST(JNI_VERSION_INFO)
681
682 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
683
684 dnl Check for Haskell (GHC).
685 AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
686
687 AM_CONDITIONAL([HAVE_HASKELL],
688     [test "x$GHC" != "xno"])
689
690 dnl Check for Perl modules needed by virt-df, inspector, etc.
691 missing_perl_modules=no
692 for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer Locale::TextDomain; do
693     AC_MSG_CHECKING([for $pm])
694     if ! perl -M$pm -e1 >/dev/null 2>&1; then
695         AC_MSG_RESULT([no])
696         missing_perl_modules=yes
697     else
698         AC_MSG_RESULT([yes])
699     fi
700 done
701 if test "x$missing_perl_modules" = "xyes"; then
702     AC_MSG_WARN([some Perl modules required to compile virt-inspector and the other virt-* tools are missing])
703 fi
704
705 AM_CONDITIONAL([HAVE_INSPECTOR],
706     [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
707 AM_CONDITIONAL([HAVE_TOOLS],
708     [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
709
710 dnl Library versioning.
711 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
712 AC_SUBST(MAX_PROC_NR)
713
714 dnl Run in subdirs.
715 AC_CONFIG_SUBDIRS([daemon])
716
717 dnl Produce output files.
718 AC_CONFIG_HEADERS([config.h])
719 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
720 AC_CONFIG_FILES([appliance/update.sh],
721                 [chmod +x appliance/update.sh])
722 AC_CONFIG_FILES([appliance/supermin-split.sh],
723                 [chmod +x appliance/supermin-split.sh])
724 AC_CONFIG_FILES([appliance/supermin-make.sh],
725                 [chmod +x appliance/supermin-make.sh])
726 AC_CONFIG_FILES([Makefile
727                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
728                  appliance/Makefile
729                  appliance/debian/debirf.conf
730                  images/Makefile
731                  capitests/Makefile
732                  regressions/Makefile
733                  test-tool/Makefile
734                  ocaml/Makefile ocaml/examples/Makefile
735                  perl/Makefile
736                  python/Makefile
737                  ruby/Makefile ruby/Rakefile
738                  java/Makefile
739                  haskell/Makefile
740                  inspector/Makefile
741                  tools/Makefile
742                  libguestfs.pc
743                  gnulib/lib/Makefile
744                  gnulib/tests/Makefile
745                  fuse/Makefile
746                  ocaml/META perl/Makefile.PL])
747 AC_OUTPUT
748
749 dnl Produce summary.
750 echo
751 echo
752 echo "------------------------------------------------------------"
753 echo "Thank you for downloading $PACKAGE_STRING"
754 echo
755 echo "This is how we have configured the optional components for you today:"
756 echo
757 echo    "QEMU ................................ $QEMU"
758 echo -n "OCaml bindings ...................... "
759 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
760 echo -n "Perl bindings ....................... "
761 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
762 echo -n "Python bindings ..................... "
763 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
764 echo -n "Ruby bindings ....................... "
765 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
766 echo -n "Java bindings ....................... "
767 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
768 echo -n "Haskell bindings .................... "
769 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
770 echo -n "virt-inspector ...................... "
771 if test "x$HAVE_INSPECTOR_TRUE" = "x"; then echo "yes"; else echo "no"; fi
772 echo -n "virt-* tools ........................ "
773 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
774 echo "supermin appliance .................. $enable_supermin"
775 echo "FUSE filesystem ..................... $HAVE_FUSE"
776 echo
777 echo "If any optional component is configured 'no' when you expected 'yes'"
778 echo "then you should check the preceeding messages."
779 echo
780 echo "Please report bugs back to the mailing list:"
781 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
782 echo
783 echo "Next you should type 'make' to build the package,"
784 echo "then 'make check' to run the tests."
785 echo "------------------------------------------------------------"