Fix transcript in transfer window.
[cyberduck.git] / build.xml
blobf986ae2e60d8632e9583f1101494e6ff0ca6f031
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..."/>
129         <exec dir="${home}" executable="svnversion" outputproperty="svn.revision" failonerror="true">
130             <arg value="."/>
131         </exec>
133         <taskdef resource="net/sf/antcontrib/antcontrib.properties">
134             <classpath path="${lib.ext}/ant-contrib-1.0b3.jar"/>
135         </taskdef>
136         <!-- Remove any non-digits (e.g. a trailing M) from the current revision -->
137         <propertyregex property="revision"
138                        input="${svn.revision}"
139                        regexp="([\d]+).*"
140                        select="\1"/>
141         <echo message="svn.revision=${svn.revision}"/>
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.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.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}/ui.jar"
181              update="yes"
182              manifest="${build}/MANIFEST.MF">
183             <fileset dir="${build.classes}/">
184                 <include name="ch/cyberduck/ui/**/*.class"/>
185                 <exclude name="ch/cyberduck/ui/cocoa/**/*.class"/>
186             </fileset>
187         </jar>
188         <jar jarfile="${build}/binding.jar"
189              update="yes"
190              manifest="${build}/MANIFEST.MF">
191             <fileset dir="${build.classes}/">
192                 <include name="ch/cyberduck/binding/**/*.class"/>
193             </fileset>
194         </jar>
195         <jar jarfile="${build}/cocoa.jar"
196              update="yes"
197              manifest="${build}/MANIFEST.MF">
198             <fileset dir="${build.classes}/">
199                 <include name="ch/cyberduck/ui/cocoa/**/*.class"/>
200             </fileset>
201         </jar>
203         <taskdef resource="net/sf/antcontrib/antcontrib.properties">
204             <classpath path="${lib.ext}/ant-contrib-1.0b3.jar"/>
205         </taskdef>
206         <var name="manifest.lib.classpath" unset="true"/>
207         <manifestclasspath property="manifest.lib.classpath"
208                            jarfile="${lib}/cli.jar">
209             <!-- Convert paths relative to target jarfile -->
210             <classpath refid="build.classpath"/>
211         </manifestclasspath>
212         <var name="manifest.build.classpath" unset="true"/>
213         <manifestclasspath property="manifest.build.classpath"
214                            jarfile="${build}/cli.jar">
215             <!-- Convert paths relative to target jarfile -->
216             <classpath>
217                 <fileset dir="${build}" includes="*.jar"/>
218             </classpath>
219         </manifestclasspath>
220         <jar jarfile="${build}/cli.jar"
221              update="yes">
222             <fileset dir="${build.classes}">
223                 <include name="ch/cyberduck/cli/*.class"/>
224             </fileset>
225             <manifest>
226                 <attribute name="Specification-Title" value="${app.name}"/>
227                 <attribute name="Specification-Version" value="${version}"/>
228                 <attribute name="Specification-Vendor" value="${copyright}"/>
229                 <attribute name="Implementation-Version" value="${revision}"/>
230                 <attribute name="Main-Class" value="ch.cyberduck.cli.Terminal"/>
231                 <attribute name="Class-Path" value="${manifest.lib.classpath} ${manifest.build.classpath}"/>
232             </manifest>
233         </jar>
234     </target>
236     <target name="doc" depends="init" description="Generate Javadoc">
237         <mkdir dir="${doc}"/>
238         <javadoc packagenames="ch.cyberduck.*,com.*,org.*"
239                  sourcepath="${source}"
240                  destdir="${doc}"
241                  author="true"
242                  version="true"
243                  use="true"
244                  windowtitle="${app.name} API"
245                  doctitle="${app.name}"
246                  bottom="${copyright}">
247             <classpath refid="build.classpath"/>
248         </javadoc>
249     </target>
251     <target name="clean" description="Delete compiled classes, jar files, jni libraries and application bundle">
252         <delete dir="${build}"/>
253     </target>
255     <target name="manifest" depends="revision" description="Create manifest file">
256         <manifest file="${build}/MANIFEST.MF">
257             <attribute name="Specification-Title" value="${app.name}"/>
258             <attribute name="Specification-Version" value="${version}"/>
259             <attribute name="Specification-Vendor" value="${copyright}"/>
260             <attribute name="Implementation-Version" value="${revision}"/>
261         </manifest>
262     </target>
264     <target name="test-compile" depends="build">
265         <javac fork="true"
266                debug="${debug}"
267                includeantruntime="false"
268                encoding="utf-8"
269                target="${build.compile.target}"
270                source="${build.compile.target}"
271                deprecation="off"
272                srcdir="${unittests}"
273                destdir="${build.unittests}"
274                includes="**/*.java">
275             <classpath refid="test.classpath"/>
276         </javac>
277     </target>
279     <target name="test" depends="test-compile" description="Runs all tests">
280         <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
281             <classpath path="${lib.ext}/junit-4.11.jar"/>
282             <classpath path="${lib.ext}/hamcrest-core-1.3.jar"/>
283         </taskdef>
284         <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
285             <classpath path="${lib.ext}/jacocoant.jar"/>
286         </taskdef>
287         <copy todir="${build}">
288             <fileset dir="${lib}">
289                 <!-- Include libjnidispatch.dylib -->
290                 <include name="*.dylib"/>
291             </fileset>
292         </copy>
293         <echo message="Running tests with ${jvm.runtime.bin}/java"/>
294         <!-- Get all properties available to pass them to test task -->
295         <propertyset id="test.systemproperties">
296             <propertyref builtin="commandline"/>
297         </propertyset>
298         <jacoco:coverage destfile="${build}/jacoco.exec" xmlns:jacoco="antlib:org.jacoco.ant">
299             <junit jvm="${jvm.runtime.bin}/java" fork="yes" forkmode="once"
300                    printsummary="on" filtertrace="on"
301                    haltonfailure="no" failureproperty="test.failed"
302                    showoutput="yes"
303                    dir="${home}">
304                 <classpath refid="test.classpath"/>
305                 <formatter type="plain" usefile="false"/>
306                 <formatter type="xml" extension=".xml" usefile="true"/>
307                 <batchtest todir="${build.unittests.reports}">
308                     <fileset dir="${build.unittests}">
309                         <include name="${build.unittests.include}"/>
310                     </fileset>
311                 </batchtest>
312                 <syspropertyset refid="test.systemproperties"/>
313                 <sysproperty key="java.library.path" value="${build}"/>
314                 <sysproperty key="jna.library.path" value="${build}"/>
315             </junit>
316         </jacoco:coverage>
317         <junitreport todir="${build.unittests.reports}/html">
318             <fileset dir="${build.unittests.reports}">
319                 <include name="TEST-*.xml"/>
320             </fileset>
321             <report format="frames" todir="${build.unittests.reports}/html"/>
322         </junitreport>
323         <!--<fail message="Test failure detected" if="test.failed"/>-->
324     </target>
326     <target name="sonar" depends="test" description="Run Sonar">
327         <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
328             <classpath path="${lib.ext}/sonar-ant-task-2.2.jar"/>
329         </taskdef>
330         <property name="sonar.projectName" value="${app.name}"/>
331         <property name="sonar.projectKey" value="ch.cyberduck:cyberduck-${platform}"/>
332         <property name="sonar.projectVersion" value="${revision}"/>
333         <property name="sonar.projectBaseDir" value="${home}"/>
334         <property name="sonar.sources" value="${source}"/>
335         <property name="sonar.exclusions" value="**/binding/**/*.java,**/cocoa/**/*.java"/>
336         <property name="sonar.coverage.exclusions" value="**/binding/**/*.java,**/cocoa/**/*.java"/>
337         <property name="sonar.tests" value="${unittests}"/>
338         <property name="sonar.binaries" value="${build.classes}"/>
339         <property name="sonar.junit.reportsPath" value="${build.unittests.reports}"/>
340         <pathconvert property="sonar.libraries" refid="build.classpath" pathsep=","/>
341         <property name="sonar.host.url" value="https://${sonar.host}"/>
342         <property name="sonar.jdbc.url"
343                   value="jdbc:mysql://${sonar.host}:3306/sonar?useUnicode=true&amp;characterEncoding=utf8"/>
344         <property name="sonar.jdbc.username" value="sonar"/>
345         <property name="sonar.jdbc.password" value="sonar"/>
346         <property name="sonar.jdbc.driverClassName" value="com.mysql.jdbc.Driver"/>
347         <property name="sonar.core.codeCoveragePlugin" value="jacoco"/>
348         <property name="sonar.jacoco.reportPath" value="${build}/jacoco.exec"/>
349         <property name="sonar.jacoco.antTargets" value="test"/>
350         <property name="sonar.links.homepage" value="http://cyberduck.io"/>
351         <property name="sonar.links.ci" value="https://ci.cyberduck.io"/>
352         <property name="sonar.links.issue" value="https://trac.cyberduck.io"/>
353         <property name="sonar.scm.url" value="scm:svn:http://svn.cyberduck.io/trunk"/>
354         <property name="sonar.links.scm" value="https://svn.cyberduck.io"/>
355         <property name="sonar.links.scm_dev" value="https://svn.cyberduck.io"/>
356         <sonar:sonar xmlns:sonar="antlib:org.sonar.ant"/>
357     </target>
358 </project>