inspect: Check /etc/lsb-release is not too large before calling head on it.
[libguestfs.git] / configure.ac
1 # libguestfs
2 # Copyright (C) 2009-2010 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],   [6])
21 m4_define([libguestfs_release], [1])
22 # extra can be any string
23 m4_define([libguestfs_extra],   [])
24
25 AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release)
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 dnl Stable or unstable version?
41 AC_MSG_CHECKING([if this is a stable or unstable branch of libguestfs])
42 AS_IF([test "$((libguestfs_minor % 2))" -eq 0 ],[
43             AC_MSG_RESULT([stable])
44        ],[
45             AC_MSG_RESULT([unstable])
46             AC_MSG_NOTICE([
47 ***
48 This is a development version of libguestfs. Some APIs may be unstable
49 until they appear in a stable release of libguestfs (at which point
50 the C API and ABI is guaranteed to remain stable forever).  For
51 more information about stable and development branches of libguestfs
52 please see the section "LIBGUESTFS VERSION NUMBERS" in guestfs(3).
53 ***])
54        ])
55
56 dnl Die if the user tries to configure as root, see:
57 dnl https://www.redhat.com/archives/libguestfs/2010-April/msg00098.html
58 AC_MSG_CHECKING([if you are trying to configure as root])
59 AS_IF([test "`id -u`" = 0 ],[
60             AC_MSG_RESULT([yes])
61             AC_MSG_FAILURE([Don't run './configure' or 'make' as root.])
62       ],[
63             AC_MSG_RESULT([no])
64       ])
65
66 dnl Early gnulib initialization.
67 gl_EARLY
68 gl_INIT
69
70 AC_PROG_LIBTOOL
71
72 dnl Check for basic C environment.
73 AC_PROG_CC_STDC
74 AC_PROG_INSTALL
75 AC_PROG_CPP
76
77 AC_ARG_ENABLE([gcc-warnings],
78   [AS_HELP_STRING([--enable-gcc-warnings],
79                   [turn on lots of GCC warnings (for developers)])],
80   [case $enableval in
81      yes|no) ;;
82      *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
83    esac
84    gl_gcc_warnings=$enableval],
85   [gl_gcc_warnings=no]
86 )
87
88 if test "$gl_gcc_warnings" = yes; then
89   gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
90   AC_SUBST([WERROR_CFLAGS])
91
92   nw=
93   # This, $nw, is the list of warnings we disable.
94   nw="$nw -Wdeclaration-after-statement" # too useful to forbid
95   nw="$nw -Waggregate-return"       # anachronistic
96   nw="$nw -Wc++-compat"             # We don't care about C++ compilers
97   nw="$nw -Wundef"                  # Warns on '#if GNULIB_FOO' etc in gnulib
98   nw="$nw -Wtraditional"            # Warns on #elif which we use often
99   nw="$nw -Wcast-qual"              # Too many warnings for now
100   nw="$nw -Wconversion"             # Too many warnings for now
101   nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
102   nw="$nw -Wsign-conversion"        # Too many warnings for now
103   nw="$nw -Wtraditional-conversion" # Too many warnings for now
104   nw="$nw -Wunreachable-code"       # Too many warnings for now
105   nw="$nw -Wpadded"                 # Our structs are not padded
106   nw="$nw -Wredundant-decls"        # openat.h declares e.g., mkdirat
107   nw="$nw -Wlogical-op"             # any use of fwrite provokes this
108   nw="$nw -Wvla"                    # two warnings in mount.c
109   # things I might fix soon:
110   nw="$nw -Wmissing-format-attribute" # daemon.h's asprintf_nowarn
111   nw="$nw -Winline"                 # daemon.h's asprintf_nowarn
112   nw="$nw -Wshadow"                 # numerous, plus we're not unanimous
113   nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization
114                                     # was not possible, safe to ignore
115   nw="$nw -Wpacked"                 # Allow attribute((packed)) on structs
116   nw="$nw -Wlong-long"              # Allow long long since it's required
117                                     # by Python, Ruby and xstrtoll.
118
119   gl_MANYWARN_ALL_GCC([ws])
120   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
121   for w in $ws; do
122     gl_WARN_ADD([$w])
123   done
124   gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
125   gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
126   gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
127
128   # In spite of excluding -Wlogical-op above, it is enabled, as of
129   # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
130   gl_WARN_ADD([-Wno-logical-op])
131
132   # Work around warning in src/inspect.c.  This seems to be a bug in gcc 4.5.1.
133   gl_WARN_ADD([-Wno-strict-overflow])
134
135   gl_WARN_ADD([-fdiagnostics-show-option])
136
137   AC_SUBST([WARN_CFLAGS])
138
139   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
140   AC_DEFINE([_FORTIFY_SOURCE], [2],
141     [enable compile-time and run-time bounds-checking, and some warnings])
142   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
143 fi
144
145 AC_C_PROTOTYPES
146 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
147
148 AM_PROG_CC_C_O
149
150 dnl Work out how to specify the linker script to the linker.
151 VERSION_SCRIPT_FLAGS=-Wl,--version-script=
152 `/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
153     VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
154 AC_SUBST(VERSION_SCRIPT_FLAGS)
155
156 dnl Check support for 64 bit file offsets.
157 AC_SYS_LARGEFILE
158
159 dnl Check sizeof long.
160 AC_CHECK_SIZEOF([long])
161
162 dnl Define a C symbol for the host CPU architecture.
163 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
164
165 dnl Headers.
166 AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h endian.h byteswap.h])
167
168 dnl Functions.
169 AC_CHECK_FUNCS([posix_fallocate])
170
171 dnl Build the daemon?
172 AC_MSG_CHECKING([if we should build the daemon])
173 AC_ARG_ENABLE([daemon],
174         [AS_HELP_STRING([--enable-daemon],
175           [enable building the daemon @<:@default=yes@:>@])],
176         [],
177         [enable_daemon=yes])
178 AM_CONDITIONAL([ENABLE_DAEMON],[test "x$enable_daemon" = "xyes"])
179 AC_MSG_RESULT([$enable_daemon])
180
181 dnl Build the appliance?
182 AC_MSG_CHECKING([if we should build the appliance])
183 AC_ARG_ENABLE([appliance],
184         [AS_HELP_STRING([--enable-appliance],
185           [enable building the appliance @<:@default=yes@:>@])],
186         [],
187         [enable_appliance=yes])
188 AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
189 AC_MSG_RESULT([$enable_appliance])
190
191 dnl Check for rpcgen and XDR library.  rpcgen is optional.
192 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
193 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
194 AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
195         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
196         ])
197
198 dnl Check for cpio which isn't in the default Pardus install amazingly.
199 AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
200 test "x$CPIO" = "xno" &&
201      AC_MSG_ERROR([cpio must be installed])
202
203 dnl Check for gperf.
204 AC_CHECK_PROG([GPERF],[gperf],[gperf],[no])
205 test "x$GPERF" = "xno" &&
206      AC_MSG_ERROR([gperf must be installed])
207
208 dnl Check for pod2man and pod2text.
209 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
210 test "x$POD2MAN" = "xno" &&
211      AC_MSG_ERROR([pod2man must be installed])
212 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
213 test "x$POD2TEXT" = "xno" &&
214      AC_MSG_ERROR([pod2text must be installed])
215
216 dnl Check for mkisofs.
217 AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
218         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
219 test "x$MKISOFS" = "xno" && AC_MSG_ERROR([mkisofs must be installed])
220
221 dnl Check for optional xmllint.
222 AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
223 AM_CONDITIONAL([HAVE_XMLLINT],[test "x$XMLLINT" != "xno"])
224
225 dnl Check for QEMU for running binaries on this $host_cpu, fall
226 dnl back to basic 'qemu'.  Allow the user to override it.
227 default_qemu="qemu-kvm kvm qemu-system-$host_cpu qemu"
228 AC_ARG_WITH([qemu],
229         [AS_HELP_STRING([--with-qemu],
230           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
231         [],
232         [with_qemu="$default_qemu"])
233 AC_PATH_PROGS([QEMU],[$with_qemu],[no],
234         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec])
235 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
236 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
237
238 dnl Check that the chosen qemu has virtio-serial support.
239 if test "x$vmchannel_test" != "xno"; then
240     AC_MSG_CHECKING([for virtio-serial support in $QEMU])
241     if $QEMU -nographic -device \? 2>&1 | grep -sq virtio-serial; then
242         AC_MSG_RESULT([yes])
243         vmchannel_guestfwd=guestfwd
244     else
245         AC_MSG_RESULT([no])
246         AC_MSG_FAILURE(
247 [I did not find virtio-serial support in
248 $QEMU.
249
250 virtio-serial support in qemu or KVM is essential for libguestfs
251 to operate.
252
253 Usually this means that you have to install a newer version of qemu
254 and/or KVM.  Please read the relevant section in the README file for
255 more information about this.
256
257 You can override this test by setting the environment variable
258 vmchannel_test=no  However if you don't have the right support
259 in your qemu, then this just delays the pain.
260
261 If I am using the wrong qemu or you want to compile qemu from source
262 and install it in another location, then you should configure with
263 the --with-qemu option.
264 ])
265     fi
266 fi
267
268 dnl Set default drive interface used by the guestfs_add_drive_opts call
269 dnl ('-drive ...,if=...' option to qemu).
270 dnl
271 dnl If you encounter performance problems with virtio (RHBZ#509383)
272 dnl then try '--with-drive-if=ide'.
273 AC_ARG_WITH([drive-if],
274         [AS_HELP_STRING([--with-drive-if],
275           [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
276         [],
277         [with_drive_if=virtio])
278 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
279
280 dnl Set interface used by the network.  Normally you should
281 dnl leave this at the default (virtio-net-pci) but you can use the
282 dnl alternative (ne2k_pci) because of bugs in virtio networking
283 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
284 AC_ARG_WITH([net-if],
285         [AS_HELP_STRING([--with-net-if],
286           [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
287         [],
288         [with_net_if=virtio-net-pci])
289 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
290
291 dnl Check for febootstrap etc.
292 if test "x$enable_appliance" = "xyes"; then
293     AC_CHECK_PROG([FEBOOTSTRAP],
294                   [febootstrap],[febootstrap],[no])
295     if test "x$FEBOOTSTRAP" != "xno"; then
296       AC_CHECK_PROG([FEBOOTSTRAP_RUN],
297                     [febootstrap-run],[febootstrap-run],[no])
298       test "x$FEBOOTSTRAP_RUN" = "xno" && \
299           AC_MSG_ERROR([febootstrap-run must be installed])
300       AC_CHECK_PROG([FEBOOTSTRAP_INSTALL],
301                     [febootstrap-install],[febootstrap-install],[no])
302       test "x$FEBOOTSTRAP_INSTALL" = "xno" && \
303           AC_MSG_ERROR([febootstrap-install must be installed])
304       AC_CHECK_PROG([FEBOOTSTRAP_MINIMIZE],
305                     [febootstrap-minimize],[febootstrap-minimize],[no])
306       test "x$FEBOOTSTRAP_MINIMIZE" = "xno" && \
307           AC_MSG_ERROR([febootstrap-minimize must be installed])
308       AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS],
309                     [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no])
310       test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
311           AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
312       AC_CHECK_PROG([FEBOOTSTRAP_TO_SUPERMIN],
313                     [febootstrap-to-supermin],[febootstrap-to-supermin],[no])
314       test "x$FEBOOTSTRAP_TO_SUPERMIN" = "xno" && \
315           AC_MSG_ERROR([febootstrap-to-supermin must be installed])
316
317       dnl Check we have fakechroot >= 2.9 (it's an indirect requirement
318       dnl of febootstrap, but old versions will fail with yum).
319       AC_CHECK_PROG([FAKECHROOT],
320                     [fakechroot],[fakechroot],[no])
321       test "x$FAKECHROOT" = "xno" && \
322          AC_MSG_ERROR([fakechroot must be installed])
323
324       AC_MSG_CHECKING([fakechroot version])
325       fakechroot_version=`$FAKECHROOT --version | awk '{print $3}'`
326       if test -z "$fakechroot_version"; then
327         AC_MSG_RESULT([failed])
328         AC_MSG_WARN([fakechroot --version command failed, proceeding anyway])
329       else
330         AC_MSG_RESULT([$fakechroot_version])
331         fakechroot_major=`echo "$fakechroot_version" | awk -F. '{print $1}'`
332         fakechroot_minor=`echo "$fakechroot_version" | awk -F. '{print $2}'`
333         if test "$fakechroot_major" -lt 2 || \
334           ( test "$fakechroot_major" -eq 2 && test "$fakechroot_minor" -lt 9 ); then
335           AC_MSG_ERROR([fakechroot version must be >= 2.9])
336         fi
337       fi
338       DIST="REDHAT"
339     else
340       # check for debootstrap and debirf
341       AC_CHECK_PROG([DEBOOTSTRAP],
342                     [debootstrap],[debootstrap],[no])
343       test "x$DEBOOTSTRAP" = "xno" && \
344           AC_MSG_ERROR([Either febootstrap or debootstrap must be installed])
345       AC_CHECK_PROG([DEBIRF],[debirf],[debirf],[no])
346       test "x$DEBIRF" = "xno" &&
347           AC_MSG_ERROR([debirf must be installed])
348       DIST="DEBIAN"
349       case "$host_cpu" in
350       *86)
351           DEBIAN_KERNEL_ARCH=486
352           ;;
353       x86_64)
354           DEBIAN_KERNEL_ARCH=amd64
355           ;;
356       *)
357          DEBIAN_KERNEL_ARCH=$host_cpu
358          ;;
359       esac
360       AC_SUBST(DEBIAN_KERNEL_ARCH)
361     fi
362     AC_SUBST(DIST)
363
364     dnl --with-updates to specify a Fedora updates repository.
365     AC_ARG_WITH([updates],
366         [AS_HELP_STRING([--with-updates],
367           [set name of Fedora updates repository @<:@default=updates-released-f12@:>@])],
368         [],
369         [with_updates=updates-released-f12])
370     UPDATES="$with_updates"
371     AC_SUBST(UPDATES)
372
373     dnl --with-mirror to specify a local Fedora mirror.
374     AC_ARG_WITH([mirror],
375         [AS_HELP_STRING([--with-mirror],
376           [set URI of a local Fedora mirror])],
377         [],
378         [with_mirror=])
379     MIRROR="$with_mirror"
380     AC_SUBST(MIRROR)
381 fi
382
383 dnl --with-repo to specify a repository.
384 AC_ARG_WITH([repo],
385         [AS_HELP_STRING([--with-repo],
386           [set name of Fedora repository @<:@default=fedora-13@:>@])],
387         [],
388         [with_repo=fedora-13])
389 REPO="$with_repo"
390 AC_SUBST(REPO)
391 AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of software repository.])
392
393 dnl Build the supermin appliance?  Please see README file before
394 dnl enabling this option.
395 AC_ARG_ENABLE([supermin],
396         [AS_HELP_STRING([--enable-supermin],
397           [enable supermin appliance (see README) @<:@default=no@:>@])],
398         [AC_DEFINE([ENABLE_SUPERMIN],[1],[Supermin appliance enabled.])],
399         [enable_supermin=no])
400 AM_CONDITIONAL([SUPERMIN],[test "x$enable_supermin" = "xyes"])
401
402 dnl Enable packet dumps when in verbose mode.  This generates lots
403 dnl of debug info, only useful for people debugging the RPC mechanism.
404 AC_ARG_ENABLE([packet-dump],
405         [AS_HELP_STRING([--enable-packet-dump],
406           [enable packet dumps in verbose mode @<:@default=no@:>@])],
407         [AC_DEFINE([ENABLE_PACKET_DUMP],[1],[Enable packet dumps in verbose mode.])],
408         [])
409
410 dnl Readline.
411 AC_ARG_WITH([readline],
412     [AS_HELP_STRING([--with-readline],
413         [support fancy command line editing @<:@default=check@:>@])],
414     [],
415     [with_readline=check])
416
417 LIBREADLINE=
418 AS_IF([test "x$with_readline" != xno],
419     [AC_CHECK_LIB([readline], [main],
420         [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
421          AC_DEFINE([HAVE_LIBREADLINE], [1],
422                    [Define if you have libreadline])
423         ],
424         [if test "x$with_readline" != xcheck; then
425          AC_MSG_FAILURE(
426              [--with-readline was given, but test for readline failed])
427          fi
428         ], -lncurses)
429      old_LIBS="$LIBS"
430      LIBS="$LIBS $LIBREADLINE"
431      AC_CHECK_FUNCS([append_history completion_matches rl_completion_matches])
432      LIBS="$old_LIBS"
433     ])
434
435 dnl For i18n.
436 AM_GNU_GETTEXT([external])
437 AM_GNU_GETTEXT_VERSION([0.17])
438
439 dnl libmagic (highly recommended)
440 AC_CHECK_LIB([magic],[magic_file],
441         [AC_CHECK_HEADER([magic.h],
442                 [AC_SUBST([MAGIC_LIBS], ["-lmagic"])
443                  AC_DEFINE([HAVE_LIBMAGIC],[1],[libmagic found at compile time.])
444                 ], [])
445         ],
446         [AC_MSG_WARN([libmagic not found, some core features will be disabled])])
447
448 dnl libvirt (required)
449 PKG_CHECK_MODULES([LIBVIRT], [libvirt])
450 AC_SUBST([LIBVIRT_CFLAGS])
451 AC_SUBST([LIBVIRT_LIBS])
452
453 dnl Check for PCRE (highly recommended)
454 PKG_CHECK_MODULES([PCRE], [libpcre],
455         [AC_SUBST([PCRE_CFLAGS])
456          AC_SUBST([PCRE_LIBS])
457          AC_DEFINE([HAVE_PCRE],[1],[PCRE found at compile time.])
458         ],
459         [AC_MSG_WARN([PCRE not found, some core features will be disabled])])
460
461 dnl libxml2 (required)
462 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
463 AC_SUBST([LIBXML2_CFLAGS])
464 AC_SUBST([LIBXML2_LIBS])
465
466
467 dnl hivex library (highly recommended)
468 dnl This used to be a part of libguestfs, but was spun off into its
469 dnl own separate upstream project in libguestfs 1.0.85.
470 PKG_CHECK_MODULES([HIVEX], [hivex],
471         [AC_SUBST([HIVEX_CFLAGS])
472          AC_SUBST([HIVEX_LIBS])
473          AC_DEFINE([HAVE_HIVEX],[1],[hivex library found at compile time.])
474         ],
475         [AC_MSG_WARN([hivex not found, some core features will be disabled])])
476
477 dnl FUSE is optional to build the FUSE module.
478 AC_ARG_ENABLE([fuse],
479         AS_HELP_STRING([--disable-fuse], [Disable FUSE (guestmount) support]),
480         [],
481         [enable_fuse=yes])
482 AS_IF([test "x$enable_fuse" != "xno"],
483         [PKG_CHECK_MODULES([FUSE],[fuse],,[
484                 enable_fuse=no
485                 AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])])
486 AM_CONDITIONAL([HAVE_FUSE],[test "x$enable_fuse" != "xno"])
487
488 dnl Check for OCaml (optional, for OCaml bindings).
489 OCAMLC=no
490 OCAMLFIND=no
491 AC_ARG_ENABLE([ocaml],
492         AS_HELP_STRING([--disable-ocaml], [Disable OCaml language bindings]),
493         [],
494         [enable_ocaml=yes])
495 AS_IF([test "x$enable_ocaml" != "xno"],
496         [dnl OCAMLC and OCAMLFIND have to be unset first, otherwise
497          dnl AC_CHECK_TOOL (inside AC_PROG_OCAML) will not look.
498          OCAMLC=
499          OCAMLFIND=
500          AC_PROG_OCAML
501          AC_PROG_FINDLIB
502         ])
503 AM_CONDITIONAL([HAVE_OCAML],
504                [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
505
506 dnl Check for Perl (optional, for Perl bindings).
507 PERL=no
508 AC_ARG_ENABLE([perl],
509         AS_HELP_STRING([--disable-perl], [Disable Perl language bindings]),
510         [],
511         [enable_perl=yes])
512 AS_IF([test "x$enable_perl" != "xno"],
513         [
514         PERL=
515         AC_CHECK_PROG([PERL],[perl],[perl],[no])
516
517         dnl Check for Perl modules that must be present to compile and
518         dnl test the Perl bindings.
519         missing_perl_modules=no
520         for pm in Test::More ExtUtils::MakeMaker; do
521             AC_MSG_CHECKING([for $pm])
522             if ! perl -M$pm -e1 >/dev/null 2>&1; then
523                 AC_MSG_RESULT([no])
524                 missing_perl_modules=yes
525             else
526                 AC_MSG_RESULT([yes])
527             fi
528         done
529         if test "x$missing_perl_modules" = "xyes"; then
530             AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
531         fi
532         ])
533 AM_CONDITIONAL([HAVE_PERL],
534     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
535
536 dnl Check for Python (optional, for Python bindings).
537 PYTHON_PREFIX=
538 PYTHON_VERSION=
539 PYTHON_INCLUDEDIR=
540 PYTHON_SITE_PACKAGES=
541
542 AC_ARG_ENABLE([python],
543         AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
544         [],
545         [enable_python=yes])
546 AS_IF([test "x$enable_python" != "xno"],
547         [
548         AC_CHECK_PROG([PYTHON],[python],[python],[no])
549
550         if test "x$PYTHON" != "xno"; then
551             PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
552             PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
553             for d in \
554                 $PYTHON_PREFIX/include/python$PYTHON_VERSION \
555                 /usr/include/python$PYTHON_VERSION \
556                 /usr/local/include/python$PYTHON_VERSION
557             do
558                 AC_MSG_CHECKING([Python.h in $d])
559                 if test -r "$d/Python.h"; then
560                     AC_MSG_RESULT([found])
561                     PYTHON_INCLUDEDIR=$d
562                     break
563                 fi
564                 AC_MSG_RESULT([not found])
565             done
566             if test "x$PYTHON_INCLUDEDIR" = "x"; then
567                 AC_MSG_WARN([Python include directory not found])
568             fi
569
570             for d in \
571                 $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
572                 $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
573                 /usr/lib64/python$PYTHON_VERSION/site-packages \
574                 /usr/lib/python$PYTHON_VERSION/site-packages \
575                 /usr/local/lib/python$PYTHON_VERSION/site-packages
576             do
577                 AC_MSG_CHECKING([for $d])
578                 if test -d "$d"; then
579                     AC_MSG_RESULT([found])
580                     PYTHON_SITE_PACKAGES=$d
581                     break
582                 fi
583                 AC_MSG_RESULT([not found])
584             done
585             if test "x$PYTHON_SITE_PACKAGES" = "x"; then
586                 AC_MSG_WARN([Python site-packages directory not found])
587             fi
588
589             old_LIBS="$LIBS"
590             LIBS="$LIBS -lpython$PYTHON_VERSION"
591             AC_CHECK_FUNCS([PyCapsule_New])
592             LIBS="$old_LIBS"
593         fi
594
595         AC_SUBST(PYTHON_PREFIX)
596         AC_SUBST(PYTHON_VERSION)
597         AC_SUBST(PYTHON_INCLUDEDIR)
598         AC_SUBST(PYTHON_SITE_PACKAGES)
599         ])
600 AM_CONDITIONAL([HAVE_PYTHON],
601     [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
602
603 dnl Check for Ruby and rake (optional, for Ruby bindings).
604 AC_ARG_ENABLE([ruby],
605         AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
606         [],
607         [enable_ruby=yes])
608 AS_IF([test "x$enable_ruby" != "xno"],
609         [
610         AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
611         AC_CHECK_PROG([RAKE],[rake],[rake],[no])
612         ])
613 AM_CONDITIONAL([HAVE_RUBY],
614     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
615
616 dnl Check for Java.
617 AC_ARG_WITH(java_home,
618     [AS_HELP_STRING([--with-java-home],
619         [specify path to JDK directory @<:@default=check@:>@])],
620     [],
621     [with_java_home=check])
622
623 if test "x$with_java_home" != "xno"; then
624     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
625     then
626         # Reject unsafe characters in $JAVA_HOME
627         jh_lf='
628 '
629         case $JAVA_HOME in
630           *[\\\"\#\$\&\'\`$jh_lf\ \     ]*)
631             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
632         esac
633         if test -d "$with_java_home"; then
634             JAVA_HOME="$with_java_home"
635         else
636             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
637         fi
638     fi
639
640     if test "x$JAVA_HOME" = "x"; then
641         # Look for Java in some likely locations.
642         for d in \
643             /usr/lib/jvm/java \
644             /usr/lib/jvm/java-6-openjdk
645         do
646             if test -d $d && test -f $d/bin/java; then
647                 JAVA_HOME=$d
648                 break
649             fi
650         done
651     fi
652
653     if test "x$JAVA_HOME" != "x"; then
654         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
655         if test ! -x "$JAVA_HOME/bin/java"; then
656             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
657         else
658             JAVA="$JAVA_HOME/bin/java"
659         fi
660         if test ! -x "$JAVA_HOME/bin/javac"; then
661             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
662         else
663             JAVAC="$JAVA_HOME/bin/javac"
664         fi
665         if test ! -x "$JAVA_HOME/bin/javah"; then
666             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
667         else
668             JAVAH="$JAVA_HOME/bin/javah"
669         fi
670         if test ! -x "$JAVA_HOME/bin/javadoc"; then
671             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
672         else
673             JAVADOC="$JAVA_HOME/bin/javadoc"
674         fi
675         if test ! -x "$JAVA_HOME/bin/jar"; then
676             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
677         else
678             JAR="$JAVA_HOME/bin/jar"
679         fi
680         java_version=`$JAVA -version 2>&1 | grep "java version"`
681         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
682
683         dnl Find jni.h.
684         AC_MSG_CHECKING([for jni.h])
685         if test -f "$JAVA_HOME/include/jni.h"; then
686             JNI_CFLAGS="-I$JAVA_HOME/include"
687         else
688             if test "`find $JAVA_HOME -name jni.h`" != ""; then
689                 head=`find $JAVA_HOME -name jni.h | tail -1`
690                 dir=`dirname "$head"`
691                 JNI_CFLAGS="-I$dir"
692             else
693                 AC_MSG_FAILURE([missing jni.h header file])
694             fi
695         fi
696         AC_MSG_RESULT([$JNI_CFLAGS])
697
698         dnl Find jni_md.h.
699         AC_MSG_CHECKING([for jni_md.h])
700         case "$build_os" in
701         *linux*) system="linux" ;;
702         *SunOS*) system="solaris" ;;
703         *cygwin*) system="win32" ;;
704         *) system="$build_os" ;;
705         esac
706         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
707             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
708         else
709             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
710                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
711                 dir=`dirname "$head"`
712                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
713             else
714                 AC_MSG_FAILURE([missing jni_md.h header file])
715             fi
716         fi
717         AC_MSG_RESULT([$JNI_CFLAGS])
718
719         dnl Need extra version flag?
720         AC_MSG_CHECKING([extra javac flags])
721         JAVAC_FLAGS=
722         javac_version=`$JAVAC -version 2>&1`
723         case "$javac_version" in
724         *Eclipse*)
725             JAVAC_FLAGS="-source 1.5" ;;
726         esac
727         AC_MSG_RESULT([$JAVAC_FLAGS])
728
729         dnl Where to install jarfiles.
730         dnl XXX How to make it configurable?
731         JAR_INSTALL_DIR=\${prefix}/share/java
732         JNI_INSTALL_DIR=\${libdir}
733
734         dnl JNI version.
735         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
736         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
737         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
738         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
739     fi
740 fi
741
742 AC_SUBST(JAVA_HOME)
743 AC_SUBST(JAVA)
744 AC_SUBST(JAVAC)
745 AC_SUBST(JAVAH)
746 AC_SUBST(JAVADOC)
747 AC_SUBST(JAR)
748 AC_SUBST(JNI_CFLAGS)
749 AC_SUBST(JAVAC_FLAGS)
750 AC_SUBST(JAR_INSTALL_DIR)
751 AC_SUBST(JNI_INSTALL_DIR)
752 AC_SUBST(JNI_VERSION_INFO)
753
754 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
755
756 dnl Check for Haskell (GHC).
757 GHC=no
758 AC_ARG_ENABLE([haskell],
759         AS_HELP_STRING([--disable-haskell], [Disable Haskell language bindings]),
760         [],
761         [enable_haskell=yes])
762 AS_IF([test "x$enable_haskell" != "xno"],
763         [
764         GHC=
765         AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
766         ])
767 AM_CONDITIONAL([HAVE_HASKELL],
768     [test "x$GHC" != "xno"])
769
770 dnl PHP
771 PHP=no
772 AC_ARG_ENABLE([php],
773         AS_HELP_STRING([--disable-php], [Disable PHP language bindings]),
774         [],
775         [enable_php=yes])
776 AS_IF([test "x$enable_php" != "xno"],
777         [
778         PHP=
779         AC_CHECK_PROG([PHP],[php],[php],[no])
780         AC_CHECK_PROG([PHPIZE],[phpize],[phpize],[no])
781         ])
782 AM_CONDITIONAL([HAVE_PHP], [test "x$PHP" != "xno" && test "x$PHPIZE" != "xno"])
783
784 dnl Check for Perl modules needed by virt-df, inspector, etc.
785 AS_IF([test "x$PERL" != "xno"],
786         [
787         missing_perl_modules=no
788         for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer Locale::TextDomain Win::Hivex Win::Hivex::Regedit; do
789             AC_MSG_CHECKING([for $pm])
790             if ! $PERL -M$pm -e1 >/dev/null 2>&1; then
791                 AC_MSG_RESULT([no])
792                 missing_perl_modules=yes
793             else
794                 AC_MSG_RESULT([yes])
795             fi
796         done
797         if test "x$missing_perl_modules" = "xyes"; then
798             AC_MSG_WARN([some Perl modules required to compile virt-inspector and the other virt-* tools are missing])
799         fi
800         ])
801
802 AM_CONDITIONAL([HAVE_INSPECTOR],
803     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
804 AM_CONDITIONAL([HAVE_TOOLS],
805     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
806
807 dnl po4a for translating man pages and POD files (optional).
808 AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
809 AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
810
811 dnl Library versioning.
812 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
813 AC_SUBST(MAX_PROC_NR)
814
815 dnl Run in subdirs.
816 if test "x$enable_daemon" = "xyes"; then
817     AC_CONFIG_SUBDIRS([daemon])
818 fi
819
820 dnl Produce output files.
821 AC_CONFIG_HEADERS([config.h])
822 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
823 AC_CONFIG_FILES([appliance/update.sh],
824                 [chmod +x appliance/update.sh])
825 AC_CONFIG_FILES([Makefile
826                  generator/Makefile
827                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
828                  appliance/Makefile
829                  appliance/debian/debirf.conf
830                  images/Makefile
831                  capitests/Makefile
832                  regressions/Makefile
833                  test-tool/Makefile
834                  ocaml/Makefile ocaml/examples/Makefile
835                  perl/Makefile
836                  python/Makefile
837                  ruby/Makefile ruby/Rakefile
838                  java/Makefile
839                  haskell/Makefile
840                  inspector/Makefile
841                  tools/Makefile
842                  libguestfs.pc
843                  gnulib/lib/Makefile
844                  gnulib/tests/Makefile
845                  fuse/Makefile
846                  po-docs/Makefile
847                  po-docs/ja/Makefile
848                  php/Makefile
849                  csharp/Makefile
850                  ocaml/META perl/Makefile.PL])
851 AC_OUTPUT
852
853 dnl Produce summary.
854 echo
855 echo
856 echo "------------------------------------------------------------"
857 echo "Thank you for downloading $PACKAGE_STRING"
858 echo
859 echo "This is how we have configured the optional components for you today:"
860 echo
861 echo    "Daemon .............................. $enable_daemon"
862 echo    "Appliance ........................... $enable_appliance"
863 echo    "QEMU ................................ $QEMU"
864 echo -n "OCaml bindings ...................... "
865 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
866 echo -n "Perl bindings ....................... "
867 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
868 echo -n "Python bindings ..................... "
869 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
870 echo -n "Ruby bindings ....................... "
871 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
872 echo -n "Java bindings ....................... "
873 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
874 echo -n "Haskell bindings .................... "
875 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
876 echo -n "PHP bindings ........................ "
877 if test "x$HAVE_PHP_TRUE" = "x"; then echo "yes"; else echo "no"; fi
878 echo -n "virt-inspector ...................... "
879 if test "x$HAVE_INSPECTOR_TRUE" = "x"; then echo "yes"; else echo "no"; fi
880 echo -n "virt-* tools ........................ "
881 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
882 echo "supermin appliance .................. $enable_supermin"
883 echo "FUSE filesystem ..................... $enable_fuse"
884 echo
885 echo "If any optional component is configured 'no' when you expected 'yes'"
886 echo "then you should check the preceeding messages."
887 echo
888 echo "Please report bugs back to the mailing list:"
889 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
890 echo
891 echo "Next you should type 'make' to build the package,"
892 echo "then 'make check' to run the tests."
893 echo "------------------------------------------------------------"