modularize the IntelMac hack, should now work on all Macs with ghc6.5
authoradam <adam@megacz.com>
Mon, 4 Sep 2006 01:06:51 +0000 (21:06 -0400)
committeradam <adam@megacz.com>
Mon, 4 Sep 2006 01:06:51 +0000 (21:06 -0400)
darcs-hash:20060904010651-5007d-be984166d89cf7d8b8414dd43cc448083c3b0140.gz

Makefile
misc/broken-cygwin-detection-patch [moved from misc/jvm-bridge.patch with 100% similarity]
misc/ghc-6.5-patch [moved from misc/jvm-bridge.intelmac2.patch with 79% similarity]
misc/intel-mac-patch [new file with mode: 0644]
misc/jvm-bridge.intelmac1.patch [deleted file]
misc/jvm-bridge.intelmac2.patch+ [deleted file]
misc/jvm-bridge.intelmac3 [deleted file]

index 205b410..10b833b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -139,23 +139,35 @@ upload:
 ##   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:
@@ -165,8 +177,9 @@ bin             = $(prefix)/bin/
                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)
 
@@ -185,19 +198,19 @@ bin             = $(prefix)/bin/
 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"
 
@@ -206,6 +219,6 @@ bin/HaskellDemo: src/HaskellDemo.hs \
                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
similarity index 79%
rename from misc/jvm-bridge.intelmac2.patch
rename to misc/ghc-6.5-patch
index 86f5fa9..c1b7007 100644 (file)
  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
@@ -57,3 +48,4 @@ diff -u ./TypedLayer.hs ../../haskell-jvm-bridge-0.3.RC1/Haskell/TypedLayer.hs
  
        runJavaClass :: (IsJVMMonad m) => ClassName -> [JString] -> m ();
        runJavaClass className args = do
+
diff --git a/misc/intel-mac-patch b/misc/intel-mac-patch
new file mode 100644 (file)
index 0000000..8288588
--- /dev/null
@@ -0,0 +1,11 @@
+--- 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 = \
diff --git a/misc/jvm-bridge.intelmac1.patch b/misc/jvm-bridge.intelmac1.patch
deleted file mode 100644 (file)
index 43e29db..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- 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 = \
diff --git a/misc/jvm-bridge.intelmac2.patch+ b/misc/jvm-bridge.intelmac2.patch+
deleted file mode 100644 (file)
index 86f5fa9..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
---- 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
diff --git a/misc/jvm-bridge.intelmac3 b/misc/jvm-bridge.intelmac3
deleted file mode 100644 (file)
index 52e04ba..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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"''),`^,',`')],