hivexregedit: Low-level tool for merging and export in regedit format.
[hivex.git] / configure.ac
index 5dbea37..8d24848 100644 (file)
@@ -17,8 +17,8 @@
 
 # major/minor/release must be numbers
 m4_define([hivex_major],   [1])
-m4_define([hivex_minor],   [0])
-m4_define([hivex_release], [75])
+m4_define([hivex_minor],   [2])
+m4_define([hivex_release], [0])
 # extra can be any string
 m4_define([hivex_extra],   [])
 
@@ -123,7 +123,7 @@ dnl Check sizeof long.
 AC_CHECK_SIZEOF([long])
 
 dnl Headers.
-dnl AC_CHECK_HEADERS([])
+AC_CHECK_HEADERS([endian.h byteswap.h])
 
 dnl Check for pod2man and pod2text.
 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
@@ -167,6 +167,35 @@ AC_PROG_OCAML
 AC_PROG_FINDLIB
 AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
 
+if test "x$OCAMLC" != "xno"; then
+    dnl Check if we have caml/unixsupport.h header (OCaml bindings only).
+    old_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -I$OCAMLLIB"
+    AC_CHECK_HEADERS([caml/unixsupport.h],[],[],
+    [
+    #include <caml/config.h>
+    #include <caml/mlvalues.h>
+    ])
+    CFLAGS="$old_CFLAGS"
+
+    dnl Do we have function caml_raise_with_args?
+    f=caml_raise_with_args
+    AC_MSG_CHECKING([for function $f])
+    echo "char $f (); char foo() { return $f (); }" > conftest.c
+    rm -f conftest_ml.ml
+    touch conftest_ml.ml
+    if $OCAMLOPT -c conftest.c 2>/dev/null && \
+       $OCAMLOPT -c conftest_ml.ml 2>/dev/null && \
+       $OCAMLOPT conftest.o conftest_ml.cmx -o conftest 2>/dev/null ; then
+        AC_DEFINE([HAVE_CAML_RAISE_WITH_ARGS],[1],
+                  [Defined if function caml_raise_with_args exists.])
+        AC_MSG_RESULT([found])
+    else
+        AC_MSG_RESULT([not found])
+    fi
+    rm -f conftest conftest.* conftest_ml.*
+fi
+
 dnl Check for Perl (optional, for Perl bindings).
 dnl XXX This isn't quite right, we should check for Perl devel library.
 AC_CHECK_PROG([PERL],[perl],[perl],[no])
@@ -174,7 +203,7 @@ AC_CHECK_PROG([PERL],[perl],[perl],[no])
 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
+for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker IO::Stringy; do
     AC_MSG_CHECKING([for $pm])
     if ! perl -M$pm -e1 >/dev/null 2>&1; then
         AC_MSG_RESULT([no])
