6 # pw=foo extract password
7 # version=2.5 make a FINAL build
8 # tag=FOO insert FOO before the date in build names
12 # customizable specific stuff
13 netradiant_release=1.5.0-svn222
14 basepk3=$base/data20080229.pk3 # 2.4
17 havocdir=$base/nexuiz/havoc
18 dpdir=$base/darkplaces
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"
30 aft="perl -I/chroot/debian-etch/usr/share/aft /chroot/debian-etch/usr/bin/aft"
31 # end system specific stuff
42 : ${date:=`date +%Y%m%d`}
44 echo "date stamp: $date"
48 version=2-svntest-$date
55 versiontag=$versiontag
63 7za a -tzip -mx=9 "$@"
67 #if [ -n "$EXPERIMENTAL" ]; then
68 # basepk3=$base/data20071231.pk3 # newer build to make smaller patches
72 # TODO normalize the builds
73 platforms='x86 amd64 osx'
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"
101 mv "${fteqccdir##*/}"/fteqcc.exe "$tmpdir/fteqcc/$fteqccname"
104 mv "${fteqccdir##*/}"/fteqcc.bin "$tmpdir/fteqcc/$fteqccname"
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"
122 while [ -f "$zipdir/nexuiz$date$i$ext.zip" ]; do
126 i=`echo "$i" | tr a-y b-z`
131 echo "Using build name nexuiz$date$ext"
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"
150 # clean up and patch DP
154 if [ -s patches/series ]; then
155 quilt push -a # apply all patches
158 # prepare directory structure
159 cp -r "$osxapps"/*.app "$tmpdir"
160 mkdir "$tmpdir/debuginfo"
161 mkdir "$tmpdir/fteqcc"
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"
169 # build all executables
170 rm -f *.exe nexuiz-* *-withdebug* *.o
173 rm -f *.exe nexuiz-* *-withdebug '.#'* *.o
174 rm -rf fteqcc copystrip
177 # move shell scripts and license
179 cp "$nexdir/"nexuiz-*.sh "$tmpdir/"
180 cp "$nexdir/gpl.txt" "$tmpdir/"
184 svn export . "$tmpdir/data"
185 svn info . > "$tmpdir/data/nexuiz-data-base-revision.txt"
186 svn log > "$tmpdir/data/ChangeLog"
190 svn export . "$tmpdir/havoc"
194 svn export . "$tmpdir/Docs"
198 svn export . "$tmpdir/server"
202 mkdir -p "$tmpdir/sources"
203 mk7z ../sources/gamesource$date.zip qcsrc nexuiz-data-base-revision.txt ChangeLog
207 svn export . "$tmpdir/darkplaces"
208 svn info > "$tmpdir/darkplaces/nexuiz-base-revision.txt"
209 svn diff > "$tmpdir/darkplaces/nexuiz-engine-changes.diff"
210 svn log > "$tmpdir/darkplaces/ChangeLog"
212 mk7z "$tmpdir/sources/enginesource$date.zip" "darkplaces"
215 # make fteqcc archive
217 zip -9r "$tmpdir/sources/fteqcc-binaries-and-source-rev$fteqccrev.zip" "fteqcc"
225 # make local compiler
227 make FTEQCC="$fteqccdir/fteqcc.bin"
230 rm -rf "$tmpdir/data/qcsrc"
232 cp "$dpdir/darkplaces.txt" .
234 mv common-spog.pk3 ..
235 perl -pi -e '/^set g_nexuizversion "?([0-9.]*)[^"]*"?/ and $_ = "set g_nexuizversion '$version'\n"' defaultNexuiz.cfg
236 if [ -z "$versiontag" ]; then
237 perl -pi -e 'm|^//!<showbrand| .. m|^//!>showbrand| and $_ = "";' defaultNexuiz.cfg
240 echo >> defaultNexuiz.cfg
241 echo "$defaultcfg" >> defaultNexuiz.cfg
250 mv data.pk3 data/data$tag$date.pk3
251 mv common-spog.pk3 data/
254 mv havoc.pk3 havoc/data$tag${date}havoc.pk3
256 cp -r "$mingwdlls"/* .
258 chmod 644 *.dll *.exe
262 wget http://www.icculus.org/netradiant/files/netradiant-${netradiant_release}-win32.zip
263 unzip netradiant-${netradiant_release}-win32.zip
264 mv NetRadiant netradiant-${netradiant_release}-win32
265 rm -f netradiant-${netradiant_release}-win32.zip
266 wget http://www.icculus.org/netradiant/files/netradiant-${netradiant_release}-osxintel.zip
267 unzip netradiant-${netradiant_release}-osxintel.zip
268 mv NetRadiant.app NetRadiant-${netradiant_release}-osxintel.app
269 rm -f netradiant-${netradiant_release}-osxintel.zip
270 cat >> unsupported.txt <<EOF
271 This directory contains NetRadiant, a stabilized Q3 map editor,
\r
272 configured for Nexuiz.
\r
274 It is not officially supported by Alientrap.
\r
276 Website: http://www.icculus.org/netradiant/
\r
280 # make main structure
284 find . -name .svn -exec rm -rf {} \; -prune
286 rm -f "$zipdir/nexuiz$date$ext.zip"
287 zip $zipflags -9yr "$zipdir/nexuiz$date$ext.zip" Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll Nexuiz/sources Nexuiz/Docs Nexuiz/server Nexuiz/data/data$tag$date.pk3 Nexuiz/data/common-spog.pk3 Nexuiz/havoc/* Nexuiz/extra/*
288 ln -snf nexuiz$date$ext.zip "$zipdir/nexuiz-$newest.zip"
290 rm -f "$zipdir/nexuizengineonly$date$ext.zip"
291 zip $zipflags -9yr "$zipdir/nexuizengineonly$date$ext.zip" Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll
292 ln -snf nexuizengineonly$date$ext.zip "$zipdir/nexuizengineonly-$newest.zip"
294 rm -f "$zipdir/nexuizsource$date$ext.zip"
295 zip $zipflags -9yr "$zipdir/nexuizsource$date$ext.zip" Nexuiz/gpl.txt Nexuiz/sources
296 ln -snf nexuizsource$date$ext.zip "$zipdir/nexuizsource-$newest.zip"
298 # TODO remove these excludes after the version after 2.4.2
299 $zipdiff -o "Nexuiz/data/datapatch$tag$date.pk3" -f "$basepk3" -t Nexuiz/data/data$tag$date.pk3 \
300 -x 'sound/cdtracks/track*.ogg' \
301 -x 'sound/cdtracks/brainsukker.ogg' \
302 -x 'sound/cdtracks/breakdown-easy.ogg' \
303 -x 'sound/cdtracks/calling-bogus.ogg' \
304 -x 'sound/cdtracks/chaos-fog.ogg' \
305 -x 'sound/cdtracks/digital-pursuit.ogg' \
306 -x 'sound/cdtracks/infight.ogg' \
307 -x 'sound/cdtracks/neuronal-diving.ogg' \
308 -x 'sound/cdtracks/subcities.ogg' \
309 -x 'sound/cdtracks/thru-the-mirror.ogg'
310 mkdir -p sound/cdtracks
311 ln -snf track001.ogg sound/cdtracks/digital-pursuit.ogg
312 ln -snf track002.ogg sound/cdtracks/breakdown-easy.ogg
313 ln -snf track003.ogg sound/cdtracks/brainsukker.ogg
314 ln -snf track004.ogg sound/cdtracks/chaos-fog.ogg
315 ln -snf track005.ogg sound/cdtracks/infight.ogg
316 ln -snf track006.ogg sound/cdtracks/neuronal-diving.ogg
317 ln -snf track007.ogg sound/cdtracks/subcities.ogg
318 ln -snf track008.ogg sound/cdtracks/thru-the-mirror.ogg
319 ln -snf track009.ogg sound/cdtracks/calling-bogus.ogg
320 zip -9yr "Nexuiz/data/datapatch$tag$date.pk3" sound/cdtracks/*
322 [ -n "$hotbasepk3" ] && $zipdiff -o "Nexuiz/data/datapatch$tag$date""hotfix.pk3" -f "$hotbasepk3" -t Nexuiz/data/data$tag$date.pk3
324 if unzip "Nexuiz/data/data$tag$date.pk3" gfx/brand.tga; then
325 zip -9r "Nexuiz/data/datapatch$tag$date.pk3" gfx/brand.tga
326 [ -n "$hotbasepk3" ] && zip -9r "Nexuiz/data/datapatch$tag$date""hotfix.pk3" gfx/brand.tga
330 rm -f "$zipdir/nexuizpatch$date$ext.zip"
331 zip $zipflags -9yr "$zipdir/nexuizpatch$date$ext.zip" Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll Nexuiz/sources Nexuiz/Docs Nexuiz/server Nexuiz/data/datapatch$tag$date.pk3 Nexuiz/havoc/*
332 ln -snf nexuizpatch$date$ext.zip "$zipdir/nexuizpatch-$newest.zip"
334 [ -n "$hotbasepk3" ] && rm -f "$zipdir/nexuizhotfix$date$ext.zip"
335 [ -n "$hotbasepk3" ] && zip $zipflags -9yr "$zipdir/nexuizhotfix$date$ext.zip" Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll Nexuiz/sources Nexuiz/Docs Nexuiz/server Nexuiz/data/datapatch$tag$date""hotfix.pk3 Nexuiz/havoc/*
336 [ -n "$hotbasepk3" ] && ln -snf nexuizhotfix$date$ext.zip "$zipdir/nexuizhotfix-$newest.zip"
338 rm -f "$zipdir/nexuizdocs$date$ext.zip"
339 zip $zipflags -9yr "$zipdir/nexuizdocs$date$ext.zip" Nexuiz/gpl.txt Nexuiz/Docs
340 ln -snf nexuizdocs$date$ext.zip "$zipdir/nexuizdocs-$newest.zip"
342 rm -f "$zipdir/nexuizdebug$date$ext.zip"
343 zip $zipflags -9yr "$zipdir/nexuizdebug$date$ext.zip" Nexuiz/gpl.txt Nexuiz/debuginfo/* Nexuiz/sources
344 ln -snf nexuizdebug$date$ext.zip "$zipdir/nexuizdebug-$newest.zip"
346 case "$versiontag" in
352 NOTE: This is a RELEASE BUILD.
354 To upload and finish the build, these things have to be done:
362 - Turn on "developer 1"; watch out for suspicious messages.
363 - While testing, make sure all campaign levels are tested. In CTF/KH levels,
364 try to do a capture. After that, finish the game by prvm_edictset server 1
366 - Play on a server running the new code. Ideally, that server should be public
367 and "somewhat compatible" to old clients, and some other players should be
369 - Post the build on the forum as a test release. E.g. run this script again
370 with the "version" variable NOT SET, so the build gets marked "testing only",
371 and upload it and post it on the forum for testing. Mention the test server
372 that is already running the new code. Wait for at least one week for critical
374 - If needed, fix the reported bugs and re-run this script for a release build.
375 Possibly repeat the testing process.
376 - Upload the "final" build you have just made to Sourceforge (upload.sf.net,
377 incoming). Use the naming scheme nexuiz-25.zip, nexuizpatch-24-to-25.zip
378 - Make the download available on sourceforge.
379 - Announce the build on the forum; update the downloads website. Note that the
380 download may be still unavailable because of the SF mirror system.
381 - Wait for the mirrors to catch up.
382 - Edit the website: make a new news item for the new release, change the logo
383 image in the top left for the new version (ask [-z-]).