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
273 # one of the two sides of the merge should be remote upstream, or all is fine
274 r_r=`git symbolic-ref HEAD`
275 r_r=${r_r#refs/heads/}
276 r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
277 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
278 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
279 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
284 r_base=`git merge-base "$r_me" "$r_other"`
286 # no merge-base? upstream did filter-branch
287 if [ -n "$r_base" ]; then
288 # otherwise, check if the two histories are "similar"
289 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
290 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
292 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
293 r_lc_me=`$ECHO "$r_l_me" | wc -l`
294 r_lc_other=`$ECHO "$r_l_other" | wc -l`
295 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
296 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
298 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
299 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
300 git reset --hard "$r_me"
310 fix_upstream_rebase_mergeok()
312 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
313 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
317 fix_upstream_rebase_mergefail()
319 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
320 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
326 verbose git config remote.origin.url "$1"
328 verbose git config remote.origin.pushurl "$2"
330 verbose git config --unset remote.origin.pushurl || true
332 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
333 case ",`repoflags "$d"`," in
335 verbose git config --unset core.autocrlf || true
338 verbose git config core.autocrlf input
341 if [ -z "`git config push.default || true`" ]; then
342 verbose git config push.default current # or is tracking better?
344 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
345 verbose git config filter.mapclean.smudge "cat"
353 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
354 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
355 zip -9y -@<"$ziplist" "$archive" || true
366 # first result is to be ignored, but we use it to check status
367 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
368 { 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*,,'
369 # unit: clock ticks (depends on what "time" returns
377 if ! { time -p true; } >/dev/null 2>&1; then
395 if t=`mirrorspeed "$m"`; then
397 tt=$(($t$op)) # fudge factor
398 msg "$m -> $t$op = $tt ticks"
399 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
410 if [ -n "$bestin" ]; then
411 msg "Best mirror seems to be $pre$bestin$suf"
421 enter "$d0/$d" verbose
422 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
428 pushurl=`repopushurl "$d"`
429 branch=`repobranch "$d"`
430 if [ -d "$d0/$d" ]; then
432 fix_git_config "$url" "$pushurl"
438 # enable the ssh URL for pushing
441 if [ -f ~/.ssh/id_rsa.pub ]; then
443 msg "A key already exists and no new one will be generated. If you"
444 msg "already have done the procedure for getting your key approved, you"
445 msg "can skip the following paragraph and already use the repository."
447 msg "To get access, your key has to be approved first. For that, visit"
448 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
449 msg "the \"Support\" tracker in the \"Repository\" category where you"
450 msg "apply for access and paste the following output into the issue:"
452 msg "`cat ~/.ssh/id_rsa.pub`"
454 msg "Note that you will only have write access to branches that start"
455 msg "with your user name."
456 elif [ -f ~/.ssh/id_dsa.pub ]; then
458 msg "A key already exists and no new one will be generated. If you"
459 msg "already have done the procedure for getting your key approved, you"
460 msg "can skip the following paragraph and already use the repository."
462 msg "To get access, your key has to be approved first. For that, visit"
463 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
464 msg "the \"Support\" tracker in the \"Repository\" category where you"
465 msg "apply for access and paste the following output into the issue:"
467 msg "`cat ~/.ssh/id_dsa.pub`"
469 msg "Note that you will only have write access to branches that start"
470 msg "with your user name."
473 msg "No key has been generated yet. One will be generated now."
474 msg "If other people are using your computer, it is recommended"
475 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
476 msg "when asked for a passphrase."
478 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
480 msg "To get access, your key has to be approved first. For that, visit"
481 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
482 msg "the \"Support\" tracker in the \"Repository\" category where you"
483 msg "apply for access and paste the following output into the issue:"
485 msg "`cat ~/.ssh/id_rsa.pub`"
487 msg "Note that you will only have write access to branches that start"
488 msg "with your user name."
496 if [ x"$1" = x"-N" ]; then
498 elif [ x"$1" = x"-p" ]; then
500 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
501 pushbase=ssh://xonotic@git.xonotic.org/
503 elif [ x"$1" = x"-s" ]; then
505 base=ssh://xonotic@git.xonotic.org/
507 elif [ x"$1" = x"-g" ]; then
509 base=git://git.xonotic.org/xonotic/
510 elif [ x"$1" = x"-h" ]; then
512 base=http://git.xonotic.org/xonotic/
513 elif [ x"$1" = x"-l" ]; then
521 msg "Invalid location!"
522 msg "Possible locations for the -l option:"
523 msg " nl (Netherlands, run by merlijn)"
524 msg " de (Germany, run by divVerent)"
525 msg " us (United States of America, run by detrate)"
526 msg " best (find automatically)"
527 msg " default (currently nl)"
541 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
542 git config xonotic.all.mirrorselection done
549 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
552 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
570 *://*.git.xonotic.org/*)
571 location=${base%%.git.xonotic.org/*}
572 location=${location##*://}
580 if [ -n "$location" ]; then
581 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
582 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
584 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
585 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
589 pushurl=`repopushurl .`
590 fix_git_config "$url" "$pushurl"
592 if $allow_pull || $fix_config; then
597 pushurl=`repopushurl "$d"`
598 branch=`repobranch "$d"`
599 if [ -d "$d0/$d" ]; then
601 enter "$d0/$d" verbose
602 r=`git symbolic-ref HEAD`
604 if git config branch.$r.remote >/dev/null 2>&1; then
605 if ! verbose git pull; then
606 fix_upstream_rebase_mergefail || true
607 check_mergeconflict "$d"
608 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
611 fix_upstream_rebase_mergeok || true
616 checkself "$cmd" "$@"
618 verbose git remote prune origin
622 verbose git clone "$url" "$d0/$d"
623 enter "$d0/$d" verbose
624 fix_git_config "$url" "$pushurl"
625 if [ "$branch" != "master" ]; then
626 verbose git checkout --track -b "$branch" origin/"$branch"
633 misc/tools/xonotic-map-compiler-autobuild download
637 if [ x"$1" = x"-f" ]; then
643 if [ -z "$branch" ]; then
646 branch=${remote#origin/}
657 enter "$d0/$d" verbose
659 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
661 verbose git checkout $checkoutflags "$b"
662 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
664 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
667 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
669 verbose git checkout $checkoutflags "$b"
670 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
672 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
674 $ECHO "WTF? Not even branch $b doesn't exist in $d"
679 checkself "$cmd" "$@"
683 $ECHO "The requested branch was not found in any repository."
691 if [ -z "$branch" ]; then
695 if [ -z "$branch" ]; then
698 r=`git symbolic-ref HEAD`
705 dv=`visible_repo_name "$d"`
706 enter "$d0/$d" verbose
707 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
708 $ECHO "Already having this branch in $dv."
710 if yesno "Branch in $dv?"; then
711 if [ -n "$srcbranch" ]; then
714 b=origin/"`repobranch "$d"`"
715 verbose git fetch origin || true
717 # TODO do this without pushing
718 verbose git checkout -b "$branch" "$b"
719 verbose git config "branch.$branch.remote" "$remote"
720 verbose git config "branch.$branch.merge" "refs/heads/$branch"
730 cd "$d0/$d" # am in a pipe, shouldn't use enter
731 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
736 while read -r d BRANCH REV TEXT; do
737 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
740 if [ x"$REV" = x"->" ]; then
743 BRANCH=${BRANCH#remotes/}
744 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
745 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
746 eval "r=\$branches_repos_$ID"
748 eval "branches_repos_$ID=\$r"
750 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
751 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
752 eval "r=\$branches_repos_$ID"
753 printf "%-60s %s\n" "$BRANCH" "$r"
760 dv=`visible_repo_name "$d"`
761 enter "$d0/$d" verbose
762 r=`git symbolic-ref HEAD`
764 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
765 # we have uncommitted changes
766 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
767 if ! verbose git merge origin/"`repobranch "$d"`"; then
768 check_mergeconflict "$d"
769 exit 1 # this should ALWAYS be fatal
779 dv=`visible_repo_name "$d"`
780 enter "$d0/$d" verbose
781 r=`git symbolic-ref HEAD`
783 diffdata=`git diff --color HEAD`
784 if [ -n "$diffdata" ]; then
785 # we have uncommitted changes
786 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
787 verbose git commit -a
790 rem=`git config "branch.$r.remote" || $ECHO origin`
791 bra=`git config "branch.$r.merge" || $ECHO "$r"`
792 upstream="$rem/${bra#refs/heads/}"
793 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
794 upstream="origin/`repobranch "$d"`"
796 logdata=`git log --color "$upstream".."$r"`
797 if [ -n "$logdata" ]; then
798 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
799 verbose git push "$rem" HEAD
802 if [ x"$submit" = x"-s" ]; then
805 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
819 snowleopardhack=false
820 if [ -z "$CC" ]; then
821 export CC="gcc -DSUPPORTIPV6"
839 case "`$CC -dumpversion`" in
840 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
842 # -march=native is broken < 4.3
843 export CC="$CC -mtune=native -march=native"
846 if [ -n "$WE_HATE_OUR_USERS" ]; then
847 export CC="$CC -fno-common"
856 if [ -n "$WE_HATE_OUR_USERS" ]; then
857 TARGETS="sv-$debug cl-$debug"
858 elif [ x"`uname`" = x"Darwin" ]; then
861 TARGETS="sv-$debug cl-$debug sdl-$debug"
864 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
866 TARGETS="sv-$debug sdl-$debug"
869 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"
871 TARGETS="sv-$debug cl-$debug sdl-$debug"
873 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
874 # if we give the command make the arg "", it will surely fail (invalid filename),
875 # so better handle it as an empty client option
878 elif [ -n "$1" ]; then
880 TARGETS_SAVE=$TARGETS
885 TARGETS="$TARGETS sdl-debug"
888 TARGETS="$TARGETS cl-debug"
889 if $snowleopardhack; then
890 export CC="$CC -arch i386"
894 TARGETS="$TARGETS cl-debug"
897 TARGETS="$TARGETS sv-debug"
900 BAD_TARGETS="$BAD_TARGETS $X"
904 if [ -n "$TARGETS" ]; then # at least a valid client
906 else # no valid client, let's assume this option is not meant to be a client then
907 TARGETS=$TARGETS_SAVE
911 if [ -z "$MAKEFLAGS" ]; then
912 if [ -f /proc/cpuinfo ]; then
913 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
914 if [ $ncpus -gt 1 ]; then
918 if [ -n "$WE_HATE_OUR_USERS" ]; then
919 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
923 enter "$d0/d0_blind_id" verbose
924 if ! $compiled0; then
925 # compilation of crypto library failed
926 # use binaries then, if we can...
928 if [ -n "$WE_HATE_OUR_USERS" ]; then
929 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
930 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
931 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
937 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
938 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
939 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
940 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
943 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
944 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
945 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
946 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
954 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
955 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
965 if [ -f Makefile ]; then
966 verbose make $MAKEFLAGS distclean
969 if ! [ -f Makefile ]; then
970 verbose sh autogen.sh
973 verbose make $MAKEFLAGS
976 enter "$d0/fteqcc" verbose
978 verbose make $MAKEFLAGS clean
980 verbose make $MAKEFLAGS
982 enter "$d0/data/xonotic-data.pk3dir" verbose
984 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
986 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
987 # 4 levels up: data, xonotic-data, qcsrc, server
989 enter "$d0/darkplaces" verbose
990 if [ x"$BAD_TARGETS" = x" " ]; then
991 $ECHO "Warning: invalid empty client, default clients will be used."
994 verbose make $MAKEFLAGS clean
996 for T in $TARGETS; do
997 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
999 for T in $BAD_TARGETS; do
1000 $ECHO "Warning: discarded invalid client $T."
1003 verbose "$SELF" update-maps
1006 if [ -n "$WE_HATE_OUR_USERS" ]; then
1008 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1009 elif [ x"`uname`" = x"Darwin" ]; then
1010 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1011 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
1014 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1018 sdl|glx|agl|dedicated)
1027 if ! [ -x "darkplaces/darkplaces$client" ]; then
1028 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1031 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1035 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1037 # if pulseaudio is running: USE IT
1038 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1039 if ps -C pulseaudio >/dev/null; then
1040 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1041 export SDL_AUDIODRIVER=pulse
1048 if [ x"$USE_GDB" = x"yes" ]; then
1049 set -- gdb --args "$@"
1050 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1051 set -- gdb --batch -x savecore.gdb --args "$@"
1052 elif which catchsegv >/dev/null 2>&1; then
1053 set -- catchsegv "$@"
1057 if [ -f xonotic.core ]; then
1058 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1059 gdb "$binary" xonotic.core
1060 #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
1061 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1063 # rm -f xonotic.core.tar.gz
1065 $ECHO "The core dump can be examined later by"
1066 $ECHO " gdb $binary xonotic.core"
1073 if [ x"$1" = x"-k" ]; then
1078 if verbose cd "$d0/$d"; then
1079 if $keep_going; then
1080 verbose "$@" || true
1090 patchdir=`mktemp -d -t save-patches.XXXXXX`
1092 enter "$d0/$d" verbose
1093 git branch -v -v | cut -c 3- | {
1095 while read -r BRANCH REV UPSTREAM TEXT; do
1098 UPSTREAM=${UPSTREAM#\[}
1099 UPSTREAM=${UPSTREAM%\]}
1100 UPSTREAM=${UPSTREAM%:*}
1104 UPSTREAM=origin/"`repobranch "$d"`"
1108 if [ x"$REV" = x"->" ]; then
1111 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1112 $ECHO "$d" > "$patchdir/$i/info.txt"
1113 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1114 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1115 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1118 rm -rf "$patchdir/$i"
1123 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1128 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1129 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1131 for P in "$patchdir"/*/info.txt; do
1136 read -r UPSTREAM <&3
1138 verbose git checkout HEAD^0
1139 verbose git branch -D "$BRANCH"
1140 if [ x"$TRACK" = x"true" ]; then
1141 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1143 verbose git branch -b "$BRANCH" "$UPSTREAM"
1155 report=$report"$*$LF"
1160 report=$report" $*$LF"
1165 o=`"$@" | sed 's/^/ /' || true`
1171 # sorry, fteqcc repo is managed manually
1175 enter "$d0/$d" verbose
1176 base="`repobranch "$d"`"
1178 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1179 case "${ref#refs/remotes/origin/}" in
1192 if [ -n "$branch" ]; then
1193 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1202 l0=`git rev-list "$base".."$ref" | wc -l`
1203 l1=`git rev-list master.."$ref" | wc -l`
1204 if [ $l0 -gt $l1 ]; then
1211 reportecho " Branch $ref:"
1212 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1213 logdata=`git log --color "$realbase".."$ref"`
1214 if [ -z "$logdata" ]; then
1215 reportecho4 "--> not merging, no changes vs master"
1216 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1217 git push origin :"${ref#refs/remotes/origin/}"
1218 reportecho4 "--> branch deleted"
1221 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1222 if [ -z "$diffdata" ]; then
1223 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1224 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1225 git push origin :"${ref#refs/remotes/origin/}"
1226 reportecho4 "--> branch deleted"
1228 elif [ -z "$branch" ] && [ -n "$note" ]; then
1229 reportdo4 $ECHO "$note"
1230 reportecho4 "--> not merging, already had this one rejected before"
1231 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1232 git checkout "$realbase"
1233 org=`git rev-parse HEAD`
1234 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1235 git reset --hard "$org"
1236 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1238 reportecho4 "--> merge failed"
1239 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1240 git reset --hard "$org"
1241 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1243 reportecho4 "--> compile failed"
1244 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1245 git reset --hard "$org"
1246 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1247 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1248 if [ x"$note" = x"del" ]; then
1249 git push origin :"${ref#refs/remotes/origin/}"
1250 reportecho4 "--> test failed, branch deleted"
1251 elif [ -n "$note" ]; then
1252 reportdo4 $ECHO "$note"
1253 reportecho4 "--> test failed"
1255 reportecho4 "--> test failed, postponed"
1258 # apply crlf, or other cleanup filters (non-behavioural changes)
1260 find . -type f -exec touch {} \;
1261 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1264 case ",`repoflags "$d"`," in
1266 # we do quite a mess here... luckily we know $org
1267 git fetch # svn needs to be current
1268 git rebase -i --onto origin/master "$org"
1269 git svn dcommit --add-author-from
1270 git reset --hard "$org"
1273 git push origin HEAD
1276 reportecho4 "--> MERGED"
1277 if yesno "Delete original branch \"$ref\"?"; then
1278 git push origin :"${ref#refs/remotes/origin/}"
1279 reportecho4 "--> branch deleted"
1283 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1284 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1285 if [ x"$note" = x"del" ]; then
1286 git push origin :"${ref#refs/remotes/origin/}"
1287 reportecho4 "--> branch deleted"
1288 elif [ -n "$note" ]; then
1289 reportdo4 $ECHO "$note"
1290 reportecho4 "--> rejected"
1292 reportecho4 "--> postponed"
1301 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1313 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1314 # ./all clean --reclone
1317 if [ x"$X" = x"--reclone" ]; then
1324 elif [ x"$X" = x"-f" ]; then
1326 elif [ x"$X" = x"-u" ]; then
1328 elif [ x"$X" = x"-U" ]; then
1331 elif [ x"$X" = x"-fu" ]; then
1334 elif [ x"$X" = x"-fU" ]; then
1338 elif [ x"$X" = x"-m" ]; then
1340 elif [ x"$X" = x"-r" ]; then
1342 elif [ x"$X" = x"-D" ]; then
1344 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1347 msg " ,--'-\\P/\`\\ FFFFFFF"
1348 msg " __/_ B/,-.\\ FFFFFFF"
1349 msg " / _\\ (// O\\\\ FFFFFF"
1350 msg "| (O \`) _\\._ _)\\ FFFUU"
1351 msg "| |___/.^d0~~\"\\ \\ UUUU"
1352 msg "| |\`~' \\ | UUUU"
1353 msg "| | __,C>|| UUUU"
1354 msg "\\ /_ ,-/,-' | UUUU"
1355 msg " \\\\_ \\_>~' / UUUU-"
1358 msg "Unknown arg: $X"
1368 if $gotoupstream; then
1370 msg "Must also use -f (delete local changes) when using -u"
1373 if $gotomaster; then
1374 if $fetchupstream; then
1375 verbose git fetch origin
1376 verbose git remote prune origin
1378 verbose git checkout -f "`repobranch "$d"`"
1379 verbose git reset --hard origin/"`repobranch "$d"`"
1381 r=`git symbolic-ref HEAD`
1383 rem=`git config "branch.$r.remote" || $ECHO origin`
1384 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1385 upstream="$rem/${bra#refs/heads/}"
1386 if $fetchupstream; then
1387 verbose git fetch "$rem"
1388 verbose git remote prune "$rem"
1390 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1391 upstream="origin/`repobranch "$d"`"
1393 verbose git reset --hard "$upstream"
1395 elif $gotomaster; then
1397 verbose git checkout -f "`repobranch "$d"`"
1398 verbose git reset --hard
1400 verbose git checkout "`repobranch "$d"`"
1403 verbose git reset --hard
1405 if $rmuntracked; then
1408 verbose git clean -df || true
1411 verbose git clean -xdf || true
1415 if $killbranches; then
1416 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1417 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1418 verbose git branch -D "${B#refs/heads/}"
1421 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1422 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1424 checkself "$cmd" "$@"
1428 # release building goes here
1430 #"$SELF" each git clean -fxd
1431 case "$RELEASETYPE" in
1433 msg "Building a BETA"
1436 msg "Building a RELEASE"
1439 $ECHO >&2 -n "$ESC[2J$ESC[H"
1446 msg " +---------------------------------------------------------.---+"
1448 msg " +---------------------------------------------------------^---+"
1450 msg " | / \ This is the official release build system. |"
1451 msg " | | | If you are not a member of the Xonotic Core Team, |"
1452 msg " | | STOP | you are not supposed to use this script and should |"
1453 msg " | | | instead use ./all compile to compile the engine |"
1454 msg " | \____/ and game code. |"
1456 msg " | [ I understand ] |"
1457 msg " +-------------------------------------------------------------+"
1459 # A LOT of build infrastructure is required:
1462 # - .ssh/config must be configured so the following
1463 # host names are reachable and have a compile
1464 # infrastructure set up:
1465 # - xonotic-build-linux32 (with gcc on x86)
1466 # - xonotic-build-linux64 (with gcc on x86_64)
1467 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1468 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1469 # and x86_64-w64-mingw32-g++)
1470 # - xonotic-build-osx (with Xcode and SDL.framework)
1471 # - AMD Compressonator installed in WINE
1472 # - ResEdit installed in WINE
1473 # - a lot of other requirements you will figure out
1474 # while reading the error messages
1475 # - environment variable RELEASETYPE set
1476 # - optionally, environment variable RELEASEDATE set
1481 verbose rm -rf Xonotic Xonotic*.zip
1482 verbose mkdir -p Xonotic
1483 if [ -n "$RELEASEDATE" ]; then
1484 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1486 verbose date +%Y%m%d > Xonotic/stamp.txt
1488 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1490 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1492 verbose rm -rf misc/builddeps
1493 verbose mv misc/buildfiles/win32/* . || true
1494 verbose mv misc/buildfiles/win64 bin64 || true
1495 verbose mv misc/buildfiles/osx/* . || true
1496 verbose rm -rf misc/buildfiles
1497 verbose rm -rf misc/pki
1500 verbose cd darkplaces
1501 verbose git archive --format=tar HEAD
1503 verbose cd Xonotic/source/darkplaces
1508 verbose git archive --format=tar HEAD
1510 verbose cd Xonotic/source/fteqcc
1514 verbose cd data/xonotic-data.pk3dir
1515 verbose git archive --format=tar HEAD -- qcsrc Makefile
1517 verbose cd Xonotic/source
1520 rm -f Xonotic/key_15.d0pk
1522 release-compile-run)
1531 if [ -n "$targetfiles" ]; then
1532 case " $HOSTS_THAT_ARE_DISABLED " in
1537 case " $HOSTS_THAT_ARE_MYSELF " in
1539 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1540 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1541 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1542 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1543 for f in $targetfiles; do
1544 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1548 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1549 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1550 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1551 for f in $targetfiles; do
1552 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1556 # now rebrand the binaries...
1557 for f in $targetfiles; do
1558 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1561 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1563 d=`mktemp -d -t rebrand.XXXXXX`
1565 $ECHO "-mygames" > darkplaces.opt
1566 zip -9r darkplaces.zip darkplaces.opt
1579 fteqcc_maketargets=$3
1581 darkplaces_maketargets=$5
1583 host=xonotic-build-$suffix
1584 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1585 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1587 release-engine-win32)
1588 verbose "$SELF" release-compile win32 \
1589 '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' \
1590 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1592 verbose "$SELF" release-compile win32 \
1593 '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' \
1595 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1597 release-engine-win64)
1598 verbose "$SELF" release-compile win64 \
1599 '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' \
1600 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1601 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1602 verbose "$SELF" release-compile win64 \
1603 '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' \
1605 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1608 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1609 verbose "$SELF" release-compile osx \
1610 '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"' \
1611 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1612 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1613 verbose "$SELF" release-compile osx \
1614 '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"' \
1616 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1618 release-engine-linux32)
1619 verbose "$SELF" release-compile linux32 \
1620 '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' \
1621 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1622 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1624 release-engine-linux64)
1625 verbose "$SELF" release-compile linux64 \
1626 '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' \
1627 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1628 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1631 verbose "$SELF" release-engine-linux32 &
1632 verbose "$SELF" release-engine-linux64 &
1633 verbose "$SELF" release-engine-win32 &
1634 verbose "$SELF" release-engine-win64 &
1635 verbose "$SELF" release-engine-osx &
1644 verbose "$SELF" update-maps
1647 case "$RELEASETYPE" in
1649 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1650 # back out of: source/qcsrc/server
1653 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1656 verbose rm -f Xonotic/source/*/fteqcc.log
1658 release-buildpk3-transform-raw)
1661 release-buildpk3-transform-normal)
1664 # texture: convert to jpeg and dds
1665 verbose export do_jpeg=true
1666 verbose export jpeg_qual_rgb=95
1667 verbose export jpeg_qual_a=99
1668 verbose export do_dds=true
1669 verbose export dds_flags=
1670 verbose export do_ogg=false
1671 verbose export del_src=true
1672 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1674 release-buildpk3-transform-low)
1677 # texture: convert to jpeg and dds
1678 # music: reduce bitrate
1679 verbose export do_jpeg=true
1680 verbose export jpeg_qual_rgb=80
1681 verbose export jpeg_qual_a=97
1682 verbose export do_dds=false
1683 verbose export do_ogg=true
1684 verbose export ogg_qual=1
1685 verbose export del_src=true
1686 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1688 release-buildpk3-transform-lowdds)
1691 # texture: convert to jpeg and dds
1692 # music: reduce bitrate
1693 verbose export do_jpeg=false
1694 verbose export do_jpeg_if_not_dds=true
1695 verbose export jpeg_qual_rgb=80
1696 verbose export jpeg_qual_a=99
1697 verbose export do_dds=true
1698 verbose export dds_flags=
1699 verbose export do_ogg=true
1700 verbose export ogg_qual=1
1701 verbose export del_src=true
1702 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1715 verbose rm -rf Xonotic/temp
1716 verbose mkdir -p Xonotic/temp
1719 verbose git archive --format=tar HEAD
1721 verbose cd Xonotic/temp
1724 verbose cd Xonotic/temp
1725 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1726 verbose cp ../source/progs.dat .
1727 verbose cp ../source/csprogs.dat .
1728 verbose cp ../source/menu.dat .
1729 verbose rm -rf qcsrc
1730 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1731 major=$(($gv / 10000))
1732 minor=$(($gv / 100 - $major * 100))
1733 patch=$(($gv - $major * 10000 - $minor * 100))
1734 versionstr="$major.$minor.$patch"
1735 case "$RELEASETYPE" in
1737 versionstr="$versionstr""beta"
1741 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1742 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1743 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1744 " defaultXonotic.cfg
1746 verbose cd gfx/menu/luminos
1747 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1748 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1749 verbose rm background_l2.svg
1752 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1753 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1754 if [ -f "$X" ]; then
1756 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1760 verbose export git_src_repo="$d0/$src" # skip hash-object
1761 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1762 verbose mkzip "../../$dst" *
1764 verbose rm -rf Xonotic/temp
1767 stamp=`cat Xonotic/stamp.txt`
1773 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1779 while [ "$#" -gt 1 ]; do
1780 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1786 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1787 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1788 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1789 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1790 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1792 release-pack-needsx11)
1795 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1798 verbose "$SELF" release-pack
1803 stamp=`cat Xonotic/stamp.txt`
1804 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1805 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1806 # let's pass crypto import laws of some nasty countries
1807 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1808 if [ -n "$crypto_libs" ]; then
1809 verbose mkzip Xonotic-$stamp-crypto.zip \
1813 # build the archives
1814 verbose mkzip Xonotic-$stamp-engine.zip \
1816 Xonotic/bin64/*.dll \
1819 Xonotic/xonotic.exe \
1820 Xonotic/source/darkplaces/
1821 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1822 verbose mkzip Xonotic-$stamp-common.zip \
1823 Xonotic/source/fteqcc/ \
1824 Xonotic/source/qcsrc/ \
1829 Xonotic/key_0.d0pk \
1830 Xonotic/data/font-nimbussansl-$stamp.pk3
1831 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1832 verbose mkzip0 Xonotic-$stamp.zip \
1833 Xonotic/data/xonotic-$stamp-data.pk3 \
1834 Xonotic/data/xonotic-$stamp-maps.pk3 \
1835 Xonotic/data/xonotic-$stamp-music.pk3 \
1836 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1837 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1838 verbose mkzip0 Xonotic-$stamp-low.zip \
1839 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1840 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1841 Xonotic/data/xonotic-$stamp-music-low.pk3
1842 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1843 # verbose mkzip0 Xonotic-$stamp-high.zip \
1844 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1845 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1846 # Xonotic/data/xonotic-$stamp-music.pk3 \
1847 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1848 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1849 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1850 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1851 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1852 Xonotic/data/xonotic-$stamp-music-low.pk3
1855 verbose "$SELF" release-prepare
1856 verbose "$SELF" release-maps
1857 verbose "$SELF" release-engine
1858 verbose "$SELF" release-qc
1859 verbose "$SELF" release-pack-needsx11
1860 verbose "$SELF" release-zip
1865 $ECHO " $SELF admin-merge [<branch>]"
1866 $ECHO " $SELF branch <branch>"
1867 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1868 $ECHO " $SELF branches"
1869 $ECHO " $SELF checkout|switch <branch>"
1870 $ECHO " $SELF checkout|switch <remote>/<branch>"
1871 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1872 $ECHO " $SELF clean --reclone"
1873 $ECHO " $SELF compile [-c] [-r] [-0]"
1874 $ECHO " $SELF each|foreach [-k] command..."
1875 $ECHO " $SELF fix_upstream_rebase"
1876 $ECHO " $SELF keygen"
1877 $ECHO " $SELF merge"
1878 $ECHO " $SELF push|commit [-s]"
1879 $ECHO " $SELF release"
1880 $ECHO " $SELF restore-patches"
1881 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1882 $ECHO " $SELF save-patches"
1883 $ECHO " $SELF update-maps"
1884 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"