Add `application.resources.path`.
[cyberduck.git] / build.xml
blob8e1da21ba4f3cbeb4bb5667603698340db2e3a7b
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  *      Simple Ant (http://jakarta.apache.org/ant) build script for Cyberduck
4  *
5  *      $Revision$
6  *      $Date$
7  *
8  *  Copyright (c) 2005-2012 David Kocher. All rights reserved.
9  *  http://cyberduck.io/
10  *
11  *      This program is free software; you can redistribute it and/or modify
12  *      it under the terms of the GNU General Public License as published by
13  *      the Free Software Foundation; either version 2 of the License, or
14  *      (at your option) any later version.
15  *
16  *      This program is distributed in the hope that it will be useful,
17  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
18  *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  *      GNU General Public License for more details.F
20  *
21  *      Bug fixes, suggestions and comments should be sent to:
22  *      dkocher@cyberduck.io
23  -->
24 <project name="Cyberduck" default="build" basedir=".">
26     <property file="build.properties"/>
27     <property file="tools.properties"/>
29     <property environment="env"/>
31     <property name="app.name" value="${ant.project.name}"/>
32     <property name="app.update.feed" value=""/>
34     <property name="debug" value="on"/>
35     <property name="home" location="."/>
36     <property name="unittests" value="${home}/test"/>
37     <property name="build" value="${home}/build"/>
38     <property name="build.compile.target" value="${ant.java.version}"/>
39     <property name="configuration" value="release"/>
40     <property name="build.deploy" location="${build}/${configuration}"/>
41     <property name="build.bundles" value="${build.deploy}/bundles"/>
42     <property name="build.classes" value="${build}/classes"/>
43     <property name="build.unittests" value="${build}/test-classes"/>
44     <property name="build.unittests.include" value="**/*Test.class"/>
45     <property name="build.unittests.reports" value="${build}/report"/>
46     <property name="config" value="${home}/config"/>
47     <property name="img" value="${home}/img"/>
48     <property name="lib" value="${home}/lib"/>
49     <property name="lib.ext" value="${lib}/ext"/>
50     <property name="source" value="${home}/source"/>
51     <property name="resources" value="${home}/resources"/>
52     <property name="doc" value="${home}/doc"/>
53     <property name="www" value="${home}/www"/>
54     <property name="www.update" value="${www}/update"/>
55     <property name="www.help" value="${www}/help"/>
56     <property name="setup" value="${home}/setup"/>
57     <property name="copyright" value="Copyright (c) 2001-2015 David Kocher. Copyright (c) 2011–2015 Yves Langisch"/>
58     <property name="version" value="${cyberduck.version.major}.${cyberduck.version.minor}"/>
60     <property name="sonar.host" value="sonar.cyberduck.io"/>
62     <condition property="platform" value="mac">
63         <os family="mac"/>
64     </condition>
65     <condition property="platform" value="windows">
66         <os family="windows"/>
67     </condition>
68     <condition property="platform" value="linux">
69         <os family="unix"/>
70     </condition>
72     <import description="Platform specific targets" file="build-${platform}.xml"/>
74     <path id="test.classpath">
75         <path refid="build.classpath"/>
76         <pathelement location="${build.unittests}"/>
77         <pathelement location="${build}"/>
78         <fileset dir="${build}">
79             <include name="*.jar"/>
80         </fileset>
81         <fileset dir="${lib.ext}">
82             <include name="*.jar"/>
83         </fileset>
84     </path>
86     <path id="build.classpath">
87         <!-- Include all libraries -->
88         <fileset dir="${lib}">
89             <include name="*.jar"/>
90         </fileset>
91     </path>
93     <target name="init" depends="timestamp">
94         <echo message=""/>
95         <echo message="   ---------------------------------------------------------------"/>
96         <echo message="   Java Version: ${ant.java.version}"/>
97         <echo message="   Project Home:         ${home}"/>
98         <echo message="   Project Build:        ${build}"/>
99         <echo message="   Project Source:       ${source}"/>
100         <echo message="   ---------------------------------------------------------------"/>
101         <echo message=""/>
102         <echo message="Building ${app.name} on ${os.name}/${os.arch} at ${touch.time}..."/>
104         <mkdir dir="${build}"/>
105         <mkdir dir="${build.deploy}"/>
106         <mkdir dir="${build.classes}"/>
107         <mkdir dir="${build.unittests}"/>
108         <mkdir dir="${build.unittests.reports}"/>
109         <mkdir dir="${build.unittests.reports}/html"/>
110     </target>
112     <target name="build" description="Build GUI application"
113             depends="archive, _build"/>
115     <target name="cli" description="Build CLI application"
116             depends="archive, _cli"/>
118     <target name="timestamp">
119         <tstamp>
120             <format property="touch.time"
121                     pattern="dd/MM/yyyy hh:mm aa"
122                     timezone="GMT+1"
123                     locale="en"/>
124         </tstamp>
125     </target>
127     <target name="revision" depends="init">
128         <echo message="Calculating revision..."/>
130         <taskdef resource="net/sf/antcontrib/antcontrib.properties">
131             <classpath path="${lib.ext}/ant-contrib-1.0b3.jar"/>
132         </taskdef>
134         <property environment="env"/>
135         <echo message="env.SVN_REVISION=${env.SVN_REVISION}"/>
137         <!-- Remove any non-digits (e.g. a trailing M) from the current revision -->
138         <propertyregex property="revision"
139                        input="${env.SVN_REVISION}"
140                        regexp="([\d]+).*"
141                        select="\1"/>
142         <property name="revision" value="${revision}"/>
143         <echo message="revision=${revision}"/>
144         <buildnumber file="build.number"/>
145         <echo message="Build number ${build.number}"/>
146     </target>
148     <target name="compile" depends="init" description="Compile the source tree">
149         <javac fork="true"
150                includeantruntime="false"
151                debug="${debug}"
152                encoding="utf-8"
153                srcdir="${source}"
154                target="${build.compile.target}"
155                source="${build.compile.target}"
156                deprecation="on"
157                listfiles="on"
158                extdirs=""
159                destdir="${build.classes}">
160             <classpath refid="build.classpath"/>
161         </javac>
162     </target>
164     <target name="archive" depends="compile, manifest" description="Create archives">
165         <jar jarfile="${build}/config-${version}.jar"
166              update="yes"
167              manifest="${build}/MANIFEST.MF">
168             <fileset dir="${lib}">
169                 <include name="mime.types"/>
170                 <include name="log4j-*.xml"/>
171             </fileset>
172         </jar>
173         <jar jarfile="${build}/core-${version}.jar"
174              update="yes"
175              manifest="${build}/MANIFEST.MF">
176             <fileset dir="${build.classes}">
177                 <include name="ch/cyberduck/core/**/*.class"/>
178             </fileset>
179         </jar>
180         <jar jarfile="${build}/fs-${version}.jar"
181              update="yes"
182              manifest="${build}/MANIFEST.MF">
183             <fileset dir="${build.classes}">
184                 <include name="ch/cyberduck/fs/**/*.class"/>
185             </fileset>
186         </jar>
187         <jar jarfile="${build}/ui-${version}.jar"
188              update="yes"
189              manifest="${build}/MANIFEST.MF">
190             <fileset dir="${build.classes}/">
191                 <include name="ch/cyberduck/ui/**/*.class"/>
192                 <exclude name="ch/cyberduck/ui/cocoa/**/*.class"/>
193             </fileset>
194         </jar>
195         <jar jarfile="${build}/binding-${version}.jar"
196              update="yes"
197              manifest="${build}/MANIFEST.MF">
198             <fileset dir="${build.classes}/">
199                 <include name="ch/cyberduck/binding/**/*.class"/>
200             </fileset>
201         </jar>
202         <jar jarfile="${build}/cocoa-${version}.jar"
203              update="yes"
204              manifest="${build}/MANIFEST.MF">
205             <fileset dir="${build.classes}/">
206                 <include name="ch/cyberduck/ui/cocoa/**/*.class"/>
207             </fileset>
208         </jar>
210         <taskdef resource="net/sf/antcontrib/antcontrib.properties">
211             <classpath path="${lib.ext}/ant-contrib-1.0b3.jar"/>
212         </taskdef>
213         <var name="manifest.lib.classpath" unset="true"/>
214         <manifestclasspath property="manifest.lib.classpath"
215                            jarfile="${lib}/cli-${version}.jar">
216             <!-- Convert paths relative to target jarfile -->
217             <classpath refid="build.classpath"/>
218         </manifestclasspath>
219         <var name="manifest.build.classpath" unset="true"/>
220         <manifestclasspath property="manifest.build.classpath"
221                            jarfile="${build}/cli-${version}.jar">
222             <!-- Convert paths relative to target jarfile -->
223             <classpath>
224                 <fileset dir="${build}" includes="*.jar"/>
225             </classpath>
226         </manifestclasspath>
227         <jar jarfile="${build}/cli-${version}.jar"
228              update="yes">
229             <fileset dir="${build.classes}">
230                 <include name="ch/cyberduck/cli/*.class"/>
231             </fileset>
232             <manifest>
233                 <attribute name="Specification-Title" value="${app.name}"/>
234                 <attribute name="Specification-Version" value="${version}"/>
235                 <attribute name="Specification-Vendor" value="${copyright}"/>
236                 <attribute name="Implementation-Version" value="${revision}"/>
237                 <attribute name="Main-Class" value="ch.cyberduck.cli.Terminal"/>
238                 <attribute name="Class-Path" value="${manifest.lib.classpath} ${manifest.build.classpath}"/>
239             </manifest>
240         </jar>
241     </target>
243     <target name="doc" depends="init" description="Generate Javadoc">
244         <mkdir dir="${doc}"/>
245         <javadoc packagenames="ch.cyberduck.*,com.*,org.*"
246                  sourcepath="${source}"
247                  destdir="${doc}"
248                  author="true"
249                  version="true"
250                  use="true"
251                  windowtitle="${app.name} API"
252                  doctitle="${app.name}"
253                  bottom="${copyright}">
254             <classpath refid="build.classpath"/>
255         </javadoc>
256     </target>
258     <target name="clean" description="Delete compiled classes, jar files, jni libraries and application bundle">
259         <delete dir="${build}"/>
260     </target>
262     <target name="manifest" depends="revision" description="Create manifest file">
263         <manifest file="${build}/MANIFEST.MF">
264             <attribute name="Specification-Title" value="${app.name}"/>
265             <attribute name="Specification-Version" value="${version}"/>
266             <attribute name="Specification-Vendor" value="${copyright}"/>
267             <attribute name="Implementation-Version" value="${revision}"/>
268         </manifest>
269     </target>
271     <target name="test-compile" depends="build">
272         <javac fork="true"
273                debug="${debug}"
274                includeantruntime="false"
275                encoding="utf-8"
276                target="${build.compile.target}"
277                source="${build.compile.target}"
278                deprecation="off"
279                srcdir="${unittests}"
280                destdir="${build.unittests}"
281                includes="**/*.java">
282             <classpath refid="test.classpath"/>
283         </javac>
284     </target>
286     <target name="test" depends="test-compile" description="Runs all tests">
287         <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
288             <classpath path="${lib.ext}/junit-4.11.jar"/>
289             <classpath path="${lib.ext}/hamcrest-core-1.3.jar"/>
290         </taskdef>
291         <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
292             <classpath path="${lib.ext}/jacocoant.jar"/>
293         </taskdef>
294         <copy todir="${build}">
295             <fileset dir="${lib}">
296                 <!-- Include libjnidispatch.dylib -->
297                 <include name="*.dylib"/>
298             </fileset>
299         </copy>
300         <echo message="Running tests with ${jvm.runtime.bin}/java"/>
301         <!-- Get all properties available to pass them to test task -->
302         <propertyset id="test.systemproperties">
303             <propertyref builtin="commandline"/>
304         </propertyset>
305         <jacoco:coverage destfile="${build}/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant">
306             <junit jvm="${jvm.runtime.bin}/java" fork="yes" forkmode="once"
307                    printsummary="on" filtertrace="on"
308                    haltonfailure="no" failureproperty="test.failed"
309                    showoutput="yes"
310                    dir="${home}">
311                 <classpath refid="test.classpath"/>
312                 <formatter type="plain" usefile="false"/>
313                 <formatter type="xml" extension=".xml" usefile="true"/>
314                 <batchtest todir="${build.unittests.reports}">
315                     <fileset dir="${build.unittests}">
316                         <include name="${build.unittests.include}"/>
317                     </fileset>
318                 </batchtest>
319                 <syspropertyset refid="test.systemproperties"/>
320                 <sysproperty key="java.library.path" value="${build}"/>
321                 <sysproperty key="jna.library.path" value="${build}"/>
322             </junit>
323         </jacoco:coverage>
324         <junitreport todir="${build.unittests.reports}/html">
325             <fileset dir="${build.unittests.reports}">
326                 <include name="TEST-*.xml"/>
327             </fileset>
328             <report format="frames" todir="${build.unittests.reports}/html"/>
329         </junitreport>
330         <!--<fail message="Test failure detected" if="test.failed"/>-->
331     </target>
333     <target name="sonar" depends="test" description="Run Sonar">
334         <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
335             <classpath path="${lib.ext}/sonar-ant-task-2.2.jar"/>
336         </taskdef>
337         <property name="sonar.projectName" value="${app.name}"/>
338         <property name="sonar.projectKey" value="ch.cyberduck:cyberduck-${platform}"/>
339         <property name="sonar.projectVersion" value="${revision}"/>
340         <property name="sonar.projectBaseDir" value="${home}"/>
341         <property name="sonar.sources" value="${source}"/>
342         <property name="sonar.exclusions" value="**/binding/**/*.java,**/cocoa/**/*.java"/>
343         <property name="sonar.coverage.exclusions" value="**/binding/**/*.java,**/cocoa/**/*.java"/>
344         <property name="sonar.tests" value="${unittests}"/>
345         <property name="sonar.binaries" value="${build.classes}"/>
346         <property name="sonar.junit.reportsPath" value="${build.unittests.reports}"/>
347         <pathconvert property="sonar.libraries" refid="build.classpath" pathsep=","/>
348         <property name="sonar.host.url" value="https://${sonar.host}"/>
349         <property name="sonar.jdbc.url"
350                   value="jdbc:mysql://${sonar.host}:3306/sonar?useUnicode=true&amp;characterEncoding=utf8"/>
351         <property name="sonar.jdbc.username" value="sonar"/>
352         <property name="sonar.jdbc.password" value="sonar"/>
353         <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver"/>
354         <property name="sonar.core.codeCoveragePlugin" value="jacoco"/>
355         <property name="sonar.jacoco.reportPath" value="${build}/jacoco.exec"/>
356         <property name="sonar.jacoco.antTargets" value="test"/>
357         <property name="sonar.links.homepage" value="http://cyberduck.io"/>
358         <property name="sonar.links.ci" value="https://ci.cyberduck.io"/>
359         <property name="sonar.links.issue" value="https://trac.cyberduck.io"/>
360         <property name="sonar.scm.url" value="scm:svn:http://svn.cyberduck.io/trunk"/>
361         <property name="sonar.links.scm" value="https://svn.cyberduck.io"/>
362         <property name="sonar.links.scm_dev" value="https://svn.cyberduck.io"/>
363         <sonar:sonar xmlns:sonar="antlib:org.sonar.ant"/>
364     </target>
365 </project>