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 t=$(($t$op)) # fudge factor
398 msg "$m -> $t ticks ($op)"
399 if [ -z "$bestt" ] || [ "$t" -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 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
544 if location=`bestmirror $newbase"xonotic.git" de us nl:'*3/2'`; then # 50% malus to the NL server to not overload it too much
562 *://*.git.xonotic.org/*)
563 location=${base%%.git.xonotic.org/*}
564 location=${location##*://}
572 if [ -n "$location" ]; then
573 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
574 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
576 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
577 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
581 pushurl=`repopushurl .`
582 fix_git_config "$url" "$pushurl"
584 if $allow_pull || $fix_config; then
589 pushurl=`repopushurl "$d"`
590 branch=`repobranch "$d"`
591 if [ -d "$d0/$d" ]; then
593 enter "$d0/$d" verbose
594 r=`git symbolic-ref HEAD`
596 if git config branch.$r.remote >/dev/null 2>&1; then
597 if ! verbose git pull; then
598 fix_upstream_rebase_mergefail || true
599 check_mergeconflict "$d"
600 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
603 fix_upstream_rebase_mergeok || true
608 checkself "$cmd" "$@"
610 verbose git remote prune origin
614 verbose git clone "$url" "$d0/$d"
615 enter "$d0/$d" verbose
616 fix_git_config "$url" "$pushurl"
617 if [ "$branch" != "master" ]; then
618 verbose git checkout --track -b "$branch" origin/"$branch"
625 misc/tools/xonotic-map-compiler-autobuild download
629 if [ x"$1" = x"-f" ]; then
635 if [ -z "$branch" ]; then
638 branch=${remote#origin/}
649 enter "$d0/$d" verbose
651 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
653 verbose git checkout $checkoutflags "$b"
654 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
656 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
659 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
661 verbose git checkout $checkoutflags "$b"
662 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
664 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
666 $ECHO "WTF? Not even branch $b doesn't exist in $d"
671 checkself "$cmd" "$@"
675 $ECHO "The requested branch was not found in any repository."
683 if [ -z "$branch" ]; then
687 if [ -z "$branch" ]; then
690 r=`git symbolic-ref HEAD`
697 dv=`visible_repo_name "$d"`
698 enter "$d0/$d" verbose
699 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
700 $ECHO "Already having this branch in $dv."
702 if yesno "Branch in $dv?"; then
703 if [ -n "$srcbranch" ]; then
706 b=origin/"`repobranch "$d"`"
707 verbose git fetch origin || true
709 # TODO do this without pushing
710 verbose git checkout -b "$branch" "$b"
711 verbose git config "branch.$branch.remote" "$remote"
712 verbose git config "branch.$branch.merge" "refs/heads/$branch"
722 cd "$d0/$d" # am in a pipe, shouldn't use enter
723 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
728 while read -r d BRANCH REV TEXT; do
729 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
732 if [ x"$REV" = x"->" ]; then
735 BRANCH=${BRANCH#remotes/}
736 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
737 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
738 eval "r=\$branches_repos_$ID"
740 eval "branches_repos_$ID=\$r"
742 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
743 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
744 eval "r=\$branches_repos_$ID"
745 printf "%-60s %s\n" "$BRANCH" "$r"
752 dv=`visible_repo_name "$d"`
753 enter "$d0/$d" verbose
754 r=`git symbolic-ref HEAD`
756 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
757 # we have uncommitted changes
758 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
759 if ! verbose git merge origin/"`repobranch "$d"`"; then
760 check_mergeconflict "$d"
761 exit 1 # this should ALWAYS be fatal
771 dv=`visible_repo_name "$d"`
772 enter "$d0/$d" verbose
773 r=`git symbolic-ref HEAD`
775 diffdata=`git diff --color HEAD`
776 if [ -n "$diffdata" ]; then
777 # we have uncommitted changes
778 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
779 verbose git commit -a
782 rem=`git config "branch.$r.remote" || $ECHO origin`
783 bra=`git config "branch.$r.merge" || $ECHO "$r"`
784 upstream="$rem/${bra#refs/heads/}"
785 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
786 upstream="origin/`repobranch "$d"`"
788 logdata=`git log --color "$upstream".."$r"`
789 if [ -n "$logdata" ]; then
790 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
791 verbose git push "$rem" HEAD
794 if [ x"$submit" = x"-s" ]; then
797 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
811 snowleopardhack=false
812 if [ -z "$CC" ]; then
813 export CC="gcc -DSUPPORTIPV6"
831 case "`$CC -dumpversion`" in
832 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
834 # -march=native is broken < 4.3
835 export CC="$CC -mtune=native -march=native"
838 if [ -n "$WE_HATE_OUR_USERS" ]; then
839 export CC="$CC -fno-common"
848 if [ -n "$WE_HATE_OUR_USERS" ]; then
849 TARGETS="sv-$debug cl-$debug"
850 elif [ x"`uname`" = x"Darwin" ]; then
853 TARGETS="sv-$debug cl-$debug sdl-$debug"
856 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
858 TARGETS="sv-$debug sdl-$debug"
861 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"
863 TARGETS="sv-$debug cl-$debug sdl-$debug"
865 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
866 # if we give the command make the arg "", it will surely fail (invalid filename),
867 # so better handle it as an empty client option
870 elif [ -n "$1" ]; then
872 TARGETS_SAVE=$TARGETS
877 TARGETS="$TARGETS sdl-debug"
880 TARGETS="$TARGETS cl-debug"
881 if $snowleopardhack; then
882 export CC="$CC -arch i386"
886 TARGETS="$TARGETS cl-debug"
889 TARGETS="$TARGETS sv-debug"
892 BAD_TARGETS="$BAD_TARGETS $X"
896 if [ -n "$TARGETS" ]; then # at least a valid client
898 else # no valid client, let's assume this option is not meant to be a client then
899 TARGETS=$TARGETS_SAVE
903 if [ -z "$MAKEFLAGS" ]; then
904 if [ -f /proc/cpuinfo ]; then
905 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
906 if [ $ncpus -gt 1 ]; then
910 if [ -n "$WE_HATE_OUR_USERS" ]; then
911 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
915 enter "$d0/d0_blind_id" verbose
916 if ! $compiled0; then
917 # compilation of crypto library failed
918 # use binaries then, if we can...
920 if [ -n "$WE_HATE_OUR_USERS" ]; then
921 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
922 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
923 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
929 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
930 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
931 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
932 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
935 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
936 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
937 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
938 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
946 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
947 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
957 if [ -f Makefile ]; then
958 verbose make $MAKEFLAGS distclean
961 if ! [ -f Makefile ]; then
962 verbose sh autogen.sh
965 verbose make $MAKEFLAGS
968 enter "$d0/fteqcc" verbose
970 verbose make $MAKEFLAGS clean
972 verbose make $MAKEFLAGS
974 enter "$d0/data/xonotic-data.pk3dir" verbose
976 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
978 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
979 # 4 levels up: data, xonotic-data, qcsrc, server
981 enter "$d0/darkplaces" verbose
982 if [ x"$BAD_TARGETS" = x" " ]; then
983 $ECHO "Warning: invalid empty client, default clients will be used."
986 verbose make $MAKEFLAGS clean
988 for T in $TARGETS; do
989 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
991 for T in $BAD_TARGETS; do
992 $ECHO "Warning: discarded invalid client $T."
995 verbose "$SELF" update-maps
998 if [ -n "$WE_HATE_OUR_USERS" ]; then
1000 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1001 elif [ x"`uname`" = x"Darwin" ]; then
1002 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1003 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
1006 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1010 sdl|glx|agl|dedicated)
1019 if ! [ -x "darkplaces/darkplaces$client" ]; then
1020 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1023 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1027 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1029 # if pulseaudio is running: USE IT
1030 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1031 if ps -C pulseaudio >/dev/null; then
1032 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1033 export SDL_AUDIODRIVER=pulse
1040 if [ x"$USE_GDB" = x"yes" ]; then
1041 set -- gdb --args "$@"
1042 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1043 set -- gdb --batch -x savecore.gdb --args "$@"
1044 elif which catchsegv >/dev/null 2>&1; then
1045 set -- catchsegv "$@"
1049 if [ -f xonotic.core ]; then
1050 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1051 gdb "$binary" xonotic.core
1052 #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
1053 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1055 # rm -f xonotic.core.tar.gz
1057 $ECHO "The core dump can be examined later by"
1058 $ECHO " gdb $binary xonotic.core"
1065 if [ x"$1" = x"-k" ]; then
1070 if verbose cd "$d0/$d"; then
1071 if $keep_going; then
1072 verbose "$@" || true
1082 patchdir=`mktemp -d -t save-patches.XXXXXX`
1084 enter "$d0/$d" verbose
1085 git branch -v -v | cut -c 3- | {
1087 while read -r BRANCH REV UPSTREAM TEXT; do
1090 UPSTREAM=${UPSTREAM#\[}
1091 UPSTREAM=${UPSTREAM%\]}
1092 UPSTREAM=${UPSTREAM%:*}
1096 UPSTREAM=origin/"`repobranch "$d"`"
1100 if [ x"$REV" = x"->" ]; then
1103 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1104 $ECHO "$d" > "$patchdir/$i/info.txt"
1105 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1106 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1107 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1110 rm -rf "$patchdir/$i"
1115 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1120 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1121 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1123 for P in "$patchdir"/*/info.txt; do
1128 read -r UPSTREAM <&3
1130 verbose git checkout HEAD^0
1131 verbose git branch -D "$BRANCH"
1132 if [ x"$TRACK" = x"true" ]; then
1133 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1135 verbose git branch -b "$BRANCH" "$UPSTREAM"
1147 report=$report"$*$LF"
1152 report=$report" $*$LF"
1157 o=`"$@" | sed 's/^/ /' || true`
1163 # sorry, fteqcc repo is managed manually
1167 enter "$d0/$d" verbose
1168 base="`repobranch "$d"`"
1170 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1171 case "${ref#refs/remotes/origin/}" in
1184 if [ -n "$branch" ]; then
1185 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1194 l0=`git rev-list "$base".."$ref" | wc -l`
1195 l1=`git rev-list master.."$ref" | wc -l`
1196 if [ $l0 -gt $l1 ]; then
1203 reportecho " Branch $ref:"
1204 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1205 logdata=`git log --color "$realbase".."$ref"`
1206 if [ -z "$logdata" ]; then
1207 reportecho4 "--> not merging, no changes vs master"
1208 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1209 git push origin :"${ref#refs/remotes/origin/}"
1210 reportecho4 "--> branch deleted"
1213 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1214 if [ -z "$diffdata" ]; then
1215 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1216 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1217 git push origin :"${ref#refs/remotes/origin/}"
1218 reportecho4 "--> branch deleted"
1220 elif [ -z "$branch" ] && [ -n "$note" ]; then
1221 reportdo4 $ECHO "$note"
1222 reportecho4 "--> not merging, already had this one rejected before"
1223 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1224 git checkout "$realbase"
1225 org=`git rev-parse HEAD`
1226 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1227 git reset --hard "$org"
1228 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1230 reportecho4 "--> merge failed"
1231 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1232 git reset --hard "$org"
1233 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1235 reportecho4 "--> compile failed"
1236 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1237 git reset --hard "$org"
1238 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1239 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1240 if [ x"$note" = x"del" ]; then
1241 git push origin :"${ref#refs/remotes/origin/}"
1242 reportecho4 "--> test failed, branch deleted"
1243 elif [ -n "$note" ]; then
1244 reportdo4 $ECHO "$note"
1245 reportecho4 "--> test failed"
1247 reportecho4 "--> test failed, postponed"
1250 # apply crlf, or other cleanup filters (non-behavioural changes)
1252 find . -type f -exec touch {} \;
1253 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1256 case ",`repoflags "$d"`," in
1258 # we do quite a mess here... luckily we know $org
1259 git fetch # svn needs to be current
1260 git rebase -i --onto origin/master "$org"
1261 git svn dcommit --add-author-from
1262 git reset --hard "$org"
1265 git push origin HEAD
1268 reportecho4 "--> MERGED"
1269 if yesno "Delete original branch \"$ref\"?"; then
1270 git push origin :"${ref#refs/remotes/origin/}"
1271 reportecho4 "--> branch deleted"
1275 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1276 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1277 if [ x"$note" = x"del" ]; then
1278 git push origin :"${ref#refs/remotes/origin/}"
1279 reportecho4 "--> branch deleted"
1280 elif [ -n "$note" ]; then
1281 reportdo4 $ECHO "$note"
1282 reportecho4 "--> rejected"
1284 reportecho4 "--> postponed"
1293 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1305 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1306 # ./all clean --reclone
1309 if [ x"$X" = x"--reclone" ]; then
1316 elif [ x"$X" = x"-f" ]; then
1318 elif [ x"$X" = x"-u" ]; then
1320 elif [ x"$X" = x"-U" ]; then
1323 elif [ x"$X" = x"-fu" ]; then
1326 elif [ x"$X" = x"-fU" ]; then
1330 elif [ x"$X" = x"-m" ]; then
1332 elif [ x"$X" = x"-r" ]; then
1334 elif [ x"$X" = x"-D" ]; then
1336 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1339 msg " ,--'-\\P/\`\\ FFFFFFF"
1340 msg " __/_ B/,-.\\ FFFFFFF"
1341 msg " / _\\ (// O\\\\ FFFFFF"
1342 msg "| (O \`) _\\._ _)\\ FFFUU"
1343 msg "| |___/.^d0~~\"\\ \\ UUUU"
1344 msg "| |\`~' \\ | UUUU"
1345 msg "| | __,C>|| UUUU"
1346 msg "\\ /_ ,-/,-' | UUUU"
1347 msg " \\\\_ \\_>~' / UUUU-"
1350 msg "Unknown arg: $X"
1360 if $gotoupstream; then
1362 msg "Must also use -f (delete local changes) when using -u"
1365 if $gotomaster; then
1366 if $fetchupstream; then
1367 verbose git fetch origin
1368 verbose git remote prune origin
1370 verbose git checkout -f "`repobranch "$d"`"
1371 verbose git reset --hard origin/"`repobranch "$d"`"
1373 r=`git symbolic-ref HEAD`
1375 rem=`git config "branch.$r.remote" || $ECHO origin`
1376 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1377 upstream="$rem/${bra#refs/heads/}"
1378 if $fetchupstream; then
1379 verbose git fetch "$rem"
1380 verbose git remote prune "$rem"
1382 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1383 upstream="origin/`repobranch "$d"`"
1385 verbose git reset --hard "$upstream"
1387 elif $gotomaster; then
1389 verbose git checkout -f "`repobranch "$d"`"
1390 verbose git reset --hard
1392 verbose git checkout "`repobranch "$d"`"
1395 verbose git reset --hard
1397 if $rmuntracked; then
1400 verbose git clean -df || true
1403 verbose git clean -xdf || true
1407 if $killbranches; then
1408 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1409 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1410 verbose git branch -D "${B#refs/heads/}"
1413 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1414 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1416 checkself "$cmd" "$@"
1420 # release building goes here
1422 #"$SELF" each git clean -fxd
1423 case "$RELEASETYPE" in
1425 msg "Building a BETA"
1428 msg "Building a RELEASE"
1431 $ECHO >&2 -n "$ESC[2J$ESC[H"
1438 msg " +---------------------------------------------------------.---+"
1440 msg " +---------------------------------------------------------^---+"
1442 msg " | / \ This is the official release build system. |"
1443 msg " | | | If you are not a member of the Xonotic Core Team, |"
1444 msg " | | STOP | you are not supposed to use this script and should |"
1445 msg " | | | instead use ./all compile to compile the engine |"
1446 msg " | \____/ and game code. |"
1448 msg " | [ I understand ] |"
1449 msg " +-------------------------------------------------------------+"
1451 # A LOT of build infrastructure is required:
1454 # - .ssh/config must be configured so the following
1455 # host names are reachable and have a compile
1456 # infrastructure set up:
1457 # - xonotic-build-linux32 (with gcc on x86)
1458 # - xonotic-build-linux64 (with gcc on x86_64)
1459 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1460 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1461 # and x86_64-w64-mingw32-g++)
1462 # - xonotic-build-osx (with Xcode and SDL.framework)
1463 # - AMD Compressonator installed in WINE
1464 # - ResEdit installed in WINE
1465 # - a lot of other requirements you will figure out
1466 # while reading the error messages
1467 # - environment variable RELEASETYPE set
1468 # - optionally, environment variable RELEASEDATE set
1473 verbose rm -rf Xonotic Xonotic*.zip
1474 verbose mkdir -p Xonotic
1475 if [ -n "$RELEASEDATE" ]; then
1476 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1478 verbose date +%Y%m%d > Xonotic/stamp.txt
1480 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1482 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1484 verbose rm -rf misc/builddeps
1485 verbose mv misc/buildfiles/win32/* . || true
1486 verbose mv misc/buildfiles/win64 bin64 || true
1487 verbose mv misc/buildfiles/osx/* . || true
1488 verbose rm -rf misc/buildfiles
1489 verbose rm -rf misc/pki
1492 verbose cd darkplaces
1493 verbose git archive --format=tar HEAD
1495 verbose cd Xonotic/source/darkplaces
1500 verbose git archive --format=tar HEAD
1502 verbose cd Xonotic/source/fteqcc
1506 verbose cd data/xonotic-data.pk3dir
1507 verbose git archive --format=tar HEAD -- qcsrc Makefile
1509 verbose cd Xonotic/source
1512 rm -f Xonotic/key_15.d0pk
1514 release-compile-run)
1523 if [ -n "$targetfiles" ]; then
1524 case " $HOSTS_THAT_ARE_DISABLED " in
1529 case " $HOSTS_THAT_ARE_MYSELF " in
1531 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1532 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1533 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1534 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1535 for f in $targetfiles; do
1536 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1540 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1541 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1542 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1543 for f in $targetfiles; do
1544 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1548 # now rebrand the binaries...
1549 for f in $targetfiles; do
1550 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1553 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1555 d=`mktemp -d -t rebrand.XXXXXX`
1557 $ECHO "-mygames" > darkplaces.opt
1558 zip -9r darkplaces.zip darkplaces.opt
1571 fteqcc_maketargets=$3
1573 darkplaces_maketargets=$5
1575 host=xonotic-build-$suffix
1576 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1577 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1579 release-engine-win32)
1580 verbose "$SELF" release-compile win32 \
1581 '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' \
1582 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1584 verbose "$SELF" release-compile win32 \
1585 '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' \
1587 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1589 release-engine-win64)
1590 verbose "$SELF" release-compile win64 \
1591 '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' \
1592 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1593 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1594 verbose "$SELF" release-compile win64 \
1595 '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' \
1597 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1600 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1601 verbose "$SELF" release-compile osx \
1602 '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"' \
1603 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1604 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1605 verbose "$SELF" release-compile osx \
1606 '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"' \
1608 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1610 release-engine-linux32)
1611 verbose "$SELF" release-compile linux32 \
1612 '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' \
1613 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1614 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1616 release-engine-linux64)
1617 verbose "$SELF" release-compile linux64 \
1618 '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' \
1619 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1620 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1623 verbose "$SELF" release-engine-linux32 &
1624 verbose "$SELF" release-engine-linux64 &
1625 verbose "$SELF" release-engine-win32 &
1626 verbose "$SELF" release-engine-win64 &
1627 verbose "$SELF" release-engine-osx &
1636 verbose "$SELF" update-maps
1639 case "$RELEASETYPE" in
1641 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1642 # back out of: source/qcsrc/server
1645 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1648 verbose rm -f Xonotic/source/*/fteqcc.log
1650 release-buildpk3-transform-raw)
1653 release-buildpk3-transform-normal)
1656 # texture: convert to jpeg and dds
1657 verbose export do_jpeg=true
1658 verbose export jpeg_qual_rgb=95
1659 verbose export jpeg_qual_a=99
1660 verbose export do_dds=true
1661 verbose export dds_flags=
1662 verbose export do_ogg=false
1663 verbose export del_src=true
1664 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1666 release-buildpk3-transform-low)
1669 # texture: convert to jpeg and dds
1670 # music: reduce bitrate
1671 verbose export do_jpeg=true
1672 verbose export jpeg_qual_rgb=80
1673 verbose export jpeg_qual_a=97
1674 verbose export do_dds=false
1675 verbose export do_ogg=true
1676 verbose export ogg_qual=1
1677 verbose export del_src=true
1678 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1680 release-buildpk3-transform-lowdds)
1683 # texture: convert to jpeg and dds
1684 # music: reduce bitrate
1685 verbose export do_jpeg=false
1686 verbose export do_jpeg_if_not_dds=true
1687 verbose export jpeg_qual_rgb=80
1688 verbose export jpeg_qual_a=99
1689 verbose export do_dds=true
1690 verbose export dds_flags=
1691 verbose export do_ogg=true
1692 verbose export ogg_qual=1
1693 verbose export del_src=true
1694 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1707 verbose rm -rf Xonotic/temp
1708 verbose mkdir -p Xonotic/temp
1711 verbose git archive --format=tar HEAD
1713 verbose cd Xonotic/temp
1716 verbose cd Xonotic/temp
1717 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1718 verbose cp ../source/progs.dat .
1719 verbose cp ../source/csprogs.dat .
1720 verbose cp ../source/menu.dat .
1721 verbose rm -rf qcsrc
1722 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1723 major=$(($gv / 10000))
1724 minor=$(($gv / 100 - $major * 100))
1725 patch=$(($gv - $major * 10000 - $minor * 100))
1726 versionstr="$major.$minor.$patch"
1727 case "$RELEASETYPE" in
1729 versionstr="$versionstr""beta"
1733 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1734 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1735 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1736 " defaultXonotic.cfg
1738 verbose cd gfx/menu/luminos
1739 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1740 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1741 verbose rm background_l2.svg
1744 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1745 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1746 if [ -f "$X" ]; then
1748 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1752 verbose export git_src_repo="$d0/$src" # skip hash-object
1753 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1754 verbose mkzip "../../$dst" *
1756 verbose rm -rf Xonotic/temp
1759 stamp=`cat Xonotic/stamp.txt`
1765 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1771 while [ "$#" -gt 1 ]; do
1772 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1778 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1779 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1780 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1781 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1782 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1784 release-pack-needsx11)
1787 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1790 verbose "$SELF" release-pack
1795 stamp=`cat Xonotic/stamp.txt`
1796 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1797 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1798 # let's pass crypto import laws of some nasty countries
1799 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1800 if [ -n "$crypto_libs" ]; then
1801 verbose mkzip Xonotic-$stamp-crypto.zip \
1805 # build the archives
1806 verbose mkzip Xonotic-$stamp-engine.zip \
1808 Xonotic/bin64/*.dll \
1811 Xonotic/xonotic.exe \
1812 Xonotic/source/darkplaces/
1813 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1814 verbose mkzip Xonotic-$stamp-common.zip \
1815 Xonotic/source/fteqcc/ \
1816 Xonotic/source/qcsrc/ \
1821 Xonotic/key_0.d0pk \
1822 Xonotic/data/font-nimbussansl-$stamp.pk3
1823 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1824 verbose mkzip0 Xonotic-$stamp.zip \
1825 Xonotic/data/xonotic-$stamp-data.pk3 \
1826 Xonotic/data/xonotic-$stamp-maps.pk3 \
1827 Xonotic/data/xonotic-$stamp-music.pk3 \
1828 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1829 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1830 verbose mkzip0 Xonotic-$stamp-low.zip \
1831 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1832 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1833 Xonotic/data/xonotic-$stamp-music-low.pk3
1834 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1835 # verbose mkzip0 Xonotic-$stamp-high.zip \
1836 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1837 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1838 # Xonotic/data/xonotic-$stamp-music.pk3 \
1839 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1840 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1841 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1842 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1843 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1844 Xonotic/data/xonotic-$stamp-music-low.pk3
1847 verbose "$SELF" release-prepare
1848 verbose "$SELF" release-maps
1849 verbose "$SELF" release-engine
1850 verbose "$SELF" release-qc
1851 verbose "$SELF" release-pack-needsx11
1852 verbose "$SELF" release-zip
1857 $ECHO " $SELF admin-merge [<branch>]"
1858 $ECHO " $SELF branch <branch>"
1859 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1860 $ECHO " $SELF branches"
1861 $ECHO " $SELF checkout|switch <branch>"
1862 $ECHO " $SELF checkout|switch <remote>/<branch>"
1863 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1864 $ECHO " $SELF clean --reclone"
1865 $ECHO " $SELF compile [-c] [-r] [-0]"
1866 $ECHO " $SELF each|foreach [-k] command..."
1867 $ECHO " $SELF fix_upstream_rebase"
1868 $ECHO " $SELF keygen"
1869 $ECHO " $SELF merge"
1870 $ECHO " $SELF push|commit [-s]"
1871 $ECHO " $SELF release"
1872 $ECHO " $SELF restore-patches"
1873 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1874 $ECHO " $SELF save-patches"
1875 $ECHO " $SELF update-maps"
1876 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"