1 <?xml version="1.0" encoding="UTF-8"?>
3 * Simple Ant (http://jakarta.apache.org/ant) build script for Cyberduck
8 * Copyright (c) 2005-2012 David Kocher. All rights reserved.
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.
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
21 * Bug fixes, suggestions and comments should be sent to:
22 * dkocher@cyberduck.io
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">
65 <condition property="platform" value="windows">
66 <os family="windows"/>
68 <condition property="platform" value="linux">
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"/>
81 <fileset dir="${lib.ext}">
82 <include name="*.jar"/>
86 <path id="build.classpath">
87 <!-- Include all libraries -->
88 <fileset dir="${lib}">
89 <include name="*.jar"/>
93 <target name="init" depends="timestamp">
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=" ---------------------------------------------------------------"/>
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"/>
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">
120 <format property="touch.time"
121 pattern="dd/MM/yyyy hh:mm aa"
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"/>
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}"
142 <property name="revision" value="${revision}"/>
143 <echo message="revision=${revision}"/>
144 <buildnumber file="build.number"/>
145 <echo message="Build number ${build.number}"/>
148 <target name="compile" depends="init" description="Compile the source tree">
150 includeantruntime="false"
154 target="${build.compile.target}"
155 source="${build.compile.target}"
159 destdir="${build.classes}">
160 <classpath refid="build.classpath"/>
164 <target name="archive" depends="compile, manifest" description="Create archives">
165 <jar jarfile="${build}/config-${version}.jar"
167 manifest="${build}/MANIFEST.MF">
168 <fileset dir="${lib}">
169 <include name="mime.types"/>
170 <include name="log4j-*.xml"/>
173 <jar jarfile="${build}/core-${version}.jar"
175 manifest="${build}/MANIFEST.MF">
176 <fileset dir="${build.classes}">
177 <include name="ch/cyberduck/core/**/*.class"/>
180 <jar jarfile="${build}/fs-${version}.jar"
182 manifest="${build}/MANIFEST.MF">
183 <fileset dir="${build.classes}">
184 <include name="ch/cyberduck/fs/**/*.class"/>
187 <jar jarfile="${build}/ui-${version}.jar"
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"/>
195 <jar jarfile="${build}/binding-${version}.jar"
197 manifest="${build}/MANIFEST.MF">
198 <fileset dir="${build.classes}/">
199 <include name="ch/cyberduck/binding/**/*.class"/>
202 <jar jarfile="${build}/cocoa-${version}.jar"
204 manifest="${build}/MANIFEST.MF">
205 <fileset dir="${build.classes}/">
206 <include name="ch/cyberduck/ui/cocoa/**/*.class"/>
210 <taskdef resource="net/sf/antcontrib/antcontrib.properties">
211 <classpath path="${lib.ext}/ant-contrib-1.0b3.jar"/>
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"/>
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 -->
224 <fileset dir="${build}" includes="*.jar"/>
227 <jar jarfile="${build}/cli-${version}.jar"
229 <fileset dir="${build.classes}">
230 <include name="ch/cyberduck/cli/*.class"/>
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}"/>
243 <target name="doc" depends="init" description="Generate Javadoc">
244 <mkdir dir="${doc}"/>
245 <javadoc packagenames="ch.cyberduck.*,com.*,org.*"
246 sourcepath="${source}"
251 windowtitle="${app.name} API"
252 doctitle="${app.name}"
253 bottom="${copyright}">
254 <classpath refid="build.classpath"/>
258 <target name="clean" description="Delete compiled classes, jar files, jni libraries and application bundle">
259 <delete dir="${build}"/>
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}"/>
271 <target name="test-compile" depends="build">
274 includeantruntime="false"
276 target="${build.compile.target}"
277 source="${build.compile.target}"
279 srcdir="${unittests}"
280 destdir="${build.unittests}"
281 includes="**/*.java">
282 <classpath refid="test.classpath"/>
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"/>
291 <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
292 <classpath path="${lib.ext}/jacocoant.jar"/>
294 <copy todir="${build}">
295 <fileset dir="${lib}">
296 <!-- Include libjnidispatch.dylib -->
297 <include name="*.dylib"/>
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"/>
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"
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}"/>
319 <syspropertyset refid="test.systemproperties"/>
320 <sysproperty key="java.library.path" value="${build}"/>
321 <sysproperty key="jna.library.path" value="${build}"/>
324 <junitreport todir="${build.unittests.reports}/html">
325 <fileset dir="${build.unittests.reports}">
326 <include name="TEST-*.xml"/>
328 <report format="frames" todir="${build.unittests.reports}/html"/>
330 <!--<fail message="Test failure detected" if="test.failed"/>-->
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"/>
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&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"/>