diff -Nru ocaml-ctypes-0.6.2/CHANGES.md ocaml-ctypes-0.7.0/CHANGES.md --- ocaml-ctypes-0.6.2/CHANGES.md 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/CHANGES.md 2016-07-13 12:24:30.000000000 +0000 @@ -1,3 +1,24 @@ +## ctypes 0.7.0 + +### Features + +* Add support for bytecode-only architectures + https://github.com/ocamllabs/ocaml-ctypes/issues/410 + +* Add a new `sint` type corresponding to a full-range C integer and update `errno` support to use `sint` + https://github.com/ocamllabs/ocaml-ctypes/issues/411 + +### Bug fixes + +* Handle small integer return types correctly on big-endian platforms + https://github.com/ocamllabs/ocaml-ctypes/issues/404 + https://github.com/ocamllabs/ocaml-ctypes/issues/405 + +* Fix a bug with callbacks that return small types (less than a word) + https://github.com/ocamllabs/ocaml-ctypes/issues/405 + +Thanks to Stephane Glondu (@glondu) for contributions to this release. + ## ctypes 0.6.2 ### Bug fixes diff -Nru ocaml-ctypes-0.6.2/debian/changelog ocaml-ctypes-0.7.0/debian/changelog --- ocaml-ctypes-0.6.2/debian/changelog 2016-06-22 13:46:37.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/changelog 2016-08-01 08:18:46.000000000 +0000 @@ -1,3 +1,10 @@ +ocaml-ctypes (0.7.0-1) unstable; urgency=medium + + * New upstream release + - all patches have been merged upstream + + -- Stéphane Glondu Mon, 01 Aug 2016 10:18:46 +0200 + ocaml-ctypes (0.6.2-7) unstable; urgency=medium * Fix and re-enable test-roots diff -Nru ocaml-ctypes-0.6.2/debian/patches/0001-Use-the-same-C-compiler-as-OCaml-to-build-test-stubs.patch ocaml-ctypes-0.7.0/debian/patches/0001-Use-the-same-C-compiler-as-OCaml-to-build-test-stubs.patch --- ocaml-ctypes-0.6.2/debian/patches/0001-Use-the-same-C-compiler-as-OCaml-to-build-test-stubs.patch 2016-06-22 13:42:57.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/0001-Use-the-same-C-compiler-as-OCaml-to-build-test-stubs.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -From: Stephane Glondu -Date: Wed, 15 Jun 2016 10:52:03 +0200 -Subject: Use the same C compiler as OCaml to build test stubs - -Origin: https://github.com/ocamllabs/ocaml-ctypes/pull/403 -Bug: https://github.com/ocamllabs/ocaml-ctypes/issues/402 ---- - Makefile.tests | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Makefile.tests b/Makefile.tests -index 637a28e..41e474b 100644 ---- a/Makefile.tests -+++ b/Makefile.tests -@@ -4,6 +4,8 @@ VPATH += tests - - CFLAGS += -I $(CURDIR)/src/ctypes -I $(CURDIR)/tests - -+CC=$(shell ocamlc -config | sed -n '/native_c_compiler/{ s/[^:]*://; p;}') -+ - # tests-common subproject - tests-common.dir = tests/tests-common - tests-common.subproject_deps = ctypes cstubs \ diff -Nru ocaml-ctypes-0.6.2/debian/patches/0002-Fix-for-PowerPC-handle-libffi-s-integer-return-type-.patch ocaml-ctypes-0.7.0/debian/patches/0002-Fix-for-PowerPC-handle-libffi-s-integer-return-type-.patch --- ocaml-ctypes-0.6.2/debian/patches/0002-Fix-for-PowerPC-handle-libffi-s-integer-return-type-.patch 2016-06-22 13:42:57.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/0002-Fix-for-PowerPC-handle-libffi-s-integer-return-type-.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,196 +0,0 @@ -From: Stephane Glondu -Date: Sat, 18 Jun 2016 16:01:07 +0200 -Subject: Fix for PowerPC: handle libffi's integer return type promotion - -Origin: https://github.com/ocamllabs/ocaml-ctypes/pull/405 -Bug: https://github.com/ocamllabs/ocaml-ctypes/issues/404 ---- - src/ctypes-foreign-base/ffi_call_stubs.c | 51 ++++++++++++++++++++++++---- - tests/clib/test_functions.c | 5 +++ - tests/clib/test_functions.h | 1 + - tests/test-higher_order/stubs/functions.ml | 3 ++ - tests/test-higher_order/test_higher_order.ml | 14 ++++++++ - 5 files changed, 68 insertions(+), 6 deletions(-) - -diff --git a/src/ctypes-foreign-base/ffi_call_stubs.c b/src/ctypes-foreign-base/ffi_call_stubs.c -index 604d174..af5f214 100644 ---- a/src/ctypes-foreign-base/ffi_call_stubs.c -+++ b/src/ctypes-foreign-base/ffi_call_stubs.c -@@ -114,6 +114,17 @@ static struct callspec { - /* return value offset */ - size_t roffset; - -+ /* return offset adjustment. -+ -+ libffi promotes return types that are less than the size of the -+ system register to the word-sized type ffi_arg. On a big-endian -+ system this means that the address where libffi writes the return -+ value is not always the same as the address from which ctypes -+ should read the value. -+ */ -+ size_t radjustment; -+ -+ - /* The context in which the call should run: whether errno is - checked, whether the runtime lock is released, and so on. */ - struct call_context { -@@ -129,7 +140,7 @@ static struct callspec { - ffi_cif *cif; - - } callspec_prototype = { -- 0, 0, 0, 0, BUILDING, NULL, -1, { 0, 0 }, NULL -+ 0, 0, 0, 0, BUILDING, NULL, -1, 0, { 0, 0 }, NULL - }; - - -@@ -246,6 +257,31 @@ value ctypes_add_argument(value callspec_, value argument_) - } - - -+static int ffi_return_type_adjustment(ffi_type *f) -+{ -+#ifdef ARCH_BIG_ENDIAN -+ /* An adjustment is needed (on bigendian systems) for integer types -+ less than the size of a word */ -+ if (f->size < sizeof(ffi_arg)) { -+ switch (f->type) { -+ case FFI_TYPE_INT: -+ case FFI_TYPE_UINT8: -+ case FFI_TYPE_SINT8: -+ case FFI_TYPE_UINT16: -+ case FFI_TYPE_SINT16: -+ case FFI_TYPE_UINT32: -+ case FFI_TYPE_SINT32: -+ case FFI_TYPE_UINT64: -+ case FFI_TYPE_SINT64: -+ return sizeof(ffi_arg) - f->size; -+ default: break; -+ } -+ } -+#endif -+ return 0; -+} -+ -+ - /* Pass the return type and conclude the specification preparation */ - /* prep_callspec : callspec -> 'a ffitype -> int -> unit */ - value ctypes_prep_callspec(value callspec_, value abi_, value rtype) -@@ -262,9 +298,11 @@ value ctypes_prep_callspec(value callspec_, value abi_, value rtype) - /* Add the (aligned) space needed for the return value */ - callspec->roffset = aligned_offset(callspec->bytes, - rffitype->alignment); -+ callspec->radjustment = ffi_return_type_adjustment(rffitype); - callspec->bytes = callspec->roffset + rffitype->size; - -- /* Allocate an extra word after the return value space to work -+ -+ /* Allocate an extra word after the return value space, to work - around a bug in libffi which causes it to write past the return - value space. - -@@ -308,7 +346,8 @@ value ctypes_call(value fnname, value function, value callspec_, - size_t bytes = compute_arg_buffer_size(callspec, &arg_array_offset); - - char *callbuffer = alloca(bytes); -- char *return_slot = callbuffer + roffset; -+ char *return_write_slot = callbuffer + roffset; -+ char *return_read_slot = return_write_slot + callspec->radjustment; - - populate_arg_array(callspec, (struct callbuffer *)callbuffer, - (void **)(callbuffer + arg_array_offset)); -@@ -350,7 +389,7 @@ value ctypes_call(value fnname, value function, value callspec_, - - ffi_call(cif, - cfunction, -- return_slot, -+ return_write_slot, - (void **)(callbuffer + arg_array_offset)); - if (check_errno) - { -@@ -369,7 +408,7 @@ value ctypes_call(value fnname, value function, value callspec_, - unix_error(saved_errno, buffer, Nothing); - } - -- callback_rv_buf = CTYPES_FROM_PTR(return_slot); -+ callback_rv_buf = CTYPES_FROM_PTR(return_read_slot); - CAMLreturn(caml_callback(rvreader, callback_rv_buf)); - } - -@@ -423,7 +462,7 @@ static void callback_handler_with_lock(ffi_cif *cif, - - /* now store the return value */ - assert (Tag_val(boxedfn) == Done); -- argptr = CTYPES_FROM_PTR(ret); -+ argptr = CTYPES_FROM_PTR(ret + ffi_return_type_adjustment(cif->rtype)); - caml_callback(Field(boxedfn, 0), argptr); - - CAMLreturn0; -diff --git a/tests/clib/test_functions.c b/tests/clib/test_functions.c -index 12501cb..23cb093 100644 ---- a/tests/clib/test_functions.c -+++ b/tests/clib/test_functions.c -@@ -637,3 +637,8 @@ int return_10(void) - { - return 10; - } -+ -+int callback_returns_char_a(char (*f)(void)) -+{ -+ return f() == 'a' ? 1 : 0; -+} -diff --git a/tests/clib/test_functions.h b/tests/clib/test_functions.h -index 7928acd..34d41f0 100644 ---- a/tests/clib/test_functions.h -+++ b/tests/clib/test_functions.h -@@ -234,4 +234,5 @@ void *retrieve_ocaml_value(void); - int sixargs(int, int, int, int, int, int); - int return_10(void); - -+int callback_returns_char_a(char (*)(void)); - #endif /* TEST_FUNCTIONS_H */ -diff --git a/tests/test-higher_order/stubs/functions.ml b/tests/test-higher_order/stubs/functions.ml -index c4e1f5f..0318f6e 100644 ---- a/tests/test-higher_order/stubs/functions.ml -+++ b/tests/test-higher_order/stubs/functions.ml -@@ -27,6 +27,9 @@ struct - funptr Ctypes.(int @-> int @-> returning int) @-> - int @-> int @-> returning int) - -+ let callback_returns_char_a = foreign "callback_returns_char_a" -+ (funptr Ctypes.(void @-> returning char) @-> returning int) -+ - let returning_funptr = foreign "returning_funptr" - (int @-> returning (funptr Ctypes.(int @-> int @-> returning int))) - -diff --git a/tests/test-higher_order/test_higher_order.ml b/tests/test-higher_order/test_higher_order.ml -index 0811bdb..199e2b5 100644 ---- a/tests/test-higher_order/test_higher_order.ml -+++ b/tests/test-higher_order/test_higher_order.ml -@@ -54,6 +54,14 @@ struct - assert_equal 10 (higher_order_3 acceptor ( + ) 3 4); - assert_equal 36 (higher_order_3 acceptor ( * ) 3 4) - -+ (* -+ Call a C function of type -+ int (char( * )(void)) -+ and check that the char returned by the function pointer is handled -+ correctly -+ *) -+ let test_function_pointer_returning_char _ = -+ assert_equal 1 (callback_returns_char_a (fun () -> 'a')) - - (* - Call a C function of type -@@ -142,6 +150,12 @@ let suite = "Higher-order tests" >::: - "test_higher_higher_order (stubs)" - >:: Stub_tests.test_higher_higher_order; - -+ "test_function_pointer_returning_char (stubs)" -+ >:: Stub_tests.test_function_pointer_returning_char; -+ -+ "test_function_pointer_returning_char (foreign)" -+ >:: Foreign_tests.test_function_pointer_returning_char; -+ - "test_returning_pointer_to_function (foreign)" - >:: Foreign_tests.test_returning_pointer_to_function; - diff -Nru ocaml-ctypes-0.6.2/debian/patches/0003-Initialize-the-return-slot-for-small-return-values-f.patch ocaml-ctypes-0.7.0/debian/patches/0003-Initialize-the-return-slot-for-small-return-values-f.patch --- ocaml-ctypes-0.6.2/debian/patches/0003-Initialize-the-return-slot-for-small-return-values-f.patch 2016-06-22 13:42:58.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/0003-Initialize-the-return-slot-for-small-return-values-f.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -From: Stephane Glondu -Date: Tue, 21 Jun 2016 09:02:38 +0200 -Subject: Initialize the return slot for small return values from callbacks - -Origin: https://github.com/ocamllabs/ocaml-ctypes/pull/406 -Bug: https://github.com/ocamllabs/ocaml-ctypes/issues/404 ---- - src/ctypes-foreign-base/ffi_call_stubs.c | 25 +++++++++++++++++++------ - 1 file changed, 19 insertions(+), 6 deletions(-) - -diff --git a/src/ctypes-foreign-base/ffi_call_stubs.c b/src/ctypes-foreign-base/ffi_call_stubs.c -index af5f214..6a0090f 100644 ---- a/src/ctypes-foreign-base/ffi_call_stubs.c -+++ b/src/ctypes-foreign-base/ffi_call_stubs.c -@@ -256,12 +256,9 @@ value ctypes_add_argument(value callspec_, value argument_) - CAMLreturn(Val_int(offset)); - } - -- --static int ffi_return_type_adjustment(ffi_type *f) -+static int ffi_return_type_promotes(ffi_type *f) - { --#ifdef ARCH_BIG_ENDIAN -- /* An adjustment is needed (on bigendian systems) for integer types -- less than the size of a word */ -+ /* libffi promotes integer return types that are smaller than a word */ - if (f->size < sizeof(ffi_arg)) { - switch (f->type) { - case FFI_TYPE_INT: -@@ -273,10 +270,21 @@ static int ffi_return_type_adjustment(ffi_type *f) - case FFI_TYPE_SINT32: - case FFI_TYPE_UINT64: - case FFI_TYPE_SINT64: -- return sizeof(ffi_arg) - f->size; -+ return 1; - default: break; - } - } -+ return 0; -+} -+ -+static int ffi_return_type_adjustment(ffi_type *f) -+{ -+#ifdef ARCH_BIG_ENDIAN -+ /* An adjustment is needed (on bigendian systems) for integer types -+ less than the size of a word */ -+ if (ffi_return_type_promotes(f)) { -+ sizeof(ffi_arg) - f->size; -+ } - #endif - return 0; - } -@@ -462,6 +470,11 @@ static void callback_handler_with_lock(ffi_cif *cif, - - /* now store the return value */ - assert (Tag_val(boxedfn) == Done); -+ -+ if (ffi_return_type_promotes(cif->rtype)) { -+ *(ffi_arg *)ret = 0; -+ } -+ - argptr = CTYPES_FROM_PTR(ret + ffi_return_type_adjustment(cif->rtype)); - caml_callback(Field(boxedfn, 0), argptr); - diff -Nru ocaml-ctypes-0.6.2/debian/patches/0004-Missing-return-in-ffi_return_type_adjustment.patch ocaml-ctypes-0.7.0/debian/patches/0004-Missing-return-in-ffi_return_type_adjustment.patch --- ocaml-ctypes-0.6.2/debian/patches/0004-Missing-return-in-ffi_return_type_adjustment.patch 2016-06-22 13:42:58.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/0004-Missing-return-in-ffi_return_type_adjustment.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -From: Stephane Glondu -Date: Wed, 22 Jun 2016 09:33:31 +0200 -Subject: Missing return in ffi_return_type_adjustment - -Origin: https://github.com/ocamllabs/ocaml-ctypes/pull/407 -Bug: https://github.com/ocamllabs/ocaml-ctypes/issues/404 ---- - src/ctypes-foreign-base/ffi_call_stubs.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/ctypes-foreign-base/ffi_call_stubs.c b/src/ctypes-foreign-base/ffi_call_stubs.c -index 6a0090f..3d92aeb 100644 ---- a/src/ctypes-foreign-base/ffi_call_stubs.c -+++ b/src/ctypes-foreign-base/ffi_call_stubs.c -@@ -283,7 +283,7 @@ static int ffi_return_type_adjustment(ffi_type *f) - /* An adjustment is needed (on bigendian systems) for integer types - less than the size of a word */ - if (ffi_return_type_promotes(f)) { -- sizeof(ffi_arg) - f->size; -+ return sizeof(ffi_arg) - f->size; - } - #endif - return 0; diff -Nru ocaml-ctypes-0.6.2/debian/patches/0005-Add-support-for-bytecode-architectures.patch ocaml-ctypes-0.7.0/debian/patches/0005-Add-support-for-bytecode-architectures.patch --- ocaml-ctypes-0.6.2/debian/patches/0005-Add-support-for-bytecode-architectures.patch 2016-06-22 13:42:58.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/0005-Add-support-for-bytecode-architectures.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,924 +0,0 @@ -From: Stephane Glondu -Date: Wed, 22 Jun 2016 11:58:02 +0200 -Subject: Add support for bytecode architectures - ---- - Makefile | 1 + - Makefile.rules | 15 +++- - Makefile.tests | 260 ++++++++++++++++++++++++++++----------------------------- - 3 files changed, 143 insertions(+), 133 deletions(-) - -diff --git a/Makefile b/Makefile -index eea8a67..0ef37c9 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,5 +1,6 @@ - .SECONDEXPANSION: - -+BEST:=$(shell if which ocamlopt > /dev/null; then echo native; else echo byte; fi) - DEBUG=false - COVERAGE=false - OCAML=ocaml -diff --git a/Makefile.rules b/Makefile.rules -index a1f5dcf..1ebde68 100644 ---- a/Makefile.rules -+++ b/Makefile.rules -@@ -48,6 +48,7 @@ CMX_OPTS = $($(PROJECT).cmx_opts) - CMA_OPTS = $(if $(C_OBJECTS),-cclib -l$(PROJECT)_stubs -dllib -l$(PROJECT)_stubs) - SUBPROJECT_DEPS = $($(PROJECT).subproject_deps) - LOCAL_CMXAS = $(SUBPROJECT_DEPS:%=$(BUILDDIR)/%.cmxa) -+LOCAL_CMAS = $(SUBPROJECT_DEPS:%=$(BUILDDIR)/%.cma) - CMXA_OPTS = $(if $(C_OBJECTS),-cclib -l$(PROJECT)_stubs) - - OCAMLINCLUDES = -I $(BUILDDIR)/$($(PROJECT).dir) \ -@@ -55,11 +56,16 @@ OCAMLINCLUDES = -I $(BUILDDIR)/$($(PROJECT).dir) \ - -I $(BUILDDIR)/$($(spdep).dir)) - NATIVE_LIB=$(BUILDDIR)/$(PROJECT).cmxa - NATIVE_TARGET=$(BUILDDIR)/$(PROJECT).native -+BEST_TARGET=$(BUILDDIR)/$(PROJECT).$(BEST) - LIB_TARGETS = $(BUILDDIR)/$(PROJECT).cma \ - $(STUB_LIB) \ -- $(XEN_LIB) \ -- $(BUILDDIR)/$(PROJECT).cmxa \ -- $(BUILDDIR)/$(PROJECT).cmxs -+ $(XEN_LIB) -+ifeq ($(BEST),native) -+LIB_TARGETS += $(BUILDDIR)/$(PROJECT).cmxa -+endif -+ifneq ($(wildcard $(shell ocamlc -where)/dynlink.cmxa),) -+LIB_TARGETS += $(BUILDDIR)/$(PROJECT).cmxs -+endif - LIB_TARGET_EXTRAS = $(if $(STUB_LIB),$(BUILDDIR)/lib$(PROJECT)_stubs.a) \ - $(if $(XEN_LIB),$(BUILDDIR)/lib$(PROJECT)_stubs_xen.a) \ - $(BUILDDIR)/$(PROJECT).a -@@ -112,3 +118,6 @@ $(BUILDDIR)/%.cmi : %.mli - - $(BUILDDIR)/%.native : $$(NATIVE_OBJECTS) $$(C_OBJECTS) - $(OCAMLFIND) opt -I $(BUILDDIR) -linkpkg $(OCAMLFLAGS) $(THREAD_FLAG) $(OCAMLFIND_PACKAGE_FLAGS) $(LOCAL_CMXAS) -o $@ $(NATIVE_OBJECTS) $(C_OBJECTS) $(OCAML_LINK_FLAGS) -+ -+$(BUILDDIR)/%.byte : $$(BYTE_OBJECTS) $$(C_OBJECTS) -+ $(OCAMLFIND) ocamlc -custom -I $(BUILDDIR) -linkpkg $(OCAMLFLAGS) $(THREAD_FLAG) $(OCAMLFIND_PACKAGE_FLAGS) $(LOCAL_CMAS) -o $@ $(BYTE_OBJECTS) $(C_OBJECTS) $(OCAML_LINK_FLAGS) -diff --git a/Makefile.tests b/Makefile.tests -index 41e474b..2d117de 100644 ---- a/Makefile.tests -+++ b/Makefile.tests -@@ -22,7 +22,7 @@ test-raw.threads = yes - test-raw.deps = bigarray oUnit str bytes - test-raw.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-raw: PROJECT=test-raw --test-raw: $$(NATIVE_TARGET) -+test-raw: $$(BEST_TARGET) - - test-pointers-stubs.dir = tests/test-pointers/stubs - test-pointers-stubs.threads = yes -@@ -37,7 +37,7 @@ test-pointers-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-pointers-stubs tests-common - test-pointers-stub-generator.deps = str bigarray bytes - test-pointers-stub-generator: PROJECT=test-pointers-stub-generator --test-pointers-stub-generator: $$(NATIVE_TARGET) -+test-pointers-stub-generator: $$(BEST_TARGET) - - test-pointers.dir = tests/test-pointers - test-pointers.threads = yes -@@ -46,15 +46,15 @@ test-pointers.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-pointers-stubs - test-pointers.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-pointers: PROJECT=test-pointers --test-pointers: $$(NATIVE_TARGET) -+test-pointers: $$(BEST_TARGET) - - test-pointers-generated: \ - tests/test-pointers/generated_bindings.ml \ - tests/test-pointers/generated_stubs.c - --tests/test-pointers/generated_stubs.c: $(BUILDDIR)/test-pointers-stub-generator.native -+tests/test-pointers/generated_stubs.c: $(BUILDDIR)/test-pointers-stub-generator.$(BEST) - $< --c-file $@ --tests/test-pointers/generated_bindings.ml: $(BUILDDIR)/test-pointers-stub-generator.native -+tests/test-pointers/generated_bindings.ml: $(BUILDDIR)/test-pointers-stub-generator.$(BEST) - $< --ml-file $@ - - test-variadic-stubs.dir = tests/test-variadic/stubs -@@ -70,7 +70,7 @@ test-variadic-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-variadic-stubs tests-common - test-variadic-stub-generator.deps = str bigarray bytes - test-variadic-stub-generator: PROJECT=test-variadic-stub-generator --test-variadic-stub-generator: $$(NATIVE_TARGET) -+test-variadic-stub-generator: $$(BEST_TARGET) - - test-variadic.dir = tests/test-variadic - test-variadic.threads = yes -@@ -79,15 +79,15 @@ test-variadic.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-variadic-stubs - test-variadic.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-variadic: PROJECT=test-variadic --test-variadic: $$(NATIVE_TARGET) -+test-variadic: $$(BEST_TARGET) - - test-variadic-generated: \ - tests/test-variadic/generated_bindings.ml \ - tests/test-variadic/generated_stubs.c - --tests/test-variadic/generated_stubs.c: $(BUILDDIR)/test-variadic-stub-generator.native -+tests/test-variadic/generated_stubs.c: $(BUILDDIR)/test-variadic-stub-generator.$(BEST) - $< --c-file $@ --tests/test-variadic/generated_bindings.ml: $(BUILDDIR)/test-variadic-stub-generator.native -+tests/test-variadic/generated_bindings.ml: $(BUILDDIR)/test-variadic-stub-generator.$(BEST) - $< --ml-file $@ - - -@@ -103,7 +103,7 @@ test-builtins-stub-generator.subproject_deps = ctypes cstubs \ - test-builtins-stubs ctypes-foreign-base ctypes-foreign-threaded tests-common - test-builtins-stub-generator.deps = str bigarray bytes - test-builtins-stub-generator: PROJECT=test-builtins-stub-generator --test-builtins-stub-generator: $$(NATIVE_TARGET) -+test-builtins-stub-generator: $$(BEST_TARGET) - - test-builtins.dir = tests/test-builtins - test-builtins.threads = yes -@@ -112,15 +112,15 @@ test-builtins.subproject_deps = ctypes cstubs test-builtins-stubs \ - ctypes-foreign-base ctypes-foreign-threaded tests-common - test-builtins.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-builtins: PROJECT=test-builtins --test-builtins: $$(NATIVE_TARGET) -+test-builtins: $$(BEST_TARGET) - - test-builtins-generated: \ - tests/test-builtins/generated_bindings.ml \ - tests/test-builtins/generated_stubs.c - --tests/test-builtins/generated_stubs.c: $(BUILDDIR)/test-builtins-stub-generator.native -+tests/test-builtins/generated_stubs.c: $(BUILDDIR)/test-builtins-stub-generator.$(BEST) - $< --c-file $@ --tests/test-builtins/generated_bindings.ml: $(BUILDDIR)/test-builtins-stub-generator.native -+tests/test-builtins/generated_bindings.ml: $(BUILDDIR)/test-builtins-stub-generator.$(BEST) - $< --ml-file $@ - - -@@ -136,7 +136,7 @@ test-macros-stub-generator.subproject_deps = ctypes cstubs \ - test-macros-stubs ctypes-foreign-base ctypes-foreign-threaded tests-common - test-macros-stub-generator.deps = str bigarray bytes - test-macros-stub-generator: PROJECT=test-macros-stub-generator --test-macros-stub-generator: $$(NATIVE_TARGET) -+test-macros-stub-generator: $$(BEST_TARGET) - - test-macros.dir = tests/test-macros - test-macros.threads = yes -@@ -145,15 +145,15 @@ test-macros.subproject_deps = ctypes cstubs test-macros-stubs \ - ctypes-foreign-base ctypes-foreign-threaded tests-common - test-macros.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-macros: PROJECT=test-macros --test-macros: $$(NATIVE_TARGET) -+test-macros: $$(BEST_TARGET) - - test-macros-generated: \ - tests/test-macros/generated_bindings.ml \ - tests/test-macros/generated_stubs.c - --tests/test-macros/generated_stubs.c: $(BUILDDIR)/test-macros-stub-generator.native -+tests/test-macros/generated_stubs.c: $(BUILDDIR)/test-macros-stub-generator.$(BEST) - $< --c-file $@ --tests/test-macros/generated_bindings.ml: $(BUILDDIR)/test-macros-stub-generator.native -+tests/test-macros/generated_bindings.ml: $(BUILDDIR)/test-macros-stub-generator.$(BEST) - $< --ml-file $@ - - -@@ -170,7 +170,7 @@ test-higher_order-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-higher_order-stubs tests-common - test-higher_order-stub-generator.deps = str bigarray bytes - test-higher_order-stub-generator: PROJECT=test-higher_order-stub-generator --test-higher_order-stub-generator: $$(NATIVE_TARGET) -+test-higher_order-stub-generator: $$(BEST_TARGET) - - test-higher_order.dir = tests/test-higher_order - test-higher_order.threads = yes -@@ -179,15 +179,15 @@ test-higher_order.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-higher_order-stubs tests-common - test-higher_order.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-higher_order: PROJECT=test-higher_order --test-higher_order: $$(NATIVE_TARGET) -+test-higher_order: $$(BEST_TARGET) - - test-higher_order-generated: \ - tests/test-higher_order/generated_bindings.ml \ - tests/test-higher_order/generated_stubs.c - --tests/test-higher_order/generated_stubs.c: $(BUILDDIR)/test-higher_order-stub-generator.native -+tests/test-higher_order/generated_stubs.c: $(BUILDDIR)/test-higher_order-stub-generator.$(BEST) - $< --c-file $@ --tests/test-higher_order/generated_bindings.ml: $(BUILDDIR)/test-higher_order-stub-generator.native -+tests/test-higher_order/generated_bindings.ml: $(BUILDDIR)/test-higher_order-stub-generator.$(BEST) - $< --ml-file $@ - - test-enums-struct-stubs.dir = tests/test-enums/struct-stubs -@@ -214,7 +214,7 @@ test-enums-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-enums-stubs tests-common - test-enums-stub-generator.deps = str bigarray bytes - test-enums-stub-generator: PROJECT=test-enums-stub-generator --test-enums-stub-generator: $$(NATIVE_TARGET) -+test-enums-stub-generator: $$(BEST_TARGET) - - test-enums-struct-stub-generator.dir = tests/test-enums/struct-stub-generator - test-enums-struct-stub-generator.threads = yes -@@ -222,7 +222,7 @@ test-enums-struct-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-enums-struct-stubs tests-common - test-enums-struct-stub-generator.deps = str bigarray bytes - test-enums-struct-stub-generator: PROJECT=test-enums-struct-stub-generator --test-enums-struct-stub-generator: $$(NATIVE_TARGET) -+test-enums-struct-stub-generator: $$(BEST_TARGET) - - test-enums.dir = tests/test-enums - test-enums.threads = yes -@@ -231,7 +231,7 @@ test-enums.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-enums-struct-stubs test-enums-stubs tests-common - test-enums.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-enums: PROJECT=test-enums --test-enums: $$(NATIVE_TARGET) -+test-enums: $$(BEST_TARGET) - - test-enums-structs-generated: \ - tests/test-enums/stubs/generated_struct_bindings.ml \ -@@ -241,15 +241,15 @@ test-enums-generated: \ - tests/test-enums/generated_bindings.ml \ - tests/test-enums/generated_stubs.c \ - --tests/test-enums/generated_stubs.c: $(BUILDDIR)/test-enums-stub-generator.native -+tests/test-enums/generated_stubs.c: $(BUILDDIR)/test-enums-stub-generator.$(BEST) - $< --c-file $@ --tests/test-enums/generated_bindings.ml: $(BUILDDIR)/test-enums-stub-generator.native -+tests/test-enums/generated_bindings.ml: $(BUILDDIR)/test-enums-stub-generator.$(BEST) - $< --ml-file $@ --tests/test-enums/stubs/generated_struct_bindings.ml: $(BUILDDIR)/test-enums-ml-struct-stub-generator.native -+tests/test-enums/stubs/generated_struct_bindings.ml: $(BUILDDIR)/test-enums-ml-struct-stub-generator.$(BEST) - $< > $@ --$(BUILDDIR)/test-enums-ml-struct-stub-generator.native: $(BUILDDIR)/tests/test-enums/generated_struct_stubs.c -+$(BUILDDIR)/test-enums-ml-struct-stub-generator.$(BEST): $(BUILDDIR)/tests/test-enums/generated_struct_stubs.c - $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ --$(BUILDDIR)/tests/test-enums/generated_struct_stubs.c: $(BUILDDIR)/test-enums-struct-stub-generator.native -+$(BUILDDIR)/tests/test-enums/generated_struct_stubs.c: $(BUILDDIR)/test-enums-struct-stub-generator.$(BEST) - $< --c-struct-file $@ - - test-structs-stubs.dir = tests/test-structs/stubs -@@ -265,7 +265,7 @@ test-structs-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-structs-stubs tests-common - test-structs-stub-generator.deps = str bigarray bytes - test-structs-stub-generator: PROJECT=test-structs-stub-generator --test-structs-stub-generator: $$(NATIVE_TARGET) -+test-structs-stub-generator: $$(BEST_TARGET) - - test-structs.dir = tests/test-structs - test-structs.threads = yes -@@ -274,7 +274,7 @@ test-structs.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-structs-stubs tests-common - test-structs.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-structs: PROJECT=test-structs --test-structs: $$(NATIVE_TARGET) -+test-structs: $$(BEST_TARGET) - - test-structs-generated: \ - tests/test-structs/generated_bindings.ml \ -@@ -282,15 +282,15 @@ test-structs-generated: \ - tests/test-structs/generated_struct_bindings.ml \ - $(BUILDDIR)/tests/test-structs/generated_struct_stubs.c - --tests/test-structs/generated_stubs.c: $(BUILDDIR)/test-structs-stub-generator.native -+tests/test-structs/generated_stubs.c: $(BUILDDIR)/test-structs-stub-generator.$(BEST) - $< --c-file $@ --tests/test-structs/generated_bindings.ml: $(BUILDDIR)/test-structs-stub-generator.native -+tests/test-structs/generated_bindings.ml: $(BUILDDIR)/test-structs-stub-generator.$(BEST) - $< --ml-file $@ --tests/test-structs/generated_struct_bindings.ml: $(BUILDDIR)/test-structs-ml-stub-generator.native -+tests/test-structs/generated_struct_bindings.ml: $(BUILDDIR)/test-structs-ml-stub-generator.$(BEST) - $< > $@ --$(BUILDDIR)/test-structs-ml-stub-generator.native: $(BUILDDIR)/tests/test-structs/generated_struct_stubs.c -+$(BUILDDIR)/test-structs-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-structs/generated_struct_stubs.c - $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ --$(BUILDDIR)/tests/test-structs/generated_struct_stubs.c: $(BUILDDIR)/test-structs-stub-generator.native -+$(BUILDDIR)/tests/test-structs/generated_struct_stubs.c: $(BUILDDIR)/test-structs-stub-generator.$(BEST) - $< --c-struct-file $@ - - test-constants-stubs.dir = tests/test-constants/stubs -@@ -306,7 +306,7 @@ test-constants-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-constants-stubs tests-common - test-constants-stub-generator.deps = str bigarray bytes - test-constants-stub-generator: PROJECT=test-constants-stub-generator --test-constants-stub-generator: $$(NATIVE_TARGET) -+test-constants-stub-generator: $$(BEST_TARGET) - - test-constants.dir = tests/test-constants - test-constants.threads = yes -@@ -315,7 +315,7 @@ test-constants.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-constants-stubs tests-common - test-constants.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-constants: PROJECT=test-constants --test-constants: $$(NATIVE_TARGET) -+test-constants: $$(BEST_TARGET) - - test-constants-generated: \ - tests/test-constants/generated_bindings.ml \ -@@ -323,15 +323,15 @@ test-constants-generated: \ - tests/test-constants/generated_struct_bindings.ml \ - $(BUILDDIR)/tests/test-constants/generated_struct_stubs.c - --tests/test-constants/generated_stubs.c: $(BUILDDIR)/test-constants-stub-generator.native -+tests/test-constants/generated_stubs.c: $(BUILDDIR)/test-constants-stub-generator.$(BEST) - $< --c-file $@ --tests/test-constants/generated_bindings.ml: $(BUILDDIR)/test-constants-stub-generator.native -+tests/test-constants/generated_bindings.ml: $(BUILDDIR)/test-constants-stub-generator.$(BEST) - $< --ml-file $@ --tests/test-constants/generated_struct_bindings.ml: $(BUILDDIR)/test-constants-ml-stub-generator.native -+tests/test-constants/generated_struct_bindings.ml: $(BUILDDIR)/test-constants-ml-stub-generator.$(BEST) - $< > $@ --$(BUILDDIR)/test-constants-ml-stub-generator.native: $(BUILDDIR)/tests/test-constants/generated_struct_stubs.c -+$(BUILDDIR)/test-constants-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-constants/generated_struct_stubs.c - $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ --$(BUILDDIR)/tests/test-constants/generated_struct_stubs.c: $(BUILDDIR)/test-constants-stub-generator.native -+$(BUILDDIR)/tests/test-constants/generated_struct_stubs.c: $(BUILDDIR)/test-constants-stub-generator.$(BEST) - $< --c-struct-file $@ - - -@@ -340,7 +340,7 @@ test-finalisers.threads = yes - test-finalisers.deps = str bigarray oUnit bytes - test-finalisers.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-finalisers: PROJECT=test-finalisers --test-finalisers: $$(NATIVE_TARGET) -+test-finalisers: $$(BEST_TARGET) - - test-cstdlib-stubs.dir = tests/test-cstdlib/stubs - test-cstdlib-stubs.threads = yes -@@ -355,7 +355,7 @@ test-cstdlib-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-cstdlib-stubs tests-common - test-cstdlib-stub-generator.deps = str bigarray bytes - test-cstdlib-stub-generator: PROJECT=test-cstdlib-stub-generator --test-cstdlib-stub-generator: $$(NATIVE_TARGET) -+test-cstdlib-stub-generator: $$(BEST_TARGET) - - test-cstdlib.dir = tests/test-cstdlib - test-cstdlib.threads = yes -@@ -364,15 +364,15 @@ test-cstdlib.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-cstdlib-stubs tests-common - test-cstdlib.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-cstdlib: PROJECT=test-cstdlib --test-cstdlib: $$(NATIVE_TARGET) -+test-cstdlib: $$(BEST_TARGET) - - test-cstdlib-generated: \ - tests/test-cstdlib/generated_bindings.ml \ - tests/test-cstdlib/generated_stubs.c - --tests/test-cstdlib/generated_stubs.c: $(BUILDDIR)/test-cstdlib-stub-generator.native -+tests/test-cstdlib/generated_stubs.c: $(BUILDDIR)/test-cstdlib-stub-generator.$(BEST) - $< --c-file $@ --tests/test-cstdlib/generated_bindings.ml: $(BUILDDIR)/test-cstdlib-stub-generator.native -+tests/test-cstdlib/generated_bindings.ml: $(BUILDDIR)/test-cstdlib-stub-generator.$(BEST) - $< --ml-file $@ - - test-sizeof.dir = tests/test-sizeof -@@ -380,7 +380,7 @@ test-sizeof.threads = yes - test-sizeof.deps = str bigarray oUnit bytes - test-sizeof.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-sizeof: PROJECT=test-sizeof --test-sizeof: $$(NATIVE_TARGET) -+test-sizeof: $$(BEST_TARGET) - - test-foreign_values-stubs.dir = tests/test-foreign_values/stubs - test-foreign_values-stubs.threads = yes -@@ -395,7 +395,7 @@ test-foreign_values-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-foreign_values-stubs tests-common - test-foreign_values-stub-generator.deps = str bigarray bytes - test-foreign_values-stub-generator: PROJECT=test-foreign_values-stub-generator --test-foreign_values-stub-generator: $$(NATIVE_TARGET) -+test-foreign_values-stub-generator: $$(BEST_TARGET) - - test-foreign_values.dir = tests/test-foreign_values - test-foreign_values.threads = yes -@@ -404,15 +404,15 @@ test-foreign_values.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-foreign_values-stubs - test-foreign_values.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-foreign_values: PROJECT=test-foreign_values --test-foreign_values: $$(NATIVE_TARGET) -+test-foreign_values: $$(BEST_TARGET) - - test-foreign_values-generated: \ - tests/test-foreign_values/generated_bindings.ml \ - tests/test-foreign_values/generated_stubs.c - --tests/test-foreign_values/generated_stubs.c: $(BUILDDIR)/test-foreign_values-stub-generator.native -+tests/test-foreign_values/generated_stubs.c: $(BUILDDIR)/test-foreign_values-stub-generator.$(BEST) - $< --c-file $@ --tests/test-foreign_values/generated_bindings.ml: $(BUILDDIR)/test-foreign_values-stub-generator.native -+tests/test-foreign_values/generated_bindings.ml: $(BUILDDIR)/test-foreign_values-stub-generator.$(BEST) - $< --ml-file $@ - - test-unions-stubs.dir = tests/test-unions/stubs -@@ -428,7 +428,7 @@ test-unions-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-unions-stubs tests-common - test-unions-stub-generator.deps = str bigarray bytes - test-unions-stub-generator: PROJECT=test-unions-stub-generator --test-unions-stub-generator: $$(NATIVE_TARGET) -+test-unions-stub-generator: $$(BEST_TARGET) - - test-unions.dir = tests/test-unions - test-unions.threads = yes -@@ -437,7 +437,7 @@ test-unions.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-unions-stubs tests-common - test-unions.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-unions: PROJECT=test-unions --test-unions: $$(NATIVE_TARGET) -+test-unions: $$(BEST_TARGET) - - test-unions-generated: \ - tests/test-unions/generated_bindings.ml \ -@@ -445,15 +445,15 @@ test-unions-generated: \ - tests/test-unions/generated_struct_bindings.ml \ - $(BUILDDIR)/tests/test-unions/generated_struct_stubs.c - --tests/test-unions/generated_stubs.c: $(BUILDDIR)/test-unions-stub-generator.native -+tests/test-unions/generated_stubs.c: $(BUILDDIR)/test-unions-stub-generator.$(BEST) - $< --c-file $@ --tests/test-unions/generated_bindings.ml: $(BUILDDIR)/test-unions-stub-generator.native -+tests/test-unions/generated_bindings.ml: $(BUILDDIR)/test-unions-stub-generator.$(BEST) - $< --ml-file $@ --tests/test-unions/generated_struct_bindings.ml: $(BUILDDIR)/test-unions-ml-stub-generator.native -+tests/test-unions/generated_struct_bindings.ml: $(BUILDDIR)/test-unions-ml-stub-generator.$(BEST) - $< > $@ --$(BUILDDIR)/test-unions-ml-stub-generator.native: $(BUILDDIR)/tests/test-unions/generated_struct_stubs.c -+$(BUILDDIR)/test-unions-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-unions/generated_struct_stubs.c - $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ --$(BUILDDIR)/tests/test-unions/generated_struct_stubs.c: $(BUILDDIR)/test-unions-stub-generator.native -+$(BUILDDIR)/tests/test-unions/generated_struct_stubs.c: $(BUILDDIR)/test-unions-stub-generator.$(BEST) - $< --c-struct-file $@ - - test-custom_ops.dir = tests/test-custom_ops -@@ -461,7 +461,7 @@ test-custom_ops.threads = yes - test-custom_ops.deps = str bigarray oUnit bytes - test-custom_ops.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-custom_ops: PROJECT=test-custom_ops --test-custom_ops: $$(NATIVE_TARGET) -+test-custom_ops: $$(BEST_TARGET) - - test-arrays-stubs.dir = tests/test-arrays/stubs - test-arrays-stubs.threads = yes -@@ -476,7 +476,7 @@ test-arrays-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-arrays-stubs tests-common - test-arrays-stub-generator.deps = str bigarray bytes - test-arrays-stub-generator: PROJECT=test-arrays-stub-generator --test-arrays-stub-generator: $$(NATIVE_TARGET) -+test-arrays-stub-generator: $$(BEST_TARGET) - - test-arrays.dir = tests/test-arrays - test-arrays.threads = yes -@@ -485,15 +485,15 @@ test-arrays.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-arrays-stubs tests-common - test-arrays.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-arrays: PROJECT=test-arrays --test-arrays: $$(NATIVE_TARGET) -+test-arrays: $$(BEST_TARGET) - - test-arrays-generated: \ - tests/test-arrays/generated_bindings.ml \ - tests/test-arrays/generated_stubs.c - --tests/test-arrays/generated_stubs.c: $(BUILDDIR)/test-arrays-stub-generator.native -+tests/test-arrays/generated_stubs.c: $(BUILDDIR)/test-arrays-stub-generator.$(BEST) - $< --c-file $@ --tests/test-arrays/generated_bindings.ml: $(BUILDDIR)/test-arrays-stub-generator.native -+tests/test-arrays/generated_bindings.ml: $(BUILDDIR)/test-arrays-stub-generator.$(BEST) - $< --ml-file $@ - - test-foreign-errno.dir = tests/test-foreign-errno -@@ -501,21 +501,21 @@ test-foreign-errno.threads = yes - test-foreign-errno.deps = str bigarray oUnit bytes - test-foreign-errno.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-foreign-errno: PROJECT=test-foreign-errno --test-foreign-errno: $$(NATIVE_TARGET) -+test-foreign-errno: $$(BEST_TARGET) - - test-passable.dir = tests/test-passable - test-passable.threads = yes - test-passable.deps = str bigarray oUnit bytes - test-passable.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-passable: PROJECT=test-passable --test-passable: $$(NATIVE_TARGET) -+test-passable: $$(BEST_TARGET) - - test-alignment.dir = tests/test-alignment - test-alignment.threads = yes - test-alignment.deps = str bigarray oUnit bytes - test-alignment.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-alignment: PROJECT=test-alignment --test-alignment: $$(NATIVE_TARGET) -+test-alignment: $$(BEST_TARGET) - - test-views-stubs.dir = tests/test-views/stubs - test-views-stubs.threads = yes -@@ -530,7 +530,7 @@ test-views-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-views-stubs tests-common - test-views-stub-generator.deps = str bigarray bytes - test-views-stub-generator: PROJECT=test-views-stub-generator --test-views-stub-generator: $$(NATIVE_TARGET) -+test-views-stub-generator: $$(BEST_TARGET) - - test-views.dir = tests/test-views - test-views.threads = yes -@@ -538,15 +538,15 @@ test-views.deps = str bigarray oUnit bytes - test-views.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded cstubs test-views-stubs tests-common - test-views.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-views: PROJECT=test-views --test-views: $$(NATIVE_TARGET) -+test-views: $$(BEST_TARGET) - - test-views-generated: \ - tests/test-views/generated_bindings.ml \ - tests/test-views/generated_stubs.c - --tests/test-views/generated_stubs.c: $(BUILDDIR)/test-views-stub-generator.native -+tests/test-views/generated_stubs.c: $(BUILDDIR)/test-views-stub-generator.$(BEST) - $< --c-file $@ --tests/test-views/generated_bindings.ml: $(BUILDDIR)/test-views-stub-generator.native -+tests/test-views/generated_bindings.ml: $(BUILDDIR)/test-views-stub-generator.$(BEST) - $< --ml-file $@ - - test-oo_style-stubs.dir = tests/test-oo_style/stubs -@@ -562,7 +562,7 @@ test-oo_style-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-oo_style-stubs tests-common - test-oo_style-stub-generator.deps = str bigarray bytes - test-oo_style-stub-generator: PROJECT=test-oo_style-stub-generator --test-oo_style-stub-generator: $$(NATIVE_TARGET) -+test-oo_style-stub-generator: $$(BEST_TARGET) - - test-oo_style.dir = tests/test-oo_style - test-oo_style.threads = yes -@@ -571,15 +571,15 @@ test-oo_style.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-oo_style-stubs tests-common - test-oo_style.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-oo_style: PROJECT=test-oo_style --test-oo_style: $$(NATIVE_TARGET) -+test-oo_style: $$(BEST_TARGET) - - test-oo_style-generated: \ - tests/test-oo_style/generated_bindings.ml \ - tests/test-oo_style/generated_stubs.c - --tests/test-oo_style/generated_stubs.c: $(BUILDDIR)/test-oo_style-stub-generator.native -+tests/test-oo_style/generated_stubs.c: $(BUILDDIR)/test-oo_style-stub-generator.$(BEST) - $< --c-file $@ --tests/test-oo_style/generated_bindings.ml: $(BUILDDIR)/test-oo_style-stub-generator.native -+tests/test-oo_style/generated_bindings.ml: $(BUILDDIR)/test-oo_style-stub-generator.$(BEST) - $< --ml-file $@ - - test-type_printing.dir = tests/test-type_printing -@@ -587,7 +587,7 @@ test-type_printing.threads = yes - test-type_printing.deps = str bigarray oUnit bytes - test-type_printing.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-type_printing: PROJECT=test-type_printing --test-type_printing: $$(NATIVE_TARGET) -+test-type_printing: $$(BEST_TARGET) - - test-value_printing-stubs.dir = tests/test-value_printing/stubs - test-value_printing-stubs.threads = yes -@@ -602,7 +602,7 @@ test-value_printing-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-value_printing-stubs tests-common - test-value_printing-stub-generator.deps = str bigarray bytes - test-value_printing-stub-generator: PROJECT=test-value_printing-stub-generator --test-value_printing-stub-generator: $$(NATIVE_TARGET) -+test-value_printing-stub-generator: $$(BEST_TARGET) - - test-value_printing.dir = tests/test-value_printing - test-value_printing.threads = yes -@@ -611,15 +611,15 @@ test-value_printing.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-value_printing-stubs - test-value_printing.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-value_printing: PROJECT=test-value_printing --test-value_printing: $$(NATIVE_TARGET) -+test-value_printing: $$(BEST_TARGET) - - test-value_printing-generated: \ - tests/test-value_printing/generated_bindings.ml \ - tests/test-value_printing/generated_stubs.c - --tests/test-value_printing/generated_stubs.c: $(BUILDDIR)/test-value_printing-stub-generator.native -+tests/test-value_printing/generated_stubs.c: $(BUILDDIR)/test-value_printing-stub-generator.$(BEST) - $< --c-file $@ --tests/test-value_printing/generated_bindings.ml: $(BUILDDIR)/test-value_printing-stub-generator.native -+tests/test-value_printing/generated_bindings.ml: $(BUILDDIR)/test-value_printing-stub-generator.$(BEST) - $< --ml-file $@ - - test-complex-stubs.dir = tests/test-complex/stubs -@@ -635,7 +635,7 @@ test-complex-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-complex-stubs tests-common - test-complex-stub-generator.deps = str bigarray bytes - test-complex-stub-generator: PROJECT=test-complex-stub-generator --test-complex-stub-generator: $$(NATIVE_TARGET) -+test-complex-stub-generator: $$(BEST_TARGET) - - test-complex.dir = tests/test-complex - test-complex.threads = yes -@@ -644,15 +644,15 @@ test-complex.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-complex-stubs - test-complex.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-complex: PROJECT=test-complex --test-complex: $$(NATIVE_TARGET) -+test-complex: $$(BEST_TARGET) - - test-complex-generated: \ - tests/test-complex/generated_bindings.ml \ - tests/test-complex/generated_stubs.c - --tests/test-complex/generated_stubs.c: $(BUILDDIR)/test-complex-stub-generator.native -+tests/test-complex/generated_stubs.c: $(BUILDDIR)/test-complex-stub-generator.$(BEST) - $< --c-file $@ --tests/test-complex/generated_bindings.ml: $(BUILDDIR)/test-complex-stub-generator.native -+tests/test-complex/generated_bindings.ml: $(BUILDDIR)/test-complex-stub-generator.$(BEST) - $< --ml-file $@ - - test-bools-stubs.dir = tests/test-bools/stubs -@@ -668,7 +668,7 @@ test-bools-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-bools-stubs tests-common - test-bools-stub-generator.deps = str bigarray bytes - test-bools-stub-generator: PROJECT=test-bools-stub-generator --test-bools-stub-generator: $$(NATIVE_TARGET) -+test-bools-stub-generator: $$(BEST_TARGET) - - test-bools.dir = tests/test-bools - test-bools.threads = yes -@@ -677,15 +677,15 @@ test-bools.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-bools-stubs - test-bools.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-bools: PROJECT=test-bools --test-bools: $$(NATIVE_TARGET) -+test-bools: $$(BEST_TARGET) - - test-bools-generated: \ - tests/test-bools/generated_bindings.ml \ - tests/test-bools/generated_stubs.c - --tests/test-bools/generated_stubs.c: $(BUILDDIR)/test-bools-stub-generator.native -+tests/test-bools/generated_stubs.c: $(BUILDDIR)/test-bools-stub-generator.$(BEST) - $< --c-file $@ --tests/test-bools/generated_bindings.ml: $(BUILDDIR)/test-bools-stub-generator.native -+tests/test-bools/generated_bindings.ml: $(BUILDDIR)/test-bools-stub-generator.$(BEST) - $< --ml-file $@ - - test-callback_lifetime-stubs.dir = tests/test-callback_lifetime/stubs -@@ -701,7 +701,7 @@ test-callback_lifetime-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-callback_lifetime-stubs tests-common - test-callback_lifetime-stub-generator.deps = str bigarray bytes - test-callback_lifetime-stub-generator: PROJECT=test-callback_lifetime-stub-generator --test-callback_lifetime-stub-generator: $$(NATIVE_TARGET) -+test-callback_lifetime-stub-generator: $$(BEST_TARGET) - - test-callback_lifetime.dir = tests/test-callback_lifetime - test-callback_lifetime.threads = yes -@@ -710,15 +710,15 @@ test-callback_lifetime.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs test-callback_lifetime-stubs tests-common - test-callback_lifetime.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-callback_lifetime: PROJECT=test-callback_lifetime --test-callback_lifetime: $$(NATIVE_TARGET) -+test-callback_lifetime: $$(BEST_TARGET) - - test-callback_lifetime-generated: \ - tests/test-callback_lifetime/generated_bindings.ml \ - tests/test-callback_lifetime/generated_stubs.c - --tests/test-callback_lifetime/generated_stubs.c: $(BUILDDIR)/test-callback_lifetime-stub-generator.native -+tests/test-callback_lifetime/generated_stubs.c: $(BUILDDIR)/test-callback_lifetime-stub-generator.$(BEST) - $< --c-file $@ --tests/test-callback_lifetime/generated_bindings.ml: $(BUILDDIR)/test-callback_lifetime-stub-generator.native -+tests/test-callback_lifetime/generated_bindings.ml: $(BUILDDIR)/test-callback_lifetime-stub-generator.$(BEST) - $< --ml-file $@ - - test-stubs.dir = tests/test-stubs -@@ -726,7 +726,7 @@ test-stubs.threads = yes - test-stubs.deps = str bigarray oUnit bytes - test-stubs.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded - test-stubs: PROJECT=test-stubs --test-stubs: $$(NATIVE_TARGET) -+test-stubs: $$(BEST_TARGET) - - test-bigarrays-stubs.dir = tests/test-bigarrays/stubs - test-bigarrays-stubs.threads = yes -@@ -741,7 +741,7 @@ test-bigarrays-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-bigarrays-stubs tests-common - test-bigarrays-stub-generator.deps = str bigarray bytes - test-bigarrays-stub-generator: PROJECT=test-bigarrays-stub-generator --test-bigarrays-stub-generator: $$(NATIVE_TARGET) -+test-bigarrays-stub-generator: $$(BEST_TARGET) - - test-bigarrays.dir = tests/test-bigarrays - test-bigarrays.threads = yes -@@ -750,15 +750,15 @@ test-bigarrays.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-bigarrays-stubs - test-bigarrays.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-bigarrays: PROJECT=test-bigarrays --test-bigarrays: $$(NATIVE_TARGET) -+test-bigarrays: $$(BEST_TARGET) - - test-bigarrays-generated: \ - tests/test-bigarrays/generated_bindings.ml \ - tests/test-bigarrays/generated_stubs.c - --tests/test-bigarrays/generated_stubs.c: $(BUILDDIR)/test-bigarrays-stub-generator.native -+tests/test-bigarrays/generated_stubs.c: $(BUILDDIR)/test-bigarrays-stub-generator.$(BEST) - $< --c-file $@ --tests/test-bigarrays/generated_bindings.ml: $(BUILDDIR)/test-bigarrays-stub-generator.native -+tests/test-bigarrays/generated_bindings.ml: $(BUILDDIR)/test-bigarrays-stub-generator.$(BEST) - $< --ml-file $@ - - test-coercions-stubs.dir = tests/test-coercions/stubs -@@ -774,7 +774,7 @@ test-coercions-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-coercions-stubs tests-common - test-coercions-stub-generator.deps = str bigarray bytes - test-coercions-stub-generator: PROJECT=test-coercions-stub-generator --test-coercions-stub-generator: $$(NATIVE_TARGET) -+test-coercions-stub-generator: $$(BEST_TARGET) - - test-coercions.dir = tests/test-coercions - test-coercions.threads = yes -@@ -783,15 +783,15 @@ test-coercions.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-coercions-stubs - test-coercions.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-coercions: PROJECT=test-coercions --test-coercions: $$(NATIVE_TARGET) -+test-coercions: $$(BEST_TARGET) - - test-coercions-generated: \ - tests/test-coercions/generated_bindings.ml \ - tests/test-coercions/generated_stubs.c - --tests/test-coercions/generated_stubs.c: $(BUILDDIR)/test-coercions-stub-generator.native -+tests/test-coercions/generated_stubs.c: $(BUILDDIR)/test-coercions-stub-generator.$(BEST) - $< --c-file $@ --tests/test-coercions/generated_bindings.ml: $(BUILDDIR)/test-coercions-stub-generator.native -+tests/test-coercions/generated_bindings.ml: $(BUILDDIR)/test-coercions-stub-generator.$(BEST) - $< --ml-file $@ - - test-roots.dir = tests/test-roots -@@ -801,7 +801,7 @@ test-roots.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common - test-roots.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-roots: PROJECT=test-roots --test-roots: $$(NATIVE_TARGET) -+test-roots: $$(BEST_TARGET) - - test-passing-ocaml-values-stubs.dir = tests/test-passing-ocaml-values/stubs - test-passing-ocaml-values-stubs.threads = yes -@@ -816,7 +816,7 @@ test-passing-ocaml-values-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-passing-ocaml-values-stubs tests-common - test-passing-ocaml-values-stub-generator.deps = str bigarray bytes - test-passing-ocaml-values-stub-generator: PROJECT=test-passing-ocaml-values-stub-generator --test-passing-ocaml-values-stub-generator: $$(NATIVE_TARGET) -+test-passing-ocaml-values-stub-generator: $$(BEST_TARGET) - - test-passing-ocaml-values.dir = tests/test-passing-ocaml-values - test-passing-ocaml-values.threads = yes -@@ -825,15 +825,15 @@ test-passing-ocaml-values.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-passing-ocaml-values-stubs - test-passing-ocaml-values.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-passing-ocaml-values: PROJECT=test-passing-ocaml-values --test-passing-ocaml-values: $$(NATIVE_TARGET) -+test-passing-ocaml-values: $$(BEST_TARGET) - - test-passing-ocaml-values-generated: \ - tests/test-passing-ocaml-values/generated_bindings.ml \ - tests/test-passing-ocaml-values/generated_stubs.c - --tests/test-passing-ocaml-values/generated_stubs.c: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.native -+tests/test-passing-ocaml-values/generated_stubs.c: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.$(BEST) - $< --c-file $@ --tests/test-passing-ocaml-values/generated_bindings.ml: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.native -+tests/test-passing-ocaml-values/generated_bindings.ml: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.$(BEST) - $< --ml-file $@ - - test-lwt-jobs-stubs.dir = tests/test-lwt-jobs/stubs -@@ -849,7 +849,7 @@ test-lwt-jobs-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-lwt-jobs-stubs tests-common - test-lwt-jobs-stub-generator.deps = str bigarray bytes - test-lwt-jobs-stub-generator: PROJECT=test-lwt-jobs-stub-generator --test-lwt-jobs-stub-generator: $$(NATIVE_TARGET) -+test-lwt-jobs-stub-generator: $$(BEST_TARGET) - - test-lwt-jobs.dir = tests/test-lwt-jobs - test-lwt-jobs.threads = yes -@@ -858,7 +858,7 @@ test-lwt-jobs.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-lwt-jobs-stubs - test-lwt-jobs.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-lwt-jobs: PROJECT=test-lwt-jobs --test-lwt-jobs: $$(NATIVE_TARGET) -+test-lwt-jobs: $$(BEST_TARGET) - - test-lwt-jobs-generated: \ - tests/test-lwt-jobs/generated_bindings.ml \ -@@ -866,15 +866,15 @@ test-lwt-jobs-generated: \ - tests/test-lwt-jobs/generated_struct_bindings.ml \ - $(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c - --tests/test-lwt-jobs/generated_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.native -+tests/test-lwt-jobs/generated_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.$(BEST) - $< --c-file $@ --tests/test-lwt-jobs/generated_bindings.ml: $(BUILDDIR)/test-lwt-jobs-stub-generator.native -+tests/test-lwt-jobs/generated_bindings.ml: $(BUILDDIR)/test-lwt-jobs-stub-generator.$(BEST) - $< --ml-file $@ --tests/test-lwt-jobs/generated_struct_bindings.ml: $(BUILDDIR)/test-lwt-jobs-ml-stub-generator.native -+tests/test-lwt-jobs/generated_struct_bindings.ml: $(BUILDDIR)/test-lwt-jobs-ml-stub-generator.$(BEST) - $< > $@ --$(BUILDDIR)/test-lwt-jobs-ml-stub-generator.native: $(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c -+$(BUILDDIR)/test-lwt-jobs-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c - $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ --$(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.native -+$(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.$(BEST) - $< --c-struct-file $@ - - test-returning-errno-lwt-stubs.dir = tests/test-returning-errno-lwt/stubs -@@ -890,7 +890,7 @@ test-returning-errno-lwt-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-returning-errno-lwt-stubs tests-common - test-returning-errno-lwt-stub-generator.deps = str bigarray bytes - test-returning-errno-lwt-stub-generator: PROJECT=test-returning-errno-lwt-stub-generator --test-returning-errno-lwt-stub-generator: $$(NATIVE_TARGET) -+test-returning-errno-lwt-stub-generator: $$(BEST_TARGET) - - test-returning-errno-lwt.dir = tests/test-returning-errno-lwt - test-returning-errno-lwt.threads = yes -@@ -899,22 +899,22 @@ test-returning-errno-lwt.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-returning-errno-lwt-stubs - test-returning-errno-lwt.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-returning-errno-lwt: PROJECT=test-returning-errno-lwt --test-returning-errno-lwt: $$(NATIVE_TARGET) -+test-returning-errno-lwt: $$(BEST_TARGET) - - test-returning-errno-lwt-generated: \ - tests/test-returning-errno-lwt/generated_bindings.ml \ - tests/test-returning-errno-lwt/generated_struct_bindings.ml \ - tests/test-returning-errno-lwt/generated_stubs.c - --tests/test-returning-errno-lwt/generated_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.native -+tests/test-returning-errno-lwt/generated_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.$(BEST) - $< --c-file $@ --tests/test-returning-errno-lwt/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.native -+tests/test-returning-errno-lwt/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.$(BEST) - $< --ml-file $@ --tests/test-returning-errno-lwt/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.native -+tests/test-returning-errno-lwt/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.$(BEST) - $< > $@ --$(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.native: $(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c -+$(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c - $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ --$(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.native -+$(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.$(BEST) - $< --c-struct-file $@ - - test-returning-errno-stubs.dir = tests/test-returning-errno/stubs -@@ -930,7 +930,7 @@ test-returning-errno-stub-generator.subproject_deps = ctypes cstubs \ - ctypes-foreign-base ctypes-foreign-threaded test-returning-errno-stubs tests-common - test-returning-errno-stub-generator.deps = str bigarray bytes - test-returning-errno-stub-generator: PROJECT=test-returning-errno-stub-generator --test-returning-errno-stub-generator: $$(NATIVE_TARGET) -+test-returning-errno-stub-generator: $$(BEST_TARGET) - - test-returning-errno.dir = tests/test-returning-errno - test-returning-errno.threads = yes -@@ -939,22 +939,22 @@ test-returning-errno.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-returning-errno-stubs - test-returning-errno.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-returning-errno: PROJECT=test-returning-errno --test-returning-errno: $$(NATIVE_TARGET) -+test-returning-errno: $$(BEST_TARGET) - - test-returning-errno-generated: \ - tests/test-returning-errno/generated_bindings.ml \ - tests/test-returning-errno/generated_struct_bindings.ml \ - tests/test-returning-errno/generated_stubs.c - --tests/test-returning-errno/generated_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.native -+tests/test-returning-errno/generated_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.$(BEST) - $< --c-file $@ --tests/test-returning-errno/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-stub-generator.native -+tests/test-returning-errno/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-stub-generator.$(BEST) - $< --ml-file $@ --tests/test-returning-errno/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-ml-stub-generator.native -+tests/test-returning-errno/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-ml-stub-generator.$(BEST) - $< > $@ --$(BUILDDIR)/test-returning-errno-ml-stub-generator.native: $(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c -+$(BUILDDIR)/test-returning-errno-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c - $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ --$(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.native -+$(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.$(BEST) - $< --c-struct-file $@ - - -@@ -972,7 +972,7 @@ test-threads.subproject_deps = ctypes ctypes-foreign-base \ - ctypes-foreign-threaded cstubs tests-common test-threads-stubs - test-threads.link_flags = -L$(BUILDDIR)/clib -ltest_functions - test-threads: PROJECT=test-threads --test-threads: $$(NATIVE_TARGET) -+test-threads: $$(BEST_TARGET) - - TESTS = - TESTS += test-raw -@@ -1038,5 +1038,5 @@ test: build testlib tests-common $(TESTS) \ - - run-%: $* - @echo running $* -- @cd $(BUILDDIR) && LD_LIBRARY_PATH=clib DYLD_LIBRARY_PATH=clib ./$*.native -runner sequential -+ @cd $(BUILDDIR) && CAML_LD_LIBRARY_PATH=. LD_LIBRARY_PATH=clib DYLD_LIBRARY_PATH=clib ./$*.$(BEST) -runner sequential - diff -Nru ocaml-ctypes-0.6.2/debian/patches/0006-Fix-test-roots.patch ocaml-ctypes-0.7.0/debian/patches/0006-Fix-test-roots.patch --- ocaml-ctypes-0.6.2/debian/patches/0006-Fix-test-roots.patch 2016-06-22 13:42:58.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/0006-Fix-test-roots.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -From: Stephane Glondu -Date: Wed, 22 Jun 2016 13:43:47 +0200 -Subject: Fix test-roots - -Better delimit v's lifetime with a local block. This is relevant in -bytecode. ---- - tests/test-roots/test_roots.ml | 40 +++++++++++++++++++++++++--------------- - 1 file changed, 25 insertions(+), 15 deletions(-) - -diff --git a/tests/test-roots/test_roots.ml b/tests/test-roots/test_roots.ml -index f9d2a4e..0b399ed 100644 ---- a/tests/test-roots/test_roots.ml -+++ b/tests/test-roots/test_roots.ml -@@ -19,26 +19,32 @@ let testlib = Dl.(dlopen ~filename:"clib/libtest_functions.so" ~flags:[RTLD_NOW] - let test_root_lifetime _ = - (* Check that values not registered as roots are collected. *) - let alive = ref true in -- let v = [| 1; 2; 3 |] in -- Gc.finalise (fun _ -> alive := false) v; -+ let () = -+ let v = [| 1; 2; 3 |] in -+ Gc.finalise (fun _ -> alive := false) v; -+ in - Gc.compact (); - assert_equal false !alive - ~msg:"values not registered as roots are collected"; - - (* Check that values registered as roots are not collected. *) - let alive = ref true in -- let v = [| 1; 2; 3 |] in -- Gc.finalise (fun _ -> alive := false) v; -- let _r = Root.create v in -+ let _r = -+ let v = [| 1; 2; 3 |] in -+ Gc.finalise (fun _ -> alive := false) v; -+ Root.create v -+ in - Gc.compact (); - assert_equal true !alive - ~msg:"registered roots are not collected"; - - (* Check that values unregistered as roots are collected. *) - let alive = ref true in -- let v = [| 1; 2; 3 |] in -- Gc.finalise (fun _ -> alive := false) v; -- let r = Root.create v in -+ let r = -+ let v = [| 1; 2; 3 |] in -+ Gc.finalise (fun _ -> alive := false) v; -+ Root.create v -+ in - Root.release r; - Gc.compact (); - assert_equal false !alive -@@ -46,19 +52,23 @@ let test_root_lifetime _ = - - (* Check that values assigned to roots are not collected. *) - let alive = ref true in -- let v = [| 1; 2; 3 |] in -- Gc.finalise (fun _ -> alive := false) v; -- let r = Root.create () in -- Root.set r v; -+ let () = -+ let v = [| 1; 2; 3 |] in -+ Gc.finalise (fun _ -> alive := false) v; -+ let r = Root.create () in -+ Root.set r v; -+ in - Gc.compact (); - assert_equal true !alive - ~msg:"values assigned to roots are not collected"; - - (* Check that values registered as roots and then overwritten are collected. *) - let alive = ref true in -- let v = [| 1; 2; 3 |] in -- Gc.finalise (fun _ -> alive := false) v; -- let r = Root.create v in -+ let r = -+ let v = [| 1; 2; 3 |] in -+ Gc.finalise (fun _ -> alive := false) v; -+ Root.create v -+ in - Root.set r (); - Gc.compact (); - assert_equal false !alive diff -Nru ocaml-ctypes-0.6.2/debian/patches/0007-Fix-typo-in-ctypes_primitive_ffitype.patch ocaml-ctypes-0.7.0/debian/patches/0007-Fix-typo-in-ctypes_primitive_ffitype.patch --- ocaml-ctypes-0.6.2/debian/patches/0007-Fix-typo-in-ctypes_primitive_ffitype.patch 2016-06-22 13:44:34.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/0007-Fix-typo-in-ctypes_primitive_ffitype.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -From: Stephane Glondu -Date: Wed, 22 Jun 2016 15:42:49 +0200 -Subject: Fix typo in ctypes_primitive_ffitype - ---- - src/ctypes-foreign-base/ffi_type_stubs.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/ctypes-foreign-base/ffi_type_stubs.c b/src/ctypes-foreign-base/ffi_type_stubs.c -index 8e9cf02..461be44 100644 ---- a/src/ctypes-foreign-base/ffi_type_stubs.c -+++ b/src/ctypes-foreign-base/ffi_type_stubs.c -@@ -75,7 +75,7 @@ value ctypes_primitive_ffitype(value prim) - case Ctypes_Long: ft = &ffi_type_slong; break; /* Long */ - case Ctypes_Llong: ft = &ctypes_ffi_type_sllong; break; /* Llong */ - case Ctypes_Ushort: ft = &ffi_type_ushort; break; /* Ushort */ -- case Ctypes_Uint: ft = &ffi_type_ulong; break; /* Uint */ -+ case Ctypes_Uint: ft = &ffi_type_uint; break; /* Uint */ - case Ctypes_Ulong: ft = &ffi_type_ulong; break; /* Ulong */ - case Ctypes_Ullong: ft = &ctypes_ffi_type_ullong; break; /* Ullong */ - case Ctypes_Size_t: ft = &ctypes_ffi_type_size_t; break; /* Size */ diff -Nru ocaml-ctypes-0.6.2/debian/patches/series ocaml-ctypes-0.7.0/debian/patches/series --- ocaml-ctypes-0.6.2/debian/patches/series 2016-06-22 13:44:34.000000000 +0000 +++ ocaml-ctypes-0.7.0/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -0001-Use-the-same-C-compiler-as-OCaml-to-build-test-stubs.patch -0002-Fix-for-PowerPC-handle-libffi-s-integer-return-type-.patch -0003-Initialize-the-return-slot-for-small-return-values-f.patch -0004-Missing-return-in-ffi_return_type_adjustment.patch -0005-Add-support-for-bytecode-architectures.patch -0006-Fix-test-roots.patch -0007-Fix-typo-in-ctypes_primitive_ffitype.patch diff -Nru ocaml-ctypes-0.6.2/Makefile ocaml-ctypes-0.7.0/Makefile --- ocaml-ctypes-0.6.2/Makefile 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/Makefile 2016-07-13 12:24:30.000000000 +0000 @@ -1,5 +1,6 @@ .SECONDEXPANSION: +BEST:=$(shell if ocamlopt > /dev/null 2>&1; then echo native; else echo byte; fi) DEBUG=false COVERAGE=false OCAML=ocaml diff -Nru ocaml-ctypes-0.6.2/Makefile.rules ocaml-ctypes-0.7.0/Makefile.rules --- ocaml-ctypes-0.6.2/Makefile.rules 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/Makefile.rules 2016-07-13 12:24:30.000000000 +0000 @@ -48,6 +48,7 @@ CMA_OPTS = $(if $(C_OBJECTS),-cclib -l$(PROJECT)_stubs -dllib -l$(PROJECT)_stubs) SUBPROJECT_DEPS = $($(PROJECT).subproject_deps) LOCAL_CMXAS = $(SUBPROJECT_DEPS:%=$(BUILDDIR)/%.cmxa) +LOCAL_CMAS = $(SUBPROJECT_DEPS:%=$(BUILDDIR)/%.cma) CMXA_OPTS = $(if $(C_OBJECTS),-cclib -l$(PROJECT)_stubs) OCAMLINCLUDES = -I $(BUILDDIR)/$($(PROJECT).dir) \ @@ -55,11 +56,16 @@ -I $(BUILDDIR)/$($(spdep).dir)) NATIVE_LIB=$(BUILDDIR)/$(PROJECT).cmxa NATIVE_TARGET=$(BUILDDIR)/$(PROJECT).native +BEST_TARGET=$(BUILDDIR)/$(PROJECT).$(BEST) LIB_TARGETS = $(BUILDDIR)/$(PROJECT).cma \ $(STUB_LIB) \ - $(XEN_LIB) \ - $(BUILDDIR)/$(PROJECT).cmxa \ - $(BUILDDIR)/$(PROJECT).cmxs + $(XEN_LIB) +ifeq ($(BEST),native) +LIB_TARGETS += $(BUILDDIR)/$(PROJECT).cmxa +endif +ifneq ($(wildcard $(shell ocamlc -where)/dynlink.cmxa),) +LIB_TARGETS += $(BUILDDIR)/$(PROJECT).cmxs +endif LIB_TARGET_EXTRAS = $(if $(STUB_LIB),$(BUILDDIR)/lib$(PROJECT)_stubs.a) \ $(if $(XEN_LIB),$(BUILDDIR)/lib$(PROJECT)_stubs_xen.a) \ $(BUILDDIR)/$(PROJECT).a @@ -112,3 +118,6 @@ $(BUILDDIR)/%.native : $$(NATIVE_OBJECTS) $$(C_OBJECTS) $(OCAMLFIND) opt -I $(BUILDDIR) -linkpkg $(OCAMLFLAGS) $(THREAD_FLAG) $(OCAMLFIND_PACKAGE_FLAGS) $(LOCAL_CMXAS) -o $@ $(NATIVE_OBJECTS) $(C_OBJECTS) $(OCAML_LINK_FLAGS) + +$(BUILDDIR)/%.byte : $$(BYTE_OBJECTS) $$(C_OBJECTS) + $(OCAMLFIND) ocamlc -custom -I $(BUILDDIR) -linkpkg $(OCAMLFLAGS) $(THREAD_FLAG) $(OCAMLFIND_PACKAGE_FLAGS) $(LOCAL_CMAS) -o $@ $(BYTE_OBJECTS) $(C_OBJECTS) $(OCAML_LINK_FLAGS) diff -Nru ocaml-ctypes-0.6.2/Makefile.tests ocaml-ctypes-0.7.0/Makefile.tests --- ocaml-ctypes-0.6.2/Makefile.tests 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/Makefile.tests 2016-07-13 12:24:30.000000000 +0000 @@ -4,6 +4,8 @@ CFLAGS += -I $(CURDIR)/src/ctypes -I $(CURDIR)/tests +CC=$(shell ocamlc -config | sed -n '/native_c_compiler/{ s/[^:]*://; p;}') + # tests-common subproject tests-common.dir = tests/tests-common tests-common.subproject_deps = ctypes cstubs \ @@ -20,7 +22,7 @@ test-raw.deps = bigarray oUnit str bytes test-raw.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-raw: PROJECT=test-raw -test-raw: $$(NATIVE_TARGET) +test-raw: $$(BEST_TARGET) test-pointers-stubs.dir = tests/test-pointers/stubs test-pointers-stubs.threads = yes @@ -35,7 +37,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-pointers-stubs tests-common test-pointers-stub-generator.deps = str bigarray bytes test-pointers-stub-generator: PROJECT=test-pointers-stub-generator -test-pointers-stub-generator: $$(NATIVE_TARGET) +test-pointers-stub-generator: $$(BEST_TARGET) test-pointers.dir = tests/test-pointers test-pointers.threads = yes @@ -44,15 +46,15 @@ ctypes-foreign-threaded cstubs tests-common test-pointers-stubs test-pointers.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-pointers: PROJECT=test-pointers -test-pointers: $$(NATIVE_TARGET) +test-pointers: $$(BEST_TARGET) test-pointers-generated: \ tests/test-pointers/generated_bindings.ml \ tests/test-pointers/generated_stubs.c -tests/test-pointers/generated_stubs.c: $(BUILDDIR)/test-pointers-stub-generator.native +tests/test-pointers/generated_stubs.c: $(BUILDDIR)/test-pointers-stub-generator.$(BEST) $< --c-file $@ -tests/test-pointers/generated_bindings.ml: $(BUILDDIR)/test-pointers-stub-generator.native +tests/test-pointers/generated_bindings.ml: $(BUILDDIR)/test-pointers-stub-generator.$(BEST) $< --ml-file $@ test-variadic-stubs.dir = tests/test-variadic/stubs @@ -68,7 +70,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-variadic-stubs tests-common test-variadic-stub-generator.deps = str bigarray bytes test-variadic-stub-generator: PROJECT=test-variadic-stub-generator -test-variadic-stub-generator: $$(NATIVE_TARGET) +test-variadic-stub-generator: $$(BEST_TARGET) test-variadic.dir = tests/test-variadic test-variadic.threads = yes @@ -77,15 +79,15 @@ ctypes-foreign-threaded cstubs tests-common test-variadic-stubs test-variadic.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-variadic: PROJECT=test-variadic -test-variadic: $$(NATIVE_TARGET) +test-variadic: $$(BEST_TARGET) test-variadic-generated: \ tests/test-variadic/generated_bindings.ml \ tests/test-variadic/generated_stubs.c -tests/test-variadic/generated_stubs.c: $(BUILDDIR)/test-variadic-stub-generator.native +tests/test-variadic/generated_stubs.c: $(BUILDDIR)/test-variadic-stub-generator.$(BEST) $< --c-file $@ -tests/test-variadic/generated_bindings.ml: $(BUILDDIR)/test-variadic-stub-generator.native +tests/test-variadic/generated_bindings.ml: $(BUILDDIR)/test-variadic-stub-generator.$(BEST) $< --ml-file $@ @@ -101,7 +103,7 @@ test-builtins-stubs ctypes-foreign-base ctypes-foreign-threaded tests-common test-builtins-stub-generator.deps = str bigarray bytes test-builtins-stub-generator: PROJECT=test-builtins-stub-generator -test-builtins-stub-generator: $$(NATIVE_TARGET) +test-builtins-stub-generator: $$(BEST_TARGET) test-builtins.dir = tests/test-builtins test-builtins.threads = yes @@ -110,15 +112,15 @@ ctypes-foreign-base ctypes-foreign-threaded tests-common test-builtins.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-builtins: PROJECT=test-builtins -test-builtins: $$(NATIVE_TARGET) +test-builtins: $$(BEST_TARGET) test-builtins-generated: \ tests/test-builtins/generated_bindings.ml \ tests/test-builtins/generated_stubs.c -tests/test-builtins/generated_stubs.c: $(BUILDDIR)/test-builtins-stub-generator.native +tests/test-builtins/generated_stubs.c: $(BUILDDIR)/test-builtins-stub-generator.$(BEST) $< --c-file $@ -tests/test-builtins/generated_bindings.ml: $(BUILDDIR)/test-builtins-stub-generator.native +tests/test-builtins/generated_bindings.ml: $(BUILDDIR)/test-builtins-stub-generator.$(BEST) $< --ml-file $@ @@ -134,7 +136,7 @@ test-macros-stubs ctypes-foreign-base ctypes-foreign-threaded tests-common test-macros-stub-generator.deps = str bigarray bytes test-macros-stub-generator: PROJECT=test-macros-stub-generator -test-macros-stub-generator: $$(NATIVE_TARGET) +test-macros-stub-generator: $$(BEST_TARGET) test-macros.dir = tests/test-macros test-macros.threads = yes @@ -143,15 +145,15 @@ ctypes-foreign-base ctypes-foreign-threaded tests-common test-macros.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-macros: PROJECT=test-macros -test-macros: $$(NATIVE_TARGET) +test-macros: $$(BEST_TARGET) test-macros-generated: \ tests/test-macros/generated_bindings.ml \ tests/test-macros/generated_stubs.c -tests/test-macros/generated_stubs.c: $(BUILDDIR)/test-macros-stub-generator.native +tests/test-macros/generated_stubs.c: $(BUILDDIR)/test-macros-stub-generator.$(BEST) $< --c-file $@ -tests/test-macros/generated_bindings.ml: $(BUILDDIR)/test-macros-stub-generator.native +tests/test-macros/generated_bindings.ml: $(BUILDDIR)/test-macros-stub-generator.$(BEST) $< --ml-file $@ @@ -168,7 +170,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-higher_order-stubs tests-common test-higher_order-stub-generator.deps = str bigarray bytes test-higher_order-stub-generator: PROJECT=test-higher_order-stub-generator -test-higher_order-stub-generator: $$(NATIVE_TARGET) +test-higher_order-stub-generator: $$(BEST_TARGET) test-higher_order.dir = tests/test-higher_order test-higher_order.threads = yes @@ -177,15 +179,15 @@ ctypes-foreign-threaded cstubs test-higher_order-stubs tests-common test-higher_order.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-higher_order: PROJECT=test-higher_order -test-higher_order: $$(NATIVE_TARGET) +test-higher_order: $$(BEST_TARGET) test-higher_order-generated: \ tests/test-higher_order/generated_bindings.ml \ tests/test-higher_order/generated_stubs.c -tests/test-higher_order/generated_stubs.c: $(BUILDDIR)/test-higher_order-stub-generator.native +tests/test-higher_order/generated_stubs.c: $(BUILDDIR)/test-higher_order-stub-generator.$(BEST) $< --c-file $@ -tests/test-higher_order/generated_bindings.ml: $(BUILDDIR)/test-higher_order-stub-generator.native +tests/test-higher_order/generated_bindings.ml: $(BUILDDIR)/test-higher_order-stub-generator.$(BEST) $< --ml-file $@ test-enums-struct-stubs.dir = tests/test-enums/struct-stubs @@ -212,7 +214,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-enums-stubs tests-common test-enums-stub-generator.deps = str bigarray bytes test-enums-stub-generator: PROJECT=test-enums-stub-generator -test-enums-stub-generator: $$(NATIVE_TARGET) +test-enums-stub-generator: $$(BEST_TARGET) test-enums-struct-stub-generator.dir = tests/test-enums/struct-stub-generator test-enums-struct-stub-generator.threads = yes @@ -220,7 +222,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-enums-struct-stubs tests-common test-enums-struct-stub-generator.deps = str bigarray bytes test-enums-struct-stub-generator: PROJECT=test-enums-struct-stub-generator -test-enums-struct-stub-generator: $$(NATIVE_TARGET) +test-enums-struct-stub-generator: $$(BEST_TARGET) test-enums.dir = tests/test-enums test-enums.threads = yes @@ -229,7 +231,7 @@ ctypes-foreign-threaded cstubs test-enums-struct-stubs test-enums-stubs tests-common test-enums.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-enums: PROJECT=test-enums -test-enums: $$(NATIVE_TARGET) +test-enums: $$(BEST_TARGET) test-enums-structs-generated: \ tests/test-enums/stubs/generated_struct_bindings.ml \ @@ -239,15 +241,15 @@ tests/test-enums/generated_bindings.ml \ tests/test-enums/generated_stubs.c \ -tests/test-enums/generated_stubs.c: $(BUILDDIR)/test-enums-stub-generator.native +tests/test-enums/generated_stubs.c: $(BUILDDIR)/test-enums-stub-generator.$(BEST) $< --c-file $@ -tests/test-enums/generated_bindings.ml: $(BUILDDIR)/test-enums-stub-generator.native +tests/test-enums/generated_bindings.ml: $(BUILDDIR)/test-enums-stub-generator.$(BEST) $< --ml-file $@ -tests/test-enums/stubs/generated_struct_bindings.ml: $(BUILDDIR)/test-enums-ml-struct-stub-generator.native +tests/test-enums/stubs/generated_struct_bindings.ml: $(BUILDDIR)/test-enums-ml-struct-stub-generator.$(BEST) $< > $@ -$(BUILDDIR)/test-enums-ml-struct-stub-generator.native: $(BUILDDIR)/tests/test-enums/generated_struct_stubs.c +$(BUILDDIR)/test-enums-ml-struct-stub-generator.$(BEST): $(BUILDDIR)/tests/test-enums/generated_struct_stubs.c $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ -$(BUILDDIR)/tests/test-enums/generated_struct_stubs.c: $(BUILDDIR)/test-enums-struct-stub-generator.native +$(BUILDDIR)/tests/test-enums/generated_struct_stubs.c: $(BUILDDIR)/test-enums-struct-stub-generator.$(BEST) $< --c-struct-file $@ test-structs-stubs.dir = tests/test-structs/stubs @@ -263,7 +265,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-structs-stubs tests-common test-structs-stub-generator.deps = str bigarray bytes test-structs-stub-generator: PROJECT=test-structs-stub-generator -test-structs-stub-generator: $$(NATIVE_TARGET) +test-structs-stub-generator: $$(BEST_TARGET) test-structs.dir = tests/test-structs test-structs.threads = yes @@ -272,7 +274,7 @@ ctypes-foreign-threaded cstubs test-structs-stubs tests-common test-structs.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-structs: PROJECT=test-structs -test-structs: $$(NATIVE_TARGET) +test-structs: $$(BEST_TARGET) test-structs-generated: \ tests/test-structs/generated_bindings.ml \ @@ -280,15 +282,15 @@ tests/test-structs/generated_struct_bindings.ml \ $(BUILDDIR)/tests/test-structs/generated_struct_stubs.c -tests/test-structs/generated_stubs.c: $(BUILDDIR)/test-structs-stub-generator.native +tests/test-structs/generated_stubs.c: $(BUILDDIR)/test-structs-stub-generator.$(BEST) $< --c-file $@ -tests/test-structs/generated_bindings.ml: $(BUILDDIR)/test-structs-stub-generator.native +tests/test-structs/generated_bindings.ml: $(BUILDDIR)/test-structs-stub-generator.$(BEST) $< --ml-file $@ -tests/test-structs/generated_struct_bindings.ml: $(BUILDDIR)/test-structs-ml-stub-generator.native +tests/test-structs/generated_struct_bindings.ml: $(BUILDDIR)/test-structs-ml-stub-generator.$(BEST) $< > $@ -$(BUILDDIR)/test-structs-ml-stub-generator.native: $(BUILDDIR)/tests/test-structs/generated_struct_stubs.c +$(BUILDDIR)/test-structs-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-structs/generated_struct_stubs.c $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ -$(BUILDDIR)/tests/test-structs/generated_struct_stubs.c: $(BUILDDIR)/test-structs-stub-generator.native +$(BUILDDIR)/tests/test-structs/generated_struct_stubs.c: $(BUILDDIR)/test-structs-stub-generator.$(BEST) $< --c-struct-file $@ test-constants-stubs.dir = tests/test-constants/stubs @@ -304,7 +306,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-constants-stubs tests-common test-constants-stub-generator.deps = str bigarray bytes test-constants-stub-generator: PROJECT=test-constants-stub-generator -test-constants-stub-generator: $$(NATIVE_TARGET) +test-constants-stub-generator: $$(BEST_TARGET) test-constants.dir = tests/test-constants test-constants.threads = yes @@ -313,7 +315,7 @@ ctypes-foreign-threaded cstubs test-constants-stubs tests-common test-constants.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-constants: PROJECT=test-constants -test-constants: $$(NATIVE_TARGET) +test-constants: $$(BEST_TARGET) test-constants-generated: \ tests/test-constants/generated_bindings.ml \ @@ -321,15 +323,15 @@ tests/test-constants/generated_struct_bindings.ml \ $(BUILDDIR)/tests/test-constants/generated_struct_stubs.c -tests/test-constants/generated_stubs.c: $(BUILDDIR)/test-constants-stub-generator.native +tests/test-constants/generated_stubs.c: $(BUILDDIR)/test-constants-stub-generator.$(BEST) $< --c-file $@ -tests/test-constants/generated_bindings.ml: $(BUILDDIR)/test-constants-stub-generator.native +tests/test-constants/generated_bindings.ml: $(BUILDDIR)/test-constants-stub-generator.$(BEST) $< --ml-file $@ -tests/test-constants/generated_struct_bindings.ml: $(BUILDDIR)/test-constants-ml-stub-generator.native +tests/test-constants/generated_struct_bindings.ml: $(BUILDDIR)/test-constants-ml-stub-generator.$(BEST) $< > $@ -$(BUILDDIR)/test-constants-ml-stub-generator.native: $(BUILDDIR)/tests/test-constants/generated_struct_stubs.c +$(BUILDDIR)/test-constants-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-constants/generated_struct_stubs.c $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ -$(BUILDDIR)/tests/test-constants/generated_struct_stubs.c: $(BUILDDIR)/test-constants-stub-generator.native +$(BUILDDIR)/tests/test-constants/generated_struct_stubs.c: $(BUILDDIR)/test-constants-stub-generator.$(BEST) $< --c-struct-file $@ @@ -338,7 +340,7 @@ test-finalisers.deps = str bigarray oUnit bytes test-finalisers.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-finalisers: PROJECT=test-finalisers -test-finalisers: $$(NATIVE_TARGET) +test-finalisers: $$(BEST_TARGET) test-cstdlib-stubs.dir = tests/test-cstdlib/stubs test-cstdlib-stubs.threads = yes @@ -353,7 +355,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-cstdlib-stubs tests-common test-cstdlib-stub-generator.deps = str bigarray bytes test-cstdlib-stub-generator: PROJECT=test-cstdlib-stub-generator -test-cstdlib-stub-generator: $$(NATIVE_TARGET) +test-cstdlib-stub-generator: $$(BEST_TARGET) test-cstdlib.dir = tests/test-cstdlib test-cstdlib.threads = yes @@ -362,15 +364,15 @@ ctypes-foreign-threaded cstubs test-cstdlib-stubs tests-common test-cstdlib.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-cstdlib: PROJECT=test-cstdlib -test-cstdlib: $$(NATIVE_TARGET) +test-cstdlib: $$(BEST_TARGET) test-cstdlib-generated: \ tests/test-cstdlib/generated_bindings.ml \ tests/test-cstdlib/generated_stubs.c -tests/test-cstdlib/generated_stubs.c: $(BUILDDIR)/test-cstdlib-stub-generator.native +tests/test-cstdlib/generated_stubs.c: $(BUILDDIR)/test-cstdlib-stub-generator.$(BEST) $< --c-file $@ -tests/test-cstdlib/generated_bindings.ml: $(BUILDDIR)/test-cstdlib-stub-generator.native +tests/test-cstdlib/generated_bindings.ml: $(BUILDDIR)/test-cstdlib-stub-generator.$(BEST) $< --ml-file $@ test-sizeof.dir = tests/test-sizeof @@ -378,7 +380,7 @@ test-sizeof.deps = str bigarray oUnit bytes test-sizeof.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-sizeof: PROJECT=test-sizeof -test-sizeof: $$(NATIVE_TARGET) +test-sizeof: $$(BEST_TARGET) test-foreign_values-stubs.dir = tests/test-foreign_values/stubs test-foreign_values-stubs.threads = yes @@ -393,7 +395,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-foreign_values-stubs tests-common test-foreign_values-stub-generator.deps = str bigarray bytes test-foreign_values-stub-generator: PROJECT=test-foreign_values-stub-generator -test-foreign_values-stub-generator: $$(NATIVE_TARGET) +test-foreign_values-stub-generator: $$(BEST_TARGET) test-foreign_values.dir = tests/test-foreign_values test-foreign_values.threads = yes @@ -402,15 +404,15 @@ ctypes-foreign-threaded cstubs tests-common test-foreign_values-stubs test-foreign_values.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-foreign_values: PROJECT=test-foreign_values -test-foreign_values: $$(NATIVE_TARGET) +test-foreign_values: $$(BEST_TARGET) test-foreign_values-generated: \ tests/test-foreign_values/generated_bindings.ml \ tests/test-foreign_values/generated_stubs.c -tests/test-foreign_values/generated_stubs.c: $(BUILDDIR)/test-foreign_values-stub-generator.native +tests/test-foreign_values/generated_stubs.c: $(BUILDDIR)/test-foreign_values-stub-generator.$(BEST) $< --c-file $@ -tests/test-foreign_values/generated_bindings.ml: $(BUILDDIR)/test-foreign_values-stub-generator.native +tests/test-foreign_values/generated_bindings.ml: $(BUILDDIR)/test-foreign_values-stub-generator.$(BEST) $< --ml-file $@ test-unions-stubs.dir = tests/test-unions/stubs @@ -426,7 +428,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-unions-stubs tests-common test-unions-stub-generator.deps = str bigarray bytes test-unions-stub-generator: PROJECT=test-unions-stub-generator -test-unions-stub-generator: $$(NATIVE_TARGET) +test-unions-stub-generator: $$(BEST_TARGET) test-unions.dir = tests/test-unions test-unions.threads = yes @@ -435,7 +437,7 @@ ctypes-foreign-threaded cstubs test-unions-stubs tests-common test-unions.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-unions: PROJECT=test-unions -test-unions: $$(NATIVE_TARGET) +test-unions: $$(BEST_TARGET) test-unions-generated: \ tests/test-unions/generated_bindings.ml \ @@ -443,15 +445,15 @@ tests/test-unions/generated_struct_bindings.ml \ $(BUILDDIR)/tests/test-unions/generated_struct_stubs.c -tests/test-unions/generated_stubs.c: $(BUILDDIR)/test-unions-stub-generator.native +tests/test-unions/generated_stubs.c: $(BUILDDIR)/test-unions-stub-generator.$(BEST) $< --c-file $@ -tests/test-unions/generated_bindings.ml: $(BUILDDIR)/test-unions-stub-generator.native +tests/test-unions/generated_bindings.ml: $(BUILDDIR)/test-unions-stub-generator.$(BEST) $< --ml-file $@ -tests/test-unions/generated_struct_bindings.ml: $(BUILDDIR)/test-unions-ml-stub-generator.native +tests/test-unions/generated_struct_bindings.ml: $(BUILDDIR)/test-unions-ml-stub-generator.$(BEST) $< > $@ -$(BUILDDIR)/test-unions-ml-stub-generator.native: $(BUILDDIR)/tests/test-unions/generated_struct_stubs.c +$(BUILDDIR)/test-unions-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-unions/generated_struct_stubs.c $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ -$(BUILDDIR)/tests/test-unions/generated_struct_stubs.c: $(BUILDDIR)/test-unions-stub-generator.native +$(BUILDDIR)/tests/test-unions/generated_struct_stubs.c: $(BUILDDIR)/test-unions-stub-generator.$(BEST) $< --c-struct-file $@ test-custom_ops.dir = tests/test-custom_ops @@ -459,7 +461,7 @@ test-custom_ops.deps = str bigarray oUnit bytes test-custom_ops.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-custom_ops: PROJECT=test-custom_ops -test-custom_ops: $$(NATIVE_TARGET) +test-custom_ops: $$(BEST_TARGET) test-arrays-stubs.dir = tests/test-arrays/stubs test-arrays-stubs.threads = yes @@ -474,7 +476,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-arrays-stubs tests-common test-arrays-stub-generator.deps = str bigarray bytes test-arrays-stub-generator: PROJECT=test-arrays-stub-generator -test-arrays-stub-generator: $$(NATIVE_TARGET) +test-arrays-stub-generator: $$(BEST_TARGET) test-arrays.dir = tests/test-arrays test-arrays.threads = yes @@ -483,15 +485,15 @@ ctypes-foreign-threaded cstubs test-arrays-stubs tests-common test-arrays.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-arrays: PROJECT=test-arrays -test-arrays: $$(NATIVE_TARGET) +test-arrays: $$(BEST_TARGET) test-arrays-generated: \ tests/test-arrays/generated_bindings.ml \ tests/test-arrays/generated_stubs.c -tests/test-arrays/generated_stubs.c: $(BUILDDIR)/test-arrays-stub-generator.native +tests/test-arrays/generated_stubs.c: $(BUILDDIR)/test-arrays-stub-generator.$(BEST) $< --c-file $@ -tests/test-arrays/generated_bindings.ml: $(BUILDDIR)/test-arrays-stub-generator.native +tests/test-arrays/generated_bindings.ml: $(BUILDDIR)/test-arrays-stub-generator.$(BEST) $< --ml-file $@ test-foreign-errno.dir = tests/test-foreign-errno @@ -499,21 +501,21 @@ test-foreign-errno.deps = str bigarray oUnit bytes test-foreign-errno.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-foreign-errno: PROJECT=test-foreign-errno -test-foreign-errno: $$(NATIVE_TARGET) +test-foreign-errno: $$(BEST_TARGET) test-passable.dir = tests/test-passable test-passable.threads = yes test-passable.deps = str bigarray oUnit bytes test-passable.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-passable: PROJECT=test-passable -test-passable: $$(NATIVE_TARGET) +test-passable: $$(BEST_TARGET) test-alignment.dir = tests/test-alignment test-alignment.threads = yes test-alignment.deps = str bigarray oUnit bytes test-alignment.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-alignment: PROJECT=test-alignment -test-alignment: $$(NATIVE_TARGET) +test-alignment: $$(BEST_TARGET) test-views-stubs.dir = tests/test-views/stubs test-views-stubs.threads = yes @@ -528,7 +530,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-views-stubs tests-common test-views-stub-generator.deps = str bigarray bytes test-views-stub-generator: PROJECT=test-views-stub-generator -test-views-stub-generator: $$(NATIVE_TARGET) +test-views-stub-generator: $$(BEST_TARGET) test-views.dir = tests/test-views test-views.threads = yes @@ -536,15 +538,15 @@ test-views.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded cstubs test-views-stubs tests-common test-views.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-views: PROJECT=test-views -test-views: $$(NATIVE_TARGET) +test-views: $$(BEST_TARGET) test-views-generated: \ tests/test-views/generated_bindings.ml \ tests/test-views/generated_stubs.c -tests/test-views/generated_stubs.c: $(BUILDDIR)/test-views-stub-generator.native +tests/test-views/generated_stubs.c: $(BUILDDIR)/test-views-stub-generator.$(BEST) $< --c-file $@ -tests/test-views/generated_bindings.ml: $(BUILDDIR)/test-views-stub-generator.native +tests/test-views/generated_bindings.ml: $(BUILDDIR)/test-views-stub-generator.$(BEST) $< --ml-file $@ test-oo_style-stubs.dir = tests/test-oo_style/stubs @@ -560,7 +562,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-oo_style-stubs tests-common test-oo_style-stub-generator.deps = str bigarray bytes test-oo_style-stub-generator: PROJECT=test-oo_style-stub-generator -test-oo_style-stub-generator: $$(NATIVE_TARGET) +test-oo_style-stub-generator: $$(BEST_TARGET) test-oo_style.dir = tests/test-oo_style test-oo_style.threads = yes @@ -569,15 +571,15 @@ ctypes-foreign-threaded cstubs test-oo_style-stubs tests-common test-oo_style.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-oo_style: PROJECT=test-oo_style -test-oo_style: $$(NATIVE_TARGET) +test-oo_style: $$(BEST_TARGET) test-oo_style-generated: \ tests/test-oo_style/generated_bindings.ml \ tests/test-oo_style/generated_stubs.c -tests/test-oo_style/generated_stubs.c: $(BUILDDIR)/test-oo_style-stub-generator.native +tests/test-oo_style/generated_stubs.c: $(BUILDDIR)/test-oo_style-stub-generator.$(BEST) $< --c-file $@ -tests/test-oo_style/generated_bindings.ml: $(BUILDDIR)/test-oo_style-stub-generator.native +tests/test-oo_style/generated_bindings.ml: $(BUILDDIR)/test-oo_style-stub-generator.$(BEST) $< --ml-file $@ test-type_printing.dir = tests/test-type_printing @@ -585,7 +587,7 @@ test-type_printing.deps = str bigarray oUnit bytes test-type_printing.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-type_printing: PROJECT=test-type_printing -test-type_printing: $$(NATIVE_TARGET) +test-type_printing: $$(BEST_TARGET) test-value_printing-stubs.dir = tests/test-value_printing/stubs test-value_printing-stubs.threads = yes @@ -600,7 +602,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-value_printing-stubs tests-common test-value_printing-stub-generator.deps = str bigarray bytes test-value_printing-stub-generator: PROJECT=test-value_printing-stub-generator -test-value_printing-stub-generator: $$(NATIVE_TARGET) +test-value_printing-stub-generator: $$(BEST_TARGET) test-value_printing.dir = tests/test-value_printing test-value_printing.threads = yes @@ -609,15 +611,15 @@ ctypes-foreign-threaded cstubs tests-common test-value_printing-stubs test-value_printing.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-value_printing: PROJECT=test-value_printing -test-value_printing: $$(NATIVE_TARGET) +test-value_printing: $$(BEST_TARGET) test-value_printing-generated: \ tests/test-value_printing/generated_bindings.ml \ tests/test-value_printing/generated_stubs.c -tests/test-value_printing/generated_stubs.c: $(BUILDDIR)/test-value_printing-stub-generator.native +tests/test-value_printing/generated_stubs.c: $(BUILDDIR)/test-value_printing-stub-generator.$(BEST) $< --c-file $@ -tests/test-value_printing/generated_bindings.ml: $(BUILDDIR)/test-value_printing-stub-generator.native +tests/test-value_printing/generated_bindings.ml: $(BUILDDIR)/test-value_printing-stub-generator.$(BEST) $< --ml-file $@ test-complex-stubs.dir = tests/test-complex/stubs @@ -633,7 +635,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-complex-stubs tests-common test-complex-stub-generator.deps = str bigarray bytes test-complex-stub-generator: PROJECT=test-complex-stub-generator -test-complex-stub-generator: $$(NATIVE_TARGET) +test-complex-stub-generator: $$(BEST_TARGET) test-complex.dir = tests/test-complex test-complex.threads = yes @@ -642,15 +644,15 @@ ctypes-foreign-threaded cstubs tests-common test-complex-stubs test-complex.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-complex: PROJECT=test-complex -test-complex: $$(NATIVE_TARGET) +test-complex: $$(BEST_TARGET) test-complex-generated: \ tests/test-complex/generated_bindings.ml \ tests/test-complex/generated_stubs.c -tests/test-complex/generated_stubs.c: $(BUILDDIR)/test-complex-stub-generator.native +tests/test-complex/generated_stubs.c: $(BUILDDIR)/test-complex-stub-generator.$(BEST) $< --c-file $@ -tests/test-complex/generated_bindings.ml: $(BUILDDIR)/test-complex-stub-generator.native +tests/test-complex/generated_bindings.ml: $(BUILDDIR)/test-complex-stub-generator.$(BEST) $< --ml-file $@ test-bools-stubs.dir = tests/test-bools/stubs @@ -666,7 +668,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-bools-stubs tests-common test-bools-stub-generator.deps = str bigarray bytes test-bools-stub-generator: PROJECT=test-bools-stub-generator -test-bools-stub-generator: $$(NATIVE_TARGET) +test-bools-stub-generator: $$(BEST_TARGET) test-bools.dir = tests/test-bools test-bools.threads = yes @@ -675,15 +677,15 @@ ctypes-foreign-threaded cstubs tests-common test-bools-stubs test-bools.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-bools: PROJECT=test-bools -test-bools: $$(NATIVE_TARGET) +test-bools: $$(BEST_TARGET) test-bools-generated: \ tests/test-bools/generated_bindings.ml \ tests/test-bools/generated_stubs.c -tests/test-bools/generated_stubs.c: $(BUILDDIR)/test-bools-stub-generator.native +tests/test-bools/generated_stubs.c: $(BUILDDIR)/test-bools-stub-generator.$(BEST) $< --c-file $@ -tests/test-bools/generated_bindings.ml: $(BUILDDIR)/test-bools-stub-generator.native +tests/test-bools/generated_bindings.ml: $(BUILDDIR)/test-bools-stub-generator.$(BEST) $< --ml-file $@ test-callback_lifetime-stubs.dir = tests/test-callback_lifetime/stubs @@ -699,7 +701,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-callback_lifetime-stubs tests-common test-callback_lifetime-stub-generator.deps = str bigarray bytes test-callback_lifetime-stub-generator: PROJECT=test-callback_lifetime-stub-generator -test-callback_lifetime-stub-generator: $$(NATIVE_TARGET) +test-callback_lifetime-stub-generator: $$(BEST_TARGET) test-callback_lifetime.dir = tests/test-callback_lifetime test-callback_lifetime.threads = yes @@ -708,15 +710,15 @@ ctypes-foreign-threaded cstubs test-callback_lifetime-stubs tests-common test-callback_lifetime.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-callback_lifetime: PROJECT=test-callback_lifetime -test-callback_lifetime: $$(NATIVE_TARGET) +test-callback_lifetime: $$(BEST_TARGET) test-callback_lifetime-generated: \ tests/test-callback_lifetime/generated_bindings.ml \ tests/test-callback_lifetime/generated_stubs.c -tests/test-callback_lifetime/generated_stubs.c: $(BUILDDIR)/test-callback_lifetime-stub-generator.native +tests/test-callback_lifetime/generated_stubs.c: $(BUILDDIR)/test-callback_lifetime-stub-generator.$(BEST) $< --c-file $@ -tests/test-callback_lifetime/generated_bindings.ml: $(BUILDDIR)/test-callback_lifetime-stub-generator.native +tests/test-callback_lifetime/generated_bindings.ml: $(BUILDDIR)/test-callback_lifetime-stub-generator.$(BEST) $< --ml-file $@ test-stubs.dir = tests/test-stubs @@ -724,7 +726,7 @@ test-stubs.deps = str bigarray oUnit bytes test-stubs.subproject_deps = ctypes ctypes-foreign-base ctypes-foreign-threaded test-stubs: PROJECT=test-stubs -test-stubs: $$(NATIVE_TARGET) +test-stubs: $$(BEST_TARGET) test-bigarrays-stubs.dir = tests/test-bigarrays/stubs test-bigarrays-stubs.threads = yes @@ -739,7 +741,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-bigarrays-stubs tests-common test-bigarrays-stub-generator.deps = str bigarray bytes test-bigarrays-stub-generator: PROJECT=test-bigarrays-stub-generator -test-bigarrays-stub-generator: $$(NATIVE_TARGET) +test-bigarrays-stub-generator: $$(BEST_TARGET) test-bigarrays.dir = tests/test-bigarrays test-bigarrays.threads = yes @@ -748,15 +750,15 @@ ctypes-foreign-threaded cstubs tests-common test-bigarrays-stubs test-bigarrays.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-bigarrays: PROJECT=test-bigarrays -test-bigarrays: $$(NATIVE_TARGET) +test-bigarrays: $$(BEST_TARGET) test-bigarrays-generated: \ tests/test-bigarrays/generated_bindings.ml \ tests/test-bigarrays/generated_stubs.c -tests/test-bigarrays/generated_stubs.c: $(BUILDDIR)/test-bigarrays-stub-generator.native +tests/test-bigarrays/generated_stubs.c: $(BUILDDIR)/test-bigarrays-stub-generator.$(BEST) $< --c-file $@ -tests/test-bigarrays/generated_bindings.ml: $(BUILDDIR)/test-bigarrays-stub-generator.native +tests/test-bigarrays/generated_bindings.ml: $(BUILDDIR)/test-bigarrays-stub-generator.$(BEST) $< --ml-file $@ test-coercions-stubs.dir = tests/test-coercions/stubs @@ -772,7 +774,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-coercions-stubs tests-common test-coercions-stub-generator.deps = str bigarray bytes test-coercions-stub-generator: PROJECT=test-coercions-stub-generator -test-coercions-stub-generator: $$(NATIVE_TARGET) +test-coercions-stub-generator: $$(BEST_TARGET) test-coercions.dir = tests/test-coercions test-coercions.threads = yes @@ -781,15 +783,15 @@ ctypes-foreign-threaded cstubs tests-common test-coercions-stubs test-coercions.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-coercions: PROJECT=test-coercions -test-coercions: $$(NATIVE_TARGET) +test-coercions: $$(BEST_TARGET) test-coercions-generated: \ tests/test-coercions/generated_bindings.ml \ tests/test-coercions/generated_stubs.c -tests/test-coercions/generated_stubs.c: $(BUILDDIR)/test-coercions-stub-generator.native +tests/test-coercions/generated_stubs.c: $(BUILDDIR)/test-coercions-stub-generator.$(BEST) $< --c-file $@ -tests/test-coercions/generated_bindings.ml: $(BUILDDIR)/test-coercions-stub-generator.native +tests/test-coercions/generated_bindings.ml: $(BUILDDIR)/test-coercions-stub-generator.$(BEST) $< --ml-file $@ test-roots.dir = tests/test-roots @@ -799,7 +801,7 @@ ctypes-foreign-threaded cstubs tests-common test-roots.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-roots: PROJECT=test-roots -test-roots: $$(NATIVE_TARGET) +test-roots: $$(BEST_TARGET) test-passing-ocaml-values-stubs.dir = tests/test-passing-ocaml-values/stubs test-passing-ocaml-values-stubs.threads = yes @@ -814,7 +816,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-passing-ocaml-values-stubs tests-common test-passing-ocaml-values-stub-generator.deps = str bigarray bytes test-passing-ocaml-values-stub-generator: PROJECT=test-passing-ocaml-values-stub-generator -test-passing-ocaml-values-stub-generator: $$(NATIVE_TARGET) +test-passing-ocaml-values-stub-generator: $$(BEST_TARGET) test-passing-ocaml-values.dir = tests/test-passing-ocaml-values test-passing-ocaml-values.threads = yes @@ -823,15 +825,15 @@ ctypes-foreign-threaded cstubs tests-common test-passing-ocaml-values-stubs test-passing-ocaml-values.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-passing-ocaml-values: PROJECT=test-passing-ocaml-values -test-passing-ocaml-values: $$(NATIVE_TARGET) +test-passing-ocaml-values: $$(BEST_TARGET) test-passing-ocaml-values-generated: \ tests/test-passing-ocaml-values/generated_bindings.ml \ tests/test-passing-ocaml-values/generated_stubs.c -tests/test-passing-ocaml-values/generated_stubs.c: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.native +tests/test-passing-ocaml-values/generated_stubs.c: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.$(BEST) $< --c-file $@ -tests/test-passing-ocaml-values/generated_bindings.ml: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.native +tests/test-passing-ocaml-values/generated_bindings.ml: $(BUILDDIR)/test-passing-ocaml-values-stub-generator.$(BEST) $< --ml-file $@ test-lwt-jobs-stubs.dir = tests/test-lwt-jobs/stubs @@ -847,7 +849,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-lwt-jobs-stubs tests-common test-lwt-jobs-stub-generator.deps = str bigarray bytes test-lwt-jobs-stub-generator: PROJECT=test-lwt-jobs-stub-generator -test-lwt-jobs-stub-generator: $$(NATIVE_TARGET) +test-lwt-jobs-stub-generator: $$(BEST_TARGET) test-lwt-jobs.dir = tests/test-lwt-jobs test-lwt-jobs.threads = yes @@ -856,7 +858,7 @@ ctypes-foreign-threaded cstubs tests-common test-lwt-jobs-stubs test-lwt-jobs.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-lwt-jobs: PROJECT=test-lwt-jobs -test-lwt-jobs: $$(NATIVE_TARGET) +test-lwt-jobs: $$(BEST_TARGET) test-lwt-jobs-generated: \ tests/test-lwt-jobs/generated_bindings.ml \ @@ -864,15 +866,15 @@ tests/test-lwt-jobs/generated_struct_bindings.ml \ $(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c -tests/test-lwt-jobs/generated_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.native +tests/test-lwt-jobs/generated_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.$(BEST) $< --c-file $@ -tests/test-lwt-jobs/generated_bindings.ml: $(BUILDDIR)/test-lwt-jobs-stub-generator.native +tests/test-lwt-jobs/generated_bindings.ml: $(BUILDDIR)/test-lwt-jobs-stub-generator.$(BEST) $< --ml-file $@ -tests/test-lwt-jobs/generated_struct_bindings.ml: $(BUILDDIR)/test-lwt-jobs-ml-stub-generator.native +tests/test-lwt-jobs/generated_struct_bindings.ml: $(BUILDDIR)/test-lwt-jobs-ml-stub-generator.$(BEST) $< > $@ -$(BUILDDIR)/test-lwt-jobs-ml-stub-generator.native: $(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c +$(BUILDDIR)/test-lwt-jobs-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ -$(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.native +$(BUILDDIR)/tests/test-lwt-jobs/generated_struct_stubs.c: $(BUILDDIR)/test-lwt-jobs-stub-generator.$(BEST) $< --c-struct-file $@ test-returning-errno-lwt-stubs.dir = tests/test-returning-errno-lwt/stubs @@ -888,7 +890,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-returning-errno-lwt-stubs tests-common test-returning-errno-lwt-stub-generator.deps = str bigarray bytes test-returning-errno-lwt-stub-generator: PROJECT=test-returning-errno-lwt-stub-generator -test-returning-errno-lwt-stub-generator: $$(NATIVE_TARGET) +test-returning-errno-lwt-stub-generator: $$(BEST_TARGET) test-returning-errno-lwt.dir = tests/test-returning-errno-lwt test-returning-errno-lwt.threads = yes @@ -897,22 +899,22 @@ ctypes-foreign-threaded cstubs tests-common test-returning-errno-lwt-stubs test-returning-errno-lwt.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-returning-errno-lwt: PROJECT=test-returning-errno-lwt -test-returning-errno-lwt: $$(NATIVE_TARGET) +test-returning-errno-lwt: $$(BEST_TARGET) test-returning-errno-lwt-generated: \ tests/test-returning-errno-lwt/generated_bindings.ml \ tests/test-returning-errno-lwt/generated_struct_bindings.ml \ tests/test-returning-errno-lwt/generated_stubs.c -tests/test-returning-errno-lwt/generated_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.native +tests/test-returning-errno-lwt/generated_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.$(BEST) $< --c-file $@ -tests/test-returning-errno-lwt/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.native +tests/test-returning-errno-lwt/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.$(BEST) $< --ml-file $@ -tests/test-returning-errno-lwt/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.native +tests/test-returning-errno-lwt/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.$(BEST) $< > $@ -$(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.native: $(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c +$(BUILDDIR)/test-returning-errno-lwt-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ -$(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.native +$(BUILDDIR)/tests/test-returning-errno-lwt/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-lwt-stub-generator.$(BEST) $< --c-struct-file $@ test-returning-errno-stubs.dir = tests/test-returning-errno/stubs @@ -928,7 +930,7 @@ ctypes-foreign-base ctypes-foreign-threaded test-returning-errno-stubs tests-common test-returning-errno-stub-generator.deps = str bigarray bytes test-returning-errno-stub-generator: PROJECT=test-returning-errno-stub-generator -test-returning-errno-stub-generator: $$(NATIVE_TARGET) +test-returning-errno-stub-generator: $$(BEST_TARGET) test-returning-errno.dir = tests/test-returning-errno test-returning-errno.threads = yes @@ -937,22 +939,22 @@ ctypes-foreign-threaded cstubs tests-common test-returning-errno-stubs test-returning-errno.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-returning-errno: PROJECT=test-returning-errno -test-returning-errno: $$(NATIVE_TARGET) +test-returning-errno: $$(BEST_TARGET) test-returning-errno-generated: \ tests/test-returning-errno/generated_bindings.ml \ tests/test-returning-errno/generated_struct_bindings.ml \ tests/test-returning-errno/generated_stubs.c -tests/test-returning-errno/generated_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.native +tests/test-returning-errno/generated_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.$(BEST) $< --c-file $@ -tests/test-returning-errno/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-stub-generator.native +tests/test-returning-errno/generated_bindings.ml: $(BUILDDIR)/test-returning-errno-stub-generator.$(BEST) $< --ml-file $@ -tests/test-returning-errno/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-ml-stub-generator.native +tests/test-returning-errno/generated_struct_bindings.ml: $(BUILDDIR)/test-returning-errno-ml-stub-generator.$(BEST) $< > $@ -$(BUILDDIR)/test-returning-errno-ml-stub-generator.native: $(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c +$(BUILDDIR)/test-returning-errno-ml-stub-generator.$(BEST): $(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c $(CC) -I `$(OCAMLFIND) ocamlc -where | sed 's|\r$$||'` $(CFLAGS) $(LDFLAGS) $(WINLDFLAGS) -o $@ $^ -$(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.native +$(BUILDDIR)/tests/test-returning-errno/generated_struct_stubs.c: $(BUILDDIR)/test-returning-errno-stub-generator.$(BEST) $< --c-struct-file $@ @@ -970,7 +972,7 @@ ctypes-foreign-threaded cstubs tests-common test-threads-stubs test-threads.link_flags = -L$(BUILDDIR)/clib -ltest_functions test-threads: PROJECT=test-threads -test-threads: $$(NATIVE_TARGET) +test-threads: $$(BEST_TARGET) TESTS = TESTS += test-raw @@ -1036,5 +1038,5 @@ run-%: $* @echo running $* - @cd $(BUILDDIR) && LD_LIBRARY_PATH=clib DYLD_LIBRARY_PATH=clib ./$*.native -runner sequential + @cd $(BUILDDIR) && CAML_LD_LIBRARY_PATH=. LD_LIBRARY_PATH=clib DYLD_LIBRARY_PATH=clib ./$*.$(BEST) -runner sequential diff -Nru ocaml-ctypes-0.6.2/META ocaml-ctypes-0.7.0/META --- ocaml-ctypes-0.6.2/META 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/META 2016-07-13 12:24:30.000000000 +0000 @@ -1,4 +1,4 @@ -version = "0.6.2" +version = "0.7.0" description = "Combinators for binding to C libraries without writing any C." requires = "unix bigarray str bytes" archive(byte) = "ctypes.cma" @@ -8,7 +8,7 @@ exists_if = "ctypes.cma" package "top" ( - version = "0.6.2" + version = "0.7.0" description = "Toplevel printers for C types" requires = "ctypes" archive(byte) = "ctypes-top.cma" @@ -19,7 +19,7 @@ ) package "stubs" ( - version = "0.6.2" + version = "0.7.0" description = "Stub generation from C types" requires = "ctypes" archive(byte) = "cstubs.cma" @@ -31,13 +31,13 @@ ) package "foreign" ( - version = "0.6.2" + version = "0.7.0" description = "Dynamic linking of C functions" requires(-mt) = "ctypes.foreign.unthreaded" requires(mt) = "ctypes.foreign.threaded" package "base" ( - version = "0.6.2" + version = "0.7.0" description = "Dynamic linking of C functions (base package)" requires = "ctypes" archive(byte) = "ctypes-foreign-base.cma" @@ -48,7 +48,7 @@ ) package "threaded" ( - version = "0.6.2" + version = "0.7.0" description = "Dynamic linking of C functions (for use in threaded programs)" requires = "threads ctypes ctypes.foreign.base" archive(byte) = "ctypes-foreign-threaded.cma" @@ -59,7 +59,7 @@ ) package "unthreaded" ( - version = "0.6.2" + version = "0.7.0" description = "Dynamic linking of C functions (for use in unthreaded programs)" requires = "ctypes ctypes.foreign.base" archive(byte) = "ctypes-foreign-unthreaded.cma" diff -Nru ocaml-ctypes-0.6.2/src/configure/gen_c_primitives.ml ocaml-ctypes-0.7.0/src/configure/gen_c_primitives.ml --- ocaml-ctypes-0.6.2/src/configure/gen_c_primitives.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/configure/gen_c_primitives.ml 2016-07-13 12:24:30.000000000 +0000 @@ -37,6 +37,7 @@ c_primitive "Long" "long" (Known_format "ld"); c_primitive "Llong" "long long" (Known_format "lld"); c_primitive "Ushort" "unsigned short" (Known_format "hu"); + c_primitive "Sint" "int" (Known_format "d"); c_primitive "Uint" "unsigned int" (Known_format "u"); c_primitive "Ulong" "unsigned long" (Known_format "lu"); c_primitive "Ullong" "unsigned long long" (Known_format "llu"); diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_analysis.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs_analysis.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_analysis.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_analysis.ml 2016-07-13 12:24:30.000000000 +0000 @@ -31,6 +31,7 @@ (* A value of type 'a alloc says that reading a value of type 'a may cause an OCaml allocation in C code. *) type _ alloc = +| Alloc_sint : Signed.sint alloc | Alloc_long : Signed.long alloc | Alloc_llong : Signed.llong alloc | Alloc_uint : Unsigned.uint alloc @@ -71,6 +72,7 @@ | Llong -> `Alloc Alloc_llong | Ushort -> `Alloc Alloc_ushort | Uchar -> `Alloc Alloc_uchar + | Sint -> `Alloc Alloc_sint | Uint -> `Alloc Alloc_uint | Ulong -> `Alloc Alloc_ulong | Ullong -> `Alloc Alloc_ullong diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_c_language.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs_c_language.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_c_language.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_c_language.ml 2016-07-13 12:24:30.000000000 +0000 @@ -36,7 +36,7 @@ type clocal = [ `Local of string * ty ] type cvar = [ clocal | `Global of cglobal ] type storage_class = [`Static | `Extern] -type cconst = [ `Int of int ] +type cconst = [ `Int of Signed.sint ] type cexp = [ cconst | clocal | `Cast of ty * cexp @@ -78,7 +78,7 @@ module Type_C = struct let cexp : cexp -> ty = function - | `Int _ -> Ty int + | `Int _ -> Ty sint | `Local (_, ty) -> ty | `Cast (Ty ty, _) -> Ty ty | `Addr (`Global { typ = Ty ty }) -> Ty (Pointer ty) @@ -162,6 +162,7 @@ | Long -> reader "ctypes_long_val" (value @-> returning long) | Llong -> reader "ctypes_llong_val" (value @-> returning llong) | Ushort -> reader "ctypes_ushort_val" (value @-> returning ushort) + | Sint -> reader "ctypes_sint_val" (value @-> returning sint) | Uint -> reader "ctypes_uint_val" (value @-> returning uint) | Ulong -> reader "ctypes_ulong_val" (value @-> returning ulong) | Ullong -> reader "ctypes_ullong_val" (value @-> returning ullong) @@ -193,6 +194,7 @@ | Long -> conser "ctypes_copy_long" (long @-> returning value) | Llong -> conser "ctypes_copy_llong" (llong @-> returning value) | Ushort -> conser "ctypes_copy_ushort" (ushort @-> returning value) + | Sint -> conser "ctypes_copy_sint" (sint @-> returning value) | Uint -> conser "ctypes_copy_uint" (uint @-> returning value) | Ulong -> conser "ctypes_copy_ulong" (ulong @-> returning value) | Ullong -> conser "ctypes_copy_ullong" (ullong @-> returning value) diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_emit_c.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs_emit_c.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_emit_c.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_emit_c.ml 2016-07-13 12:24:30.000000000 +0000 @@ -26,7 +26,7 @@ let cvar fmt v = fprintf fmt "%s" (cvar_name v) -let cconst fmt (`Int i) = fprintf fmt "%d" i +let cconst fmt (`Int i) = fprintf fmt "%s" (Signed.SInt.to_string i) (* Determine whether the C expression [(ty)e] is equivalent to [e] *) let cast_unnecessary : ty -> cexp -> bool = @@ -115,8 +115,8 @@ fprintf fmt "@[@[%a@]@;=@;@[%a;@]@]@ %a" (Ctypes.format_typ ~name) ty ceff e ccomp s | `LetConst (`Local (x, _), `Int c, s) -> - fprintf fmt "@[enum@ {@[@ %s@ =@ %d@ };@]@]@ %a" - x c ccomp s + fprintf fmt "@[enum@ {@[@ %s@ =@ %s@ };@]@]@ %a" + x (Signed.SInt.to_string c) ccomp s | `LetAssign (lv, e, c) -> fprintf fmt "@[@[%a@]@;=@;@[%a@];@]@ %a" clvalue lv ceff e ccomp c diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_generate_c.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs_generate_c.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_generate_c.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_generate_c.ml 2016-07-13 12:24:30.000000000 +0000 @@ -96,7 +96,7 @@ let errno = `Global { name = "errno"; references_ocaml_heap = false; - typ = Ty int } + typ = Ty sint } let functions : ceff = `Global { name = "functions"; @@ -151,8 +151,8 @@ | Primitive p -> `App (prim_inj p, [`Cast (Ty (Primitive p), (x :> cexp))]) | Pointer _ -> from_ptr (x:> cexp) | Funptr _ -> from_ptr (x:> cexp) - | Struct s -> `App (copy_bytes, [`Addr (x :> cvar); `Int (sizeof ty)]) - | Union u -> `App (copy_bytes, [`Addr (x :> cvar); `Int (sizeof ty)]) + | Struct s -> `App (copy_bytes, [`Addr (x :> cvar); `Int (Signed.SInt.of_int (sizeof ty))]) + | Union u -> `App (copy_bytes, [`Addr (x :> cvar); `Int (Signed.SInt.of_int (sizeof ty))]) | Abstract _ -> report_unpassable "values of abstract type" | View { ty } -> inj ty x | Array _ -> report_unpassable "arrays" @@ -190,7 +190,7 @@ `Ignore_errno -> `Let ((local x t, e), (inj t (local x t) :> ccomp)) | `Return_errno -> (`LetAssign (errno, - `Int 0, + `Int Signed.SInt.zero, `Let ((local x t, e), ((inj t (local x t) :> ccomp), value) >>= fun v -> (pair_with_errno v :> ccomp))) : ccomp) @@ -219,7 +219,7 @@ in let rec build_call ?(args=[]) = function | 0 -> `App (f, args) - | n -> (`Index (`Local argv, `Int (n - 1)), value) >>= fun x -> + | n -> (`Index (`Local argv, `Int (Signed.SInt.of_int (n - 1))), value) >>= fun x -> build_call ~args:(x :: args) (n - 1) in let bytename = Printf.sprintf "%s_byte%d" fname nargs in @@ -265,7 +265,7 @@ ~init:(List.length args - 1, call) ~f:(fun (x, Ty t) (i, c) -> i - 1, - `LetAssign (`Index (local "locals" (ptr value), `Int i), + `LetAssign (`Index (local "locals" (ptr value), `Int (Signed.SInt.of_int i)), (inj t (local x t)), c))) in @@ -277,7 +277,7 @@ } *) `Function (dec, - `LetConst (local "nargs" int, `Int (List.length args), + `LetConst (local "nargs" int, `Int (Signed.SInt.of_int (List.length args)), wrap_if runtime_lock acquire_runtime_system ( `CAMLparam0 >> `CAMLlocalN (local "locals" (array (List.length args) value), @@ -353,7 +353,7 @@ let (_ : (_,_) field) = field s "result" result in let () = match errno with `Ignore_errno -> () - | `Return_errno -> ignore (field s "error_status" int) + | `Return_errno -> ignore (field s "error_status" sint) in let () = ListLabels.iter args ~f:(fun (BoxedType t, name) -> ignore (field s name t : (_,_) field)) in @@ -375,14 +375,14 @@ c)) in begin match errno with - `Ignore_errno -> r (`Return (Ty Void, (`Int 0))) + `Ignore_errno -> r (`Return (Ty Void, (`Int Signed.SInt.zero))) | `Return_errno -> let open Generate_C in r (`LetAssign (`PointerField (`Local j, "error_status"), errno, - `Return (Ty Void, (`Int 0)))) + `Return (Ty Void, (`Int Signed.SInt.zero)))) end | (BoxedType ty, x) :: xs -> Generate_C.((`DerefField (`Local j, x), ty) >>= fun y -> @@ -404,7 +404,7 @@ fprintf fmt "@[rv@ =@ ("; | `Return_errno -> fprintf fmt "@[rv@ =@ caml_alloc_tuple(2);@]@\n"; - fprintf fmt "@[Store_field(rv,@ 1,@ Val_int(j->error_status));@]@\n"; + fprintf fmt "@[Store_field(rv,@ 1,@ ctypes_copy_sint(j->error_status));@]@\n"; fprintf fmt "@[Store_field(rv,@ 0,@ "; in fprintf fmt "%a);@]@\n" diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_generate_ml.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs_generate_ml.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_generate_ml.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_generate_ml.ml 2016-07-13 12:24:30.000000000 +0000 @@ -283,7 +283,7 @@ | Out -> ml_typ_of_return_typ let lwt_job_type = Ctypes_path.path_of_string "Lwt_unix.job" -let int_type = `Ident (Ctypes_path.path_of_string "int") +let int_type = `Ident (Ctypes_path.path_of_string "Signed.sint") let rec ml_external_type_of_fn : type a. concurrency:concurrency_policy -> errno:errno_policy -> diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_internals.mli ocaml-ctypes-0.7.0/src/cstubs/cstubs_internals.mli --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_internals.mli 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_internals.mli 2016-07-13 12:24:30.000000000 +0000 @@ -72,6 +72,7 @@ | Long : long prim | Llong : llong prim | Ushort : ushort prim +| Sint : sint prim | Uint : uint prim | Ulong : ulong prim | Ullong : ullong prim diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs.ml 2016-07-13 12:24:30.000000000 +0000 @@ -53,7 +53,7 @@ Format.formatter -> unit = fun ~concurrency ~errno fmt -> match concurrency, errno with `Sequential, `Ignore_errno -> Format.fprintf fmt "type 'a return = 'a@\n" - | `Sequential, `Return_errno -> Format.fprintf fmt "type 'a return = 'a * int@\n" + | `Sequential, `Return_errno -> Format.fprintf fmt "type 'a return = 'a * Signed.sint@\n" | `Lwt_jobs, `Ignore_errno -> begin Format.fprintf fmt "type 'a return = { lwt: 'a Lwt.t }@\n"; @@ -61,7 +61,7 @@ end | `Lwt_jobs, `Return_errno -> begin - Format.fprintf fmt "type 'a return = { lwt: ('a * int) Lwt.t }@\n"; + Format.fprintf fmt "type 'a return = { lwt: ('a * Signed.sint) Lwt.t }@\n"; Format.fprintf fmt "let box_lwt lwt = {lwt}@\n"; end diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_public_name.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs_public_name.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_public_name.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_public_name.ml 2016-07-13 12:24:30.000000000 +0000 @@ -20,6 +20,7 @@ | ML_int64 -> path_of_string "int64" | ML_llong -> path_of_string "Signed.llong" | ML_long -> path_of_string "Signed.long" + | ML_sint -> path_of_string "Signed.sint" | ML_nativeint -> path_of_string "nativeint" | ML_size_t -> path_of_string "Unsigned.size_t" | ML_uchar -> path_of_string "Unsigned.uchar" @@ -43,6 +44,7 @@ | Long -> path_of_string "Ctypes.long" | Llong -> path_of_string "Ctypes.llong" | Ushort -> path_of_string "Ctypes.ushort" + | Sint -> path_of_string "Ctypes.sint" | Uint -> path_of_string "Ctypes.uint" | Ulong -> path_of_string "Ctypes.ulong" | Ullong -> path_of_string "Ctypes.ullong" @@ -77,6 +79,7 @@ | Long -> path "Long" | Llong -> path "Llong" | Ushort -> path "Ushort" + | Sint -> path "Sint" | Uint -> path "Uint" | Ulong -> path "Ulong" | Ullong -> path "Ullong" diff -Nru ocaml-ctypes-0.6.2/src/cstubs/cstubs_structs.ml ocaml-ctypes-0.7.0/src/cstubs/cstubs_structs.ml --- ocaml-ctypes-0.6.2/src/cstubs/cstubs_structs.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/cstubs/cstubs_structs.ml 2016-07-13 12:24:30.000000000 +0000 @@ -151,6 +151,7 @@ | Long, Some fmt -> sprintf "Signed.Long.of_string \"%s\"" fmt | Llong, Some fmt -> sprintf "Signed.LLong.of_string \"%s\"" fmt | Ushort, Some fmt -> sprintf "Unsigned.UShort.of_string \"%s\"" fmt + | Sint, Some fmt -> sprintf "Signed.SInt.of_string \"%s\"" fmt | Uint, Some fmt -> sprintf "Unsigned.UInt.of_string \"%s\"" fmt | Ulong, Some fmt -> sprintf "Unsigned.ULong.of_string \"%s\"" fmt | Ullong, Some fmt -> sprintf "Unsigned.ULLong.of_string \"%s\"" fmt diff -Nru ocaml-ctypes-0.6.2/src/ctypes/ctypes_cstubs_internals.h ocaml-ctypes-0.7.0/src/ctypes/ctypes_cstubs_internals.h --- ocaml-ctypes-0.6.2/src/ctypes/ctypes_cstubs_internals.h 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/ctypes_cstubs_internals.h 2016-07-13 12:24:30.000000000 +0000 @@ -29,7 +29,7 @@ CAMLlocal1 (v); v = caml_alloc_tuple(2); Store_field (v, 0, p); - Store_field (v, 1, Val_int(errno)); + Store_field (v, 1, ctypes_copy_sint(errno)); CAMLreturn (v); } diff -Nru ocaml-ctypes-0.6.2/src/ctypes/ctypes_primitives.h ocaml-ctypes-0.7.0/src/ctypes/ctypes_primitives.h --- ocaml-ctypes-0.6.2/src/ctypes/ctypes_primitives.h 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/ctypes_primitives.h 2016-07-13 12:24:30.000000000 +0000 @@ -26,6 +26,7 @@ Ctypes_Long, Ctypes_Llong, Ctypes_Ushort, + Ctypes_Sint, Ctypes_Uint, Ctypes_Ulong, Ctypes_Ullong, @@ -62,13 +63,18 @@ /* int is at least 16 bits. */ #if UINT_MAX == UINT16_MAX +#error "No suitable OCaml type available for representing signed int values" #define ctypes_uint_val Uint16_val #define ctypes_copy_uint ctypes_copy_uint16 #elif UINT_MAX == UINT32_MAX +#define ctypes_sint_val Int32_val #define ctypes_uint_val Uint32_val +#define ctypes_copy_sint caml_copy_int32 #define ctypes_copy_uint ctypes_copy_uint32 #elif UINT_MAX == UINT64_MAX +#define ctypes_sint_val Int64_val #define ctypes_uint_val Uint64_val +#define ctypes_copy_sint caml_copy_int64 #define ctypes_copy_uint ctypes_copy_uint64 #else # error "No suitable OCaml type available for representing unsigned int values" diff -Nru ocaml-ctypes-0.6.2/src/ctypes/ctypes_primitive_types.ml ocaml-ctypes-0.7.0/src/ctypes/ctypes_primitive_types.ml --- ocaml-ctypes-0.6.2/src/ctypes/ctypes_primitive_types.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/ctypes_primitive_types.ml 2016-07-13 12:24:30.000000000 +0000 @@ -18,6 +18,7 @@ | Long : long prim | Llong : llong prim | Ushort : ushort prim + | Sint : sint prim | Uint : uint prim | Ulong : ulong prim | Ullong : ullong prim @@ -46,6 +47,7 @@ | ML_int64 : int64 ml_prim | ML_llong : llong ml_prim | ML_long : long ml_prim + | ML_sint : sint ml_prim | ML_nativeint : nativeint ml_prim | ML_size_t : size_t ml_prim | ML_uchar : uchar ml_prim @@ -69,6 +71,7 @@ | Long -> ML_long | Llong -> ML_llong | Ushort -> ML_ushort + | Sint -> ML_sint | Uint -> ML_uint | Ulong -> ML_ulong | Ullong -> ML_ullong diff -Nru ocaml-ctypes-0.6.2/src/ctypes/ctypes_primitive_types.mli ocaml-ctypes-0.7.0/src/ctypes/ctypes_primitive_types.mli --- ocaml-ctypes-0.6.2/src/ctypes/ctypes_primitive_types.mli 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/ctypes_primitive_types.mli 2016-07-13 12:24:30.000000000 +0000 @@ -22,6 +22,7 @@ | Long : long prim | Llong : llong prim | Ushort : ushort prim + | Sint : sint prim | Uint : uint prim | Ulong : ulong prim | Ullong : ullong prim @@ -50,6 +51,7 @@ | ML_int64 : int64 ml_prim | ML_llong : llong ml_prim | ML_long : long ml_prim + | ML_sint : sint ml_prim | ML_nativeint : nativeint ml_prim | ML_size_t : size_t ml_prim | ML_uchar : uchar ml_prim diff -Nru ocaml-ctypes-0.6.2/src/ctypes/ctypes_static.ml ocaml-ctypes-0.7.0/src/ctypes/ctypes_static.ml --- ocaml-ctypes-0.6.2/src/ctypes/ctypes_static.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/ctypes_static.ml 2016-07-13 12:24:30.000000000 +0000 @@ -170,6 +170,7 @@ let complex64 = Primitive Ctypes_primitive_types.Complex64 let short = Primitive Ctypes_primitive_types.Short let int = Primitive Ctypes_primitive_types.Int +let sint = Primitive Ctypes_primitive_types.Sint let long = Primitive Ctypes_primitive_types.Long let llong = Primitive Ctypes_primitive_types.Llong let nativeint = Primitive Ctypes_primitive_types.Nativeint diff -Nru ocaml-ctypes-0.6.2/src/ctypes/ctypes_static.mli ocaml-ctypes-0.7.0/src/ctypes/ctypes_static.mli --- ocaml-ctypes-0.6.2/src/ctypes/ctypes_static.mli 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/ctypes_static.mli 2016-07-13 12:24:30.000000000 +0000 @@ -118,6 +118,7 @@ val complex64 : Complex.t typ val short : int typ val int : int typ +val sint : Signed.sint typ val long : Signed.long typ val llong : Signed.llong typ val nativeint : nativeint typ diff -Nru ocaml-ctypes-0.6.2/src/ctypes/ctypes_types.mli ocaml-ctypes-0.7.0/src/ctypes/ctypes_types.mli --- ocaml-ctypes-0.6.2/src/ctypes/ctypes_types.mli 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/ctypes_types.mli 2016-07-13 12:24:30.000000000 +0000 @@ -132,6 +132,9 @@ val ushort : ushort typ (** Value representing the C type [unsigned short]. *) + val sint : sint typ + (** Value representing the C type [int]. *) + val uint : uint typ (** Value representing the C type [unsigned int]. *) diff -Nru ocaml-ctypes-0.6.2/src/ctypes/signed.ml ocaml-ctypes-0.7.0/src/ctypes/signed.ml --- ocaml-ctypes-0.6.2/src/ctypes/signed.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/signed.ml 2016-07-13 12:24:30.000000000 +0000 @@ -109,6 +109,7 @@ end (* C guarantees that sizeof(t) == sizeof(unsigned t) *) +external int_size : unit -> int = "ctypes_uint_size" external long_size : unit -> int = "ctypes_ulong_size" external llong_size : unit -> int = "ctypes_ulonglong_size" @@ -118,8 +119,10 @@ | 8 -> (module Int64) | _ -> assert false +module SInt = (val pick ~size:(int_size ())) module Long = (val pick ~size:(long_size ())) module LLong = (val pick ~size:(llong_size ())) +type sint = SInt.t type long = Long.t type llong = LLong.t diff -Nru ocaml-ctypes-0.6.2/src/ctypes/signed.mli ocaml-ctypes-0.7.0/src/ctypes/signed.mli --- ocaml-ctypes-0.6.2/src/ctypes/signed.mli 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/signed.mli 2016-07-13 12:24:30.000000000 +0000 @@ -49,12 +49,18 @@ module Int64 : S with type t = int64 (** Signed 64-bit integer type and operations. *) +module SInt : S +(** C's signed integer type and operations. *) + module Long : S (** The signed long integer type and operations. *) module LLong : S (** The signed long long integer type and operations. *) +type sint = SInt.t +(** C's signed integer type. *) + type long = Long.t (** The signed long integer type. *) diff -Nru ocaml-ctypes-0.6.2/src/ctypes/type_info_stubs.c ocaml-ctypes-0.7.0/src/ctypes/type_info_stubs.c --- ocaml-ctypes-0.6.2/src/ctypes/type_info_stubs.c 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes/type_info_stubs.c 2016-07-13 12:24:30.000000000 +0000 @@ -49,6 +49,7 @@ case Ctypes_Long: b = ctypes_copy_long(*(long *)buf); break; case Ctypes_Llong: b = ctypes_copy_llong(*(long long *)buf); break; case Ctypes_Ushort: b = ctypes_copy_ushort(*(unsigned short *)buf); break; + case Ctypes_Sint: b = ctypes_copy_sint(*(int *)buf); break; case Ctypes_Uint: b = ctypes_copy_uint(*(unsigned int *)buf); break; case Ctypes_Ulong: b = ctypes_copy_ulong(*(unsigned long *)buf); break; case Ctypes_Ullong: b = ctypes_copy_ullong(*(unsigned long long *)buf); break; @@ -90,6 +91,7 @@ case Ctypes_Long: *(long *)buf = ctypes_long_val(v); break; case Ctypes_Llong: *(long long *)buf = ctypes_llong_val(v); break; case Ctypes_Ushort: *(unsigned short *)buf = ctypes_ushort_val(v); break; + case Ctypes_Sint: *(int *)buf = ctypes_sint_val(v); break; case Ctypes_Uint: *(unsigned int *)buf = ctypes_uint_val(v); break; case Ctypes_Ulong: *(unsigned long *)buf = ctypes_ulong_val(v); break; case Ctypes_Ullong: *(unsigned long long *)buf = ctypes_ullong_val(v); break; @@ -133,6 +135,7 @@ case Ctypes_Long: len = snprintf(buf, sizeof buf, "%ld", (long)ctypes_long_val(v)); break; case Ctypes_Llong: len = snprintf(buf, sizeof buf, "%lld", (long long)ctypes_llong_val(v)); break; case Ctypes_Ushort: len = snprintf(buf, sizeof buf, "%hu", (unsigned short)ctypes_ushort_val(v)); break; + case Ctypes_Sint: len = snprintf(buf, sizeof buf, "%d", ctypes_sint_val(v)); break; case Ctypes_Uint: len = snprintf(buf, sizeof buf, "%u", (unsigned)ctypes_uint_val(v)); break; case Ctypes_Ulong: len = snprintf(buf, sizeof buf, "%lu", (unsigned long)ctypes_ulong_val(v)); break; case Ctypes_Ullong: len = snprintf(buf, sizeof buf, "%llu", (unsigned long long)ctypes_ullong_val(v)); break; diff -Nru ocaml-ctypes-0.6.2/src/ctypes-foreign-base/ffi_call_stubs.c ocaml-ctypes-0.7.0/src/ctypes-foreign-base/ffi_call_stubs.c --- ocaml-ctypes-0.6.2/src/ctypes-foreign-base/ffi_call_stubs.c 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes-foreign-base/ffi_call_stubs.c 2016-07-13 12:24:30.000000000 +0000 @@ -114,6 +114,17 @@ /* return value offset */ size_t roffset; + /* return offset adjustment. + + libffi promotes return types that are less than the size of the + system register to the word-sized type ffi_arg. On a big-endian + system this means that the address where libffi writes the return + value is not always the same as the address from which ctypes + should read the value. + */ + size_t radjustment; + + /* The context in which the call should run: whether errno is checked, whether the runtime lock is released, and so on. */ struct call_context { @@ -129,7 +140,7 @@ ffi_cif *cif; } callspec_prototype = { - 0, 0, 0, 0, BUILDING, NULL, -1, { 0, 0 }, NULL + 0, 0, 0, 0, BUILDING, NULL, -1, 0, { 0, 0 }, NULL }; @@ -245,6 +256,39 @@ CAMLreturn(Val_int(offset)); } +static int ffi_return_type_promotes(ffi_type *f) +{ + /* libffi promotes integer return types that are smaller than a word */ + if (f->size < sizeof(ffi_arg)) { + switch (f->type) { + case FFI_TYPE_INT: + case FFI_TYPE_UINT8: + case FFI_TYPE_SINT8: + case FFI_TYPE_UINT16: + case FFI_TYPE_SINT16: + case FFI_TYPE_UINT32: + case FFI_TYPE_SINT32: + case FFI_TYPE_UINT64: + case FFI_TYPE_SINT64: + return 1; + default: break; + } + } + return 0; +} + +static int ffi_return_type_adjustment(ffi_type *f) +{ +#ifdef ARCH_BIG_ENDIAN + /* An adjustment is needed (on bigendian systems) for integer types + less than the size of a word */ + if (ffi_return_type_promotes(f)) { + return sizeof(ffi_arg) - f->size; + } +#endif + return 0; +} + /* Pass the return type and conclude the specification preparation */ /* prep_callspec : callspec -> 'a ffitype -> int -> unit */ @@ -262,9 +306,11 @@ /* Add the (aligned) space needed for the return value */ callspec->roffset = aligned_offset(callspec->bytes, rffitype->alignment); + callspec->radjustment = ffi_return_type_adjustment(rffitype); callspec->bytes = callspec->roffset + rffitype->size; - /* Allocate an extra word after the return value space to work + + /* Allocate an extra word after the return value space, to work around a bug in libffi which causes it to write past the return value space. @@ -308,7 +354,8 @@ size_t bytes = compute_arg_buffer_size(callspec, &arg_array_offset); char *callbuffer = alloca(bytes); - char *return_slot = callbuffer + roffset; + char *return_write_slot = callbuffer + roffset; + char *return_read_slot = return_write_slot + callspec->radjustment; populate_arg_array(callspec, (struct callbuffer *)callbuffer, (void **)(callbuffer + arg_array_offset)); @@ -350,7 +397,7 @@ ffi_call(cif, cfunction, - return_slot, + return_write_slot, (void **)(callbuffer + arg_array_offset)); if (check_errno) { @@ -369,7 +416,7 @@ unix_error(saved_errno, buffer, Nothing); } - callback_rv_buf = CTYPES_FROM_PTR(return_slot); + callback_rv_buf = CTYPES_FROM_PTR(return_read_slot); CAMLreturn(caml_callback(rvreader, callback_rv_buf)); } @@ -423,7 +470,12 @@ /* now store the return value */ assert (Tag_val(boxedfn) == Done); - argptr = CTYPES_FROM_PTR(ret); + + if (ffi_return_type_promotes(cif->rtype)) { + *(ffi_arg *)ret = 0; + } + + argptr = CTYPES_FROM_PTR(ret + ffi_return_type_adjustment(cif->rtype)); caml_callback(Field(boxedfn, 0), argptr); CAMLreturn0; diff -Nru ocaml-ctypes-0.6.2/src/ctypes-foreign-base/ffi_type_stubs.c ocaml-ctypes-0.7.0/src/ctypes-foreign-base/ffi_type_stubs.c --- ocaml-ctypes-0.6.2/src/ctypes-foreign-base/ffi_type_stubs.c 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes-foreign-base/ffi_type_stubs.c 2016-07-13 12:24:30.000000000 +0000 @@ -75,7 +75,8 @@ case Ctypes_Long: ft = &ffi_type_slong; break; /* Long */ case Ctypes_Llong: ft = &ctypes_ffi_type_sllong; break; /* Llong */ case Ctypes_Ushort: ft = &ffi_type_ushort; break; /* Ushort */ - case Ctypes_Uint: ft = &ffi_type_ulong; break; /* Uint */ + case Ctypes_Sint: ft = &ffi_type_sint; break; /* Sint */ + case Ctypes_Uint: ft = &ffi_type_uint; break; /* Uint */ case Ctypes_Ulong: ft = &ffi_type_ulong; break; /* Ulong */ case Ctypes_Ullong: ft = &ctypes_ffi_type_ullong; break; /* Ullong */ case Ctypes_Size_t: ft = &ctypes_ffi_type_size_t; break; /* Size */ diff -Nru ocaml-ctypes-0.6.2/src/ctypes-top/ctypes_printers.ml ocaml-ctypes-0.7.0/src/ctypes-top/ctypes_printers.ml --- ocaml-ctypes-0.6.2/src/ctypes-top/ctypes_printers.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes-top/ctypes_printers.ml 2016-07-13 12:24:30.000000000 +0000 @@ -7,6 +7,8 @@ let format_typ fmt t = Ctypes.format_typ fmt t let format_fn fmt fn = Ctypes.format_fn fmt fn +let format_sint fmt v = + Format.fprintf fmt "" (Signed.SInt.to_string v) let format_long fmt v = Format.fprintf fmt "" (Signed.Long.to_string v) let format_llong fmt v = diff -Nru ocaml-ctypes-0.6.2/src/ctypes-top/ctypes_printers.mli ocaml-ctypes-0.7.0/src/ctypes-top/ctypes_printers.mli --- ocaml-ctypes-0.6.2/src/ctypes-top/ctypes_printers.mli 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes-top/ctypes_printers.mli 2016-07-13 12:24:30.000000000 +0000 @@ -9,6 +9,7 @@ val format_typ : formatter -> 'a Ctypes.typ -> unit val format_fn : formatter -> 'a Ctypes.fn -> unit +val format_sint : formatter -> Signed.SInt.t -> unit val format_long : formatter -> Signed.Long.t -> unit val format_llong : formatter -> Signed.LLong.t -> unit val format_uchar : formatter -> Unsigned.UChar.t -> unit diff -Nru ocaml-ctypes-0.6.2/src/ctypes-top/install_ctypes_printers.ml ocaml-ctypes-0.7.0/src/ctypes-top/install_ctypes_printers.ml --- ocaml-ctypes-0.6.2/src/ctypes-top/install_ctypes_printers.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/src/ctypes-top/install_ctypes_printers.ml 2016-07-13 12:24:30.000000000 +0000 @@ -2,6 +2,7 @@ let printers = [ "Ctypes_printers.format_typ"; "Ctypes_printers.format_fn"; + "Ctypes_printers.format_sint"; "Ctypes_printers.format_long"; "Ctypes_printers.format_llong"; "Ctypes_printers.format_uchar"; diff -Nru ocaml-ctypes-0.6.2/tests/clib/test_functions.c ocaml-ctypes-0.7.0/tests/clib/test_functions.c --- ocaml-ctypes-0.6.2/tests/clib/test_functions.c 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/clib/test_functions.c 2016-07-13 12:24:30.000000000 +0000 @@ -637,3 +637,8 @@ { return 10; } + +int callback_returns_char_a(char (*f)(void)) +{ + return f() == 'a' ? 1 : 0; +} diff -Nru ocaml-ctypes-0.6.2/tests/clib/test_functions.h ocaml-ctypes-0.7.0/tests/clib/test_functions.h --- ocaml-ctypes-0.6.2/tests/clib/test_functions.h 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/clib/test_functions.h 2016-07-13 12:24:30.000000000 +0000 @@ -234,4 +234,5 @@ int sixargs(int, int, int, int, int, int); int return_10(void); +int callback_returns_char_a(char (*)(void)); #endif /* TEST_FUNCTIONS_H */ diff -Nru ocaml-ctypes-0.6.2/tests/test-constants/stubs/types.ml ocaml-ctypes-0.7.0/tests/test-constants/stubs/types.ml --- ocaml-ctypes-0.6.2/tests/test-constants/stubs/types.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-constants/stubs/types.ml 2016-07-13 12:24:30.000000000 +0000 @@ -19,8 +19,8 @@ let _SHRT_MIN = constant "SHRT_MIN" short let _SHRT_MAX = constant "SHRT_MAX" short let _USHRT_MAX = constant "USHRT_MAX" ushort - let _INT_MIN = constant "INT_MIN" long - let _INT_MAX = constant "INT_MAX" long + let _INT_MIN = constant "INT_MIN" sint + let _INT_MAX = constant "INT_MAX" sint let _UINT_MAX = constant "UINT_MAX" uint let _LONG_MAX = constant "LONG_MAX" long let _LONG_MIN = constant "LONG_MIN" long diff -Nru ocaml-ctypes-0.6.2/tests/test-constants/test_constants.ml ocaml-ctypes-0.7.0/tests/test-constants/test_constants.ml --- ocaml-ctypes-0.6.2/tests/test-constants/test_constants.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-constants/test_constants.ml 2016-07-13 12:24:30.000000000 +0000 @@ -30,6 +30,8 @@ assert_equal Constants._SHRT_MIN (constant "SHRT_MIN" Ctypes.short); assert_equal Constants._SHRT_MAX (constant "SHRT_MAX" Ctypes.short); assert_equal Constants._USHRT_MAX (constant "USHRT_MAX" Ctypes.ushort); + assert_equal Constants._INT_MIN (constant "INT_MIN" Ctypes.sint); + assert_equal Constants._INT_MAX (constant "INT_MAX" Ctypes.sint); assert_equal Constants._UINT_MAX (constant "UINT_MAX" Ctypes.uint); assert_equal Constants._LONG_MAX (constant "LONG_MAX" Ctypes.long); assert_equal Constants._LONG_MIN (constant "LONG_MIN" Ctypes.long); diff -Nru ocaml-ctypes-0.6.2/tests/test-higher_order/stubs/functions.ml ocaml-ctypes-0.7.0/tests/test-higher_order/stubs/functions.ml --- ocaml-ctypes-0.6.2/tests/test-higher_order/stubs/functions.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-higher_order/stubs/functions.ml 2016-07-13 12:24:30.000000000 +0000 @@ -27,6 +27,9 @@ funptr Ctypes.(int @-> int @-> returning int) @-> int @-> int @-> returning int) + let callback_returns_char_a = foreign "callback_returns_char_a" + (funptr Ctypes.(void @-> returning char) @-> returning int) + let returning_funptr = foreign "returning_funptr" (int @-> returning (funptr Ctypes.(int @-> int @-> returning int))) diff -Nru ocaml-ctypes-0.6.2/tests/test-higher_order/test_higher_order.ml ocaml-ctypes-0.7.0/tests/test-higher_order/test_higher_order.ml --- ocaml-ctypes-0.6.2/tests/test-higher_order/test_higher_order.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-higher_order/test_higher_order.ml 2016-07-13 12:24:30.000000000 +0000 @@ -54,6 +54,14 @@ assert_equal 10 (higher_order_3 acceptor ( + ) 3 4); assert_equal 36 (higher_order_3 acceptor ( * ) 3 4) + (* + Call a C function of type + int (char( * )(void)) + and check that the char returned by the function pointer is handled + correctly + *) + let test_function_pointer_returning_char _ = + assert_equal 1 (callback_returns_char_a (fun () -> 'a')) (* Call a C function of type @@ -142,6 +150,12 @@ "test_higher_higher_order (stubs)" >:: Stub_tests.test_higher_higher_order; + "test_function_pointer_returning_char (stubs)" + >:: Stub_tests.test_function_pointer_returning_char; + + "test_function_pointer_returning_char (foreign)" + >:: Foreign_tests.test_function_pointer_returning_char; + "test_returning_pointer_to_function (foreign)" >:: Foreign_tests.test_returning_pointer_to_function; diff -Nru ocaml-ctypes-0.6.2/tests/test-returning-errno/stubs/types.ml ocaml-ctypes-0.7.0/tests/test-returning-errno/stubs/types.ml --- ocaml-ctypes-0.6.2/tests/test-returning-errno/stubs/types.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-returning-errno/stubs/types.ml 2016-07-13 12:24:30.000000000 +0000 @@ -12,7 +12,7 @@ struct open S - let _ENOENT = constant "ENOENT" int + let _ENOENT = constant "ENOENT" sint let ifdir = constant "S_IFDIR" (lift_typ mode_t) let ifmt = constant "S_IFMT" (lift_typ mode_t) diff -Nru ocaml-ctypes-0.6.2/tests/test-returning-errno/test_returning_errno.ml ocaml-ctypes-0.7.0/tests/test-returning-errno/test_returning_errno.ml --- ocaml-ctypes-0.6.2/tests/test-returning-errno/test_returning_errno.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-returning-errno/test_returning_errno.ml 2016-07-13 12:24:30.000000000 +0000 @@ -21,7 +21,7 @@ begin let x, errno = Bindings.stat "." (addr st) in assert_equal 0 x; - assert_equal 0 errno; + assert_equal Signed.SInt.zero errno; let x, errno = Bindings.stat "/does-not-exist" (addr st) in assert_equal (-1) x; diff -Nru ocaml-ctypes-0.6.2/tests/test-returning-errno-lwt/stubs/types.ml ocaml-ctypes-0.7.0/tests/test-returning-errno-lwt/stubs/types.ml --- ocaml-ctypes-0.6.2/tests/test-returning-errno-lwt/stubs/types.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-returning-errno-lwt/stubs/types.ml 2016-07-13 12:24:30.000000000 +0000 @@ -12,7 +12,7 @@ struct open S - let _ENOENT = constant "ENOENT" int + let _ENOENT = constant "ENOENT" sint let ifdir = constant "S_IFDIR" (lift_typ mode_t) let ifmt = constant "S_IFMT" (lift_typ mode_t) diff -Nru ocaml-ctypes-0.6.2/tests/test-returning-errno-lwt/test_returning_errno.ml ocaml-ctypes-0.7.0/tests/test-returning-errno-lwt/test_returning_errno.ml --- ocaml-ctypes-0.6.2/tests/test-returning-errno-lwt/test_returning_errno.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-returning-errno-lwt/test_returning_errno.ml 2016-07-13 12:24:30.000000000 +0000 @@ -22,7 +22,7 @@ Lwt_unix.run Lwt.((Bindings.stat "." (addr s)).lwt >>= fun (x, errno) -> assert_equal 0 x; - assert_equal 0 errno; + assert_equal Signed.SInt.zero errno; return ()); Lwt_unix.run Lwt.((Bindings.stat "/does-not-exist" (addr s)).lwt >>= fun (x, errno) -> diff -Nru ocaml-ctypes-0.6.2/tests/test-roots/test_roots.ml ocaml-ctypes-0.7.0/tests/test-roots/test_roots.ml --- ocaml-ctypes-0.6.2/tests/test-roots/test_roots.ml 2016-06-08 16:55:36.000000000 +0000 +++ ocaml-ctypes-0.7.0/tests/test-roots/test_roots.ml 2016-07-13 12:24:30.000000000 +0000 @@ -19,26 +19,32 @@ let test_root_lifetime _ = (* Check that values not registered as roots are collected. *) let alive = ref true in - let v = [| 1; 2; 3 |] in - Gc.finalise (fun _ -> alive := false) v; + let () = + let v = [| 1; 2; 3 |] in + Gc.finalise (fun _ -> alive := false) v; + in Gc.compact (); assert_equal false !alive ~msg:"values not registered as roots are collected"; (* Check that values registered as roots are not collected. *) let alive = ref true in - let v = [| 1; 2; 3 |] in - Gc.finalise (fun _ -> alive := false) v; - let _r = Root.create v in + let _r = + let v = [| 1; 2; 3 |] in + Gc.finalise (fun _ -> alive := false) v; + Root.create v + in Gc.compact (); assert_equal true !alive ~msg:"registered roots are not collected"; (* Check that values unregistered as roots are collected. *) let alive = ref true in - let v = [| 1; 2; 3 |] in - Gc.finalise (fun _ -> alive := false) v; - let r = Root.create v in + let r = + let v = [| 1; 2; 3 |] in + Gc.finalise (fun _ -> alive := false) v; + Root.create v + in Root.release r; Gc.compact (); assert_equal false !alive @@ -46,19 +52,23 @@ (* Check that values assigned to roots are not collected. *) let alive = ref true in - let v = [| 1; 2; 3 |] in - Gc.finalise (fun _ -> alive := false) v; - let r = Root.create () in - Root.set r v; + let () = + let v = [| 1; 2; 3 |] in + Gc.finalise (fun _ -> alive := false) v; + let r = Root.create () in + Root.set r v; + in Gc.compact (); assert_equal true !alive ~msg:"values assigned to roots are not collected"; (* Check that values registered as roots and then overwritten are collected. *) let alive = ref true in - let v = [| 1; 2; 3 |] in - Gc.finalise (fun _ -> alive := false) v; - let r = Root.create v in + let r = + let v = [| 1; 2; 3 |] in + Gc.finalise (fun _ -> alive := false) v; + Root.create v + in Root.set r (); Gc.compact (); assert_equal false !alive