Release 4.4.5
[cyberduck.git] / build-windows.xml
blob01f71701634ecf0c6a1bf49c5fde7633e768a3c2
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.
20  *
21  *      Bug fixes, suggestions and comments should be sent to:
22  *      dkocher@cyberduck.io
23  -->
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)}"/>
31     </condition>
32     <condition property="programFiles" value="${env.ProgramFiles}">
33         <available file="${env.ProgramFiles}"/>
34     </condition>
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"/>
45     </taskdef>
46     <taskdef name="msbuild" classname="org.apache.ant.dotnet.build.MSBuildTask">
47         <classpath path="${lib.ext}/ant-dotnet-1.0.jar"/>
48     </taskdef>
49     <taskdef resource="net/sf/antcontrib/antcontrib.properties">
50         <classpath path="${lib.ext}/ant-contrib-1.0b3.jar"/>
51     </taskdef>
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}"
57                        regexp="([\d]+).*"
58                        select="\1"/>
60         <propertyregex property="minor"
61                        input="${cyberduck.version.minor}.0"
62                        regexp="(\d)([\w\d]*)\.(\d)(\.\d)?"
63                        select="\1.\3"/>
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})"/>
72     </target>
74     <target name="build" depends="dll">
75         <copy todir="${build.deploy}">
76             <fileset dir=".">
77                 <include name="cyberduck-document.ico"/>
78             </fileset>
79         </copy>
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}"/>
89         </msbuild>
90     </target>
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"/>
104             </fileset>
105         </ikvmc>
106     </target>
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"
113              passphrase="">
114         </scp>
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"
118              passphrase="">
119         </scp>
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"
124              passphrase="">
125         </scp>
126     </target>
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"
132              passphrase="">
133         </scp>
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"
137              passphrase="">
138         </scp>
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"
143              passphrase="">
144         </scp>
145     </target>
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"
151              passphrase="">
152         </scp>
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"
156              passphrase="">
157         </scp>
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"
162              passphrase="">
163         </scp>
164     </target>
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"/>
171         </antcall>
172     </target>
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"/>
179         </antcall>
180     </target>
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"/>
187         </antcall>
188     </target>
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}"/>
201         </replace>
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"/>
208             <arg value="/bwu"/>
209             <arg value="/bu"/>
210             <arg value="-add=${absbuild}/version.xml"/>
211         </exec>
213         <!-- overwrite generated wyUpdate.exe -->
214         <copy file="${www.update}/Updater.exe" todir="${build}/update" overwrite="true"/>
216         <antcall target="setup"/>
217     </target>
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"/>
229         </msbuild>
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"'/>
235         </exec>
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}"/>
240         </replace>
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"/>
249             <arg value="/bu"/>
250             <arg value="-add=${absbuild}/updater.xml"/>
251         </exec>
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"
257              passphrase="">
258         </scp>
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"
263              passphrase="">
264         </scp>
266     </target>
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"/>
275         </exec>
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}"'/>
278         </exec>
279     </target>
280 </project>