build: Add "checking ... result" around Python tests.
[libguestfs.git] / configure.ac
1 # libguestfs
2 # Copyright (C) 2009-2010 Red Hat Inc.
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 # major/minor/release must be numbers
19 m4_define([libguestfs_major],   [1])
20 m4_define([libguestfs_minor],   [7])
21 m4_define([libguestfs_release], [20])
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 appliance/packagelist.in)
208     AC_MSG_CHECKING([which Linux distro for package names])
209     DISTRO=REDHAT
210     if test -f /etc/debian_version; then
211         DISTRO=DEBIAN
212         if grep -q 'DISTRIB_ID=Ubuntu' /etc/lsb-release 2>/dev/null; then
213             DISTRO=UBUNTU
214         fi
215     fi
216     AC_MSG_RESULT([$DISTRO])
217     AC_SUBST([DISTRO])
218 fi
219
220 dnl Check for rpcgen and XDR library.  rpcgen is optional.
221 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
222 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
223 AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
224         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
225         ])
226
227 dnl Check for cpio which isn't in the default Pardus install amazingly.
228 AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
229 test "x$CPIO" = "xno" &&
230      AC_MSG_ERROR([cpio must be installed])
231
232 dnl Check for gperf.
233 AC_CHECK_PROG([GPERF],[gperf],[gperf],[no])
234 test "x$GPERF" = "xno" &&
235      AC_MSG_ERROR([gperf must be installed])
236
237 dnl Check for pod2man, pod2text, pod2html.
238 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
239 test "x$POD2MAN" = "xno" &&
240      AC_MSG_ERROR([pod2man must be installed])
241 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
242 test "x$POD2TEXT" = "xno" &&
243      AC_MSG_ERROR([pod2text must be installed])
244 AC_CHECK_PROG([POD2HTML],[pod2html],[pod2html],[no])
245 test "x$POD2HTML" = "xno" &&
246      AC_MSG_ERROR([pod2html must be installed])
247
248 dnl Check for mkisofs.
249 AC_PATH_PROGS([MKISOFS],[mkisofs],[no],
250         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
251 test "x$MKISOFS" = "xno" && AC_MSG_ERROR([mkisofs must be installed])
252
253 dnl Check for optional xmllint.
254 AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
255 AM_CONDITIONAL([HAVE_XMLLINT],[test "x$XMLLINT" != "xno"])
256
257 dnl po4a for translating man pages and POD files (optional).
258 AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
259 AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
260
261 dnl Check for db_dump, db_load (optional).
262 AC_CHECK_PROGS([DB_DUMP],
263                [db_dump db4_dump db4.8_dump db4.7_dump db4.6_dump],[no])
264 AC_CHECK_PROGS([DB_LOAD],
265                [db_load db4_load db4.8_load db4.7_load db4.6_load],[no])
266 if test "x$DB_DUMP" != "xno"; then
267     AC_DEFINE_UNQUOTED([DB_DUMP],["$DB_DUMP"],[Name of db_dump program.])
268 fi
269 if test "x$DB_LOAD" != "xno"; then
270     AC_DEFINE_UNQUOTED([DB_LOAD],["$DB_LOAD"],[Name of db_load program.])
271 fi
272
273 dnl Check for QEMU for running binaries on this $host_cpu, fall
274 dnl back to basic 'qemu'.  Allow the user to override it.
275 default_qemu="qemu-kvm kvm qemu-system-$host_cpu qemu"
276 AC_ARG_WITH([qemu],
277         [AS_HELP_STRING([--with-qemu],
278           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
279         [],
280         [with_qemu="$default_qemu"])
281 AC_PATH_PROGS([QEMU],[$with_qemu],[no],
282         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec])
283 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
284 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
285
286 dnl Check that the chosen qemu has virtio-serial support.
287 if test "x$vmchannel_test" != "xno"; then
288     AC_MSG_CHECKING([for virtio-serial support in $QEMU])
289     if $QEMU -nographic -device \? 2>&1 | grep -sq virtio-serial; then
290         AC_MSG_RESULT([yes])
291         vmchannel_guestfwd=guestfwd
292     else
293         AC_MSG_RESULT([no])
294         AC_MSG_FAILURE(
295 [I did not find virtio-serial support in
296 $QEMU.
297
298 virtio-serial support in qemu or KVM is essential for libguestfs
299 to operate.
300
301 Usually this means that you have to install a newer version of qemu
302 and/or KVM.  Please read the relevant section in the README file for
303 more information about this.
304
305 You can override this test by setting the environment variable
306 vmchannel_test=no  However if you don't have the right support
307 in your qemu, then this just delays the pain.
308
309 If I am using the wrong qemu or you want to compile qemu from source
310 and install it in another location, then you should configure with
311 the --with-qemu option.
312 ])
313     fi
314 fi
315
316 dnl Set default drive interface used by the guestfs_add_drive_opts call
317 dnl ('-drive ...,if=...' option to qemu).
318 dnl
319 dnl If you encounter performance problems with virtio (RHBZ#509383)
320 dnl then try '--with-drive-if=ide'.
321 AC_ARG_WITH([drive-if],
322         [AS_HELP_STRING([--with-drive-if],
323           [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
324         [],
325         [with_drive_if=virtio])
326 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
327
328 dnl Set interface used by the network.  Normally you should
329 dnl leave this at the default (virtio-net-pci) but you can use the
330 dnl alternative (ne2k_pci) because of bugs in virtio networking
331 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
332 AC_ARG_WITH([net-if],
333         [AS_HELP_STRING([--with-net-if],
334           [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
335         [],
336         [with_net_if=virtio-net-pci])
337 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
338
339 dnl Enable packet dumps when in verbose mode.  This generates lots
340 dnl of debug info, only useful for people debugging the RPC mechanism.
341 AC_ARG_ENABLE([packet-dump],
342         [AS_HELP_STRING([--enable-packet-dump],
343           [enable packet dumps in verbose mode @<:@default=no@:>@])],
344         [AC_DEFINE([ENABLE_PACKET_DUMP],[1],[Enable packet dumps in verbose mode.])],
345         [])
346
347 dnl Readline.
348 AC_ARG_WITH([readline],
349     [AS_HELP_STRING([--with-readline],
350         [support fancy command line editing @<:@default=check@:>@])],
351     [],
352     [with_readline=check])
353
354 LIBREADLINE=
355 AS_IF([test "x$with_readline" != xno],
356     [AC_CHECK_LIB([readline], [main],
357         [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
358          AC_DEFINE([HAVE_LIBREADLINE], [1],
359                    [Define if you have libreadline])
360         ],
361         [if test "x$with_readline" != xcheck; then
362          AC_MSG_FAILURE(
363              [--with-readline was given, but test for readline failed])
364          fi
365         ], -lncurses)
366      old_LIBS="$LIBS"
367      LIBS="$LIBS $LIBREADLINE"
368      AC_CHECK_FUNCS([append_history completion_matches rl_completion_matches])
369      LIBS="$old_LIBS"
370     ])
371
372 dnl For i18n.
373 AM_GNU_GETTEXT([external])
374
375 dnl libmagic (highly recommended)
376 AC_CHECK_LIB([magic],[magic_file],
377         [AC_CHECK_HEADER([magic.h],
378                 [AC_SUBST([MAGIC_LIBS], ["-lmagic"])
379                  AC_DEFINE([HAVE_LIBMAGIC],[1],[libmagic found at compile time.])
380                 ], [])
381         ],
382         [AC_MSG_WARN([libmagic not found, some core features will be disabled])])
383
384 dnl Check for PCRE (highly recommended)
385 PKG_CHECK_MODULES([PCRE], [libpcre],
386         [AC_SUBST([PCRE_CFLAGS])
387          AC_SUBST([PCRE_LIBS])
388          AC_DEFINE([HAVE_PCRE],[1],[PCRE found at compile time.])
389         ],
390         [AC_MSG_WARN([PCRE not found, some core features will be disabled])])
391
392 dnl libvirt (highly recommended)
393 PKG_CHECK_MODULES([LIBVIRT], [libvirt],
394         [AC_SUBST([LIBVIRT_CFLAGS])
395          AC_SUBST([LIBVIRT_LIBS])
396          AC_DEFINE([HAVE_LIBVIRT],[1],[libvirt found at compile time.])
397         ],
398         [AC_MSG_WARN([libvirt not found, some core features will be disabled])])
399 AM_CONDITIONAL([HAVE_LIBVIRT],[test "x$LIBVIRT_LIBS" != "x"])
400
401 dnl libxml2 (highly recommended)
402 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0],
403         [AC_SUBST([LIBXML2_CFLAGS])
404          AC_SUBST([LIBXML2_LIBS])
405          AC_DEFINE([HAVE_LIBXML2],[1],[libxml2 found at compile time.])
406         ],
407         [AC_MSG_WARN([libxml2 not found, some core features will be disabled])])
408 AM_CONDITIONAL([HAVE_LIBXML2],[test "x$LIBXML2_LIBS" != "x"])
409
410 dnl hivex library (highly recommended)
411 dnl This used to be a part of libguestfs, but was spun off into its
412 dnl own separate upstream project in libguestfs 1.0.85.
413 PKG_CHECK_MODULES([HIVEX], [hivex],
414         [AC_SUBST([HIVEX_CFLAGS])
415          AC_SUBST([HIVEX_LIBS])
416          AC_DEFINE([HAVE_HIVEX],[1],[hivex library found at compile time.])
417         ],
418         [AC_MSG_WARN([hivex not found, some core features will be disabled])])
419
420 dnl FUSE is optional to build the FUSE module.
421 AC_ARG_ENABLE([fuse],
422         AS_HELP_STRING([--disable-fuse], [Disable FUSE (guestmount) support]),
423         [],
424         [enable_fuse=yes])
425 AS_IF([test "x$enable_fuse" != "xno"],
426         [PKG_CHECK_MODULES([FUSE],[fuse],,[
427                 enable_fuse=no
428                 AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])])
429 AM_CONDITIONAL([HAVE_FUSE],[test "x$enable_fuse" != "xno"])
430
431 dnl Check for OCaml (optional, for OCaml bindings).
432 OCAMLC=no
433 OCAMLFIND=no
434 AC_ARG_ENABLE([ocaml],
435         AS_HELP_STRING([--disable-ocaml], [Disable OCaml language bindings]),
436         [],
437         [enable_ocaml=yes])
438 AS_IF([test "x$enable_ocaml" != "xno"],
439         [dnl OCAMLC and OCAMLFIND have to be unset first, otherwise
440          dnl AC_CHECK_TOOL (inside AC_PROG_OCAML) will not look.
441          OCAMLC=
442          OCAMLFIND=
443          AC_PROG_OCAML
444          AC_PROG_FINDLIB
445         ])
446 AM_CONDITIONAL([HAVE_OCAML],
447                [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
448
449 dnl Check for Perl (optional, for Perl bindings).
450 PERL=no
451 AC_ARG_ENABLE([perl],
452         AS_HELP_STRING([--disable-perl], [Disable Perl language bindings]),
453         [],
454         [enable_perl=yes])
455 AS_IF([test "x$enable_perl" != "xno"],
456         [
457         PERL=
458         AC_CHECK_PROG([PERL],[perl],[perl],[no])
459
460         dnl Check for Perl modules that must be present to compile and
461         dnl test the Perl bindings.
462         missing_perl_modules=no
463         for pm in Test::More ExtUtils::MakeMaker; do
464             AC_MSG_CHECKING([for $pm])
465             if ! perl -M$pm -e1 >/dev/null 2>&1; then
466                 AC_MSG_RESULT([no])
467                 missing_perl_modules=yes
468             else
469                 AC_MSG_RESULT([yes])
470             fi
471         done
472         if test "x$missing_perl_modules" = "xyes"; then
473             AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
474         fi
475         ])
476 AM_CONDITIONAL([HAVE_PERL],
477     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
478
479 dnl Check for Python (optional, for Python bindings).
480 PYTHON_PREFIX=
481 PYTHON_VERSION=
482 PYTHON_INCLUDEDIR=
483 PYTHON_SITE_PACKAGES=
484
485 AC_ARG_ENABLE([python],
486         AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
487         [],
488         [enable_python=yes])
489 AS_IF([test "x$enable_python" != "xno"],
490         [
491         AC_CHECK_PROG([PYTHON],[python],[python],[no])
492
493         if test "x$PYTHON" != "xno"; then
494             AC_MSG_CHECKING([Python prefix])
495             PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
496             AC_MSG_RESULT([$PYTHON_PREFIX])
497
498             AC_MSG_CHECKING([Python version])
499             PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
500             AC_MSG_RESULT([$PYTHON_VERSION])
501
502             for d in \
503                 $PYTHON_PREFIX/include/python$PYTHON_VERSION \
504                 /usr/include/python$PYTHON_VERSION \
505                 /usr/local/include/python$PYTHON_VERSION
506             do
507                 AC_MSG_CHECKING([Python.h in $d])
508                 if test -r "$d/Python.h"; then
509                     AC_MSG_RESULT([found])
510                     PYTHON_INCLUDEDIR=$d
511                     break
512                 fi
513                 AC_MSG_RESULT([not found])
514             done
515             if test "x$PYTHON_INCLUDEDIR" = "x"; then
516                 AC_MSG_WARN([Python include directory not found])
517             fi
518
519             for d in \
520                 $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
521                 $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
522                 /usr/lib64/python$PYTHON_VERSION/site-packages \
523                 /usr/lib/python$PYTHON_VERSION/site-packages \
524                 /usr/local/lib/python$PYTHON_VERSION/site-packages
525             do
526                 AC_MSG_CHECKING([for $d])
527                 if test -d "$d"; then
528                     AC_MSG_RESULT([found])
529                     PYTHON_SITE_PACKAGES=$d
530                     break
531                 fi
532                 AC_MSG_RESULT([not found])
533             done
534             if test "x$PYTHON_SITE_PACKAGES" = "x"; then
535                 AC_MSG_WARN([Python site-packages directory not found])
536             fi
537
538             old_LIBS="$LIBS"
539             LIBS="$LIBS -lpython$PYTHON_VERSION"
540             AC_CHECK_FUNCS([PyCapsule_New])
541             LIBS="$old_LIBS"
542         fi
543
544         AC_SUBST(PYTHON_PREFIX)
545         AC_SUBST(PYTHON_VERSION)
546         AC_SUBST(PYTHON_INCLUDEDIR)
547         AC_SUBST(PYTHON_SITE_PACKAGES)
548         ])
549 AM_CONDITIONAL([HAVE_PYTHON],
550     [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
551
552 dnl Check for Ruby and rake (optional, for Ruby bindings).
553 AC_ARG_ENABLE([ruby],
554         AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
555         [],
556         [enable_ruby=yes])
557 AS_IF([test "x$enable_ruby" != "xno"],
558         [
559         AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
560         AC_CHECK_PROG([RAKE],[rake],[rake],[no])
561         ])
562 AM_CONDITIONAL([HAVE_RUBY],
563     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
564
565 dnl Check for Java.
566 AC_ARG_WITH(java_home,
567     [AS_HELP_STRING([--with-java-home],
568         [specify path to JDK directory @<:@default=check@:>@])],
569     [],
570     [with_java_home=check])
571
572 if test "x$with_java_home" != "xno"; then
573     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
574     then
575         # Reject unsafe characters in $JAVA_HOME
576         jh_lf='
577 '
578         case $JAVA_HOME in
579           *[\\\"\#\$\&\'\`$jh_lf\ \     ]*)
580             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
581         esac
582         if test -d "$with_java_home"; then
583             JAVA_HOME="$with_java_home"
584         else
585             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
586         fi
587     fi
588
589     if test "x$JAVA_HOME" = "x"; then
590         # Look for Java in some likely locations.
591         for d in \
592             /usr/lib/jvm/java \
593             /usr/lib/jvm/java-6-openjdk
594         do
595             if test -d $d && test -f $d/bin/java; then
596                 JAVA_HOME=$d
597                 break
598             fi
599         done
600     fi
601
602     if test "x$JAVA_HOME" != "x"; then
603         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
604         if test ! -x "$JAVA_HOME/bin/java"; then
605             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
606         else
607             JAVA="$JAVA_HOME/bin/java"
608         fi
609         if test ! -x "$JAVA_HOME/bin/javac"; then
610             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
611         else
612             JAVAC="$JAVA_HOME/bin/javac"
613         fi
614         if test ! -x "$JAVA_HOME/bin/javah"; then
615             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
616         else
617             JAVAH="$JAVA_HOME/bin/javah"
618         fi
619         if test ! -x "$JAVA_HOME/bin/javadoc"; then
620             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
621         else
622             JAVADOC="$JAVA_HOME/bin/javadoc"
623         fi
624         if test ! -x "$JAVA_HOME/bin/jar"; then
625             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
626         else
627             JAR="$JAVA_HOME/bin/jar"
628         fi
629         java_version=`$JAVA -version 2>&1 | grep "java version"`
630         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
631
632         dnl Find jni.h.
633         AC_MSG_CHECKING([for jni.h])
634         if test -f "$JAVA_HOME/include/jni.h"; then
635             JNI_CFLAGS="-I$JAVA_HOME/include"
636         else
637             if test "`find $JAVA_HOME -name jni.h`" != ""; then
638                 head=`find $JAVA_HOME -name jni.h | tail -1`
639                 dir=`dirname "$head"`
640                 JNI_CFLAGS="-I$dir"
641             else
642                 AC_MSG_FAILURE([missing jni.h header file])
643             fi
644         fi
645         AC_MSG_RESULT([$JNI_CFLAGS])
646
647         dnl Find jni_md.h.
648         AC_MSG_CHECKING([for jni_md.h])
649         case "$build_os" in
650         *linux*) system="linux" ;;
651         *SunOS*) system="solaris" ;;
652         *cygwin*) system="win32" ;;
653         *) system="$build_os" ;;
654         esac
655         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
656             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
657         else
658             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
659                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
660                 dir=`dirname "$head"`
661                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
662             else
663                 AC_MSG_FAILURE([missing jni_md.h header file])
664             fi
665         fi
666         AC_MSG_RESULT([$JNI_CFLAGS])
667
668         dnl Need extra version flag?
669         AC_MSG_CHECKING([extra javac flags])
670         JAVAC_FLAGS=
671         javac_version=`$JAVAC -version 2>&1`
672         case "$javac_version" in
673         *Eclipse*)
674             JAVAC_FLAGS="-source 1.5" ;;
675         esac
676         AC_MSG_RESULT([$JAVAC_FLAGS])
677
678         dnl Where to install jarfiles.
679         dnl XXX How to make it configurable?
680         JAR_INSTALL_DIR=\${prefix}/share/java
681         JNI_INSTALL_DIR=\${libdir}
682
683         dnl JNI version.
684         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
685         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
686         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
687         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
688     fi
689 fi
690
691 AC_SUBST(JAVA_HOME)
692 AC_SUBST(JAVA)
693 AC_SUBST(JAVAC)
694 AC_SUBST(JAVAH)
695 AC_SUBST(JAVADOC)
696 AC_SUBST(JAR)
697 AC_SUBST(JNI_CFLAGS)
698 AC_SUBST(JAVAC_FLAGS)
699 AC_SUBST(JAR_INSTALL_DIR)
700 AC_SUBST(JNI_INSTALL_DIR)
701 AC_SUBST(JNI_VERSION_INFO)
702
703 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
704
705 dnl Check for Haskell (GHC).
706 GHC=no
707 AC_ARG_ENABLE([haskell],
708         AS_HELP_STRING([--disable-haskell], [Disable Haskell language bindings]),
709         [],
710         [enable_haskell=yes])
711 AS_IF([test "x$enable_haskell" != "xno"],
712         [
713         GHC=
714         AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
715         ])
716 AM_CONDITIONAL([HAVE_HASKELL],
717     [test "x$GHC" != "xno"])
718
719 dnl PHP
720 PHP=no
721 AC_ARG_ENABLE([php],
722         AS_HELP_STRING([--disable-php], [Disable PHP language bindings]),
723         [],
724         [enable_php=yes])
725 AS_IF([test "x$enable_php" != "xno"],
726         [
727         PHP=
728         AC_CHECK_PROG([PHP],[php],[php],[no])
729         AC_CHECK_PROG([PHPIZE],[phpize],[phpize],[no])
730         ])
731 AM_CONDITIONAL([HAVE_PHP], [test "x$PHP" != "xno" && test "x$PHPIZE" != "xno"])
732
733 dnl Check for Perl modules needed by Perl virt tools (virt-df, etc.)
734 AS_IF([test "x$PERL" != "xno"],
735         [
736         missing_perl_modules=no
737         for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper Locale::TextDomain Win::Hivex Win::Hivex::Regedit String::ShellQuote; do
738             AC_MSG_CHECKING([for $pm])
739             if ! $PERL -M$pm -e1 >/dev/null 2>&1; then
740                 AC_MSG_RESULT([no])
741                 missing_perl_modules=yes
742             else
743                 AC_MSG_RESULT([yes])
744             fi
745         done
746         if test "x$missing_perl_modules" = "xyes"; then
747             AC_MSG_WARN([some Perl modules required to compile the Perl virt-* tools are missing])
748         fi
749         ])
750
751 AM_CONDITIONAL([HAVE_TOOLS],
752     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
753
754 dnl Library versioning.
755 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
756 AC_SUBST(MAX_PROC_NR)
757
758 dnl Replace libtool with a wrapper that clobbers dependency_libs in *.la files
759 dnl http://lists.fedoraproject.org/pipermail/devel/2010-November/146343.html
760 LIBTOOL='$(SHELL) $(top_srcdir)/libtool-kill-dependency_libs.sh $(top_builddir)/libtool'
761 AC_SUBST([LIBTOOL])
762
763 dnl Run in subdirs.
764 if test "x$enable_daemon" = "xyes"; then
765     AC_CONFIG_SUBDIRS([daemon])
766 fi
767
768 dnl Produce output files.
769 AC_CONFIG_HEADERS([config.h])
770 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
771 AC_CONFIG_FILES([podwrapper.sh],
772                 [chmod +x podwrapper.sh])
773 AC_CONFIG_FILES([Makefile
774                  generator/Makefile
775                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
776                  appliance/Makefile
777                  images/Makefile
778                  capitests/Makefile
779                  regressions/Makefile
780                  test-tool/Makefile
781                  ocaml/Makefile ocaml/examples/Makefile
782                  perl/Makefile
783                  python/Makefile python/examples/Makefile
784                  ruby/Makefile ruby/Rakefile ruby/examples/Makefile
785                  java/Makefile
786                  haskell/Makefile
787                  inspector/Makefile
788                  tools/Makefile
789                  libguestfs.pc
790                  gnulib/lib/Makefile
791                  gnulib/tests/Makefile
792                  fuse/Makefile
793                  po-docs/Makefile
794                  po-docs/ja/Makefile
795                  php/Makefile
796                  csharp/Makefile
797                  cat/Makefile
798                  df/Makefile
799                  rescue/Makefile
800                  ocaml/META perl/Makefile.PL])
801 AC_OUTPUT
802
803 dnl Produce summary.
804 echo
805 echo
806 echo "------------------------------------------------------------"
807 echo "Thank you for downloading $PACKAGE_STRING"
808 echo
809 echo "This is how we have configured the optional components for you today:"
810 echo
811 echo    "Daemon .............................. $enable_daemon"
812 echo    "Appliance ........................... $enable_appliance"
813 echo    "QEMU ................................ $QEMU"
814 echo -n "OCaml bindings ...................... "
815 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
816 echo -n "Perl bindings ....................... "
817 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
818 echo -n "Python bindings ..................... "
819 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
820 echo -n "Ruby bindings ....................... "
821 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
822 echo -n "Java bindings ....................... "
823 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
824 echo -n "Haskell bindings .................... "
825 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
826 echo -n "PHP bindings ........................ "
827 if test "x$HAVE_PHP_TRUE" = "x"; then echo "yes"; else echo "no"; fi
828 echo -n "virt-* tools ........................ "
829 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
830 echo "FUSE filesystem ..................... $enable_fuse"
831 echo
832 echo "If any optional component is configured 'no' when you expected 'yes'"
833 echo "then you should check the preceeding messages."
834 echo
835 echo "Please report bugs back to the mailing list:"
836 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
837 echo
838 echo "Next you should type 'make' to build the package,"
839 echo "then 'make check' to run the tests."
840 echo "------------------------------------------------------------"