## make runHaskellDemo JAVA_HOME=<java-home>
##
+ghc_version = $(shell ghc --version | sed 's_.*version \([0-9]*\.[0-9]*\).*_\1_')
+
+ifeq ($(ghc_version),6.5)
+patchghc = patch -p0 < $(shell pwd)/misc/ghc-6.5-patch &&
+else
+patchghc =
+endif
+
ifeq ($(shell uname),Darwin)
with_jvmdir = --with-jvmdir=/System/Library/Frameworks/JavaVM.framework/
jvmlink = -framework JavaVM -optl -fexceptions
+patchmac = patch -p0 < $(shell pwd)/misc/intel-mac-patch &&
+linkopts =
else
with_jvmdir = --with-jvmdir=$(JAVA_HOME)
jvmlink = -ljava -ljvm -lverify
+patchmac =
+linkopts = -optl "-Wl,-rpath,$(JAVA_HOME)/jre/lib/i386/" -optl "-Wl,-rpath,$(JAVA_HOME)/jre/lib/i386/client/"
endif
prefix = $(shell pwd)/prefix
jvm-bridge-site = umn.dl.sourceforge.net
jvm-bridge-url = http://$(jvm-bridge-site)/sourceforge/jvm-bridge/haskell-jvm-bridge-0.3.tar.gz
link = -L$(prefix)/lib/ \
- -L$(JAVA_HOME)/jre/lib/i386/ \
- -L$(JAVA_HOME)/jre/lib/i386/client/ \
- -lstdc++ -lJVMBridge -lJVMInvocation -lHaskellJVMBridge $(jvmlink)
-packages = -package haskell98 -package base -package rts -package rts
-ghc = ghc -fglasgow-exts $(packages) $(link) -i$(prefix)/imports/
+ -L$(JAVA_HOME)/jre/lib/i386/ \
+ -L$(JAVA_HOME)/jre/lib/i386/client/ \
+ -lstdc++ -lHaskellJVMBridge -lJVMBridge -lJVMInvocation $(jvmlink)
+packages = -package haskell98 -package base -package rts
+ghc = ghc -fglasgow-exts $(packages) -i$(prefix)/imports/
bin = $(prefix)/bin/
.jvm-bridge:
curl $(jvm-bridge-url) | tar -xvzf -
cd $(prefix)/src/haskell-jvm-bridge-*; \
- patch -p0 < $(shell pwd)/misc/jvm-bridge.patch && \
- patch -p0 < $(shell pwd)/misc/jvm-bridge.intelmac2.patch && \
+ patch -p0 < $(shell pwd)/misc/broken-cygwin-detection-patch && \
+ $(patchmac) \
+ $(patchghc) \
(cd Native; autoreconf; true) && \
(cd Haskell; autoreconf; true)
runHaskellDemo: .jvm-bridge
mkdir -p bin
make bin/HaskellDemo
- LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:/usr/lib/:$(JAVA_HOME)/jre/lib/i386/:$(JAVA_HOME)/jre/lib/i386/client bin/HaskellDemo
+ bin/HaskellDemo
bin/Header_%.o: edu.berkeley.sbp.jar .jvm-bridge
cd bin; $(bin)/MakeHeaderModule -module Header_$* -jar ../edu.berkeley.sbp.jar
- cd bin; $(ghc) -c Header_$*.hs
+ cd bin; $(ghc) -c Header_$*.hs $(link)
bin/Class_%.o: bin/Header_%.o
cd bin; $(bin)/MakeClassModule -import Header_Java -import Header_$* -cp ../edu.berkeley.sbp.jar `echo $* | sed s/_/./g`
- cd bin; $(ghc) -c Class_$*.hs
+ cd bin; $(ghc) -c Class_$*.hs $(link)
bin/JVM_%.o: bin/Class_%.o
cd bin; echo -e $($*_list) | $(bin)/MakeJVMModule JVM_$*
- cd bin; $(ghc) -c JVM_$*.hs
+ cd bin; $(ghc) -c JVM_$*.hs $(link)
edu_berkeley_sbp_misc_HaskellHelper_list = "edu.berkeley.sbp.misc.HaskellHelper\njava.lang.String\nedu.berkeley.sbp.Tree\njava.lang.Object"
bin/Class_java_lang_String.o \
bin/Class_edu_berkeley_sbp_Tree.o \
bin/JVM_edu_berkeley_sbp_misc_HaskellHelper.o
- cd bin; $(ghc) -c ../src/HaskellDemo.hs -o HaskellDemo.o
- cd bin; for A in *.hs; do $(ghc) -c $$A; done
- cd bin; $(ghc) -o HaskellDemo *.o
+ cd bin; $(ghc) -c ../src/HaskellDemo.hs $(link) -o HaskellDemo.o
+ cd bin; for A in *.hs; do $(ghc) -c $$A $(link); done
+ cd bin; $(ghc) $(linkopts) $(link) -o HaskellDemo *.o
HCIMPORTDIRS = -i.
HCCOPTS = -I$(includedir_FIX) $${JVM_INCLUDES}
HCHOPTS = -fglasgow-exts -fallow-undecidable-instances -package-name $(GHCPACKAGENAME)
-@@ -15,7 +14,7 @@
-
- CFLAGS = -I$(includedir_FIX) -I$(HC_INCDIR)
-
-+BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation -framework JavaVM -optl -fexceptions -lstdc++ -optl '-fexceptions'
--BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation `echo "$${JVM_LDFLAGS}" | sed -e 's/ */ -optl/g;s/^/-optl/'` -lstdc++
- BOOTLDFLAGS += `(test -f $(libdir_FIX)/libjvm_imp.a && echo " -L$(libdir_FIX) -ljvm_imp ") || echo ""`
-
- BOOT_SRCS = \
diff -u ./MonadException.hs ../../haskell-jvm-bridge-0.3.RC1/Haskell/MonadException.hs
--- Haskell/MonadException.hs 2006-09-02 23:42:19.000000000 -0700
+++ Haskell/MonadException.hs 2002-01-28 18:21:35.000000000 -0800
runJavaClass :: (IsJVMMonad m) => ClassName -> [JString] -> m ();
runJavaClass className args = do
+
--- /dev/null
+--- Haskell/Makefile.am 2006-09-02 23:50:38.000000000 -0700
++++ Haskell/Makefile.am 2003-11-03 12:49:54.000000000 -0800
+@@ -15,7 +14,7 @@
+
+ CFLAGS = -I$(includedir_FIX) -I$(HC_INCDIR)
+
++BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation -framework JavaVM -optl -fexceptions -lstdc++ -optl '-fexceptions'
+-BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation `echo "$${JVM_LDFLAGS}" | sed -e 's/ */ -optl/g;s/^/-optl/'` -lstdc++
+ BOOTLDFLAGS += `(test -f $(libdir_FIX)/libjvm_imp.a && echo " -L$(libdir_FIX) -ljvm_imp ") || echo ""`
+
+ BOOT_SRCS = \
+++ /dev/null
---- Haskell/Makefile.am 2003-11-03 12:49:54.000000000 -0800
-+++ Haskell/Makefile.am 2006-09-02 23:50:38.000000000 -0700
-@@ -3,7 +3,8 @@
-
- JVMFILE = $(datadir)/current.jvm
-
--HCPACKAGES = -package lang -package concurrent
-+#HCPACKAGES = -package lang -package concurrent
-+HCPACKAGES = -package rts
- HCIMPORTDIRS = -i.
- HCCOPTS = -I$(includedir_FIX) $${JVM_INCLUDES}
- HCHOPTS = -fglasgow-exts -fallow-undecidable-instances -package-name $(GHCPACKAGENAME)
-@@ -14,7 +15,7 @@
-
- CFLAGS = -I$(includedir_FIX) -I$(HC_INCDIR)
-
--BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation `echo "$${JVM_LDFLAGS}" | sed -e 's/ */ -optl/g;s/^/-optl/'` -lstdc++
-+BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation `echo "$${JVM_LDFLAGS}" | sed -e 's/ */ -optl/g;s/^/-optl/'` -lstdc++ -optl '-fexceptions'
- BOOTLDFLAGS += `(test -f $(libdir_FIX)/libjvm_imp.a && echo " -L$(libdir_FIX) -ljvm_imp ") || echo ""`
-
- BOOT_SRCS = \
+++ /dev/null
---- Haskell/Makefile.am 2006-09-02 23:50:38.000000000 -0700
-+++ Haskell/Makefile.am 2003-11-03 12:49:54.000000000 -0800
-@@ -3,7 +3,8 @@
-
- JVMFILE = $(datadir)/current.jvm
-
-+#HCPACKAGES = -package lang -package concurrent
-+HCPACKAGES = -package rts
--HCPACKAGES = -package lang -package concurrent
- HCIMPORTDIRS = -i.
- HCCOPTS = -I$(includedir_FIX) $${JVM_INCLUDES}
- HCHOPTS = -fglasgow-exts -fallow-undecidable-instances -package-name $(GHCPACKAGENAME)
-@@ -15,7 +14,7 @@
-
- CFLAGS = -I$(includedir_FIX) -I$(HC_INCDIR)
-
-+BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation -framework JavaVM -optl -fexceptions -lstdc++ -optl '-fexceptions'
--BOOTLDFLAGS = -L$(libdir_FIX)/ -lJVMBridge -lJVMInvocation `echo "$${JVM_LDFLAGS}" | sed -e 's/ */ -optl/g;s/^/-optl/'` -lstdc++
- BOOTLDFLAGS += `(test -f $(libdir_FIX)/libjvm_imp.a && echo " -L$(libdir_FIX) -ljvm_imp ") || echo ""`
-
- BOOT_SRCS = \
-diff -u ./MonadException.hs ../../haskell-jvm-bridge-0.3.RC1/Haskell/MonadException.hs
---- Haskell/MonadException.hs 2006-09-02 23:42:19.000000000 -0700
-+++ Haskell/MonadException.hs 2002-01-28 18:21:35.000000000 -0800
-@@ -20,7 +20,7 @@
-
- module MonadException where
- {
-+ import Control.Exception as Exception;
-- import Exception;
-
- -- much like MonadError, but without the fundep
- class (Monad m) => MonadException ex m where
-diff -u ./TypedCallback.hs ../../haskell-jvm-bridge-0.3.RC1/Haskell/TypedCallback.hs
---- Haskell/TypedCallback.hs 2006-09-02 23:43:13.000000000 -0700
-+++ Haskell/TypedCallback.hs 2002-08-05 17:27:04.000000000 -0700
-@@ -33,8 +33,8 @@
- import VMLayer;
- import JavaLayer;
- import BasicLayer;
-+ import Control.Concurrent as Concurrent;
-+ import Control.Exception as Exception;
-- import Concurrent;
-- import Exception;
-
- {--
- data CallbackClass t = MkCallbackClass JClass;
-diff -u ./TypedLayer.hs ../../haskell-jvm-bridge-0.3.RC1/Haskell/TypedLayer.hs
---- Haskell/TypedLayer.hs 2006-09-02 23:44:06.000000000 -0700
-+++ Haskell/TypedLayer.hs 2002-01-28 18:21:35.000000000 -0800
-@@ -60,7 +60,7 @@
- import VMLayer;
- import JavaLayer;
- import BasicLayer;
-+ import Control.Monad.Error;
-- import MonadError;
-
- runJavaClass :: (IsJVMMonad m) => ClassName -> [JString] -> m ();
- runJavaClass className args = do
+++ /dev/null
---- Haskell/javavm.ghc-pkg.m4 2003-07-22 05:52:53.000000000 -0700
-+++ Haskell/javavm.ghc-pkg.m4 2006-09-03 00:40:39.000000000 -0700
-@@ -31,7 +31,7 @@
- extra_libraries = ["stdc++","JVMBridge","JVMInvocation","HaskellJVMBridge"`'patsubst(patsubst(patsubst(JVM_LDFLAGS,`-framework[ ]+[^ ]+',`'),`-L[^ ]+',`'),`[ ]*-l\([^ ]+\)[ ]*',`,"\1"')],
- include_dirs = [],
- c_includes = [],
-- package_deps = ["lang","concurrent","haskell98"],
-+ package_deps = ["rts","haskell98"],
- extra_ghc_opts = ["-fglasgow-exts","-fallow-undecidable-instances"],
- extra_cc_opts = [],
- extra_frameworks = [patsubst(patsubst(patsubst(patsubst(JVM_LDFLAGS,`-L[^ ]+[ ]*',`'),`-l[^ ]+[ ]*',`'),`-framework[ ]+\([^ ]+\)',``,"\1"''),`^,',`')],