013a4e81a66a7034d5ae2bc780860112b580896f
[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_INSTALLDIR=
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             AC_ARG_WITH([python-installdir],
520                         [AS_HELP_STRING([--with-python-installdir],
521                                         [directory to install python modules @<:@default=check@:>@])],
522                         [PYTHON_INSTALLDIR="$withval"
523                         AC_MSG_NOTICE([Python install dir $PYTHON_INSTALLDIR])],
524                         [PYTHON_INSTALLDIR=check])
525
526             if test "x$PYTHON_INSTALLDIR" = "xcheck"; then
527                 PYTHON_INSTALLDIR=
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_INSTALLDIR=$d
539                         break
540                     fi
541                     AC_MSG_RESULT([not found])
542                 done
543                 if test "x$PYTHON_INSTALLDIR" = "x"; then
544                     AC_MSG_WARN([Python site-packages directory not found])
545                 fi
546             fi
547
548             old_LIBS="$LIBS"
549             LIBS="$LIBS -lpython$PYTHON_VERSION"
550             AC_CHECK_FUNCS([PyCapsule_New])
551             LIBS="$old_LIBS"
552         fi
553
554         AC_SUBST(PYTHON_PREFIX)
555         AC_SUBST(PYTHON_VERSION)
556         AC_SUBST(PYTHON_INCLUDEDIR)
557         AC_SUBST(PYTHON_INSTALLDIR)
558         ])
559 AM_CONDITIONAL([HAVE_PYTHON],
560     [test "x$PYTHON" != "xno" && test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_INSTALLDIR" != "x"])
561
562 dnl Check for Ruby and rake (optional, for Ruby bindings).
563 AC_ARG_ENABLE([ruby],
564         AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
565         [],
566         [enable_ruby=yes])
567 AS_IF([test "x$enable_ruby" != "xno"],
568         [
569         AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
570         AC_CHECK_PROG([RAKE],[rake],[rake],[no])
571         ])
572 AM_CONDITIONAL([HAVE_RUBY],
573     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
574
575 dnl Check for Java.
576 AC_ARG_WITH(java_home,
577     [AS_HELP_STRING([--with-java-home],
578         [specify path to JDK directory @<:@default=check@:>@])],
579     [],
580     [with_java_home=check])
581
582 if test "x$with_java_home" != "xno"; then
583     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
584     then
585         # Reject unsafe characters in $JAVA_HOME
586         jh_lf='
587 '
588         case $JAVA_HOME in
589           *[\\\"\#\$\&\'\`$jh_lf\ \     ]*)
590             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
591         esac
592         if test -d "$with_java_home"; then
593             JAVA_HOME="$with_java_home"
594         else
595             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
596         fi
597     fi
598
599     if test "x$JAVA_HOME" = "x"; then
600         # Look for Java in some likely locations.
601         for d in \
602             /usr/lib/jvm/java \
603             /usr/lib/jvm/java-6-openjdk
604         do
605             if test -d $d && test -f $d/bin/java; then
606                 JAVA_HOME=$d
607                 break
608             fi
609         done
610     fi
611
612     if test "x$JAVA_HOME" != "x"; then
613         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
614         if test ! -x "$JAVA_HOME/bin/java"; then
615             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
616         else
617             JAVA="$JAVA_HOME/bin/java"
618         fi
619         if test ! -x "$JAVA_HOME/bin/javac"; then
620             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
621         else
622             JAVAC="$JAVA_HOME/bin/javac"
623         fi
624         if test ! -x "$JAVA_HOME/bin/javah"; then
625             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
626         else
627             JAVAH="$JAVA_HOME/bin/javah"
628         fi
629         if test ! -x "$JAVA_HOME/bin/javadoc"; then
630             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
631         else
632             JAVADOC="$JAVA_HOME/bin/javadoc"
633         fi
634         if test ! -x "$JAVA_HOME/bin/jar"; then
635             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
636         else
637             JAR="$JAVA_HOME/bin/jar"
638         fi
639         java_version=`$JAVA -version 2>&1 | grep "java version"`
640         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
641
642         dnl Find jni.h.
643         AC_MSG_CHECKING([for jni.h])
644         if test -f "$JAVA_HOME/include/jni.h"; then
645             JNI_CFLAGS="-I$JAVA_HOME/include"
646         else
647             if test "`find $JAVA_HOME -name jni.h`" != ""; then
648                 head=`find $JAVA_HOME -name jni.h | tail -1`
649                 dir=`dirname "$head"`
650                 JNI_CFLAGS="-I$dir"
651             else
652                 AC_MSG_FAILURE([missing jni.h header file])
653             fi
654         fi
655         AC_MSG_RESULT([$JNI_CFLAGS])
656
657         dnl Find jni_md.h.
658         AC_MSG_CHECKING([for jni_md.h])
659         case "$build_os" in
660         *linux*) system="linux" ;;
661         *SunOS*) system="solaris" ;;
662         *cygwin*) system="win32" ;;
663         *) system="$build_os" ;;
664         esac
665         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
666             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
667         else
668             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
669                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
670                 dir=`dirname "$head"`
671                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
672             else
673                 AC_MSG_FAILURE([missing jni_md.h header file])
674             fi
675         fi
676         AC_MSG_RESULT([$JNI_CFLAGS])
677
678         dnl Need extra version flag?
679         AC_MSG_CHECKING([extra javac flags])
680         JAVAC_FLAGS=
681         javac_version=`$JAVAC -version 2>&1`
682         case "$javac_version" in
683         *Eclipse*)
684             JAVAC_FLAGS="-source 1.5" ;;
685         esac
686         AC_MSG_RESULT([$JAVAC_FLAGS])
687
688         dnl Where to install jarfiles.
689         dnl XXX How to make it configurable?
690         JAR_INSTALL_DIR=\${prefix}/share/java
691         JNI_INSTALL_DIR=\${libdir}
692
693         dnl JNI version.
694         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
695         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
696         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
697         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
698     fi
699 fi
700
701 AC_SUBST(JAVA_HOME)
702 AC_SUBST(JAVA)
703 AC_SUBST(JAVAC)
704 AC_SUBST(JAVAH)
705 AC_SUBST(JAVADOC)
706 AC_SUBST(JAR)
707 AC_SUBST(JNI_CFLAGS)
708 AC_SUBST(JAVAC_FLAGS)
709 AC_SUBST(JAR_INSTALL_DIR)
710 AC_SUBST(JNI_INSTALL_DIR)
711 AC_SUBST(JNI_VERSION_INFO)
712
713 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
714
715 dnl Check for Haskell (GHC).
716 GHC=no
717 AC_ARG_ENABLE([haskell],
718         AS_HELP_STRING([--disable-haskell], [Disable Haskell language bindings]),
719         [],
720         [enable_haskell=yes])
721 AS_IF([test "x$enable_haskell" != "xno"],
722         [
723         GHC=
724         AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
725         ])
726 AM_CONDITIONAL([HAVE_HASKELL],
727     [test "x$GHC" != "xno"])
728
729 dnl PHP
730 PHP=no
731 AC_ARG_ENABLE([php],
732         AS_HELP_STRING([--disable-php], [Disable PHP language bindings]),
733         [],
734         [enable_php=yes])
735 AS_IF([test "x$enable_php" != "xno"],
736         [
737         PHP=
738         AC_CHECK_PROG([PHP],[php],[php],[no])
739         AC_CHECK_PROG([PHPIZE],[phpize],[phpize],[no])
740         ])
741 AM_CONDITIONAL([HAVE_PHP], [test "x$PHP" != "xno" && test "x$PHPIZE" != "xno"])
742
743 dnl Check for Perl modules needed by Perl virt tools (virt-df, etc.)
744 AS_IF([test "x$PERL" != "xno"],
745         [
746         missing_perl_modules=no
747         for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper Locale::TextDomain Win::Hivex Win::Hivex::Regedit String::ShellQuote; do
748             AC_MSG_CHECKING([for $pm])
749             if ! $PERL -M$pm -e1 >/dev/null 2>&1; then
750                 AC_MSG_RESULT([no])
751                 missing_perl_modules=yes
752             else
753                 AC_MSG_RESULT([yes])
754             fi
755         done
756         if test "x$missing_perl_modules" = "xyes"; then
757             AC_MSG_WARN([some Perl modules required to compile the Perl virt-* tools are missing])
758         fi
759         ])
760
761 AM_CONDITIONAL([HAVE_TOOLS],
762     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
763
764 dnl Library versioning.
765 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
766 AC_SUBST(MAX_PROC_NR)
767
768 dnl Replace libtool with a wrapper that clobbers dependency_libs in *.la files
769 dnl http://lists.fedoraproject.org/pipermail/devel/2010-November/146343.html
770 LIBTOOL='$(SHELL) $(top_srcdir)/libtool-kill-dependency_libs.sh $(top_builddir)/libtool'
771 AC_SUBST([LIBTOOL])
772
773 dnl Run in subdirs.
774 if test "x$enable_daemon" = "xyes"; then
775     AC_CONFIG_SUBDIRS([daemon])
776 fi
777
778 dnl Produce output files.
779 AC_CONFIG_HEADERS([config.h])
780 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
781 AC_CONFIG_FILES([podwrapper.sh],
782                 [chmod +x podwrapper.sh])
783 AC_CONFIG_FILES([Makefile
784                  generator/Makefile
785                  src/Makefile fish/Makefile po/Makefile.in examples/Makefile
786                  appliance/Makefile
787                  images/Makefile
788                  capitests/Makefile
789                  regressions/Makefile
790                  test-tool/Makefile
791                  ocaml/Makefile ocaml/examples/Makefile
792                  perl/Makefile
793                  python/Makefile python/examples/Makefile
794                  ruby/Makefile ruby/Rakefile ruby/examples/Makefile
795                  java/Makefile
796                  haskell/Makefile
797                  inspector/Makefile
798                  tools/Makefile
799                  libguestfs.pc
800                  gnulib/lib/Makefile
801                  gnulib/tests/Makefile
802                  fuse/Makefile
803                  po-docs/Makefile
804                  po-docs/ja/Makefile
805                  php/Makefile
806                  csharp/Makefile
807                  cat/Makefile
808                  df/Makefile
809                  rescue/Makefile
810                  debian/changelog
811                  ocaml/META perl/Makefile.PL])
812 AC_OUTPUT
813
814 dnl Produce summary.
815 echo
816 echo
817 echo "------------------------------------------------------------"
818 echo "Thank you for downloading $PACKAGE_STRING"
819 echo
820 echo "This is how we have configured the optional components for you today:"
821 echo
822 echo    "Daemon .............................. $enable_daemon"
823 echo    "Appliance ........................... $enable_appliance"
824 echo    "QEMU ................................ $QEMU"
825 echo -n "OCaml bindings ...................... "
826 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
827 echo -n "Perl bindings ....................... "
828 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
829 echo -n "Python bindings ..................... "
830 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
831 echo -n "Ruby bindings ....................... "
832 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
833 echo -n "Java bindings ....................... "
834 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
835 echo -n "Haskell bindings .................... "
836 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
837 echo -n "PHP bindings ........................ "
838 if test "x$HAVE_PHP_TRUE" = "x"; then echo "yes"; else echo "no"; fi
839 echo -n "virt-* tools ........................ "
840 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
841 echo "FUSE filesystem ..................... $enable_fuse"
842 echo
843 echo "If any optional component is configured 'no' when you expected 'yes'"
844 echo "then you should check the preceeding messages."
845 echo
846 echo "Please report bugs back to the mailing list:"
847 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
848 echo
849 echo "Next you should type 'make' to build the package,"
850 echo "then 'make check' to run the tests."
851 echo "------------------------------------------------------------"