on master help sign in
Use XML lib instead of string templating.
6f34ac1Leif Warner
idris.cabal+1−1
@@ -57,7 +57,6 @@ Data-files: jsrts/Runtime-browser.js
57 rts/idris_rts.h
57 rts/idris_rts.h
58 rts/idris_stdfgn.h
58 rts/idris_stdfgn.h
59 rts/libtest.c
59 rts/libtest.c
60− java/*.xml
61
60
62Extra-source-files:
61Extra-source-files:
63 Makefile
62 Makefile
@@ -359,6 +358,7 @@ Executable idris
359 , IRTS.Java.ASTBuilding
358 , IRTS.Java.ASTBuilding
360 , IRTS.Java.JTypes
359 , IRTS.Java.JTypes
361 , IRTS.Java.Mangling
360 , IRTS.Java.Mangling
361+ , IRTS.Java.Pom
362 , IRTS.LParser
362 , IRTS.LParser
363 , IRTS.Lang
363 , IRTS.Lang
364 , IRTS.Simplified
364 , IRTS.Simplified
java/executable_pom.xmldeleted−66
@@ -1,66 +0,0 @@
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/maven-v4_0_0.xsd">
3− <modelVersion>4.0.0</modelVersion>
4− <groupId>org.idris-lang</groupId>
5− <artifactId>$ARTIFACT-NAME$</artifactId>
6− <packaging>jar</packaging>
7− <version>1.0</version>
8− <name>$ARTIFACT-NAME$</name>
9−
10− <properties>
11− <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12− <skipTests>true</skipTests>
13− </properties>
14− <dependencies>
15− <dependency>
16− <groupId>org.idris-lang</groupId>
17− <artifactId>idris</artifactId>
18− <version>0.9.10-alpha-2</version>
19− </dependency>
20−$DEPENDENCIES$
21− </dependencies>
22−
23−
24− <build>
25− <finalName>$ARTIFACT-NAME$</finalName>
26− <plugins>
27− <plugin>
28− <groupId>org.apache.maven.plugins</groupId>
29− <artifactId>maven-compiler-plugin</artifactId>
30− <version>3.0</version>
31− <configuration>
32− <source>1.7</source>
33− <target>1.7</target>
34− </configuration>
35− </plugin>
36− <plugin>
37− <groupId>org.apache.maven.plugins</groupId>
38− <artifactId>maven-surefire-plugin</artifactId>
39− <version>2.14</version>
40− <configuration>
41− <skipTests>${skipTests}</skipTests>
42− </configuration>
43− </plugin>
44− <plugin>
45− <groupId>org.apache.maven.plugins</groupId>
46− <artifactId>maven-shade-plugin</artifactId>
47− <version>2.1</version>
48− <executions>
49− <execution>
50− <phase>package</phase>
51− <goals>
52− <goal>shade</goal>
53− </goals>
54− <configuration>
55− <transformers>
56− <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
57− <mainClass>$MAIN-CLASS$</mainClass>
58− </transformer>
59− </transformers>
60− </configuration>
61− </execution>
62− </executions>
63− </plugin>
64− </plugins>
65− </build>
66−</project>
src/IRTS/CodegenJava.hs+4−34
@@ -6,6 +6,7 @@ import IRTS.CodegenCommon
6import IRTS.Java.ASTBuilding
6import IRTS.Java.ASTBuilding
7import IRTS.Java.JTypes
7import IRTS.Java.JTypes
8import IRTS.Java.Mangling
8import IRTS.Java.Mangling
9+import IRTS.Java.Pom (pomString)
9import IRTS.Lang
10import IRTS.Lang
10import IRTS.Simplified
11import IRTS.Simplified
11import Util.System
12import Util.System
@@ -16,10 +17,9 @@ import Control.Monad
16import Control.Monad.Error
17import Control.Monad.Error
17import qualified Control.Monad.Trans as T
18import qualified Control.Monad.Trans as T
18import Control.Monad.Trans.State
19import Control.Monad.Trans.State
19−import Data.List (foldl', isSuffixOf, unfoldr)
20+import Data.List (foldl', isSuffixOf)
20import qualified Data.Text as T
21import qualified Data.Text as T
21import qualified Data.Text.IO as TIO
22import qualified Data.Text.IO as TIO
22−import Text.XML.Light
23import qualified Data.Vector.Unboxed as V
23import qualified Data.Vector.Unboxed as V
24import Language.Java.Parser
24import Language.Java.Parser
25import Language.Java.Pretty
25import Language.Java.Pretty
@@ -101,19 +101,9 @@ generatePom :: FilePath -> -- tgt dir
101 [String] -> -- libs
101 [String] -> -- libs
102 IO ()
102 IO ()
103generatePom tgtDir out libs = do
103generatePom tgtDir out libs = do
104− execPom <- getExecutablePom
105− execPomTemplate <- TIO.readFile execPom
106 let (Ident clsName) = either error id (mkClassName out)
104 let (Ident clsName) = either error id (mkClassName out)
107− let execPom = T.replace (T.pack "$MAIN-CLASS$")
108− (T.pack clsName)
109− (T.replace (T.pack "$ARTIFACT-NAME$")
110− (T.pack $ takeBaseName out)
105+ let execPom = pomString clsName (takeBaseName out) libs
111− (T.replace (T.pack "$DEPENDENCIES$")
112− (T.pack $ concatMap (ppElement . mkDependency) libs)
113− execPomTemplate
114− )
115− )
116− TIO.writeFile (pomFileName tgtDir) execPom
106+ writeFile (pomFileName tgtDir) execPom
117
107
118invokeMvn :: FilePath -> String -> IO ()
108invokeMvn :: FilePath -> String -> IO ()
119invokeMvn tgtDir command = do
109invokeMvn tgtDir command = do
@@ -175,26 +165,6 @@ jarHeader =
175 ++ "exec \"$java\" $java_args -jar $MYSELF \"$@\""
165 ++ "exec \"$java\" $java_args -jar $MYSELF \"$@\""
176 ++ "exit 1\n"
166 ++ "exit 1\n"
177
167
178−-- from http://stackoverflow.com/a/4978733/283260
179−splitOn :: Eq a => a -> [a] -> [[a]]
180−splitOn chr = unfoldr sep where
181− sep [] = Nothing
182− sep l = Just . fmap (drop 1) . break (==chr) $ l
183−
184−mkDependency :: String -> Element
185−mkDependency d =
186− case splitOn ':' d of
187− [g, a, v] ->
188− unode "dependency" [
189− mkGroupId g,
190− mkArtifactId a,
191− mkVersion v
192− ]
193− _ -> blank_element
194−mkGroupId g = unode "groupId" g
195−mkArtifactId a = unode "artifactId" a
196−mkVersion v = unode "version" v
197−
198-----------------------------------------------------------------------
168-----------------------------------------------------------------------
199-- Code generation environment
169-- Code generation environment
200
170
src/IRTS/Java/Pom.hsnew file+89
@@ -0,0 +1,89 @@
1+module IRTS.Java.Pom (pomString) where
2+
3+import Data.List (unfoldr)
4+import Text.XML.Light
5+
6+uattr :: String -> String -> Attr
7+uattr k v = Attr (QName k Nothing Nothing) v
8+
9+-- from http://stackoverflow.com/a/4978733/283260
10+splitOn :: Eq a => a -> [a] -> [[a]]
11+splitOn chr = unfoldr sep where
12+ sep [] = Nothing
13+ sep l = Just . fmap (drop 1) . break (==chr) $ l
14+
15+parseToDep :: String -> Element
16+parseToDep tuple =
17+ case splitOn ':' tuple of
18+ [g, a, v] -> dependency g a v
19+ _ -> blank_element
20+
21+dependency :: String -> String -> String -> Element
22+dependency g a v = unode "dependency" (groupArtifactVersion g a v)
23+
24+groupArtifactVersion :: String -> String -> String -> [Element]
25+groupArtifactVersion g a v = [
26+ unode "groupId" g,
27+ unode "artifactId" a,
28+ unode "version" v
29+ ]
30+
31+pomString :: String -> String -> [String] -> String
32+pomString c a d = ppElement $ pom c a d
33+
34+pom :: String -> String -> [String] -> Element
35+pom clsName artifactName dependencies = unode "project" ([
36+ uattr "xmlns" "http://maven.apache.org/POM/4.0.0",
37+ uattr "xmlns:xsi" "http://www.w3.org/2001/XMLSchema-instance",
38+ uattr "xsi:schemaLocation" "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
39+ ],
40+ [
41+ unode "modelVersion" "4.0.0",
42+ unode "groupId" "org.idris-lang",
43+ unode "artifactId" artifactName,
44+ unode "packaging" "jar",
45+ unode "version" "1.0",
46+ unode "name" artifactName,
47+ unode "properties" [
48+ unode "project.build.sourceEncoding" "UTF-8",
49+ unode "skipTest" "true"
50+ ],
51+ unode "dependencies" (
52+ dependency "org.idris-lang" "idris" "0.9.10-alpha-2" :
53+ map parseToDep dependencies
54+ ),
55+ unode "build" [
56+ unode "finalName" artifactName,
57+ unode "plugins" [
58+ unode "plugin" (
59+ unode "configuration" [
60+ unode "source" "1.7",
61+ unode "target" "1.7"
62+ ] : groupArtifactVersion "org.apache.maven.plugins" "maven-compiler-plugin" "3.0"
63+ ),
64+ unode "plugin" (
65+ unode "configuration" (
66+ unode "skipTests" "${skipTests}"
67+ ) : groupArtifactVersion "org.apache.maven.plugins" "maven-surefile-plugin" "2.14"
68+ ),
69+ unode "plugin" (
70+ unode "executions" [
71+ unode "execution" [
72+ unode "phase" "package",
73+ unode "goals" (
74+ unode "goal" "shade"
75+ ),
76+ unode "configuration" (
77+ unode "transformers" (
78+ unode "transformer" (
79+ uattr "implementation" "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer",
80+ unode "mainClass" clsName
81+ )
82+ )
83+ )
84+ ]
85+ ] : groupArtifactVersion "org.apache.maven.plugins" "maven-shade-plugin" "2.1"
86+ )
87+ ]
88+ ]
89+ ])