source: other-projects/expeditee-release-kits/kits/rke/ant-scripts/wrap.xml@ 29353

Last change on this file since 29353 was 29353, checked in by ak19, 10 years ago

Format the expeditee DMG file as read-only, since applications are not supposed to be extracted inside their DMG. This will also avoid the problem of the DMG not having enough space to install in, which was worked around in #29339. It may be necessary to make the installer script check if the current filesystem is read-only and display a help message.

File size: 9.9 KB
RevLine 
[28695]1<?xml version="1.0" encoding="utf-8" ?>
2<project name="wrap" default="wrap">
3
4 <target name="wrap">
5 <!-- create products directory -->
6 <mkdir dir="products"/>
7
8 <!-- (windows) -->
9 <if><bool><equals arg1="${rk.os}" arg2="windows"/></bool>
10
11 <!--create a directory to build the wrapped installer in -->
12 <mkdir dir="wrapped-installer"/>
13
14 <!-- copy wrapper source into place -->
15 <copy todir="wrapped-installer" overwrite="true">
16 <fileset dir="${rk.home}/shared/windows/wrapper"/>
17 <fileset file="${rk.home}/shared/core/icon/icon.ico"/>
18 <fileset dir="${rk.home}/shared/core/search4j" includes="libsearch4j.cpp,libsearch4j.h"/>
19 </copy>
20
21 <!-- substitute in concrete values -->
22 <rsr file="wrapped-installer/wrapper.cpp">
23 <job pattern="@projectname@" replacement="${projectname}"/>
[28717]24 <job pattern="@java.installer@" replacement="${java.installer}"/>
[28695]25 <job pattern="@java.min.version@" replacement="${java.min.version}"/>
[28725]26 <job pattern="@bundled.version.java@" replacement="${bundled.version.java}"/>
[28695]27 <job pattern="@java.extracted@" replacement="${java.extracted}"/>
28 </rsr>
29
30 <!-- get the template resource script -->
31 <copy todir="wrapped-installer" file="${rk.home}/shared/windows/wrapper/wrapper.rc" overwrite="true"/>
32
33 <!-- split the resources into chunks, creating a resource script of the chunks -->
34 <rsplit
[28717]35 resource="${rk.home}/shared/windows/wrapper/${java.installer}"
[28695]36 outputDir="wrapped-installer"
37 resourceScript="wrapped-installer/wrapper.rc"
38 resourceName="JAVA"
39 resourceType="EXE"
40 chunkSize="${resources.chunksize}"/>
41 <rsplit
42 resource="installer/${projectname}-${version}${version-extra}-${os.suffix}.jar"
43 outputDir="wrapped-installer"
44 resourceScript="wrapped-installer/wrapper.rc"
45 resourceName="JAR"
46 resourceType="JAR"
47 chunkSize="${resources.chunksize}"
48 />
49
50 <!-- compile the resources -->
51 <exec executable="rc" dir="wrapped-installer">
52 <arg line="wrapper.rc"/>
53 </exec>
54
55 <!-- compile the wrapper -->
56 <exec executable="cl" dir="wrapped-installer">
57 <arg line="/c -GX /DWINDOWS=yes libsearch4j.cpp /out:libsearch4j.obj"/>
58 </exec>
59 <exec executable="cl" dir="wrapped-installer">
60 <arg line="/c -GX /DWINDOWS=yes wrapper.cpp /out:wrapper.obj"/>
61 </exec>
62
63 <!-- link wrapper -->
64 <exec executable="link" dir="wrapped-installer">
65 <arg line="/OUT:..\products\${projectname}-${version}${version-extra}-${os.suffix}.exe gdi32.lib advapi32.lib shell32.lib user32.lib libsearch4j.obj wrapper.obj wrapper.res"/>
66 </exec>
67
[28728]68 <!-- (linux) -->
69 <else><if><bool><equals arg1="${rk.os}" arg2="linux"/></bool>
[28695]70 <!-- create the build directory -->
71 <mkdir dir="wrapped-installer"/>
72
73 <!-- copy the source into place -->
74 <copy todir="wrapped-installer" overwrite="true">
[28728]75 <fileset file="${rk.home}/shared/linux/wrapper.cpp"/>
[28695]76 <fileset dir="${rk.home}/shared/core/search4j" includes="libsearch4j.cpp,libsearch4j.h"/>
77 </copy>
78
79 <!-- copy bundled files into place -->
[28728]80 <copy todir="wrapped-installer" file="${rk.home}/shared/linux/${java.installer}"/>
[28695]81 <copy tofile="wrapped-installer/${projectname}.jar" file="installer/${projectname}-${version}${version-extra}-${os.suffix}.jar"/>
82
83 <!-- substitute in real values -->
84 <rsr file="wrapped-installer/wrapper.cpp">
85 <job pattern="@projectname@" replacement="${projectname}"/>
[28717]86 <job pattern="@java.installer@" replacement="${java.installer}"/>
[28695]87 <job pattern="@java.extracted@" replacement="${java.extracted}"/>
88 <job pattern="@java.min.version@" replacement="${java.min.version}"/>
89 </rsr>
90
91 <!-- create an object file (extension .o) for each file to bundle -->
92 <if><bool><equals arg1="${x64}" arg2="true"/></bool>
93 <exec executable="/usr/bin/objcopy" dir="wrapped-installer">
94 <arg line="-I binary -O elf64-x86-64 -B i386 --redefine-sym _binary_${projectname}_jar_start=${projectname}jar --readonly-text ${projectname}.jar ${projectname}.jar.o"/>
95 </exec>
96 <exec executable="/usr/bin/objcopy" dir="wrapped-installer">
[28717]97 <arg line="-I binary -O elf64-x86-64 -B i386 --redefine-sym _binary_${java.installer}_start=java --readonly-text ${java.installer} java.o"/>
[28695]98 </exec>
99
100 <else>
101 <exec executable="/usr/bin/objcopy" dir="wrapped-installer" failonerror="true">
102 <arg line="-I binary -O elf32-i386 -B i386 --redefine-sym _binary_${projectname}_jar_start=${projectname}jar --readonly-text ${projectname}.jar ${projectname}.jar.o"/>
103 </exec>
104 <exec executable="/usr/bin/objcopy" dir="wrapped-installer" failonerror="true">
[28717]105 <arg line="-I binary -O elf32-i386 -B i386 --redefine-sym _binary_${java.installer}_start=java --readonly-text ${java.installer} java.o"/>
[28695]106 </exec>
107 </else>
108 </if>
109
110 <!-- compile libsearch4j -->
111 <exec executable="g++" dir="wrapped-installer">
112 <arg line="-Wall -static -static-libgcc -c -o libsearch4j.o libsearch4j.cpp"/>
113 </exec>
114
115 <!-- figure out jar size (web jar) -->
116 <exec executable="ls" dir="wrapped-installer" outputproperty="project.jar.ls"><arg line="-l ${projectname}.jar"/></exec>
117 <exec executable="sed" inputstring="${project.jar.ls}" outputproperty="project.jar.size"><arg line="-e 's/^[^\ ]*\ *[^\ ]*\ *[^\ ]*\ *[^\ ]*\ *\([0-9]*\).*$/\1/g'"/></exec>
118
119 <!-- figure out java size -->
[28717]120 <exec executable="ls" dir="wrapped-installer" outputproperty="java.ls"><arg line="-l ${java.installer}"/></exec>
[28695]121 <exec executable="sed" inputstring="${java.ls}" outputproperty="java.size"><arg line="-e 's/^[^\ ]*\ *[^\ ]*\ *[^\ ]*\ *[^\ ]*\ *\([0-9]*\).*$/\1/g'"/></exec>
122
123 <!-- creating wrapper header file -->
124 <delete file="wrapper.h"/>
125 <!-- ensure no tabs/whitespaces in front of each line in the .h file owing to indentation here -->
126 <echo file="wrapped-installer/wrapper.h">extern const char ${projectname}jar[${project.jar.size}];
127extern const char java[${java.size}];
128#define java_is_bundled yes
129</echo>
130
131 <!-- compile the wrapper program -->
132 <exec executable="g++" dir="wrapped-installer" failonerror="true">
133 <arg line="-Wall -static -static-libgcc -c -o wrapper.o wrapper.cpp"/>
134 </exec>
135
136 <!-- link the compiled code and bundled files -->
137 <exec executable="g++" dir="wrapped-installer">
[28728]138 <arg line="-static -static-libgcc -o ../products/${projectname}-${version}${version-extra}-linux${extension-x64} wrapper.o libsearch4j.o ${projectname}.jar.o java.o"/>
[28695]139 </exec>
140
141 <!-- (mac) -->
[28728]142 <else><if><bool><equals arg1="${rk.os}" arg2="mac"/></bool>
[28695]143
[28728]144 <!-- create and setup the build directory -->
145 <mkdir dir="wrapped-installer"/>
146
[28695]147 <!-- create app for main installer -->
[28738]148 <copy todir="wrapped-installer/${projectname}${version}${version-extra}.app">
149 <fileset dir="${rk.home}/shared/mac/Wrapper.app"/>
150 </copy>
[28695]151 <copy todir="wrapped-installer/${projectname}${version}${version-extra}.app/Contents/Resources" file="${rk.home}/shared/core/icon/icon.icns"/>
[28728]152 <chmod file="wrapped-installer/${projectname}${version}${version-extra}.app/Contents/MacOS/Expeditee" perm="ug+x"/>
[28695]153
154 <!-- copy bundled files -->
[28738]155 <copy todir="wrapped-installer/${projectname}${version}${version-extra}.app/Contents/Resources">
156 <fileset dir="compiled"/>
157 </copy>
[28728]158 <copy tofile="wrapped-installer/${projectname}${version}${version-extra}.app/Contents/Resources/jre_bin" file="${rk.home}/shared/mac/${java.installer}"/>
[28695]159
160 <!-- substitute in real values -->
161 <rsr file="wrapped-installer/${projectname}${version}${version-extra}.app/Contents/Info.plist">
162 <job pattern="@projectname@" replacement="${projectname}"/>
163 <job pattern="@version@" replacement="${version}${version-extra}"/>
164 </rsr>
165
[28738]166
[28695]167 <!-- turn app into a dmg -->
168
169 <!-- get size of app -->
[28738]170 <exec executable="du" dir="wrapped-installer" outputproperty="app.du">
171 <arg line="-ks ${projectname}${version}${version-extra}.app"/>
172 </exec>
173 <exec executable="sed" inputstring="${app.du}" outputproperty="app.size">
174 <arg line="-e 's/^\([0-9]*\).*$/\1/g'"/>
175 </exec>
[28695]176 <math result="dmg.size" operand1="${app.size}" operation="+" operand2="${dmg.overhead}" datatype="int"/>
[29353]177 <!-- this allows space for extracting the jre inside the dmg -->
178 <!--
179 <math result="java.kbsize" operand1="${component.bytesize.java}" operation="/" operand2="1024" datatype="int"/>
180 <math result="dmg.size" operand1="${dmg.size}" operation="+" operand2="${java.kbsize}" datatype="int"/>
181 -->
[28695]182
183 <!-- create disk image -->
184 <property name="dmg.name" value="${projectname}-${version}${version-extra}-${os.suffix}"/>
[28738]185 <exec dir="products" executable="hdiutil" failonerror="true">
[28805]186 <arg line="create -ov -size ${dmg.size}k -fs HFS+ -volname ${dmg.name} ${dmg.name}.dmg"/>
[28738]187 </exec>
[28695]188 <!-- mount it -->
[28738]189 <exec executable="hdiutil" dir="products" failonerror="true">
[28805]190 <arg line="attach ${dmg.name}.dmg"/>
[28738]191 </exec>
[28695]192 <!-- copy file into it -->
[28738]193 <exec executable="cp">
194 <arg line="-r wrapped-installer/${projectname}${version}${version-extra}.app /Volumes/${dmg.name}"/>
195 </exec>
196 <!-- add background image, icon and .DS_STORE -->
197 <copy file="${rk.home}/shared/mac/dmg-bg.png"
[28741]198 tofile="/Volumes/${dmg.name}/.background.png"
[28738]199 overwrite="true"/>
200 <copy file="${rk.home}/shared/core/icon/icon.icns"
201 tofile="/Volumes/${dmg.name}/.VolumeIcon.icns"
202 overwrite="true"/>
203 <copy file="${rk.home}/shared/mac/DS_Store"
204 tofile="/Volumes/${dmg.name}/.DS_Store"
205 overwrite="true"/>
[28739]206 <!-- Set icon -->
207 <exec executable="SetFile">
208 <arg line="-a C /Volumes/${dmg.name}"/>
209 </exec>
[28738]210 <!-- add symlink to applications folder -->
211 <symlink link="/Volumes/${dmg.name}" resource="/Applications"/>
[28695]212 <!-- unmount it-->
[28738]213 <exec executable="hdiutil" failonerror="true">
214 <arg line="detach /Volumes/${dmg.name}"/>
215 </exec>
[29353]216 <!-- format as readonly -->
217 <exec executable="hdiutil" failonerror="true">
218 <arg line="convert ${dmg.name}.dmg -format UDRO -o ${dmg.name}.dmg"/>
219 </exec>
220
[28728]221 </if></else></if></else></if>
[28695]222
223 </target>
224
225</project>
226
Note: See TracBrowser for help on using the repository browser.