Sorry i haven't been here in a while.

camlp4 bug was caught by Michael Ethier <methier@cgr.harvard.edu>

- director.swg: fix a typo
- ocamldec.swg, ocaml.swg: new macros
- ac_compare_version.m4: arty's own more liberally licensed version compare
  autoconf macro.
- configure.in: use version_compare and make swigp4.ml generated by
  configure based on ocaml version.  This is due to an incompatible change
  in camlp4.
- ocaml.cxx: use new return macros in the right places
  (returning non-value)


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@9518 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Art Yerkes 2006-11-03 07:28:42 +00:00
commit 8ad7605f16
7 changed files with 159 additions and 78 deletions

View file

@ -40,7 +40,7 @@ namespace Swig {
/* attempt to call a pure virtual method via a director method */ /* attempt to call a pure virtual method via a director method */
class DirectorPureVirtualException : public Swig::DirectorException { class DirectorPureVirtualException : public Swig::DirectorException {
public: public:
DirectorTypeMismatchException(const char* msg="") { DirectorPureVirtualException(const char* msg="") {
} }
static void raise(const char *msg) { static void raise(const char *msg) {

View file

@ -429,15 +429,15 @@ extern "C" {
case C_short: case C_short:
case C_ushort: case C_ushort:
case C_int: case C_int:
CAMLreturn(Int_val(SWIG_Field(v,0))); CAMLreturn_type(Int_val(SWIG_Field(v,0)));
case C_uint: case C_uint:
case C_int32: case C_int32:
CAMLreturn(Int32_val(SWIG_Field(v,0))); CAMLreturn_type(Int32_val(SWIG_Field(v,0)));
case C_int64: case C_int64:
CAMLreturn(SWIG_Int64_val(SWIG_Field(v,0))); CAMLreturn_type(SWIG_Int64_val(SWIG_Field(v,0)));
case C_float: case C_float:
case C_double: case C_double:
CAMLreturn(Double_val(SWIG_Field(v,0))); CAMLreturn_type(Double_val(SWIG_Field(v,0)));
default: default:
fprintf( stderr, "Unknown block tag %d\n", SWIG_Tag_val(v) ); fprintf( stderr, "Unknown block tag %d\n", SWIG_Tag_val(v) );
failwith("No conversion to double"); failwith("No conversion to double");
@ -493,7 +493,7 @@ extern "C" {
#endif #endif
void *out = NULL; void *out = NULL;
if( !caml_ptr_val_internal( v, &out, descriptor ) ) if( !caml_ptr_val_internal( v, &out, descriptor ) )
CAMLreturn(out); CAMLreturn_type(out);
else else
failwith( "No appropriate conversion found." ); failwith( "No appropriate conversion found." );
} }

View file

@ -75,6 +75,34 @@ SWIGEXT {
/* Also an l-value. */ /* Also an l-value. */
#endif #endif
#ifdef CAMLreturn0
#undef CAMLreturn0
#endif
#define CAMLreturn0 do{ \
caml_local_roots = caml__frame; \
return; \
}while (0)
#ifdef CAMLreturn
#undef CAMLreturn
#endif
#define CAMLreturn(result) do{ \
caml_value_t caml__temp_result = (result); \
caml_local_roots = caml__frame; \
return (caml__temp_result); \
}while(0)
#define CAMLreturn_type(result) do{ \
caml_local_roots = caml__frame; \
return result; \
}while(0)
#ifdef CAMLnoreturn
#undef CAMLnoreturn
#endif
#define CAMLnoreturn ((void) caml__frame)
#ifndef ARCH_ALIGN_INT64 #ifndef ARCH_ALIGN_INT64
#define SWIG_Int64_val(v) (*((int64 *) SWIG_Data_custom_val(v))) #define SWIG_Int64_val(v) (*((int64 *) SWIG_Data_custom_val(v)))
#else #else

View file

@ -1,7 +1,7 @@
open Pcaml ;; open Pcaml ;;
let lap x y = x :: y let lap x y = x :: y
let c_ify e loc = let c_ify e @OCAMLLOC@ =
match e with match e with
<:expr< $int:_$ >> -> <:expr< (C_int $e$) >> <:expr< $int:_$ >> -> <:expr< (C_int $e$) >>
| <:expr< $str:_$ >> -> <:expr< (C_string $e$) >> | <:expr< $str:_$ >> -> <:expr< (C_string $e$) >>
@ -10,44 +10,44 @@ let c_ify e loc =
| <:expr< True >> -> <:expr< (C_bool $e$) >> | <:expr< True >> -> <:expr< (C_bool $e$) >>
| <:expr< False >> -> <:expr< (C_bool $e$) >> | <:expr< False >> -> <:expr< (C_bool $e$) >>
| _ -> <:expr< $e$ >> | _ -> <:expr< $e$ >>
let mk_list args loc f = let mk_list args @OCAMLLOC@ f =
let rec mk_list_inner args loc f = let rec mk_list_inner args @OCAMLLOC@ f =
match args with match args with
[] -> <:expr< [] >> [] -> <:expr< [] >>
| x :: xs -> | x :: xs ->
(let loc = MLast.loc_of_expr x in (let @OCAMLLOC@ = MLast.loc_of_expr x in
<:expr< [ ($f x loc$) ] @ ($mk_list_inner xs loc f$) >>) in <:expr< [ ($f x @OCAMLLOC@$) ] @ ($mk_list_inner xs @OCAMLLOC@ f$) >>) in
match args with match args with
[] -> <:expr< (Obj.magic C_void) >> [] -> <:expr< (Obj.magic C_void) >>
| [ a ] -> <:expr< (Obj.magic $f a loc$) >> | [ a ] -> <:expr< (Obj.magic $f a @OCAMLLOC@$) >>
| _ -> <:expr< (Obj.magic (C_list ($mk_list_inner args loc f$))) >> | _ -> <:expr< (Obj.magic (C_list ($mk_list_inner args @OCAMLLOC@ f$))) >>
EXTEND EXTEND
expr: expr:
[ [ e1 = expr ; "'" ; "[" ; e2 = expr ; "]" -> [ [ e1 = expr ; "'" ; "[" ; e2 = expr ; "]" ->
<:expr< (invoke $e1$) "[]" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "[]" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "->" ; l = LIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | e1 = expr ; "->" ; l = LIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< (invoke $e1$) $str:l$ ($mk_list args loc c_ify$) >> <:expr< (invoke $e1$) $str:l$ ($mk_list args @OCAMLLOC@ c_ify$) >>
| e1 = expr ; "->" ; u = UIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | e1 = expr ; "->" ; u = UIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< (invoke $e1$) $str:u$ ($mk_list args loc c_ify$) >> <:expr< (invoke $e1$) $str:u$ ($mk_list args @OCAMLLOC@ c_ify$) >>
| e1 = expr ; "->" ; s = expr LEVEL "simple" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | e1 = expr ; "->" ; s = expr LEVEL "simple" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< (invoke $e1$) $s$ ($mk_list args loc c_ify$) >> <:expr< (invoke $e1$) $s$ ($mk_list args @OCAMLLOC@ c_ify$) >>
| e1 = expr ; "'" ; "." ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | e1 = expr ; "'" ; "." ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< (invoke $e1$) "()" ($mk_list args loc c_ify$) >> <:expr< (invoke $e1$) "()" ($mk_list args @OCAMLLOC@ c_ify$) >>
| e1 = expr ; "'" ; "->" ; l = LIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | e1 = expr ; "'" ; "->" ; l = LIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< (invoke ((invoke $e1$) "->" C_void)) $str:l$ ($mk_list args loc c_ify$) >> <:expr< (invoke ((invoke $e1$) "->" C_void)) $str:l$ ($mk_list args @OCAMLLOC@ c_ify$) >>
| e1 = expr ; "'" ; "->" ; u = UIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | e1 = expr ; "'" ; "->" ; u = UIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< (invoke ((invoke $e1$) "->" C_void)) $str:u$ ($mk_list args loc c_ify$) >> <:expr< (invoke ((invoke $e1$) "->" C_void)) $str:u$ ($mk_list args @OCAMLLOC@ c_ify$) >>
| e1 = expr ; "'" ; "->" ; s = expr LEVEL "simple" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | e1 = expr ; "'" ; "->" ; s = expr LEVEL "simple" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< (invoke ((invoke $e1$) "->" C_void)) $s$ ($mk_list args loc c_ify$) >> <:expr< (invoke ((invoke $e1$) "->" C_void)) $s$ ($mk_list args @OCAMLLOC@ c_ify$) >>
| e1 = expr ; "'" ; "++" -> | e1 = expr ; "'" ; "++" ->
<:expr< (invoke $e1$) "++" C_void >> <:expr< (invoke $e1$) "++" C_void >>
| e1 = expr ; "'" ; "--" -> | e1 = expr ; "'" ; "--" ->
<:expr< (invoke $e1$) "--" C_void >> <:expr< (invoke $e1$) "--" C_void >>
| e1 = expr ; "'" ; "-" ; e2 = expr -> | e1 = expr ; "'" ; "-" ; e2 = expr ->
<:expr< (invoke $e1$) "-" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "-" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "+" ; e2 = expr -> <:expr< (invoke $e1$) "+" (C_list [ $c_ify e2 loc$ ]) >> | e1 = expr ; "'" ; "+" ; e2 = expr -> <:expr< (invoke $e1$) "+" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "*" ; e2 = expr -> <:expr< (invoke $e1$) "*" (C_list [ $c_ify e2 loc$ ]) >> | e1 = expr ; "'" ; "*" ; e2 = expr -> <:expr< (invoke $e1$) "*" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| "'" ; "&" ; e1 = expr -> | "'" ; "&" ; e1 = expr ->
<:expr< (invoke $e1$) "&" C_void >> <:expr< (invoke $e1$) "&" C_void >>
| "'" ; "!" ; e1 = expr -> | "'" ; "!" ; e1 = expr ->
@ -55,64 +55,64 @@ EXTEND
| "'" ; "~" ; e1 = expr -> | "'" ; "~" ; e1 = expr ->
<:expr< (invoke $e1$) "~" C_void >> <:expr< (invoke $e1$) "~" C_void >>
| e1 = expr ; "'" ; "/" ; e2 = expr -> | e1 = expr ; "'" ; "/" ; e2 = expr ->
<:expr< (invoke $e1$) "/" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "/" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "%" ; e2 = expr -> | e1 = expr ; "'" ; "%" ; e2 = expr ->
<:expr< (invoke $e1$) "%" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "%" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "lsl" ; e2 = expr -> | e1 = expr ; "'" ; "lsl" ; e2 = expr ->
<:expr< (invoke $e1$) ("<" ^ "<") (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) ("<" ^ "<") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "lsr" ; e2 = expr -> | e1 = expr ; "'" ; "lsr" ; e2 = expr ->
<:expr< (invoke $e1$) (">" ^ ">") (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) (">" ^ ">") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "<" ; e2 = expr -> | e1 = expr ; "'" ; "<" ; e2 = expr ->
<:expr< (invoke $e1$) "<" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "<" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "<=" ; e2 = expr -> | e1 = expr ; "'" ; "<=" ; e2 = expr ->
<:expr< (invoke $e1$) "<=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "<=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; ">" ; e2 = expr -> | e1 = expr ; "'" ; ">" ; e2 = expr ->
<:expr< (invoke $e1$) ">" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) ">" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; ">=" ; e2 = expr -> | e1 = expr ; "'" ; ">=" ; e2 = expr ->
<:expr< (invoke $e1$) ">=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) ">=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "==" ; e2 = expr -> | e1 = expr ; "'" ; "==" ; e2 = expr ->
<:expr< (invoke $e1$) "==" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "==" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "!=" ; e2 = expr -> | e1 = expr ; "'" ; "!=" ; e2 = expr ->
<:expr< (invoke $e1$) "!=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "!=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "&" ; e2 = expr -> | e1 = expr ; "'" ; "&" ; e2 = expr ->
<:expr< (invoke $e1$) "&" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "&" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "^" ; e2 = expr -> | e1 = expr ; "'" ; "^" ; e2 = expr ->
<:expr< (invoke $e1$) "^" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "^" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "|" ; e2 = expr -> | e1 = expr ; "'" ; "|" ; e2 = expr ->
<:expr< (invoke $e1$) "|" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "|" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "&&" ; e2 = expr -> | e1 = expr ; "'" ; "&&" ; e2 = expr ->
<:expr< (invoke $e1$) "&&" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "&&" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "||" ; e2 = expr -> | e1 = expr ; "'" ; "||" ; e2 = expr ->
<:expr< (invoke $e1$) "||" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "||" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "=" ; e2 = expr -> | e1 = expr ; "'" ; "=" ; e2 = expr ->
<:expr< (invoke $e1$) "=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "+=" ; e2 = expr -> | e1 = expr ; "'" ; "+=" ; e2 = expr ->
<:expr< (invoke $e1$) "+=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "+=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "-=" ; e2 = expr -> | e1 = expr ; "'" ; "-=" ; e2 = expr ->
<:expr< (invoke $e1$) "-=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "-=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "*=" ; e2 = expr -> | e1 = expr ; "'" ; "*=" ; e2 = expr ->
<:expr< (invoke $e1$) "*=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "*=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "/=" ; e2 = expr -> | e1 = expr ; "'" ; "/=" ; e2 = expr ->
<:expr< (invoke $e1$) "/=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "/=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "%=" ; e2 = expr -> | e1 = expr ; "'" ; "%=" ; e2 = expr ->
<:expr< (invoke $e1$) "%=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "%=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "lsl" ; "=" ; e2 = expr -> | e1 = expr ; "'" ; "lsl" ; "=" ; e2 = expr ->
<:expr< (invoke $e1$) ("<" ^ "<=") (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) ("<" ^ "<=") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "lsr" ; "=" ; e2 = expr -> | e1 = expr ; "'" ; "lsr" ; "=" ; e2 = expr ->
<:expr< (invoke $e1$) (">" ^ ">=") (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) (">" ^ ">=") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "&=" ; e2 = expr -> | e1 = expr ; "'" ; "&=" ; e2 = expr ->
<:expr< (invoke $e1$) "&=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "&=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "^=" ; e2 = expr -> | e1 = expr ; "'" ; "^=" ; e2 = expr ->
<:expr< (invoke $e1$) "^=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "^=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| e1 = expr ; "'" ; "|=" ; e2 = expr -> | e1 = expr ; "'" ; "|=" ; e2 = expr ->
<:expr< (invoke $e1$) "|=" (C_list [ $c_ify e2 loc$ ]) >> <:expr< (invoke $e1$) "|=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
| "'" ; e = expr -> c_ify e loc | "'" ; e = expr -> c_ify e @OCAMLLOC@
| c = expr ; "as" ; id = LIDENT -> <:expr< $lid:"get_" ^ id$ $c$ >> | c = expr ; "as" ; id = LIDENT -> <:expr< $lid:"get_" ^ id$ $c$ >>
| c = expr ; "to" ; id = LIDENT -> <:expr< $uid:"C_" ^ id$ $c$ >> | c = expr ; "to" ; id = LIDENT -> <:expr< $uid:"C_" ^ id$ $c$ >>
| "`" ; "`" ; l = LIDENT -> <:expr< C_enum `$lid:l$ >> | "`" ; "`" ; l = LIDENT -> <:expr< C_enum `$lid:l$ >>
| "`" ; "`" ; u = UIDENT -> <:expr< C_enum `$uid:u$ >> | "`" ; "`" ; u = UIDENT -> <:expr< C_enum `$uid:u$ >>
| f = expr ; "'" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> | f = expr ; "'" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
<:expr< $f$ ($mk_list args loc c_ify$) >> <:expr< $f$ ($mk_list args @OCAMLLOC@ c_ify$) >>
] ] ; ] ] ;
END ;; END ;;

View file

@ -1680,9 +1680,9 @@ public:
* always essentially work. * always essentially work.
*/ */
if (!SwigType_isreference(return_type)) { if (!SwigType_isreference(return_type)) {
Printf(w->code, "CAMLreturn((%s)c_result);\n", SwigType_lstr(return_type, "")); Printf(w->code, "CAMLreturn_type((%s)c_result);\n", SwigType_lstr(return_type, ""));
} else { } else {
Printf(w->code, "CAMLreturn(*c_result);\n"); Printf(w->code, "CAMLreturn_type(*c_result);\n");
} }
} }
} }

