python: Add unit test for new RLenValue type
[hivex.git] / configure.ac
index 9ea944a..33c09db 100644 (file)
@@ -18,7 +18,7 @@
 # major/minor/release must be numbers
 m4_define([hivex_major],   [1])
 m4_define([hivex_minor],   [3])
-m4_define([hivex_release], [0])
+m4_define([hivex_release], [3])
 # extra can be any string
 m4_define([hivex_extra],   [])
 
@@ -89,6 +89,9 @@ if test "$gl_gcc_warnings" = yes; then
   nw="$nw -Wpacked"                 # Allow attribute((packed)) on structs
   nw="$nw -Wlong-long"              # Allow long long since it's required
                                     # by xstrtoll.
+  nw="$nw -Wsuggest-attribute=pure" # Don't suggest pure functions.
+#  nw="$nw -Wsuggest-attribute=const" # Don't suggest const functions.
+#  nw="$nw -Wunsuffixed-float-constants" # Don't care about these.
 
   gl_MANYWARN_ALL_GCC([ws])
   gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
@@ -131,7 +134,13 @@ dnl Check sizeof long.
 AC_CHECK_SIZEOF([long])
 
 dnl Headers.
-AC_CHECK_HEADERS([endian.h byteswap.h])
+AC_CHECK_HEADERS([byteswap.h endian.h libintl.h])
+
+dnl Check for mmap
+AC_REPLACE_FUNCS([mmap])
+
+dnl Functions.
+AC_CHECK_FUNCS([bindtextdomain])
 
 dnl Check for pod2man and pod2text.
 AC_CHECK_PROG([POD2MAN],[pod2man],[pod2man],[no])
@@ -170,6 +179,10 @@ PKG_CHECK_MODULES([LIBXML2], [libxml-2.0])
 AC_SUBST([LIBXML2_CFLAGS])
 AC_SUBST([LIBXML2_LIBS])
 
+dnl hivexsh depends on open_memstream, which is absent on OS X.
+AC_CHECK_FUNC([open_memstream])
+AM_CONDITIONAL([HAVE_HIVEXSH],[test "x$ac_cv_func_open_memstream" = "xyes"])
+
 dnl Check for OCaml (optional, for OCaml bindings).
 AC_PROG_OCAML
 AC_PROG_FINDLIB
@@ -231,14 +244,23 @@ AM_CONDITIONAL([HAVE_PERL],
     [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_INSTALLDIR=
+
+AC_CHECK_PROG([PYTHON],[python],[python],[no])
 
 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]])"`
+    AC_MSG_CHECKING([Python prefix])
+    PYTHON_PREFIX=`$PYTHON -c "import sys; print (sys.prefix)"`
+    AC_MSG_RESULT([$PYTHON_PREFIX])
+
+    AC_MSG_CHECKING([Python version])
+    PYTHON_VERSION_MAJOR=`$PYTHON -c "import sys; print (sys.version_info@<:@0@:>@)"`
+    PYTHON_VERSION_MINOR=`$PYTHON -c "import sys; print (sys.version_info@<:@1@:>@)"`
+    PYTHON_VERSION="$PYTHON_VERSION_MAJOR.$PYTHON_VERSION_MINOR"
+    AC_MSG_RESULT([$PYTHON_VERSION])
 
     AC_MSG_CHECKING([for Python include path])
     if test -z "$PYTHON_INCLUDEDIR"; then
@@ -248,30 +270,61 @@ if test "x$PYTHON" != "xno"; then
     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));"`
+    AC_ARG_WITH([python-installdir],
+                [AS_HELP_STRING([--with-python-installdir],
+                               [directory to install python modules @<:@default=check@:>@])],
+               [PYTHON_INSTALLDIR="$withval"
+               AC_MSG_NOTICE([Python install dir $PYTHON_INSTALLDIR])],
+               [PYTHON_INSTALLDIR=check])
+
+    if test "x$PYTHON_INSTALLDIR" = "xcheck"; then
+        PYTHON_INSTALLDIR=
+        AC_MSG_CHECKING([for Python site-packages path])
+        if test -z "$PYTHON_INSTALLDIR"; then
+            PYTHON_INSTALLDIR=`$PYTHON -c "import distutils.sysconfig; \
+                                           print (distutils.sysconfig.get_python_lib(1,0));"`
+        fi
+        AC_MSG_RESULT([$PYTHON_INSTALLDIR])
     fi
-    AC_MSG_RESULT([$PYTHON_SITE_PACKAGES])
 
+    dnl Look for libpython and some optional symbols in it.
     old_LIBS="$LIBS"
-    LIBS="$LIBS -lpython$PYTHON_VERSION"
-    AC_CHECK_FUNCS([PyCapsule_New])
+    if test "x$PYTHON_VERSION_MAJOR" = "x3"; then
+        dnl libpython3 is called "libpython3.Xmu.so"
+        LIBPYTHON="python${PYTHON_VERSION}mu"
+    else
+        LIBPYTHON="python$PYTHON_VERSION"
+    fi
+    AC_CHECK_LIB([$LIBPYTHON], [PyList_Size], [],
+                 [AC_MSG_FAILURE([$LIBPYTHON is not installed])])
+
+    AC_CHECK_FUNCS([PyCapsule_New \
+                    PyString_AsString])
     LIBS="$old_LIBS"
 fi
 
 AC_SUBST(PYTHON_PREFIX)
 AC_SUBST(PYTHON_VERSION)
 AC_SUBST(PYTHON_INCLUDEDIR)
-AC_SUBST(PYTHON_SITE_PACKAGES)
+AC_SUBST(PYTHON_INSTALLDIR)
 
 AM_CONDITIONAL([HAVE_PYTHON],
-    [test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_SITE_PACKAGES" != "x"])
+    [test "x$PYTHON" != "xno" && test "x$PYTHON_INCLUDEDIR" != "x" && test "x$PYTHON_INSTALLDIR" != "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])
+AC_ARG_ENABLE([ruby],
+        AS_HELP_STRING([--disable-ruby], [Disable Ruby language bindings]),
+        [],
+        [enable_ruby=yes])
+AS_IF([test "x$enable_ruby" != "xno"],
+        [
+        AC_CHECK_PROG([RUBY],[ruby],[ruby],[no])
+        AC_CHECK_PROG([RAKE],[rake],[rake],[no])
+        AC_CHECK_LIB([ruby],[ruby_init],[HAVE_LIBRUBY=1],[HAVE_LIBRUBY=0])
+        AC_SUBST(RAKE)
+        ])
+AM_CONDITIONAL([HAVE_RUBY],
+    [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])
 
 AM_CONDITIONAL([HAVE_RUBY],
     [test "x$RAKE" != "xno" && test -n "$HAVE_LIBRUBY"])