]> icculus.org git repositories - divverent/nexuiz.git/blob - misc/tools/makebuild.sh
mediasource: grunge brushes (used in hud)
[divverent/nexuiz.git] / misc / tools / makebuild.sh
1 #!/bin/bash
2
3 set -e
4
5 # Options:
6 #   pw=foo          extract password
7 #   version=2.5     make a FINAL build
8 #   tag=FOO         insert FOO before the date in build names
9
10 base=`pwd`
11
12 # customizable specific stuff
13 netradiant_release=1.5.0-svn358
14 basepk3=$base/data20090403.pk3 # 2.5
15 hotbasepk3= # hotfix
16 nexdir=$base/nexuiz
17 havocdir=$base/nexuiz/havoc
18 dpdir=$base/darkplaces
19 tmpdir=/tmp/NEX
20 zipdir=$base/builds
21 buildfiles=$base/nexuiz/misc/buildfiles
22 mingwdlls=$buildfiles/w32
23 osxapps=$buildfiles/osx
24 copystrip=$buildfiles/copystrip
25 zipdiff=$base/nexuiz/misc/tools/zipdiff
26 fteqccdir="$base/fteqcc"
27 fteqccflags=""
28 menuqc=menu
29 newest=NEWEST
30 aft="perl -I/chroot/debian-etch/usr/share/aft /chroot/debian-etch/usr/bin/aft"
31 # end system specific stuff
32
33 case "$pw" in
34         '')
35                 zipflags=
36                 ;;
37         *)
38                 zipflags="-P $pw"
39                 ;;
40 esac
41
42 : ${date:=`date +%Y%m%d`}
43 : ${versiontag:=}
44 echo "date stamp: $date"
45
46 case "$version" in
47         '')
48                 version=2-svntest-$date
49                 versiontag=test
50                 defaultcfg=
51                 ext=
52                 ;;
53         *)
54                 version=$version
55                 versiontag=$versiontag
56                 defaultcfg=
57                 ext=_$version
58                 ;;
59 esac
60
61 mk7z()
62 {
63         7za a -tzip -mx=9 "$@"
64         chmod 644 "$1"
65 }
66
67 #if [ -n "$EXPERIMENTAL" ]; then
68 #       basepk3=$base/data20071231.pk3 # newer build to make smaller patches
69 #       nexdir=$base/nexuiz
70 #fi
71
72 # TODO normalize the builds
73 platforms='x86 amd64 osx'
74 buildon()
75 {
76         host=$1
77         prefix=$2
78         fteqccname=$3
79         path=$4
80         makeflags=$5
81         strip=$6
82
83         fteqcc_cflags=
84         case "$fteqccname" in
85                 *.exe)
86                         fteqcc_cflags=win
87                         ;;
88         esac
89
90         rm -f "$fteqccdir"/*.o
91         rm -f "$fteqccdir"/*.bin
92         rsync --exclude "*.o" --exclude "*.d" --exclude "nexuiz-*" --delete-excluded --delete -zvaSHP . "$copystrip" "$fteqccdir" "$host:$path"
93         ssh "$host" ". ~/.profile && cd $path && COPYSTRIP_STRIP=$strip PATH=$path/copystrip:\$PATH make $makeflags clean nexuiz && cd ${fteqccdir##*/} && make $makeflags $fteqcc_cflags"
94         rsync --exclude "*.o" --exclude "*.d" --delete-excluded --delete -zvaSHP "$host:$path/." .
95         for P in -dedicated -sdl -glx -wgl -agl -dedicated.exe -sdl.exe .exe; do
96                 [ -f nexuiz$P ] && mv nexuiz$P "$tmpdir/$prefix$P"
97                 [ -f nexuiz$P-withdebug ] && mv nexuiz$P-withdebug "$tmpdir/debuginfo/$prefix$P"
98         done
99         case "$fteqccname" in
100                 *.exe)
101                         mv "${fteqccdir##*/}"/fteqcc.exe "$tmpdir/fteqcc/$fteqccname"
102                         ;;
103                 *)
104                         mv "${fteqccdir##*/}"/fteqcc.bin "$tmpdir/fteqcc/$fteqccname"
105                         ;;
106         esac
107         make clean
108 }
109
110 build()
111 {
112         buildon nexmacbuild                           nexuiz-osx          fteqcc-osx          /tmp/Darkplaces.build 'CC="gcc -g -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4"' strip
113         buildon eos.thruhere.net                      nexuiz-linux-686    fteqcc-linux-686    /tmp/Darkplaces.build 'CC="gcc -g" DP_MODPLUG_STATIC_LIBDIR=/home/divverent/modplug-i386/lib' strip
114         buildon alientrap.org                         nexuiz-linux-x86_64 fteqcc-linux-x86_64 /tmp/Darkplaces.build 'CC="gcc -g -Wl,--hash-style=sysv" DP_MODPLUG_STATIC_LIBDIR=/home/divverent/modplug-x86_64/lib' strip
115         buildon alientrap.org                         nexuiz              fteqcc.exe          /tmp/Darkplaces.build 'DP_MAKE_TARGET=mingw CC="/chroot/debian-etch/usr/bin/i586-mingw32msvc-gcc -g -DSUPPORTDIRECTX -I/home/divverent/dxheaders" WINDRES=/chroot/debian-etch/usr/bin/i586-mingw32msvc-windres SDL_CONFIG=/home/divverent/sdl-win32/SDL-1.2.13/bin/sdl-config' /chroot/debian-etch/usr/bin/i586-mingw32msvc-strip
116                 mv "$tmpdir/nexuiz-osx-agl"     "$tmpdir/Nexuiz.app/Contents/MacOS/nexuiz-osx-agl-bin"
117                 mv "$tmpdir/nexuiz-osx-sdl"     "$tmpdir/Nexuiz-SDL.app/Contents/MacOS/nexuiz-osx-sdl-bin"
118 }
119
120 # avoid dupes
121 i=
122 while [ -f "$zipdir/nexuiz$date$i$ext.zip" ]; do
123         if [ -z "$i" ]; then
124                 i=a
125         else
126                 i=`echo "$i" | tr a-y b-z`
127         fi
128 done
129 ext=$i$ext
130
131 echo "Using build name nexuiz$date$ext"
132 sleep 3
133
134 # check for remains
135 conflicts=`find "$dpdir" "$nexdir" -name '*.orig' -o -name '*.rej' -o -name '*.mine' -o -name '.#*' -o -name '.*~'`
136 if [ -n "$conflicts" ]; then
137         echo "CONFLICTS OR UNNEEDED FILES HAVE BEEN FOUND!"
138         echo "NOT PROCEEDING"
139         echo
140         echo "$conflicts"
141         exit 1
142 fi
143
144 set -x
145
146 # prepare temp dir
147 rm -rf "$tmpdir"
148 mkdir -p "$tmpdir"
149
150 # clean up and patch DP
151 cd "$dpdir"
152 quilt pop -a || true
153 svn revert -R .
154 if [ -s patches/series ]; then
155         quilt push -a # apply all patches
156 fi
157
158 # prepare directory structure
159 cp -r "$osxapps"/*.app "$tmpdir"
160 mkdir "$tmpdir/debuginfo"
161 mkdir "$tmpdir/fteqcc"
162
163 # prepare fteqcc build
164 svn export "$fteqccdir" "$tmpdir/fteqcc/source"
165 svn info "$fteqccdir" > "$tmpdir/fteqcc/source/fteqcc-base-revision.txt"
166 fteqccrev=$((`grep "Last Changed Rev:" "$tmpdir/fteqcc/source/fteqcc-base-revision.txt" | cut -d : -f 2`))
167 echo "fteqcc rev $fteqccrev"
168
169 # build all executables
170 rm -f *.exe nexuiz-* *-withdebug* *.o
171 make clean
172 build
173 rm -f *.exe nexuiz-* *-withdebug '.#'* *.o
174 rm -rf fteqcc copystrip
175 make clean
176
177 # move shell scripts and license
178 cd "$tmpdir"
179 cp "$nexdir/"nexuiz-*.sh "$tmpdir/"
180 cp "$nexdir/gpl.txt" "$tmpdir/"
181 cp "$nexdir/readme.html" "$tmpdir/"
182
183 # prepare data
184 cd "$nexdir/data"
185 svn export . "$tmpdir/data"
186 svn info . > "$tmpdir/data/nexuiz-data-base-revision.txt"
187 svn log > "$tmpdir/data/ChangeLog"
188
189 # prepare havoc
190 cd "$havocdir"
191 svn export . "$tmpdir/havoc"
192
193 # prepare Docs
194 cd "$nexdir/Docs"
195 svn export . "$tmpdir/Docs"
196
197 # prepare server
198 cd "$nexdir/server"
199 svn export . "$tmpdir/server"
200
201 # make gamesource
202 cd "$tmpdir/data"
203 mkdir -p "$tmpdir/sources"
204 mk7z ../sources/gamesource$date.zip qcsrc nexuiz-data-base-revision.txt ChangeLog
205
206 # make enginesource
207 cd "$dpdir"
208 svn export . "$tmpdir/darkplaces"
209 svn info > "$tmpdir/darkplaces/nexuiz-base-revision.txt"
210 svn diff > "$tmpdir/darkplaces/nexuiz-engine-changes.diff"
211 svn log > "$tmpdir/darkplaces/ChangeLog"
212 cd "$tmpdir"
213 mk7z "$tmpdir/sources/enginesource$date.zip" "darkplaces"
214 rm -rf darkplaces
215
216 # make fteqcc archive
217 cd "$tmpdir"
218 zip -9r "$tmpdir/sources/fteqcc-binaries-and-source-rev$fteqccrev.zip" "fteqcc"
219 rm -rf fteqcc
220
221 # clean fteqcc dir
222 cd "$fteqccdir"
223 rm -f *.o *.bin
224 make
225
226 # make local compiler
227 cd "$tmpdir/data"
228 make FTEQCC="$fteqccdir/fteqcc.bin"
229
230 # prepare root
231 rm -rf "$tmpdir/data/qcsrc"
232 cd "$tmpdir/Docs"
233 cp "$dpdir/darkplaces.txt" .
234 cd "$tmpdir/data"
235 mv common-spog.pk3 ..
236 perl -pi -e '/^set g_nexuizversion "?([0-9.]*)[^"]*"?/ and $_ = "set g_nexuizversion '$version'\n"' defaultNexuiz.cfg
237 if [ -z "$versiontag" ]; then
238         perl -pi -e 'm|^//!<showbrand| .. m|^//!>showbrand| and $_ = "";' defaultNexuiz.cfg
239         rm -f gfx/brand.tga
240 fi
241 echo >> defaultNexuiz.cfg
242 echo "$defaultcfg" >> defaultNexuiz.cfg
243 mk7z ../data.pk3 .
244 cd "$tmpdir/havoc"
245 mk7z ../havoc.pk3 .
246
247 # make data pk3
248 cd "$tmpdir"
249 rm -rf data
250 mkdir data
251 mv data.pk3 data/data$tag$date.pk3
252 mv common-spog.pk3 data/
253 rm -rf havoc
254 mkdir havoc
255 mv havoc.pk3 havoc/data$tag${date}havoc.pk3
256
257 cp -r "$mingwdlls"/* .
258 # fix up permissions
259 chmod 644 *.dll *.exe
260
261 mkdir extra
262 cd extra
263 wget http://www.icculus.org/netradiant/files/netradiant-${netradiant_release}-win32.zip
264 #echo "Downloading netradiant, press enter and type the PWs"
265 #read -r DUMMY
266 #scp divverent@icculus.org:netradiant-webspace/files/netradiant-${netradiant_release}-win32.zip .
267 unzip netradiant-${netradiant_release}-win32.zip
268 mv NetRadiant netradiant-${netradiant_release}-win32
269 rm -f netradiant-${netradiant_release}-win32.zip
270 wget http://www.icculus.org/netradiant/files/netradiant-${netradiant_release}-osxintel.zip
271 #scp divverent@icculus.org:netradiant-webspace/files/netradiant-${netradiant_release}-osxintel.zip .
272 unzip netradiant-${netradiant_release}-osxintel.zip
273 mv NetRadiant.app NetRadiant-${netradiant_release}-osxintel.app
274 rm -f netradiant-${netradiant_release}-osxintel.zip
275 cat >> unsupported.txt <<EOF
276 This directory contains NetRadiant, a stabilized Q3 map editor,\r
277 configured for Nexuiz.\r
278 \r
279 It is not officially supported by Alientrap.\r
280 \r
281 Website: http://www.icculus.org/netradiant/\r
282 EOF
283 cd ..
284
285 # make main structure
286 mkdir Nexuiz
287 mv * Nexuiz/ || true
288
289 find . -name .svn -exec rm -rf {} \; -prune
290
291 rm -f "$zipdir/nexuiz$date$ext.zip"
292 zip $zipflags -9yr "$zipdir/nexuiz$date$ext.zip"           Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll Nexuiz/sources Nexuiz/Docs Nexuiz/readme.html Nexuiz/server Nexuiz/data/data$tag$date.pk3 Nexuiz/data/common-spog.pk3 Nexuiz/havoc/* Nexuiz/extra/*
293 ln -snf nexuiz$date$ext.zip "$zipdir/nexuiz-$newest.zip"
294
295 rm -f "$zipdir/nexuizengineonly$date$ext.zip"
296 zip $zipflags -9yr "$zipdir/nexuizengineonly$date$ext.zip" Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll
297 ln -snf nexuizengineonly$date$ext.zip "$zipdir/nexuizengineonly-$newest.zip"
298
299 rm -f "$zipdir/nexuizsource$date$ext.zip"
300 zip $zipflags -9yr "$zipdir/nexuizsource$date$ext.zip"     Nexuiz/gpl.txt                                            Nexuiz/sources
301 ln -snf nexuizsource$date$ext.zip "$zipdir/nexuizsource-$newest.zip"
302
303 # TODO remove these excludes after the version after 2.4.2
304 $zipdiff -o "Nexuiz/data/data$tag$date""patch.pk3" -f "$basepk3" -t Nexuiz/data/data$tag$date.pk3
305 [ -n "$hotbasepk3" ] && $zipdiff -o "Nexuiz/data/data$tag$date""hotfix.pk3" -f "$hotbasepk3" -t Nexuiz/data/data$tag$date.pk3
306 mkdir -p gfx
307 if unzip "Nexuiz/data/data$tag$date.pk3" gfx/brand.tga; then
308         zip -9r "Nexuiz/data/data$tag$date""patch.pk3" gfx/brand.tga
309         [ -n "$hotbasepk3" ] && zip -9r "Nexuiz/data/data$tag$date""hotfix.pk3" gfx/brand.tga
310         rm -rf gfx
311 fi
312
313 rm -f "$zipdir/nexuizpatch$date$ext.zip"
314 zip $zipflags -9yr "$zipdir/nexuizpatch$date$ext.zip"      Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll Nexuiz/sources Nexuiz/Docs Nexuiz/readme.html Nexuiz/server Nexuiz/data/data$tag$date""patch.pk3 Nexuiz/havoc/*
315 ln -snf nexuizpatch$date$ext.zip "$zipdir/nexuizpatch-$newest.zip"
316
317 [ -n "$hotbasepk3" ] && rm -f "$zipdir/nexuizhotfix$date$ext.zip"
318 [ -n "$hotbasepk3" ] && zip $zipflags -9yr "$zipdir/nexuizhotfix$date$ext.zip"      Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll Nexuiz/sources Nexuiz/Docs Nexuiz/readme.html Nexuiz/server Nexuiz/data/data$tag$date""hotfix.pk3 Nexuiz/havoc/*
319 [ -n "$hotbasepk3" ] && ln -snf nexuizhotfix$date$ext.zip "$zipdir/nexuizhotfix-$newest.zip"
320
321 rm -f "$zipdir/nexuizdocs$date$ext.zip"
322 zip $zipflags -9yr "$zipdir/nexuizdocs$date$ext.zip"       Nexuiz/gpl.txt Nexuiz/Docs Nexuiz/readme.html
323 ln -snf nexuizdocs$date$ext.zip "$zipdir/nexuizdocs-$newest.zip"
324
325 rm -f "$zipdir/nexuizdebug$date$ext.zip"
326 zip $zipflags -9yr "$zipdir/nexuizdebug$date$ext.zip"      Nexuiz/gpl.txt Nexuiz/debuginfo/* Nexuiz/sources
327 ln -snf nexuizdebug$date$ext.zip "$zipdir/nexuizdebug-$newest.zip"
328
329 case "$versiontag" in
330         test)
331                 ;;
332         *)
333                 cat <<'EOF'
334
335 NOTE: This is a RELEASE BUILD.
336
337 To upload and finish the build, these things have to be done:
338
339 - Test the build:
340   - On Linux/ATI
341   - On Vista/nvidia
342   - On Vista/ATI
343   - On Vista/Intel
344   - On OSX/ATI
345   - Turn on "developer 1"; watch out for suspicious messages.
346   - While testing, make sure all campaign levels are tested. In CTF/KH levels,
347     try to do a capture. After that, finish the game by prvm_edictset server 1
348     frags 1000.
349   - Play on a server running the new code. Ideally, that server should be public
350     and "somewhat compatible" to old clients, and some other players should be
351     on it.
352 - Post the build on the forum as a test release. E.g. run this script again
353   with the "version" variable NOT SET, so the build gets marked "testing only",
354   and upload it and post it on the forum for testing. Mention the test server
355   that is already running the new code. Wait for at least one week for critical
356   bug reports.
357 - If needed, fix the reported bugs and re-run this script for a release build.
358   Possibly repeat the testing process.
359 - Upload the "final" build you have just made to Sourceforge (upload.sf.net,
360   incoming). Use the naming scheme nexuiz-25.zip, nexuizpatch-24-to-25.zip
361 - Make the download available on sourceforge.
362 - Announce the build on the forum; update the downloads website. Note that the
363   download may be still unavailable because of the SF mirror system.
364 - Wait for the mirrors to catch up.
365 - Edit the website: make a new news item for the new release, change the logo
366   image in the top left for the new version (ask [-z-]).
367
368 EOF
369                 ;;
370 esac