View file

@ -0,0 +1,40 @@
dnl @synopsis AC_COMPARE_VERSION\
dnl (version-a, version-b, action-if-greater, action-if-equal, action-if-less)
dnl
dnl This macro compares two version numbers and executes the indicated action
dnl based on whether they're equal or one is greater than the other.
dnl It's needed to determine whether ocaml is new enough that the incompatible
dnl change 'loc' -> '_loc' is present in this version of camlp4.
dnl
dnl It's implemented from scratch just for SWIG by arty.
dnl
dnl @category Misc
dnl @author arty
dnl @version 2006-11-02
dnl @license GPLWithACException
AC_DEFUN([AC_COMPARE_VERSION], [
# Split the version into units.
ver_a="[$1]"
ver_b="[$2]"
nodots_a=`echo $ver_a | sed -e 's/\./ /g'`
condition="equal"
isolate_b_regex='\([[0-9]]\+\).*'
for ver_part in $nodots_a ; do
b_ver_part=`echo "$ver_b" | sed -e 's/'"$isolate_b_regex"'/\1/'`
if test \( "$ver_part" -lt "$b_ver_part" \) -a \( "x$condition" == "xequal" \) ; then
condition=less
elif test \( "$ver_part" -gt "$b_ver_part" \) -a \( "x$condition" == "xequal" \) ; then
condition=greater
fi
isolate_b_regex='[[0-9]]\+\.'"$isolate_b_regex"
done
if test "x$condition" == "xequal" ; then
[$4]
elif test "x$condition" == "xless" ; then
[$3]
elif test "x$condition" == "xgreater" ; then
[$5]
fi
])

