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/libd0_rijndael"-* .libs/
896 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
902 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
903 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
904 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
905 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
908 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
909 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
910 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
911 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
919 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
920 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
930 if [ -f Makefile ]; then
931 verbose make $MAKEFLAGS distclean
934 if ! [ -f Makefile ]; then
935 verbose sh autogen.sh
938 verbose make $MAKEFLAGS
941 enter "$d0/fteqcc" verbose
943 verbose make $MAKEFLAGS clean
945 verbose make $MAKEFLAGS
947 enter "$d0/data/xonotic-data.pk3dir" verbose
949 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
951 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
952 # 4 levels up: data, xonotic-data, qcsrc, server
954 enter "$d0/darkplaces" verbose
955 if [ x"$BAD_TARGETS" = x" " ]; then
956 $ECHO "Warning: invalid empty client, default clients will be used."
959 verbose make $MAKEFLAGS clean
961 for T in $TARGETS; do
962 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
964 for T in $BAD_TARGETS; do
965 $ECHO "Warning: discarded invalid client $T."
968 verbose "$SELF" update-maps
971 if [ -n "$WE_HATE_OUR_USERS" ]; then
973 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
974 elif [ x"`uname`" = x"Darwin" ]; then
975 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
976 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
979 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
983 sdl|glx|agl|dedicated)
992 if ! [ -x "darkplaces/darkplaces$client" ]; then
993 if [ -x "darkplaces/darkplaces$client.exe" ]; then
996 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1000 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1002 # if pulseaudio is running: USE IT
1003 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1004 if ps -C pulseaudio >/dev/null; then
1005 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1006 export SDL_AUDIODRIVER=pulse
1013 if [ x"$USE_GDB" = x"yes" ]; then
1014 set -- gdb --args "$@"
1015 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1016 set -- gdb --batch -x savecore.gdb --args "$@"
1017 elif which catchsegv >/dev/null 2>&1; then
1018 set -- catchsegv "$@"
1022 if [ -f xonotic.core ]; then
1023 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1024 gdb "$binary" xonotic.core
1025 #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
1026 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1028 # rm -f xonotic.core.tar.gz
1030 $ECHO "The core dump can be examined later by"
1031 $ECHO " gdb $binary xonotic.core"
1038 if [ x"$1" = x"-k" ]; then
1043 if verbose cd "$d0/$d"; then
1044 if $keep_going; then
1045 verbose "$@" || true
1055 patchdir=`mktemp -d -t save-patches.XXXXXX`
1057 enter "$d0/$d" verbose
1058 git branch -v -v | cut -c 3- | {
1060 while read -r BRANCH REV UPSTREAM TEXT; do
1063 UPSTREAM=${UPSTREAM#\[}
1064 UPSTREAM=${UPSTREAM%\]}
1065 UPSTREAM=${UPSTREAM%:*}
1069 UPSTREAM=origin/"`repobranch "$d"`"
1073 if [ x"$REV" = x"->" ]; then
1076 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1077 $ECHO "$d" > "$patchdir/$i/info.txt"
1078 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1079 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1080 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1083 rm -rf "$patchdir/$i"
1088 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1093 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1094 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1096 for P in "$patchdir"/*/info.txt; do
1101 read -r UPSTREAM <&3
1103 verbose git checkout HEAD^0
1104 verbose git branch -D "$BRANCH"
1105 if [ x"$TRACK" = x"true" ]; then
1106 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1108 verbose git branch -b "$BRANCH" "$UPSTREAM"
1120 report=$report"$*$LF"
1125 report=$report" $*$LF"
1130 o=`"$@" | sed 's/^/ /' || true`
1136 # sorry, fteqcc repo is managed manually
1140 enter "$d0/$d" verbose
1141 base="`repobranch "$d"`"
1143 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1144 case "${ref#refs/remotes/origin/}" in
1157 if [ -n "$branch" ]; then
1158 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1167 l0=`git rev-list "$base".."$ref" | wc -l`
1168 l1=`git rev-list master.."$ref" | wc -l`
1169 if [ $l0 -gt $l1 ]; then
1176 reportecho " Branch $ref:"
1177 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1178 logdata=`git log --color "$realbase".."$ref"`
1179 if [ -z "$logdata" ]; then
1180 reportecho4 "--> not merging, no changes vs master"
1181 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1182 git push origin :"${ref#refs/remotes/origin/}"
1183 reportecho4 "--> branch deleted"
1186 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1187 if [ -z "$diffdata" ]; then
1188 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1189 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1190 git push origin :"${ref#refs/remotes/origin/}"
1191 reportecho4 "--> branch deleted"
1193 elif [ -z "$branch" ] && [ -n "$note" ]; then
1194 reportdo4 $ECHO "$note"
1195 reportecho4 "--> not merging, already had this one rejected before"
1196 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1197 git checkout "$realbase"
1198 org=`git rev-parse HEAD`
1199 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1200 git reset --hard "$org"
1201 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1203 reportecho4 "--> merge failed"
1204 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1205 git reset --hard "$org"
1206 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1208 reportecho4 "--> compile failed"
1209 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1210 git reset --hard "$org"
1211 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1212 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1213 if [ x"$note" = x"del" ]; then
1214 git push origin :"${ref#refs/remotes/origin/}"
1215 reportecho4 "--> test failed, branch deleted"
1216 elif [ -n "$note" ]; then
1217 reportdo4 $ECHO "$note"
1218 reportecho4 "--> test failed"
1220 reportecho4 "--> test failed, postponed"
1223 # apply crlf, or other cleanup filters (non-behavioural changes)
1225 find . -type f -exec touch {} \;
1226 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1229 case ",`repoflags "$d"`," in
1231 # we do quite a mess here... luckily we know $org
1232 git fetch # svn needs to be current
1233 git rebase -i --onto origin/master "$org"
1234 git svn dcommit --add-author-from
1235 git reset --hard "$org"
1238 git push origin HEAD
1241 reportecho4 "--> MERGED"
1242 if yesno "Delete original branch \"$ref\"?"; then
1243 git push origin :"${ref#refs/remotes/origin/}"
1244 reportecho4 "--> branch deleted"
1248 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1249 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1250 if [ x"$note" = x"del" ]; then
1251 git push origin :"${ref#refs/remotes/origin/}"
1252 reportecho4 "--> branch deleted"
1253 elif [ -n "$note" ]; then
1254 reportdo4 $ECHO "$note"
1255 reportecho4 "--> rejected"
1257 reportecho4 "--> postponed"
1266 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1278 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1279 # ./all clean --reclone
1282 if [ x"$X" = x"--reclone" ]; then
1289 elif [ x"$X" = x"-f" ]; then
1291 elif [ x"$X" = x"-u" ]; then
1293 elif [ x"$X" = x"-U" ]; then
1296 elif [ x"$X" = x"-fu" ]; then
1299 elif [ x"$X" = x"-fU" ]; then
1303 elif [ x"$X" = x"-m" ]; then
1305 elif [ x"$X" = x"-r" ]; then
1307 elif [ x"$X" = x"-D" ]; then
1309 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1312 msg " ,--'-\\P/\`\\ FFFFFFF"
1313 msg " __/_ B/,-.\\ FFFFFFF"
1314 msg " / _\\ (// O\\\\ FFFFFF"
1315 msg "| (O \`) _\\._ _)\\ FFFUU"
1316 msg "| |___/.^d0~~\"\\ \\ UUUU"
1317 msg "| |\`~' \\ | UUUU"
1318 msg "| | __,C>|| UUUU"
1319 msg "\\ /_ ,-/,-' | UUUU"
1320 msg " \\\\_ \\_>~' / UUUU-"
1323 msg "Unknown arg: $X"
1333 if $gotoupstream; then
1335 msg "Must also use -f (delete local changes) when using -u"
1338 if $gotomaster; then
1339 if $fetchupstream; then
1340 verbose git fetch origin
1341 verbose git remote prune origin
1343 verbose git checkout -f "`repobranch "$d"`"
1344 verbose git reset --hard origin/"`repobranch "$d"`"
1346 r=`git symbolic-ref HEAD`
1348 rem=`git config "branch.$r.remote" || $ECHO origin`
1349 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1350 upstream="$rem/${bra#refs/heads/}"
1351 if $fetchupstream; then
1352 verbose git fetch "$rem"
1353 verbose git remote prune "$rem"
1355 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1356 upstream="origin/`repobranch "$d"`"
1358 verbose git reset --hard "$upstream"
1360 elif $gotomaster; then
1362 verbose git checkout -f "`repobranch "$d"`"
1363 verbose git reset --hard
1365 verbose git checkout "`repobranch "$d"`"
1368 verbose git reset --hard
1370 if $rmuntracked; then
1373 verbose git clean -df || true
1376 verbose git clean -xdf || true
1380 if $killbranches; then
1381 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1382 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1383 verbose git branch -D "${B#refs/heads/}"
1386 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1387 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1389 checkself "$cmd" "$@"
1393 # release building goes here
1395 #"$SELF" each git clean -fxd
1396 case "$RELEASETYPE" in
1398 msg "Building a BETA"
1401 msg "Building a RELEASE"
1404 $ECHO >&2 -n "$ESC[2J$ESC[H"
1411 msg " +---------------------------------------------------------.---+"
1413 msg " +---------------------------------------------------------^---+"
1415 msg " | / \ This is the official release build system. |"
1416 msg " | | | If you are not a member of the Xonotic Core Team, |"
1417 msg " | | STOP | you are not supposed to use this script and should |"
1418 msg " | | | instead use ./all compile to compile the engine |"
1419 msg " | \____/ and game code. |"
1421 msg " | [ I understand ] |"
1422 msg " +-------------------------------------------------------------+"
1424 # A LOT of build infrastructure is required:
1427 # - .ssh/config must be configured so the following
1428 # host names are reachable and have a compile
1429 # infrastructure set up:
1430 # - xonotic-build-linux32 (with gcc on x86)
1431 # - xonotic-build-linux64 (with gcc on x86_64)
1432 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1433 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1434 # and x86_64-w64-mingw32-g++)
1435 # - xonotic-build-osx (with Xcode and SDL.framework)
1436 # - AMD Compressonator installed in WINE
1437 # - ResEdit installed in WINE
1438 # - a lot of other requirements you will figure out
1439 # while reading the error messages
1440 # - environment variable RELEASETYPE set
1441 # - optionally, environment variable RELEASEDATE set
1446 verbose rm -rf Xonotic Xonotic*.zip
1447 verbose mkdir -p Xonotic
1448 if [ -n "$RELEASEDATE" ]; then
1449 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1451 verbose date +%Y%m%d > Xonotic/stamp.txt
1453 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1455 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1457 verbose rm -rf misc/builddeps
1458 verbose mv misc/buildfiles/win32/* . || true
1459 verbose mv misc/buildfiles/win64 bin64 || true
1460 verbose mv misc/buildfiles/osx/* . || true
1461 verbose rm -rf misc/buildfiles
1462 verbose rm -rf misc/pki
1465 verbose cd darkplaces
1466 verbose git archive --format=tar HEAD
1468 verbose cd Xonotic/source/darkplaces
1473 verbose git archive --format=tar HEAD
1475 verbose cd Xonotic/source/fteqcc
1479 verbose cd data/xonotic-data.pk3dir
1480 verbose git archive --format=tar HEAD -- qcsrc Makefile
1482 verbose cd Xonotic/source
1485 rm -f Xonotic/key_15.d0pk
1487 release-compile-run)
1496 if [ -n "$targetfiles" ]; then
1497 case " $HOSTS_THAT_ARE_DISABLED " in
1502 case " $HOSTS_THAT_ARE_MYSELF " in
1504 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1505 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1506 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1507 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1508 for f in $targetfiles; do
1509 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1513 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1514 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1515 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1516 for f in $targetfiles; do
1517 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1521 # now rebrand the binaries...
1522 for f in $targetfiles; do
1523 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1526 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1528 d=`mktemp -d -t rebrand.XXXXXX`
1530 $ECHO "-mygames" > darkplaces.opt
1531 zip -9r darkplaces.zip darkplaces.opt
1544 fteqcc_maketargets=$3
1546 darkplaces_maketargets=$5
1548 host=xonotic-build-$suffix
1549 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1550 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1552 release-engine-win32)
1553 verbose "$SELF" release-compile win32 \
1554 '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' \
1555 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1557 verbose "$SELF" release-compile win32 \
1558 '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' \
1560 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1562 release-engine-win64)
1563 verbose "$SELF" release-compile win64 \
1564 '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' \
1565 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1566 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1567 verbose "$SELF" release-compile win64 \
1568 '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' \
1570 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1573 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1574 verbose "$SELF" release-compile osx \
1575 '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"' \
1576 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1577 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1578 verbose "$SELF" release-compile osx \
1579 '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"' \
1581 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1583 release-engine-linux32)
1584 verbose "$SELF" release-compile linux32 \
1585 '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' \
1586 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1587 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1589 release-engine-linux64)
1590 verbose "$SELF" release-compile linux64 \
1591 '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' \
1592 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1593 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1596 verbose "$SELF" release-engine-linux32 &
1597 verbose "$SELF" release-engine-linux64 &
1598 verbose "$SELF" release-engine-win32 &
1599 verbose "$SELF" release-engine-win64 &
1600 verbose "$SELF" release-engine-osx &
1609 verbose "$SELF" update-maps
1612 case "$RELEASETYPE" in
1614 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1615 # back out of: source/qcsrc/server
1618 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1621 verbose rm -f Xonotic/source/*/fteqcc.log
1623 release-buildpk3-transform-raw)
1626 release-buildpk3-transform-normal)
1629 # texture: convert to jpeg and dds
1630 verbose export do_jpeg=true
1631 verbose export jpeg_qual_rgb=95
1632 verbose export jpeg_qual_a=99
1633 verbose export do_dds=true
1634 verbose export dds_flags=
1635 verbose export do_ogg=false
1636 verbose export del_src=true
1637 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1639 release-buildpk3-transform-low)
1642 # texture: convert to jpeg and dds
1643 # music: reduce bitrate
1644 verbose export do_jpeg=true
1645 verbose export jpeg_qual_rgb=80
1646 verbose export jpeg_qual_a=97
1647 verbose export do_dds=false
1648 verbose export do_ogg=true
1649 verbose export ogg_qual=1
1650 verbose export del_src=true
1651 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1653 release-buildpk3-transform-lowdds)
1656 # texture: convert to jpeg and dds
1657 # music: reduce bitrate
1658 verbose export do_jpeg=false
1659 verbose export do_jpeg_if_not_dds=true
1660 verbose export jpeg_qual_rgb=80
1661 verbose export jpeg_qual_a=99
1662 verbose export do_dds=true
1663 verbose export dds_flags=
1664 verbose export do_ogg=true
1665 verbose export ogg_qual=1
1666 verbose export del_src=true
1667 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1680 verbose rm -rf Xonotic/temp
1681 verbose mkdir -p Xonotic/temp
1684 verbose git archive --format=tar HEAD
1686 verbose cd Xonotic/temp
1689 verbose cd Xonotic/temp
1690 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1691 verbose cp ../source/progs.dat .
1692 verbose cp ../source/csprogs.dat .
1693 verbose cp ../source/menu.dat .
1694 verbose rm -rf qcsrc
1695 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1696 major=$(($gv / 10000))
1697 minor=$(($gv / 100 - $major * 100))
1698 patch=$(($gv - $major * 10000 - $minor * 100))
1699 versionstr="$major.$minor.$patch"
1700 case "$RELEASETYPE" in
1702 versionstr="$versionstr""beta"
1706 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1707 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1708 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1709 " defaultXonotic.cfg
1711 verbose cd gfx/menu/luminos
1712 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1713 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1714 verbose rm background_l2.svg
1717 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1718 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1719 if [ -f "$X" ]; then
1721 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1725 verbose export git_src_repo="$d0/$src" # skip hash-object
1726 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1727 verbose mkzip "../../$dst" *
1729 verbose rm -rf Xonotic/temp
1732 stamp=`cat Xonotic/stamp.txt`
1738 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1744 while [ "$#" -gt 1 ]; do
1745 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1751 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1752 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1753 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1754 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1755 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1757 release-pack-needsx11)
1760 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1763 verbose "$SELF" release-pack
1768 stamp=`cat Xonotic/stamp.txt`
1769 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1770 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1771 # let's pass crypto import laws of some nasty countries
1772 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1773 if [ -n "$crypto_libs" ]; then
1774 verbose mkzip Xonotic-$stamp-crypto.zip \
1778 # build the archives
1779 verbose mkzip Xonotic-$stamp-engine.zip \
1781 Xonotic/bin64/*.dll \
1784 Xonotic/xonotic.exe \
1785 Xonotic/source/darkplaces/
1786 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1787 verbose mkzip Xonotic-$stamp-common.zip \
1788 Xonotic/source/fteqcc/ \
1789 Xonotic/source/qcsrc/ \
1794 Xonotic/key_0.d0pk \
1795 Xonotic/data/font-nimbussansl-$stamp.pk3
1796 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1797 verbose mkzip0 Xonotic-$stamp.zip \
1798 Xonotic/data/xonotic-$stamp-data.pk3 \
1799 Xonotic/data/xonotic-$stamp-maps.pk3 \
1800 Xonotic/data/xonotic-$stamp-music.pk3 \
1801 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1802 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1803 verbose mkzip0 Xonotic-$stamp-low.zip \
1804 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1805 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1806 Xonotic/data/xonotic-$stamp-music-low.pk3
1807 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1808 # verbose mkzip0 Xonotic-$stamp-high.zip \
1809 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1810 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1811 # Xonotic/data/xonotic-$stamp-music.pk3 \
1812 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1813 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1814 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1815 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1816 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1817 Xonotic/data/xonotic-$stamp-music-low.pk3
1820 verbose "$SELF" release-prepare
1821 verbose "$SELF" release-maps
1822 verbose "$SELF" release-engine
1823 verbose "$SELF" release-qc
1824 verbose "$SELF" release-pack-needsx11
1825 verbose "$SELF" release-zip
1830 $ECHO " $SELF admin-merge [<branch>]"
1831 $ECHO " $SELF branch <branch>"
1832 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1833 $ECHO " $SELF branches"
1834 $ECHO " $SELF checkout|switch <branch>"
1835 $ECHO " $SELF checkout|switch <remote>/<branch>"
1836 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1837 $ECHO " $SELF clean --reclone"
1838 $ECHO " $SELF compile [-c] [-r] [-0]"
1839 $ECHO " $SELF each|foreach [-k] command..."
1840 $ECHO " $SELF fix_upstream_rebase"
1841 $ECHO " $SELF keygen"
1842 $ECHO " $SELF merge"
1843 $ECHO " $SELF push|commit [-s]"
1844 $ECHO " $SELF release"
1845 $ECHO " $SELF restore-patches"
1846 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1847 $ECHO " $SELF save-patches"
1848 $ECHO " $SELF update-maps"
1849 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"