on master help sign in
Added compile flag support to deactivate creation of the java backend
commit1b46872756d9e303dade6feb189242ac79aab2b8 authorJan Bessai <Jan.Bessai@tu-dortmund.de> dateWed 13 Mar 2013, 02:26 (14 years ago) parent43056d6
31 files changed+165−33
Makefile+6−6 Setup.hs+46−6 config.mk+3 idris.cabal+8 java/idris.jar java/pom_template.xml+39 java/org/idris/rts/Closure.java → java/src/main/java/org/idris/rts/Closure.java java/org/idris/rts/ForeignPrimitives.java → java/src/main/java/org/idris/rts/ForeignPrimitives.java java/org/idris/rts/IdrisObject.java → java/src/main/java/org/idris/rts/IdrisObject.java java/org/idris/rts/TailCallClosure.java → java/src/main/java/org/idris/rts/TailCallClosure.java test/mkjavatest.pl+3−1 test/reg002/run_java+3−1 test/reg004/run_java+3−1 test/reg005/run_java+3−1 test/test001/run_java+3−1 test/test003/run_java+3−1 test/test004/run_java+3−1 test/test005/run_java+3−1 test/test006/run_java+3−1 test/test007/run_java+3−1 test/test008/run_java+3−1 test/test009/run_java+3−1 test/test011/run_java+3−1 test/test013/run_java+3−1 test/test014/run_java+3−1 test/test015/run_java+3−1 test/test016/run_java+3−1 test/test018/run_java+3−1 test/test019/run_java+3−1 test/test020/run_java+3−1 test/test021/run_java+3−1
Makefile+6−6
@@ -1,17 +1,17 @@
11include config.mk
22
33install: .PHONY
4− $(CABAL) install
4+ $(CABAL) install $(CABALFLAGS)
55
66pinstall: .PHONY
7− $(CABAL) configure --enable-executable-profiling
8− $(CABAL) install --enable-executable-profiling
7+ $(CABAL) configure --enable-executable-profiling $(CABALFLAGS)
8+ $(CABAL) install --enable-executable-profiling $(CABALFLAGS)
99
1010build: .PHONY
11− $(CABAL) build
11+ $(CABAL) build $(CABALFLAGS)
1212
1313configure: .PHONY
14− $(CABAL) configure
14+ $(CABAL) configure $(CABALFLAGS)
1515
1616test : .PHONY
1717 make -C test
@@ -19,7 +19,7 @@ test : .PHONY
1919relib: .PHONY
2020 make -C lib IDRIS=../dist/build/idris/idris clean
2121 make -C effects IDRIS=../dist/build/idris/idris clean
22− $(CABAL) install
22+ $(CABAL) install $(CABALFLAGS)
2323
2424linecount : .PHONY
2525 wc -l src/Idris/*.hs src/Core/*.hs src/IRTS/*.hs src/Pkg/*.hs
Setup.hs+46−6
@@ -1,24 +1,31 @@
11{-# LANGUAGE CPP #-}
2+import Control.Monad
3+import Data.IORef
4+
25import Distribution.Simple
36import Distribution.Simple.InstallDirs as I
47import Distribution.Simple.LocalBuildInfo as L
58import qualified Distribution.Simple.Setup as S
69import qualified Distribution.Simple.Program as P
710import Distribution.PackageDescription
11+import Distribution.Text
812
913import System.Exit
1014import System.FilePath ((</>), splitDirectories)
15+import System.Directory
1116import qualified System.FilePath.Posix as Px
1217import System.Process
1318
19+
1420-- After Idris is built, we need to check and install the prelude and other libs
1521
1622make verbosity = P.runProgramInvocation verbosity . P.simpleProgramInvocation "make"
23+mvn verbosity = P.runProgramInvocation verbosity . P.simpleProgramInvocation "mvn"
1724
1825#ifdef mingw32_HOST_OS
1926-- make on mingw32 exepects unix style separators
2027(<//>) = (Px.</>)
21−idrisCmd local = Px.joinPath $ splitDirectories $
28+idrisCmd local = Px.joinPath $ splitDirectories $
2229 ".." <//> buildDir local <//> "idris" <//> "idris"
2330#else
2431idrisCmd local = ".." </> buildDir local </> "idris" </> "idris"
@@ -28,6 +35,12 @@ cleanStdLib verbosity
2835 = do make verbosity [ "-C", "lib", "clean", "IDRIS=idris" ]
2936 make verbosity [ "-C", "effects", "clean", "IDRIS=idris" ]
3037
38+cleanJavaLib verbosity
39+ = do dirty <- doesDirectoryExist ("java" </> "target")
40+ when dirty $ mvn verbosity [ "-f", "java/pom.xml", "clean" ]
41+ pomExists <- doesFileExist ("java" </> "pom.xml")
42+ when pomExists $ removeFile ("java" </> "pom.xml")
43+
3144installStdLib pkg local verbosity copy
3245 = do let dirs = L.absoluteInstallDirs pkg local copy
3346 let idir = datadir dirs
@@ -51,6 +64,8 @@ installStdLib pkg local verbosity copy
5164 , "IDRIS=" ++ icmd
5265 ]
5366
67+installJavaLib verbosity = mvn verbosity [ "-f", "java/pom.xml", "install" ]
68+
5469-- This is a hack. I don't know how to tell cabal that a data file needs
5570-- installing but shouldn't be in the distribution. And it won't make the
5671-- distribution if it's not there, so instead I just delete
@@ -79,19 +94,44 @@ checkStdLib local verbosity
7994 , "IDRIS=" ++ icmd
8095 ]
8196
97+checkJavaLib verbosity = mvn verbosity [ "-f", "java/pom.xml", "package" ]
98+
99+noJavaFlag flags =
100+ case lookup (FlagName "nojava") (S.configConfigurationsFlags flags) of
101+ Just True -> True
102+ Just False -> False
103+ Nothing -> False
104+
105+preparePom version
106+ = do pomTemplate <- readFile ("java" </> "pom_template.xml")
107+ writeFile ("java" </> "pom.xml") (unlines . map insertVersion $ lines pomTemplate)
108+ where
109+ insertVersion " <version></version>" = " <version>" ++ display version ++ "</version>"
110+ insertVersion other = other
111+
82112-- Install libraries during both copy and install
83113-- See http://hackage.haskell.org/trac/hackage/ticket/718
84−main = defaultMainWithHooks $ simpleUserHooks
114+main = do
115+ defaultMainWithHooks $ simpleUserHooks
85116 { postCopy = \ _ flags pkg lbi -> do
86− installStdLib pkg lbi (S.fromFlag $ S.copyVerbosity flags)
117+ let verb = S.fromFlag $ S.copyVerbosity flags
118+ installStdLib pkg lbi verb
87119 (S.fromFlag $ S.copyDest flags)
88120 , postInst = \ _ flags pkg lbi -> do
89− installStdLib pkg lbi (S.fromFlag $ S.installVerbosity flags)
121+ let verb = (S.fromFlag $ S.installVerbosity flags)
122+ installStdLib pkg lbi verb
90123 NoCopyDest
124+ unless (noJavaFlag $ configFlags lbi) (installJavaLib verb)
91125 , postConf = \ _ flags _ lbi -> do
92126 removeLibIdris lbi (S.fromFlag $ S.configVerbosity flags)
127+ unless (noJavaFlag $ configFlags lbi)
128+ (preparePom . pkgVersion . package $ localPkgDescr lbi)
93129 , postClean = \ _ flags _ _ -> do
94− cleanStdLib (S.fromFlag $ S.cleanVerbosity flags)
130+ let verb = S.fromFlag $ S.cleanVerbosity flags
131+ cleanStdLib verb
132+ cleanJavaLib verb
95133 , postBuild = \ _ flags _ lbi -> do
96− checkStdLib lbi (S.fromFlag $ S.buildVerbosity flags)
134+ let verb = S.fromFlag $ S.buildVerbosity flags
135+ checkStdLib lbi verb
136+ unless (noJavaFlag $ configFlags lbi) (checkJavaLib verb)
97137 }
config.mk+3
@@ -1,3 +1,6 @@
11GMP_INCLUDE_DIR :=
22CC :=gcc
33CABAL :=cabal
4+CABALFLAGS :=
5+## Disable Java RTS:
6+#CABALFLAGS :=-f NoJava
idris.cabal+8
@@ -42,8 +42,11 @@ Description: Idris is a general purpose language with full dependent types.
4242 * Hugs style interactive environment
4343
4444Cabal-Version: >= 1.6
45+
46+
4547Build-type: Custom
4648
49+
4750Data-files: rts/libidris_rts.a rts/idris_rts.h rts/idris_gc.h
4851 rts/idris_stdfgn.h rts/idris_main.c rts/idris_gmp.h
4952 rts/libtest.c
@@ -62,11 +65,16 @@ Extra-source-files: lib/Makefile lib/*.idr lib/Prelude/*.idr
6265 config.mk
6366 rts/*.c rts/*.h rts/Makefile
6467 js/*.js
68+ java/org/idris/rts/*.java
6569
6670source-repository head
6771 type: git
6872 location: git://github.com/edwinb/Idris-dev.git
6973
74+Flag NoJava
75+ Description: Do not build the Java RTS
76+ Default: False
77+
7078
7179Executable idris
7280 Main-is: Main.hs
java/idris.jardeleted

Binary file not shown.

java/pom_template.xmlnew file+39
@@ -0,0 +1,39 @@
1+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+ <modelVersion>4.0.0</modelVersion>
4+
5+ <groupId>org.idris.rts</groupId>
6+ <artifactId>idris</artifactId>
7+ <version></version>
8+ <packaging>jar</packaging>
9+
10+ <name>Runtime System for the Idris Java Backend</name>
11+ <url>http://www.irdis-lang.org</url>
12+
13+ <properties>
14+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15+ <skipTests>true</skipTests>
16+ </properties>
17+
18+ <build>
19+ <plugins>
20+ <plugin>
21+ <groupId>org.apache.maven.plugins</groupId>
22+ <artifactId>maven-compiler-plugin</artifactId>
23+ <version>3.0</version>
24+ <configuration>
25+ <source>1.7</source>
26+ <target>1.7</target>
27+ </configuration>
28+ </plugin>
29+ <plugin>
30+ <groupId>org.apache.maven.plugins</groupId>
31+ <artifactId>maven-surefire-plugin</artifactId>
32+ <version>2.14</version>
33+ <configuration>
34+ <skipTests>${skipTests}</skipTests>
35+ </configuration>
36+ </plugin>
37+ </plugins>
38+ </build>
39+</project>
java/org/idris/rts/Closure.java → java/src/main/java/org/idris/rts/Closure.javarenamed

The content is the same.

java/org/idris/rts/ForeignPrimitives.java → java/src/main/java/org/idris/rts/ForeignPrimitives.javarenamed

The content is the same.

java/org/idris/rts/IdrisObject.java → java/src/main/java/org/idris/rts/IdrisObject.javarenamed

The content is the same.

java/org/idris/rts/TailCallClosure.java → java/src/main/java/org/idris/rts/TailCallClosure.javarenamed

The content is the same.

test/mkjavatest.pl+3−1
@@ -14,7 +14,9 @@ open(FOO,">run_java");
1414
1515print FOO "#!/bin/bash\n";
1616print FOO "idris \$@ $test.idr -o $test.java --target Java\n";
17−print FOO "export CLASSPATH=../../java/idris.jar:\$CLASSPATH\n";
17+print FOO "for RTS in ../../java/target/idris-*.jar; do\n";
18+print FOO " export CLASSPATH=$RTS:\$CLASSPATH\n";
19+print FOO "done;\n";
1820print FOO "javac $test.java\n";
1921print FOO "java $test\n";
2022print FOO "rm -f $test.java *.class\n";
test/reg002/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ reg002.idr -o reg002.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac reg002.java
57java reg002
68rm -f reg002.java *.class
test/reg004/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ reg004.idr -o reg004.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac reg004.java
57java reg004
68rm -f reg004.java *.class
test/reg005/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ reg005.idr -o reg005.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac reg005.java
57java reg005
68rm -f reg005.java *.class
test/test001/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test001.idr -o test001.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test001.java
57java test001
68rm -f test001.java *.class
test/test003/run_java+3−1
@@ -1,7 +1,9 @@
11#!/bin/bash
22idris $@ test003a.lidr -o test003a.java --target Java
33idris $@ test003.lidr -o test003.java --target Java
4−export CLASSPATH=../../java/idris.jar:$CLASSPATH
4+for RTS in ../../java/target/idris-*.jar; do
5+ export CLASSPATH=$RTS:$CLASSPATH
6+done;
57javac test003.java
68java test003
79rm -f test003.java *.class
test/test004/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test004.idr -o test004.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test004.java
57java test004
68rm -f test004.java *.class
test/test005/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test005.idr -o test005.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test005.java
57java test005
68rm -f test005.java *.class
test/test006/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test006.idr -o test006.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test006.java
57java test006
68rm -f test006.java *.class
test/test007/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test007.idr -o test007.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test007.java
57java test007
68rm -f test007.java *.class
test/test008/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test008.idr -o test008.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test008.java
57java test008
68rm -f test008.java *.class
test/test009/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test009.idr -o test009.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test009.java
57java test009
68rm -f test009.java *.class
test/test011/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test011.idr -o test011.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test011.java
57java test011
68rm -f test011.java *.class
test/test013/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test013.idr -o test013.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test013.java
57java test013
68rm -f test013.java *.class
test/test014/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test014.idr -o test014.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test014.java
57java test014
68rm -f test014.java *.class
test/test015/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test015.idr -o test015.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test015.java
57java test015
68rm -f test015.java *.class
test/test016/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test016.idr -o test016.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test016.java
57java test016
68rm -f test016.java *.class
test/test018/run_java+3−1
@@ -1,7 +1,9 @@
11#!/bin/bash
22idris $@ test018.idr -o test018.java --target Java
33idris $@ test018a.idr -o test018a.java --target Java
4−export CLASSPATH=../../java/idris.jar:$CLASSPATH
4+for RTS in ../../java/target/idris-*.jar; do
5+ export CLASSPATH=$RTS:$CLASSPATH
6+done;
57javac test018.java
68java test018
79rm -f test018.java test018a.java *.class
test/test019/run_java+3−1
@@ -1,6 +1,8 @@
11#!/bin/bash
22idris $@ test019.lidr -o test019.java --target Java
3−export CLASSPATH=../../java/idris.jar:$CLASSPATH
3+for RTS in ../../java/target/idris-*.jar; do
4+ export CLASSPATH=$RTS:$CLASSPATH
5+done;
46javac test019.java
57java test019
68rm -f test019.java *.class
test/test020/run_java+3−1
@@ -1,7 +1,9 @@
11#!/bin/bash
22idris $@ test020.idr -o test020.java --target Java
33idris $@ test020a.idr -o test020a.java --target Java
4−export CLASSPATH=../../java/idris.jar:$CLASSPATH
4+for RTS in ../../java/target/idris-*.jar; do
5+ export CLASSPATH=$RTS:$CLASSPATH
6+done;
57javac test020.java
68java test020
79rm -f test020.java *.class
test/test021/run_java+3−1
@@ -1,7 +1,9 @@
11#!/bin/bash
22idris -p effects $@ test021.idr -o test021.java --target Java
33idris -p effects $@ test021a.idr -o test021a.java --target Java
4−export CLASSPATH=../../java/idris.jar:$CLASSPATH
4+for RTS in ../../java/target/idris-*.jar; do
5+ export CLASSPATH=$RTS:$CLASSPATH
6+done;
57javac test021.java
68java test021
79javac test021a.java