pardus: Check for cpio in configure.
[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],   [5])
21 m4_define([libguestfs_release], [13])
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   gl_WARN_ADD([-fdiagnostics-show-option])
133
134   AC_SUBST([WARN_CFLAGS])
135
136   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
137   AC_DEFINE([_FORTIFY_SOURCE], [2],
138     [enable compile-time and run-time bounds-checking, and some warnings])
139   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
140 fi
141
142 AC_C_PROTOTYPES
143 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
144
145 AM_PROG_CC_C_O
146
147 dnl Work out how to specify the linker script to the linker.
148 VERSION_SCRIPT_FLAGS=-Wl,--version-script=
149 `/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
150     VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
151 AC_SUBST(VERSION_SCRIPT_FLAGS)
152
153 dnl Check support for 64 bit file offsets.
154 AC_SYS_LARGEFILE
155
156 dnl Check sizeof long.
157 AC_CHECK_SIZEOF([long])
158
159 dnl Define a C symbol for the host CPU architecture.
160 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
161
162 dnl Headers.
163 AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h endian.h byteswap.h])
164
165 dnl Functions.
166 AC_CHECK_FUNCS([posix_fallocate])
167
168 dnl Build the daemon?
169 AC_MSG_CHECKING([if we should build the daemon])
170 AC_ARG_ENABLE([daemon],
171         [AS_HELP_STRING([--enable-daemon],
172           [enable building the daemon @<:@default=yes@:>@])],
173         [],
174         [enable_daemon=yes])
175 AM_CONDITIONAL([ENABLE_DAEMON],[test "x$enable_daemon" = "xyes"])
176 AC_MSG_RESULT([$enable_daemon])
177
178 dnl Build the appliance?
179 AC_MSG_CHECKING([if we should build the appliance])
180 AC_ARG_ENABLE([appliance],
181         [AS_HELP_STRING([--enable-appliance],
182           [enable building the appliance @<:@default=yes@:>@])],
183         [],
184         [enable_appliance=yes])
185 AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
186 AC_MSG_RESULT([$enable_appliance])
187
188 dnl Check for PCRE.
189 AC_CHECK_LIB([pcre],[pcre_compile],
190         [AC_SUBST([LIBPCRE], ["-lpcre"])],
191         [AC_MSG_FAILURE(
192              [Perl Compatible Regular Expressions library (PCRE) is required])])
193 AC_CHECK_HEADER([pcre.h],[],
194         [AC_MSG_FAILURE(
195              [Perl Compatible Regular Expressions library (PCRE) header file pcre.h is required])])
196
197 dnl Check for rpcgen and XDR library.  rpcgen is optional.
198 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
199 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
200 AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
201         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
202         ])
203
204 dnl Check for cpio which isn't in the default Pardus install amazingly.
205 AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
206 test "x$CPIO" = "xno" &&
207      AC_MSG_ERROR([cpio must be installed])
208
209 dnl Check for pod2man and pod2text.
210 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
211 test "x$POD2MAN" = "xno" &&
212      AC_MSG_ERROR([pod2man must be installed])
213 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
214 test "x$POD2TEXT" = "xno" &&
215      AC_MSG_ERROR([pod2text must be installed])
216
217 dnl Check for mkisofs.
218 AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
219         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
220 test "x$MKISOFS" = "xno" && AC_MSG_ERROR([mkisofs must be installed])
221
222 dnl Check for optional xmllint.
223 AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
224 AM_CONDITIONAL([HAVE_XMLLINT],[test "x$XMLLINT" != "xno"])
225
226 dnl Check for QEMU for running binaries on this $host_cpu, fall
227 dnl back to basic 'qemu'.  Allow the user to override it.
228 default_qemu="qemu-kvm qemu-system-$host_cpu qemu"
229 AC_ARG_WITH([qemu],
230         [AS_HELP_STRING([--with-qemu],
231           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
232         [],
233         [with_qemu="$default_qemu"])
234 AC_PATH_PROGS([QEMU],[$with_qemu],[no],
235         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec])
236 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
237 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
238
239 dnl Check that the chosen qemu has vmchannel support or we can
240 dnl fallback to null vmchannel (still using SLIRP).  See the
241 dnl discussion in the README file.
242 if test "x$vmchannel_test" != "xno"; then
243     AC_MSG_CHECKING([for guestfwd support in $QEMU])
244     if $QEMU -nographic --help | grep -sq guestfwd; then
245         AC_MSG_RESULT([yes])
246         vmchannel_guestfwd=guestfwd
247     else
248         AC_MSG_RESULT([no])
249         # Note that this test must be conditional on the previous
250         # test failing.  This is because recent qemu will throw
251         # up an SDL window and hang if we try to run this test.
252         AC_MSG_CHECKING([for "-net channel" (old guestfwd) support in $QEMU])
253         vmchannelout=`$QEMU -nographic -net channel /dev/zero 2>&1 ||:`
254         echo "vmchannel test command output: $vmchannelout" >&AS_MESSAGE_LOG_FD
255         if echo "$vmchannelout" | grep -sq "vmchannel wrong port number" ; then
256             AC_MSG_RESULT([yes])
257             vmchannel_guestfwd=net_channel
258         else
259             AC_MSG_RESULT([no])
260             vmchannel_guestfwd=no
261         fi
262     fi
263
264     AC_MSG_CHECKING([for "-net user" (user mode network) support in $QEMU])
265     if $QEMU -nographic --help | grep -sq -- "-net user"; then
266         AC_MSG_RESULT([yes])
267         vmchannel_net_user=yes
268     else
269         AC_MSG_RESULT([no])
270         vmchannel_net_user=no
271     fi
272
273     if test "x$vmchannel_net_user" = "xno" && test "x$vmchannel_guestfwd" = "xno"; then
274         AC_MSG_FAILURE(
275 [I did not find user mode network or vmchannel support in
276 $QEMU.
277
278 Either user mode networking or vmchannel support is vital for
279 libguestfs to operate.
280
281 Please read the relevant section in the README file for more
282 information about this.
283
284 You can override this test by setting the environment variable
285 vmchannel_test=no  However if you don't have the right support
286 in your qemu, then this just delays the pain.
287
288 If I am using the wrong qemu or you want to compile qemu from source
289 and install it in another location, then you should configure with
290 the --with-qemu option.
291 ])
292     fi
293 fi
294
295 dnl Set drive interface used by the guestfs_add_drive{,_ro} calls
296 dnl ('-drive ...,if=...' option to qemu).
297 dnl
298 dnl If you encounter performance problems with virtio (RHBZ#509383)
299 dnl then try '--with-drive-if=ide'.
300 AC_ARG_WITH([drive-if],
301         [AS_HELP_STRING([--with-drive-if],
302           [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
303         [],
304         [with_drive_if=virtio])
305 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
306
307 dnl Set interface used by the network.  Normally you should
308 dnl leave this at the default (virtio-net-pci) but you can use the
309 dnl alternative (ne2k_pci) because of bugs in virtio networking
310 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
311 AC_ARG_WITH([net-if],
312         [AS_HELP_STRING([--with-net-if],
313           [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
314         [],
315         [with_net_if=virtio-net-pci])
316 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
317
318 dnl Check for febootstrap etc.
319 if test "x$enable_appliance" = "xyes"; then
320     AC_CHECK_PROG([FEBOOTSTRAP],
321                   [febootstrap],[febootstrap],[no])
322     if test "x$FEBOOTSTRAP" != "xno"; then
323       AC_CHECK_PROG([FEBOOTSTRAP_RUN],
324                     [febootstrap-run],[febootstrap-run],[no])
325       test "x$FEBOOTSTRAP_RUN" = "xno" && \
326           AC_MSG_ERROR([febootstrap-run must be installed])
327       AC_CHECK_PROG([FEBOOTSTRAP_INSTALL],
328                     [febootstrap-install],[febootstrap-install],[no])
329       test "x$FEBOOTSTRAP_INSTALL" = "xno" && \
330           AC_MSG_ERROR([febootstrap-install must be installed])
331       AC_CHECK_PROG([FEBOOTSTRAP_MINIMIZE],
332                     [febootstrap-minimize],[febootstrap-minimize],[no])
333       test "x$FEBOOTSTRAP_MINIMIZE" = "xno" && \
334           AC_MSG_ERROR([febootstrap-minimize must be installed])
335       AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS],
336                     [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no])
337       test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
338           AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
339       AC_CHECK_PROG([FEBOOTSTRAP_TO_SUPERMIN],
340                     [febootstrap-to-supermin],[febootstrap-to-supermin],[no])
341       test "x$FEBOOTSTRAP_TO_SUPERMIN" = "xno" && \
342           AC_MSG_ERROR([febootstrap-to-supermin must be installed])
343
344       dnl Check we have fakechroot >= 2.9 (it's an indirect requirement
345       dnl of febootstrap, but old versions will fail with yum).
346       AC_CHECK_PROG([FAKECHROOT],
347                     [fakechroot],[fakechroot],[no])
348       test "x$FAKECHROOT" = "xno" && \
349          AC_MSG_ERROR([fakechroot must be installed])
350
351       AC_MSG_CHECKING([fakechroot version])
352       fakechroot_version=`$FAKECHROOT --version | awk '{print $3}'`
353       if test -z "$fakechroot_version"; then
354         AC_MSG_RESULT([failed])
355         AC_MSG_WARN([fakechroot --version command failed, proceeding anyway])
356       else
357         AC_MSG_RESULT([$fakechroot_version])
358         fakechroot_major=`echo "$fakechroot_version" | awk -F. '{print $1}'`
359         fakechroot_minor=`echo "$fakechroot_version" | awk -F. '{print $2}'`
360         if test "$fakechroot_major" -lt 2 || \
361           ( test "$fakechroot_major" -eq 2 && test "$fakechroot_minor" -lt 9 ); then
362           AC_MSG_ERROR([fakechroot version must be >= 2.9])
363         fi
364       fi
365       DIST="REDHAT"
366     else
367       # check for debootstrap and debirf
368       AC_CHECK_PROG([DEBOOTSTRAP],
369                     [debootstrap],[debootstrap],[no])
370       test "x$DEBOOTSTRAP" = "xno" && \
371           AC_MSG_ERROR([Either febootstrap or debootstrap must be installed])
372       AC_CHECK_PROG([DEBIRF],[debirf],[debirf],[no])
373       test "x$DEBIRF" = "xno" &&
374           AC_MSG_ERROR([debirf must be installed])
375       DIST="DEBIAN"
376       case "$host_cpu" in
377       *86)
378           DEBIAN_KERNEL_ARCH=486
379           ;;
380       x86_64)
381           DEBIAN_KERNEL_ARCH=amd64
382           ;;
383       *)
384          DEBIAN_KERNEL_ARCH=$host_cpu
385          ;;
386       esac
387       AC_SUBST(DEBIAN_KERNEL_ARCH)
388     fi
389     AC_SUBST(DIST)
390
391     dnl --with-updates to specify a Fedora updates repository.
392     AC_ARG_WITH([updates],
393         [AS_HELP_STRING([--with-updates],
394           [set name of Fedora updates repository @<:@default=updates-released-f12@:>@])],
395         [],
396         [with_updates=updates-released-f12])
397     UPDATES="$with_updates"
398     AC_SUBST(UPDATES)
399
400     dnl --with-mirror to specify a local Fedora mirror.
401     AC_ARG_WITH([mirror],
402         [AS_HELP_STRING([--with-mirror],
403           [set URI of a local Fedora mirror])],
404         [],
405         [with_mirror=])
406     MIRROR="$with_mirror"
407     AC_SUBST(MIRROR)
408 fi
409
410 dnl --with-repo to specify a Fedora repository.
411 AC_ARG_WITH([repo],
412         [AS_HELP_STRING([--with-repo],
413           [set name of Fedora repository @<:@default=fedora-12@:>@])],
414         [],
415         [with_repo=fedora-12])
416 REPO="$with_repo"
417 AC_SUBST(REPO)
418 AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
419
420 dnl Build the supermin appliance?  Please see README file before
421 dnl enabling this option.
422 AC_ARG_ENABLE([supermin],
423         [AS_HELP_STRING([--enable-supermin],
424           [enable supermin appliance (see README) @<:@default=no@:>@])],
425         [],
426         [enable_supermin=no])
427 AM_CONDITIONAL([SUPERMIN],[test "x$enable_supermin" = "xyes"])
428
429 dnl Enable packet dumps when in verbose mode.  This generates lots
430 dnl of debug info, only useful for people debugging the RPC mechanism.
431 AC_ARG_ENABLE([packet-dump],
432         [AS_HELP_STRING([--enable-packet-dump],
433           [enable packet dumps in verbose mode @<:@default=no@:>@])],
434         [AC_DEFINE([ENABLE_PACKET_DUMP],[1],[Enable packet dumps in verbose mode.])],
435         [])
436
437 dnl Readline.
438 AC_ARG_WITH([readline],
439     [AS_HELP_STRING([--with-readline],
440         [support fancy command line editing @<:@default=check@:>@])],
441     [],
442     [with_readline=check])
443
444 LIBREADLINE=
445 AS_IF([test "x$with_readline" != xno],
446     [AC_CHECK_LIB([readline], [main],
447         [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
448          AC_DEFINE([HAVE_LIBREADLINE], [1],
449                    [Define if you have libreadline])
450         ],
451         [if test "x$with_readline" != xcheck; then
452          AC_MSG_FAILURE(
453              [--with-readline was given, but test for readline failed])
454          fi
455         ], -lncurses)
456      old_LIBS="$LIBS"
457      LIBS="$LIBS $LIBREADLINE"
458      AC_CHECK_FUNCS([append_history completion_matches rl_completion_matches])
459      LIBS="$old_LIBS"
460     ])
461
462 dnl For i18n.
463 AM_GNU_GETTEXT([external])
464 AM_GNU_GETTEXT_VERSION([0.17])
465
466 dnl libmagic (required)
467 AC_CHECK_LIB([magic],[magic_file],[
468         AC_SUBST([LIBMAGIC], ["-lmagic"])
469     ],[
470         AC_MSG_FAILURE([libmagic is required])
471     ])
472 AC_CHECK_HEADER([magic.h],[],[
473         AC_MSG_FAILURE([magic.h header file is required])
474     ])
475
476 dnl libvirt (required)
477 PKG_CHECK_MODULES([LIBVIRT], [libvirt])
478 AC_SUBST([LIBVIRT_CFLAGS])
479 AC_SUBST([LIBVIRT_LIBS])
480
481 dnl libxml2 (required)
482 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
483 AC_SUBST([LIBXML2_CFLAGS])
484 AC_SUBST([LIBXML2_LIBS])
485
486 dnl Augeas (required)
487 PKG_CHECK_MODULES([AUGEAS], [augeas])
488 AC_SUBST([AUGEAS_CFLAGS])
489 AC_SUBST([AUGEAS_LIBS])
490
491 dnl hivex library (required)
492 dnl This used to be a part of libguestfs, but was spun off into its
493 dnl own separate upstream project in libguestfs 1.0.85.
494 PKG_CHECK_MODULES([HIVEX], [hivex])
495 AC_SUBST([HIVEX_CFLAGS])
496 AC_SUBST([HIVEX_LIBS])
497
498 dnl FUSE is optional to build the FUSE module.
499 HAVE_FUSE=yes
500 PKG_CHECK_MODULES([FUSE],[fuse],,[
501         HAVE_FUSE=no
502         AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])
503 AM_CONDITIONAL([HAVE_FUSE],[test "x$HAVE_FUSE" = "xyes"])
504
505 dnl Check for OCaml (optional, for OCaml bindings).
506 AC_PROG_OCAML
507 AC_PROG_FINDLIB
508 AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
509
510 dnl Optional xml-light for running the generator.
511 OCAML_PKG_xml_light=no
512 if test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"; then
513     AC_CHECK_OCAML_PKG([xml-light])
514 fi
515 AM_CONDITIONAL([HAVE_XML_LIGHT],[test "x$OCAML_PKG_xml_light" != "xno"])
516
517 dnl Build the OCaml viewer example.  This has a lengthy list of
518 dnl dependencies and we don't attempt to detect them all.  Read
519 dnl the top of ocaml/examples/viewer.ml before enabling this.
520 AC_ARG_ENABLE([ocaml-viewer],
521         [AS_HELP_STRING([--enable-ocaml-viewer],
522           [enable OCaml viewer (see ocaml/examples) @<:@default=no@:>@])],
523         [],
524         [enable_ocaml_viewer=no])
525 AM_CONDITIONAL([BUILD_OCAML_VIEWER],[test "x$enable_ocaml_viewer" = "xyes"])
526
527 dnl Check for Perl (optional, for Perl bindings).
528 dnl XXX This isn't quite right, we should check for Perl devel library.
529 AC_CHECK_PROG([PERL],[perl],[perl],[no])
530
531 dnl Check for Perl modules that must be present to compile and
532 dnl test the Perl bindings.
533 missing_perl_modules=no
534 for pm in Test::More ExtUtils::MakeMaker; do
535     AC_MSG_CHECKING([for $pm])
536     if ! perl -M$pm -e1 >/dev/null 2>&1; then
537         AC_MSG_RESULT([no])
538         missing_perl_modules=yes
539     else
540         AC_MSG_RESULT([yes])
541     fi
542 done
543 if test "x$missing_perl_modules" = "xyes"; then
544     AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
545 fi
546
547 AM_CONDITIONAL([HAVE_PERL],
548     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
549
550 dnl Check for Python (optional, for Python bindings).
551 AC_CHECK_PROG([PYTHON],[python],[python],[no])
552
553 PYTHON_PREFIX=
554 PYTHON_VERSION=
555 PYTHON_INCLUDEDIR=
556 PYTHON_SITE_PACKAGES=
557
558 if test "x$PYTHON" != "xno"; then
559     PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
560     PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
561     for d in \
562         $PYTHON_PREFIX/include/python$PYTHON_VERSION \
563         /usr/include/python$PYTHON_VERSION \
564         /usr/local/include/python$PYTHON_VERSION
565     do
566         AC_MSG_CHECKING([Python.h in $d])
567         if test -r "$d/Python.h"; then
568             AC_MSG_RESULT([found])
569             PYTHON_INCLUDEDIR=$d
570             break
571         fi
572         AC_MSG_RESULT([not found])
573     done
574     for d in \
575         $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
576         $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
577         /usr/lib64/python$PYTHON_VERSION/site-packages \
578         /usr/lib/python$PYTHON_VERSION/site-packages \
579         /usr/local/lib/python$PYTHON_VERSION/site-packages
580     do
581         AC_MSG_CHECKING([for $d])
582         if test -d "$d"; then
583             AC_MSG_RESULT([found])
584             PYTHON_SITE_PACKAGES=$d
585             break
586         fi
587         AC_MSG_RESULT([not found])
588     done
589
590     old_LIBS="$LIBS"
591     LIBS="$LIBS -lpython$PYTHON_VERSION"
592     AC_CHECK_FUNCS([PyCapsule_New])
593     LIBS="$old_LIBS"
594 fi
595
596 AC_SUBST(PYTHON_PREFIX)
597 AC_SUBST(PYTHON_VERSION)
598 AC_SUBST(PYTHON_INCLUDEDIR)
599 AC_SUBST(PYTHON_SITE_PACKAGES)
600
601 AM_CONDITIONAL([HAVE_PYTHON],
602     [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
603
604 dnl Check for Ruby and rake (optional, for Ruby bindings).
605 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
606 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
607
608 AM_CONDITIONAL([HAVE_RUBY],
609     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
610
611 dnl Check for Java.
612 AC_ARG_WITH(java_home,
613     [AS_HELP_STRING([--with-java-home],
614         [specify path to JDK directory @<:@default=check@:>@])],
615     [],
616     [with_java_home=check])
617
618 if test "x$with_java_home" != "xno"; then
619     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
620     then
621         # Reject unsafe characters in $JAVA_HOME
622         jh_lf='
623 '
624         case $JAVA_HOME in
625           *[\\\"\#\$\&\'\`$jh_lf\ \     ]*)
626             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
627         esac
628         if test -d "$with_java_home"; then
629             JAVA_HOME="$with_java_home"
630         else
631             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
632         fi
633     fi
634
635     if test "x$JAVA_HOME" = "x"; then
636         # Look for Java in some likely locations.
637         for d in \
638             /usr/lib/jvm/java \
639             /usr/lib/jvm/java-6-openjdk
640         do
641             if test -d $d && test -f $d/bin/java; then
642                 JAVA_HOME=$d
643                 break
644             fi
645         done
646     fi
647
648     if test "x$JAVA_HOME" != "x"; then
649         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
650         if test ! -x "$JAVA_HOME/bin/java"; then
651             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
652         else
653             JAVA="$JAVA_HOME/bin/java"
654         fi
655         if test ! -x "$JAVA_HOME/bin/javac"; then
656             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
657         else
658             JAVAC="$JAVA_HOME/bin/javac"
659         fi
660         if test ! -x "$JAVA_HOME/bin/javah"; then
661             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
662         else
663             JAVAH="$JAVA_HOME/bin/javah"
664         fi
665         if test ! -x "$JAVA_HOME/bin/javadoc"; then
666             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
667         else
668             JAVADOC="$JAVA_HOME/bin/javadoc"
669         fi
670         if test ! -x "$JAVA_HOME/bin/jar"; then
671             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
672         else
673             JAR="$JAVA_HOME/bin/jar"
674         fi
675         java_version=`$JAVA -version 2>&1 | grep "java version"`
676         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
677
678         dnl Find jni.h.
679         AC_MSG_CHECKING([for jni.h])
680         if test -f "$JAVA_HOME/include/jni.h"; then
681             JNI_CFLAGS="-I$JAVA_HOME/include"
682         else
683             if test "`find $JAVA_HOME -name jni.h`" != ""; then
684                 head=`find $JAVA_HOME -name jni.h | tail -1`
685                 dir=`dirname "$head"`
686                 JNI_CFLAGS="-I$dir"
687             else
688                 AC_MSG_FAILURE([missing jni.h header file])
689             fi
690         fi
691         AC_MSG_RESULT([$JNI_CFLAGS])
692
693         dnl Find jni_md.h.
694         AC_MSG_CHECKING([for jni_md.h])
695         case "$build_os" in
696         *linux*) system="linux" ;;
697         *SunOS*) system="solaris" ;;
698         *cygwin*) system="win32" ;;
699         *) system="$build_os" ;;
700         esac
701         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
702             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
703         else
704             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
705                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
706                 dir=`dirname "$head"`
707                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
708             else
709                 AC_MSG_FAILURE([missing jni_md.h header file])
710             fi
711         fi
712         AC_MSG_RESULT([$JNI_CFLAGS])
713
714         dnl Need extra version flag?
715         AC_MSG_CHECKING([extra javac flags])
716         JAVAC_FLAGS=
717         javac_version=`$JAVAC -version 2>&1`
718         case "$javac_version" in
719         *Eclipse*)
720             JAVAC_FLAGS="-source 1.5" ;;
721         esac
722         AC_MSG_RESULT([$JAVAC_FLAGS])
723
724         dnl Where to install jarfiles.
725         dnl XXX How to make it configurable?
726         JAR_INSTALL_DIR=\${prefix}/share/java
727         JNI_INSTALL_DIR=\${libdir}
728
729         dnl JNI version.
730         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
731         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
732         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
733         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
734     fi
735 fi
736
737 AC_SUBST(JAVA_HOME)
738 AC_SUBST(JAVA)
739 AC_SUBST(JAVAC)
740 AC_SUBST(JAVAH)
741 AC_SUBST(JAVADOC)
742 AC_SUBST(JAR)
743 AC_SUBST(JNI_CFLAGS)
744 AC_SUBST(JAVAC_FLAGS)
745 AC_SUBST(JAR_INSTALL_DIR)
746 AC_SUBST(JNI_INSTALL_DIR)
747 AC_SUBST(JNI_VERSION_INFO)
748
749 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
750
751 dnl Check for Haskell (GHC).
752 AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
753
754 AM_CONDITIONAL([HAVE_HASKELL],
755     [test "x$GHC" != "xno"])
756
757 dnl Check for Perl modules needed by virt-df, inspector, etc.
758 missing_perl_modules=no
759 for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer Locale::TextDomain Win::Hivex Win::Hivex::Regedit; do
760     AC_MSG_CHECKING([for $pm])
761     if ! perl -M$pm -e1 >/dev/null 2>&1; then
762         AC_MSG_RESULT([no])
763         missing_perl_modules=yes
764     else
765         AC_MSG_RESULT([yes])
766     fi
767 done
768 if test "x$missing_perl_modules" = "xyes"; then
769     AC_MSG_WARN([some Perl modules required to compile virt-inspector and the other virt-* tools are missing])
770 fi
771
772 AM_CONDITIONAL([HAVE_INSPECTOR],
773     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
774 AM_CONDITIONAL([HAVE_TOOLS],
775     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
776
777 dnl po4a for translating man pages and POD files (optional).
778 AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
779 AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
780
781 dnl PHP
782 AC_CHECK_PROG([PHP],[php],[php],[no])
783 AC_CHECK_PROG([PHPIZE],[phpize],[phpize],[no])
784 AM_CONDITIONAL([HAVE_PHP], [test "x$PHP" != "xno" && test "x$PHPIZE" != "xno"])
785
786 dnl Library versioning.
787 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
788 AC_SUBST(MAX_PROC_NR)
789
790 dnl Run in subdirs.
791 if test "x$enable_daemon" = "xyes"; then
792     AC_CONFIG_SUBDIRS([daemon])
793 fi
794
795 dnl Produce output files.
796 AC_CONFIG_HEADERS([config.h])
797 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
798 AC_CONFIG_FILES([appliance/update.sh],
799                 [chmod +x appliance/update.sh])
800 AC_CONFIG_FILES([Makefile
801                  generator/Makefile
802                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
803                  appliance/Makefile
804                  appliance/debian/debirf.conf
805                  images/Makefile
806                  capitests/Makefile
807                  regressions/Makefile
808                  test-tool/Makefile
809                  ocaml/Makefile ocaml/examples/Makefile
810                  perl/Makefile
811                  python/Makefile
812                  ruby/Makefile ruby/Rakefile
813                  java/Makefile
814                  haskell/Makefile
815                  inspector/Makefile
816                  tools/Makefile
817                  libguestfs.pc
818                  gnulib/lib/Makefile
819                  gnulib/tests/Makefile
820                  fuse/Makefile
821                  po-docs/Makefile
822                  po-docs/ja/Makefile
823                  php/Makefile
824                  ocaml/META perl/Makefile.PL])
825 AC_OUTPUT
826
827 dnl Produce summary.
828 echo
829 echo
830 echo "------------------------------------------------------------"
831 echo "Thank you for downloading $PACKAGE_STRING"
832 echo
833 echo "This is how we have configured the optional components for you today:"
834 echo
835 echo    "Daemon .............................. $enable_daemon"
836 echo    "Appliance ........................... $enable_appliance"
837 echo    "QEMU ................................ $QEMU"
838 echo -n "OCaml bindings ...................... "
839 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
840 echo -n "Perl bindings ....................... "
841 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
842 echo -n "Python bindings ..................... "
843 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
844 echo -n "Ruby bindings ....................... "
845 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
846 echo -n "Java bindings ....................... "
847 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
848 echo -n "Haskell bindings .................... "
849 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
850 echo -n "PHP bindings ........................ "
851 if test "x$HAVE_PHP_TRUE" = "x"; then echo "yes"; else echo "no"; fi
852 echo -n "virt-inspector ...................... "
853 if test "x$HAVE_INSPECTOR_TRUE" = "x"; then echo "yes"; else echo "no"; fi
854 echo -n "virt-* tools ........................ "
855 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
856 echo "supermin appliance .................. $enable_supermin"
857 echo "FUSE filesystem ..................... $HAVE_FUSE"
858 echo
859 echo "If any optional component is configured 'no' when you expected 'yes'"
860 echo "then you should check the preceeding messages."
861 echo
862 echo "Please report bugs back to the mailing list:"
863 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
864 echo
865 echo "Next you should type 'make' to build the package,"
866 echo "then 'make check' to run the tests."
867 echo "------------------------------------------------------------"