changeset 2759:6c4a5c7e30f8

Merge pull request #35 from william3/ocaml-core new package Ocaml core
author mabrand <mabrand@mabrand.nl>
date Tue, 18 Sep 2012 14:19:24 -0700
parents dcf309ba4980 (current diff) da56c039603e (diff)
children 38c700a403b8
files index.html
diffstat 7 files changed, 922 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/index.html	Tue Sep 18 23:13:03 2012 +0200
+++ b/index.html	Tue Sep 18 14:19:24 2012 -0700
@@ -1644,6 +1644,16 @@
         <td id="nsis-website"><a href="http://nsis.sourceforge.net/">NSIS</a></td>
     </tr>
     <tr>
+        <td id="ocaml-flexdll-package">ocaml-flexdll</td>
+        <td id="ocaml-flexdll-version">0.30</td>
+        <td id="ocaml-flexdll-website"><a href="http://alain.frisch.fr/">flexdll</a></td>
+    </tr>
+    <tr>
+        <td id="ocaml-core-package">ocaml</td>
+        <td id="ocaml-core-version">3.12.1</td>
+        <td id="ocaml-core-website"><a href="http://caml.inria.fr/">ocaml</a></td>
+    </tr>
+    <tr>
         <td id="ogg-package">ogg</td>
         <td id="ogg-version">1.3.0</td>
         <td id="ogg-website"><a href="http://www.xiph.org/ogg/">OGG</a></td>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ocaml-core-1-fixes.patch	Tue Sep 18 14:19:24 2012 -0700
