/
build.xml
321 lines (287 loc) · 14.1 KB
/
build.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
<?xml version="1.0" encoding="UTF-8"?>
<project name="sabbus" default="build">
<description>
Build scripts for scala-library-gwt.jar.
</description>
<target name="build" depends="pack.done"/>
<!-- Loads custom properties definitions -->
<property file="${basedir}/build.properties"/>
<property file="${scala-basedir}/build.number"/>
<property name="scala-pack.dir" value="${scala-basedir}/build/pack"/>
<property name="scala-lib.dir" value="${scala-basedir}/lib"/>
<property name="scala-src.dir" value="${scala-basedir}/src"/>
<property name="scala-build.dir" value="${scala-basedir}/build"/>
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="jvm.opts" value=""/>
<!-- if ANT_OPTS is already set by the environment, it will be unaltered,
but if it is unset it will take this default value. -->
<property name="env.ANT_OPTS" value="-Xms1536M -Xmx1536M -Xss1M -XX:MaxPermSize=192M -XX:+UseParallelGC" />
<property name="scalacfork.jvmargs" value="${env.ANT_OPTS} ${jvm.opts}"/>
<property name="scalac.args" value=""/>
<property name="javac.args" value=""/>
<!-- TODO(gkossakowski): We might need to copy even more logic from scala build file
to determine those properties properly when releasing but let's not bother for now. -->
<property name="version.suffix" value="-scalagwt"/>
<property name="maven.version.suffix" value="-SNAPSHOT"/>
<target name="init">
<fail unless="scala-basedir" message="Set `scala-basedir` property in build.properties file"/>
<fail unless="gwt-basedir" message="Set `gwt-basedir` property in build.properties file"/>
<!-- Setting-up Ant contrib tasks -->
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${scala-lib.dir}/ant/ant-contrib.jar"/>
<!-- This is the start time for the distribution -->
<tstamp prefix="time">
<format property="human" pattern="d MMMM yyyy, HH:mm:ss"/>
<format property="short" pattern="yyyyMMddHHmmss"/>
</tstamp>
<!-- Generating version number -->
<exec osfamily="unix" dir="${scala-basedir}" executable="tools/get-scala-commit-sha" outputproperty="git.commit.sha" failifexecutionfails="false" />
<exec osfamily="windows" dir="${scala-basedir}" executable="tools/get-scala-commit-sha.bat" outputproperty="git.commit.sha" failifexecutionfails="false" />
<exec osfamily="unix" dir="${scala-basedir}" executable="tools/get-scala-commit-date" outputproperty="git.commit.date" failifexecutionfails="false" />
<exec osfamily="windows" dir="${scala-basedir}" executable="tools/get-scala-commit-date.bat" outputproperty="git.commit.date" failifexecutionfails="false" />
<exec osfamily="unix" dir="${scala-basedir}" executable="tools/get-scala-commit-drift" outputproperty="git.commit.drift" failifexecutionfails="false" />
<exec osfamily="windows" dir="${scala-basedir}" executable="tools/get-scala-commit-drift.bat" outputproperty="git.commit.drift" failifexecutionfails="false" />
<!-- some default in case something went wrong getting the revision -->
<property name="git.describe" value="-unknown-"/>
<!-- We use the git describe to determine the OSGi modifier for our build. -->
<property
name="maven.version.number"
value="${version.major}.${version.minor}.${version.patch}${version.suffix}${maven.version.suffix}"/>
<property
name="version.number"
value="${maven.version.number}-${git.commit.date}-${git.commit.drift}-${git.commit.sha}"/>
<property
name="osgi.version.number"
value="${version.major}.${version.minor}.${version.patch}.v${git.commit.date}${version.suffix}-${git.commit.sha}"/>
<!-- some default in case something went wrong getting the revision -->
<property name="version.number" value="-unknown-"/>
<!-- And print-out what we are building -->
<echo message=" build time: ${time.human}" />
<echo message=" java version: ${java.vm.name} ${java.version}" />
<echo message=" java args: ${env.ANT_OPTS} ${jvm.opts}" />
<echo message=" javac args: ${javac.args}" />
<echo message=" scalac args: ${scalac.args}" />
<echo message=" maven version: ${maven.version.number}"/>
<echo message=" OSGi version: ${osgi.version.number}" />
<echo message="canonical version: ${version.number}" />
<property name="copyright.string" value="Copyright 2002-2012, LAMP/EPFL"/>
<path id="scala.classpath">
<pathelement location="${scala-pack.dir}/lib/scala-compiler.jar"/>
<pathelement location="${scala-pack.dir}/lib/scala-library.jar"/>
</path>
<taskdef resource="scala/tools/ant/sabbus/antlib.xml" classpathref="scala.classpath"/>
</target>
<target name="pre-jdk2ikvm" depends="init">
<uptodate property="jdk2ikvm.available" targetfile="${build.dir}/jdk2ikvm.complete">
<srcfiles dir="${src.dir}/jdk2ikvm"/>
</uptodate>
</target>
<target name="jdk2ikvm" depends="pre-jdk2ikvm" unless="jdk2ikvm.available">
<stopwatch name="jdk2ikvm.timer"/>
<mkdir dir="${build.dir}/classes/jdk2ikvm-plugin"/>
<scalacfork
destdir="${build.dir}/classes/jdk2ikvm-plugin"
compilerpathref="scala.classpath"
params="${scalac.args}"
srcdir="${src.dir}/jdk2ikvm/src"
jvmargs="${scalacfork.jvmargs}">
<include name="**/*.scala"/>
<compilationpath>
<path refid="scala.classpath"/>
</compilationpath>
</scalacfork>
<copy
file="${src.dir}/jdk2ikvm/resources/scalac-plugin.xml"
todir="${build.dir}/classes/jdk2ikvm-plugin"/>
<!-- not very nice to create jar here but needed to load plugin -->
<!-- <mkdir dir="${build.dir}/misc/scala-devel/goto"/> -->
<jar destfile="${build.dir}/misc/scala-devel/jdk2ikvm.jar">
<fileset dir="${build.dir}/classes/jdk2ikvm-plugin"/>
</jar>
<touch file="${build.dir}/jdk2ikvm.complete" verbose="no"/>
<stopwatch name="jdk2ikvm.timer" action="total"/>
</target>
<target name="pre-lib-jdk2ikvm" depends="jdk2ikvm">
<condition property="lib-jdk2ikvm.available">
<and>
<uptodate targetfile="${build.dir}/library-jdk2ikvm.complete" srcfile="${build.dir}/jdk2ikvm.complete"/>
<uptodate targetfile="${build.dir}/library-jdk2ikvm.complete">
<srcfiles dir="${src.dir}">
<include name="library/**"/>
</srcfiles>
</uptodate>
</and>
</condition>
</target>
<target name="lib-jdk2ikvm" depends="pre-lib-jdk2ikvm" unless="lib-jdk2ikvm.available">
<mkdir dir="${build.dir}/pre-jdk2ikvm/library"/>
<copy todir="${build.dir}/pre-jdk2ikvm/library" preservelastmodified="true">
<fileset dir="${scala-src.dir}/library">
<include name="**/*.scala"/>
<include name="**/*.java"/>
</fileset>
<fileset dir="${scala-src.dir}/continuations/library">
<include name="**/*.scala"/>
</fileset>
</copy>
<mkdir dir="${build.dir}/jdk2ikvm/library"/>
<scalacfork
destdir="${build.dir}/jdk2ikvm/library"
compilerpathref="scala.classpath"
srcpath="${build.dir}/pre-jdk2ikvm/library"
params="-Ystop-before:superaccessors
-P:jdk2ikvm:output-directory:${build.dir}/jdk2ikvm/library
-P:jdk2ikvm:replacements-directory:${src.dir}/jdk2ikvm/resources/replacements
-d ${build.dir}/jdk2ikvm/library
-Xplugin ${build.dir}/misc/scala-devel/jdk2ikvm.jar
-Yrangepos"
srcdir="${build.dir}/pre-jdk2ikvm/library"
jvmargs="${scalacfork.jvmargs}">
<include name="**/*.scala"/>
<compilationpath refid="scala.classpath"/>
</scalacfork>
<!-- HACK! jdk2ikvm should handle it but scalacfork ant task filters out anything that doesn't have .scala extension -->
<copy todir="${build.dir}/jdk2ikvm/library" overwrite="true">
<fileset dir="${src.dir}/jdk2ikvm/resources/replacements">
<include name="**/*.java"/>
</fileset>
</copy>
<!-- now we copy rest of Java files that have no correspodning replacement defined. Copy ant task doesn't
overwrite by default so files copied above will be kept intact -->
<copy todir="${build.dir}/jdk2ikvm/library">
<fileset dir="${build.dir}/pre-jdk2ikvm/library">
<include name="**/*.java"/>
</fileset>
</copy>
<touch file="${build.dir}/library-jdk2ikvm.complete" verbose="no"/>
</target>
<target name="pre-gwt-emul" depends="init">
<uptodate property="gwt-emul.available" targetfile="${build.dir}/gwt-emul.complete">
<srcfiles dir="${gwt-basedir}/">
<include name="dev/core/super/com/google/gwt/dev/jjs/intrinsic/**/*.java"/>
<include name="user/super/com/google/gwt/emul/**/*.java"/>
</srcfiles>
</uptodate>
</target>
<!-- Builds gwt emulation of Java library. We'll use classes from this build when compiling scala library so
we can make sure we don't depend on classes/methods gwt doesn't support. Emulation classes are not
included in scala-library-gwt.jar. -->
<target name="gwt-emul" depends="pre-gwt-emul">
<!-- When rebuilding gwt emulation classes always remove old ones to make sure we don't run into strange errors -->
<delete dir="${build.dir}/classes/gwt-emul" includeemptydirs="yes" quiet="yes" failonerror="no"/>
<mkdir dir="${build.dir}/classes/gwt-emul"/>
<javac
srcdir="${gwt-basedir}/dev/core/super/com/google/gwt/dev/jjs/intrinsic"
destdir="${build.dir}/classes/gwt-emul"
classpath="${gwt-basedir}/build/lib/gwt-dev.jar:${gwt-basedir}/build/lib/gwt-user.jar"
includes="**/*.java"
target="1.5" source="1.5">
<compilerarg line="${javac.args}"/>
</javac>
<javac
srcdir="${gwt-basedir}/user/super/com/google/gwt/emul/"
destdir="${build.dir}/classes/gwt-emul"
classpath="${build.dir}/classes/gwt-emul:${gwt-basedir}/build/lib/gwt-dev.jar:${gwt-basedir}/build/lib/gwt-user.jar"
includes="**/*.java"
target="1.5" source="1.5">
<compilerarg line="${javac.args}"/>
</javac>
<touch file="${build.dir}/gwt-emul.complete" verbose="no"/>
</target>
<target name="pre-lib-jribble" depends="lib-jdk2ikvm, gwt-emul">
<uptodate property="lib-jribble.available" targetfile="${build.dir}/library-gwt.complete">
<srcfiles dir="${build.dir}/jdk2ikvm">
<include name="library/**"/>
<include name="continuations/**"/>
</srcfiles>
</uptodate>
</target>
<target name="lib-jribble" depends="pre-lib-jribble" unless="lib-jribble.available">
<property name="gwt-emul.classpath" value="${build.dir}/classes/gwt-emul:${gwt-basedir}/build/lib/gwt-dev.jar:${gwt-basedir}/build/lib/gwt-user.jar"/>
<property name="scalac.args.jribble" value="-javabootclasspath ${gwt-emul.classpath} -g:notailcalls"/>
<stopwatch name="lib-jribble.timer"/>
<mkdir dir="${build.dir}/gwt/library"/>
<scalacfork
destdir="${build.dir}/gwt/library"
compilerpathref="scala.classpath"
srcpath="${build.dir}/jdk2ikvm/library"
params="${scalac.args.jribble}"
srcdir="${build.dir}/jdk2ikvm/library"
target="jribble"
jvmargs="${scalacfork.jvmargs}">
<include name="scala/**/*.scala"/>
<include name="scala/**/*.java"/>
<exclude name="scala/util/continuations/**"/>
</scalacfork>
<!-- Delete jribble files corresponding to primitive types. Name of classes declared for
primitive types are broken and would cause parsing error. Those classes are stubs
and are never referenced so we can safely exclude them. -->
<delete>
<fileset dir="${build.dir}/gwt/library/scala">
<include name="Boolean.jribble"/>
<include name="Byte.jribble"/>
<include name="Char.jribble"/>
<include name="Double.jribble"/>
<include name="Float.jribble"/>
<include name="Int.jribble"/>
<include name="Long.jribble"/>
<include name="Short.jribble"/>
<include name="Unit.jribble"/>
</fileset>
</delete>
<javac
srcdir="${build.dir}/jdk2ikvm/library"
destdir="${build.dir}/gwt/library"
classpath="${build.dir}/gwt/library"
includes="**/*.java"
target="1.5" source="1.5">
<compilerarg line="${javac.args}"/>
</javac>
<scalacfork
destdir="${build.dir}/gwt/library"
compilerpathref="scala.classpath"
params="${scalac.args.jribble} -Xpluginsdir ${scala-pack.dir}/misc/scala-devel/plugins -Xplugin-require:continuations -P:continuations:enable"
srcdir="${build.dir}/jdk2ikvm/library"
target="jribble"
jvmargs="${scalacfork.jvmargs}">
<include name="scala/util/continuations/**"/>
<compilationpath>
<pathelement location="${build.dir}/gwt/library"/>
</compilationpath>
</scalacfork>
<propertyfile file="${build.dir}/gwt/library/library.properties">
<entry key="version.number" value="${version.number}"/>
<entry key="maven.version.number" value="${maven.version.number}"/>
<entry key="osgi.version.number" value="${osgi.version.number}"/>
<entry key="copyright.string" value="${copyright.string}"/>
</propertyfile>
<copy todir="${build.dir}/gwt/library">
<fileset dir="${src.dir}/library">
<include name="**/*.xml"/>
</fileset>
</copy>
<copy todir="${build.dir}/gwt/library">
<fileset dir="${build.dir}/jdk2ikvm/library">
<include name="**/*.java"/>
</fileset>
</copy>
<touch file="${build.dir}/library-gwt.complete" verbose="no"/>
<stopwatch name="lib-jribble.timer" action="total"/>
</target>
<target name="pack.pre-lib-jribble" depends="lib-jribble">
<uptodate
property="pack.lib-jribble.available"
targetfile="${build-pack.dir}/lib/scala-library-gwt.jar"
srcfile="${build.dir}/library-gwt.complete"/>
</target>
<target name="pack.lib-jribble" depends="pack.pre-lib-jribble" unless="pack.lib-jribble.available">
<mkdir dir="${build.dir}/lib"/>
<jar destfile="${build.dir}/lib/scala-library-gwt.jar">
<fileset dir="${build.dir}/gwt/library"/>
</jar>
</target>
<target name="pack.done" depends="pack.lib-jribble"/>
<target name="clean">
<delete dir="${build.dir}" includeemptydirs="yes" quiet="yes" failonerror="no"/>
</target>
</project>