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