Implement 'strings' and 'hexdump' commands.
[libguestfs.git] / configure.ac
index 5270a67..4209baa 100644 (file)
@@ -15,7 +15,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-AC_INIT([libguestfs],[1.0.4])
+AC_INIT([libguestfs],[1.0.21])
 AM_INIT_AUTOMAKE
 
 AC_CONFIG_MACRO_DIR([m4])
 AM_INIT_AUTOMAKE
 
 AC_CONFIG_MACRO_DIR([m4])
@@ -23,7 +23,7 @@ AC_CONFIG_MACRO_DIR([m4])
 AC_PROG_LIBTOOL
 
 dnl Check for basic C environment.
 AC_PROG_LIBTOOL
 
 dnl Check for basic C environment.
-AC_PROG_CC
+AC_PROG_CC_STDC
 AC_PROG_INSTALL
 AC_PROG_CPP
 
 AC_PROG_INSTALL
 AC_PROG_CPP
 
@@ -35,6 +35,9 @@ AM_PROG_CC_C_O
 dnl Check support for 64 bit file offsets.
 AC_SYS_LARGEFILE
 
 dnl Check support for 64 bit file offsets.
 AC_SYS_LARGEFILE
 
+dnl Check sizeof long.
+AC_CHECK_SIZEOF([long])
+
 dnl Headers.
 AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h])
 
 dnl Headers.
 AC_CHECK_HEADERS([errno.h sys/types.h sys/un.h sys/wait.h sys/socket.h])
 
@@ -54,12 +57,46 @@ test "x$POD2TEXT" = "xno" &&
      AC_MSG_ERROR([pod2text must be installed])
 
 dnl Check for QEMU for running binaries on this $host_cpu, fall
      AC_MSG_ERROR([pod2text must be installed])
 
 dnl Check for QEMU for running binaries on this $host_cpu, fall
