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