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