@@ -190,215 +219,223 @@ 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])
-
-PYTHON_PREFIX=
-PYTHON_VERSION=
-PYTHON_INCLUDEDIR=
-PYTHON_SITE_PACKAGES=
-
-if test "x$PYTHON" != "xno"; then
-    PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
-    PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
-    for d in \
-        $PYTHON_PREFIX/include/python$PYTHON_VERSION \
-        /usr/include/python$PYTHON_VERSION \
-        /usr/local/include/python$PYTHON_VERSION
-    do
-        AC_MSG_CHECKING([Python.h in $d])
-        if test -r "$d/Python.h"; then
-            AC_MSG_RESULT([found])
-            PYTHON_INCLUDEDIR=$d
-            break
-        fi
-        AC_MSG_RESULT([not found])
-    done
-    for d in \
-        $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
-        $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
-        /usr/lib64/python$PYTHON_VERSION/site-packages \
-        /usr/lib/python$PYTHON_VERSION/site-packages \
-        /usr/local/lib/python$PYTHON_VERSION/site-packages
-    do
-        AC_MSG_CHECKING([for $d])
-        if test -d "$d"; then
-            AC_MSG_RESULT([found])
-            PYTHON_SITE_PACKAGES=$d
-            break
-        fi
-        AC_MSG_RESULT([not found])
-    done
-fi
-
-AC_SUBST(PYTHON_PREFIX)
-AC_SUBST(PYTHON_VERSION)
-AC_SUBST(PYTHON_INCLUDEDIR)
-AC_SUBST(PYTHON_SITE_PACKAGES)
-
-AM_CONDITIONAL([HAVE_PYTHON],
-    [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
-
-dnl Check for Ruby and rake (optional, for Ruby bindings).
-AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
-AC_CHECK_PROG([RAKE],[rake],[rake],[no])
-
-AM_CONDITIONAL([HAVE_RUBY],
-    [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
-
-dnl Check for Java.
-AC_ARG_WITH(java_home,
-    [AS_HELP_STRING([--with-java-home],
-        [specify path to JDK directory @<:@default=check@:>@])],
-    [],
-    [with_java_home=check])
-
-if test "x$with_java_home" != "xno"; then
-    if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
-    then
-        # Reject unsafe characters in $JAVA_HOME
-        jh_lf='
-'
-        case $JAVA_HOME in
-          *[\\\"\#\$\&\'\`$jh_lf\ \    ]*)
-            AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
-        esac
-        if test -d "$with_java_home"; then
-            JAVA_HOME="$with_java_home"
-        else
-            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
-        # Look for Java in some likely locations.
-        for d in \
-            /usr/lib/jvm/java \
-            /usr/lib/jvm/java-6-openjdk
-        do
-            if test -d $d -a -f $d/bin/java; then
-                JAVA_HOME=$d
-                break
-            fi
-        done
-    fi
-
-    if test "x$JAVA_HOME" != "x"; then
-        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 (use --with-java-home=no to disable Java support)])
-        else
-            JAVA="$JAVA_HOME/bin/java"
-        fi
-        if test ! -x "$JAVA_HOME/bin/javac"; then
-            AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
-        else
-            JAVAC="$JAVA_HOME/bin/javac"
-        fi
-        if test ! -x "$JAVA_HOME/bin/javah"; then
-            AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
-        else
-            JAVAH="$JAVA_HOME/bin/javah"
-        fi
-        if test ! -x "$JAVA_HOME/bin/javadoc"; then
-            AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
-        else
-            JAVADOC="$JAVA_HOME/bin/javadoc"
-        fi
-        if test ! -x "$JAVA_HOME/bin/jar"; then
-            AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
-        else
-            JAR="$JAVA_HOME/bin/jar"
-        fi
-        java_version=`$JAVA -version 2>&1 | grep "java version"`
-        AC_MSG_RESULT(found $java_version in $JAVA_HOME)
-
-        dnl Find jni.h.
-        AC_MSG_CHECKING([for jni.h])
-        if test -f "$JAVA_HOME/include/jni.h"; then
-            JNI_CFLAGS="-I$JAVA_HOME/include"
-        else
-            if test "`find $JAVA_HOME -name jni.h`" != ""; then
-                head=`find $JAVA_HOME -name jni.h | tail -1`
-                dir=`dirname "$head"`
-                JNI_CFLAGS="-I$dir"
-            else
-                AC_MSG_FAILURE([missing jni.h header file])
-            fi
-        fi
-        AC_MSG_RESULT([$JNI_CFLAGS])
-
-        dnl Find jni_md.h.
-        AC_MSG_CHECKING([for jni_md.h])
-        case "$build_os" in
-        *linux*) system="linux" ;;
-        *SunOS*) system="solaris" ;;
-        *cygwin*) system="win32" ;;
-        *) system="$build_os" ;;
-        esac
-        if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
-            JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
-        else
-            if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
-                head=`find $JAVA_HOME -name jni_md.h | tail -1`
-                dir=`dirname "$head"`
-                JNI_CFLAGS="$JNI_CFLAGS -I$dir"
-            else
-                AC_MSG_FAILURE([missing jni_md.h header file])
-            fi
-        fi
-        AC_MSG_RESULT([$JNI_CFLAGS])
-
-        dnl Need extra version flag?
-        AC_MSG_CHECKING([extra javac flags])
-        JAVAC_FLAGS=
-        javac_version=`$JAVAC -version 2>&1`
-        case "$javac_version" in
-        *Eclipse*)
-            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
-fi
-
-AC_SUBST(JAVA_HOME)
-AC_SUBST(JAVA)
-AC_SUBST(JAVAC)
-AC_SUBST(JAVAH)
-AC_SUBST(JAVADOC)
-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"])
-
-dnl Check for Haskell (GHC).
-AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
-
-AM_CONDITIONAL([HAVE_HASKELL],
-    [test "x$GHC" != "xno"])
+dnl dnl Check for Python (optional, for Python bindings).
+dnl AC_CHECK_PROG([PYTHON],[python],[python],[no])
+
+dnl PYTHON_PREFIX=
+dnl PYTHON_VERSION=
+dnl PYTHON_INCLUDEDIR=
+dnl PYTHON_SITE_PACKAGES=
+
+dnl if test "x$PYTHON" != "xno"; then
+dnl     PYTHON_PREFIX=`$PYTHON -c "import sys; print sys.prefix"`
+dnl     PYTHON_VERSION=`$PYTHON -c "import sys; print sys.version[[0:3]]"`
+dnl     for d in \
+dnl         $PYTHON_PREFIX/include/python$PYTHON_VERSION \
+dnl         /usr/include/python$PYTHON_VERSION \
+dnl         /usr/local/include/python$PYTHON_VERSION
+dnl     do
+dnl         AC_MSG_CHECKING([Python.h in $d])
+dnl         if test -r "$d/Python.h"; then
+dnl             AC_MSG_RESULT([found])
+dnl             PYTHON_INCLUDEDIR=$d
+dnl             break
+dnl         fi
+dnl         AC_MSG_RESULT([not found])
+dnl     done
+dnl     for d in \
+dnl         $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
+dnl         $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
+dnl         /usr/lib64/python$PYTHON_VERSION/site-packages \
+dnl         /usr/lib/python$PYTHON_VERSION/site-packages \
+dnl         /usr/local/lib/python$PYTHON_VERSION/site-packages
+dnl     do
+dnl         AC_MSG_CHECKING([for $d])
+dnl         if test -d "$d"; then
+dnl             AC_MSG_RESULT([found])
+dnl             PYTHON_SITE_PACKAGES=$d
+dnl             break
+dnl         fi
+dnl         AC_MSG_RESULT([not found])
+dnl     done
+dnl fi
+
+dnl AC_SUBST(PYTHON_PREFIX)
+dnl AC_SUBST(PYTHON_VERSION)
+dnl AC_SUBST(PYTHON_INCLUDEDIR)
+dnl AC_SUBST(PYTHON_SITE_PACKAGES)
+
+dnl AM_CONDITIONAL([HAVE_PYTHON],
+dnl     [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
+
+dnl dnl Check for Ruby and rake (optional, for Ruby bindings).
+dnl AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
+dnl AC_CHECK_PROG([RAKE],[rake],[rake],[no])
+
+dnl AM_CONDITIONAL([HAVE_RUBY],
+dnl     [test "x$RAKE" != "xno" -a -n "$HAVE_LIBRUBY"])
+
+dnl dnl Check for Java.
+dnl AC_ARG_WITH(java_home,
+dnl     [AS_HELP_STRING([--with-java-home],
+dnl         [specify path to JDK directory @<:@default=check@:>@])],
+dnl     [],
+dnl     [with_java_home=check])
+
+dnl if test "x$with_java_home" != "xno"; then
+dnl     if test "x$with_java_home" != "xyes" -a "x$with_java_home" != "xcheck"
+dnl     then
+dnl         # Reject unsafe characters in $JAVA_HOME
+dnl         jh_lf='
+dnl '
+dnl         case $JAVA_HOME in
+dnl           *[\\\"\#\$\&\'\`$jh_lf\ \        ]*)
+dnl             AC_MSG_FAILURE([unsafe \$JAVA_HOME directory (use --with-java-home=no to disable Java support)]);;
+dnl         esac
+dnl         if test -d "$with_java_home"; then
+dnl             JAVA_HOME="$with_java_home"
+dnl         else
+dnl             AC_MSG_FAILURE([$with_java_home is not a directory (use --with-java-home=no to disable Java support)])
+dnl         fi
+dnl     fi
+
+dnl     if test "x$JAVA_HOME" = "x"; then
+dnl         # Look for Java in some likely locations.
+dnl         for d in \
+dnl             /usr/lib/jvm/java \
+dnl             /usr/lib/jvm/java-6-openjdk
+dnl         do
+dnl             if test -d $d -a -f $d/bin/java; then
+dnl                 JAVA_HOME=$d
+dnl                 break
+dnl             fi
+dnl         done
+dnl     fi
+
+dnl     if test "x$JAVA_HOME" != "x"; then
+dnl         AC_MSG_CHECKING(for JDK in $JAVA_HOME)
+dnl         if test ! -x "$JAVA_HOME/bin/java"; then
+dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/java binary (use --with-java-home=no to disable Java support)])
+dnl         else
+dnl             JAVA="$JAVA_HOME/bin/java"
+dnl         fi
+dnl         if test ! -x "$JAVA_HOME/bin/javac"; then
+dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javac binary])
+dnl         else
+dnl             JAVAC="$JAVA_HOME/bin/javac"
+dnl         fi
+dnl         if test ! -x "$JAVA_HOME/bin/javah"; then
+dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javah binary])
+dnl         else
+dnl             JAVAH="$JAVA_HOME/bin/javah"
+dnl         fi
+dnl         if test ! -x "$JAVA_HOME/bin/javadoc"; then
+dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/javadoc binary])
+dnl         else
+dnl             JAVADOC="$JAVA_HOME/bin/javadoc"
+dnl         fi
+dnl         if test ! -x "$JAVA_HOME/bin/jar"; then
+dnl             AC_MSG_ERROR([missing $JAVA_HOME/bin/jar binary])
+dnl         else
+dnl             JAR="$JAVA_HOME/bin/jar"
+dnl         fi
+dnl         java_version=`$JAVA -version 2>&1 | grep "java version"`
+dnl         AC_MSG_RESULT(found $java_version in $JAVA_HOME)
+
+dnl         dnl Find jni.h.
+dnl         AC_MSG_CHECKING([for jni.h])
+dnl         if test -f "$JAVA_HOME/include/jni.h"; then
+dnl             JNI_CFLAGS="-I$JAVA_HOME/include"
+dnl         else
+dnl             if test "`find $JAVA_HOME -name jni.h`" != ""; then
+dnl                 head=`find $JAVA_HOME -name jni.h | tail -1`
+dnl                 dir=`dirname "$head"`
+dnl                 JNI_CFLAGS="-I$dir"
+dnl             else
+dnl                 AC_MSG_FAILURE([missing jni.h header file])
+dnl             fi
+dnl         fi
+dnl         AC_MSG_RESULT([$JNI_CFLAGS])
+
+dnl         dnl Find jni_md.h.
+dnl         AC_MSG_CHECKING([for jni_md.h])
+dnl         case "$build_os" in
+dnl         *linux*) system="linux" ;;
+dnl         *SunOS*) system="solaris" ;;
+dnl         *cygwin*) system="win32" ;;
+dnl         *) system="$build_os" ;;
+dnl         esac
+dnl         if test -f "$JAVA_HOME/include/$system/jni_md.h"; then
+dnl             JNI_CFLAGS="$JNI_CFLAGS -I$JAVA_HOME/include/$system"
+dnl         else
+dnl             if test "`find $JAVA_HOME -name jni_md.h`" != ""; then
+dnl                 head=`find $JAVA_HOME -name jni_md.h | tail -1`
+dnl                 dir=`dirname "$head"`
+dnl                 JNI_CFLAGS="$JNI_CFLAGS -I$dir"
+dnl             else
+dnl                 AC_MSG_FAILURE([missing jni_md.h header file])
+dnl             fi
+dnl         fi
+dnl         AC_MSG_RESULT([$JNI_CFLAGS])
+
+dnl         dnl Need extra version flag?
+dnl         AC_MSG_CHECKING([extra javac flags])
+dnl         JAVAC_FLAGS=
+dnl         javac_version=`$JAVAC -version 2>&1`
+dnl         case "$javac_version" in
+dnl         *Eclipse*)
+dnl             JAVAC_FLAGS="-source 1.5" ;;
+dnl         esac
+dnl         AC_MSG_RESULT([$JAVAC_FLAGS])
+
+dnl         dnl Where to install jarfiles.
+dnl         dnl XXX How to make it configurable?
+dnl         JAR_INSTALL_DIR=\${prefix}/share/java
+dnl         JNI_INSTALL_DIR=\${libdir}
+
+dnl         dnl JNI version.
+dnl         jni_major_version=`echo "$VERSION" | awk -F. '{print $1}'`
+dnl         jni_minor_version=`echo "$VERSION" | awk -F. '{print $2}'`
+dnl         jni_micro_version=`echo "$VERSION" | awk -F. '{print $3}'`
+dnl         JNI_VERSION_INFO=`expr "$jni_major_version" + "$jni_minor_version"`":$jni_micro_version:$jni_minor_version"
+dnl     fi
+dnl fi
+
+dnl AC_SUBST(JAVA_HOME)
+dnl AC_SUBST(JAVA)
+dnl AC_SUBST(JAVAC)
+dnl AC_SUBST(JAVAH)
+dnl AC_SUBST(JAVADOC)
+dnl AC_SUBST(JAR)
+dnl AC_SUBST(JNI_CFLAGS)
+dnl AC_SUBST(JAVAC_FLAGS)
+dnl AC_SUBST(JAR_INSTALL_DIR)
+dnl AC_SUBST(JNI_INSTALL_DIR)
+dnl AC_SUBST(JNI_VERSION_INFO)
+
+dnl AM_CONDITIONAL([HAVE_JAVA],[test -n "$JAVAC"])
+
+dnl dnl Check for Haskell (GHC).
+dnl AC_CHECK_PROG([GHC],[ghc],[ghc],[no])
+
+dnl AM_CONDITIONAL([HAVE_HASKELL],
+dnl     [test "x$GHC" != "xno"])
 
 dnl Produce output files.
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_FILES([Makefile
                  gnulib/lib/Makefile
                  gnulib/tests/Makefile
-                hivex/Makefile
-                 hivex.pc])
+                 hivex.pc
+                 images/Makefile
+                 lib/Makefile
+                 lib/tools/Makefile
+                 ocaml/Makefile ocaml/META
+                 perl/Makefile perl/Makefile.PL
+                 po/Makefile.in
+                 regedit/Makefile
+                 sh/Makefile
+                 xml/Makefile])
 AC_OUTPUT
 
 dnl Produce summary.
@@ -413,14 +450,14 @@ echo -n "OCaml bindings ...................... "
 if test "x$HAVE_OCAML_TRUE" = "x"; then echo "yes"; else echo "no"; fi
 echo -n "Perl bindings ....................... "
 if test "x$HAVE_PERL_TRUE" = "x"; then echo "yes"; else echo "no"; fi
-echo -n "Python bindings ..................... "
-if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
-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
-echo -n "Haskell bindings .................... "
-if test "x$HAVE_HASKELL" = "x"; then echo "yes"; else echo "no"; fi
+dnl echo -n "Python bindings ..................... "
+dnl if test "x$HAVE_PYTHON_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+dnl echo -n "Ruby bindings ....................... "
+dnl if test "x$HAVE_RUBY_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+dnl echo -n "Java bindings ....................... "
+dnl if test "x$HAVE_JAVA_TRUE" = "x"; then echo "yes"; else echo "no"; fi
+dnl echo -n "Haskell bindings .................... "
+dnl if test "x$HAVE_HASKELL" = "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."