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