View file

@ -1217,58 +1217,68 @@ else
AC_MSG_CHECKING(for Ocaml DL load generator) AC_MSG_CHECKING(for Ocaml DL load generator)
if test -z "$OCAMLDLGEN"; then if test -z "$OCAMLDLGEN"; then
AC_CHECK_PROGS(OCAMLDLGEN, ocamldlgen, ocamldlgen) AC_CHECK_PROGS(OCAMLDLGEN, ocamldlgen, :)
else else
OCAMLDLGEN="$OCAMLDLGEN" OCAMLDLGEN="$OCAMLDLGEN"
fi fi
AC_MSG_CHECKING(for Ocaml package tool) AC_MSG_CHECKING(for Ocaml package tool)
if test -z "$OCAMLFIND"; then if test -z "$OCAMLFIND"; then
AC_CHECK_PROGS(OCAMLFIND, ocamlfind, ocamlfind) AC_CHECK_PROGS(OCAMLFIND, ocamlfind, :)
else else
OCAMLFIND="$OCAMLFIND" OCAMLFIND="$OCAMLFIND"
fi fi
AC_MSG_CHECKING(for Ocaml compiler) AC_MSG_CHECKING(for Ocaml compiler)
if test -z "$OCAMLC"; then if test -z "$OCAMLC"; then
AC_CHECK_PROGS(OCAMLC, ocamlc, ocamlc) AC_CHECK_PROGS(OCAMLC, ocamlc, :)
else else
OCAMLC="$OCAMLC" OCAMLC="$OCAMLC"
fi fi
AC_MSG_CHECKING(for Ocaml interpreter) AC_MSG_CHECKING(for Ocaml interpreter)
if test "x$OCAMLBIN" = xyes; then if test "x$OCAMLBIN" = xyes; then
AC_CHECK_PROGS(OCAMLBIN, ocaml, ocaml) AC_CHECK_PROGS(OCAMLBIN, ocaml, :)
else else
OCAMLBIN="$OCAMLBIN" OCAMLBIN="$OCAMLBIN"
fi fi
AC_MSG_CHECKING(for Ocaml toplevel creator) AC_MSG_CHECKING(for Ocaml toplevel creator)
if test -z "$OCAMLMKTOP"; then if test -z "$OCAMLMKTOP"; then
AC_CHECK_PROGS(OCAMLMKTOP, ocamlmktop, ocamlmktop) AC_CHECK_PROGS(OCAMLMKTOP, ocamlmktop, :)
else else
OCAMLMKTOP="$OCAMLMKTOP" OCAMLMKTOP="$OCAMLMKTOP"
fi fi
AC_MSG_CHECKING(for Ocaml header files) OCAMLLOC=loc
dirs="/usr/lib/ocaml/caml /usr/local/lib/ocaml/caml" if test "$OCAMLC" != ":" ; then
dir="`$OCAMLC -where 2>/dev/null`" AC_MSG_CHECKING(for Ocaml header files)
if test "$dir"; then dirs="/usr/lib/ocaml/caml /usr/local/lib/ocaml/caml"
dir="`$OCAMLC -where 2>/dev/null`"
if test "$dir"; then
dirs="$dir/caml $dirs" dirs="$dir/caml $dirs"
fi fi
for i in $dirs; do for i in $dirs; do
if test -r $i/mlvalues.h; then if test -r $i/mlvalues.h; then
AC_MSG_RESULT($i) AC_MSG_RESULT($i)
OCAMLEXT="$i" OCAMLEXT="$i"
OCAMLINC="-I$OCAMLEXT" OCAMLINC="-I$OCAMLEXT"
break; break;
fi fi
done done
if test -z "$OCAMLINC"; then if test -z "$OCAMLINC"; then
AC_MSG_RESULT(not found) AC_MSG_RESULT(not found)
fi fi
fi
AC_MSG_CHECKING(for Ocaml version 3.08.2 or higher)
OCAMLVER=`$OCAMLC -version | sed -e 's/.*version //g'`
AC_COMPARE_VERSION([$OCAMLVER],[3.08.2],[:],[:],[OCAMLLOC=_loc])
AC_MSG_RESULT($OCAMLVER)
fi
fi # Disabling ocaml
export OCAMLLOC
export OCAMLVER
export OCAMLINC export OCAMLINC
export OCAMLBIN export OCAMLBIN
export OCAMLC export OCAMLC
@ -1276,6 +1286,8 @@ export OCAMLDLGEN
export OCAMLFIND export OCAMLFIND
export OCAMLMKTOP export OCAMLMKTOP
AC_SUBST(OCAMLLOC)
AC_SUBST(OCAMLVER)
AC_SUBST(OCAMLINC) AC_SUBST(OCAMLINC)
AC_SUBST(OCAMLBIN) AC_SUBST(OCAMLBIN)
AC_SUBST(OCAMLC) AC_SUBST(OCAMLC)
@ -1965,7 +1977,8 @@ AC_CONFIG_FILES([ \
Examples/test-suite/clisp/Makefile \ Examples/test-suite/clisp/Makefile \
Examples/test-suite/cffi/Makefile \ Examples/test-suite/cffi/Makefile \
Examples/test-suite/uffi/Makefile \ Examples/test-suite/uffi/Makefile \
Examples/test-suite/r/Makefile Examples/test-suite/r/Makefile \
Lib/ocaml/swigp4.ml
]) ])
AC_CONFIG_FILES([preinst-swig], [chmod +x preinst-swig]) AC_CONFIG_FILES([preinst-swig], [chmod +x preinst-swig])
AC_OUTPUT AC_OUTPUT