]> icculus.org git repositories - divverent/nexuiz.git/blob - misc/tools/makebuild.sh
makefile typo, and firig of eos
[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-svn389
14 basepk3=$base/data20090403.pk3 # 2.5
15 hotbasepk3=$base=data20091001.pk3 # 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.5s
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                 [ -f nexuiz$P.dSYM ] && mv nexuiz$P.dSYM "$tmpdir/debuginfo/$prefix$P.dSYM"
99         done
100         case "$fteqccname" in
101                 *.exe)
102                         mv "${fteqccdir##*/}"/fteqcc.exe "$tmpdir/fteqcc/$fteqccname"
103                         ;;
104                 *)
105                         mv "${fteqccdir##*/}"/fteqcc.bin "$tmpdir/fteqcc/$fteqccname"
106                         ;;
107         esac
108         make clean
109 }
110
111 build()
112 {
113         buildon nex686build                           nexuiz-linux-686    fteqcc-linux-686    /tmp/Darkplaces.build 'CC="gcc -g" DP_MODPLUG_STATIC_LIBDIR=$HOME/modplug-i386/lib DP_LINK_TO_LIBJPEG=1 LDFLAGS_LIBJPEG="$HOME/jpeg7/lib/libjpeg.a" CFLAGS_LIBJPEG="-I$HOME/jpeg7/include"' strip
114 #       buildon eos.thruhere.net                      nexuiz-linux-686    fteqcc-linux-686    /tmp/Darkplaces.build 'CC="gcc -g" DP_MODPLUG_STATIC_LIBDIR=$HOME/modplug-i386/lib DP_LINK_TO_LIBJPEG=1 LDFLAGS_LIBJPEG="$HOME/jpeg7/lib/libjpeg.a" CFLAGS_LIBJPEG="-I$HOME/jpeg7/include"' 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/dxheaders" WINDRES=/chroot/debian-etch/usr/bin/i586-mingw32msvc-windres SDL_CONFIG=$HOME/sdl-win32/SDL-1.2.13/bin/sdl-config' /chroot/debian-etch/usr/bin/i586-mingw32msvc-strip
116         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
117         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 DP_LINK_TO_LIBJPEG=1 LDFLAGS_LIBJPEG="$HOME/jpeg7/lib/libjpeg.a" CFLAGS_LIBJPEG="-I$HOME/jpeg7/include"' strip
118                 mv "$tmpdir/nexuiz-osx-agl"     "$tmpdir/Nexuiz.app/Contents/MacOS/nexuiz-osx-agl-bin"
119                 mv "$tmpdir/nexuiz-osx-sdl"     "$tmpdir/Nexuiz-SDL.app/Contents/MacOS/nexuiz-osx-sdl-bin"
120 }
121
122 # avoid dupes
123 i=
124 while [ -f "$zipdir/nexuiz$date$i$ext.zip" ]; do
125         if [ -z "$i" ]; then
126                 i=a
127         else
128                 i=`echo "$i" | tr a-y b-z`
129         fi
130 done
131 ext=$i$ext
132
133 echo "Using build name nexuiz$date$ext"
134 sleep 3
135
136 # check for remains
137 conflicts=`find "$dpdir" "$nexdir" -name '*.orig' -o -name '*.rej' -o -name '*.mine' -o -name '.#*' -o -name '.*~'`
138 if [ -n "$conflicts" ]; then
139         echo "CONFLICTS OR UNNEEDED FILES HAVE BEEN FOUND!"
140         echo "NOT PROCEEDING"
141         echo
142         echo "$conflicts"
143         exit 1
144 fi
145
146 set -x
147
148 # prepare temp dir
149 rm -rf "$tmpdir"
150 mkdir -p "$tmpdir"
151
152 # clean up and patch DP
153 cd "$dpdir"
154 quilt pop -a || true
155 svn revert -R .
156 if [ -s patches/series ]; then
157         quilt push -a # apply all patches
158 fi
159
160 # prepare directory structure
161 cp -r "$osxapps"/*.app "$tmpdir"
162 mkdir "$tmpdir/debuginfo"
163 mkdir "$tmpdir/fteqcc"
164
165 # prepare fteqcc build
166 cd "$fteqccdir"
167 git checkout-index -a -f --prefix="$tmpdir/fteqcc/source/"
168 git log -1 > "$tmpdir/fteqcc/source/fteqcc-base-revision.txt"
169 fteqccrev=`git show --pretty=%ct-%H | head -n 1`
170 echo "fteqcc rev $fteqccrev"
171
172 # build all executables
173 cd "$dpdir"
174 rm -rf nexuiz-* *.o
175 make clean
176 build
177 rm -rf nexuiz-* *.o
178 rm -rf fteqcc copystrip
179 make clean
180
181 # move shell scripts and license
182 cd "$tmpdir"
183 cp "$nexdir/"nexuiz-*.sh "$tmpdir/"
184 cp "$nexdir/gpl.txt" "$tmpdir/"
185 cp "$nexdir/readme.html" "$tmpdir/"
186
187 # prepare data
188 cd "$nexdir/data"
189 svn export . "$tmpdir/data"
190 svn info . > "$tmpdir/data/nexuiz-data-base-revision.txt"
191 svn log > "$tmpdir/data/ChangeLog"
192
193 # prepare havoc
194 cd "$havocdir"
195 svn export . "$tmpdir/havoc"
196
197 # prepare Docs
198 cd "$nexdir/Docs"
199 svn export . "$tmpdir/Docs"
200
201 # prepare server
202 cd "$nexdir/server"
203 svn export . "$tmpdir/server"
204
205 # make gamesource
206 cd "$tmpdir/data"
207 mkdir -p "$tmpdir/sources"
208 mk7z ../sources/gamesource$date.zip qcsrc nexuiz-data-base-revision.txt ChangeLog
209
210 # make enginesource
211 cd "$dpdir"
212 svn export . "$tmpdir/darkplaces"
213 svn info > "$tmpdir/darkplaces/nexuiz-base-revision.txt"
214 svn diff > "$tmpdir/darkplaces/nexuiz-engine-changes.diff"
215 svn log > "$tmpdir/darkplaces/ChangeLog"
216 cd "$tmpdir"
217 mk7z "$tmpdir/sources/enginesource$date.zip" "darkplaces"
218 rm -rf darkplaces
219
220 # make fteqcc archive
221 cd "$tmpdir"
222 zip -9r "$tmpdir/sources/fteqcc-binaries-and-source-rev$fteqccrev.zip" "fteqcc"
223 rm -rf fteqcc
224
225 # clean fteqcc dir
226 cd "$fteqccdir"
227 rm -f *.o *.bin
228 make
229
230 # make local compiler
231 cd "$tmpdir/data"
232 make FTEQCC="$fteqccdir/fteqcc.bin"
233
234 # prepare root
235 rm -rf "$tmpdir/data/qcsrc"
236 cd "$tmpdir/Docs"
237 cp "$dpdir/darkplaces.txt" .
238 cd "$tmpdir/data"
239 mv common-spog.pk3 ..
240 perl -pi -e '/^set g_nexuizversion "?([0-9.]*)[^"]*"?/ and $_ = "set g_nexuizversion '$version'\n"' defaultNexuiz.cfg
241 if [ -z "$versiontag" ]; then
242         perl -pi -e 'm|^//!<showbrand| .. m|^//!>showbrand| and $_ = "";' defaultNexuiz.cfg
243         rm -f gfx/brand.tga
244 fi
245 echo >> defaultNexuiz.cfg
246 echo "$defaultcfg" >> defaultNexuiz.cfg
247
248 cd "$nexdir/misc/mediasource/menuskins/wickedz/background_builder"
249 sh append.sh "`echo "$version" | sed 's/svn/s/g'`" "$tmpdir/data/gfx/menu/wickedz/"
250 cd "$tmpdir/data"
251
252 mk7z ../data.pk3 .
253
254 cd "$tmpdir/havoc"
255 mk7z ../havoc.pk3 .
256
257 # make data pk3
258 cd "$tmpdir"
259 rm -rf data
260 mkdir data
261 mv data.pk3 data/data$tag$date.pk3
262 mv common-spog.pk3 data/
263 rm -rf havoc
264 mkdir havoc
265 mv havoc.pk3 havoc/data$tag${date}havoc.pk3
266
267 cp -r "$mingwdlls"/* .
268 # fix up permissions
269 chmod 644 *.dll *.exe
270
271 mkdir extra
272 cd extra
273 wget http://www.icculus.org/netradiant/files/netradiant-${netradiant_release}-win32.zip
274 #echo "Downloading netradiant, press enter and type the PWs"
275 #read -r DUMMY
276 #scp divverent@icculus.org:netradiant-webspace/files/netradiant-${netradiant_release}-win32.zip .
277 unzip netradiant-${netradiant_release}-win32.zip
278 mv NetRadiant netradiant-${netradiant_release}-win32
279 rm -f netradiant-${netradiant_release}-win32.zip
280 wget http://www.icculus.org/netradiant/files/netradiant-${netradiant_release}-osxintel.zip
281 #scp divverent@icculus.org:netradiant-webspace/files/netradiant-${netradiant_release}-osxintel.zip .
282 unzip netradiant-${netradiant_release}-osxintel.zip
283 mv NetRadiant.app NetRadiant-${netradiant_release}-osxintel.app
284 rm -f netradiant-${netradiant_release}-osxintel.zip
285 cat >> unsupported.txt <<EOF
286 This directory contains NetRadiant, a stabilized Q3 map editor,
287 configured for Nexuiz.
288
289 It is not officially supported by Alientrap.
290
291 Website: http://www.icculus.org/netradiant/
292 EOF
293 cd ..
294
295 # make main structure
296 mkdir Nexuiz
297 mv * Nexuiz/ || true
298
299 find . -name .svn -exec rm -rf {} \; -prune
300
301 rm -f "$zipdir/nexuiz$date$ext.zip"
302 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/*
303 ln -snf nexuiz$date$ext.zip "$zipdir/nexuiz-$newest.zip"
304
305 rm -f "$zipdir/nexuizengineonly$date$ext.zip"
306 zip $zipflags -9yr "$zipdir/nexuizengineonly$date$ext.zip" Nexuiz/gpl.txt Nexuiz/nexuiz* Nexuiz/Nexuiz* Nexuiz/*.dll
307 ln -snf nexuizengineonly$date$ext.zip "$zipdir/nexuizengineonly-$newest.zip"
308
309 rm -f "$zipdir/nexuizsource$date$ext.zip"
310 zip $zipflags -9yr "$zipdir/nexuizsource$date$ext.zip"     Nexuiz/gpl.txt                                            Nexuiz/sources
311 ln -snf nexuizsource$date$ext.zip "$zipdir/nexuizsource-$newest.zip"
312
313 # TODO remove these excludes after the version after 2.4.2
314 $zipdiff -o "Nexuiz/data/data$tag$date""patch.pk3" -f "$basepk3" -t Nexuiz/data/data$tag$date.pk3
315 [ -n "$hotbasepk3" ] && $zipdiff -o "Nexuiz/data/data$tag$date""hotfix.pk3" -f "$hotbasepk3" -t Nexuiz/data/data$tag$date.pk3
316 mkdir -p gfx
317 if unzip "Nexuiz/data/data$tag$date.pk3" gfx/brand.tga; then
318         zip -9r "Nexuiz/data/data$tag$date""patch.pk3" gfx/brand.tga
319         [ -n "$hotbasepk3" ] && zip -9r "Nexuiz/data/data$tag$date""hotfix.pk3" gfx/brand.tga
320         rm -rf gfx
321 fi
322
323 rm -f "$zipdir/nexuizpatch$date$ext.zip"
324 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/*
325 ln -snf nexuizpatch$date$ext.zip "$zipdir/nexuizpatch-$newest.zip"
326
327 [ -n "$hotbasepk3" ] && rm -f "$zipdir/nexuizhotfix$date$ext.zip"
328 [ -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/*
329 [ -n "$hotbasepk3" ] && ln -snf nexuizhotfix$date$ext.zip "$zipdir/nexuizhotfix-$newest.zip"
330
331 rm -f "$zipdir/nexuizdocs$date$ext.zip"
332 zip $zipflags -9yr "$zipdir/nexuizdocs$date$ext.zip"       Nexuiz/gpl.txt Nexuiz/Docs Nexuiz/readme.html
333 ln -snf nexuizdocs$date$ext.zip "$zipdir/nexuizdocs-$newest.zip"
334
335 rm -f "$zipdir/nexuizdebug$date$ext.zip"
336 zip $zipflags -9yr "$zipdir/nexuizdebug$date$ext.zip"      Nexuiz/gpl.txt Nexuiz/debuginfo/* Nexuiz/sources
337 ln -snf nexuizdebug$date$ext.zip "$zipdir/nexuizdebug-$newest.zip"
338
339 case "$versiontag" in
340         test)
341                 ;;
342         *)
343                 cat <<'EOF'
344
345 NOTE: This is a RELEASE BUILD.
346
347 To upload and finish the build, these things have to be done:
348
349 - Test the build:
350   - On Linux/ATI
351   - On Vista/nvidia
352   - On Vista/ATI
353   - On Vista/Intel
354   - On OSX/ATI
355   - Turn on "developer 1"; watch out for suspicious messages.
356   - While testing, make sure all campaign levels are tested. In CTF/KH levels,
357     try to do a capture. After that, finish the game by prvm_edictset server 1
358     frags 1000.
359   - Play on a server running the new code. Ideally, that server should be public
360     and "somewhat compatible" to old clients, and some other players should be
361     on it.
362 - Post the build on the forum as a test release. E.g. run this script again
363   with the "version" variable NOT SET, so the build gets marked "testing only",
364   and upload it and post it on the forum for testing. Mention the test server
365   that is already running the new code. Wait for at least one week for critical
366   bug reports.
367 - If needed, fix the reported bugs and re-run this script for a release build.
368   Possibly repeat the testing process.
369 - Upload the "final" build you have just made to Sourceforge (upload.sf.net,
370   incoming). Use the naming scheme nexuiz-25.zip, nexuizpatch-24-to-25.zip
371 - Make the download available on sourceforge.
372 - Announce the build on the forum; update the downloads website. Note that the
373   download may be still unavailable because of the SF mirror system.
374 - Wait for the mirrors to catch up.
375 - Edit the website: make a new news item for the new release, change the logo
376   image in the top left for the new version (ask [-z-]).
377
378 EOF
379                 ;;
380 esac