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