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