-dnl back to basic 'qemu'.
-AC_PATH_PROGS([QEMU],[qemu-system-$host_cpu qemu],[no],
+dnl back to basic 'qemu'.  Allow the user to override it.
+default_qemu="qemu-kvm qemu-system-$host_cpu qemu"
+AC_ARG_WITH([qemu],
+       [AS_HELP_STRING([--with-qemu],
+         [set default QEMU binary @<:@default=[qemu-kvm] qemu-system-<host> qemu@:>@])],
+       [],
+       [with_qemu="$default_qemu"])
+AC_PATH_PROGS([QEMU],[$with_qemu],[no],
        [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
 
        [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
 test "x$QEMU" = "xno" && AC_MSG_ERROR([qemu must be installed])
 AC_DEFINE_UNQUOTED([QEMU],["$QEMU"],[Location of qemu binary.])
 
+dnl Check that the chosen qemu has vmchannel support.
+dnl http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg01042.html
+if test "x$vmchannel_test" != "xno"; then
+    AC_MSG_CHECKING([for vmchannel support in $QEMU])
+    vmchannelout=`$QEMU -net channel /dev/zero 2>&1 ||:`
+    echo "vmchannel test command output: $vmchannelout" >&AS_MESSAGE_LOG_FD
+    if ! echo $vmchannelout | grep -sq "vmchannel wrong port number" ; then
+        AC_MSG_RESULT([no])
+       AC_MSG_FAILURE(
+[I did not find vmchannel support in $QEMU.
+
+vmchannel support is vital for libguestfs to operate.  You need a version
+of qemu >= 0.10, or the following patch backported to earlier versions:
+
+http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg01042.html
+
+You can override this test by setting the environment variable
+vmchannel_test=no  However if you don't have vmchannel support
+in your qemu, then this just delays the pain.
+
+If I am using the wrong qemu or you want to compile qemu from source
+and install it in another location, then you should configure with
+the --with-qemu option.
+])
+    fi
+    AC_MSG_RESULT([yes])
+fi
+
 dnl Check for febootstrap etc.
 AC_CHECK_PROG([FEBOOTSTRAP],
        [febootstrap],[febootstrap],[no])
 dnl Check for febootstrap etc.
 AC_CHECK_PROG([FEBOOTSTRAP],
        [febootstrap],[febootstrap],[no])
@@ -78,6 +115,28 @@ AC_CHECK_PROG([FEBOOTSTRAP_TO_INITRAMFS],
 test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
      AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
 
 test "x$FEBOOTSTRAP_TO_INITRAMFS" = "xno" && \
      AC_MSG_ERROR([febootstrap-to-initramfs must be installed])
 
+dnl Check we have fakechroot >= 2.9 (it's an indirect requirement
+dnl of febootstrap, but old versions will fail with yum).
+AC_CHECK_PROG([FAKECHROOT],
+       [fakechroot],[fakechroot],[no])
+test "x$FAKECHROOT" = "xno" && \
+    AC_MSG_ERROR([fakechroot must be installed])
+
+AC_MSG_CHECKING([fakechroot version])
+fakechroot_version=`$FAKECHROOT --version | awk '{print $3}'`
+if test -z "$fakechroot_version"; then
+    AC_MSG_RESULT([failed])
+    AC_MSG_WARN([fakechroot --version command failed, proceeding anyway])
+else
+    AC_MSG_RESULT([$fakechroot_version])
+    fakechroot_major=`echo $fakechroot_version | awk -F. '{print $1}'`
+    fakechroot_minor=`echo $fakechroot_version | awk -F. '{print $2}'`
+    if test "$fakechroot_major" -lt 2 -o \
+            \( "$fakechroot_major" -eq 2 -a "$fakechroot_minor" -lt 9 \); then
+        AC_MSG_ERROR([fakechroot version must be >= 2.9])
+    fi
+fi
+
 dnl --with-repo to specify a Fedora repository.
 AC_ARG_WITH([repo],
        [AS_HELP_STRING([--with-repo],
 dnl --with-repo to specify a Fedora repository.
 AC_ARG_WITH([repo],
        [AS_HELP_STRING([--with-repo],
@@ -137,9 +196,27 @@ AC_PROG_FINDLIB
 AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
 
 dnl Check for Perl (optional, for Perl bindings).
 AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
 
 dnl Check for Perl (optional, for Perl bindings).
-dnl XXX This isn't quite right, we should check for devel libraries.
+dnl XXX This isn't quite right, we should check for Perl devel library.
 AC_CHECK_PROG([PERL],[perl],[perl],[no])
 AC_CHECK_PROG([PERL],[perl],[perl],[no])
-AM_CONDITIONAL([HAVE_PERL],[test "x$PERL" != "xno"])
+
+dnl Check for Perl modules that must be present to compile and
+dnl test the Perl bindings.
+missing_perl_modules=no
+for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker; do
+    AC_MSG_CHECKING([for $pm])
+    if ! perl -M$pm -e1 >/dev/null 2>&1; then
+        AC_MSG_RESULT([no])
+        missing_perl_modules=yes
+    else
+        AC_MSG_RESULT([yes])
+    fi
+done
+if test "x$missing_perl_modules" = "xyes"; then
+    AC_MSG_WARN([some Perl modules required to compile or test the Perl bindings are missing])
+fi
+
+AM_CONDITIONAL([HAVE_PERL],
+    [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
 
 dnl Check for Python (optional, for Python bindings).
 AC_CHECK_PROG([PYTHON],[python],[python],[no])
 
 dnl Check for Python (optional, for Python bindings).
 AC_CHECK_PROG([PYTHON],[python],[python],[no])
@@ -210,7 +287,7 @@ if test "x$with_java_home" != "xno"; then
         if test -d "$with_java_home"; then
            JAVA_HOME="$with_java_home"
        else
         if test -d "$with_java_home"; then
            JAVA_HOME="$with_java_home"
        else
-            AC_MSG_FAILURE([$with_java_home is not a directory])
+            AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
        fi
     fi
     if test "x$JAVA_HOME" = "x"; then
        fi
     fi
     if test "x$JAVA_HOME" = "x"; then
@@ -218,7 +295,7 @@ if test "x$with_java_home" != "xno"; then
     fi
     AC_MSG_CHECKING(for JDK in $JAVA_HOME)
     if test ! -x "$JAVA_HOME/bin/java"; then
     fi
     AC_MSG_CHECKING(for JDK in $JAVA_HOME)
     if test ! -x "$JAVA_HOME/bin/java"; then
-        AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary])
+        AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
     else
         JAVA="$JAVA_HOME/bin/java"
     fi
     else
         JAVA="$JAVA_HOME/bin/java"
     fi
@@ -290,6 +367,17 @@ if test "x$with_java_home" != "xno"; then
        JAVAC_FLAGS="-source 1.5" ;;
     esac
     AC_MSG_RESULT([$JAVAC_FLAGS])
        JAVAC_FLAGS="-source 1.5" ;;
     esac
     AC_MSG_RESULT([$JAVAC_FLAGS])
+
+    dnl Where to install jarfiles.
+    dnl XXX How to make it configurable?
+    JAR_INSTALL_DIR=\${prefix}/share/java
+    JNI_INSTALL_DIR=\${libdir}
+
+    dnl JNI version.
+    jni_major_version=`echo $VERSION | awk -F. '{print $1}'`
+    jni_minor_version=`echo $VERSION | awk -F. '{print $2}'`
+    jni_micro_version=`echo $VERSION | awk -F. '{print $3}'`
+    JNI_VERSION_INFO=`expr $jni_major_version + $jni_minor_version`:$jni_micro_version:$jni_minor_version
 fi
 
 AC_SUBST(JAVA_HOME)
 fi
 
 AC_SUBST(JAVA_HOME)
@@ -300,9 +388,30 @@ AC_SUBST(JAVADOC)
 AC_SUBST(JAR)
 AC_SUBST(JNI_CFLAGS)
 AC_SUBST(JAVAC_FLAGS)
 AC_SUBST(JAR)
 AC_SUBST(JNI_CFLAGS)
 AC_SUBST(JAVAC_FLAGS)
+AC_SUBST(JAR_INSTALL_DIR)
+AC_SUBST(JNI_INSTALL_DIR)
+AC_SUBST(JNI_VERSION_INFO)
 
 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
 
 
 AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
 
+dnl Check for Perl modules needed by the inspector.
+missing_perl_modules=no
+for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper; do
+    AC_MSG_CHECKING([for $pm])
+    if ! perl -M$pm -e1 >/dev/null 2>&1; then
+        AC_MSG_RESULT([no])
+        missing_perl_modules=yes
+    else
+        AC_MSG_RESULT([yes])
+    fi
+done
+if test "x$missing_perl_modules" = "xyes"; then
+    AC_MSG_WARN([some Perl modules required to compile virt-inspector are missing])
+fi
+
+AM_CONDITIONAL([HAVE_INSPECTOR],
+    [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+
 dnl Run in subdirs.
 AC_CONFIG_SUBDIRS([daemon])
 
 dnl Run in subdirs.
 AC_CONFIG_SUBDIRS([daemon])
 
@@ -315,8 +424,9 @@ AC_CONFIG_FILES([Makefile src/Makefile fish/Makefile examples/Makefile
                 python/Makefile
                 ruby/Makefile ruby/Rakefile
                 java/Makefile
                 python/Makefile
                 ruby/Makefile ruby/Rakefile
                 java/Makefile
+                inspector/Makefile
                 make-initramfs.sh update-initramfs.sh
                 make-initramfs.sh update-initramfs.sh
-                libguestfs.spec
+                libguestfs.spec libguestfs.pc
                 ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
                 ocaml/META perl/Makefile.PL])
 AC_OUTPUT
 
@@ -331,6 +441,7 @@ echo "Thank you for downloading $PACKAGE_STRING"
 echo
 echo "This is how we have configured the optional components for you today:"
 echo
 echo
 echo "This is how we have configured the optional components for you today:"
 echo
+echo    "QEMU ................................ $QEMU"
 echo -n "OCaml bindings ...................... "
 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "Perl bindings ....................... "
 echo -n "OCaml bindings ...................... "
 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "Perl bindings ....................... "
@@ -341,6 +452,8 @@ echo -n "Ruby bindings ....................... "
 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "Java bindings ....................... "
 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "Java bindings ....................... "
 if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+echo -n "virt-inspector ...................... "
+if test "x$HAVE_INSPECTOR" = "x"; then echo "yes"; else echo "no"; fi
 echo
 echo "If any optional component is configured 'no' when you expected 'yes'"
 echo "then you should check the preceeding messages."
 echo
 echo "If any optional component is configured 'no' when you expected 'yes'"
 echo "then you should check the preceeding messages."