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