2 # Copyright (C) 2009 Red Hat Inc.
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.
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.
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.
18 AC_INIT([libguestfs],[1.0.48])
21 AC_CONFIG_MACRO_DIR([m4])
25 dnl Check for basic C environment.
31 test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
35 dnl Check support for 64 bit file offsets.
38 dnl Check sizeof long.
39 AC_CHECK_SIZEOF([long])
42 AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h])
44 dnl Check for rpcgen and XDR library. rpcgen is optional.
45 AC_CHECK_PROG([RPCGEN],[rpcgen],[rpcgen],[no])
46 AM_CONDITIONAL([HAVE_RPCGEN],[test "x$RPCGEN" != "xno"])
47 AC_CHECK_LIB([portablexdr],[xdrmem_create],[],[
48 AC_SEARCH_LIBS([xdrmem_create],[rpc xdr nsl])
51 dnl Check for pod2man and pod2text.
52 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
53 test "x$POD2MAN" = "xno" &&
54 AC_MSG_ERROR([pod2man must be installed])
55 AC_CHECK_PROG([POD2TEXT],[pod2text],[pod2text],[no])
56 test "x$POD2TEXT" = "xno" &&
57 AC_MSG_ERROR([pod2text must be installed])
59 dnl Check for mksquashfs.
60 AC_PATH_PROGS([MKSQUASHFS],[mksquashfs],[no],
61 [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
62 test "x$MKSQUASHFS" = "xno" && AC_MSG_ERROR([mksquashfs must be installed])
64 dnl Check for QEMU for running binaries on this $host_cpu, fall
65 dnl back to basic 'qemu'. Allow the user to override it.
66 default_qemu="qemu-kvm qemu-system-$host_cpu qemu"
68 [AS_HELP_STRING([--with-qemu],
69 [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
71 [with_qemu="$default_qemu"])
72 AC_PATH_PROGS([QEMU],[$with_qemu],[no],
73 [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
74 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
75 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
77 dnl Check that the chosen qemu has vmchannel support.
78 dnl http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg01042.html
79 if test "x$vmchannel_test" != "xno"; then
80 AC_MSG_CHECKING([for vmchannel support in $QEMU])
81 vmchannelout=`$QEMU -net channel /dev/zero 2>&1 ||:`
82 echo "vmchannel test command output: $vmchannelout" >&AS_MESSAGE_LOG_FD
83 if ! echo $vmchannelout | grep -sq "vmchannel wrong port number" ; then
86 [I did not find vmchannel support in $QEMU.
88 vmchannel support is vital for libguestfs to operate. You need a version
89 of qemu >= 0.10, or the following patch backported to earlier versions:
91 http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg01042.html
93 You can override this test by setting the environment variable
94 vmchannel_test=no However if you don't have vmchannel support
95 in your qemu, then this just delays the pain.
97 If I am using the wrong qemu or you want to compile qemu from source
98 and install it in another location, then you should configure with
99 the --with-qemu option.
105 dnl Check for febootstrap etc.
106 AC_CHECK_PROG([FEBOOTSTRAP],
107 [febootstrap],[febootstrap],[no])
108 test "x$FEBOOTSTRAP" = "xno" && \
109 AC_MSG_ERROR([febootstrap must be installed])
110 AC_CHECK_PROG([FEBOOTSTRAP_RUN],
111 [febootstrap-run],[febootstrap-run],[no])
112 test "x$FEBOOTSTRAP_RUN" = "xno" && \
113 AC_MSG_ERROR([febootstrap-run must be installed])
114 AC_CHECK_PROG([FEBOOTSTRAP_INSTALL],
115 [febootstrap-install],[febootstrap-install],[no])
116 test "x$FEBOOTSTRAP_INSTALL" = "xno" && \
117 AC_MSG_ERROR([febootstrap-install must be installed])
118 AC_CHECK_PROG([FEBOOTSTRAP_MINIMIZE],
119 [febootstrap-minimize],[febootstrap-minimize],[no])
120 test "x$FEBOOTSTRAP_MINIMIZE" = "xno" && \
121 AC_MSG_ERROR([febootstrap-minimize must be installed])
122 AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS],
123 [febootstrap-to-initramfs],[febootstrap-to-initramfs],[no])
124 test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
125 AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
127 dnl Check we have fakechroot >= 2.9 (it's an indirect requirement
128 dnl of febootstrap, but old versions will fail with yum).
129 AC_CHECK_PROG([FAKECHROOT],
130 [fakechroot],[fakechroot],[no])
131 test "x$FAKECHROOT" = "xno" && \
132 AC_MSG_ERROR([fakechroot must be installed])
134 AC_MSG_CHECKING([fakechroot version])
135 fakechroot_version=`$FAKECHROOT --version | awk '{print $3}'`
136 if test -z "$fakechroot_version"; then
137 AC_MSG_RESULT([failed])
138 AC_MSG_WARN([fakechroot --version command failed, proceeding anyway])
140 AC_MSG_RESULT([$fakechroot_version])
141 fakechroot_major=`echo $fakechroot_version | awk -F. '{print $1}'`
142 fakechroot_minor=`echo $fakechroot_version | awk -F. '{print $2}'`
143 if test "$fakechroot_major" -lt 2 -o \
144 \( "$fakechroot_major" -eq 2 -a "$fakechroot_minor" -lt 9 \); then
145 AC_MSG_ERROR([fakechroot version must be >= 2.9])
149 dnl --with-repo to specify a Fedora repository.
151 [AS_HELP_STRING([--with-repo],
152 [set name of Fedora repository @<:@default=fedora-11@:>@])],
154 [with_repo=fedora-11])
157 AC_DEFINE_UNQUOTED([REPO],["$REPO"],[Name of Fedora repository.])
159 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
161 dnl --with-updates to specify a Fedora updates repository.
162 AC_ARG_WITH([updates],
163 [AS_HELP_STRING([--with-updates],
164 [set name of Fedora updates repository @<:@default=updates-released-f11@:>@])],
166 [with_updates=updates-released-f11])
167 UPDATES="$with_updates"
169 AC_DEFINE_UNQUOTED([UPDATES],["$UPDATES"],[Name of Fedora updates repository.])
171 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
173 dnl --with-mirror to specify a local Fedora mirror.
174 AC_ARG_WITH([mirror],
175 [AS_HELP_STRING([--with-mirror],
176 [set URI of a local Fedora mirror])],
179 MIRROR="$with_mirror"
182 dnl Build the supermin appliance? Please see README file before
183 dnl enabling this option.
184 AC_ARG_ENABLE([supermin],
185 [AS_HELP_STRING([--enable-supermin],
186 [enable supermin appliance (see README) @<:@default=no@:>@])],
188 [enable_supermin=no])
189 AM_CONDITIONAL([SUPERMIN],[test "x$enable_supermin" = "xyes"])
191 if test "x$enable_supermin" = "xyes"; then
192 dnl Check febootstrap-to-initramfs accepts the --files option
193 dnl (febootstrap >= 2.2).
194 AC_MSG_CHECKING([for --files support in $FEBOOTSTRAP_TO_INITRAMFS])
195 out=`$FEBOOTSTRAP_TO_INITRAMFS 2>&1 ||:`
196 echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD
197 if ! echo $out | grep -sq -- "--files" ; then
200 [febootstrap-to-initramfs does not support the --files option.
202 To build the supermin appliance, you need to upgrade to the latest
203 version of febootstrap.
208 dnl Check febootstrap-to-initramfs accepts the --nocompress option
209 dnl (febootstrap >= 2.3).
210 AC_MSG_CHECKING([for --nocompress support in $FEBOOTSTRAP_TO_INITRAMFS])
211 out=`$FEBOOTSTRAP_TO_INITRAMFS 2>&1 ||:`
212 echo "febootstrap_to_initramfs test command output: $out" >&AS_MESSAGE_LOG_FD
213 if ! echo $out | grep -sq -- "--nocompress" ; then
216 [febootstrap-to-initramfs does not support the --nocompress option.
218 To build the supermin appliance, you need to upgrade to the latest
219 version of febootstrap.
226 AC_ARG_WITH([readline],
227 [AS_HELP_STRING([--with-readline],
228 [support fancy command line editing @<:@default=check@:>@])],
230 [with_readline=check])
233 AS_IF([test "x$with_readline" != xno],
234 [AC_CHECK_LIB([readline], [main],
235 [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
236 AC_DEFINE([HAVE_LIBREADLINE], [1],
237 [Define if you have libreadline])
239 [if test "x$with_readline" != xcheck; then
241 [--with-readline was given, but test for readline failed])
246 AM_GNU_GETTEXT([external])
247 AM_GNU_GETTEXT_VERSION([0.14])
249 dnl Check for OCaml (optional, for OCaml bindings).
252 AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
254 dnl Check for Perl (optional, for Perl bindings).
255 dnl XXX This isn't quite right, we should check for Perl devel library.
256 AC_CHECK_PROG([PERL],[perl],[perl],[no])
258 dnl Check for Perl modules that must be present to compile and
259 dnl test the Perl bindings.
260 missing_perl_modules=no
261 for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker; do
262 AC_MSG_CHECKING([for $pm])
263 if ! perl -M$pm -e1 >/dev/null 2>&1; then
265 missing_perl_modules=yes
270 if test "x$missing_perl_modules" = "xyes"; then
271 AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
274 AM_CONDITIONAL([HAVE_PERL],
275 [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
277 dnl Check for Python (optional, for Python bindings).
278 AC_CHECK_PROG([PYTHON],[python],[python],[no])
283 PYTHON_SITE_PACKAGES=
285 if test "x$PYTHON" != "xno"; then
286 PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
287 PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
289 $PYTHON_PREFIX/include/python$PYTHON_VERSION \
290 /usr/include/python$PYTHON_VERSION \
291 /usr/local/include/python$PYTHON_VERSION
293 AC_MSG_CHECKING([Python.h in $d])
294 if test -r "$d/Python.h"; then
295 AC_MSG_RESULT([found])
299 AC_MSG_RESULT([not found])
302 $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
303 $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
304 /usr/lib64/python$PYTHON_VERSION/site-packages \
305 /usr/lib/python$PYTHON_VERSION/site-packages \
306 /usr/local/lib/python$PYTHON_VERSION/site-packages
308 AC_MSG_CHECKING([for $d])
309 if test -d "$d"; then
310 AC_MSG_RESULT([found])
311 PYTHON_SITE_PACKAGES=$d
314 AC_MSG_RESULT([not found])
318 AC_SUBST(PYTHON_PREFIX)
319 AC_SUBST(PYTHON_VERSION)
320 AC_SUBST(PYTHON_INCLUDEDIR)
321 AC_SUBST(PYTHON_SITE_PACKAGES)
323 AM_CONDITIONAL([HAVE_PYTHON],
324 [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
326 dnl Check for Ruby and rake (optional, for Ruby bindings).
327 AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
328 AC_CHECK_PROG([RAKE],[rake],[rake],[no])
330 AM_CONDITIONAL([HAVE_RUBY],
331 [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
334 AC_ARG_WITH(java_home,
335 [AS_HELP_STRING([--with-java-home],
336 [specify path to JDK directory @<:@default=check@:>@])],
338 [with_java_home=check])
340 if test "x$with_java_home" != "xno"; then
341 if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
343 if test -d "$with_java_home"; then
344 JAVA_HOME="$with_java_home"
346 AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
350 if test "x$JAVA_HOME" = "x"; then
351 # Look for Java in some likely locations.
354 /usr/lib/jvm/java-6-openjdk
356 if test -d $d -a -f $d/bin/java; then
363 if test "x$JAVA_HOME" != "x"; then
364 AC_MSG_CHECKING(for JDK in $JAVA_HOME)
365 if test ! -x "$JAVA_HOME/bin/java"; then
366 AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
368 JAVA="$JAVA_HOME/bin/java"
370 if test ! -x "$JAVA_HOME/bin/javac"; then
371 AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
373 JAVAC="$JAVA_HOME/bin/javac"
375 if test ! -x "$JAVA_HOME/bin/javah"; then
376 AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
378 JAVAH="$JAVA_HOME/bin/javah"
380 if test ! -x "$JAVA_HOME/bin/javadoc"; then
381 AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
383 JAVADOC="$JAVA_HOME/bin/javadoc"
385 if test ! -x "$JAVA_HOME/bin/jar"; then
386 AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
388 JAR="$JAVA_HOME/bin/jar"
390 java_version=`$JAVA -version 2>&1 | grep "java version"`
391 AC_MSG_RESULT(found $java_version in $JAVA_HOME)
394 AC_MSG_CHECKING([for jni.h])
395 if test -f "$JAVA_HOME/include/jni.h"; then
396 JNI_CFLAGS="-I$JAVA_HOME/include"
398 if test "`find $JAVA_HOME -name jni.h`" != ""; then
399 head=`find $JAVA_HOME -name jni.h | tail -1`
403 AC_MSG_FAILURE([missing jni.h header file])
406 AC_MSG_RESULT([$JNI_CFLAGS])
409 AC_MSG_CHECKING([for jni_md.h])
411 *linux*) system="linux" ;;
412 *SunOS*) system="solaris" ;;
413 *cygwin*) system="win32" ;;
414 *) system="$build_os" ;;
416 if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
417 JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
419 if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
420 head=`find $JAVA_HOME -name jni_md.h | tail -1`
422 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
424 AC_MSG_FAILURE([missing jni_md.h header file])
427 AC_MSG_RESULT([$JNI_CFLAGS])
429 dnl Need extra version flag?
430 AC_MSG_CHECKING([extra javac flags])
432 javac_version=`$JAVAC -version 2>&1`
433 case "$javac_version" in
435 JAVAC_FLAGS="-source 1.5" ;;
437 AC_MSG_RESULT([$JAVAC_FLAGS])
439 dnl Where to install jarfiles.
440 dnl XXX How to make it configurable?
441 JAR_INSTALL_DIR=\${prefix}/share/java
442 JNI_INSTALL_DIR=\${libdir}
445 jni_major_version=`echo $VERSION | awk -F. '{print $1}'`
446 jni_minor_version=`echo $VERSION | awk -F. '{print $2}'`
447 jni_micro_version=`echo $VERSION | awk -F. '{print $3}'`
448 JNI_VERSION_INFO=`expr $jni_major_version + $jni_minor_version`:$jni_micro_version:$jni_minor_version
459 AC_SUBST(JAVAC_FLAGS)
460 AC_SUBST(JAR_INSTALL_DIR)
461 AC_SUBST(JNI_INSTALL_DIR)
462 AC_SUBST(JNI_VERSION_INFO)
464 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
466 dnl Check for Haskell (GHC).
467 AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
469 AM_CONDITIONAL([HAVE_HASKELL],
470 [test "x$GHC" != "xno"])
472 dnl Check for Perl modules needed by the inspector.
473 missing_perl_modules=no
474 for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper; do
475 AC_MSG_CHECKING([for $pm])
476 if ! perl -M$pm -e1 >/dev/null 2>&1; then
478 missing_perl_modules=yes
483 if test "x$missing_perl_modules" = "xyes"; then
484 AC_MSG_WARN([some Perl modules required to compile virt-inspector are missing])
487 AM_CONDITIONAL([HAVE_INSPECTOR],
488 [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
491 AC_CONFIG_SUBDIRS([daemon])
493 dnl Produce output files.
494 AC_CONFIG_HEADERS([config.h])
495 AC_CONFIG_FILES([Makefile
496 src/Makefile fish/Makefile po/Makefile.in examples/Makefile
498 appliance/make.sh appliance/update.sh
499 appliance/supermin-split.sh appliance/supermin-make.sh
500 appliance/libguestfs-supermin-helper
504 ocaml/Makefile ocaml/examples/Makefile
507 ruby/Makefile ruby/Rakefile
512 ocaml/META perl/Makefile.PL])
516 chmod +x appliance/*.sh appliance/libguestfs-supermin-helper
521 echo "------------------------------------------------------------"
522 echo "Thank you for downloading $PACKAGE_STRING"
524 echo "This is how we have configured the optional components for you today:"
526 echo "QEMU ................................ $QEMU"
527 echo -n "OCaml bindings ...................... "
528 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
529 echo -n "Perl bindings ....................... "
530 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
531 echo -n "Python bindings ..................... "
532 if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
533 echo -n "Ruby bindings ....................... "
534 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
535 echo -n "Java bindings ....................... "
536 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
537 echo -n "Haskell bindings .................... "
538 if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
539 echo -n "virt-inspector ...................... "
540 if test "x$HAVE_INSPECTOR" = "x"; then echo "yes"; else echo "no"; fi
541 echo "supermin appliance .................. $enable_supermin"
543 echo "If any optional component is configured 'no' when you expected 'yes'"
544 echo "then you should check the preceeding messages."
546 echo "Please report bugs back to the fedora-virt mailing list:"
547 echo "http://www.redhat.com/mailman/listinfo/fedora-virt"
549 echo "Next you should type 'make' to build the package,"
550 echo "then 'make check' to run the tests."
551 echo "------------------------------------------------------------"