6 # I use this in EVERY shell script ;)
12 while ! [ -f ./all ]; do
13 if [ x"`pwd`" = x"/" ]; then
14 echo "Cannot find myself."
15 echo "Please run this script with the working directory inside a Xonotic checkout."
23 # If we are on WINDOWS:
28 # Windows hates users. So this script has to copy itself elsewhere first...
29 cp "$SELF" ../all.xonotic.sh
30 export WE_HATE_OUR_USERS=1
31 exec ../all.xonotic.sh "$@"
39 echo >&2 "$ESC[1m$*$ESC[m"
42 self=`git hash-object "$SELF"`
45 self_new=`git hash-object "$SELF"`
46 if [ x"$self" != x"$self_new" ]; then
47 msg "./all has changed."
48 if [ -z "$XONOTIC_FORBID_RERUN_ALL" ]; then
49 msg "Rerunning the requested operation to make sure."
50 export XONOTIC_FORBID_RERUN_ALL=1
53 msg "Please try $SELF update, and then retry your requested operation."
70 echo "the root directory"
80 if git ls-files -u | grep ' 1 '; then
82 echo "MERGE CONFLICT."
83 echo "change into the \"$1\" project directory, and then:"
84 echo "- edit the files mentioned above with your favorite editor,"
85 echo " and fix the conflicts (marked with <<<<<<< blocks)"
86 echo "- for binary files, you can select the files using"
87 echo " git checkout --ours or git checkout --theirs"
88 echo "- when done with a file, 'git add' the file"
89 echo "- when done, 'git commit'"
98 while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
109 check_mergeconflict "$1"
114 data/xonotic-data.pk3dir | | master |
115 data/xonotic-music.pk3dir | | master |
116 data/xonotic-nexcompat.pk3dir | | master | no
117 darkplaces | | div0-stable | svn
118 netradiant | | master |
119 div0-gittools | | master | no
120 d0_blind_id | | master |
121 data/xonotic-maps.pk3dir | | master |
122 mediasource | | master | no
123 fteqcc | | xonotic-stable | noautocrlf
125 # todo: in darkplaces, change repobranch to div0-stable
127 repos=`echo "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
129 base=`git config remote.origin.url`
132 base=${base%xonotic.git}
135 echo "The main repo is not xonotic.git, what have you done?"
139 pushbase=`git config remote.origin.pushurl || true`
142 pushbase=${pushbase%xonotic.git}
147 echo "The main repo is not xonotic.git, what have you done?"
154 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
155 if [ -n "$repo_t" ]; then
165 if [ x"$1" = x"." ]; then
166 echo "$base""xonotic.git"
168 echo "$base${1##*/}.git"
175 [ -n "$pushbase" ] || return 0
176 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
177 if [ -n "$repo_t" ]; then
182 echo "$pushbase$repo_t"
186 if [ x"$1" = x"." ]; then
187 echo "$pushbase""xonotic.git"
189 echo "$pushbase${1##*/}.git"
196 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
197 if [ -n "$repo_t" ]; then
206 echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
214 # if we have the dir, always keep it
216 msg "Repository $d enabled because it already exists"
220 # if .yes file exists, always keep it
221 if [ -f "$d.yes" ]; then
222 msg "Repository $d enabled by a .yes file"
226 # if we have .no file, skip
227 if [ -f "$d.no" ]; then
228 msg "Repository $d disabled by a .no file, delete $p.no to enable"
231 # if we have matching pk3, skip
232 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
233 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
236 # if "no" flag is set, skip
239 msg "Repository $d disabled by default, create $d.yes to enable"
244 msg "Repository $d enabled by default"
251 if [ "$#" = 0 ]; then
257 fix_upstream_rebase()
259 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
262 r_base=`git merge-base "$r_me" "$r_other"`
264 # no merge-base? upstream did filter-branch
265 if [ -n "$r_base" ]; then
266 # otherwise, check if the two histories are "similar"
267 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
268 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
270 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
271 r_lc_me=`echo "$r_l_me" | wc -l`
272 r_lc_other=`echo "$r_l_other" | wc -l`
273 r_lc_together=`{ echo "$r_l_me"; echo "$r_l_other"; } | sort -u | wc -l`
274 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
276 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
277 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
278 git reset --hard "$r_me"
288 fix_upstream_rebase_mergeok()
290 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
291 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
295 fix_upstream_rebase_mergefail()
297 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
298 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
304 verbose git config remote.origin.url "$1"
306 verbose git config remote.origin.pushurl "$2"
308 verbose git config --unset remote.origin.pushurl || true
310 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
311 case ",`repoflags "$d"`," in
313 verbose git config --unset core.autocrlf || true
316 verbose git config core.autocrlf input
319 if [ -z "`git config push.default || true`" ]; then
320 verbose git config push.default current # or is tracking better?
322 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
323 verbose git config filter.mapclean.smudge "cat"
331 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
332 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
333 zip -9y -@<"$ziplist" "$archive" || true
345 enter "$d0/$d" verbose
346 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
352 pushurl=`repopushurl "$d"`
353 branch=`repobranch "$d"`
354 if [ -d "$d0/$d" ]; then
356 fix_git_config "$url" "$pushurl"
362 # enable the ssh URL for pushing
365 if [ -f ~/.ssh/id_rsa.pub ]; then
367 msg "A key already exists and no new one will be generated. If you"
368 msg "already have done the procedure for getting your key approved, you"
369 msg "can skip the following paragraph and already use the repository."
371 msg "To get access, your key has to be approved first. For that, visit"
372 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
373 msg "the \"Support\" tracker in the \"Repository\" category where you"
374 msg "apply for access and paste the following output into the issue:"
376 msg "`cat ~/.ssh/id_rsa.pub`"
378 msg "Note that you will only have write access to branches that start"
379 msg "with your user name."
380 elif [ -f ~/.ssh/id_dsa.pub ]; then
382 msg "A key already exists and no new one will be generated. If you"
383 msg "already have done the procedure for getting your key approved, you"
384 msg "can skip the following paragraph and already use the repository."
386 msg "To get access, your key has to be approved first. For that, visit"
387 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
388 msg "the \"Support\" tracker in the \"Repository\" category where you"
389 msg "apply for access and paste the following output into the issue:"
391 msg "`cat ~/.ssh/id_dsa.pub`"
393 msg "Note that you will only have write access to branches that start"
394 msg "with your user name."
397 msg "No key has been generated yet. One will be generated now."
398 msg "If other people are using your computer, it is recommended"
399 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
400 msg "when asked for a passphrase."
402 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
404 msg "To get access, your key has to be approved first. For that, visit"
405 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
406 msg "the \"Support\" tracker in the \"Repository\" category where you"
407 msg "apply for access and paste the following output into the issue:"
409 msg "`cat ~/.ssh/id_rsa.pub`"
411 msg "Note that you will only have write access to branches that start"
412 msg "with your user name."
420 if [ x"$1" = x"-N" ]; then
422 elif [ x"$1" = x"-p" ]; then
424 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
425 pushbase=ssh://xonotic@git.xonotic.org/
427 elif [ x"$1" = x"-s" ]; then
429 base=ssh://xonotic@git.xonotic.org/
431 elif [ x"$1" = x"-g" ]; then
433 base=git://git.xonotic.org/xonotic/
434 elif [ x"$1" = x"-h" ]; then
436 base=http://git.xonotic.org/xonotic/
437 elif [ x"$1" = x"-l" ]; then
443 msg "Invalid location!"
444 msg "Possible locations for the -l option:"
445 msg " nl (Netherlands, run by merlijn)"
446 msg " de (Germany, run by divVerent)"
447 msg " default (currently nl)"
465 *://*.git.xonotic.org/*)
466 location=${base%%.git.xonotic.org/*}
467 location=${location##*://}
475 if [ -n "$location" ]; then
476 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
477 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
479 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
480 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
484 pushurl=`repopushurl .`
485 fix_git_config "$url" "$pushurl"
487 if $allow_pull || $fix_config; then
492 pushurl=`repopushurl "$d"`
493 branch=`repobranch "$d"`
494 if [ -d "$d0/$d" ]; then
496 enter "$d0/$d" verbose
497 r=`git symbolic-ref HEAD`
499 if git config branch.$r.remote >/dev/null 2>&1; then
500 if ! verbose git pull; then
501 fix_upstream_rebase_mergefail || true
502 check_mergeconflict "$d"
503 echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
506 fix_upstream_rebase_mergeok || true
511 checkself "$cmd" "$@"
513 verbose git remote prune origin
517 verbose git clone "$url" "$d0/$d"
518 enter "$d0/$d" verbose
519 fix_git_config "$url" "$pushurl"
520 if [ "$branch" != "master" ]; then
521 verbose git checkout --track -b "$branch" origin/"$branch"
528 misc/tools/xonotic-map-compiler-autobuild download
532 if [ x"$1" = x"-f" ]; then
538 if [ -z "$branch" ]; then
541 branch=${remote#origin/}
552 enter "$d0/$d" verbose
554 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
556 verbose git checkout $checkoutflags "$b"
557 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
559 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
562 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
564 verbose git checkout $checkoutflags "$b"
565 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
567 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
569 echo "WTF? Not even branch $b doesn't exist in $d"
574 checkself "$cmd" "$@"
578 echo "The requested branch was not found in any repository."
586 if [ -z "$branch" ]; then
590 if [ -z "$branch" ]; then
593 r=`git symbolic-ref HEAD`
600 dv=`visible_repo_name "$d"`
601 enter "$d0/$d" verbose
602 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
603 echo "Already having this branch in $dv."
605 if yesno "Branch in $dv?"; then
606 if [ -n "$srcbranch" ]; then
609 b=origin/"`repobranch "$d"`"
610 verbose git fetch origin || true
612 # TODO do this without pushing
613 verbose git checkout -b "$branch" "$b"
614 verbose git config "branch.$branch.remote" "$remote"
615 verbose git config "branch.$branch.merge" "refs/heads/$branch"
625 cd "$d0/$d" # am in a pipe, shouldn't use enter
626 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
631 while read -r d BRANCH REV TEXT; do
632 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
635 if [ x"$REV" = x"->" ]; then
638 BRANCH=${BRANCH#remotes/}
639 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
640 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
641 eval "r=\$branches_repos_$ID"
643 eval "branches_repos_$ID=\$r"
645 echo -n "$branches_list" | xargs -n 1 echo | sort -u | while IFS= read -r BRANCH; do
646 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
647 eval "r=\$branches_repos_$ID"
648 printf "%-60s %s\n" "$BRANCH" "$r"
655 dv=`visible_repo_name "$d"`
656 enter "$d0/$d" verbose
657 r=`git symbolic-ref HEAD`
659 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
660 # we have uncommitted changes
661 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
662 if ! verbose git merge origin/"`repobranch "$d"`"; then
663 check_mergeconflict "$d"
664 exit 1 # this should ALWAYS be fatal
674 dv=`visible_repo_name "$d"`
675 enter "$d0/$d" verbose
676 r=`git symbolic-ref HEAD`
678 diffdata=`git diff --color HEAD`
679 if [ -n "$diffdata" ]; then
680 # we have uncommitted changes
681 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" 'echo "$diffdata" | less -r'; then
682 verbose git commit -a
685 rem=`git config "branch.$r.remote" || echo origin`
686 bra=`git config "branch.$r.merge" || echo "$r"`
687 upstream="$rem/${bra#refs/heads/}"
688 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
689 upstream="origin/`repobranch "$d"`"
691 logdata=`git log --color "$upstream".."$r"`
692 if [ -n "$logdata" ]; then
693 if yesno "Push \"$r\" in $dv?" 'echo "$logdata" | less -r'; then
694 verbose git push "$rem" HEAD
697 if [ x"$submit" = x"-s" ]; then
700 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
714 snowleopardhack=false
715 if [ -z "$CC" ]; then
716 export CC="gcc -DSUPPORTIPV6"
733 export CC="$CC -g -mtune=native -march=native"
741 if [ -n "$WE_HATE_OUR_USERS" ]; then
742 TARGETS="sv-$debug cl-$debug"
743 elif [ x"`uname`" = x"Darwin" ]; then
746 TARGETS="sv-$debug cl-$debug sdl-$debug"
749 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
751 TARGETS="sv-$debug sdl-$debug"
754 export CC="$CC -I$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
756 TARGETS="sv-$debug cl-$debug sdl-$debug"
758 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
759 # if we give the command make the arg "", it will surely fail (invalid filename),
760 # so better handle it as an empty client option
763 elif [ -n "$1" ]; then
765 TARGETS_SAVE=$TARGETS
770 TARGETS="$TARGETS sdl-debug"
773 TARGETS="$TARGETS cl-debug"
774 if $snowleopardhack; then
775 export CC="$CC -arch i386"
779 TARGETS="$TARGETS cl-debug"
782 TARGETS="$TARGETS sv-debug"
785 BAD_TARGETS="$BAD_TARGETS $X"
789 if [ -n "$TARGETS" ]; then # at least a valid client
791 else # no valid client, let's assume this option is not meant to be a client then
792 TARGETS=$TARGETS_SAVE
796 if [ -z "$MAKEFLAGS" ]; then
797 if [ -f /proc/cpuinfo ]; then
798 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
799 if [ $ncpus -gt 1 ]; then
803 if [ -n "$WE_HATE_OUR_USERS" ]; then
804 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
808 enter "$d0/d0_blind_id" verbose
809 if ! $compiled0; then
810 # compilation of crypto library failed
811 # use binaries then, if we can...
813 if [ -n "$WE_HATE_OUR_USERS" ]; then
814 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
815 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
821 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
822 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
823 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
826 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
827 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
828 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
836 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
846 if [ -f Makefile ]; then
847 verbose make $MAKEFLAGS distclean
850 if ! [ -f Makefile ]; then
851 verbose sh autogen.sh
854 verbose make $MAKEFLAGS
857 enter "$d0/fteqcc" verbose
859 verbose make $MAKEFLAGS clean
861 verbose make $MAKEFLAGS
863 enter "$d0/data/xonotic-data.pk3dir" verbose
865 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
867 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
868 # 4 levels up: data, xonotic-data, qcsrc, server
870 enter "$d0/darkplaces" verbose
871 if [ x"$BAD_TARGETS" = x" " ]; then
872 echo "Warning: invalid empty client, default clients will be used."
875 verbose make $MAKEFLAGS clean
877 for T in $TARGETS; do
878 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
880 for T in $BAD_TARGETS; do
881 echo "Warning: discarded invalid client $T."
884 verbose "$SELF" update-maps
887 if [ -n "$WE_HATE_OUR_USERS" ]; then
889 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
890 elif [ x"`uname`" = x"Darwin" ]; then
891 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
892 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
895 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
899 sdl|glx|agl|dedicated)
908 if ! [ -x "darkplaces/darkplaces$client" ]; then
909 if [ -x "darkplaces/darkplaces$client.exe" ]; then
912 echo "Client darkplaces/darkplaces$client not found, aborting"
916 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
918 # if pulseaudio is running: USE IT
919 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
920 if ps -C pulseaudio >/dev/null; then
921 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
922 export SDL_AUDIODRIVER=pulse
929 if [ -n "$USE_GDB" ]; then
930 set -- gdb --args "$@"
931 elif which gdb >/dev/null 2>&1; then
932 set -- gdb --batch -x savecore.gdb --args "$@"
933 elif which catchsegv >/dev/null 2>&1; then
934 set -- catchsegv "$@"
938 if [ -f xonotic.core ]; then
939 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
940 gdb "$binary" xonotic.core
941 #elif yesno "You did not want to examine the core dump. Do you want to provide it - including your DarkPlaces checkout - to the Xonotic developers?"; then
942 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
944 # rm -f xonotic.core.tar.gz
946 echo "The core dump can be examined later by"
947 echo " gdb $binary xonotic.core"
953 if [ x"$1" = x"-k" ]; then
958 if verbose cd "$d0/$d"; then
970 patchdir=`mktemp -d -t save-patches.XXXXXX`
972 enter "$d0/$d" verbose
973 git branch -v -v | cut -c 3- | {
975 while read -r BRANCH REV UPSTREAM TEXT; do
978 UPSTREAM=${UPSTREAM#\[}
979 UPSTREAM=${UPSTREAM%\]}
980 UPSTREAM=${UPSTREAM%:*}
984 UPSTREAM=origin/"`repobranch "$d"`"
988 if [ x"$REV" = x"->" ]; then
991 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
992 echo "$d" > "$patchdir/$i/info.txt"
993 echo "$BRANCH" >> "$patchdir/$i/info.txt"
994 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
995 echo "$TRACK" >> "$patchdir/$i/info.txt"
998 rm -rf "$patchdir/$i"
1003 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1008 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1009 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1011 for P in "$patchdir"/*/info.txt; do
1016 read -r UPSTREAM <&3
1018 verbose git checkout HEAD^0
1019 verbose git branch -D "$BRANCH"
1020 if [ x"$TRACK" = x"true" ]; then
1021 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1023 verbose git branch -b "$BRANCH" "$UPSTREAM"
1035 report=$report"$*$LF"
1040 report=$report" $*$LF"
1045 o=`"$@" | sed 's/^/ /' || true`
1051 # sorry, fteqcc repo is managed manually
1055 enter "$d0/$d" verbose
1056 base="`repobranch "$d"`"
1058 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1059 case "${ref#refs/remotes/origin/}" in
1072 if [ -n "$branch" ]; then
1073 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1082 l0=`git rev-list "$base".."$ref" | wc -l`
1083 l1=`git rev-list master.."$ref" | wc -l`
1084 if [ $l0 -gt $l1 ]; then
1091 reportecho " Branch $ref:"
1092 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1093 logdata=`git log --color "$realbase".."$ref"`
1094 if [ -z "$logdata" ]; then
1095 reportecho4 "--> not merging, no changes vs master"
1096 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1097 git push origin :"${ref#refs/remotes/origin/}"
1098 reportecho4 "--> branch deleted"
1101 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1102 if [ -z "$diffdata" ]; then
1103 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1104 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1105 git push origin :"${ref#refs/remotes/origin/}"
1106 reportecho4 "--> branch deleted"
1108 elif [ -z "$branch" ] && [ -n "$note" ]; then
1109 reportdo4 echo "$note"
1110 reportecho4 "--> not merging, already had this one rejected before"
1111 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1112 git checkout "$realbase"
1113 org=`git rev-parse HEAD`
1114 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1115 git reset --hard "$org"
1116 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1118 reportecho4 "--> merge failed"
1119 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1120 git reset --hard "$org"
1121 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1123 reportecho4 "--> compile failed"
1124 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1125 git reset --hard "$org"
1126 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1127 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1128 if [ x"$note" = x"del" ]; then
1129 git push origin :"${ref#refs/remotes/origin/}"
1130 reportecho4 "--> test failed, branch deleted"
1131 elif [ -n "$note" ]; then
1132 reportdo4 echo "$note"
1133 reportecho4 "--> test failed"
1135 reportecho4 "--> test failed, postponed"
1138 # apply crlf, or other cleanup filters (non-behavioural changes)
1140 find . -type f -exec touch {} \;
1141 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1144 case ",`repoflags "$d"`," in
1146 # we do quite a mess here... luckily we know $org
1147 git fetch # svn needs to be current
1148 git rebase -i --onto origin/master "$org"
1149 git svn dcommit --add-author-from
1150 git reset --hard "$org"
1153 git push origin HEAD
1156 reportecho4 "--> MERGED"
1157 if yesno "Delete original branch \"$ref\"?"; then
1158 git push origin :"${ref#refs/remotes/origin/}"
1159 reportecho4 "--> branch deleted"
1163 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1164 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1165 if [ x"$note" = x"del" ]; then
1166 git push origin :"${ref#refs/remotes/origin/}"
1167 reportecho4 "--> branch deleted"
1168 elif [ -n "$note" ]; then
1169 reportdo4 echo "$note"
1170 reportecho4 "--> rejected"
1172 reportecho4 "--> postponed"
1181 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1193 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1194 # ./all clean --reclone
1197 if [ x"$X" = x"--reclone" ]; then
1204 elif [ x"$X" = x"-f" ]; then
1206 elif [ x"$X" = x"-u" ]; then
1208 elif [ x"$X" = x"-U" ]; then
1211 elif [ x"$X" = x"-fu" ]; then
1214 elif [ x"$X" = x"-fU" ]; then
1218 elif [ x"$X" = x"-m" ]; then
1220 elif [ x"$X" = x"-r" ]; then
1222 elif [ x"$X" = x"-D" ]; then
1224 elif echo "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1227 msg ' ,--'\''-\\P/`\\ FFFFFFF'
1228 msg ' __/_ B/,-.\\ FFFFFFF'
1229 msg ' / _\\ (// O\\\\ FFFFFF'
1230 msg '| (O `) _\\._ _)\\ FFFUU'
1231 msg '| |___/.^d0~~"\\ \\ UUUU'
1232 msg '| |`~'\'' \\ | UUUU'
1233 msg '| | __,C>|| UUUU'
1234 msg '\\ /_ ,-/,-'\'' | UUUU'
1235 msg ' \\\\_ \\_>~'\'' / UUUU-'
1238 msg "Unknown arg: $X"
1248 if $gotoupstream; then
1250 msg "Must also use -f (delete local changes) when using -u"
1253 if $gotomaster; then
1254 if $fetchupstream; then
1255 verbose git fetch origin
1256 verbose git remote prune origin
1258 verbose git checkout -f "`repobranch "$d"`"
1259 verbose git reset --hard origin/"`repobranch "$d"`"
1261 r=`git symbolic-ref HEAD`
1263 rem=`git config "branch.$r.remote" || echo origin`
1264 bra=`git config "branch.$r.merge" || echo "$r"`
1265 upstream="$rem/${bra#refs/heads/}"
1266 if $fetchupstream; then
1267 verbose git fetch "$rem"
1268 verbose git remote prune "$rem"
1270 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1271 upstream="origin/`repobranch "$d"`"
1273 verbose git reset --hard "$upstream"
1275 elif $gotomaster; then
1277 verbose git checkout -f "`repobranch "$d"`"
1278 verbose git reset --hard
1280 verbose git checkout "`repobranch "$d"`"
1283 verbose git reset --hard
1285 if $rmuntracked; then
1288 verbose git clean -df
1291 verbose git clean -xdf
1295 if $killbranches; then
1296 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1297 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1298 verbose git branch -D "${B#refs/heads/}"
1301 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1302 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1304 checkself "$cmd" "$@"
1308 # release building goes here
1310 #"$SELF" each git clean -fxd
1311 case "$RELEASETYPE" in
1313 msg "Building a BETA"
1316 msg "Building a RELEASE"
1319 echo >&2 -n "$ESC[2J$ESC[H"
1326 msg " +---------------------------------------------------------.---+"
1328 msg " +---------------------------------------------------------^---+"
1330 msg " | / \ This is the official release build system. |"
1331 msg " | | | If you are not a member of the Xonotic Core Team, |"
1332 msg " | | STOP | you are not supposed to use this script and should |"
1333 msg " | | | instead use ./all compile to compile the engine |"
1334 msg " | \____/ and game code. |"
1336 msg " | [ I understand ] |"
1337 msg " +-------------------------------------------------------------+"
1339 # A LOT of build infrastructure is required:
1342 # - .ssh/config must be configured so the following
1343 # host names are reachable and have a compile
1344 # infrastructure set up:
1345 # - xonotic-build-linux32 (with gcc on x86)
1346 # - xonotic-build-linux64 (with gcc on x86_64)
1347 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1348 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1349 # and x86_64-w64-mingw32-g++)
1350 # - xonotic-build-osx (with Xcode and SDL.framework)
1351 # - AMD Compressonator installed in WINE
1352 # - ResEdit installed in WINE
1353 # - a lot of other requirements you will figure out
1354 # while reading the error messages
1355 # - environment variable RELEASETYPE set
1356 # - optionally, environment variable RELEASEDATE set
1361 verbose rm -rf Xonotic Xonotic*.zip
1362 verbose mkdir -p Xonotic
1363 if [ -n "$RELEASEDATE" ]; then
1364 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1366 verbose date +%Y%m%d > Xonotic/stamp.txt
1368 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1370 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1372 verbose rm -rf misc/builddeps
1373 verbose mv misc/buildfiles/win32/* . || true
1374 verbose mv misc/buildfiles/win64 bin64 || true
1375 verbose mv misc/buildfiles/osx/* . || true
1376 verbose rm -rf misc/buildfiles
1377 verbose rm -rf misc/pki
1380 verbose cd darkplaces
1381 verbose git archive --format=tar HEAD
1383 verbose cd Xonotic/source/darkplaces
1388 verbose git archive --format=tar HEAD
1390 verbose cd Xonotic/source/fteqcc
1394 verbose cd data/xonotic-data.pk3dir
1395 verbose git archive --format=tar HEAD -- qcsrc Makefile
1397 verbose cd Xonotic/source
1400 rm -f Xonotic/key_15.d0pk
1402 release-compile-run)
1411 if [ -n "$targetfiles" ]; then
1412 case " $HOSTS_THAT_ARE_DISABLED " in
1417 case " $HOSTS_THAT_ARE_MYSELF " in
1419 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1420 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1421 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1422 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1423 for f in $targetfiles; do
1424 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1428 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1429 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1430 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1431 for f in $targetfiles; do
1432 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1436 # now rebrand the binaries...
1437 for f in $targetfiles; do
1438 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1441 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1443 d=`mktemp -d -t rebrand.XXXXXX`
1445 echo "-mygames" > darkplaces.opt
1446 zip -9r darkplaces.zip darkplaces.opt
1459 fteqcc_maketargets=$3
1461 darkplaces_maketargets=$5
1463 host=xonotic-build-$suffix
1464 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1465 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1467 release-engine-win32)
1468 verbose "$SELF" release-compile win32 \
1469 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -march=i686 -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \
1470 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1472 verbose "$SELF" release-compile win32 \
1473 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=0' \
1475 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1477 release-engine-win64)
1478 verbose "$SELF" release-compile win64 \
1479 'STRIP=: DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="amd64-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \
1480 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1481 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1482 verbose "$SELF" release-compile win64 \
1483 'STRIP=: DP_MAKE_TARGET=mingw CC="x86_64-w64-mingw32-gcc -g -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="x86_64-w64-mingw32-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=0' \
1485 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1488 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1489 verbose "$SELF" release-compile osx \
1490 'STRIP=: CC="gcc -g -arch i386 -arch ppc -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \
1491 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1492 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1493 verbose "$SELF" release-compile osx \
1494 'STRIP=: CC="gcc -g -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \
1496 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1498 release-engine-linux32)
1499 verbose "$SELF" release-compile linux32 \
1500 'STRIP=: CC="gcc -m32 -march=i686 -g -I.deps/include -L.deps/lib -DSUPPORTIPV6" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \
1501 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1502 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1504 release-engine-linux64)
1505 verbose "$SELF" release-compile linux64 \
1506 'STRIP=: CC="gcc -m64 -g -I.deps/include -L.deps/lib -DSUPPORTIPV6" DP_MODPLUG_STATIC_LIBDIR=.deps/lib LIB_JPEG=.deps/lib/libjpeg.a DP_CRYPTO_STATIC_LIBDIR=.deps/lib' \
1507 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1508 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1511 verbose "$SELF" release-engine-linux32 &
1512 verbose "$SELF" release-engine-linux64 &
1513 verbose "$SELF" release-engine-win32 &
1514 verbose "$SELF" release-engine-win64 &
1515 verbose "$SELF" release-engine-osx &
1524 verbose "$SELF" update-maps
1527 case "$RELEASETYPE" in
1529 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1530 # back out of: source/qcsrc/server
1533 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1536 verbose rm -f Xonotic/source/*/fteqcc.log
1538 release-buildpk3-transform-raw)
1541 release-buildpk3-transform-normal)
1544 # texture: convert to jpeg and dds
1545 verbose export do_jpeg=true
1546 verbose export jpeg_qual_rgb=95
1547 verbose export jpeg_qual_a=99
1548 verbose export do_dds=true
1549 verbose export dds_flags=
1550 verbose export do_ogg=false
1551 verbose export del_src=true
1552 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1554 release-buildpk3-transform-low)
1557 # texture: convert to jpeg and dds
1558 # music: reduce bitrate
1559 verbose export do_jpeg=true
1560 verbose export jpeg_qual_rgb=80
1561 verbose export jpeg_qual_a=97
1562 verbose export do_dds=false
1563 verbose export do_ogg=true
1564 verbose export ogg_qual=1
1565 verbose export del_src=true
1566 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1568 release-buildpk3-transform-lowdds)
1571 # texture: convert to jpeg and dds
1572 # music: reduce bitrate
1573 verbose export do_jpeg=false
1574 verbose export do_jpeg_if_not_dds=true
1575 verbose export jpeg_qual_rgb=80
1576 verbose export jpeg_qual_a=99
1577 verbose export do_dds=true
1578 verbose export dds_flags=
1579 verbose export do_ogg=true
1580 verbose export ogg_qual=1
1581 verbose export del_src=true
1582 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1595 verbose rm -rf Xonotic/temp
1596 verbose mkdir -p Xonotic/temp
1599 verbose git archive --format=tar HEAD
1601 verbose cd Xonotic/temp
1604 verbose cd Xonotic/temp
1605 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1606 verbose cp ../source/progs.dat .
1607 verbose cp ../source/csprogs.dat .
1608 verbose cp ../source/menu.dat .
1609 verbose rm -rf qcsrc
1610 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1611 major=$(($gv / 10000))
1612 minor=$(($gv / 100 - $major * 100))
1613 patch=$(($gv - $major * 10000 - $minor * 100))
1614 versionstr="$major.$minor.$patch"
1615 case "$RELEASETYPE" in
1617 versionstr="$versionstr""beta"
1621 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1622 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1623 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1624 " defaultXonotic.cfg
1626 verbose cd gfx/menu/luminos
1627 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1628 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1629 verbose rm background_l2.svg
1632 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1633 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1634 if [ -f "$X" ]; then
1636 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1640 verbose export git_src_repo="$d0/$src" # skip hash-object
1641 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1642 verbose mkzip "../../$dst" *
1644 verbose rm -rf Xonotic/temp
1647 stamp=`cat Xonotic/stamp.txt`
1653 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1659 while [ "$#" -gt 1 ]; do
1660 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1666 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1667 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1668 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1669 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1670 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1672 release-pack-needsx11)
1675 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1678 verbose "$SELF" release-pack
1683 stamp=`cat Xonotic/stamp.txt`
1684 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1685 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1686 # let's pass crypto import laws of some nasty countries
1687 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1688 if [ -n "$crypto_libs" ]; then
1689 verbose mkzip Xonotic-$stamp-crypto.zip \
1693 # build the archives
1694 verbose mkzip Xonotic-$stamp-engine.zip \
1696 Xonotic/bin64/*.dll \
1699 Xonotic/xonotic.exe \
1700 Xonotic/source/darkplaces/
1701 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1702 verbose mkzip Xonotic-$stamp-common.zip \
1703 Xonotic/source/fteqcc/ \
1704 Xonotic/source/qcsrc/ \
1709 Xonotic/key_0.d0pk \
1710 Xonotic/data/font-nimbussansl-$stamp.pk3
1711 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1712 verbose mkzip0 Xonotic-$stamp.zip \
1713 Xonotic/data/xonotic-$stamp-data.pk3 \
1714 Xonotic/data/xonotic-$stamp-maps.pk3 \
1715 Xonotic/data/xonotic-$stamp-music.pk3 \
1716 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1717 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1718 verbose mkzip0 Xonotic-$stamp-low.zip \
1719 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1720 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1721 Xonotic/data/xonotic-$stamp-music-low.pk3
1722 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1723 # verbose mkzip0 Xonotic-$stamp-high.zip \
1724 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1725 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1726 # Xonotic/data/xonotic-$stamp-music.pk3 \
1727 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1728 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1729 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1730 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1731 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1732 Xonotic/data/xonotic-$stamp-music-low.pk3
1735 verbose "$SELF" release-prepare
1736 verbose "$SELF" release-maps
1737 verbose "$SELF" release-engine
1738 verbose "$SELF" release-qc
1739 verbose "$SELF" release-pack-needsx11
1740 verbose "$SELF" release-zip
1745 echo " $SELF admin-merge [<branch>]"
1746 echo " $SELF branch <branch>"
1747 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1748 echo " $SELF branches"
1749 echo " $SELF checkout|switch <branch>"
1750 echo " $SELF checkout|switch <remote>/<branch>"
1751 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1752 echo " $SELF clean --reclone"
1753 echo " $SELF compile [-c] [-r] [-0]"
1754 echo " $SELF each|foreach [-k] command..."
1755 echo " $SELF fix_upstream_rebase"
1756 echo " $SELF keygen"
1758 echo " $SELF push|commit [-s]"
1759 echo " $SELF release"
1760 echo " $SELF restore-patches"
1761 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1762 echo " $SELF save-patches"
1763 echo " $SELF update-maps"
1764 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"