# 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
# major/minor/release must be numbers
m4_define([hivex_major], [1])
-m4_define([hivex_minor], [1])
+m4_define([hivex_minor], [3])
m4_define([hivex_release], [0])
# extra can be any string
m4_define([hivex_extra], [])
gl_EARLY
gl_INIT
-AC_PROG_LIBTOOL
+AM_PROG_LIBTOOL
dnl Check for basic C environment.
AC_PROG_CC_STDC
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])
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
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])
],
AC_MSG_FAILURE(
[--with-readline was given, but test for readline failed])
fi
- ], -lncurses)])
+ ])])
dnl For i18n.
AM_GNU_GETTEXT([external])
dnl Check for OCaml (optional, for OCaml bindings).
AC_PROG_OCAML
AC_PROG_FINDLIB
-AM_CONDITIONAL([HAVE_OCAML],[test "x$OCAMLC" != "xno" -a "x$OCAMLFIND" != "xno"])
+AM_CONDITIONAL([HAVE_OCAML],
+ [test "x$OCAMLC" != "xno" && test "x$OCAMLFIND" != "xno"])
+AM_CONDITIONAL([HAVE_OCAMLOPT],
+ [test "x$OCAMLOPT" != "xno" && test "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 $OCAMLC -c conftest.c 2>/dev/null && \
+ $OCAMLC -c conftest_ml.ml 2>/dev/null && \
+ $OCAMLC conftest.o conftest_ml.cmo -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.
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])
fi
AM_CONDITIONAL([HAVE_PERL],
- [test "x$PERL" != "xno" -a "x$missing_perl_modules" != "xyes"])
+ [test "x$PERL" != "xno" && test "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
+
+ AC_MSG_CHECKING([for Python include path])
+ if test -z "$PYTHON_INCLUDEDIR"; then
+ python_path=`$PYTHON -c "import distutils.sysconfig; \
+ print (distutils.sysconfig.get_python_inc ());"`
+ PYTHON_INCLUDEDIR=$python_path
+ fi
+ AC_MSG_RESULT([$PYTHON_INCLUDEDIR])
+
+ AC_MSG_CHECKING([for Python site-packages path])
+ if test -z "$PYTHON_SITE_PACKAGES"; then
+ PYTHON_SITE_PACKAGES=`$PYTHON -c "import distutils.sysconfig; \
+ print (distutils.sysconfig.get_python_lib(1,0));"`
+ fi
+ AC_MSG_RESULT([$PYTHON_SITE_PACKAGES])
+
+ old_LIBS="$LIBS"
+ LIBS="$LIBS -lpython$PYTHON_VERSION"
+ AC_CHECK_FUNCS([PyCapsule_New])
+ LIBS="$old_LIBS"
fi
AC_SUBST(PYTHON_PREFIX)
AC_SUBST(PYTHON_SITE_PACKAGES)
AM_CONDITIONAL([HAVE_PYTHON],
- [test "x$PYTHON_INCLUDEDIR" != "x" -a "x$PYTHON_SITE_PACKAGES" != "x"])
+ [test "x$PYTHON_INCLUDEDIR" != "x" && test "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"])
+ [test "x$RAKE" != "xno" && test -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" && test "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 && test -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
+ generator/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
+ ruby/Makefile ruby/Rakefile
+ sh/Makefile
+ xml/Makefile])
+AC_CONFIG_FILES([python/run-python-tests], [chmod +x python/run-python-tests])
AC_OUTPUT
dnl Produce summary.
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 "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."