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