]>
Commit | Line | Data |
---|---|---|
a04be1e3 JS |
1 | #!/bin/sh |
2 | ||
3 | # Create an Inno Setup installer on MSW. It requires MSYS. | |
4 | # | |
5 | # Example: | |
6 | # | |
7 | # distrib/msw/createsetup.sh | |
8 | # | |
9 | # Prerequisites: | |
10 | # | |
11 | # (1) Change VERSION to the desired wxWidgets version. | |
12 | # (2) Change APPDIR to the root of a wxWidgets distribution containing | |
13 | # this script. | |
14 | # (3) Change DESTDIR (if necessary) to a directory for creating the | |
15 | # the installer. | |
16 | # (4) Change SETUPCOMPILER to where Inno Setup is installed. | |
17 | # (6) Make sure 'unzip' is in your path. | |
18 | # (7) Make sure wxMSW-x.y.z.zip and wxWidgets-x.y.z-CHM.zip are in | |
19 | # the directory $DESTDIR. | |
20 | # (8) Run createsetup.sh. | |
21 | # | |
22 | # The necessary script files are: | |
23 | # | |
24 | # distrib/msw/createsetup.sh ; The main script | |
25 | # distrib/msw/wxwidgets_in.iss ; The input for making the .iss | |
26 | # | |
27 | ||
28 | #------------------------------------------------------------------------- | |
29 | # The version | |
30 | #------------------------------------------------------------------------- | |
31 | ||
32 | VERSION=2.7.2 | |
33 | ||
34 | #------------------------------------------------------------------------- | |
35 | # The application title | |
36 | #------------------------------------------------------------------------- | |
37 | ||
38 | APPTITLE="wxWidgets" | |
39 | ||
40 | #------------------------------------------------------------------------- | |
41 | # The application author (copyright holder) | |
42 | #------------------------------------------------------------------------- | |
43 | ||
44 | AUTHOR="The wxWidgets Team" | |
45 | ||
46 | #------------------------------------------------------------------------- | |
47 | # The application vendor (organisation) | |
48 | #------------------------------------------------------------------------- | |
49 | ||
50 | VENDOR="wxWidgets" | |
51 | ||
52 | #------------------------------------------------------------------------- | |
53 | # The top-level directory of the application source tree | |
54 | #------------------------------------------------------------------------- | |
55 | ||
56 | APPDIR=c:/wx2dev/wxWindows | |
57 | ||
58 | #------------------------------------------------------------------------- | |
59 | # The destination directory of the setup | |
60 | #------------------------------------------------------------------------- | |
61 | ||
62 | DESTDIR=$APPDIR/deliver | |
63 | ||
64 | #------------------------------------------------------------------------- | |
65 | # The temporary image directory to use when preparing the setup | |
66 | #------------------------------------------------------------------------- | |
67 | ||
68 | SETUPIMAGEDIR=$DESTDIR/wxWidgets-$VERSION | |
69 | ||
70 | #------------------------------------------------------------------------- | |
71 | # The location of the setup script | |
72 | #------------------------------------------------------------------------- | |
73 | ||
74 | SETUPSCRIPTNAME=$APPDIR/distrib/msw/wxwidgets.iss | |
75 | SETUPSCRIPTNAME_IN=$APPDIR/distrib/msw/wxwidgets_in.iss | |
76 | ||
77 | #------------------------------------------------------------------------- | |
78 | # The location of the zip files to be used to create the setup | |
79 | #------------------------------------------------------------------------- | |
80 | ||
81 | WXMSWARCHIVE=$DESTDIR/wxMSW-$VERSION.zip | |
82 | WXCHMARCHIVE=$DESTDIR/wxWidgets-$VERSION-CHM.zip | |
83 | ||
84 | #------------------------------------------------------------------------- | |
85 | # The locations of the readme and license files | |
86 | #------------------------------------------------------------------------- | |
87 | ||
88 | READMEFILE=$SETUPIMAGEDIR/docs/readme.txt | |
89 | READMEAFTERFILE=$SETUPIMAGEDIR/docs/msw/install.txt | |
90 | LICENSEFILE=$SETUPIMAGEDIR/docs/licence.txt | |
91 | ||
92 | #------------------------------------------------------------------------- | |
93 | # The location of the setup compiler | |
94 | #------------------------------------------------------------------------- | |
95 | ||
96 | SETUPCOMPILER="c:/Program Files/Inno Setup 5/compil32.exe" | |
97 | ||
98 | #------------------------------------------------------------------------- | |
99 | # Misc | |
100 | #------------------------------------------------------------------------- | |
101 | ||
102 | # If your zip accepts Cygwin-style paths, then | |
103 | # use cygpath, else substitute echo | |
104 | CYGPATHPROG=cygpath | |
105 | #CYGPATHPROG=echo | |
106 | PROGNAME=$0 | |
107 | SCRIPTDIR=$WXWIN/distrib/msw | |
108 | ZIPFLAGS= | |
109 | ||
110 | # Seds the file represented by the 1st arg, using the expression passed as the 2nd arg. | |
111 | doreplace() | |
112 | { | |
113 | thefile=$1 | |
114 | theexpr=$2 | |
115 | ||
116 | if [ -f $thefile ]; then | |
117 | sed -e "$theexpr" < $thefile > $thefile.tmp | |
118 | mv $thefile.tmp $thefile | |
119 | else | |
120 | echo "*** $thefile not found." | |
121 | fi | |
122 | } | |
123 | ||
124 | unix2dosname() | |
125 | { | |
126 | echo $1 | sed -e "s/\//\\\\\\\/g" > /tmp/filename.tmp | |
127 | RETVALUE=`cat /tmp/filename.tmp` | |
128 | rm -f /tmp/filename.tmp | |
129 | } | |
130 | ||
131 | unix2dosname2() | |
132 | { | |
133 | echo $1 | sed -e "s/\//\\\\/g" > /tmp/filename.tmp | |
134 | RETVALUE=`cat /tmp/filename.tmp` | |
135 | rm -f /tmp/filename.tmp | |
136 | } | |
137 | ||
138 | doinit() | |
139 | { | |
140 | if [ "$VERBOSE" != "1" ]; then | |
141 | ZIPFLAGS=-q | |
142 | fi | |
143 | } | |
144 | ||
145 | # Do the actual spin. | |
146 | ||
147 | dospinsetup() | |
148 | { | |
149 | mkdir -p $DESTDIR | |
150 | cd $DESTDIR | |
151 | ||
152 | echo Now in `pwd` | |
153 | ||
154 | rm -f -r wxWidgets-$VERSION | |
155 | rm -f -r wxMSW-$VERSION | |
156 | ||
157 | echo Unzipping the wxMSW files... | |
158 | ||
159 | unzip $ZIPFLAGS $WXMSWARCHIVE | |
160 | ||
161 | # This 'pause' is only necessary because on my system, the following 'mv' seems to fail | |
162 | # without it. | |
163 | echo About to rename wxMSW-$VERSION to wxWidgets-$VERSION. Press Return to continue. | |
164 | read ch | |
165 | ||
166 | mv wxMSW-$VERSION wxWidgets-$VERSION | |
167 | ||
168 | if [ ! -d wxWidgets-$VERSION ]; then | |
169 | echo *** Could not find wxWidgets-$VERSION: exiting. | |
170 | exit | |
171 | fi | |
172 | ||
173 | echo Unzipping the CHM files... | |
174 | ||
175 | cd wxWidgets-$VERSION | |
176 | unzip $ZIPFLAGS $WXCHMARCHIVE | |
177 | ||
178 | echo Copying readme files... | |
179 | cp docs/msw/readme.txt README-MSW.txt | |
180 | cp docs/msw/install.txt INSTALL-MSW.txt | |
181 | cp docs/licence.txt LICENCE.txt | |
182 | cp docs/lgpl.txt COPYING.LIB | |
183 | cp docs/changes.txt CHANGES.txt | |
184 | cp docs/readme.txt README.txt | |
185 | ||
186 | # Now cp some binary files to 'bin' | |
187 | # TODO | |
188 | # if [ ! -d bin ]; then | |
189 | # mkdir bin | |
190 | # fi | |
191 | # cp $APPDIR/bin/tex2rtf.exe bin | |
192 | # cp $APPDIR/bin/tex2rtf.chm bin | |
193 | # cp $APPDIR/bin/widgets.exe bin | |
194 | # cp $APPDIR/bin/life.exe bin | |
195 | # cp $APPDIR/demos/life/breeder.lif bin | |
196 | # cp $APPDIR/docs/htmlhelp/tex2rtf.chm bin | |
197 | ||
198 | # Now replace %VERSION% with the real application version, and other | |
199 | # variables | |
200 | ||
201 | cp $SETUPSCRIPTNAME_IN $SETUPSCRIPTNAME | |
202 | ||
203 | echo Replacing variables in the setup script | |
204 | doreplace $SETUPSCRIPTNAME "s/%VERSION%/$VERSION/g" | |
205 | doreplace $SETUPSCRIPTNAME "s/%COPYRIGHTHOLDER%/$AUTHOR/g" | |
206 | doreplace $SETUPSCRIPTNAME "s/%VENDOR%/$VENDOR/g" | |
207 | ||
208 | unix2dosname $READMEFILE | |
209 | doreplace $SETUPSCRIPTNAME "s;%READMEFILE%;$RETVALUE;g" | |
210 | ||
211 | unix2dosname $READMEAFTERFILE | |
212 | doreplace $SETUPSCRIPTNAME "s;%READMEAFTERFILE%;$RETVALUE;g" | |
213 | ||
214 | unix2dosname $LICENSEFILE | |
215 | doreplace $SETUPSCRIPTNAME "s;%LICENSEFILE%;$RETVALUE;g" | |
216 | ||
217 | doreplace $SETUPSCRIPTNAME "s/%APPTITLE%/$APPTITLE/g" | |
218 | ||
219 | unix2dosname $SETUPIMAGEDIR | |
220 | doreplace $SETUPSCRIPTNAME "s;%SOURCEDIR%;$RETVALUE;g" | |
221 | ||
222 | unix2dosname $DESTDIR | |
223 | doreplace $SETUPSCRIPTNAME "s;%OUTPUTDIR%;$RETVALUE;g" | |
224 | ||
225 | rm -f $DESTDIR/setup*.* $DESTDIR/wxMSW-$VERSION-Setup.exe | |
226 | ||
227 | # Inno Setup complains if this step is not done | |
228 | unix2dos --unix2dos $SETUPSCRIPTNAME | |
229 | ||
230 | # Now invoke INNO compiler on the new ISS file | |
231 | # First, make a DOS filename or Inno Setup will get confused. | |
232 | ||
233 | unix2dosname2 $SETUPSCRIPTNAME | |
234 | DOSFILENAME=$RETVALUE | |
235 | ||
236 | # Note: the double slash is Mingw32/MSYS convention for | |
237 | # denoting a switch, that must not be converted into | |
238 | # a path (otherwise /c = c:/) | |
239 | ||
240 | cd `dirname $SETUPSCRIPTNAME` | |
241 | BASESCRIPTNAME=`basename $SETUPSCRIPTNAME` | |
242 | echo Invoking Inno Setup compiler on $BASESCRIPTNAME | |
243 | ||
244 | "$SETUPCOMPILER" //cc $BASESCRIPTNAME | |
245 | ||
246 | if [ ! -f $DESTDIR/setup.exe ]; then | |
247 | echo "*** Error - the setup.exe was not generated." | |
248 | exit | |
249 | fi | |
250 | ||
251 | cd $DESTDIR | |
252 | mv setup.exe wxMSW-$VERSION-Setup.exe | |
253 | ||
254 | echo If you saw no warnings or errors, $APPTITLE was successfully spun. | |
255 | echo | |
256 | } | |
257 | ||
258 | # Get the archives | |
259 | getarchives() | |
260 | { | |
261 | echo Getting archives... | |
262 | cd $DESDIR | |
263 | curl http://biolpc22.york.ac.uk/pub/$VERSION/wxMSW-$VERSION.zip | |
264 | curl http://biolpc22.york.ac.uk/pub/$VERSION/wxWidgets-$VERSION-CHM.zip | |
265 | ||
266 | # TODO | |
267 | #curl http://biolpc22.york.ac.uk/pub/$VERSION/wxWidgets-Windows-Binaries.zip | |
268 | ||
269 | echo Done getting archives. | |
270 | } | |
271 | ||
272 | # We can't use e.g. this: | |
273 | # ls `cat $SRC/distrib/msw/makefile.rsp` zip -@ -u $DEST/wxWidgets-$VERSION-gen.zip | |
274 | # because there's not enough space on the command line, plus we need to ignore the | |
275 | # blank lines. | |
276 | # So if we need to (not in this script so far) we do something like this instead: | |
277 | # expandlines $SRC/setup/files.rsp temp.txt | |
278 | # zip -@ `$CYGPATHPROG -w $DEST/archive.zip` < temp.txt | |
279 | ||
280 | expandlines() | |
281 | { | |
282 | toexpand=$1 | |
283 | outputfile=$2 | |
284 | ||
285 | rm -f $outputfile | |
286 | touch $outputfile | |
287 | for line in `cat $toexpand` ; do | |
288 | if [ $line != "" ]; then | |
289 | ls $line >> $outputfile | |
290 | fi | |
291 | done | |
292 | } | |
293 | ||
294 | usage() | |
295 | { | |
296 | echo "Usage: $PROGNAME [ options ]" 1>&2 | |
297 | echo Options: | |
298 | echo " --help Display this help message" | |
299 | echo " --verbose Verbose zip operation" | |
300 | echo. | |
301 | echo Note that options only override settings in $SCRIPTDIR/setup.var. | |
302 | exit 1 | |
303 | } | |
304 | ||
305 | # Process command line options. | |
306 | ||
307 | for i in "$@"; do | |
308 | case "$i" in | |
309 | --getarchives) GETARCHIVES=1 ;; | |
310 | --verbose) VERBOSE=1 ;; | |
311 | *) | |
312 | usage | |
313 | exit | |
314 | ;; | |
315 | esac | |
316 | done | |
317 | ||
318 | ||
319 | doinit | |
320 | ||
321 | if [ "$GETARCHIVES" = "1" ]; then | |
322 | getarchives | |
323 | fi | |
324 | ||
325 | dospinsetup | |
326 |