Release 0.9.3
[debian/openrocket] / build.xml
1 <project name="OpenRocket" basedir=".">
2
3         <property file="build.properties" />
4         
5         <property name="src.dir"        value="src"/>           <!-- Source directory -->
6         <property name="src-test.dir"   value="test"/>          <!-- Test directory -->
7         <property name="build.dir"      value="build"/>         <!-- Build directory -->
8         <property name="build-test.dir" value="build/test"/><!-- Build directory -->
9                 
10         <!-- Distribution directory, from which stuff is jar'ed -->
11         <property name="dist.dir"       value="${build.dir}/dist"/> 
12         <property name="dist-test.dir"  value="${build.dir}/dist-test"/>
13         
14         <property name="classes.dir" value="${dist.dir}"/>      <!-- Directory for classes -->
15         <property name="jar.dir"     value="${build.dir}/jar"/> <!-- Directory for built jar's -->
16         <property name="lib.dir"     value="lib"/>                              <!-- Library source directory -->
17
18         <property name="pkgname"     value="${ant.project.name}-${build.version}"/>
19         
20         <property name="jar.file"    value="${jar.dir}/${ant.project.name}.jar"/>
21         <property name="dist.bin"    value="${jar.dir}/${pkgname}.jar"/>
22         <property name="dist.src"    value="${jar.dir}/${pkgname}-src.zip"/>
23         
24         <!-- The main class of the application -->
25         <property name="main-class"  value="net.sf.openrocket.startup.Startup"/>
26         <property name="main-dir" value="net/sf/openrocket/startup"/>
27
28         
29         <!-- Classpath definition -->
30         <path id="classpath">
31                 <fileset dir="${lib.dir}" includes="**/*.jar"/>
32         </path>
33         
34
35         
36         <!-- CLEAN -->
37         <target name="clean">
38                 <delete dir="${build.dir}"/>
39         </target>
40                 
41         
42         <!-- BUILD -->
43         <target name="build">
44                 <mkdir dir="${classes.dir}"/>
45                 <echo>Compiling main classes</echo>
46                 <javac srcdir="${src.dir}" destdir="${classes.dir}" excludes="${main-dir}/*" classpathref="classpath"/>
47                 <echo>Compiling startup classes</echo>
48                 <javac srcdir="${src.dir}/${main-dir}" destdir="${classes.dir}" source="1.4" classpathref="classpath"/>
49         </target>
50         
51         
52         <!-- JAR -->
53         <target name="jar" depends="build">
54                 <copy todir="${dist.dir}/">
55                         <fileset dir="." includes="LICENSE.TXT README.TXT ChangeLog ReleaseNotes build.properties" />
56                         <fileset dir="." includes="datafiles/ pix/" />
57                 </copy>
58                 <mkdir dir="${jar.dir}"/>
59                 <jar destfile="${jar.file}" basedir="${dist.dir}">
60                         <manifest>
61                                 <attribute name="Main-Class" value="${main-class}"/>
62                                 <attribute name="SplashScreen-Image" value="pix/splashscreen.png"/>
63                         </manifest>
64                         <zipfileset src="lib/miglayout15-swing.jar" />
65                         <zipfileset src="lib/jcommon-1.0.16.jar" />
66                         <zipfileset src="lib/jfreechart-1.0.13.jar" />
67                 </jar>
68         </target>
69         
70         
71         <!-- DIST-SRC -->
72         <target name="dist-src" depends="checktodo,clean,unittest">
73                 <echo>                  
74                 Building source distribution
75                 </echo>
76                 <mkdir dir="${build.dir}/${pkgname}"/>
77                 <mkdir dir="${jar.dir}"/>
78                 <copy todir="${build.dir}/${pkgname}">
79                         <fileset dir="." includes="*">
80                                 <type type="file"/>
81                         </fileset>
82                         <fileset dir="." includes="datafiles/ lib/ pix/ src/ test/"/>
83                 </copy>
84                 <zip destfile="${dist.src}" basedir="${build.dir}" includes="${pkgname}/"/>
85                 <delete dir="${build.dir}/${pkgname}"/>
86         </target>
87         
88         
89         <!-- DIST-SRC-TEST -->
90         <target name="dist-src-test" depends="dist-src">
91                 <echo>
92                 Testing source distribution
93                 </echo>
94                 <delete dir="${dist-test.dir}"/>
95                 <mkdir dir="${dist-test.dir}"/>
96                 <unzip dest="${dist-test.dir}" src="${dist.src}"/>
97                 <ant dir="${dist-test.dir}/${pkgname}" antfile="build.xml" target="jar"/>
98                 <ant dir="${dist-test.dir}/${pkgname}" antfile="build.xml" target="unittest"/>
99                 <delete dir="${dist-test.dir}"/>
100                 <echo>
101                 Source distribution test successful
102                 </echo>
103         </target>       
104         
105         
106         <!-- DIST-BIN -->
107         <target name="dist-bin" depends="checktodo,clean,unittest,jar">
108                 <move file="${jar.file}" tofile="${dist.bin}"/>
109         </target>
110
111         
112         <!-- DIST -->
113         <target name="dist" depends="dist-bin,dist-src,dist-src-test">
114                 <echo>Distribution ${build.version} (${build.source}) built into directory ${jar.dir}</echo>
115         </target>
116         
117         
118         <!-- CHECK TODOs -->
119         <target name="checktodo">
120                 <tempfile property="todo.file" prefix="checktodo-"/>
121                 <echo>Checking project for critical TODOs.</echo>
122                 <concat destfile="${todo.file}">
123                         <fileset dir="${src.dir}">
124                             <include name="**/*.java"/>
125                         </fileset>
126                         <filterchain>
127                                 <linecontainsregexp>
128                                         <regexp pattern="TODO:.*CRITICAL"/>
129                                 </linecontainsregexp>
130                         </filterchain>
131                 </concat>
132                 <loadfile srcfile="${todo.file}" property="criticaltodos"/>
133                 <delete file="${todo.file}"/>
134                 <fail if="criticaltodos">CRITICAL TODOs exist in project:
135 ${criticaltodos}</fail>
136                 <echo>No critical TODOs in project.</echo>
137         </target>
138         
139         
140         <!--  Unit tests  -->
141         <target name="unittest" description="Execute unit tests" depends="build">
142                 <echo>Building unit tests</echo>
143                 <mkdir dir="${build-test.dir}"/>
144                 <javac srcdir="${src-test.dir}" destdir="${build-test.dir}" classpathref="classpath" classpath="${classes.dir}:${ant.library.dir}/junit4.jar"/>
145                 
146                 <echo>Running unit tests</echo>
147                 <mkdir dir="tmp/rawtestoutput"/>
148                 <junit printsummary="true" failureproperty="junit.failure">
149                         <classpath path="${build-test.dir}"/>
150                         <classpath path="${classes.dir}"/>
151                         <classpath path="${ant.library.dir}/junit4.jar"/>
152                   
153                         <batchtest todir="tmp/rawtestoutput">
154                                 <fileset dir="${src-test.dir}">
155                                         <include name="**/*Test*.java" />
156                                         <exclude name="Test.java" />
157                                 </fileset>
158                                 <formatter type="xml"/>
159                         </batchtest>
160                 </junit>
161                 <junitreport todir="tmp">
162                         <fileset dir="tmp/rawtestoutput"/>
163                         <report todir="tmp/test-reports"/>
164                 </junitreport>
165                 <fail if="junit.failure" message="Unit test(s) failed.  See reports!"/>
166         </target>
167     
168 </project>