5 if [ -n "$ZSH_VERSION" ]; then
8 if [ -z "$ECHO" ]; then
9 if echo "\\\\" | grep .. >/dev/null; then
16 # I use this in EVERY shell script ;)
22 while ! [ -f ./all ]; do
23 if [ x"`pwd`" = x"/" ]; then
24 $ECHO "Cannot find myself."
25 $ECHO "Please run this script with the working directory inside a Xonotic checkout."
33 # If we are on WINDOWS:
38 # Windows hates users. So this script has to copy itself elsewhere first...
39 cp "$SELF" ../all.xonotic.sh
40 export WE_HATE_OUR_USERS=1
41 exec ../all.xonotic.sh "$@"
49 $ECHO >&2 "$ESC""[1m$*$ESC""[m"
52 self=`git hash-object "$SELF"`
55 self_new=`git hash-object "$SELF"`
56 if [ x"$self" != x"$self_new" ]; then
57 msg "./all has changed."
58 if [ -z "$XONOTIC_FORBID_RERUN_ALL" ]; then
59 msg "Rerunning the requested operation to make sure."
60 export XONOTIC_FORBID_RERUN_ALL=1
63 msg "Please try $SELF update, and then retry your requested operation."
80 $ECHO "the root directory"
90 if git ls-files -u | grep ' 1 '; then
92 $ECHO "MERGE CONFLICT."
93 $ECHO "change into the \"$1\" project directory, and then:"
94 $ECHO "- edit the files mentioned above with your favorite editor,"
95 $ECHO " and fix the conflicts (marked with <<<<<<< blocks)"
96 $ECHO "- for binary files, you can select the files using"
97 $ECHO " git checkout --ours or git checkout --theirs"
98 $ECHO "- when done with a file, 'git add' the file"
99 $ECHO "- when done, 'git commit'"
108 while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
119 check_mergeconflict "$1"
124 data/xonotic-data.pk3dir | | master |
125 data/xonotic-music.pk3dir | | master |
126 data/xonotic-nexcompat.pk3dir | | master | no
127 darkplaces | | div0-stable | svn
128 netradiant | | master |
129 div0-gittools | | master | no
130 d0_blind_id | | master |
131 data/xonotic-maps.pk3dir | | master |
132 mediasource | | master | no
133 fteqcc | | xonotic-stable | noautocrlf
135 # todo: in darkplaces, change repobranch to div0-stable
137 repos=`$ECHO "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
139 base=`git config remote.origin.url`
142 base=${base%xonotic.git}
145 $ECHO "The main repo is not xonotic.git, what have you done?"
149 pushbase=`git config remote.origin.pushurl || true`
152 pushbase=${pushbase%xonotic.git}
157 $ECHO "The main repo is not xonotic.git, what have you done?"
164 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
165 if [ -n "$repo_t" ]; then
175 if [ x"$1" = x"." ]; then
176 $ECHO "$base""xonotic.git"
178 $ECHO "$base${1##*/}.git"
185 [ -n "$pushbase" ] || return 0
186 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
187 if [ -n "$repo_t" ]; then
192 $ECHO "$pushbase$repo_t"
196 if [ x"$1" = x"." ]; then
197 $ECHO "$pushbase""xonotic.git"
199 $ECHO "$pushbase${1##*/}.git"
206 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
207 if [ -n "$repo_t" ]; then
216 $ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
224 # if we have the dir, always keep it
226 msg "Repository $d enabled because it already exists"
230 # if .yes file exists, always keep it
231 if [ -f "$d.yes" ]; then
232 msg "Repository $d enabled by a .yes file"
236 # if we have .no file, skip
237 if [ -f "$d.no" ]; then
238 msg "Repository $d disabled by a .no file, delete $p.no to enable"
241 # if we have matching pk3, skip
242 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
243 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
246 # if "no" flag is set, skip
249 msg "Repository $d disabled by default, create $d.yes to enable"
254 msg "Repository $d enabled by default"
261 if [ "$#" = 0 ]; then
267 fix_upstream_rebase()
269 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
272 r_base=`git merge-base "$r_me" "$r_other"`
274 # no merge-base? upstream did filter-branch
275 if [ -n "$r_base" ]; then
276 # otherwise, check if the two histories are "similar"
277 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
278 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
280 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
281 r_lc_me=`$ECHO "$r_l_me" | wc -l`
282 r_lc_other=`$ECHO "$r_l_other" | wc -l`
283 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
284 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
286 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
287 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
288 git reset --hard "$r_me"
298 fix_upstream_rebase_mergeok()
300 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
301 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
305 fix_upstream_rebase_mergefail()
307 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
308 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
314 verbose git config remote.origin.url "$1"
316 verbose git config remote.origin.pushurl "$2"
318 verbose git config --unset remote.origin.pushurl || true
320 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
321 case ",`repoflags "$d"`," in
323 verbose git config --unset core.autocrlf || true
326 verbose git config core.autocrlf input
329 if [ -z "`git config push.default || true`" ]; then
330 verbose git config push.default current # or is tracking better?
332 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
333 verbose git config filter.mapclean.smudge "cat"
341 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
342 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
343 zip -9y -@<"$ziplist" "$archive" || true
354 # first result is to be ignored, but we use it to check status
355 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
356 { time -p git ls-remote "$1" refs/heads/master; } 2>&1 >/dev/null | head -n 1 | cut -d ' ' -f 2 | tr -d . | sed 's,^0*,,'
357 # unit: clock ticks (depends on what "time" returns
365 if ! { time -p true; } >/dev/null 2>&1; then
373 if t=`mirrorspeed "$m"`; then
376 if [ -z "$bestt" ] || [ "$t" -lt "$bestt" ]; then
385 if [ -n "$bestin" ]; then
386 msg "Best mirror seems to be $pre$bestin$suf"
396 enter "$d0/$d" verbose
397 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
403 pushurl=`repopushurl "$d"`
404 branch=`repobranch "$d"`
405 if [ -d "$d0/$d" ]; then
407 fix_git_config "$url" "$pushurl"
413 # enable the ssh URL for pushing
416 if [ -f ~/.ssh/id_rsa.pub ]; then
418 msg "A key already exists and no new one will be generated. If you"
419 msg "already have done the procedure for getting your key approved, you"
420 msg "can skip the following paragraph and already use the repository."
422 msg "To get access, your key has to be approved first. For that, visit"
423 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
424 msg "the \"Support\" tracker in the \"Repository\" category where you"
425 msg "apply for access and paste the following output into the issue:"
427 msg "`cat ~/.ssh/id_rsa.pub`"
429 msg "Note that you will only have write access to branches that start"
430 msg "with your user name."
431 elif [ -f ~/.ssh/id_dsa.pub ]; then
433 msg "A key already exists and no new one will be generated. If you"
434 msg "already have done the procedure for getting your key approved, you"
435 msg "can skip the following paragraph and already use the repository."
437 msg "To get access, your key has to be approved first. For that, visit"
438 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
439 msg "the \"Support\" tracker in the \"Repository\" category where you"
440 msg "apply for access and paste the following output into the issue:"
442 msg "`cat ~/.ssh/id_dsa.pub`"
444 msg "Note that you will only have write access to branches that start"
445 msg "with your user name."
448 msg "No key has been generated yet. One will be generated now."
449 msg "If other people are using your computer, it is recommended"
450 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
451 msg "when asked for a passphrase."
453 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
455 msg "To get access, your key has to be approved first. For that, visit"
456 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
457 msg "the \"Support\" tracker in the \"Repository\" category where you"
458 msg "apply for access and paste the following output into the issue:"
460 msg "`cat ~/.ssh/id_rsa.pub`"
462 msg "Note that you will only have write access to branches that start"
463 msg "with your user name."
471 if [ x"$1" = x"-N" ]; then
473 elif [ x"$1" = x"-p" ]; then
475 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
476 pushbase=ssh://xonotic@git.xonotic.org/
478 elif [ x"$1" = x"-s" ]; then
480 base=ssh://xonotic@git.xonotic.org/
482 elif [ x"$1" = x"-g" ]; then
484 base=git://git.xonotic.org/xonotic/
485 elif [ x"$1" = x"-h" ]; then
487 base=http://git.xonotic.org/xonotic/
488 elif [ x"$1" = x"-l" ]; then
495 msg "Invalid location!"
496 msg "Possible locations for the -l option:"
497 msg " nl (Netherlands, run by merlijn)"
498 msg " de (Germany, run by divVerent)"
499 msg " best (find automatically)"
500 msg " default (currently nl)"
514 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
517 if location=`bestmirror $newbase"xonotic.git" de nl`; then
535 *://*.git.xonotic.org/*)
536 location=${base%%.git.xonotic.org/*}
537 location=${location##*://}
545 if [ -n "$location" ]; then
546 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
547 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
549 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
550 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
554 pushurl=`repopushurl .`
555 fix_git_config "$url" "$pushurl"
557 if $allow_pull || $fix_config; then
562 pushurl=`repopushurl "$d"`
563 branch=`repobranch "$d"`
564 if [ -d "$d0/$d" ]; then
566 enter "$d0/$d" verbose
567 r=`git symbolic-ref HEAD`
569 if git config branch.$r.remote >/dev/null 2>&1; then
570 if ! verbose git pull; then
571 fix_upstream_rebase_mergefail || true
572 check_mergeconflict "$d"
573 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
576 fix_upstream_rebase_mergeok || true
581 checkself "$cmd" "$@"
583 verbose git remote prune origin
587 verbose git clone "$url" "$d0/$d"
588 enter "$d0/$d" verbose
589 fix_git_config "$url" "$pushurl"
590 if [ "$branch" != "master" ]; then
591 verbose git checkout --track -b "$branch" origin/"$branch"
598 misc/tools/xonotic-map-compiler-autobuild download
602 if [ x"$1" = x"-f" ]; then
608 if [ -z "$branch" ]; then
611 branch=${remote#origin/}
622 enter "$d0/$d" verbose
624 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
626 verbose git checkout $checkoutflags "$b"
627 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
629 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
632 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
634 verbose git checkout $checkoutflags "$b"
635 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
637 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
639 $ECHO "WTF? Not even branch $b doesn't exist in $d"
644 checkself "$cmd" "$@"
648 $ECHO "The requested branch was not found in any repository."
656 if [ -z "$branch" ]; then
660 if [ -z "$branch" ]; then
663 r=`git symbolic-ref HEAD`
670 dv=`visible_repo_name "$d"`
671 enter "$d0/$d" verbose
672 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
673 $ECHO "Already having this branch in $dv."
675 if yesno "Branch in $dv?"; then
676 if [ -n "$srcbranch" ]; then
679 b=origin/"`repobranch "$d"`"
680 verbose git fetch origin || true
682 # TODO do this without pushing
683 verbose git checkout -b "$branch" "$b"
684 verbose git config "branch.$branch.remote" "$remote"
685 verbose git config "branch.$branch.merge" "refs/heads/$branch"
695 cd "$d0/$d" # am in a pipe, shouldn't use enter
696 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
701 while read -r d BRANCH REV TEXT; do
702 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
705 if [ x"$REV" = x"->" ]; then
708 BRANCH=${BRANCH#remotes/}
709 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
710 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
711 eval "r=\$branches_repos_$ID"
713 eval "branches_repos_$ID=\$r"
715 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
716 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
717 eval "r=\$branches_repos_$ID"
718 printf "%-60s %s\n" "$BRANCH" "$r"
725 dv=`visible_repo_name "$d"`
726 enter "$d0/$d" verbose
727 r=`git symbolic-ref HEAD`
729 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
730 # we have uncommitted changes
731 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
732 if ! verbose git merge origin/"`repobranch "$d"`"; then
733 check_mergeconflict "$d"
734 exit 1 # this should ALWAYS be fatal
744 dv=`visible_repo_name "$d"`
745 enter "$d0/$d" verbose
746 r=`git symbolic-ref HEAD`
748 diffdata=`git diff --color HEAD`
749 if [ -n "$diffdata" ]; then
750 # we have uncommitted changes
751 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
752 verbose git commit -a
755 rem=`git config "branch.$r.remote" || $ECHO origin`
756 bra=`git config "branch.$r.merge" || $ECHO "$r"`
757 upstream="$rem/${bra#refs/heads/}"
758 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
759 upstream="origin/`repobranch "$d"`"
761 logdata=`git log --color "$upstream".."$r"`
762 if [ -n "$logdata" ]; then
763 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
764 verbose git push "$rem" HEAD
767 if [ x"$submit" = x"-s" ]; then
770 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
784 snowleopardhack=false
785 if [ -z "$CC" ]; then
786 export CC="gcc -DSUPPORTIPV6"
804 case "`$CC -dumpversion`" in
805 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
807 # -march=native is broken < 4.3
808 export CC="$CC -mtune=native -march=native"
811 if [ -n "$WE_HATE_OUR_USERS" ]; then
812 export CC="$CC -fno-common"
821 if [ -n "$WE_HATE_OUR_USERS" ]; then
822 TARGETS="sv-$debug cl-$debug"
823 elif [ x"`uname`" = x"Darwin" ]; then
826 TARGETS="sv-$debug cl-$debug sdl-$debug"
829 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
831 TARGETS="sv-$debug sdl-$debug"
834 export CC="$CC -fno-reorder-blocks -I$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
836 TARGETS="sv-$debug cl-$debug sdl-$debug"
838 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
839 # if we give the command make the arg "", it will surely fail (invalid filename),
840 # so better handle it as an empty client option
843 elif [ -n "$1" ]; then
845 TARGETS_SAVE=$TARGETS
850 TARGETS="$TARGETS sdl-debug"
853 TARGETS="$TARGETS cl-debug"
854 if $snowleopardhack; then
855 export CC="$CC -arch i386"
859 TARGETS="$TARGETS cl-debug"
862 TARGETS="$TARGETS sv-debug"
865 BAD_TARGETS="$BAD_TARGETS $X"
869 if [ -n "$TARGETS" ]; then # at least a valid client
871 else # no valid client, let's assume this option is not meant to be a client then
872 TARGETS=$TARGETS_SAVE
876 if [ -z "$MAKEFLAGS" ]; then
877 if [ -f /proc/cpuinfo ]; then
878 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
879 if [ $ncpus -gt 1 ]; then
883 if [ -n "$WE_HATE_OUR_USERS" ]; then
884 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
888 enter "$d0/d0_blind_id" verbose
889 if ! $compiled0; then
890 # compilation of crypto library failed
891 # use binaries then, if we can...
893 if [ -n "$WE_HATE_OUR_USERS" ]; then
894 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
895 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
901 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
902 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
903 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
906 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
907 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
908 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
916 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
926 if [ -f Makefile ]; then
927 verbose make $MAKEFLAGS distclean
930 if ! [ -f Makefile ]; then
931 verbose sh autogen.sh
934 verbose make $MAKEFLAGS
937 enter "$d0/fteqcc" verbose
939 verbose make $MAKEFLAGS clean
941 verbose make $MAKEFLAGS
943 enter "$d0/data/xonotic-data.pk3dir" verbose
945 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
947 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
948 # 4 levels up: data, xonotic-data, qcsrc, server
950 enter "$d0/darkplaces" verbose
951 if [ x"$BAD_TARGETS" = x" " ]; then
952 $ECHO "Warning: invalid empty client, default clients will be used."
955 verbose make $MAKEFLAGS clean
957 for T in $TARGETS; do
958 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
960 for T in $BAD_TARGETS; do
961 $ECHO "Warning: discarded invalid client $T."
964 verbose "$SELF" update-maps
967 if [ -n "$WE_HATE_OUR_USERS" ]; then
969 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
970 elif [ x"`uname`" = x"Darwin" ]; then
971 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
972 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
975 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
979 sdl|glx|agl|dedicated)
988 if ! [ -x "darkplaces/darkplaces$client" ]; then
989 if [ -x "darkplaces/darkplaces$client.exe" ]; then
992 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
996 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
998 # if pulseaudio is running: USE IT
999 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1000 if ps -C pulseaudio >/dev/null; then
1001 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1002 export SDL_AUDIODRIVER=pulse
1009 if [ -n "$USE_GDB" ]; then
1010 set -- gdb --args "$@"
1011 elif which gdb >/dev/null 2>&1; then
1012 set -- gdb --batch -x savecore.gdb --args "$@"
1013 elif which catchsegv >/dev/null 2>&1; then
1014 set -- catchsegv "$@"
1018 if [ -f xonotic.core ]; then
1019 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1020 gdb "$binary" xonotic.core
1021 #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
1022 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1024 # rm -f xonotic.core.tar.gz
1026 $ECHO "The core dump can be examined later by"
1027 $ECHO " gdb $binary xonotic.core"
1034 if [ x"$1" = x"-k" ]; then
1039 if verbose cd "$d0/$d"; then
1040 if $keep_going; then
1041 verbose "$@" || true
1051 patchdir=`mktemp -d -t save-patches.XXXXXX`
1053 enter "$d0/$d" verbose
1054 git branch -v -v | cut -c 3- | {
1056 while read -r BRANCH REV UPSTREAM TEXT; do
1059 UPSTREAM=${UPSTREAM#\[}
1060 UPSTREAM=${UPSTREAM%\]}
1061 UPSTREAM=${UPSTREAM%:*}
1065 UPSTREAM=origin/"`repobranch "$d"`"
1069 if [ x"$REV" = x"->" ]; then
1072 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1073 $ECHO "$d" > "$patchdir/$i/info.txt"
1074 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1075 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1076 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1079 rm -rf "$patchdir/$i"
1084 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1089 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1090 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1092 for P in "$patchdir"/*/info.txt; do
1097 read -r UPSTREAM <&3
1099 verbose git checkout HEAD^0
1100 verbose git branch -D "$BRANCH"
1101 if [ x"$TRACK" = x"true" ]; then
1102 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1104 verbose git branch -b "$BRANCH" "$UPSTREAM"
1116 report=$report"$*$LF"
1121 report=$report" $*$LF"
1126 o=`"$@" | sed 's/^/ /' || true`
1132 # sorry, fteqcc repo is managed manually
1136 enter "$d0/$d" verbose
1137 base="`repobranch "$d"`"
1139 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1140 case "${ref#refs/remotes/origin/}" in
1153 if [ -n "$branch" ]; then
1154 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1163 l0=`git rev-list "$base".."$ref" | wc -l`
1164 l1=`git rev-list master.."$ref" | wc -l`
1165 if [ $l0 -gt $l1 ]; then
1172 reportecho " Branch $ref:"
1173 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1174 logdata=`git log --color "$realbase".."$ref"`
1175 if [ -z "$logdata" ]; then
1176 reportecho4 "--> not merging, no changes vs master"
1177 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1178 git push origin :"${ref#refs/remotes/origin/}"
1179 reportecho4 "--> branch deleted"
1182 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1183 if [ -z "$diffdata" ]; then
1184 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1185 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1186 git push origin :"${ref#refs/remotes/origin/}"
1187 reportecho4 "--> branch deleted"
1189 elif [ -z "$branch" ] && [ -n "$note" ]; then
1190 reportdo4 $ECHO "$note"
1191 reportecho4 "--> not merging, already had this one rejected before"
1192 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1193 git checkout "$realbase"
1194 org=`git rev-parse HEAD`
1195 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1196 git reset --hard "$org"
1197 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1199 reportecho4 "--> merge failed"
1200 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1201 git reset --hard "$org"
1202 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1204 reportecho4 "--> compile failed"
1205 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1206 git reset --hard "$org"
1207 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1208 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1209 if [ x"$note" = x"del" ]; then
1210 git push origin :"${ref#refs/remotes/origin/}"
1211 reportecho4 "--> test failed, branch deleted"
1212 elif [ -n "$note" ]; then
1213 reportdo4 $ECHO "$note"
1214 reportecho4 "--> test failed"
1216 reportecho4 "--> test failed, postponed"
1219 # apply crlf, or other cleanup filters (non-behavioural changes)
1221 find . -type f -exec touch {} \;
1222 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1225 case ",`repoflags "$d"`," in
1227 # we do quite a mess here... luckily we know $org
1228 git fetch # svn needs to be current
1229 git rebase -i --onto origin/master "$org"
1230 git svn dcommit --add-author-from
1231 git reset --hard "$org"
1234 git push origin HEAD
1237 reportecho4 "--> MERGED"
1238 if yesno "Delete original branch \"$ref\"?"; then
1239 git push origin :"${ref#refs/remotes/origin/}"
1240 reportecho4 "--> branch deleted"
1244 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1245 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1246 if [ x"$note" = x"del" ]; then
1247 git push origin :"${ref#refs/remotes/origin/}"
1248 reportecho4 "--> branch deleted"
1249 elif [ -n "$note" ]; then
1250 reportdo4 $ECHO "$note"
1251 reportecho4 "--> rejected"
1253 reportecho4 "--> postponed"
1262 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1274 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1275 # ./all clean --reclone
1278 if [ x"$X" = x"--reclone" ]; then
1285 elif [ x"$X" = x"-f" ]; then
1287 elif [ x"$X" = x"-u" ]; then
1289 elif [ x"$X" = x"-U" ]; then
1292 elif [ x"$X" = x"-fu" ]; then
1295 elif [ x"$X" = x"-fU" ]; then
1299 elif [ x"$X" = x"-m" ]; then
1301 elif [ x"$X" = x"-r" ]; then
1303 elif [ x"$X" = x"-D" ]; then
1305 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1308 msg " ,--'-\\P/\`\\ FFFFFFF"
1309 msg " __/_ B/,-.\\ FFFFFFF"
1310 msg " / _\\ (// O\\\\ FFFFFF"
1311 msg "| (O \`) _\\._ _)\\ FFFUU"
1312 msg "| |___/.^d0~~\"\\ \\ UUUU"
1313 msg "| |\`~' \\ | UUUU"
1314 msg "| | __,C>|| UUUU"
1315 msg "\\ /_ ,-/,-' | UUUU"
1316 msg " \\\\_ \\_>~' / UUUU-"
1319 msg "Unknown arg: $X"
1329 if $gotoupstream; then
1331 msg "Must also use -f (delete local changes) when using -u"
1334 if $gotomaster; then
1335 if $fetchupstream; then
1336 verbose git fetch origin
1337 verbose git remote prune origin
1339 verbose git checkout -f "`repobranch "$d"`"
1340 verbose git reset --hard origin/"`repobranch "$d"`"
1342 r=`git symbolic-ref HEAD`
1344 rem=`git config "branch.$r.remote" || $ECHO origin`
1345 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1346 upstream="$rem/${bra#refs/heads/}"
1347 if $fetchupstream; then
1348 verbose git fetch "$rem"
1349 verbose git remote prune "$rem"
1351 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1352 upstream="origin/`repobranch "$d"`"
1354 verbose git reset --hard "$upstream"
1356 elif $gotomaster; then
1358 verbose git checkout -f "`repobranch "$d"`"
1359 verbose git reset --hard
1361 verbose git checkout "`repobranch "$d"`"
1364 verbose git reset --hard
1366 if $rmuntracked; then
1369 verbose git clean -df || true
1372 verbose git clean -xdf || true
1376 if $killbranches; then
1377 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1378 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1379 verbose git branch -D "${B#refs/heads/}"
1382 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1383 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1385 checkself "$cmd" "$@"
1389 # release building goes here
1391 #"$SELF" each git clean -fxd
1392 case "$RELEASETYPE" in
1394 msg "Building a BETA"
1397 msg "Building a RELEASE"
1400 $ECHO >&2 -n "$ESC[2J$ESC[H"
1407 msg " +---------------------------------------------------------.---+"
1409 msg " +---------------------------------------------------------^---+"
1411 msg " | / \ This is the official release build system. |"
1412 msg " | | | If you are not a member of the Xonotic Core Team, |"
1413 msg " | | STOP | you are not supposed to use this script and should |"
1414 msg " | | | instead use ./all compile to compile the engine |"
1415 msg " | \____/ and game code. |"
1417 msg " | [ I understand ] |"
1418 msg " +-------------------------------------------------------------+"
1420 # A LOT of build infrastructure is required:
1423 # - .ssh/config must be configured so the following
1424 # host names are reachable and have a compile
1425 # infrastructure set up:
1426 # - xonotic-build-linux32 (with gcc on x86)
1427 # - xonotic-build-linux64 (with gcc on x86_64)
1428 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1429 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1430 # and x86_64-w64-mingw32-g++)
1431 # - xonotic-build-osx (with Xcode and SDL.framework)
1432 # - AMD Compressonator installed in WINE
1433 # - ResEdit installed in WINE
1434 # - a lot of other requirements you will figure out
1435 # while reading the error messages
1436 # - environment variable RELEASETYPE set
1437 # - optionally, environment variable RELEASEDATE set
1442 verbose rm -rf Xonotic Xonotic*.zip
1443 verbose mkdir -p Xonotic
1444 if [ -n "$RELEASEDATE" ]; then
1445 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1447 verbose date +%Y%m%d > Xonotic/stamp.txt
1449 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1451 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1453 verbose rm -rf misc/builddeps
1454 verbose mv misc/buildfiles/win32/* . || true
1455 verbose mv misc/buildfiles/win64 bin64 || true
1456 verbose mv misc/buildfiles/osx/* . || true
1457 verbose rm -rf misc/buildfiles
1458 verbose rm -rf misc/pki
1461 verbose cd darkplaces
1462 verbose git archive --format=tar HEAD
1464 verbose cd Xonotic/source/darkplaces
1469 verbose git archive --format=tar HEAD
1471 verbose cd Xonotic/source/fteqcc
1475 verbose cd data/xonotic-data.pk3dir
1476 verbose git archive --format=tar HEAD -- qcsrc Makefile
1478 verbose cd Xonotic/source
1481 rm -f Xonotic/key_15.d0pk
1483 release-compile-run)
1492 if [ -n "$targetfiles" ]; then
1493 case " $HOSTS_THAT_ARE_DISABLED " in
1498 case " $HOSTS_THAT_ARE_MYSELF " in
1500 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1501 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1502 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1503 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1504 for f in $targetfiles; do
1505 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1509 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1510 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1511 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1512 for f in $targetfiles; do
1513 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1517 # now rebrand the binaries...
1518 for f in $targetfiles; do
1519 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1522 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1524 d=`mktemp -d -t rebrand.XXXXXX`
1526 $ECHO "-mygames" > darkplaces.opt
1527 zip -9r darkplaces.zip darkplaces.opt
1540 fteqcc_maketargets=$3
1542 darkplaces_maketargets=$5
1544 host=xonotic-build-$suffix
1545 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1546 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1548 release-engine-win32)
1549 verbose "$SELF" release-compile win32 \
1550 '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' \
1551 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1553 verbose "$SELF" release-compile win32 \
1554 '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' \
1556 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1558 release-engine-win64)
1559 verbose "$SELF" release-compile win64 \
1560 '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' \
1561 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1562 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1563 verbose "$SELF" release-compile win64 \
1564 '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' \
1566 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1569 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1570 verbose "$SELF" release-compile osx \
1571 '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"' \
1572 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1573 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1574 verbose "$SELF" release-compile osx \
1575 '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"' \
1577 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1579 release-engine-linux32)
1580 verbose "$SELF" release-compile linux32 \
1581 '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' \
1582 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1583 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1585 release-engine-linux64)
1586 verbose "$SELF" release-compile linux64 \
1587 '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' \
1588 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1589 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1592 verbose "$SELF" release-engine-linux32 &
1593 verbose "$SELF" release-engine-linux64 &
1594 verbose "$SELF" release-engine-win32 &
1595 verbose "$SELF" release-engine-win64 &
1596 verbose "$SELF" release-engine-osx &
1605 verbose "$SELF" update-maps
1608 case "$RELEASETYPE" in
1610 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1611 # back out of: source/qcsrc/server
1614 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1617 verbose rm -f Xonotic/source/*/fteqcc.log
1619 release-buildpk3-transform-raw)
1622 release-buildpk3-transform-normal)
1625 # texture: convert to jpeg and dds
1626 verbose export do_jpeg=true
1627 verbose export jpeg_qual_rgb=95
1628 verbose export jpeg_qual_a=99
1629 verbose export do_dds=true
1630 verbose export dds_flags=
1631 verbose export do_ogg=false
1632 verbose export del_src=true
1633 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1635 release-buildpk3-transform-low)
1638 # texture: convert to jpeg and dds
1639 # music: reduce bitrate
1640 verbose export do_jpeg=true
1641 verbose export jpeg_qual_rgb=80
1642 verbose export jpeg_qual_a=97
1643 verbose export do_dds=false
1644 verbose export do_ogg=true
1645 verbose export ogg_qual=1
1646 verbose export del_src=true
1647 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1649 release-buildpk3-transform-lowdds)
1652 # texture: convert to jpeg and dds
1653 # music: reduce bitrate
1654 verbose export do_jpeg=false
1655 verbose export do_jpeg_if_not_dds=true
1656 verbose export jpeg_qual_rgb=80
1657 verbose export jpeg_qual_a=99
1658 verbose export do_dds=true
1659 verbose export dds_flags=
1660 verbose export do_ogg=true
1661 verbose export ogg_qual=1
1662 verbose export del_src=true
1663 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1676 verbose rm -rf Xonotic/temp
1677 verbose mkdir -p Xonotic/temp
1680 verbose git archive --format=tar HEAD
1682 verbose cd Xonotic/temp
1685 verbose cd Xonotic/temp
1686 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1687 verbose cp ../source/progs.dat .
1688 verbose cp ../source/csprogs.dat .
1689 verbose cp ../source/menu.dat .
1690 verbose rm -rf qcsrc
1691 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1692 major=$(($gv / 10000))
1693 minor=$(($gv / 100 - $major * 100))
1694 patch=$(($gv - $major * 10000 - $minor * 100))
1695 versionstr="$major.$minor.$patch"
1696 case "$RELEASETYPE" in
1698 versionstr="$versionstr""beta"
1702 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1703 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1704 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1705 " defaultXonotic.cfg
1707 verbose cd gfx/menu/luminos
1708 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1709 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1710 verbose rm background_l2.svg
1713 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1714 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1715 if [ -f "$X" ]; then
1717 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1721 verbose export git_src_repo="$d0/$src" # skip hash-object
1722 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1723 verbose mkzip "../../$dst" *
1725 verbose rm -rf Xonotic/temp
1728 stamp=`cat Xonotic/stamp.txt`
1734 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1740 while [ "$#" -gt 1 ]; do
1741 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1747 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1748 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1749 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1750 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1751 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1753 release-pack-needsx11)
1756 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1759 verbose "$SELF" release-pack
1764 stamp=`cat Xonotic/stamp.txt`
1765 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1766 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1767 # let's pass crypto import laws of some nasty countries
1768 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1769 if [ -n "$crypto_libs" ]; then
1770 verbose mkzip Xonotic-$stamp-crypto.zip \
1774 # build the archives
1775 verbose mkzip Xonotic-$stamp-engine.zip \
1777 Xonotic/bin64/*.dll \
1780 Xonotic/xonotic.exe \
1781 Xonotic/source/darkplaces/
1782 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1783 verbose mkzip Xonotic-$stamp-common.zip \
1784 Xonotic/source/fteqcc/ \
1785 Xonotic/source/qcsrc/ \
1790 Xonotic/key_0.d0pk \
1791 Xonotic/data/font-nimbussansl-$stamp.pk3
1792 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1793 verbose mkzip0 Xonotic-$stamp.zip \
1794 Xonotic/data/xonotic-$stamp-data.pk3 \
1795 Xonotic/data/xonotic-$stamp-maps.pk3 \
1796 Xonotic/data/xonotic-$stamp-music.pk3 \
1797 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1798 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1799 verbose mkzip0 Xonotic-$stamp-low.zip \
1800 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1801 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1802 Xonotic/data/xonotic-$stamp-music-low.pk3
1803 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1804 # verbose mkzip0 Xonotic-$stamp-high.zip \
1805 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1806 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1807 # Xonotic/data/xonotic-$stamp-music.pk3 \
1808 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1809 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1810 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1811 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1812 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1813 Xonotic/data/xonotic-$stamp-music-low.pk3
1816 verbose "$SELF" release-prepare
1817 verbose "$SELF" release-maps
1818 verbose "$SELF" release-engine
1819 verbose "$SELF" release-qc
1820 verbose "$SELF" release-pack-needsx11
1821 verbose "$SELF" release-zip
1826 $ECHO " $SELF admin-merge [<branch>]"
1827 $ECHO " $SELF branch <branch>"
1828 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1829 $ECHO " $SELF branches"
1830 $ECHO " $SELF checkout|switch <branch>"
1831 $ECHO " $SELF checkout|switch <remote>/<branch>"
1832 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1833 $ECHO " $SELF clean --reclone"
1834 $ECHO " $SELF compile [-c] [-r] [-0]"
1835 $ECHO " $SELF each|foreach [-k] command..."
1836 $ECHO " $SELF fix_upstream_rebase"
1837 $ECHO " $SELF keygen"
1838 $ECHO " $SELF merge"
1839 $ECHO " $SELF push|commit [-s]"
1840 $ECHO " $SELF release"
1841 $ECHO " $SELF restore-patches"
1842 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1843 $ECHO " $SELF save-patches"
1844 $ECHO " $SELF update-maps"
1845 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"