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 basepk3=$base/data20080229.pk3 # 2.4
16 havocdir=$base/nexuiz/havoc
17 dpdir=$base/darkplaces
20 buildfiles=$base/nexuiz/misc/buildfiles
21 mingwdlls=$buildfiles/w32
22 osxapps=$buildfiles/osx
23 copystrip=$buildfiles/copystrip
24 zipdiff=$base/nexuiz/misc/zipdiff
25 fteqccdir="$base/fteqcc"
29 aft="perl -I/chroot/debian-etch/usr/share/aft /chroot/debian-etch/usr/bin/aft"
30 # end system specific stuff
41 : ${date:=`date +%Y%m%d`}
43 echo "date stamp: $date"
47 version=2-svntest-$date
54 versiontag=$versiontag
62 7za a -tzip -mx=9 "$@"
66 #if [ -n "$EXPERIMENTAL" ]; then
67 # basepk3=$base/data20071231.pk3 # newer build to make smaller patches
71 # TODO normalize the builds
72 platforms='x86 amd64 osx'
89 rm -f "$fteqccdir"/*.o
90 rm -f "$fteqccdir"/*.bin
91 rsync --exclude "*.o" --exclude "*.d" --exclude "nexuiz-*" --delete-excluded --delete -zvaSHP . "$copystrip" "$fteqccdir" "$host:$path"
92 ssh "$host" ". ~/.profile && cd $path && COPYSTRIP_STRIP=$strip PATH=$path/copystrip:\$PATH make $makeflags clean nexuiz && cd ${fteqccdir##*/} && make $makeflags $fteqcc_cflags"
93 rsync --exclude "*.o" --exclude "*.d" --delete-excluded --delete -zvaSHP "$host:$path/." .
94 for P in -dedicated -sdl -glx -wgl -agl -dedicated.exe -sdl.exe .exe; do
95 [ -f nexuiz$P ] && mv nexuiz$P "$tmpdir/$prefix$P"
96 [ -f nexuiz$P-withdebug ] && mv nexuiz$P-withdebug "$tmpdir/debuginfo/$prefix$P"
100 mv "${fteqccdir##*/}"/fteqcc.exe "$tmpdir/fteqcc/$fteqccname"
103 mv "${fteqccdir##*/}"/fteqcc.bin "$tmpdir/fteqcc/$fteqccname"
111 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
112 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
113 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
114 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
115 mv "$tmpdir/nexuiz-osx-agl" "$tmpdir/Nexuiz.app/Contents/MacOS/nexuiz-osx-agl-bin"
116 mv "$tmpdir/nexuiz-osx-sdl" "$tmpdir/Nexuiz-SDL.app/Contents/MacOS/nexuiz-osx-sdl-bin"
121 while [ -f "$zipdir/nexuiz$date$i$ext.zip" ]; do
125 i=`echo "$i" | tr a-y b-z`
130 echo "Using build name nexuiz$date$ext"
134 conflicts=`find "$dpdir" "$nexdir" -name '*.orig' -o -name '*.rej' -o -name '*.mine' -o -name '.#*' -o -name '.*~'`
135 if [ -n "$conflicts" ]; then
136 echo "CONFLICTS OR UNNEEDED FILES HAVE BEEN FOUND!"
137 echo "NOT PROCEEDING"
149 # clean up and patch DP
153 if [ -s patches/series ]; then
154 quilt push -a # apply all patches
157 # prepare directory structure
158 cp -r "$osxapps"/*.app "$tmpdir"
159 mkdir "$tmpdir/debuginfo"
160 mkdir "$tmpdir/fteqcc"
162 # prepare fteqcc build
163 svn export "$fteqccdir" "$tmpdir/fteqcc/source"
164 svn info "$fteqccdir" > "$tmpdir/fteqcc/source/fteqcc-base-revision.txt"
165 fteqccrev=$((`grep "Last Changed Rev:" "$tmpdir/fteqcc/source/fteqcc-base-revision.txt" | cut -d : -f 2`))
166 echo "fteqcc rev $fteqccrev"
168 # build all executables
169 rm -f *.exe nexuiz-* *-withdebug* *.o
172 rm -f *.exe nexuiz-* *-withdebug '.#'* *.o
173 rm -rf fteqcc copystrip
176 # move shell scripts and license
178 cp "$nexdir/"nexuiz-*.sh "$tmpdir/"
179 cp "$nexdir/gpl.txt" "$tmpdir/"
183 svn export . "$tmpdir/data"
184 svn info . > "$tmpdir/data/nexuiz-data-base-revision.txt"
185 svn log > "$tmpdir/data/ChangeLog"
189 svn export . "$tmpdir/havoc"
193 svn export . "$tmpdir/Docs"
197 svn export . "$tmpdir/server"
201 mkdir -p "$tmpdir/sources"
202 mk7z ../sources/gamesource$date.zip qcsrc nexuiz-data-base-revision.txt ChangeLog
206 svn export . "$tmpdir/darkplaces"
207 svn info > "$tmpdir/darkplaces/nexuiz-base-revision.txt"
208 svn diff > "$tmpdir/darkplaces/nexuiz-engine-changes.diff"
209 svn log > "$tmpdir/darkplaces/ChangeLog"
211 mk7z "$tmpdir/sources/enginesource$date.zip" "darkplaces"
214 # make fteqcc archive
216 zip -9r "$tmpdir/sources/fteqcc-binaries-and-source-rev$fteqccrev.zip" "fteqcc"
224 # make local compiler
226 make FTEQCC="$fteqccdir/fteqcc.bin"
229 rm -rf "$tmpdir/data/qcsrc"
231 perl -pi -e '/^#---SET nexversion=([0-9.]*)$/ and $_ = "#---SET nexversion='$version'\n"' FAQ.aft
232 perl -pi -e '/^\s*Version ([0-9.]*)<\/div>$/ and $_ = "Version '$version'</div>\n"' Readme.htm
233 cp "$dpdir/darkplaces.txt" .
238 mv common-spog.pk3 ..
239 perl -pi -e '/^set g_nexuizversion "?([0-9.]*)[^"]*"?/ and $_ = "set g_nexuizversion '$version'\n"' default.cfg
240 if [ -n "$versiontag" ]; then
241 perl -pi -e '/^set g_nexuizversion/ and $_ = "showbrand 3\n$_"' default.cfg
242 cp "$buildfiles/brand/$versiontag.tga" gfx/brand.tga
245 echo "$defaultcfg" >> default.cfg
248 perl -pi -e '/^set g_nexuizversion "?([0-9.]*)[^"]*"?/ and $_ = "set g_nexuizversion '$version-havoc'\n"' default.cfg
249 if [ -n "$versiontag" ]; then
250 perl -pi -e '/^set g_nexuizversion/ and $_ = "showbrand 3\n$_"' default.cfg
253 echo "$defaultcfg" >> default.cfg
260 mv data.pk3 data/data$tag$date.pk3
261 mv common-spog.pk3 data/
264 mv havoc.pk3 havoc/data$tag${date}havoc.pk3
266 cp -r "$mingwdlls"/* .
268 chmod 644 *.dll *.exe
270 # make main structure
274 find . -name .svn -exec rm -rf {} \; -prune
276 rm -f "$zipdir/nexuiz$date$ext.zip"
277 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/*
278 ln -snf nexuiz$date$ext.zip "$zipdir/nexuiz-$newest.zip"
280 rm -f "$zipdir/nexuizengineonly$date$ext.zip"
281 zip $zipflags -9yr "$zipdir/nexuizengineonly$date$ext.zip" Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll
282 ln -snf nexuizengineonly$date$ext.zip "$zipdir/nexuizengineonly-$newest.zip"
284 rm -f "$zipdir/nexuizsource$date$ext.zip"
285 zip $zipflags -9yr "$zipdir/nexuizsource$date$ext.zip" Nexuiz/gpl.txt Nexuiz/sources
286 ln -snf nexuizsource$date$ext.zip "$zipdir/nexuizsource-$newest.zip"
288 # TODO remove these excludes after the version after 2.4.2
289 $zipdiff -o "Nexuiz/data/datapatch$tag$date.pk3" -f "$basepk3" -t Nexuiz/data/data$tag$date.pk3 \
290 -x 'sound/cdtracks/track*.ogg' \
291 -x 'sound/cdtracks/brainsukker.ogg' \
292 -x 'sound/cdtracks/breakdown-easy.ogg' \
293 -x 'sound/cdtracks/calling-bogus.ogg' \
294 -x 'sound/cdtracks/chaos-fog.ogg' \
295 -x 'sound/cdtracks/digital-pursuit.ogg' \
296 -x 'sound/cdtracks/infight.ogg' \
297 -x 'sound/cdtracks/neuronal-diving.ogg' \
298 -x 'sound/cdtracks/subcities.ogg' \
299 -x 'sound/cdtracks/thru-the-mirror.ogg'
300 mkdir -p sound/cdtracks
301 ln -snf track001.ogg sound/cdtracks/digital-pursuit.ogg
302 ln -snf track002.ogg sound/cdtracks/breakdown-easy.ogg
303 ln -snf track003.ogg sound/cdtracks/brainsukker.ogg
304 ln -snf track004.ogg sound/cdtracks/chaos-fog.ogg
305 ln -snf track005.ogg sound/cdtracks/infight.ogg
306 ln -snf track006.ogg sound/cdtracks/neuronal-diving.ogg
307 ln -snf track007.ogg sound/cdtracks/subcities.ogg
308 ln -snf track008.ogg sound/cdtracks/thru-the-mirror.ogg
309 ln -snf track009.ogg sound/cdtracks/calling-bogus.ogg
310 zip -9yr "Nexuiz/data/datapatch$tag$date.pk3" sound/cdtracks/*
312 [ -n "$hotbasepk3" ] && $zipdiff -o "Nexuiz/data/datapatch$tag$date""hotfix.pk3" -f "$hotbasepk3" -t Nexuiz/data/data$tag$date.pk3
314 if unzip "Nexuiz/data/data$tag$date.pk3" gfx/brand.tga; then
315 zip -9r "Nexuiz/data/datapatch$tag$date.pk3" gfx/brand.tga
316 [ -n "$hotbasepk3" ] && zip -9r "Nexuiz/data/datapatch$tag$date""hotfix.pk3" gfx/brand.tga
320 rm -f "$zipdir/nexuizpatch$date$ext.zip"
321 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/*
322 ln -snf nexuizpatch$date$ext.zip "$zipdir/nexuizpatch-$newest.zip"
324 [ -n "$hotbasepk3" ] && rm -f "$zipdir/nexuizhotfix$date$ext.zip"
325 [ -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/*
326 [ -n "$hotbasepk3" ] && ln -snf nexuizhotfix$date$ext.zip "$zipdir/nexuizhotfix-$newest.zip"
328 rm -f "$zipdir/nexuizdocs$date$ext.zip"
329 zip $zipflags -9yr "$zipdir/nexuizdocs$date$ext.zip" Nexuiz/gpl.txt Nexuiz/Docs
330 ln -snf nexuizdocs$date$ext.zip "$zipdir/nexuizdocs-$newest.zip"
332 rm -f "$zipdir/nexuizdebug$date$ext.zip"
333 zip $zipflags -9yr "$zipdir/nexuizdebug$date$ext.zip" Nexuiz/gpl.txt Nexuiz/debuginfo/* Nexuiz/sources
334 ln -snf nexuizdebug$date$ext.zip "$zipdir/nexuizdebug-$newest.zip"
336 case "$versiontag" in
342 NOTE: This is a RELEASE BUILD.
344 To upload and finish the build, these things have to be done:
352 - Turn on "developer 1"; watch out for suspicious messages.
353 - While testing, make sure all campaign levels are tested. In CTF/KH levels,
354 try to do a capture. After that, finish the game by prvm_edictset server 1
356 - Play on a server running the new code. Ideally, that server should be public
357 and "somewhat compatible" to old clients, and some other players should be
359 - Post the build on the forum as a test release. E.g. run this script again
360 with the "version" variable NOT SET, so the build gets marked "testing only",
361 and upload it and post it on the forum for testing. Mention the test server
362 that is already running the new code. Wait for at least one week for critical
364 - If needed, fix the reported bugs and re-run this script for a release build.
365 Possibly repeat the testing process.
366 - Upload the "final" build you have just made to Sourceforge (upload.sf.net,
367 incoming). Use the naming scheme nexuiz-25.zip, nexuizpatch-24-to-25.zip
368 - Make the download available on sourceforge.
369 - Announce the build on the forum; update the downloads website. Note that the
370 download may be still unavailable because of the SF mirror system.
371 - Wait for the mirrors to catch up.
372 - Edit the website: make a new news item for the new release, change the logo
373 image in the top left for the new version (ask [-z-]).