@@ -0,0 +1,613 @@
+This file is part of MXE.
+See index.html for further information.
+
+Contains ad hoc patches for cross building.
+
+From 0a4f59615e611ce517dc02226ca185370ae646a6 Mon Sep 17 00:00:00 2001
+From: MXE
+Date: Wed, 13 Jun 2012 22:27:54 +0200
+Subject: [PATCH] various patches to build an ocaml cross compiler
+
+
+diff --git a/Makefile-mingw.in b/Makefile-mingw.in
+new file mode 100644
+index 0000000..a303487
+--- /dev/null
++++ b/Makefile-mingw.in
+@@ -0,0 +1,82 @@
++PREFIX=@prefix@
++BINDIR=@bindir@
++LIBDIR=@libdir@
++TARGET2=@target2@
++LIBDIR2=@libdir2@
++STUBLIBDIR=$(LIBDIR)/stublibs
++MANDIR=$(PREFIX)/man
++MANEXT=1
++RANLIB=$(TARGET2)ranlib
++RANLIBCMD=$(TARGET2)ranlib
++SHARPBANGSCRIPTS=true
++BNG_ARCH=i386
++BNG_ASM_LEVEL=1
++PTHREAD_LINK=
++X11_INCLUDES=
++X11_LINK=
++DBM_INCLUDES=
++DBM_LINK=
++TK_DEFS=
++TK_LINK=
++BYTECC=$(TARGET2)gcc
++BYTECCCOMPOPTS=-O -mms-bitfields -Wall -Wno-unused
++BYTECCLINKOPTS=-L$(LIBDIR2)
++BYTECCLIBS=
++BYTECCRPATH=
++EXE=
++SUPPORTS_SHARED_LIBRARIES=true
++SHAREDCCCOMPOPTS=
++MKSHAREDLIBRPATH=
++NATDYNLINK=true
++NATDYNLINKOPTS=
++SYSLIB=-l$(1)
++#ml let syslib x = "-l"^x;;
++
++### How to build a static library
++MKLIB=$(TARGET2)ar rcs $(1) $(2)
++#ml let mklib out files opts = Printf.sprintf ("%sar rcs %s %s %s") target2 out opts files;;
++ARCH=i386
++MODEL=default
++SYSTEM=mingw
++NATIVECC=$(TARGET2)gcc
++NATIVECCCOMPOPTS=-O -mms-bitfields -Wall -Wno-unused
++NATIVECCPROFOPTS=-pg
++NATIVECCLINKOPTS=-L$(LIBDIR2)
++NATIVECCRPATH=
++NATIVECCLIBS=
++ASM=$(TARGET2)as
++ASPP=$(TARGET2)gcc -c
++ASPPPROFFLAGS=-DPROFILING
++PROFILING=prof
++DYNLINKOPTS=-ldl
++OTHERLIBRARIES=@otherlibraries@
++DEBUGGER=ocamldebugger
++CC_PROFILE=-pg
++SYSTHREAD_SUPPORT=true
++PARTIALLD=$(TARGET2)ld -r
++PACKLD=$(PARTIALLD) $(NATIVECCLINKOPTS) -o 
++DLLCCCOMPOPTS=
++IFLEXDIR=-I@flexdir@
++O=o
++A=a
++SO=dll
++EXT_OBJ=.o
++EXT_ASM=.s
++EXT_LIB=.a
++EXT_DLL=.dll
++EXTRALIBS=
++CCOMPTYPE=cc
++TOOLCHAIN=cc
++CMXS=cmxs
++FLEXLINK=$(TARGET2)flexlink -chain mingw
++MKEXE=$(FLEXLINK) -exe
++MKDLL=$(FLEXLINK)
++MKMAINDLL=$(FLEXLINK) -maindll
++
++# Build compiler for cross-compilation.
++BUILD_MKEXE=gcc
++BUILD_RANLIB=ranlib
++BUILD_MKDLL=gcc -shared
++BUILD_CC=gcc
++BUILD_CCLIBS=-lm
++BUILD_CFLAGS=
+diff --git a/asmrun/Makefile b/asmrun/Makefile
+index efffa33..5b1a8a5 100644
+--- a/asmrun/Makefile
++++ b/asmrun/Makefile
+@@ -26,7 +26,7 @@ COBJS=startup.o main.o fail.o roots.o globroots.o signals.o signals_asm.o \
+   misc.o freelist.o major_gc.o minor_gc.o memory.o alloc.o compare.o ints.o \
+   floats.o str.o array.o io.o extern.o intern.o hash.o sys.o parsing.o \
+   gc_ctrl.o terminfo.o md5.o obj.o lexing.o printexc.o callback.o weak.o \
+-  compact.o finalise.o custom.o unix.o backtrace.o natdynlink.o debugger.o
++  compact.o finalise.o custom.o unix.o win32.o backtrace.o natdynlink.o debugger.o
+ 
+ ASMOBJS=$(ARCH).o
+ 
+@@ -138,6 +138,8 @@ globroots.c: ../byterun/globroots.c
+ 	ln -s ../byterun/globroots.c globroots.c
+ unix.c: ../byterun/unix.c
+ 	ln -s ../byterun/unix.c unix.c
++win32.c: ../byterun/win32.c
++	ln -s ../byterun/win32.c win32.c
+ dynlink.c: ../byterun/dynlink.c
+ 	ln -s ../byterun/dynlink.c dynlink.c
+ signals.c: ../byterun/signals.c
+@@ -148,7 +150,7 @@ debugger.c: ../byterun/debugger.c
+ LINKEDFILES=misc.c freelist.c major_gc.c minor_gc.c memory.c alloc.c array.c \
+   compare.c ints.c floats.c str.c io.c extern.c intern.c hash.c sys.c \
+   parsing.c gc_ctrl.c terminfo.c md5.c obj.c lexing.c printexc.c callback.c \
+-  weak.c compact.c finalise.c meta.c custom.c main.c globroots.c unix.c \
++  weak.c compact.c finalise.c meta.c custom.c main.c globroots.c unix.c win32.c \
+   dynlink.c signals.c debugger.c
+ 
+ clean::
+diff --git a/asmrun/i386.S b/asmrun/i386.S
+index 95198e0..25edd28 100644
+--- a/asmrun/i386.S
++++ b/asmrun/i386.S
+@@ -64,6 +64,9 @@
+         popl %edx; popl %ecx; popl %eax; popl %ebp
+ #define PROFILE_C \
+         pushl %ebp; movl %esp, %ebp; call Lmcount$stub; popl %ebp
++#elif defined(SYS_mingw)
++#define PROFILE_CAML
++#define PROFILE_C
+ #endif
+ #else
+ #define PROFILE_CAML
+diff --git a/byterun/Makefile.common b/byterun/Makefile.common
+index d554d29..047d817 100755
+--- a/byterun/Makefile.common
++++ b/byterun/Makefile.common
+@@ -24,7 +24,7 @@ COMMONOBJS=\
+   compare.o ints.o floats.o str.o array.o io.o extern.o intern.o \
+   hash.o sys.o meta.o parsing.o gc_ctrl.o terminfo.o md5.o obj.o \
+   lexing.o callback.o debugger.o weak.o compact.o finalise.o custom.o \
+-  dynlink.o
++  dynlink.o win32.o
+ 
+ PRIMS=\
+   alloc.c array.c compare.c extern.c floats.c gc_ctrl.c hash.c \
+diff --git a/byterun/dynlink.c b/byterun/dynlink.c
+index 9f46597..2aaa07b 100644
+--- a/byterun/dynlink.c
++++ b/byterun/dynlink.c
+@@ -80,7 +80,12 @@ static char * parse_ld_conf(void)
+ 
+   stdlib = getenv("OCAMLLIB");
+   if (stdlib == NULL) stdlib = getenv("CAMLLIB");
+-  if (stdlib == NULL) stdlib = OCAML_STDLIB_DIR;
++  if (stdlib == NULL)
++#ifdef OCAML_STDLIB_DIR
++    stdlib = OCAML_STDLIB_DIR;
++#else
++    stdlib = ".";
++#endif
+   ldconfname = caml_stat_alloc(strlen(stdlib) + 2 + sizeof(LD_CONF_NAME));
+   strcpy(ldconfname, stdlib);
+   strcat(ldconfname, "/" LD_CONF_NAME);
+diff --git a/byterun/unix.c b/byterun/unix.c
+index 20fd172..e86f1c8 100644
+--- a/byterun/unix.c
++++ b/byterun/unix.c
+@@ -15,6 +15,8 @@
+ 
+ /* Unix-specific stuff */
+ 
++#ifndef WIN32
++
+ #define _GNU_SOURCE
+            /* Helps finding RTLD_DEFAULT in glibc */
+ 
+@@ -323,3 +325,5 @@ int caml_executable_name(char * name, int name_len)
+ }
+ 
+ #endif
++
++#endif /* !WIN32 */
+diff --git a/byterun/win32.c b/byterun/win32.c
+index 29991c0..e7767a4 100644
+--- a/byterun/win32.c
++++ b/byterun/win32.c
+@@ -13,6 +13,8 @@
+ 
+ /* $Id: win32.c 9547 2010-01-22 12:48:24Z doligez $ */
+ 
++#ifdef WIN32
++
+ /* Win32-specific stuff */
+ 
+ #include <windows.h>
+@@ -35,6 +37,26 @@
+ 
+ #include "flexdll.h"
+ 
++/* XXX including <io.h> gets ../byterun/io.h for some reason.
++ * Including the real io.h using the full path fails because of
++ * some strange bug in the system header file itself.  Give up and
++ * just define _finddata_t explicitly here.
++ */
++#ifndef _FSIZE_T_DEFINED
++typedef unsigned long   _fsize_t;
++#define _FSIZE_T_DEFINED
++
++struct _finddata_t
++{
++  unsigned        attrib;
++  time_t          time_create;
++  time_t          time_access;
++  time_t          time_write;
++  _fsize_t        size;
++  char            name[FILENAME_MAX];
++};
++#endif
++
+ #ifndef S_ISREG
+ #define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
+ #endif
+@@ -93,7 +115,7 @@ CAMLexport char * caml_search_exe_in_path(char * name)
+   pathlen = strlen(name) + 1;
+   if (pathlen < 256) pathlen = 256;
+   while (1) {
+-    fullname = stat_alloc(pathlen);
++    fullname = caml_stat_alloc(pathlen);
+     retcode = SearchPath(NULL,              /* use system search path */
+                          name,
+                          ".exe",            /* add .exe extension if needed */
+@@ -107,7 +129,7 @@ CAMLexport char * caml_search_exe_in_path(char * name)
+       break;
+     }
+     if (retcode < pathlen) break;
+-    stat_free(fullname);
++    caml_stat_free(fullname);
+     pathlen = retcode + 1;
+   }
+   return fullname;
+@@ -543,3 +565,5 @@ intnat caml_win32_random_seed (void)
+   seed ^= GetCurrentProcessId();
+   return seed;
+ }
++
++#endif /* WIN32 */
+diff --git a/hardcode_mingw_include.patch b/hardcode_mingw_include.patch
+new file mode 100644
+index 0000000..571747d
+--- /dev/null
++++ b/hardcode_mingw_include.patch
+@@ -0,0 +1,24 @@
++Index: build-tree/ocaml-3.11.1/utils/clflags.ml
++===================================================================
++--- build-tree.orig/ocaml-3.12.1/utils/clflags.ml	2010-01-07 04:00:11.000000000 +0100
+++++ build-tree/ocaml-3.12.1/utils/clflags.ml	2010-01-07 04:00:24.000000000 +0100
++@@ -20,7 +20,7 @@
++ 
++ let compile_only = ref false            (* -c *)
++ and output_name = ref (None : string option) (* -o *)
++-and include_dirs = ref ([] : string list)(* -I *)
+++and include_dirs = ref (["@libdir@"] : string list)(* -I *)
++ and no_std_include = ref false          (* -nostdlib *)
++ and print_types = ref false             (* -i *)
++ and make_archive = ref false            (* -a *)
++--- build-tree.orig/ocaml-3.12.1/tools/ocamlmklib.mlp	2010-02-22 20:15:57.000000000 -0600
+++++ build-tree/ocaml-3.12.1/tools/ocamlmklib.mlp	2010-02-22 20:16:20.000000000 -0600
++@@ -29,7 +29,7 @@
++ and failsafe = ref false    (* whether to fall back on static build only *)
++ and c_libs = ref []         (* libs to pass to mksharedlib and ocamlc -cclib *)
++ and c_opts = ref []      (* options to pass to mksharedlib and ocamlc -ccopt *)
++-and ld_opts = ref []        (* options to pass only to the linker *)
+++and ld_opts = ref ["-I @libdir@"]        (* options to pass only to the linker *)
++ and ocamlc = ref (compiler_path "ocamlc")
++ and ocamlopt = ref (compiler_path "ocamlopt")
++ and output = ref "a"        (* Output name for Caml part of library *)
+diff --git a/myocamlbuild.ml b/myocamlbuild.ml
+index d50274d..ecdad32 100644
+--- a/myocamlbuild.ml
++++ b/myocamlbuild.ml
+@@ -107,9 +107,11 @@ let if_mixed_dir dir =
+   if mixed then ".."/dir else dir;;
+ 
+ let unix_dir =
+-  match Sys.os_type with
+-  | "Win32" -> if_mixed_dir "otherlibs/win32unix"
+-  | _       -> if_mixed_dir "otherlibs/unix";;
++  if_mixed_dir (
++    let win32path = "otherlibs/win32unix" in
++    if Sys.file_exists (win32path / "unix.cma") then win32path
++    else "otherlibs/unix"
++  );;
+ 
+ let threads_dir    = if_mixed_dir "otherlibs/threads";;
+ let systhreads_dir = if_mixed_dir "otherlibs/systhreads";;
+diff --git a/ocamldoc/Makefile b/ocamldoc/Makefile
+index 8f6e87c..30b4489 100644
+--- a/ocamldoc/Makefile
++++ b/ocamldoc/Makefile
+@@ -62,6 +62,7 @@ INCLUDES_DEP=-I $(OCAMLSRCDIR)/parsing \
+ INCLUDES_NODEP=	-I $(OCAMLSRCDIR)/stdlib \
+ 	-I $(OCAMLSRCDIR)/otherlibs/str \
+ 	-I $(OCAMLSRCDIR)/otherlibs/dynlink \
++	-I $(OCAMLSRCDIR)/otherlibs/win32unix \
+ 	-I $(OCAMLSRCDIR)/otherlibs/unix \
+ 	-I $(OCAMLSRCDIR)/otherlibs/num \
+ 	-I $(OCAMLSRCDIR)/otherlibs/graph
+diff --git a/otherlibs/Makefile.shared b/otherlibs/Makefile.shared
+index b235cc3..97217d5 100644
+--- a/otherlibs/Makefile.shared
++++ b/otherlibs/Makefile.shared
+@@ -42,7 +42,8 @@ CLIBNAME ?= $(LIBNAME)
+ 
+ all: lib$(CLIBNAME).$(A) $(LIBNAME).cma $(CMIFILES)
+ 
+-allopt: lib$(CLIBNAME).$(A) $(LIBNAME).cmxa $(LIBNAME).$(CMXS) $(CMIFILES)
++allopt: lib$(CLIBNAME).$(A) $(LIBNAME).cmxa $(CMIFILES)
++# $(LIBNAME).$(CMXS)
+ 
+ $(LIBNAME).cma: $(CAMLOBJS)
+ 	$(MKLIB) -o $(LIBNAME) -oc $(CLIBNAME) -ocamlc '$(CAMLC)' -linkall $(CAMLOBJS) $(LINKOPTS)
+@@ -50,8 +51,8 @@ $(LIBNAME).cma: $(CAMLOBJS)
+ $(LIBNAME).cmxa: $(CAMLOBJS_NAT)
+ 	$(MKLIB) -o $(LIBNAME) -oc $(CLIBNAME) -ocamlopt '$(CAMLOPT)' -linkall $(CAMLOBJS_NAT) $(LINKOPTS)
+ 
+-$(LIBNAME).cmxs: $(LIBNAME).cmxa lib$(CLIBNAME).$(A)
+-	$(CAMLOPT) -shared -o $(LIBNAME).cmxs -I . $(LIBNAME).cmxa
++#$(LIBNAME).cmxs: $(LIBNAME).cmxa lib$(CLIBNAME).$(A)
++#	$(CAMLOPT) -shared -o $(LIBNAME).cmxs -I . $(LIBNAME).cmxa
+ 
+ lib$(CLIBNAME).$(A): $(COBJS)
+ 	$(MKLIB) -oc $(CLIBNAME) $(COBJS) $(LDOPTS)
+diff --git a/otherlibs/bigarray/Makefile b/otherlibs/bigarray/Makefile
+index 81f5aef..f5f0747 100644
+--- a/otherlibs/bigarray/Makefile
++++ b/otherlibs/bigarray/Makefile
+@@ -14,8 +14,8 @@
+ # $Id: Makefile 8748 2008-01-04 09:52:27Z xleroy $
+ 
+ LIBNAME=bigarray
+-EXTRACFLAGS=-I../unix -DIN_OCAML_BIGARRAY -DCAML_NAME_SPACE
+-EXTRACAMLFLAGS=-I ../unix
++EXTRACFLAGS=-I../win32unix -I../unix -DIN_OCAML_BIGARRAY -DCAML_NAME_SPACE
++EXTRACAMLFLAGS=-I ../win32unix -I ../unix
+ COBJS=bigarray_stubs.$(O) mmap_unix.$(O)
+ CAMLOBJS=bigarray.cmo
+ HEADERS=bigarray.h
+diff --git a/otherlibs/bigarray/Makefile.nt b/otherlibs/bigarray/Makefile.nt
+index 94ef9dd..0b72534 100644
+--- a/otherlibs/bigarray/Makefile.nt
++++ b/otherlibs/bigarray/Makefile.nt
+@@ -19,6 +19,7 @@ EXTRACAMLFLAGS=-I ../win32unix
+ COBJS=bigarray_stubs.$(O) mmap_win32.$(O)
+ CAMLOBJS=bigarray.cmo
+ HEADERS=bigarray.h
++LDOPTS=-L@libdir@
+ 
+ include ../Makefile.nt
+ 
+diff --git a/otherlibs/num/Makefile b/otherlibs/num/Makefile
+index 6feef50..86d331c 100644
+--- a/otherlibs/num/Makefile
++++ b/otherlibs/num/Makefile
+@@ -21,6 +21,7 @@ CAMLOBJS=int_misc.cmo nat.cmo big_int.cmo arith_flags.cmo \
+   ratio.cmo num.cmo arith_status.cmo
+ CMIFILES=big_int.cmi nat.cmi num.cmi ratio.cmi arith_status.cmi
+ COBJS=bng.$(O) nat_stubs.$(O)
++LDOPTS=-L@libdir@
+ 
+ include ../Makefile
+ 
+diff --git a/otherlibs/str/Makefile b/otherlibs/str/Makefile
+index b59fe80..38c6798 100644
+--- a/otherlibs/str/Makefile
++++ b/otherlibs/str/Makefile
+@@ -20,6 +20,7 @@ LIBNAME=str
+ COBJS=strstubs.$(O)
+ CLIBNAME=camlstr
+ CAMLOBJS=str.cmo
++LDOPTS=-L@libdir@
+ 
+ include ../Makefile
+ 
+diff --git a/otherlibs/systhreads/Makefile b/otherlibs/systhreads/Makefile
+index 5ee2775..bcd3186 100644
+--- a/otherlibs/systhreads/Makefile
++++ b/otherlibs/systhreads/Makefile
+@@ -15,13 +15,13 @@
+ 
+ include ../../config/Makefile
+ 
+-CAMLC=../../ocamlcomp.sh -I ../unix
+-CAMLOPT=../../ocamlcompopt.sh -I ../unix
++CAMLC=../../ocamlcomp.sh -I ../win32unix -I ../unix
++CAMLOPT=../../ocamlcompopt.sh -I ../win32unix -I ../unix
+ MKLIB=../../boot/ocamlrun ../../tools/ocamlmklib
+ COMPFLAGS=-warn-error A -g
+ 
+-BYTECODE_C_OBJS=st_stubs_b.o
+-NATIVECODE_C_OBJS=st_stubs_n.o
++BYTECODE_C_OBJS=st_stubs_b.o win32_b.o
++NATIVECODE_C_OBJS=st_stubs_n.o win32_n.o
+ 
+ THREAD_OBJS= thread.cmo mutex.cmo condition.cmo event.cmo threadUnix.cmo
+ 
+@@ -37,6 +37,10 @@ st_stubs_b.o: st_stubs.c st_posix.h
+ 	   -c st_stubs.c
+ 	mv st_stubs.o st_stubs_b.o
+ 
++win32_b.$(O): st_stubs.c st_win32.h
++	$(BYTECC) -I ../../byterun $(BYTECCCOMPOPTS) $(CFLAGS) -c st_stubs.c
++	mv st_stubs.$(O) win32_b.$(O)
++
+ # Dynamic linking with -lpthread is risky on many platforms, so
+ # do not create a shared object for libthreadsnat.
+ libthreadsnat.a: $(NATIVECODE_C_OBJS)
+@@ -46,9 +50,13 @@ st_stubs_n.o: st_stubs.c st_posix.h
+ 	$(NATIVECC) -O -I../../asmrun -I../../byterun $(NATIVECCCOMPOPTS) $(SHAREDCCCOMPOPTS) -DNATIVE_CODE -DTARGET_$(ARCH) -DSYS_$(SYSTEM) -c st_stubs.c
+ 	mv st_stubs.o st_stubs_n.o
+ 
++win32_n.$(O): st_stubs.c st_win32.h
++	$(NATIVECC) -DNATIVE_CODE -O -I../../asmrun -I../../byterun $(NATIVECCCOMPOPTS) -c st_stubs.c
++	mv st_stubs.$(O) win32_n.$(O)
++
+ threads.cma: $(THREAD_OBJS)
+ 	$(MKLIB) -ocamlc '$(CAMLC)' -o threads $(THREAD_OBJS) \
+-	  -cclib -lunix $(PTHREAD_LINK)
++	  -cclib -lunix $(PTHREAD_LINK) -lcamlrun
+ 
+ # See remark above: force static linking of libthreadsnat.a
+ threads.cmxa: $(THREAD_OBJS:.cmo=.cmx)
+diff --git a/otherlibs/systhreads/Makefile.nt b/otherlibs/systhreads/Makefile.nt
+index a7d6aaa..1766b6e 100644
+--- a/otherlibs/systhreads/Makefile.nt
++++ b/otherlibs/systhreads/Makefile.nt
+@@ -21,6 +21,7 @@ CAMLOPT=../../boot/ocamlrun ../../ocamlopt -I ../../stdlib -I ../win32unix
+ COMPFLAGS=-warn-error A -g
+ MKLIB=../../boot/ocamlrun ../../tools/ocamlmklib
+ CFLAGS=-I../../byterun $(EXTRACFLAGS)
++LDOPTS=-L@libdir@
+ 
+ CAMLOBJS=thread.cmo mutex.cmo condition.cmo event.cmo threadUnix.cmo
+ CMIFILES=$(CAMLOBJS:.cmo=.cmi)
+@@ -34,7 +35,7 @@ all: lib$(LIBNAME).$(A) $(LIBNAME).cma $(CMIFILES)
+ allopt: lib$(LIBNAME).$(A) $(LIBNAME).cmxa $(LIBNAME).cmxs $(CMIFILES)
+ 
+ $(LIBNAME).cma: $(CAMLOBJS)
+-	$(MKLIB) -o $(LIBNAME) -ocamlc "..\\..\\boot\\ocamlrun ..\\..\\ocamlc" -linkall $(CAMLOBJS) $(LINKOPTS)
++	$(MKLIB) -o $(LIBNAME) -ocamlc "../../boot/ocamlrun ../../ocamlc" -linkall $(CAMLOBJS) $(LINKOPTS)
+ 
+ lib$(LIBNAME).$(A): $(COBJS)
+ 	$(MKLIB) -o $(LIBNAME) $(COBJS) $(LDOPTS)
+@@ -46,7 +47,7 @@ st_stubs_b.$(O): st_stubs.c st_win32.h
+ 
+ 
+ $(LIBNAME).cmxa: $(CAMLOBJS:.cmo=.cmx)
+-	$(MKLIB) -o $(LIBNAME)nat -ocamlopt "..\\..\\boot\\ocamlrun ..\\..\\ocamlopt" -linkall $(CAMLOBJS:.cmo=.cmx) $(LINKOPTS)
++	$(MKLIB) -o $(LIBNAME)nat -ocamlopt "../../boot/ocamlrun ../../ocamlopt" -linkall $(CAMLOBJS:.cmo=.cmx) $(LINKOPTS)
+ 	mv $(LIBNAME)nat.cmxa $(LIBNAME).cmxa
+ 	mv $(LIBNAME)nat.$(A) $(LIBNAME).$(A)
+ 
+@@ -71,6 +72,7 @@ clean: partialclean
+ install:
+ 	cp dllthreads.dll $(STUBLIBDIR)/dllthreads.dll
+ 	cp libthreads.$(A) $(LIBDIR)/libthreads.$(A)
++	cd $(LIBDIR); $(RANLIB) libthreads.$(A)
+ 	mkdir -p $(LIBDIR)/threads
+ 	cp $(CMIFILES) threads.cma $(LIBDIR)/threads
+ 	rm -f $(LIBDIR)/threads/stdlib.cma
+@@ -78,6 +80,7 @@ install:
+ 
+ installopt:
+ 	cp libthreadsnat.$(A) $(LIBDIR)/libthreadsnat.$(A)
++	cd $(LIBDIR); $(RANLIB) libthreadsnat.$(A)
+ 	cp $(THREAD_OBJS:.cmo=.cmx) threads.cmxa threads.$(A) $(LIBDIR)/threads
+ 	cp threads.cmxs $(LIBDIR)/threads
+ 
+diff --git a/otherlibs/systhreads/st_win32.h b/otherlibs/systhreads/st_win32.h
+index e3e37c8..a55c4b4 100644
+--- a/otherlibs/systhreads/st_win32.h
++++ b/otherlibs/systhreads/st_win32.h
+@@ -16,7 +16,7 @@
+ /* Win32 implementation of the "st" interface */
+ 
+ #include <windows.h>
+-#include <WinError.h>
++#include <winerror.h>
+ #include <stdio.h>
+ #include <signal.h>
+ 
+diff --git a/otherlibs/win32graph/Makefile.nt b/otherlibs/win32graph/Makefile.nt
+index 92f244d..0201484 100644
+--- a/otherlibs/win32graph/Makefile.nt
++++ b/otherlibs/win32graph/Makefile.nt
+@@ -18,7 +18,7 @@ COBJS=open.$(O) draw.$(O) events.$(O) dib.$(O)
+ CAMLOBJS=graphics.cmo
+ WIN32LIBS=$(call SYSLIB,kernel32) $(call SYSLIB,gdi32) $(call SYSLIB,user32)
+ LINKOPTS=-cclib "\"$(WIN32LIBS)\""
+-LDOPTS=-ldopt "$(WIN32LIBS)"
++LDOPTS=-L@libdir@ -ldopt "$(WIN32LIBS)"
+ 
+ include ../Makefile.nt
+ 
+diff --git a/otherlibs/win32unix/Makefile.nt b/otherlibs/win32unix/Makefile.nt
+index 5fa26cf..f048cee 100644
+--- a/otherlibs/win32unix/Makefile.nt
++++ b/otherlibs/win32unix/Makefile.nt
+@@ -40,7 +40,7 @@ LIBNAME=unix
+ COBJS=$(ALL_FILES:.c=.$(O))
+ CAMLOBJS=unix.cmo unixLabels.cmo
+ LINKOPTS=-cclib $(WSOCKLIB)
+-LDOPTS=-ldopt $(WSOCKLIB)
++LDOPTS=-L@libdir@ -ldopt $(WSOCKLIB)
+ EXTRACAMLFLAGS=-nolabels
+ EXTRACFLAGS=-I../unix
+ HEADERS=unixsupport.h socketaddr.h
+diff --git a/otherlibs/win32unix/nonblock.c b/otherlibs/win32unix/nonblock.c
+index ab5f2aa..0383940 100755
+--- a/otherlibs/win32unix/nonblock.c
++++ b/otherlibs/win32unix/nonblock.c
+@@ -26,7 +26,7 @@ CAMLprim value unix_set_nonblock(socket)
+     win32_maperr(WSAGetLastError());
+     uerror("unix_set_nonblock", Nothing);
+   }
+-  Flags_fd_val(socket) = Flags_fd_val(socket) | FLAGS_FD_IS_BLOCKING;
++  Flags_fd_val(socket) = Flags_fd_val(socket) & ~FLAGS_FD_IS_BLOCKING;
+   return Val_unit;
+ }
+ 
+@@ -39,6 +39,6 @@ CAMLprim value unix_clear_nonblock(socket)
+     win32_maperr(WSAGetLastError());
+     uerror("unix_clear_nonblock", Nothing);
+   }
+-  Flags_fd_val(socket) = Flags_fd_val(socket) & ~FLAGS_FD_IS_BLOCKING;
++  Flags_fd_val(socket) = Flags_fd_val(socket) | FLAGS_FD_IS_BLOCKING;
+   return Val_unit;
+ }
+diff --git a/otherlibs/win32unix/select.c b/otherlibs/win32unix/select.c
+index 1c2b4dd..da31000 100644
+--- a/otherlibs/win32unix/select.c
++++ b/otherlibs/win32unix/select.c
+@@ -556,7 +556,7 @@ void socket_poll (HANDLE hStop, void *_data)
+       if (iterQuery->uFlagsFd & FLAGS_FD_IS_BLOCKING)
+       {
+         DEBUG_PRINT("Restore a blocking socket");
+-        iMode = 1;
++        iMode = 0;
+         check_error(lpSelectData,
+           WSAEventSelect((SOCKET)(iterQuery->hFileDescr), aEvents[i], 0) != 0 ||
+           ioctlsocket((SOCKET)(iterQuery->hFileDescr), FIONBIO, &iMode) != 0);
+diff --git a/otherlibs/win32unix/unixsupport.c b/otherlibs/win32unix/unixsupport.c
+index 5f8077d..c83b1d4 100644
+--- a/otherlibs/win32unix/unixsupport.c
++++ b/otherlibs/win32unix/unixsupport.c
+@@ -53,7 +53,7 @@ value win_alloc_handle(HANDLE h)
+   Handle_val(res) = h;
+   Descr_kind_val(res) = KIND_HANDLE;
+   CRT_fd_val(res) = NO_CRT_FD;
+-  Flags_fd_val(res) = 0;
++  Flags_fd_val(res) = FLAGS_FD_IS_BLOCKING;
+   return res;
+ }
+ 
+@@ -63,7 +63,7 @@ value win_alloc_socket(SOCKET s)
+   Socket_val(res) = s;
+   Descr_kind_val(res) = KIND_SOCKET;
+   CRT_fd_val(res) = NO_CRT_FD;
+-  Flags_fd_val(res) = 0;
++  Flags_fd_val(res) = FLAGS_FD_IS_BLOCKING;
+   return res;
+ }
+ 
+diff --git a/utils/config.mlp b/utils/config.mlp
+index 9694868..373fb7a 100644
+--- a/utils/config.mlp
++++ b/utils/config.mlp
+@@ -83,11 +83,7 @@ let ext_asm = "%%EXT_ASM%%"
+ let ext_lib = "%%EXT_LIB%%"
+ let ext_dll = "%%EXT_DLL%%"
+ 
+-let default_executable_name =
+-  match Sys.os_type with
+-    "Unix" -> "a.out"
+-  | "Win32" | "Cygwin" -> "camlprog.exe"
+-  | _ -> "camlprog"
++let default_executable_name = "camlprog.exe"
+ 
+ let systhread_supported = %%SYSTHREAD_SUPPORT%%;;
+ 
+@@ -114,7 +110,7 @@ let print_config oc =
+   p "ext_asm" ext_asm;
+   p "ext_lib" ext_lib;
+   p "ext_dll" ext_dll;
+-  p "os_type" Sys.os_type;
++  p "os_type" "Win32";
+   p "default_executable_name" default_executable_name;
+   p_bool "systhread_supported" systhread_supported;
+   flush oc;
+-- 
+1.7.9.5
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ocaml-core-test.ml	Tue Sep 18 14:19:24 2012 -0700
@@ -0,0 +1,4 @@
+open Printf
+open Format
+let _ =
+  ignore (1+2)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ocaml-core.mk	Tue Sep 18 14:19:24 2012 -0700
@@ -0,0 +1,151 @@
+# This file is part of mingw-cross-env.
+# See doc/index.html for further information.
+
+# zlib
+PKG				:= ocaml-core
+$(PKG)_IGNORE	:=
+$(PKG)_CHECKSUM := 05125da055d39dd6fe8fe5c0155b2e9f55c10dfd
+$(PKG)_SUBDIR	:= ocaml-$($(PKG)_VERSION)
+$(PKG)_FILE		:= ocaml-$($(PKG)_VERSION).tar.gz
+$(PKG)_URL		:= http://caml.inria.fr/pub/distrib/ocaml-3.12/$($(PKG)_FILE)
+$(PKG)_DEPS		:= gcc ocaml-flexdll
+
+define $(PKG)_UPDATE
+	wget -q -O- 'http://caml.inria.fr/pub/distrib/ocaml-3.12' | \
+	$(SED) -n 's,.*ocaml-\([0-9][^>]*\)\.tar.*,\1,ip' | \
+	tail -1
+endef
+
+
+OTHER_LIBS := win32unix str num dynlink bigarray systhreads win32graph
+
+define $(PKG)_BUILD
+	# Build native ocamlrun and ocamlc which contain the
+	# filename-win32-dirsep patch.
+	#
+	# Note that we must build a 32 bit compiler, even on 64 bit build
+	# architectures, because this compiler will try to do strength
+	# reduction optimizations using its internal int type, and that must
+	# match Windows' int type.	(That's what -cc and -host are for).
+	cd '$(1)' && ./configure \
+	  -prefix '$(PREFIX)/$(TARGET)' \
+	  -bindir '$(PREFIX)/$(TARGET)/bin' \
+	  -libdir '$(PREFIX)/$(TARGET)/lib/ocaml' \
+	  -no-tk \
+	  -cc "gcc -m32" \
+	  -no-shared-libs \
+	  -host '$(TARGET)' \
+	  -x11lib /usr/lib \
+	  -verbose
+	$(MAKE) -C '$(1)' world
+	# Now move the working ocamlrun, ocamlc into the boot/ directory,
+	# overwriting the binary versions which ship with the compiler with
+	# ones that contain the filename-win32-dirsep patch.
+	$(MAKE) -C '$(1)' coreboot
+
+	####### patch mingw include
+	# Now patch utils/clflags.ml to hardcode mingw-specific include.
+	$(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" \
+		$(1)/hardcode_mingw_include.patch
+	cd '$(1)' && patch -p2 < hardcode_mingw_include.patch
+
+	####### prepare cross build
+	# Replace the compiler configuration (config/{s.h,m.h,Makefile})
+	# with ones as they would be on a 32 bit Windows system.
+	cp -f '$(1)/config/m-nt.h' '$(1)/config/m.h'
+	cp -f $(1)/config/s-nt.h $(1)/config/s.h
+	# config/Makefile is a custom one which we supply.
+	rm -f $(1)/config/Makefile
+	$(SED) \
+	  -e "s,@target2@,$(TARGET)-,g" \
+	  -e "s,@prefix@,$(PREFIX)/$(TARGET),g" \
+	  -e "s,@bindir@,$(PREFIX)/$(TARGET)/bin,g" \
+	  -e "s,@libdir2@,$(PREFIX)/$(TARGET)/lib,g" \
+	  -e "s,@libdir@,$(PREFIX)/$(TARGET)/lib/ocaml,g" \
+	  -e "s,@otherlibraries@,$(OTHER_LIBS),g" \
+	  -e "s,@flexdir@,$(PREFIX)/$(TARGET)/include,g" \
+	  < $(1)/Makefile-mingw.in > $(1)/config/Makefile
+	$(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/str/Makefile
+	$(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/num/Makefile
+	# We're going to build in otherlibs/win32unix and otherlibs/win32graph
+	# directories, but since they would normally only be built under
+	# Windows, they only have the Makefile.nt files.  Just symlink
+	# Makefile -> Makefile.nt for these cases.
+	$(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/win32unix/Makefile.nt
+	$(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/win32graph/Makefile.nt
+	$(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/bigarray/Makefile.nt
+	$(SED) -i "s,@libdir@,$(PREFIX)/$(TARGET)/lib,g" $(1)/otherlibs/systhreads/Makefile.nt
+	for d in $(1)/otherlibs/win32unix \
+			 $(1)/otherlibs/win32graph \
+			 $(1)/otherlibs/bigarray \
+			 $(1)/otherlibs/systhreads; do \
+				 ln -sf Makefile.nt $$d/Makefile; \
+	done
+	# Now clean the temporary files from the previous build.  This
+	# will also cause asmcomp/arch.ml (etc) to be linked to the 32 bit
+	# i386 versions, essentially causing ocamlopt to use the Win/i386 code
+	# generator.
+	$(MAKE) -C '$(1)' partialclean
+	# We need to remove any .o object for make sure they are
+	# recompiled later..
+	cd $(1) && rm byterun/*.o
+
+	####### build mingw ocaml
+	# Just rebuild some small bits that we need for the following
+	# 'make opt' to work.  Note that 'make all' fails here.
+	$(MAKE) -C '$(1)/byterun' libcamlrun.a
+	$(MAKE) -C '$(1)' ocaml ocamlc
+	$(MAKE) -C '$(1)/stdlib'
+	$(MAKE) -C '$(1)/tools' ocamlmklib
+	# Build ocamlopt
+	$(MAKE) -C '$(1)' opt
+	# Now build otherlibs for ocamlopt
+	cd '$(1)' && \
+	  for i in $(OTHER_LIBS); do \
+		$(MAKE) -C otherlibs/$$i clean; \
+		$(MAKE) -C otherlibs/$$i all; \
+		$(MAKE) -C otherlibs/$$i allopt; \
+	done
+
+	####### installation
+	mkdir -p $(PREFIX)/$(TARGET)/lib/ocaml/threads
+	mkdir -p $(PREFIX)/$(TARGET)/lib/ocaml/stublibs
+	$(MAKE) -C '$(1)/byterun' \
+		BINDIR=$(PREFIX)/$(TARGET)/bin \
+		LIBDIR=$(PREFIX)/$(TARGET)/lib/ocaml \
+		install
+	$(MAKE) -C '$(1)/stdlib' \
+		BINDIR=$(PREFIX)/$(TARGET)/bin \
+		LIBDIR=$(PREFIX)/$(TARGET)/lib/ocaml \
+		install
+	for i in $(OTHER_LIBS); do \
+		$(MAKE) -C $(1)/otherlibs/$$i \
+			BINDIR=$(PREFIX)/$(TARGET)/bin \
+			LIBDIR=$(PREFIX)/$(TARGET)/lib/ocaml \
+			install; \
+	done
+	$(MAKE) -C '$(1)/tools' \
+		BINDIR=$(PREFIX)/$(TARGET)/bin \
+		LIBDIR=$(PREFIX)/$(TARGET)/lib/ocaml \
+		install
+	$(MAKE) -C '$(1)' \
+		BINDIR=$(PREFIX)/$(TARGET)/bin \
+		LIBDIR=$(PREFIX)/$(TARGET)/lib/ocaml \
+		installopt
+	cd $(1) && $(INSTALL) -m 0755 ocamlc $(PREFIX)/$(TARGET)/bin
+	cd $(1) && cp \
+	  toplevel/topstart.cmo \
+	  typing/outcometree.cmi typing/outcometree.mli \
+	  toplevel/toploop.cmi toplevel/toploop.mli \
+	  toplevel/topdirs.cmi toplevel/topdirs.mli \
+	  toplevel/topmain.cmi toplevel/topmain.mli \
+	  $(PREFIX)/$(TARGET)/lib/ocaml
+	# Rename all the binaries to target-binary
+	for f in ocamlc ocamlcp ocamlrun ocamldep ocamlmklib ocamlmktop ocamlopt ocamlprof; do \
+	  cp -f $(PREFIX)/$(TARGET)/bin/$$f $(PREFIX)/bin/$(TARGET)-$$f; \
+	done
+
+	# test
+	cp '$(2).ml' '$(1)/test.ml'
+	cd '$(1)' && '$(TARGET)-ocamlopt' test.ml
+endef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ocaml-flexdll-1-fixes.patch	Tue Sep 18 14:19:24 2012 -0700
@@ -0,0 +1,57 @@
+This file is part of MXE.
+See index.html for further information.
+
+Contains ad hoc patches for cross building.
+
+From 78c4c5447fb711713ac56774f0751485b25df4bd Mon Sep 17 00:00:00 2001
+From: MXE
+Date: Sat, 23 Jun 2012 22:25:50 +0200
+Subject: [PATCH] modifications for cross-compilation
+
+part of this patch is taken from
+http://code.google.com/p/flexdll/issues/detail?id=2
+
+diff --git a/Makefile b/Makefile
+index 81b2214..7a15574 100644
+--- a/Makefile
++++ b/Makefile
+@@ -43,12 +43,12 @@ MSVCC64 = $(MSVCC_ROOT)/amd64/cl.exe /nologo /MD -D_CRT_SECURE_NO_DEPRECATE /GS-
+ CYGCC = gcc 
+ OCAMLOPT = ocamlopt
+ #OCAMLOPT = FLEXLINKFLAGS=-real-manifest ocamlopt
+-#LINKFLAGS = unix.cmxa
++LINKFLAGS = unix.cmxa
+ 
+ #ifeq ($(SYSTEM), win64)
+ #LINKFLAGS=
+ #else
+-LINKFLAGS = -ccopt "-link version_res.o"
++#LINKFLAGS = -ccopt "-link version_res.o"
+ #endif
+ 
+ support:
+@@ -62,7 +62,7 @@ build_mingw64: flexdll_mingw64.o flexdll_initer_mingw64.o
+ 
+ OBJS = version.ml coff.ml cmdline.ml create_dll.ml reloc.ml
+ 
+-flexlink.exe: $(OBJS) version_res.o
++flexlink.exe: $(OBJS)
+ 	@echo Building flexlink.exe with TOOLCHAIN=$(TOOLCHAIN)
+ 	rm -f flexlink.exe
+ 	$(OCAMLOPT) -w -105 -o flexlink.exe $(LINKFLAGS) $(OBJS)
+diff --git a/reloc.ml b/reloc.ml
+index 1ac7e38..1187f39 100644
+--- a/reloc.ml
++++ b/reloc.ml
+@@ -977,7 +977,7 @@ let setup_toolchain () =
+       !dirs @
+       [
+        Filename.dirname (get_output1 (!gcc ^ " -print-libgcc-file-name"));
+-       get_output1 (!gcc ^ " -print-sysroot") ^ "/mingw/lib";
++       (*get_output1 (!gcc ^ " -print-sysroot") ^ "/mingw/lib";*)
+       ];
+     default_libs :=
+       ["-lmingw32"; "-lgcc"; "-lmoldname"; "-lmingwex"; "-lmsvcrt";
+-- 
+1.7.9.5
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ocaml-flexdll-test.c	Tue Sep 18 14:19:24 2012 -0700
@@ -0,0 +1,44 @@
+/*****************************************************************
+   FlexDLL
+   Alain Frisch
+
+   Copyright 2007 Institut National de Recherche en Informatique et
+   en Automatique.
+
+******************************************************************/
+
+/* An example (main program) */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "flexdll.h"
+
+typedef void torun();
+
+void api(char *msg){ printf("API: %s\n", msg); }
+
+int main(int argc, char **argv)
+{
+  void *sym;
+  void *handle;
+  int i;
+  torun *torun;
+
+  printf("INIT\n"); fflush(stdout);
+  flexdll_dump_exports(NULL);
+  printf("OK\n"); fflush(stdout);
+  for (i = 1; i < argc; i++) {
+    printf("** Loading %s\n", argv[i]);
+    handle = flexdll_dlopen(argv[i], FLEXDLL_RTLD_GLOBAL);
+    if (NULL == handle) { printf("error: %s\n", flexdll_dlerror()); exit(2); }
+    printf("** handle = %p\n", handle);
+    flexdll_dump_exports(handle);
+    flexdll_dump_relocations(handle);
+
+    if (NULL == handle) { printf("error: %s\n", flexdll_dlerror()); exit(2); }
+
+    torun = flexdll_dlsym(handle, "torun");
+    if (torun) torun();
+  }
+  exit(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ocaml-flexdll.mk	Tue Sep 18 14:19:24 2012 -0700
@@ -0,0 +1,43 @@
+# This file is part of mingw-cross-env.
+# See doc/index.html for further information.
+
+# zlib
+PKG				:= ocaml-flexdll
+$(PKG)_IGNORE	:=
+$(PKG)_CHECKSUM := 585f066f890c7dca95be7541b4647128335f7df9
+#$(PKG)_CHECKSUM := 76e3d9a8d1182d8ff315793c3ffbbc8e49c92888
+$(PKG)_SUBDIR	:= flexdll
+$(PKG)_FILE		:= flexdll-$($(PKG)_VERSION).tar.gz
+$(PKG)_URL		:= http://alain.frisch.fr/flexdll/$($(PKG)_FILE)
+$(PKG)_DEPS		:= gcc
+
+define $(PKG)_UPDATE
+	wget -q -O- 'http://alain.frisch.fr/flexdll/' | \
+	$(SED) -n 's,.*flexdll-\([0-9][^>]*\)\.tar.gz.*,\1,ip' | \
+	head -1
+endef
+
+define $(PKG)_BUILD
+	$(MAKE) -C '$(1)' -j '$(JOBS)' \
+		CHAINS=mingw \
+		MINGW_PREFIX=$(TARGET) \
+		all
+	mkdir -p '$(PREFIX)/$(TARGET)/lib/ocaml/flexdll'
+	cd '$(1)' && mv flexlink.exe flexlink
+	cd '$(1)' && strip --remove-section=.comment --remove-section=.note flexlink
+	cd '$(1)' && $(INSTALL) -m 0755 flexdll.h '$(PREFIX)/$(TARGET)/include'
+	cd '$(1)' && $(INSTALL) -m 0755 flexlink flexdll_mingw.o \
+		flexdll_initer_mingw.o \
+		'$(PREFIX)/$(TARGET)/lib/ocaml/flexdll'
+    # create flexdll scripts
+	cd '$(PREFIX)/bin' && ln -sf '$(PREFIX)/$(TARGET)/lib/ocaml/flexdll/flexlink'
+    (echo '#!/bin/sh'; \
+     echo 'exec flexlink -I $(PREFIX)/$(TARGET)/lib -chain mingw -nocygpath "$$@"') \
+             > '$(PREFIX)/bin/$(TARGET)-flexlink'
+    chmod 0755 '$(PREFIX)/bin/$(TARGET)-flexlink'
+
+	echo "testing flexlink..."
+	$(MAKE) -C '$(1)/test' -j '$(JOBS)' dump.exe plug1.dll plug2.dll CC=$(TARGET)-gcc O=o FLEXLINK=$(TARGET)-flexlink
+	#works if wine is installed :
+	#cd '$(1)/test' && ./dump.exe plug1.dll plug2.dll
+endef