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_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
276 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
277 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
278 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
283 r_base=`git merge-base "$r_me" "$r_other"`
285 # no merge-base? upstream did filter-branch
286 if [ -n "$r_base" ]; then
287 # otherwise, check if the two histories are "similar"
288 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
289 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
291 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
292 r_lc_me=`$ECHO "$r_l_me" | wc -l`
293 r_lc_other=`$ECHO "$r_l_other" | wc -l`
294 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
295 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
297 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
298 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
299 git reset --hard "$r_me"
309 fix_upstream_rebase_mergeok()
311 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
312 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
316 fix_upstream_rebase_mergefail()
318 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
319 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
325 verbose git config remote.origin.url "$1"
327 verbose git config remote.origin.pushurl "$2"
329 verbose git config --unset remote.origin.pushurl || true
331 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
332 case ",`repoflags "$d"`," in
334 verbose git config --unset core.autocrlf || true
337 verbose git config core.autocrlf input
340 if [ -z "`git config push.default || true`" ]; then
341 verbose git config push.default current # or is tracking better?
343 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
344 verbose git config filter.mapclean.smudge "cat"
352 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
353 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
354 zip -9y -@<"$ziplist" "$archive" || true
365 # first result is to be ignored, but we use it to check status
366 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
367 { 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*,,'
368 # unit: clock ticks (depends on what "time" returns
376 if ! { time -p true; } >/dev/null 2>&1; then
394 if t=`mirrorspeed "$m"`; then
396 t=$(($t$op)) # fudge factor
397 msg "$m -> $t ticks ($op)"
398 if [ -z "$bestt" ] || [ "$t" -lt "$bestt" ]; then
409 if [ -n "$bestin" ]; then
410 msg "Best mirror seems to be $pre$bestin$suf"
420 enter "$d0/$d" verbose
421 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
427 pushurl=`repopushurl "$d"`
428 branch=`repobranch "$d"`
429 if [ -d "$d0/$d" ]; then
431 fix_git_config "$url" "$pushurl"
437 # enable the ssh URL for pushing
440 if [ -f ~/.ssh/id_rsa.pub ]; then
442 msg "A key already exists and no new one will be generated. If you"
443 msg "already have done the procedure for getting your key approved, you"
444 msg "can skip the following paragraph and already use the repository."
446 msg "To get access, your key has to be approved first. For that, visit"
447 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
448 msg "the \"Support\" tracker in the \"Repository\" category where you"
449 msg "apply for access and paste the following output into the issue:"
451 msg "`cat ~/.ssh/id_rsa.pub`"
453 msg "Note that you will only have write access to branches that start"
454 msg "with your user name."
455 elif [ -f ~/.ssh/id_dsa.pub ]; then
457 msg "A key already exists and no new one will be generated. If you"
458 msg "already have done the procedure for getting your key approved, you"
459 msg "can skip the following paragraph and already use the repository."
461 msg "To get access, your key has to be approved first. For that, visit"
462 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
463 msg "the \"Support\" tracker in the \"Repository\" category where you"
464 msg "apply for access and paste the following output into the issue:"
466 msg "`cat ~/.ssh/id_dsa.pub`"
468 msg "Note that you will only have write access to branches that start"
469 msg "with your user name."
472 msg "No key has been generated yet. One will be generated now."
473 msg "If other people are using your computer, it is recommended"
474 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
475 msg "when asked for a passphrase."
477 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
479 msg "To get access, your key has to be approved first. For that, visit"
480 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
481 msg "the \"Support\" tracker in the \"Repository\" category where you"
482 msg "apply for access and paste the following output into the issue:"
484 msg "`cat ~/.ssh/id_rsa.pub`"
486 msg "Note that you will only have write access to branches that start"
487 msg "with your user name."
495 if [ x"$1" = x"-N" ]; then
497 elif [ x"$1" = x"-p" ]; then
499 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
500 pushbase=ssh://xonotic@git.xonotic.org/
502 elif [ x"$1" = x"-s" ]; then
504 base=ssh://xonotic@git.xonotic.org/
506 elif [ x"$1" = x"-g" ]; then
508 base=git://git.xonotic.org/xonotic/
509 elif [ x"$1" = x"-h" ]; then
511 base=http://git.xonotic.org/xonotic/
512 elif [ x"$1" = x"-l" ]; then
520 msg "Invalid location!"
521 msg "Possible locations for the -l option:"
522 msg " nl (Netherlands, run by merlijn)"
523 msg " de (Germany, run by divVerent)"
524 msg " us (United States of America, run by detrate)"
525 msg " best (find automatically)"
526 msg " default (currently nl)"
540 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
543 if location=`bestmirror $newbase"xonotic.git" de us nl:'*3/2'`; then # 50% malus to the NL server to not overload it too much
561 *://*.git.xonotic.org/*)
562 location=${base%%.git.xonotic.org/*}
563 location=${location##*://}
571 if [ -n "$location" ]; then
572 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
573 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
575 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
576 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
580 pushurl=`repopushurl .`
581 fix_git_config "$url" "$pushurl"
583 if $allow_pull || $fix_config; then
588 pushurl=`repopushurl "$d"`
589 branch=`repobranch "$d"`
590 if [ -d "$d0/$d" ]; then
592 enter "$d0/$d" verbose
593 r=`git symbolic-ref HEAD`
595 if git config branch.$r.remote >/dev/null 2>&1; then
596 if ! verbose git pull; then
597 fix_upstream_rebase_mergefail || true
598 check_mergeconflict "$d"
599 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
602 fix_upstream_rebase_mergeok || true
607 checkself "$cmd" "$@"
609 verbose git remote prune origin
613 verbose git clone "$url" "$d0/$d"
614 enter "$d0/$d" verbose
615 fix_git_config "$url" "$pushurl"
616 if [ "$branch" != "master" ]; then
617 verbose git checkout --track -b "$branch" origin/"$branch"
624 misc/tools/xonotic-map-compiler-autobuild download
628 if [ x"$1" = x"-f" ]; then
634 if [ -z "$branch" ]; then
637 branch=${remote#origin/}
648 enter "$d0/$d" verbose
650 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
652 verbose git checkout $checkoutflags "$b"
653 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
655 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
658 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
660 verbose git checkout $checkoutflags "$b"
661 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
663 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
665 $ECHO "WTF? Not even branch $b doesn't exist in $d"
670 checkself "$cmd" "$@"
674 $ECHO "The requested branch was not found in any repository."
682 if [ -z "$branch" ]; then
686 if [ -z "$branch" ]; then
689 r=`git symbolic-ref HEAD`
696 dv=`visible_repo_name "$d"`
697 enter "$d0/$d" verbose
698 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
699 $ECHO "Already having this branch in $dv."
701 if yesno "Branch in $dv?"; then
702 if [ -n "$srcbranch" ]; then
705 b=origin/"`repobranch "$d"`"
706 verbose git fetch origin || true
708 # TODO do this without pushing
709 verbose git checkout -b "$branch" "$b"
710 verbose git config "branch.$branch.remote" "$remote"
711 verbose git config "branch.$branch.merge" "refs/heads/$branch"
721 cd "$d0/$d" # am in a pipe, shouldn't use enter
722 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
727 while read -r d BRANCH REV TEXT; do
728 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
731 if [ x"$REV" = x"->" ]; then
734 BRANCH=${BRANCH#remotes/}
735 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
736 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
737 eval "r=\$branches_repos_$ID"
739 eval "branches_repos_$ID=\$r"
741 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
742 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
743 eval "r=\$branches_repos_$ID"
744 printf "%-60s %s\n" "$BRANCH" "$r"
751 dv=`visible_repo_name "$d"`
752 enter "$d0/$d" verbose
753 r=`git symbolic-ref HEAD`
755 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
756 # we have uncommitted changes
757 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
758 if ! verbose git merge origin/"`repobranch "$d"`"; then
759 check_mergeconflict "$d"
760 exit 1 # this should ALWAYS be fatal
770 dv=`visible_repo_name "$d"`
771 enter "$d0/$d" verbose
772 r=`git symbolic-ref HEAD`
774 diffdata=`git diff --color HEAD`
775 if [ -n "$diffdata" ]; then
776 # we have uncommitted changes
777 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
778 verbose git commit -a
781 rem=`git config "branch.$r.remote" || $ECHO origin`
782 bra=`git config "branch.$r.merge" || $ECHO "$r"`
783 upstream="$rem/${bra#refs/heads/}"
784 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
785 upstream="origin/`repobranch "$d"`"
787 logdata=`git log --color "$upstream".."$r"`
788 if [ -n "$logdata" ]; then
789 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
790 verbose git push "$rem" HEAD
793 if [ x"$submit" = x"-s" ]; then
796 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
810 snowleopardhack=false
811 if [ -z "$CC" ]; then
812 export CC="gcc -DSUPPORTIPV6"
830 case "`$CC -dumpversion`" in
831 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
833 # -march=native is broken < 4.3
834 export CC="$CC -mtune=native -march=native"
837 if [ -n "$WE_HATE_OUR_USERS" ]; then
838 export CC="$CC -fno-common"
847 if [ -n "$WE_HATE_OUR_USERS" ]; then
848 TARGETS="sv-$debug cl-$debug"
849 elif [ x"`uname`" = x"Darwin" ]; then
852 TARGETS="sv-$debug cl-$debug sdl-$debug"
855 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
857 TARGETS="sv-$debug sdl-$debug"
860 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"
862 TARGETS="sv-$debug cl-$debug sdl-$debug"
864 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
865 # if we give the command make the arg "", it will surely fail (invalid filename),
866 # so better handle it as an empty client option
869 elif [ -n "$1" ]; then
871 TARGETS_SAVE=$TARGETS
876 TARGETS="$TARGETS sdl-debug"
879 TARGETS="$TARGETS cl-debug"
880 if $snowleopardhack; then
881 export CC="$CC -arch i386"
885 TARGETS="$TARGETS cl-debug"
888 TARGETS="$TARGETS sv-debug"
891 BAD_TARGETS="$BAD_TARGETS $X"
895 if [ -n "$TARGETS" ]; then # at least a valid client
897 else # no valid client, let's assume this option is not meant to be a client then
898 TARGETS=$TARGETS_SAVE
902 if [ -z "$MAKEFLAGS" ]; then
903 if [ -f /proc/cpuinfo ]; then
904 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
905 if [ $ncpus -gt 1 ]; then
909 if [ -n "$WE_HATE_OUR_USERS" ]; then
910 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
914 enter "$d0/d0_blind_id" verbose
915 if ! $compiled0; then
916 # compilation of crypto library failed
917 # use binaries then, if we can...
919 if [ -n "$WE_HATE_OUR_USERS" ]; then
920 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
921 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
922 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
928 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
929 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
930 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
931 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
934 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
935 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
936 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
937 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
945 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
946 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
956 if [ -f Makefile ]; then
957 verbose make $MAKEFLAGS distclean
960 if ! [ -f Makefile ]; then
961 verbose sh autogen.sh
964 verbose make $MAKEFLAGS
967 enter "$d0/fteqcc" verbose
969 verbose make $MAKEFLAGS clean
971 verbose make $MAKEFLAGS
973 enter "$d0/data/xonotic-data.pk3dir" verbose
975 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
977 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
978 # 4 levels up: data, xonotic-data, qcsrc, server
980 enter "$d0/darkplaces" verbose
981 if [ x"$BAD_TARGETS" = x" " ]; then
982 $ECHO "Warning: invalid empty client, default clients will be used."
985 verbose make $MAKEFLAGS clean
987 for T in $TARGETS; do
988 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
990 for T in $BAD_TARGETS; do
991 $ECHO "Warning: discarded invalid client $T."
994 verbose "$SELF" update-maps
997 if [ -n "$WE_HATE_OUR_USERS" ]; then
999 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1000 elif [ x"`uname`" = x"Darwin" ]; then
1001 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1002 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
1005 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1009 sdl|glx|agl|dedicated)
1018 if ! [ -x "darkplaces/darkplaces$client" ]; then
1019 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1022 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1026 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1028 # if pulseaudio is running: USE IT
1029 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1030 if ps -C pulseaudio >/dev/null; then
1031 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1032 export SDL_AUDIODRIVER=pulse
1039 if [ x"$USE_GDB" = x"yes" ]; then
1040 set -- gdb --args "$@"
1041 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1042 set -- gdb --batch -x savecore.gdb --args "$@"
1043 elif which catchsegv >/dev/null 2>&1; then
1044 set -- catchsegv "$@"
1048 if [ -f xonotic.core ]; then
1049 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1050 gdb "$binary" xonotic.core
1051 #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
1052 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1054 # rm -f xonotic.core.tar.gz
1056 $ECHO "The core dump can be examined later by"
1057 $ECHO " gdb $binary xonotic.core"
1064 if [ x"$1" = x"-k" ]; then
1069 if verbose cd "$d0/$d"; then
1070 if $keep_going; then
1071 verbose "$@" || true
1081 patchdir=`mktemp -d -t save-patches.XXXXXX`
1083 enter "$d0/$d" verbose
1084 git branch -v -v | cut -c 3- | {
1086 while read -r BRANCH REV UPSTREAM TEXT; do
1089 UPSTREAM=${UPSTREAM#\[}
1090 UPSTREAM=${UPSTREAM%\]}
1091 UPSTREAM=${UPSTREAM%:*}
1095 UPSTREAM=origin/"`repobranch "$d"`"
1099 if [ x"$REV" = x"->" ]; then
1102 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1103 $ECHO "$d" > "$patchdir/$i/info.txt"
1104 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1105 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1106 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1109 rm -rf "$patchdir/$i"
1114 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1119 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1120 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1122 for P in "$patchdir"/*/info.txt; do
1127 read -r UPSTREAM <&3
1129 verbose git checkout HEAD^0
1130 verbose git branch -D "$BRANCH"
1131 if [ x"$TRACK" = x"true" ]; then
1132 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1134 verbose git branch -b "$BRANCH" "$UPSTREAM"
1146 report=$report"$*$LF"
1151 report=$report" $*$LF"
1156 o=`"$@" | sed 's/^/ /' || true`
1162 # sorry, fteqcc repo is managed manually
1166 enter "$d0/$d" verbose
1167 base="`repobranch "$d"`"
1169 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1170 case "${ref#refs/remotes/origin/}" in
1183 if [ -n "$branch" ]; then
1184 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1193 l0=`git rev-list "$base".."$ref" | wc -l`
1194 l1=`git rev-list master.."$ref" | wc -l`
1195 if [ $l0 -gt $l1 ]; then
1202 reportecho " Branch $ref:"
1203 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1204 logdata=`git log --color "$realbase".."$ref"`
1205 if [ -z "$logdata" ]; then
1206 reportecho4 "--> not merging, no changes vs master"
1207 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1208 git push origin :"${ref#refs/remotes/origin/}"
1209 reportecho4 "--> branch deleted"
1212 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1213 if [ -z "$diffdata" ]; then
1214 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1215 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1216 git push origin :"${ref#refs/remotes/origin/}"
1217 reportecho4 "--> branch deleted"
1219 elif [ -z "$branch" ] && [ -n "$note" ]; then
1220 reportdo4 $ECHO "$note"
1221 reportecho4 "--> not merging, already had this one rejected before"
1222 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1223 git checkout "$realbase"
1224 org=`git rev-parse HEAD`
1225 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1226 git reset --hard "$org"
1227 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1229 reportecho4 "--> merge failed"
1230 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1231 git reset --hard "$org"
1232 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1234 reportecho4 "--> compile failed"
1235 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1236 git reset --hard "$org"
1237 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1238 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1239 if [ x"$note" = x"del" ]; then
1240 git push origin :"${ref#refs/remotes/origin/}"
1241 reportecho4 "--> test failed, branch deleted"
1242 elif [ -n "$note" ]; then
1243 reportdo4 $ECHO "$note"
1244 reportecho4 "--> test failed"
1246 reportecho4 "--> test failed, postponed"
1249 # apply crlf, or other cleanup filters (non-behavioural changes)
1251 find . -type f -exec touch {} \;
1252 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1255 case ",`repoflags "$d"`," in
1257 # we do quite a mess here... luckily we know $org
1258 git fetch # svn needs to be current
1259 git rebase -i --onto origin/master "$org"
1260 git svn dcommit --add-author-from
1261 git reset --hard "$org"
1264 git push origin HEAD
1267 reportecho4 "--> MERGED"
1268 if yesno "Delete original branch \"$ref\"?"; then
1269 git push origin :"${ref#refs/remotes/origin/}"
1270 reportecho4 "--> branch deleted"
1274 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1275 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1276 if [ x"$note" = x"del" ]; then
1277 git push origin :"${ref#refs/remotes/origin/}"
1278 reportecho4 "--> branch deleted"
1279 elif [ -n "$note" ]; then
1280 reportdo4 $ECHO "$note"
1281 reportecho4 "--> rejected"
1283 reportecho4 "--> postponed"
1292 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1304 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1305 # ./all clean --reclone
1308 if [ x"$X" = x"--reclone" ]; then
1315 elif [ x"$X" = x"-f" ]; then
1317 elif [ x"$X" = x"-u" ]; then
1319 elif [ x"$X" = x"-U" ]; then
1322 elif [ x"$X" = x"-fu" ]; then
1325 elif [ x"$X" = x"-fU" ]; then
1329 elif [ x"$X" = x"-m" ]; then
1331 elif [ x"$X" = x"-r" ]; then
1333 elif [ x"$X" = x"-D" ]; then
1335 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1338 msg " ,--'-\\P/\`\\ FFFFFFF"
1339 msg " __/_ B/,-.\\ FFFFFFF"
1340 msg " / _\\ (// O\\\\ FFFFFF"
1341 msg "| (O \`) _\\._ _)\\ FFFUU"
1342 msg "| |___/.^d0~~\"\\ \\ UUUU"
1343 msg "| |\`~' \\ | UUUU"
1344 msg "| | __,C>|| UUUU"
1345 msg "\\ /_ ,-/,-' | UUUU"
1346 msg " \\\\_ \\_>~' / UUUU-"
1349 msg "Unknown arg: $X"
1359 if $gotoupstream; then
1361 msg "Must also use -f (delete local changes) when using -u"
1364 if $gotomaster; then
1365 if $fetchupstream; then
1366 verbose git fetch origin
1367 verbose git remote prune origin
1369 verbose git checkout -f "`repobranch "$d"`"
1370 verbose git reset --hard origin/"`repobranch "$d"`"
1372 r=`git symbolic-ref HEAD`
1374 rem=`git config "branch.$r.remote" || $ECHO origin`
1375 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1376 upstream="$rem/${bra#refs/heads/}"
1377 if $fetchupstream; then
1378 verbose git fetch "$rem"
1379 verbose git remote prune "$rem"
1381 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1382 upstream="origin/`repobranch "$d"`"
1384 verbose git reset --hard "$upstream"
1386 elif $gotomaster; then
1388 verbose git checkout -f "`repobranch "$d"`"
1389 verbose git reset --hard
1391 verbose git checkout "`repobranch "$d"`"
1394 verbose git reset --hard
1396 if $rmuntracked; then
1399 verbose git clean -df || true
1402 verbose git clean -xdf || true
1406 if $killbranches; then
1407 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1408 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1409 verbose git branch -D "${B#refs/heads/}"
1412 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1413 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1415 checkself "$cmd" "$@"
1419 # release building goes here
1421 #"$SELF" each git clean -fxd
1422 case "$RELEASETYPE" in
1424 msg "Building a BETA"
1427 msg "Building a RELEASE"
1430 $ECHO >&2 -n "$ESC[2J$ESC[H"
1437 msg " +---------------------------------------------------------.---+"
1439 msg " +---------------------------------------------------------^---+"
1441 msg " | / \ This is the official release build system. |"
1442 msg " | | | If you are not a member of the Xonotic Core Team, |"
1443 msg " | | STOP | you are not supposed to use this script and should |"
1444 msg " | | | instead use ./all compile to compile the engine |"
1445 msg " | \____/ and game code. |"
1447 msg " | [ I understand ] |"
1448 msg " +-------------------------------------------------------------+"
1450 # A LOT of build infrastructure is required:
1453 # - .ssh/config must be configured so the following
1454 # host names are reachable and have a compile
1455 # infrastructure set up:
1456 # - xonotic-build-linux32 (with gcc on x86)
1457 # - xonotic-build-linux64 (with gcc on x86_64)
1458 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1459 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1460 # and x86_64-w64-mingw32-g++)
1461 # - xonotic-build-osx (with Xcode and SDL.framework)
1462 # - AMD Compressonator installed in WINE
1463 # - ResEdit installed in WINE
1464 # - a lot of other requirements you will figure out
1465 # while reading the error messages
1466 # - environment variable RELEASETYPE set
1467 # - optionally, environment variable RELEASEDATE set
1472 verbose rm -rf Xonotic Xonotic*.zip
1473 verbose mkdir -p Xonotic
1474 if [ -n "$RELEASEDATE" ]; then
1475 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1477 verbose date +%Y%m%d > Xonotic/stamp.txt
1479 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1481 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1483 verbose rm -rf misc/builddeps
1484 verbose mv misc/buildfiles/win32/* . || true
1485 verbose mv misc/buildfiles/win64 bin64 || true
1486 verbose mv misc/buildfiles/osx/* . || true
1487 verbose rm -rf misc/buildfiles
1488 verbose rm -rf misc/pki
1491 verbose cd darkplaces
1492 verbose git archive --format=tar HEAD
1494 verbose cd Xonotic/source/darkplaces
1499 verbose git archive --format=tar HEAD
1501 verbose cd Xonotic/source/fteqcc
1505 verbose cd data/xonotic-data.pk3dir
1506 verbose git archive --format=tar HEAD -- qcsrc Makefile
1508 verbose cd Xonotic/source
1511 rm -f Xonotic/key_15.d0pk
1513 release-compile-run)
1522 if [ -n "$targetfiles" ]; then
1523 case " $HOSTS_THAT_ARE_DISABLED " in
1528 case " $HOSTS_THAT_ARE_MYSELF " in
1530 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1531 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1532 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1533 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1534 for f in $targetfiles; do
1535 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1539 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1540 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1541 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1542 for f in $targetfiles; do
1543 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1547 # now rebrand the binaries...
1548 for f in $targetfiles; do
1549 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1552 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1554 d=`mktemp -d -t rebrand.XXXXXX`
1556 $ECHO "-mygames" > darkplaces.opt
1557 zip -9r darkplaces.zip darkplaces.opt
1570 fteqcc_maketargets=$3
1572 darkplaces_maketargets=$5
1574 host=xonotic-build-$suffix
1575 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1576 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1578 release-engine-win32)
1579 verbose "$SELF" release-compile win32 \
1580 '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' \
1581 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1583 verbose "$SELF" release-compile win32 \
1584 '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' \
1586 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1588 release-engine-win64)
1589 verbose "$SELF" release-compile win64 \
1590 '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' \
1591 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1592 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1593 verbose "$SELF" release-compile win64 \
1594 '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' \
1596 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1599 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1600 verbose "$SELF" release-compile osx \
1601 '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"' \
1602 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1603 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1604 verbose "$SELF" release-compile osx \
1605 '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"' \
1607 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1609 release-engine-linux32)
1610 verbose "$SELF" release-compile linux32 \
1611 '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' \
1612 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1613 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1615 release-engine-linux64)
1616 verbose "$SELF" release-compile linux64 \
1617 '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' \
1618 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1619 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1622 verbose "$SELF" release-engine-linux32 &
1623 verbose "$SELF" release-engine-linux64 &
1624 verbose "$SELF" release-engine-win32 &
1625 verbose "$SELF" release-engine-win64 &
1626 verbose "$SELF" release-engine-osx &
1635 verbose "$SELF" update-maps
1638 case "$RELEASETYPE" in
1640 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1641 # back out of: source/qcsrc/server
1644 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1647 verbose rm -f Xonotic/source/*/fteqcc.log
1649 release-buildpk3-transform-raw)
1652 release-buildpk3-transform-normal)
1655 # texture: convert to jpeg and dds
1656 verbose export do_jpeg=true
1657 verbose export jpeg_qual_rgb=95
1658 verbose export jpeg_qual_a=99
1659 verbose export do_dds=true
1660 verbose export dds_flags=
1661 verbose export do_ogg=false
1662 verbose export del_src=true
1663 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1665 release-buildpk3-transform-low)
1668 # texture: convert to jpeg and dds
1669 # music: reduce bitrate
1670 verbose export do_jpeg=true
1671 verbose export jpeg_qual_rgb=80
1672 verbose export jpeg_qual_a=97
1673 verbose export do_dds=false
1674 verbose export do_ogg=true
1675 verbose export ogg_qual=1
1676 verbose export del_src=true
1677 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1679 release-buildpk3-transform-lowdds)
1682 # texture: convert to jpeg and dds
1683 # music: reduce bitrate
1684 verbose export do_jpeg=false
1685 verbose export do_jpeg_if_not_dds=true
1686 verbose export jpeg_qual_rgb=80
1687 verbose export jpeg_qual_a=99
1688 verbose export do_dds=true
1689 verbose export dds_flags=
1690 verbose export do_ogg=true
1691 verbose export ogg_qual=1
1692 verbose export del_src=true
1693 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1706 verbose rm -rf Xonotic/temp
1707 verbose mkdir -p Xonotic/temp
1710 verbose git archive --format=tar HEAD
1712 verbose cd Xonotic/temp
1715 verbose cd Xonotic/temp
1716 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1717 verbose cp ../source/progs.dat .
1718 verbose cp ../source/csprogs.dat .
1719 verbose cp ../source/menu.dat .
1720 verbose rm -rf qcsrc
1721 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1722 major=$(($gv / 10000))
1723 minor=$(($gv / 100 - $major * 100))
1724 patch=$(($gv - $major * 10000 - $minor * 100))
1725 versionstr="$major.$minor.$patch"
1726 case "$RELEASETYPE" in
1728 versionstr="$versionstr""beta"
1732 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1733 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1734 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1735 " defaultXonotic.cfg
1737 verbose cd gfx/menu/luminos
1738 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1739 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1740 verbose rm background_l2.svg
1743 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1744 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1745 if [ -f "$X" ]; then
1747 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1751 verbose export git_src_repo="$d0/$src" # skip hash-object
1752 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1753 verbose mkzip "../../$dst" *
1755 verbose rm -rf Xonotic/temp
1758 stamp=`cat Xonotic/stamp.txt`
1764 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1770 while [ "$#" -gt 1 ]; do
1771 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1777 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1778 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1779 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1780 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1781 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1783 release-pack-needsx11)
1786 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1789 verbose "$SELF" release-pack
1794 stamp=`cat Xonotic/stamp.txt`
1795 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1796 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1797 # let's pass crypto import laws of some nasty countries
1798 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1799 if [ -n "$crypto_libs" ]; then
1800 verbose mkzip Xonotic-$stamp-crypto.zip \
1804 # build the archives
1805 verbose mkzip Xonotic-$stamp-engine.zip \
1807 Xonotic/bin64/*.dll \
1810 Xonotic/xonotic.exe \
1811 Xonotic/source/darkplaces/
1812 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1813 verbose mkzip Xonotic-$stamp-common.zip \
1814 Xonotic/source/fteqcc/ \
1815 Xonotic/source/qcsrc/ \
1820 Xonotic/key_0.d0pk \
1821 Xonotic/data/font-nimbussansl-$stamp.pk3
1822 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1823 verbose mkzip0 Xonotic-$stamp.zip \
1824 Xonotic/data/xonotic-$stamp-data.pk3 \
1825 Xonotic/data/xonotic-$stamp-maps.pk3 \
1826 Xonotic/data/xonotic-$stamp-music.pk3 \
1827 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1828 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1829 verbose mkzip0 Xonotic-$stamp-low.zip \
1830 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1831 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1832 Xonotic/data/xonotic-$stamp-music-low.pk3
1833 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1834 # verbose mkzip0 Xonotic-$stamp-high.zip \
1835 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1836 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1837 # Xonotic/data/xonotic-$stamp-music.pk3 \
1838 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1839 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1840 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1841 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1842 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1843 Xonotic/data/xonotic-$stamp-music-low.pk3
1846 verbose "$SELF" release-prepare
1847 verbose "$SELF" release-maps
1848 verbose "$SELF" release-engine
1849 verbose "$SELF" release-qc
1850 verbose "$SELF" release-pack-needsx11
1851 verbose "$SELF" release-zip
1856 $ECHO " $SELF admin-merge [<branch>]"
1857 $ECHO " $SELF branch <branch>"
1858 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1859 $ECHO " $SELF branches"
1860 $ECHO " $SELF checkout|switch <branch>"
1861 $ECHO " $SELF checkout|switch <remote>/<branch>"
1862 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1863 $ECHO " $SELF clean --reclone"
1864 $ECHO " $SELF compile [-c] [-r] [-0]"
1865 $ECHO " $SELF each|foreach [-k] command..."
1866 $ECHO " $SELF fix_upstream_rebase"
1867 $ECHO " $SELF keygen"
1868 $ECHO " $SELF merge"
1869 $ECHO " $SELF push|commit [-s]"
1870 $ECHO " $SELF release"
1871 $ECHO " $SELF restore-patches"
1872 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1873 $ECHO " $SELF save-patches"
1874 $ECHO " $SELF update-maps"
1875 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"