Beginnings of an OCaml cross-compiler.
[fedora-mingw.git] / ocaml / mingw32-ocaml-3.11.0+beta1-combined-Makefile.patch
diff --git a/ocaml/mingw32-ocaml-3.11.0+beta1-combined-Makefile.patch b/ocaml/mingw32-ocaml-3.11.0+beta1-combined-Makefile.patch
new file mode 100644 (file)
index 0000000..2a2827a
--- /dev/null
@@ -0,0 +1,160 @@
+OCaml sources uses separate Makefile and Makefile.nt in each directory,
+which is a pain when cross-compiling.  Instead of that, it's better to
+combine all objects into one Makefile, and make sure the source is
+defended by #ifdef/#ifndef WIN32 ... #endif, around the whole files as
+necessary.
+
+diff -urN ocaml-3.11.0+beta1.orig/asmrun/Makefile ocaml-3.11.0+beta1.mingw/asmrun/Makefile
+--- ocaml-3.11.0+beta1.orig/asmrun/Makefile    2007-11-15 13:21:15.000000000 +0000
++++ ocaml-3.11.0+beta1.mingw/asmrun/Makefile   2008-11-15 14:43:50.000000000 +0000
+@@ -26,7 +26,7 @@
+   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
++  compact.o finalise.o custom.o unix.o win32.o backtrace.o natdynlink.o
+ ASMOBJS=$(ARCH).o
+@@ -138,6 +138,8 @@
+       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
+@@ -146,7 +148,7 @@
+ 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
+ clean::
+diff --exclude _build -urN ocaml-3.11.0+beta1.orig/byterun/Makefile.common ocaml-3.11.0+beta1.mingw/byterun/Makefile.common
+--- ocaml-3.11.0+beta1.orig/byterun/Makefile.common    2008-09-10 06:51:11.000000000 +0100
++++ ocaml-3.11.0+beta1.mingw/byterun/Makefile.common   2008-11-15 15:47:05.000000000 +0000
+@@ -24,7 +24,7 @@
+   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 --exclude _build -urN ocaml-3.11.0+beta1.orig/byterun/unix.c ocaml-3.11.0+beta1.mingw/byterun/unix.c
+--- ocaml-3.11.0+beta1.orig/byterun/unix.c     2008-04-22 13:40:14.000000000 +0100
++++ ocaml-3.11.0+beta1.mingw/byterun/unix.c    2008-11-15 14:44:12.000000000 +0000
+@@ -15,6 +15,8 @@
+ /* Unix-specific stuff */
++#ifndef WIN32
++
+ #define _GNU_SOURCE
+            /* Helps finding RTLD_DEFAULT in glibc */
+@@ -320,3 +322,5 @@
+ }
+ #endif
++
++#endif /* !WIN32 */
+diff --exclude _build -urN ocaml-3.11.0+beta1.orig/byterun/win32.c ocaml-3.11.0+beta1.mingw/byterun/win32.c
+--- ocaml-3.11.0+beta1.orig/byterun/win32.c    2008-04-22 13:24:10.000000000 +0100
++++ ocaml-3.11.0+beta1.mingw/byterun/win32.c   2008-11-15 15:50:32.000000000 +0000
+@@ -13,6 +13,8 @@
+ /* $Id: win32.c,v 1.36 2008/04/22 12:24:10 frisch Exp $ */
++#ifdef WIN32
++
+ /* Win32-specific stuff */
+ #include <windows.h>
+@@ -543,3 +564,5 @@
+   seed ^= GetCurrentProcessId();
+   return seed;
+ }
++
++#endif /* WIN32 */
+diff --exclude _build -urN ocaml-3.11.0+beta1.orig/otherlibs/systhreads/Makefile ocaml-3.11.0+beta1.mingw/otherlibs/systhreads/Makefile
+--- ocaml-3.11.0+beta1.orig/otherlibs/systhreads/Makefile      2008-07-15 16:31:32.000000000 +0100
++++ ocaml-3.11.0+beta1.mingw/otherlibs/systhreads/Makefile     2008-11-15 15:51:58.000000000 +0000
+@@ -20,8 +20,8 @@
+ MKLIB=../../boot/ocamlrun ../../tools/ocamlmklib
+ COMPFLAGS=-warn-error A -g
+-BYTECODE_C_OBJS=posix_b.o
+-NATIVECODE_C_OBJS=posix_n.o
++BYTECODE_C_OBJS=posix_b.o win32_b.o
++NATIVECODE_C_OBJS=posix_n.o win32_n.o
+ THREAD_OBJS= thread.cmo mutex.cmo condition.cmo event.cmo threadUnix.cmo
+@@ -39,6 +39,10 @@
+          -c posix.c
+       mv posix.o posix_b.o
++win32_b.$(O): win32.c
++      $(BYTECC) -I ../../byterun $(BYTECCCOMPOPTS) $(CFLAGS) -c win32.c
++      mv win32.$(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)
+@@ -48,9 +52,13 @@
+       $(NATIVECC) -O -I../../asmrun -I../../byterun $(NATIVECCCOMPOPTS) $(SHAREDCCCOMPOPTS) -DNATIVE_CODE -DTARGET_$(ARCH) -DSYS_$(SYSTEM) -c posix.c
+       mv posix.o posix_n.o
++win32_n.$(O): win32.c
++      $(NATIVECC) -DNATIVE_CODE -O -I../../asmrun -I../../byterun $(NATIVECCCOMPOPTS) -c win32.c
++      mv win32.$(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 --exclude _build -urN ocaml-3.11.0+beta1.orig/otherlibs/systhreads/posix.c ocaml-3.11.0+beta1.mingw/otherlibs/systhreads/posix.c
+--- ocaml-3.11.0+beta1.orig/otherlibs/systhreads/posix.c       2008-09-27 11:46:55.000000000 +0100
++++ ocaml-3.11.0+beta1.mingw/otherlibs/systhreads/posix.c      2008-11-15 15:35:28.000000000 +0000
+@@ -13,6 +13,8 @@
+ /* $Id: posix.c,v 1.58 2008/09/27 10:46:55 xleroy Exp $ */
++#ifndef WIN32
++
+ /* Thread interface for POSIX 1003.1c threads */
+ #include <errno.h>
+@@ -924,3 +926,4 @@
+   raise_sys_error(str);
+ }
++#endif /* !WIN32 */
+diff --exclude _build -urN ocaml-3.11.0+beta1.orig/otherlibs/systhreads/win32.c ocaml-3.11.0+beta1.mingw/otherlibs/systhreads/win32.c
+--- ocaml-3.11.0+beta1.orig/otherlibs/systhreads/win32.c       2007-10-31 09:12:29.000000000 +0000
++++ ocaml-3.11.0+beta1.mingw/otherlibs/systhreads/win32.c      2008-11-15 15:35:47.000000000 +0000
+@@ -13,6 +13,8 @@
+ /* $Id: win32.c,v 1.45 2007/10/31 09:12:29 xleroy Exp $ */
++#ifdef WIN32
++
+ /* Thread interface for Win32 threads */
+ #include <windows.h>
+@@ -662,3 +664,6 @@
+   sprintf(errmsg, "%s: error code %lx", msg, GetLastError());
+   raise_sys_error(copy_string(errmsg));
+ }
++
++#endif /* WIN32 */
++