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.
21 * Bug fixes, suggestions and comments should be sent to:
22 * dkocher@cyberduck.io
24 <project name="Cyberduck for Windows" basedir=".">
26 <import file="build.xml"/>
28 <!-- try to detect the process architecture (32/64bit) -->
29 <condition property="programFiles" value="${env.ProgramFiles(x86)}">
30 <available file="${env.ProgramFiles(x86)}"/>
32 <condition property="programFiles" value="${env.ProgramFiles}">
33 <available file="${env.ProgramFiles}"/>
36 <property name="architecture" value="x86"/>
37 <property name="build.deploy" value="${build}/${configuration}/${architecture}"/>
38 <property name="setup" value="${home}/setup"/>
39 <property name="nsis.home" value="${programFiles}/NSIS"/>
40 <property name="winsdk.home" value="${programFiles}/Windows Kits/8.0/bin/x86"/>
41 <property name="wybuild.home" value="${programFiles}/wyBuild"/>
43 <taskdef name="ikvmc" classname="net.ikvm.ant.IkvmcTask">
44 <classpath path="${lib.ext}/ant-ikvmc.0.5.jar"/>
46 <taskdef name="msbuild" classname="org.apache.ant.dotnet.build.MSBuildTask">
47 <classpath path="${lib.ext}/ant-dotnet-1.0.jar"/>
49 <taskdef resource="net/sf/antcontrib/antcontrib.properties">
50 <classpath path="${lib.ext}/ant-contrib-1.0b3.jar"/>
53 <target name="version" depends="revision">
54 <!-- remove any non-digits (e.g. a trailing M) from the current revision -->
55 <propertyregex property="svn.revision.stripped"
56 input="${svn.revision}"
60 <propertyregex property="minor"
61 input="${cyberduck.version.minor}.0"
62 regexp="(\d)([\w\d]*)\.(\d)(\.\d)?"
65 <property name="version"
66 value="${cyberduck.version.major}.${minor}.${svn.revision.stripped}"/>
67 <property name="shortversion"
68 value="${cyberduck.version.major}.${cyberduck.version.minor} (${svn.revision.stripped})"/>
69 <!-- pattern = "[revision] ([major].[minor])" -->
70 <property name="updaterversion"
71 value="${svn.revision.stripped} (${cyberduck.version.major}.${cyberduck.version.minor})"/>
74 <target name="build" depends="dll">
75 <copy todir="${build.deploy}">
77 <include name="cyberduck-document.ico"/>
81 <msbuild buildfile="source/ch/cyberduck/Cyberduck.csproj">
82 <target name="Clean"/>
83 <target name="Build"/>
85 <property name="Version" value="${version}"/>
86 <property name="ShortVersion" value="${shortversion}"/>
87 <property name="Configuration" value="${configuration}"/>
88 <property name="Platform" value="${architecture}"/>
92 <target name="dll" depends="version, archive">
93 <ikvmc target="library" out="${build}/core.dll" home="${ikvm.home}"
94 version="${version}" debug="false" verbose="true">
95 <fileset file="${build}/core.jar"/>
96 <fileset file="${build}/ui.jar"/>
97 <fileset dir="${lib}">
98 <include name="*.jar"/>
99 <exclude name="jna-*.jar"/>
100 <exclude name="asm-*.jar"/>
101 <exclude name="cglib-*.jar"/>
102 <exclude name="dns_sd.jar"/>
103 <exclude name="rococoa-*.jar"/>
108 <target name="release" depends="clean, package-release">
109 <antcall target="confirm"/>
110 <scp file="${setup.file}"
111 todir="dkocher@update.cyberduck.io:./update.cyberduck.io/windows"
112 keyfile="${user.home}/.ssh/update.cyberduck.io-rsa"
115 <scp file="${build}/update/${app.name}-all-${updaterversion}.wyu"
116 todir="dkocher@update.cyberduck.io:./update.cyberduck.io/windows/update"
117 keyfile="${user.home}/.ssh/update.cyberduck.io-rsa"
120 <!-- Changelog Release - version.cyberduck.io -->
121 <scp file="${build}/update/changelog.wys"
122 todir="dkocher@version.cyberduck.io:./version.cyberduck.io/"
123 keyfile="${user.home}/.ssh/version.cyberduck.io-rsa"
128 <target name="nightly" depends="clean, package-nightly">
129 <scp file="${setup.file}"
130 todir="dkocher@update.cyberduck.io:./update.cyberduck.io/windows/nightly"
131 keyfile="${user.home}/.ssh/update.cyberduck.io-rsa"
134 <scp file="${build}/update/${app.name}-all-${updaterversion}.wyu"
135 todir="dkocher@update.cyberduck.io:./update.cyberduck.io/windows/nightly/update"
136 keyfile="${user.home}/.ssh/update.cyberduck.io-rsa"
139 <!-- Changelog Release - version.cyberduck.io -->
140 <scp file="${build}/update/changelog.wys"
141 todir="dkocher@version.cyberduck.io:./version.cyberduck.io/nightly"
142 keyfile="${user.home}/.ssh/version.cyberduck.io-rsa"
147 <target name="beta" depends="clean, package-beta">
148 <scp file="${setup.file}"
149 todir="dkocher@update.cyberduck.io:./update.cyberduck.io/windows/beta"
150 keyfile="${user.home}/.ssh/update.cyberduck.io-rsa"
153 <scp file="${build}/update/${app.name}-all-${updaterversion}.wyu"
154 todir="dkocher@update.cyberduck.io:./update.cyberduck.io/windows/beta/update"
155 keyfile="${user.home}/.ssh/update.cyberduck.io-rsa"
158 <!-- Changelog Release - version.cyberduck.io -->
159 <scp file="${build}/update/changelog.wys"
160 todir="dkocher@version.cyberduck.io:./version.cyberduck.io/beta"
161 keyfile="${user.home}/.ssh/version.cyberduck.io-rsa"
166 <target name="package-release" depends="version">
167 <property name="setup.file"
168 location="${build}/${app.name}-Installer-${cyberduck.version.major}.${cyberduck.version.minor}.exe"/>
169 <antcall target="package">
170 <param name="changelog.wyp" value="${www.update}/changelog.wyp"/>
174 <target name="package-beta" depends="version">
175 <property name="setup.file"
176 location="${build}/${app.name}-Installer-${cyberduck.version.major}.${cyberduck.version.minor}.${svn.revision}.exe"/>
177 <antcall target="package">
178 <param name="changelog.wyp" value="${www.update}/changelog-beta.wyp"/>
182 <target name="package-nightly" depends="version">
183 <property name="setup.file"
184 location="${build}/${app.name}-Installer-${cyberduck.version.major}.${cyberduck.version.minor}.${svn.revision}.exe"/>
185 <antcall target="package">
186 <param name="changelog.wyp" value="${www.update}/changelog-nightly.wyp"/>
190 <target name="package" depends="dll, build">
191 <loadfile property="changes" srcFile="${www.update}/changelog.txt"/>
193 <property name="buildpath" value="${configuration}/${architecture}"/>
194 <property name="absbuild" location="${build}"/>
196 <copy file="${www.update}/version.xml" todir="${build}" overwrite="true"/>
197 <replace file="${build}/version.xml" summary="true" encoding="UTF-8">
198 <replacefilter token="_VERSION_" value="${updaterversion}"/>
199 <replacefilter token="_CHANGES_" value="${changes}"/>
200 <replacefilter token="_BUILDPATH_" value="${buildpath}"/>
203 <!-- copy wyUpdate project over to the build directory -->
204 <copy file="${changelog.wyp}" tofile="${build}/changelog.wyp" overwrite="true"/>
206 <exec executable="${wybuild.home}/wybuild.cmd.exe" failonerror="true" dir="${absbuild}">
207 <arg value="${absbuild}/changelog.wyp"/>
210 <arg value="-add=${absbuild}/version.xml"/>
213 <!-- overwrite generated wyUpdate.exe -->
214 <copy file="${www.update}/Updater.exe" todir="${build}/update" overwrite="true"/>
216 <antcall target="setup"/>
219 <target name="updater-release">
221 <property name="absbuild" location="${build}"/>
223 <!-- Updater .NET4 build -->
224 <msbuild buildfile="${wyupdate.home}/wyUpdate.NET4.csproj">
225 <target name="Clean"/>
226 <target name="Build"/>
227 <property name="Configuration" value="Release"/>
228 <property name="Platform" value="x86"/>
231 <copy file="${wyupdate.home}/bin4/Release/wyUpdate.exe" tofile="${www.update}/Updater.exe"/>
232 <!-- sign wyUpdate.exe with our code signing certificate -->
233 <exec executable="${winsdk.home}/signtool.exe" failonerror="true">
234 <arg line='sign /r "StartCom" /t http://timestamp.globalsign.com/scripts/timestamp.dll "${www.update}/Updater.exe"'/>
237 <copy file="${www.update}/updater.xml" todir="${build}" overwrite="true"/>
238 <replace file="${build}/updater.xml" summary="true" encoding="UTF-8">
239 <replacefilter token="_VERSION_" value="${updater.version}"/>
242 <!-- copy wyUpdate project over to the build directory -->
243 <copy file="${www.update}/updater.wyp" todir="${build}" overwrite="true"/>
245 <copy file="${www.update}/Updater.exe" todir="${build}/update" overwrite="true"/>
247 <exec executable="${wybuild.home}/wybuild.cmd.exe" failonerror="true">
248 <arg value="${build}/updater.wyp"/>
250 <arg value="-add=${absbuild}/updater.xml"/>
253 <antcall target="confirm"/>
254 <scp file="${build}/update/${app.name}Updater-all-${updater.version}.wyu"
255 todir="dkocher@update.cyberduck.io:./update.cyberduck.io/windows/update"
256 keyfile="${user.home}/.ssh/update.cyberduck.io-rsa"
259 <!-- Changelog Release - version.cyberduck.io -->
260 <scp file="${build}/update/updater.wys"
261 todir="dkocher@version.cyberduck.io:./version.cyberduck.io/"
262 keyfile="${user.home}/.ssh/version.cyberduck.io-rsa"
268 <target name="setup">
269 <property name="setup.basedir" location="${build.deploy}"/>
270 <exec executable="${nsis.home}/makensis" failonerror="true">
271 <arg value="/DBASEDIR=${setup.basedir}"/>
272 <arg value="/DPRODUCT_VERSION=${shortversion}"/>
273 <arg value="/DSETUPFILE=${setup.file}"/>
274 <arg value="${setup}/cyberduck.nsi"/>
276 <exec executable="${winsdk.home}/signtool.exe" failonerror="true">
277 <arg line='sign /r "StartCom" /tr http://timestamp.globalsign.com/scripts/timestamp.dll "${setup.file}"'/>