ruby: Fix typo in Ruby bindings file.
[libguestfs.git] / configure.ac
1 # libguestfs
2 # Copyright (C) 2009-2011 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],   [13])
21 m4_define([libguestfs_release], [4])
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   nw="$nw -Wmissing-noreturn"       # Don't warn about missed noreturn funcs
111                                     # (seen on Ubuntu).
112
113   gl_MANYWARN_ALL_GCC([ws])
114   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
115   for w in $ws; do
116     gl_WARN_ADD([$w])
117   done
118   gl_WARN_ADD([-Wno-unused-parameter]) # stubs.c
119   gl_WARN_ADD([-Wno-jump-misses-init]) # stubs.c
120   gl_WARN_ADD([-Wno-unused-variable]) # FIXME: only temporary, for guestfs_protocol.c, etc
121
122   # In spite of excluding -Wlogical-op above, it is enabled, as of
123   # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
124   gl_WARN_ADD([-Wno-logical-op])
125
126   # Work around warning in src/inspect.c.  This seems to be a bug in gcc 4.5.1.
127   gl_WARN_ADD([-Wno-strict-overflow])
128
129   gl_WARN_ADD([-fdiagnostics-show-option])
130
131   AC_SUBST([WARN_CFLAGS])
132
133   AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
134   AC_DEFINE([_FORTIFY_SOURCE], [2],
135     [enable compile-time and run-time bounds-checking, and some warnings])
136   AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
137 fi
138
139 AC_C_PROTOTYPES
140 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
141
142 AM_PROG_CC_C_O
143
144 dnl Work out how to specify the linker script to the linker.
145 VERSION_SCRIPT_FLAGS=-Wl,--version-script=
146 `/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
147     VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
148 AC_SUBST(VERSION_SCRIPT_FLAGS)
149
150 dnl Check support for 64 bit file offsets.
151 AC_SYS_LARGEFILE
152
153 dnl Check sizeof long.
154 AC_CHECK_SIZEOF([long])
155
156 dnl Check if dirent (readdir) supports d_type member.
157 AC_STRUCT_DIRENT_D_TYPE
158
159 dnl Check if stat has the required fields.
160 AC_STRUCT_ST_BLOCKS
161 AC_CHECK_MEMBER([struct stat.st_blksize],[
162         AC_DEFINE([HAVE_STRUCT_STAT_ST_BLKSIZE],[1],[Define to 1 if 'st_blksize' is a member of 'struct stat'])])
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([\
169         attr/xattr.h \
170         byteswap.h \
171         endian.h \
172         errno.h \
173         printf.h \
174         sys/inotify.h \
175         sys/socket.h \
176         sys/statvfs.h \
177         sys/types.h \
178         sys/un.h \
179         sys/wait.h \
180         windows.h \
181         sys/xattr.h])
182
183 dnl Functions.
184 AC_CHECK_FUNCS([\
185         futimens \
186         getxattr \
187         htonl \
188         htons \
189         inotify_init1 \
190         lgetxattr \
191         listxattr \
192         llistxattr \
193         lsetxattr \
194         lremovexattr \
195         mknod \
196         ntohl \
197         ntohs \
198         posix_fallocate \
199         realpath \
200         removexattr \
201         setitimer \
202         setxattr \
203         sigaction \
204         statvfs \
205         sync])
206
207 dnl For modified printf in the daemon, we need glibc either (old-style)
208 dnl register_printf_function or (new-style) register_printf_specifier.
209 AC_CHECK_FUNC([register_printf_specifier],[
210         AC_DEFINE([HAVE_REGISTER_PRINTF_SPECIFIER],[1],
211                 [Define to 1 if you have new-style register_printf_specifier])
212         ],[
213         AC_CHECK_FUNC([register_printf_function],[
214                 AC_DEFINE([HAVE_REGISTER_PRINTF_FUNCTION],[1],
215                         [Define to 1 if you have old-style register_printf_function])
216                 ],[
217                 AC_MSG_FAILURE(
218 [No support for glibc-style extended printf formatters.
219
220 This means you either have a very old glibc (pre-2.0) or you
221 are using some other libc where this is not supported.])])])
222
223 dnl Build the daemon?
224 AC_MSG_CHECKING([if we should build the daemon])
225 AC_ARG_ENABLE([daemon],
226         [AS_HELP_STRING([--enable-daemon],
227           [enable building the daemon @<:@default=yes@:>@])],
228         [],
229         [enable_daemon=yes])
230 AM_CONDITIONAL([ENABLE_DAEMON],[test "x$enable_daemon" = "xyes"])
231 AC_MSG_RESULT([$enable_daemon])
232
233 if test "x$enable_daemon" = "xyes"; then
234         dnl Install the daemon (for libguestfs live service)
235         AC_MSG_CHECKING([if we should install the daemon])
236         AC_ARG_ENABLE([install-daemon],
237                 [AS_HELP_STRING([--enable-install-daemon],
238                   [enable installing the daemon under $sbindir @<:@default=no@:>@])],
239                 [],
240                 [enable_install_daemon=no])
241         AM_CONDITIONAL([INSTALL_DAEMON],[test "x$enable_install_daemon" = "xyes"])
242         AC_MSG_RESULT([$enable_install_daemon])
243 fi
244
245 dnl Build the appliance?
246 AC_MSG_CHECKING([if we should build the appliance])
247 AC_ARG_ENABLE([appliance],
248         [AS_HELP_STRING([--enable-appliance],
249           [enable building the appliance @<:@default=yes@:>@])],
250         [],
251         [enable_appliance=yes])
252 AM_CONDITIONAL([ENABLE_APPLIANCE],[test "x$enable_appliance" = "xyes"])
253 AC_MSG_RESULT([$enable_appliance])
254
255 if test "x$enable_appliance" = "xyes"; then
256     dnl Check for febootstrap >= 3.0
257     AC_CHECK_PROG([FEBOOTSTRAP],
258                   [febootstrap],[febootstrap],[no])
259     test "x$FEBOOTSTRAP" = "xno" &&
260         AC_MSG_ERROR([febootstrap must be installed])
261     dnl febootstrap 2.x did not support the --version parameter
262     $FEBOOTSTRAP --version >&AS_MESSAGE_LOG_FD 2>&1 ||
263         AC_MSG_ERROR([febootstrap >= 3.0 must be installed, your version is too old])
264
265     dnl Pass a febootstrap --yum-config option.
266     AC_MSG_CHECKING([if user requested febootstrap --yum-config option])
267     AC_ARG_WITH([febootstrap-yum-config],
268         [AS_HELP_STRING([--with-febootstrap-yum-config=FILE],
269           [pass febootstrap --yum-config option @<:@default=no@:>@])],
270         [FEBOOTSTRAP_YUM_CONFIG="$withval"],
271         [FEBOOTSTRAP_YUM_CONFIG=no])
272     AC_MSG_RESULT([$FEBOOTSTRAP_YUM_CONFIG])
273     AC_SUBST([FEBOOTSTRAP_YUM_CONFIG])
274
275     dnl Which distro?
276     dnl
277     dnl This used to be Very Important but is now just used to select
278     dnl which packages to install in the appliance, since the package
279     dnl names vary slightly across distros.  (See
280     dnl appliance/packagelist.in and appliance/excludelist.in)
281     AC_MSG_CHECKING([which Linux distro for package names])
282     DISTRO=REDHAT
283     if test -f /etc/debian_version; then
284         DISTRO=DEBIAN
285         if grep -q 'DISTRIB_ID=Ubuntu' /etc/lsb-release 2>&AS_MESSAGE_LOG_FD; then
286             DISTRO=UBUNTU
287         fi
288     fi
289     if test -f /etc/arch-release; then
290         DISTRO=ARCHLINUX
291     fi
292     AC_MSG_RESULT([$DISTRO])
293     AC_SUBST([DISTRO])
294 fi
295
296 dnl Check for rpcgen and XDR library.  rpcgen is optional.
297 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
298 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
299 AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
300         AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
301         ])
302
303 dnl Check for Augeas (now optional).
304 AC_CHECK_LIB([augeas],[aug_match],[
305         have_augeas=yes
306         AUGEAS_LIB="-laugeas"
307
308         old_LIBS="$LIBS"
309         LIBS="$LIBS $AUGEAS_LIB"
310         dnl Check for functions not available in earlier versions of Augeas.
311         AC_CHECK_FUNCS([aug_load aug_defvar aug_defnode])
312         LIBS="$old_LIBS"
313
314         ],[have_augeas=no])
315 if test "x$have_augeas" = "xyes"; then
316         AC_DEFINE([HAVE_AUGEAS],[1],[Define to 1 if you have Augeas])
317 fi
318 AC_SUBST([AUGEAS_LIB])
319
320 dnl Check for libselinux (optional).
321 AC_CHECK_HEADERS([selinux/selinux.h])
322 AC_CHECK_LIB([selinux],[setexeccon],[
323         have_libselinux="$ac_cv_header_selinux_selinux_h"
324         SELINUX_LIB="-lselinux"
325
326         old_LIBS="$LIBS"
327         LIBS="$LIBS $SELINUX_LIB"
328         AC_CHECK_FUNCS([setcon getcon])
329         LIBS="$old_LIBS"
330
331         ],[have_libselinux=no])
332 if test "x$have_libselinux" = "xyes"; then
333         AC_DEFINE([HAVE_LIBSELINUX],[1],[Define to 1 if you have libselinux])
334 fi
335 AC_SUBST([SELINUX_LIB])
336
337 dnl Check for cpio which isn't in the default Pardus install amazingly.
338 AC_CHECK_PROG([CPIO],[cpio],[cpio],[no])
339 test "x$CPIO" = "xno" &&
340      AC_MSG_ERROR([cpio must be installed])
341
342 dnl Check for gperf.
343 AC_CHECK_PROG([GPERF],[gperf],[gperf],[no])
344 test "x$GPERF" = "xno" &&
345      AC_MSG_ERROR([gperf must be installed])
346
347 dnl Check for pod2man, pod2text, pod2html.
348 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
349 test "x$POD2MAN" = "xno" &&
350      AC_MSG_ERROR([pod2man must be installed])
351 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
352 test "x$POD2TEXT" = "xno" &&
353      AC_MSG_ERROR([pod2text must be installed])
354 AC_CHECK_PROG([POD2HTML],[pod2html],[pod2html],[no])
355 test "x$POD2HTML" = "xno" &&
356      AC_MSG_ERROR([pod2html must be installed])
357
358 dnl Check if pod2man, pod2text take --stderr and -u options (not in RHEL 5).
359 AC_MSG_CHECKING([if pod2man takes --stderr option])
360 if "$POD2MAN" --stderr >&AS_MESSAGE_LOG_FD 2>&1; then
361     AC_MSG_RESULT([yes])
362     POD2_STDERR_OPTION="--stderr"
363 else
364     AC_MSG_RESULT([no])
365     POD2_STDERR_OPTION=""
366 fi
367 AC_SUBST([POD2_STDERR_OPTION])
368
369 AC_MSG_CHECKING([if pod2man takes -u option])
370 if "$POD2MAN" -u >&AS_MESSAGE_LOG_FD 2>&1; then
371     AC_MSG_RESULT([yes])
372     POD2_UTF8_OPTION="-u"
373 else
374     AC_MSG_RESULT([no])
375     POD2_UTF8_OPTION=""
376 fi
377 AC_SUBST([POD2_UTF8_OPTION])
378
379 dnl Check for genisoimage.
380 AC_PATH_PROGS([GENISOIMAGE],[genisoimage],[no],
381         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
382 test "x$GENISOIMAGE" = "xno" && AC_MSG_ERROR([genisoimage must be installed])
383
384 dnl Check for optional xmllint.
385 AC_CHECK_PROG([XMLLINT],[xmllint],[xmllint],[no])
386 AM_CONDITIONAL([HAVE_XMLLINT],[test "x$XMLLINT" != "xno"])
387
388 dnl po4a for translating man pages and POD files (optional).
389 AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
390 AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
391
392 dnl Check for db_dump, db_load (optional).
393 AC_CHECK_PROGS([DB_DUMP],
394                [db_dump db4_dump db4.8_dump db4.7_dump db4.6_dump],[no])
395 AC_CHECK_PROGS([DB_LOAD],
396                [db_load db4_load db4.8_load db4.7_load db4.6_load],[no])
397 if test "x$DB_DUMP" != "xno"; then
398     AC_DEFINE_UNQUOTED([DB_DUMP],["$DB_DUMP"],[Name of db_dump program.])
399 fi
400 if test "x$DB_LOAD" != "xno"; then
401     AC_DEFINE_UNQUOTED([DB_LOAD],["$DB_LOAD"],[Name of db_load program.])
402 fi
403
404 dnl Check for QEMU for running binaries on this $host_cpu, fall
405 dnl back to basic 'qemu'.  Allow the user to override it.
406 default_qemu="qemu-kvm kvm qemu-system-$host_cpu qemu"
407 AC_ARG_WITH([qemu],
408         [AS_HELP_STRING([--with-qemu],
409           [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
410         [],
411         [with_qemu="$default_qemu"])
412 AC_PATH_PROGS([QEMU],[$with_qemu],[no],
413         [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin$PATH_SEPARATOR/usr/libexec])
414 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
415 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
416
417 dnl Check that the chosen qemu has virtio-serial support.
418 if test "x$vmchannel_test" != "xno"; then
419     AC_MSG_CHECKING([that $QEMU -help works])
420     if $QEMU -help >&AS_MESSAGE_LOG_FD 2>&1; then
421         AC_MSG_RESULT([yes])
422     else
423         AC_MSG_RESULT([no])
424         AC_MSG_FAILURE(
425 [$QEMU -help: command failed.
426
427 This could be a very old version of qemu, or qemu might not be
428 working.
429 ])
430     fi
431
432     AC_MSG_CHECKING([for virtio-serial support in $QEMU])
433     if $QEMU -nographic -device \? 2>&1 | grep -sq virtio-serial; then
434         AC_MSG_RESULT([yes])
435     else
436         AC_MSG_RESULT([no])
437         AC_MSG_FAILURE(
438 [I did not find virtio-serial support in
439 $QEMU.
440
441 virtio-serial support in qemu or KVM is essential for libguestfs
442 to operate.
443
444 Usually this means that you have to install a newer version of qemu
445 and/or KVM.  Please read the relevant section in the README file for
446 more information about this.
447
448 You can override this test by setting the environment variable
449 vmchannel_test=no  However if you don't have the right support
450 in your qemu, then this just delays the pain.
451
452 If I am using the wrong qemu or you want to compile qemu from source
453 and install it in another location, then you should configure with
454 the --with-qemu option.
455 ])
456     fi
457 fi
458
459 dnl Set default drive interface used by the guestfs_add_drive_opts call
460 dnl ('-drive ...,if=...' option to qemu).
461 dnl
462 dnl If you encounter performance problems with virtio (RHBZ#509383)
463 dnl then try '--with-drive-if=ide'.
464 AC_ARG_WITH([drive-if],
465         [AS_HELP_STRING([--with-drive-if],
466           [set default driver (ide|scsi|virtio) @<:@default=virtio@:>@])],
467         [],
468         [with_drive_if=virtio])
469 AC_DEFINE_UNQUOTED([DRIVE_IF],["$with_drive_if"],[Default drive interface.])
470
471 dnl Set interface used by the network.  Normally you should
472 dnl leave this at the default (virtio-net-pci) but you can use the
473 dnl alternative (ne2k_pci) because of bugs in virtio networking
474 dnl eg. https://bugzilla.redhat.com/show_bug.cgi?id=516022
475 AC_ARG_WITH([net-if],
476         [AS_HELP_STRING([--with-net-if],
477           [set default net driver (virtio-net-pci|ne2k_pci) @<:@default=virtio-net-pci@:>@])],
478         [],
479         [with_net_if=virtio-net-pci])
480 AC_DEFINE_UNQUOTED([NET_IF],["$with_net_if"],[Default network interface.])
481
482 dnl Enable packet dumps when in verbose mode.  This generates lots
483 dnl of debug info, only useful for people debugging the RPC mechanism.
484 AC_ARG_ENABLE([packet-dump],
485         [AS_HELP_STRING([--enable-packet-dump],
486           [enable packet dumps in verbose mode @<:@default=no@:>@])],
487         [AC_DEFINE([ENABLE_PACKET_DUMP],[1],[Enable packet dumps in verbose mode.])],
488         [])
489
490 dnl Readline.
491 AC_ARG_WITH([readline],
492     [AS_HELP_STRING([--with-readline],
493         [support fancy command line editing @<:@default=check@:>@])],
494     [],
495     [with_readline=check])
496
497 LIBREADLINE=
498 AS_IF([test "x$with_readline" != xno],
499     [AC_CHECK_LIB([readline], [main],
500         [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
501          AC_DEFINE([HAVE_LIBREADLINE], [1],
502                    [Define if you have libreadline])
503         ],
504         [if test "x$with_readline" != xcheck; then
505          AC_MSG_FAILURE(
506              [--with-readline was given, but test for readline failed])
507          fi
508         ], -lncurses)
509      old_LIBS="$LIBS"
510      LIBS="$LIBS $LIBREADLINE"
511      AC_CHECK_FUNCS([append_history completion_matches rl_completion_matches])
512      LIBS="$old_LIBS"
513     ])
514
515 dnl For i18n.
516 AM_GNU_GETTEXT([external])
517
518 dnl Check for PCRE (required)
519 PKG_CHECK_MODULES([PCRE], [libpcre])
520
521 dnl libmagic (highly recommended)
522 AC_CHECK_LIB([magic],[magic_file],
523         [AC_CHECK_HEADER([magic.h],
524                 [AC_SUBST([MAGIC_LIBS], ["-lmagic"])
525                  AC_DEFINE([HAVE_LIBMAGIC],[1],[libmagic found at compile time.])
526                 ], [])
527         ],
528         [AC_MSG_WARN([libmagic not found, some core features will be disabled])])
529
530 dnl libvirt (highly recommended)
531 PKG_CHECK_MODULES([LIBVIRT], [libvirt],
532         [AC_SUBST([LIBVIRT_CFLAGS])
533          AC_SUBST([LIBVIRT_LIBS])
534          AC_DEFINE([HAVE_LIBVIRT],[1],[libvirt found at compile time.])
535         ],
536         [AC_MSG_WARN([libvirt not found, some core features will be disabled])])
537 AM_CONDITIONAL([HAVE_LIBVIRT],[test "x$LIBVIRT_LIBS" != "x"])
538
539 dnl libxml2 (highly recommended)
540 PKG_CHECK_MODULES([LIBXML2], [libxml-2.0],
541         [AC_SUBST([LIBXML2_CFLAGS])
542          AC_SUBST([LIBXML2_LIBS])
543          AC_DEFINE([HAVE_LIBXML2],[1],[libxml2 found at compile time.])
544         ],
545         [AC_MSG_WARN([libxml2 not found, some core features will be disabled])])
546 AM_CONDITIONAL([HAVE_LIBXML2],[test "x$LIBXML2_LIBS" != "x"])
547
548 dnl libconfig (highly recommended)
549 PKG_CHECK_MODULES([LIBCONFIG], [libconfig],
550         [AC_SUBST([LIBCONFIG_CFLAGS])
551          AC_SUBST([LIBCONFIG_LIBS])
552          AC_DEFINE([HAVE_LIBCONFIG],[1],[libconfig found at compile time.])
553         ],
554         [AC_MSG_WARN([libconfig not found, some features will be disabled])])
555 AM_CONDITIONAL([HAVE_LIBCONFIG],[test "x$LIBCONFIG_LIBS" != "x"])
556
557 dnl hivex library (highly recommended)
558 dnl This used to be a part of libguestfs, but was spun off into its
559 dnl own separate upstream project in libguestfs 1.0.85.
560 PKG_CHECK_MODULES([HIVEX], [hivex],
561         [AC_SUBST([HIVEX_CFLAGS])
562          AC_SUBST([HIVEX_LIBS])
563          AC_DEFINE([HAVE_HIVEX],[1],[hivex library found at compile time.])
564         ],
565         [AC_MSG_WARN([hivex not found, some core features will be disabled])])
566 AM_CONDITIONAL([HAVE_HIVEX],[test "x$HIVEX_LIBS" != "x"])
567
568 dnl FUSE is optional to build the FUSE module.
569 AC_ARG_ENABLE([fuse],
570         AS_HELP_STRING([--disable-fuse], [Disable FUSE (guestmount) support]),
571         [],
572         [enable_fuse=yes])
573 AS_IF([test "x$enable_fuse" != "xno"],
574         [PKG_CHECK_MODULES([FUSE],[fuse],,[
575                 enable_fuse=no
576                 AC_MSG_WARN([FUSE library and headers are missing, so optional FUSE module won't be built])])])
577 AM_CONDITIONAL([HAVE_FUSE],[test "x$enable_fuse" != "xno"])
578
579 dnl Check for OCaml (optional, for OCaml bindings).
580 OCAMLC=no
581 OCAMLFIND=no
582 AC_ARG_ENABLE([ocaml],
583         AS_HELP_STRING([--disable-ocaml], [Disable OCaml language bindings]),
584         [],
585         [enable_ocaml=yes])
586 AS_IF([test "x$enable_ocaml" != "xno"],
587         [dnl OCAMLC and OCAMLFIND have to be unset first, otherwise
588          dnl AC_CHECK_TOOL (inside AC_PROG_OCAML) will not look.
589          OCAMLC=
590          OCAMLFIND=
591          AC_PROG_OCAML
592          AC_PROG_FINDLIB
593
594          AS_IF([test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"],
595                 [AC_CHECK_OCAML_PKG([pcre])])
596         ])
597 AM_CONDITIONAL([HAVE_OCAML],
598                [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
599 AM_CONDITIONAL([HAVE_OCAML_PCRE],
600                [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno" && test "x$OCAML_PKG_pcre" != "xno"])
601 AM_CONDITIONAL([HAVE_OCAMLDOC],
602                [test "x$OCAMLDOC" != "xno"])
603
604 dnl Check for Perl (optional, for Perl bindings).
605 PERL=no
606 AC_ARG_ENABLE([perl],
607         AS_HELP_STRING([--disable-perl], [Disable Perl language bindings]),
608         [],
609         [enable_perl=yes])
610 AS_IF([test "x$enable_perl" != "xno"],
611         [
612         PERL=
613         AC_CHECK_PROG([PERL],[perl],[perl],[no])
614
615         dnl Check for Perl modules that must be present to compile and
616         dnl test the Perl bindings.
617         missing_perl_modules=no
618         for pm in Test::More ExtUtils::MakeMaker; do
619             AC_MSG_CHECKING([for $pm])
620             if ! perl -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
621                 AC_MSG_RESULT([no])
622                 missing_perl_modules=yes
623             else
624                 AC_MSG_RESULT([yes])
625             fi
626         done
627         if test "x$missing_perl_modules" = "xyes"; then
628             AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
629         fi
630         ])
631 AM_CONDITIONAL([HAVE_PERL],
632     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
633
634 dnl Check for Python (optional, for Python bindings).
635 PYTHON_PREFIX=
636 PYTHON_VERSION=
637 PYTHON_INCLUDEDIR=
638 PYTHON_INSTALLDIR=
639
640 AC_ARG_ENABLE([python],
641         AS_HELP_STRING([--disable-python], [Disable Python language bindings]),
642         [],
643         [enable_python=yes])
644 AS_IF([test "x$enable_python" != "xno"],
645         [
646         AC_CHECK_PROG([PYTHON],[python],[python],[no])
647
648         if test "x$PYTHON" != "xno"; then
649             AC_MSG_CHECKING([Python prefix])
650             PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
651             AC_MSG_RESULT([$PYTHON_PREFIX])
652
653             AC_MSG_CHECKING([Python version])
654             PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
655             AC_MSG_RESULT([$PYTHON_VERSION])
656
657             AC_MSG_CHECKING([for Python include path])
658             if test -z "$PYTHON_INCLUDEDIR"; then
659                 python_path=`$PYTHON -c "import distutils.sysconfig; \
660                                          print (distutils.sysconfig.get_python_inc ());"`
661                 PYTHON_INCLUDEDIR=$python_path
662             fi
663             AC_MSG_RESULT([$PYTHON_INCLUDEDIR])
664
665             AC_ARG_WITH([python-installdir],
666                         [AS_HELP_STRING([--with-python-installdir],
667                                         [directory to install python modules @<:@default=check@:>@])],
668                         [PYTHON_INSTALLDIR="$withval"
669                         AC_MSG_NOTICE([Python install dir $PYTHON_INSTALLDIR])],
670                         [PYTHON_INSTALLDIR=check])
671
672             if test "x$PYTHON_INSTALLDIR" = "xcheck"; then
673                 PYTHON_INSTALLDIR=
674                 AC_MSG_CHECKING([for Python site-packages path])
675                 if test -z "$PYTHON_INSTALLDIR"; then
676                     PYTHON_INSTALLDIR=`$PYTHON -c "import distutils.sysconfig; \
677                                                    print (distutils.sysconfig.get_python_lib(1,0));"`
678                 fi
679                 AC_MSG_RESULT([$PYTHON_INSTALLDIR])
680             fi
681
682             old_LIBS="$LIBS"
683             LIBS="$LIBS -lpython$PYTHON_VERSION"
684             AC_CHECK_FUNCS([PyCapsule_New])
685             LIBS="$old_LIBS"
686         fi
687
688         AC_SUBST(PYTHON_PREFIX)
689         AC_SUBST(PYTHON_VERSION)
690         AC_SUBST(PYTHON_INCLUDEDIR)
691         AC_SUBST(PYTHON_INSTALLDIR)
692         ])
693 AM_CONDITIONAL([HAVE_PYTHON],
694     [test "x$PYTHON" != "xno" && test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_INSTALLDIR" != "x"])
695
696 dnl Check for Ruby and rake (optional, for Ruby bindings).
697 AC_ARG_ENABLE([ruby],
698         AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
699         [],
700         [enable_ruby=yes])
701 AS_IF([test "x$enable_ruby" != "xno"],
702         [
703         AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
704         AC_CHECK_PROG([RAKE],[rake],[rake],[no])
705         ])
706 AM_CONDITIONAL([HAVE_RUBY],
707     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
708
709 dnl Check for Java.
710 AC_ARG_WITH(java_home,
711     [AS_HELP_STRING([--with-java-home],
712         [specify path to JDK directory @<:@default=check@:>@])],
713     [],
714     [with_java_home=check])
715
716 if test "x$with_java_home" != "xno"; then
717     if test "x$with_java_home" != "xyes" && test "x$with_java_home" != "xcheck"
718     then
719         # Reject unsafe characters in $JAVA_HOME
720         jh_lf='
721 '
722         case $JAVA_HOME in
723           *[\\\"\#\$\&\'\`$jh_lf\ \     ]*)
724             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
725         esac
726         if test -d "$with_java_home"; then
727             JAVA_HOME="$with_java_home"
728         else
729             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
730         fi
731     fi
732
733     if test "x$JAVA_HOME" = "x"; then
734         # Look for Java in some likely locations.
735         for d in \
736             /usr/lib/jvm/java \
737             /usr/lib/jvm/java-6-openjdk
738         do
739             if test -d $d && test -f $d/bin/java; then
740                 JAVA_HOME=$d
741                 break
742             fi
743         done
744     fi
745
746     if test "x$JAVA_HOME" != "x"; then
747         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
748         if test ! -x "$JAVA_HOME/bin/java"; then
749             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
750         else
751             JAVA="$JAVA_HOME/bin/java"
752         fi
753         if test ! -x "$JAVA_HOME/bin/javac"; then
754             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
755         else
756             JAVAC="$JAVA_HOME/bin/javac"
757         fi
758         if test ! -x "$JAVA_HOME/bin/javah"; then
759             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
760         else
761             JAVAH="$JAVA_HOME/bin/javah"
762         fi
763         if test ! -x "$JAVA_HOME/bin/javadoc"; then
764             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
765         else
766             JAVADOC="$JAVA_HOME/bin/javadoc"
767         fi
768         if test ! -x "$JAVA_HOME/bin/jar"; then
769             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
770         else
771             JAR="$JAVA_HOME/bin/jar"
772         fi
773         java_version=`$JAVA -version 2>&1 | grep "java version"`
774         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
775
776         dnl Find jni.h.
777         AC_MSG_CHECKING([for jni.h])
778         if test -f "$JAVA_HOME/include/jni.h"; then
779             JNI_CFLAGS="-I$JAVA_HOME/include"
780         else
781             if test "`find $JAVA_HOME -name jni.h`" != ""; then
782                 head=`find $JAVA_HOME -name jni.h | tail -1`
783                 dir=`dirname "$head"`
784                 JNI_CFLAGS="-I$dir"
785             else
786                 AC_MSG_FAILURE([missing jni.h header file])
787             fi
788         fi
789         AC_MSG_RESULT([$JNI_CFLAGS])
790
791         dnl Find jni_md.h.
792         AC_MSG_CHECKING([for jni_md.h])
793         case "$build_os" in
794         *linux*) system="linux" ;;
795         *SunOS*) system="solaris" ;;
796         *cygwin*) system="win32" ;;
797         *) system="$build_os" ;;
798         esac
799         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
800             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
801         else
802             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
803                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
804                 dir=`dirname "$head"`
805                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
806             else
807                 AC_MSG_FAILURE([missing jni_md.h header file])
808             fi
809         fi
810         AC_MSG_RESULT([$JNI_CFLAGS])
811
812         dnl Need extra version flag?
813         AC_MSG_CHECKING([extra javac flags])
814         JAVAC_FLAGS=
815         javac_version=`$JAVAC -version 2>&1`
816         case "$javac_version" in
817         *Eclipse*)
818             JAVAC_FLAGS="-source 1.5" ;;
819         esac
820         AC_MSG_RESULT([$JAVAC_FLAGS])
821
822         dnl Where to install jarfiles.
823         dnl XXX How to make it configurable?
824         JAR_INSTALL_DIR=\${prefix}/share/java
825         JNI_INSTALL_DIR=\${libdir}
826
827         dnl JNI version.
828         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
829         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
830         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
831         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
832     fi
833 fi
834
835 AC_SUBST(JAVA_HOME)
836 AC_SUBST(JAVA)
837 AC_SUBST(JAVAC)
838 AC_SUBST(JAVAH)
839 AC_SUBST(JAVADOC)
840 AC_SUBST(JAR)
841 AC_SUBST(JNI_CFLAGS)
842 AC_SUBST(JAVAC_FLAGS)
843 AC_SUBST(JAR_INSTALL_DIR)
844 AC_SUBST(JNI_INSTALL_DIR)
845 AC_SUBST(JNI_VERSION_INFO)
846
847 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
848
849 dnl Check for Haskell (GHC).
850 GHC=no
851 AC_ARG_ENABLE([haskell],
852         AS_HELP_STRING([--disable-haskell], [Disable Haskell language bindings]),
853         [],
854         [enable_haskell=yes])
855 AS_IF([test "x$enable_haskell" != "xno"],
856         [
857         GHC=
858         AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
859         ])
860 AM_CONDITIONAL([HAVE_HASKELL],
861     [test "x$GHC" != "xno"])
862
863 dnl PHP
864 PHP=no
865 AC_ARG_ENABLE([php],
866         AS_HELP_STRING([--disable-php], [Disable PHP language bindings]),
867         [],
868         [enable_php=yes])
869 AS_IF([test "x$enable_php" != "xno"],
870         [
871         PHP=
872         AC_CHECK_PROG([PHP],[php],[php],[no])
873         AC_CHECK_PROG([PHPIZE],[phpize],[phpize],[no])
874         ])
875 AM_CONDITIONAL([HAVE_PHP], [test "x$PHP" != "xno" && test "x$PHPIZE" != "xno"])
876
877 dnl Check for Perl modules needed by Perl virt tools (virt-df, etc.)
878 AS_IF([test "x$PERL" != "xno"],
879         [
880         missing_perl_modules=no
881         for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper Locale::TextDomain Win::Hivex Win::Hivex::Regedit String::ShellQuote; do
882             AC_MSG_CHECKING([for $pm])
883             if ! $PERL -M$pm -e1 >&AS_MESSAGE_LOG_FD 2>&1; then
884                 AC_MSG_RESULT([no])
885                 missing_perl_modules=yes
886             else
887                 AC_MSG_RESULT([yes])
888             fi
889         done
890         if test "x$missing_perl_modules" = "xyes"; then
891             AC_MSG_WARN([some Perl modules required to compile the Perl virt-* tools are missing])
892         fi
893         ])
894
895 AM_CONDITIONAL([HAVE_TOOLS],
896     [test "x$PERL" != "xno" && test "x$missing_perl_modules" != "xyes"])
897
898 dnl Library versioning.
899 MAX_PROC_NR=`cat $srcdir/src/MAX_PROC_NR`
900 AC_SUBST(MAX_PROC_NR)
901
902 dnl Replace libtool with a wrapper that clobbers dependency_libs in *.la files
903 dnl http://lists.fedoraproject.org/pipermail/devel/2010-November/146343.html
904 LIBTOOL='bash $(top_srcdir)/libtool-kill-dependency_libs.sh $(top_builddir)/libtool'
905 AC_SUBST([LIBTOOL])
906
907 dnl Produce output files.
908 AC_CONFIG_HEADERS([config.h])
909 dnl http://www.mail-archive.com/automake@gnu.org/msg10204.html
910 AC_CONFIG_FILES([podwrapper.sh],
911                 [chmod +x podwrapper.sh])
912 AC_CONFIG_FILES([Makefile
913                  appliance/Makefile
914                  capitests/Makefile
915                  cat/Makefile
916                  caution/Makefile
917                  csharp/Makefile
918                  daemon/Makefile
919                  debian/changelog
920                  df/Makefile
921                  edit/Makefile
922                  examples/Makefile
923                  fish/Makefile
924                  fuse/Makefile
925                  generator/Makefile
926                  gnulib/lib/Makefile
927                  gnulib/tests/Makefile
928                  haskell/Makefile
929                  images/Makefile
930                  inspector/Makefile
931                  java/Makefile
932                  java/examples/Makefile
933                  libguestfs.pc
934                  ocaml/META
935                  ocaml/Makefile
936                  ocaml/examples/Makefile
937                  perl/Makefile
938                  perl/Makefile.PL
939                  perl/examples/Makefile
940                  php/Makefile
941                  po-docs/Makefile
942                  po-docs/ja/Makefile
943                  po-docs/uk/Makefile
944                  po/Makefile.in
945                  python/Makefile
946                  python/examples/Makefile
947                  regressions/Makefile
948                  rescue/Makefile
949                  resize/Makefile
950                  ruby/Makefile
951                  ruby/Rakefile
952                  ruby/examples/Makefile
953                  src/Makefile
954                  test-tool/Makefile
955                  tools/Makefile])
956 AC_OUTPUT
957
958 dnl Produce summary.
959 echo
960 echo
961 echo "------------------------------------------------------------"
962 echo "Thank you for downloading $PACKAGE_STRING"
963 echo
964 echo "This is how we have configured the optional components for you today:"
965 echo
966 echo    "Daemon .............................. $enable_daemon"
967 echo    "Appliance ........................... $enable_appliance"
968 echo    "QEMU ................................ $QEMU"
969 echo -n "OCaml bindings ...................... "
970 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
971 echo -n "Perl bindings ....................... "
972 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
973 echo -n "Python bindings ..................... "
974 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
975 echo -n "Ruby bindings ....................... "
976 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
977 echo -n "Java bindings ....................... "
978 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
979 echo -n "Haskell bindings .................... "
980 if test "x$HAVE_HASKELL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
981 echo -n "PHP bindings ........................ "
982 if test "x$HAVE_PHP_TRUE" = "x"; then echo "yes"; else echo "no"; fi
983 echo    "guestfish and C virt tools .......... yes"
984 echo -n "Perl virt tools ..................... "
985 if test "x$HAVE_TOOLS_TRUE" = "x"; then echo "yes"; else echo "no"; fi
986 echo -n "virt-resize ......................... "
987 if test "x$HAVE_OCAML_TRUE" = "x" && test "x$HAVE_OCAML_PCRE_TRUE" = "x"; then echo "yes"; else echo "no"; fi
988 echo "FUSE filesystem ..................... $enable_fuse"
989 echo
990 echo "If any optional component is configured 'no' when you expected 'yes'"
991 echo "then you should check the preceeding messages."
992 echo
993 echo "Please report bugs back to the mailing list:"
994 echo "http://www.redhat.com/mailman/listinfo/libguestfs"
995 echo
996 echo "Next you should type 'make' to build the package,"
997 echo "then 'make check' to run the tests."
998 echo "------------------------------------------------------------"