From: Richard Jones Date: Mon, 1 Mar 2010 17:44:00 +0000 (+0000) Subject: RHEL 5: Fixes for old version of OCaml in EPEL 5. X-Git-Tag: 1.2.1~17 X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=ed7b31aa62abd7ffa77f402f3b74cccad369d0a5;hp=22368ef43611a1cdc8975833f21e07ed570669fc;p=hivex.git RHEL 5: Fixes for old version of OCaml in EPEL 5. --- diff --git a/configure.ac b/configure.ac index eb4a847..853cf40 100644 --- a/configure.ac +++ b/configure.ac @@ -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 + #include + ]) + 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]) diff --git a/generator/generator.ml b/generator/generator.ml index 1131f54..7728973 100755 --- a/generator/generator.ml +++ b/generator/generator.ml @@ -1493,7 +1493,29 @@ and generate_ocaml_c () = #include #include #include + +#ifdef HAVE_CAML_UNIXSUPPORT_H #include +#else +extern value unix_error_of_code (int errcode); +#endif + +#ifndef HAVE_CAML_RAISE_WITH_ARGS +static void +caml_raise_with_args (value tag, int nargs, value args[]) +{ + CAMLparam1 (tag); + CAMLxparamN (args, nargs); + value bucket; + int i; + + bucket = caml_alloc_small (1 + nargs, 0); + Field(bucket, 0) = tag; + for (i = 0; i < nargs; i++) Field(bucket, 1 + i) = args[i]; + caml_raise(bucket); + CAMLnoreturn; +} +#endif #include