hivex/python fix for i386 integer size issue
[hivex.git] / configure.ac
index a23a315..533f919 100644 (file)
@@ -1,5 +1,5 @@
 # hivex
-# Copyright (C) 2009-2010 Red Hat Inc.
+# Copyright (C) 2009-2011 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@
 
 # major/minor/release must be numbers
 m4_define([hivex_major],   [1])
-m4_define([hivex_minor],   [1])
-m4_define([hivex_release], [1])
+m4_define([hivex_minor],   [2])
+m4_define([hivex_release], [5])
 # extra can be any string
 m4_define([hivex_extra],   [])
 
@@ -87,6 +87,8 @@ if test "$gl_gcc_warnings" = yes; then
   nw="$nw -Wunsafe-loop-optimizations" # just a warning that an optimization
                                     # was not possible, safe to ignore
   nw="$nw -Wpacked"                 # Allow attribute((packed)) on structs
+  nw="$nw -Wlong-long"              # Allow long long since it's required
+                                    # by xstrtoll.
 
   gl_MANYWARN_ALL_GCC([ws])
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
@@ -116,6 +118,12 @@ test "x$U" != "x" && AC_MSG_ERROR([Compiler not ANSI compliant])
 
 AM_PROG_CC_C_O
 
+dnl Work out how to specify the linker script to the linker.
+VERSION_SCRIPT_FLAGS=-Wl,--version-script=
+`/usr/bin/ld --help 2>&1 | grep -- --version-script >/dev/null` || \
+    VERSION_SCRIPT_FLAGS="-Wl,-M -Wl,"
+AC_SUBST(VERSION_SCRIPT_FLAGS)
+
 dnl Check support for 64 bit file offsets.
 AC_SYS_LARGEFILE
 
@@ -143,7 +151,7 @@ AC_ARG_WITH([readline],
 LIBREADLINE=
 AS_IF([test "x$with_readline" != xno],
     [AC_CHECK_LIB([readline], [main],
-        [AC_SUBST([LIBREADLINE], ["-lreadline -lncurses"])
+        [AC_SUBST([LIBREADLINE], ["-lreadline"])
          AC_DEFINE([HAVE_LIBREADLINE], [1],
                    [Define if you have libreadline])
         ],
@@ -151,7 +159,7 @@ AS_IF([test "x$with_readline" != xno],
          AC_MSG_FAILURE(
              [--with-readline was given, but test for readline failed])
          fi
-        ], -lncurses)])
+        ])])
 
 dnl For i18n.
 AM_GNU_GETTEXT([external])
@@ -167,6 +175,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 +211,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 ExtUtils::MakeMaker IO::Stringy; do
     AC_MSG_CHECKING([for $pm])
     if ! perl -M$pm -e1 >/dev/null 2>&1; then
         AC_MSG_RESULT([no])
@@ -214,6 +251,10 @@ if test "x$PYTHON" != "xno"; then
         fi
         AC_MSG_RESULT([not found])
     done
+    if test "x$PYTHON_INCLUDEDIR" = "x"; then
+        AC_MSG_WARN([Python include directory not found])
+    fi
+
     for d in \
         $PYTHON_PREFIX/lib64/python$PYTHON_VERSION/site-packages \
         $PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages \
@@ -229,6 +270,14 @@ if test "x$PYTHON" != "xno"; then
         fi
         AC_MSG_RESULT([not found])
     done
+    if test "x$PYTHON_SITE_PACKAGES" = "x"; then
+        AC_MSG_WARN([Python site-packages directory not found])
+    fi
+
+    old_LIBS="$LIBS"
+    LIBS="$LIBS -lpython$PYTHON_VERSION"
+    AC_CHECK_FUNCS([PyCapsule_New])
+    LIBS="$old_LIBS"
 fi
 
 AC_SUBST(PYTHON_PREFIX)
@@ -239,158 +288,158 @@ 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 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])
@@ -398,10 +447,16 @@ AC_CONFIG_FILES([Makefile
                  gnulib/lib/Makefile
                  gnulib/tests/Makefile
                  hivex.pc
-                 hivex/Makefile
-                 hivex/t/Makefile
-                 hivex/tools/Makefile
-                 po/Makefile.in])
+                 images/Makefile
+                 lib/Makefile
+                 lib/tools/Makefile
+                 ocaml/Makefile ocaml/META
+                 perl/Makefile perl/Makefile.PL
+                 python/Makefile
+                 po/Makefile.in
+                 regedit/Makefile
+                 sh/Makefile
+                 xml/Makefile])
 AC_OUTPUT
 
 dnl Produce summary.
@@ -418,12 +473,12 @@ 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 "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."