test_qemu: pclose may return any != 0 on error.
[libguestfs.git] / configure.ac
1 # libguestfs
2 # Copyright (C) 2009-2011 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 # The major, minor, and release fields MUST be numbers.  Packagers can
19 # add extra information using --with-extra="..." which may be any
20 # freeform string.
21 m4_define([libguestfs_major],   [1])
22 m4_define([libguestfs_minor],   [12])
23 m4_define([libguestfs_release], [4])
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 Stable or unstable version?
35 AC_MSG_CHECKING([if this is a stable or unstable branch of libguestfs])
36 AS_IF([test "$((libguestfs_minor % 2))" -eq 0 ],[
37             AC_MSG_RESULT([stable])
38        ],[
39             AC_MSG_RESULT([unstable])
40             AC_MSG_NOTICE([
41 ***
42 This is a development version of libguestfs. Some APIs may be unstable
43 until they appear in a stable release of libguestfs (at which point
44 the C API and ABI is guaranteed to remain stable forever).  For
45 more information about stable and development branches of libguestfs
46 please see the section "LIBGUESTFS VERSION NUMBERS" in guestfs(3).
47 ***])
48        ])
49
50 dnl Extra string, a freeform string defined by packagers.
51 AC_ARG_WITH([extra],
52   [AS_HELP_STRING([--with-extra],
53                   [extra version string (for use by packagers)])],
54   [libguestfs_extra="$withval"],
55   [libguestfs_extra=]
56 )
57
58 AC_MSG_NOTICE([libguestfs version libguestfs_major.libguestfs_minor.libguestfs_release$libguestfs_extra])
59
60 dnl Split up the version string.
61 AC_DEFINE([PACKAGE_VERSION_MAJOR],[libguestfs_major],[Major version number])
62 AC_DEFINE([PACKAGE_VERSION_MINOR],[libguestfs_minor],[Minor version number])
63 AC_DEFINE([PACKAGE_VERSION_RELEASE],[libguestfs_release],[Release number])
64 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_EXTRA],["$libguestfs_extra"],[Extra version string])
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   nw="$nw -Wstack-protector"        # Don't warn about stack-protector
119                                     # failures (seen on Ubuntu).
120   nw="$nw -Wmissing-noreturn"       # Don't warn about missed noreturn funcs
121                                     # (seen on Ubuntu).
122
123   gl_MANYWARN_ALL_GCC([ws])
124   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
125   for w in $ws; do
126     gl_WARN_ADD([$w])
127   done
128   gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
129   gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
130   gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
131
132   # In spite of excluding -Wlogical-op above, it is enabled, as of
133   # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
134   gl_WARN_ADD([-Wno-logical-op])
135
136   # Work around warning in src/inspect.c.  This seems to be a bug in gcc 4.5.1.
137   gl_WARN_ADD([-Wno-strict-overflow])
138
139   gl_WARN_ADD([-fdiagnostics-show-option])
140
141   AC_SUBST([WARN_CFLAGS])
142
143   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
144   AC_DEFINE([_FORTIFY_SOURCE], [2],
145     [enable compile-time and run-time bounds-checking, and some warnings])
146   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
147 fi
148
149 AC_C_PROTOTYPES
150 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
151
152 AM_PROG_CC_C_O
153
154 dnl Work out how to specify the linker script to the linker.
155 VERSION_SCRIPT_FLAGS=-Wl,--version-script=
156 `/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
157     VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
158 AC_SUBST(VERSION_SCRIPT_FLAGS)
159
160 dnl Check support for 64 bit file offsets.
161 AC_SYS_LARGEFILE
162
163 dnl Check sizeof long.
164 AC_CHECK_SIZEOF([long])
165
166 dnl Define a C symbol for the host CPU architecture.
167 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
168
169 dnl Headers.
170 AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h endian.h byteswap.h])
171
172 dnl Functions.
173 AC_CHECK_FUNCS([futimens posix_fallocate])
174
175 dnl Build the daemon?
176 AC_MSG_CHECKING([if we should build the daemon])
177 AC_ARG_ENABLE([daemon],
178         [AS_HELP_STRING([--enable-daemon],
179           [enable building the daemon @<:@default=yes@:>@])],
180         [],
181         [enable_daemon=yes])
182 AM_CONDITIONAL([ENABLE_DAEMON],[test "x$enable_daemon" = "xyes"])
183 AC_MSG_RESULT([$enable_daemon])
184
185 dnl Build the appliance?
186 AC_MSG_CHECKING([if we should build the appliance])
187 AC_ARG_ENABLE([appliance],
188         [AS_HELP_STRING([--enable-appliance],
189           [enable building the appliance @<:@default=yes@:>@])],
190         [],
191         [enable_appliance=yes])
192 AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
193 AC_MSG_RESULT([$enable_appliance])
194
195 if test "x$enable_appliance" = "xyes"; then
196     dnl Check for febootstrap >= 3.0
197     AC_CHECK_PROG([FEBOOTSTRAP],
198                   [febootstrap],[febootstrap],[no])
199     test "x$FEBOOTSTRAP" = "xno" &&
200         AC_MSG_ERROR([febootstrap must be installed])
201     dnl febootstrap 2.x did not support the --version parameter
202     $FEBOOTSTRAP --version >&AS_MESSAGE_LOG_FD 2>&1 ||
203         AC_MSG_ERROR([febootstrap >= 3.0 must be installed, your version is too old])
204
205     dnl Pass a febootstrap --yum-config option.
206     AC_MSG_CHECKING([if user requested febootstrap --yum-config option])
207     AC_ARG_WITH([febootstrap-yum-config],
208         [AS_HELP_STRING([--with-febootstrap-yum-config=FILE],
209           [pass febootstrap --yum-config option @<:@default=no@:>@])],
210         [FEBOOTSTRAP_YUM_CONFIG="$withval"],
211         [FEBOOTSTRAP_YUM_CONFIG=no])
212     AC_MSG_RESULT([$FEBOOTSTRAP_YUM_CONFIG])
213     AC_SUBST([FEBOOTSTRAP_YUM_CONFIG])
214
215     dnl Which distro?
216     dnl
217     dnl This used to be Very Important but is now just used to select
218     dnl which packages to install in the appliance, since the package
219     dnl names vary slightly across distros.  (See
220     dnl appliance/packagelist.in and appliance/excludelist.in)
221     AC_MSG_CHECKING([which Linux distro for package names])
222     DISTRO=REDHAT
223     if test -f /etc/debian_version; then
224         DISTRO=DEBIAN
225         if grep -q 'DISTRIB_ID=Ubuntu' /etc/lsb-release 2>&AS_MESSAGE_LOG_FD; then
226             DISTRO=UBUNTU
227         fi
228     fi
229     if test -f /etc/arch-release; then
230         DISTRO=ARCHLINUX
231     fi
232     AC_MSG_RESULT([$DISTRO])
233     AC_SUBST([DISTRO])
234 fi
235
236 dnl Check for rpcgen and XDR library.  rpcgen is optional.
237 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
238 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
239 AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
240         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
241         ])
242
243 dnl Check for cpio which isn't in the default Pardus install amazingly.
244 AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
245 test "x$CPIO" = "xno" &&
246      AC_MSG_ERROR([cpio must be installed])
247
248 dnl Check for gperf.
249 AC_CHECK_PROG([GPERF],[gperf],[gperf],[no])
250 test "x$GPERF" = "xno" &&
251      AC_MSG_ERROR([gperf must be installed])
252
253 dnl Check for pod2man, pod2text, pod2html.
254 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
255 test "x$POD2MAN" = "xno" &&
256      AC_MSG_ERROR([pod2man must be installed])
257 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
258 test "x$POD2TEXT" = "xno" &&
259      AC_MSG_ERROR([pod2text must be installed])
260 AC_CHECK_PROG([POD2HTML],[pod2html],[pod2html],[no])
261 test "x$POD2HTML" = "xno" &&
262      AC_MSG_ERROR([pod2html must be installed])
263
264 dnl Check if pod2man, pod2text take --stderr and -u options (not in RHEL 5).
265 AC_MSG_CHECKING([if pod2man takes --stderr option])
266 if "$POD2MAN" --stderr >&AS_MESSAGE_LOG_FD 2>&1; then
267     AC_MSG_RESULT([yes])
268     POD2_STDERR_OPTION="--stderr"
269 else
270     AC_MSG_RESULT([no])
271     POD2_STDERR_OPTION=""
272 fi
273 AC_SUBST([POD2_STDERR_OPTION])
274
275 AC_MSG_CHECKING([if pod2man takes -u option])
276 if "$POD2MAN" -u >&AS_MESSAGE_LOG_FD 2>&1; then
277     AC_MSG_RESULT([yes])
278     POD2_UTF8_OPTION="-u"
279 else
280     AC_MSG_RESULT([no])
281     POD2_UTF8_OPTION=""
282 fi
283 AC_SUBST([POD2_UTF8_OPTION])
284
285 dnl Check for genisoimage.
286 AC_PATH_PROGS([GENISOIMAGE],[genisoimage],[no],
287         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
288 test "x$GENISOIMAGE" = "xno" && AC_MSG_ERROR([genisoimage must be installed])
289
290 dnl Check for optional xmllint.
291 AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
292 AM_CONDITIONAL([HAVE_XMLLINT],[test "x$XMLLINT" != "xno"])
293
294 dnl po4a for translating man pages and POD files (optional).
295 AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
296 AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
297
298 dnl Check for db_dump, db_load (optional).
299 AC_CHECK_PROGS([DB_DUMP],
300                [db_dump db4_dump db4.8_dump db4.7_dump db4.6_dump],[no])
301 AC_CHECK_PROGS([DB_LOAD],
302                [db_load db4_load db4.8_load db4.7_load db4.6_load],[no])
303 if test "x$DB_DUMP" != "xno"; then
304     AC_DEFINE_UNQUOTED([DB_DUMP],["$DB_DUMP"],[Name of db_dump program.])
305 fi
306 if test "x$DB_LOAD" != "xno"; then
307     AC_DEFINE_UNQUOTED([DB_LOAD],["$DB_LOAD"],[Name of db_load program.])
308 fi
309
310 dnl Check for QEMU for running binaries on this $host_cpu, fall
311 dnl back to basic 'qemu'.  Allow the user to override it.
312 default_qemu="qemu-kvm kvm qemu-system-$host_cpu qemu"
313 AC_ARG_WITH([qemu],
314         [AS_HELP_STRING([--with-qemu],
315           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
316         [],
317         [with_qemu="$default_qemu"])
318 AC_PATH_PROGS([QEMU],[$with_qemu],[no],
319         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec])
320 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
321 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
322
323 dnl Check that the chosen qemu has virtio-serial support.
324 if test "x$vmchannel_test" != "xno"; then
325     AC_MSG_CHECKING([that $QEMU -help works])
326     if $QEMU -help >&AS_MESSAGE_LOG_FD 2>&1; then
327         AC_MSG_RESULT([yes])
328     else
329         AC_MSG_RESULT([no])
330         AC_MSG_FAILURE(
331 [$QEMU -help: command failed.
332
333 This could be a very old version of qemu, or qemu might not be
334 working.
335 ])
336     fi
337
338     AC_MSG_CHECKING([for virtio-serial support in $QEMU])
339     if $QEMU -nographic -device \? 2>&1 | grep -sq virtio-serial; then
340         AC_MSG_RESULT([yes])
341     else
342         AC_MSG_RESULT([no])
343         AC_MSG_FAILURE(
344 [I did not find virtio-serial support in
345 $QEMU.
346
347 virtio-serial support in qemu or KVM is essential for libguestfs
348 to operate.
349
350 Usually this means that you have to install a newer version of qemu
351 and/or KVM.  Please read the relevant section in the README file for
352 more information about this.
353
354 You can override this test by setting the environment variable
355 vmchannel_test=no  However if you don't have the right support
356 in your qemu, then this just delays the pain.
357
358 If I am using the wrong qemu or you want to compile qemu from source
359 and install it in another location, then you should configure with
360 the --with-qemu option.
361 ])
362     fi
363 fi
364
365 dnl Set default drive interface used by the guestfs_add_drive_opts call
366 dnl ('-drive ...,if=...' option to qemu).
367 dnl
368 dnl If you encounter performance problems with virtio (RHBZ#509383)
369 dnl then try '--with-drive-if=ide'.
370 AC_ARG_WITH([drive-if],
371         [AS_HELP_STRING([--with-drive-if],
372           [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
373         [],
374         [with_drive_if=virtio])
375 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
376
377 dnl Set interface used by the network.  Normally you should
378 dnl leave this at the default (virtio-net-pci) but you can use the
379 dnl alternative (ne2k_pci) because of bugs in virtio networking
380 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
381 AC_ARG_WITH([net-if],
382         [AS_HELP_STRING([--with-net-if],
383           [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
384         [],
385         [with_net_if=virtio-net-pci])
386 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
387
388 dnl Enable packet dumps when in verbose mode.  This generates lots
389 dnl of debug info, only useful for people debugging the RPC mechanism.
390 AC_ARG_ENABLE([packet-dump],
391         [AS_HELP_STRING([--enable-packet-dump],
392           [enable packet dumps in verbose mode @<:@default=no@:>@])],
393         [AC_DEFINE([ENABLE_PACKET_DUMP],[1],[Enable packet dumps in verbose mode.])],
394         [])
395
396 dnl Readline.
397 AC_ARG_WITH([readline],
398     [AS_HELP_STRING([--with-readline],
399         [support fancy command line editing @<:@default=check@:>@])],
400     [],
401     [with_readline=check])
402
403 LIBREADLINE=
404 AS_IF([test "x$with_readline" != xno],
405     [AC_CHECK_LIB([readline], [main],
406         [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
407          AC_DEFINE([HAVE_LIBREADLINE], [1],
408                    [Define if you have libreadline])
409         ],
410         [if test "x$with_readline" != xcheck; then
411          AC_MSG_FAILURE(
412              [--with-readline was given, but test for readline failed])
413          fi
414         ], -lncurses)
415      old_LIBS="$LIBS"
416      LIBS="$LIBS $LIBREADLINE"
417      AC_CHECK_FUNCS([append_history completion_matches rl_completion_matches])
418      LIBS="$old_LIBS"
419     ])
420
421 dnl For i18n.
422 AM_GNU_GETTEXT([external])
423
424 dnl Check for PCRE (required)
425 PKG_CHECK_MODULES([PCRE], [libpcre])
426
427 dnl libmagic (highly recommended)
428 AC_CHECK_LIB([magic],[magic_file],
429         [AC_CHECK_HEADER([magic.h],
430                 [AC_SUBST([MAGIC_LIBS], ["-lmagic"])
431                  AC_DEFINE([HAVE_LIBMAGIC],[1],[libmagic found at compile time.])
432                 ], [])
433         ],
434         [AC_MSG_WARN([libmagic not found, some core features will be disabled])])
435
436 dnl libvirt (highly recommended)
437 PKG_CHECK_MODULES([LIBVIRT], [libvirt],
438         [AC_SUBST([LIBVIRT_CFLAGS])
439          AC_SUBST([LIBVIRT_LIBS])
440          AC_DEFINE([HAVE_LIBVIRT],[1],[libvirt found at compile time.])
441         ],
442         [AC_MSG_WARN([libvirt not found, some core features will be disabled])])
443 AM_CONDITIONAL([HAVE_LIBVIRT],[test "x$LIBVIRT_LIBS" != "x"])
444
445 dnl libxml2 (highly recommended)
446 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0],
447         [AC_SUBST([LIBXML2_CFLAGS])
448          AC_SUBST([LIBXML2_LIBS])
449          AC_DEFINE([HAVE_LIBXML2],[1],[libxml2 found at compile time.])
450         ],
451         [AC_MSG_WARN([libxml2 not found, some core features will be disabled])])
452 AM_CONDITIONAL([HAVE_LIBXML2],[test "x$LIBXML2_LIBS" != "x"])
453
454 dnl libconfig (highly recommended)
455 PKG_CHECK_MODULES([LIBCONFIG], [libconfig],
456         [AC_SUBST([LIBCONFIG_CFLAGS])
457          AC_SUBST([LIBCONFIG_LIBS])
458          AC_DEFINE([HAVE_LIBCONFIG],[1],[libconfig found at compile time.])
459         ],
460         [AC_MSG_WARN([libconfig not found, some features will be disabled])])
461 AM_CONDITIONAL([HAVE_LIBCONFIG],[test "x$LIBCONFIG_LIBS" != "x"])
462
463 dnl hivex library (highly recommended)
464 dnl This used to be a part of libguestfs, but was spun off into its
465 dnl own separate upstream project in libguestfs 1.0.85.
466 PKG_CHECK_MODULES([HIVEX], [hivex],
467         [AC_SUBST([HIVEX_CFLAGS])
468          AC_SUBST([HIVEX_LIBS])
469          AC_DEFINE([HAVE_HIVEX],[1],[hivex library found at compile time.])
470         ],
471         [AC_MSG_WARN([hivex not found, some core features will be disabled])])
472 AM_CONDITIONAL([HAVE_HIVEX],[test "x$HIVEX_LIBS" != "x"])
473
474 dnl FUSE is optional to build the FUSE module.
475 AC_ARG_ENABLE([fuse],
476         AS_HELP_STRING([--disable-fuse], [Disable FUSE (guestmount) support]),
477         [],
478         [enable_fuse=yes])
479 AS_IF([test "x$enable_fuse" != "xno"],
480         [PKG_CHECK_MODULES([FUSE],[fuse],,[
481                 enable_fuse=no
482                 AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])])
483 AM_CONDITIONAL([HAVE_FUSE],[test "x$enable_fuse" != "xno"])
484
485 dnl Check for OCaml (optional, for OCaml bindings).
486 OCAMLC=no
487 OCAMLFIND=no
488 AC_ARG_ENABLE([ocaml],
489         AS_HELP_STRING([--disable-ocaml], [Disable OCaml language bindings]),
490         [],
491         [enable_ocaml=yes])
492 AS_IF([test "x$enable_ocaml" != "xno"],
493         [dnl OCAMLC and OCAMLFIND have to be unset first, otherwise
494          dnl AC_CHECK_TOOL (inside AC_PROG_OCAML) will not look.
495          OCAMLC=
496          OCAMLFIND=
497          AC_PROG_OCAML
498          AC_PROG_FINDLIB
499
500          AS_IF([test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"],
501                 [AC_CHECK_OCAML_PKG([pcre])])
502         ])
503 AM_CONDITIONAL([HAVE_OCAML],
504                [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
505 AM_CONDITIONAL([HAVE_OCAML_PCRE],
506                [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno" && test "x$OCAML_PKG_pcre" != "xno"])
507 AM_CONDITIONAL([HAVE_OCAMLDOC],
508                [test "x$OCAMLDOC" != "xno"])
509
510 dnl Check for Perl (optional, for Perl bindings).
511 PERL=no
512 AC_ARG_ENABLE([perl],
513         AS_HELP_STRING([--disable-perl], [Disable Perl language bindings]),
514         [],
515         [enable_perl=yes])
516 AS_IF([test "x$enable_perl" != "xno"],
517         [
518         PERL=
519         AC_CHECK_PROG([PERL],[perl],[perl],[no])
520
521         dnl Check for Perl modules that must be present to compile and
522         dnl test the Perl bindings.
523         missing_perl_modules=no
524         for pm in Test::More ExtUtils::MakeMaker; do
525             AC_MSG_CHECKING([for $pm])
526             if ! perl -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
527                 AC_MSG_RESULT([no])
528                 missing_perl_modules=yes
529             else
530                 AC_MSG_RESULT([yes])
531             fi
532         done
533         if test "x$missing_perl_modules" = "xyes"; then
534             AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
535         fi
536         ])
537 AM_CONDITIONAL([HAVE_PERL],
538     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
539
540 dnl Check for Python (optional, for Python bindings).
541 PYTHON_PREFIX=
542 PYTHON_VERSION=
543 PYTHON_INCLUDEDIR=
544 PYTHON_INSTALLDIR=
545
546 AC_ARG_ENABLE([python],
547         AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
548         [],
549         [enable_python=yes])
550 AS_IF([test "x$enable_python" != "xno"],
551         [
552         AC_CHECK_PROG([PYTHON],[python],[python],[no])
553
554         if test "x$PYTHON" != "xno"; then
555             AC_MSG_CHECKING([Python prefix])
556             PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
557             AC_MSG_RESULT([$PYTHON_PREFIX])
558
559             AC_MSG_CHECKING([Python version])
560             PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
561             AC_MSG_RESULT([$PYTHON_VERSION])
562
563             AC_MSG_CHECKING([for Python include path])
564             if test -z "$PYTHON_INCLUDEDIR"; then
565                 python_path=`$PYTHON -c "import distutils.sysconfig; \
566                                          print (distutils.sysconfig.get_python_inc ());"`
567                 PYTHON_INCLUDEDIR=$python_path
568             fi
569             AC_MSG_RESULT([$PYTHON_INCLUDEDIR])
570
571             AC_ARG_WITH([python-installdir],
572                         [AS_HELP_STRING([--with-python-installdir],
573                                         [directory to install python modules @<:@default=check@:>@])],
574                         [PYTHON_INSTALLDIR="$withval"
575                         AC_MSG_NOTICE([Python install dir $PYTHON_INSTALLDIR])],
576                         [PYTHON_INSTALLDIR=check])
577
578             if test "x$PYTHON_INSTALLDIR" = "xcheck"; then
579                 PYTHON_INSTALLDIR=
580                 AC_MSG_CHECKING([for Python site-packages path])
581                 if test -z "$PYTHON_INSTALLDIR"; then
582                     PYTHON_INSTALLDIR=`$PYTHON -c "import distutils.sysconfig; \
583                                                    print (distutils.sysconfig.get_python_lib(1,0));"`
584                 fi
585                 AC_MSG_RESULT([$PYTHON_INSTALLDIR])
586             fi
587
588             old_LIBS="$LIBS"
589             LIBS="$LIBS -lpython$PYTHON_VERSION"
590             AC_CHECK_FUNCS([PyCapsule_New])
591             LIBS="$old_LIBS"
592         fi
593
594         AC_SUBST(PYTHON_PREFIX)
595         AC_SUBST(PYTHON_VERSION)
596         AC_SUBST(PYTHON_INCLUDEDIR)
597         AC_SUBST(PYTHON_INSTALLDIR)
598         ])
599 AM_CONDITIONAL([HAVE_PYTHON],
600     [test "x$PYTHON" != "xno" && test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_INSTALLDIR" != "x"])
601
602 dnl Check for Ruby and rake (optional, for Ruby bindings).
603 AC_ARG_ENABLE([ruby],
604         AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
605         [],
606         [enable_ruby=yes])
607 AS_IF([test "x$enable_ruby" != "xno"],
608         [
609         AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
610         AC_CHECK_PROG([RAKE],[rake],[rake],[no])
611         ])
612 AM_CONDITIONAL([HAVE_RUBY],
613     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
614
615 dnl Check for Java.
616 AC_ARG_WITH(java_home,
617     [AS_HELP_STRING([--with-java-home],
618         [specify path to JDK directory @<:@default=check@:>@])],
619     [],
620     [with_java_home=check])
621
622 if test "x$with_java_home" != "xno"; then
623     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
624     then
625         # Reject unsafe characters in $JAVA_HOME
626         jh_lf='
627 '
628         case $JAVA_HOME in
629           *[\\\"\#\$\&\'\`$jh_lf\ \     ]*)
630             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
631         esac
632         if test -d "$with_java_home"; then
633             JAVA_HOME="$with_java_home"
634         else
635             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
636         fi
637     fi
638
639     if test "x$JAVA_HOME" = "x"; then
640         # Look for Java in some likely locations.
641         for d in \
642             /usr/lib/jvm/java \
643             /usr/lib/jvm/java-6-openjdk
644         do
645             if test -d $d && test -f $d/bin/java; then
646                 JAVA_HOME=$d
647                 break
648             fi
649         done
650     fi
651
652     if test "x$JAVA_HOME" != "x"; then
653         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
654         if test ! -x "$JAVA_HOME/bin/java"; then
655             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
656         else
657             JAVA="$JAVA_HOME/bin/java"
658         fi
659         if test ! -x "$JAVA_HOME/bin/javac"; then
660             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
661         else
662             JAVAC="$JAVA_HOME/bin/javac"
663         fi
664         if test ! -x "$JAVA_HOME/bin/javah"; then
665             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
666         else
667             JAVAH="$JAVA_HOME/bin/javah"
668         fi
669         if test ! -x "$JAVA_HOME/bin/javadoc"; then
670             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
671         else
672             JAVADOC="$JAVA_HOME/bin/javadoc"
673         fi
674         if test ! -x "$JAVA_HOME/bin/jar"; then
675             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
676         else
677             JAR="$JAVA_HOME/bin/jar"
678         fi
679         java_version=`$JAVA -version 2>&1 | grep "java version"`
680         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
681
682         dnl Find jni.h.
683         AC_MSG_CHECKING([for jni.h])
684         if test -f "$JAVA_HOME/include/jni.h"; then
685             JNI_CFLAGS="-I$JAVA_HOME/include"
686         else
687             if test "`find $JAVA_HOME -name jni.h`" != ""; then
688                 head=`find $JAVA_HOME -name jni.h | tail -1`
689                 dir=`dirname "$head"`
690                 JNI_CFLAGS="-I$dir"
691             else
692                 AC_MSG_FAILURE([missing jni.h header file])
693             fi
694         fi
695         AC_MSG_RESULT([$JNI_CFLAGS])
696
697         dnl Find jni_md.h.
698         AC_MSG_CHECKING([for jni_md.h])
699         case "$build_os" in
700         *linux*) system="linux" ;;
701         *SunOS*) system="solaris" ;;
702         *cygwin*) system="win32" ;;
703         *) system="$build_os" ;;
704         esac
705         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
706             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
707         else
708             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
709                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
710                 dir=`dirname "$head"`
711                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
712             else
713                 AC_MSG_FAILURE([missing jni_md.h header file])
714             fi
715         fi
716         AC_MSG_RESULT([$JNI_CFLAGS])
717
718         dnl Need extra version flag?
719         AC_MSG_CHECKING([extra javac flags])
720         JAVAC_FLAGS=
721         javac_version=`$JAVAC -version 2>&1`
722         case "$javac_version" in
723         *Eclipse*)
724             JAVAC_FLAGS="-source 1.5" ;;
725         esac
726         AC_MSG_RESULT([$JAVAC_FLAGS])
727
728         dnl Where to install jarfiles.
729         dnl XXX How to make it configurable?
730         JAR_INSTALL_DIR=\${prefix}/share/java
731         JNI_INSTALL_DIR=\${libdir}
732
733         dnl JNI version.
734         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
735         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
736         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
737         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
738     fi
739 fi
740
741 AC_SUBST(JAVA_HOME)
742 AC_SUBST(JAVA)
743 AC_SUBST(JAVAC)
744 AC_SUBST(JAVAH)
745 AC_SUBST(JAVADOC)
746 AC_SUBST(JAR)
747 AC_SUBST(JNI_CFLAGS)
748 AC_SUBST(JAVAC_FLAGS)
749 AC_SUBST(JAR_INSTALL_DIR)
750 AC_SUBST(JNI_INSTALL_DIR)
751 AC_SUBST(JNI_VERSION_INFO)
752
753 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
754
755 dnl Check for Haskell (GHC).
756 GHC=no
757 AC_ARG_ENABLE([haskell],
758         AS_HELP_STRING([--disable-haskell], [Disable Haskell language bindings]),
759         [],
760         [enable_haskell=yes])
761 AS_IF([test "x$enable_haskell" != "xno"],
762         [
763         GHC=
764         AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
765         ])
766 AM_CONDITIONAL([HAVE_HASKELL],
767     [test "x$GHC" != "xno"])
768
769 dnl PHP
770 PHP=no
771 AC_ARG_ENABLE([php],
772         AS_HELP_STRING([--disable-php], [Disable PHP language bindings]),
773         [],
774         [enable_php=yes])
775 AS_IF([test "x$enable_php" != "xno"],
776         [
777         PHP=
778         AC_CHECK_PROG([PHP],[php],[php],[no])
779         AC_CHECK_PROG([PHPIZE],[phpize],[phpize],[no])
780         ])
781 AM_CONDITIONAL([HAVE_PHP], [test "x$PHP" != "xno" && test "x$PHPIZE" != "xno"])
782
783 dnl Check for Perl modules needed by Perl virt tools (virt-df, etc.)
784 AS_IF([test "x$PERL" != "xno"],
785         [
786         missing_perl_modules=no
787         for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper Locale::TextDomain Win::Hivex Win::Hivex::Regedit String::ShellQuote; do
788             AC_MSG_CHECKING([for $pm])
789             if ! $PERL -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
790                 AC_MSG_RESULT([no])
791                 missing_perl_modules=yes
792             else
793                 AC_MSG_RESULT([yes])
794             fi
795         done
796         if test "x$missing_perl_modules" = "xyes"; then
797             AC_MSG_WARN([some Perl modules required to compile the Perl virt-* tools are missing])
798         fi
799         ])
800
801 AM_CONDITIONAL([HAVE_TOOLS],
802     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
803
804 dnl Library versioning.
805 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
806 AC_SUBST(MAX_PROC_NR)
807
808 dnl Replace libtool with a wrapper that clobbers dependency_libs in *.la files
809 dnl http://lists.fedoraproject.org/pipermail/devel/2010-November/146343.html
810 LIBTOOL='bash $(top_srcdir)/libtool-kill-dependency_libs.sh $(top_builddir)/libtool'
811 AC_SUBST([LIBTOOL])
812
813 dnl Run in subdirs.
814 if test "x$enable_daemon" = "xyes"; then
815     AC_CONFIG_SUBDIRS([daemon])
816 fi
817
818 dnl Produce output files.
819 AC_CONFIG_HEADERS([config.h])
820 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
821 AC_CONFIG_FILES([podwrapper.sh],
822                 [chmod +x podwrapper.sh])
823 AC_CONFIG_FILES([run],
824                 [chmod +x run])
825 AC_CONFIG_FILES([Makefile
826                  appliance/Makefile
827                  capitests/Makefile
828                  cat/Makefile
829                  caution/Makefile
830                  csharp/Makefile
831                  debian/changelog
832                  df/Makefile
833                  edit/Makefile
834                  examples/Makefile
835                  fish/Makefile
836                  fuse/Makefile
837                  generator/Makefile
838                  gnulib/lib/Makefile
839                  gnulib/tests/Makefile
840                  haskell/Makefile
841                  images/Makefile
842                  inspector/Makefile
843                  java/Makefile
844                  java/examples/Makefile
845                  libguestfs.pc
846                  ocaml/META
847                  ocaml/Makefile
848                  ocaml/examples/Makefile
849                  perl/Makefile
850                  perl/Makefile.PL
851                  perl/examples/Makefile
852                  php/Makefile
853                  po-docs/Makefile
854                  po-docs/ja/Makefile
855                  po-docs/uk/Makefile
856                  po/Makefile.in
857                  python/Makefile
858                  python/examples/Makefile
859                  regressions/Makefile
860                  rescue/Makefile
861                  resize/Makefile
862                  ruby/Makefile
863                  ruby/Rakefile
864                  ruby/examples/Makefile
865                  src/Makefile
866                  test-tool/Makefile
867                  tools/Makefile])
868 AC_OUTPUT
869
870 dnl Produce summary.
871 echo
872 echo
873 echo "------------------------------------------------------------"
874 echo "Thank you for downloading $PACKAGE_STRING"
875 echo
876 echo "This is how we have configured the optional components for you today:"
877 echo
878 echo    "Daemon .............................. $enable_daemon"
879 echo    "Appliance ........................... $enable_appliance"
880 echo    "QEMU ................................ $QEMU"
881 echo -n "OCaml bindings ...................... "
882 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
883 echo -n "Perl bindings ....................... "
884 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
885 echo -n "Python bindings ..................... "
886 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
887 echo -n "Ruby bindings ....................... "
888 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
889 echo -n "Java bindings ....................... "
890 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
891 echo -n "Haskell bindings .................... "
892 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
893 echo -n "PHP bindings ........................ "
894 if test "x$HAVE_PHP_TRUE" = "x"; then echo "yes"; else echo "no"; fi
895 echo    "guestfish and C virt tools .......... yes"
896 echo -n "Perl virt tools ..................... "
897 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
898 echo -n "virt-resize ......................... "
899 if test "x$HAVE_OCAML_TRUE" = "x" && test "x$HAVE_OCAML_PCRE_TRUE" = "x"; then echo "yes"; else echo "no"; fi
900 echo "FUSE filesystem ..................... $enable_fuse"
901 echo
902 echo "If any optional component is configured 'no' when you expected 'yes'"
903 echo "then you should check the preceeding messages."
904 echo
905 echo "Please report bugs back to the mailing list:"
906 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
907 echo
908 echo "Next you should type 'make' to build the package,"
909 echo "then 'make check' to run the tests."
910 echo "------------------------------------------------------------"