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
111 if ! IFS= read -r yesno; then
122 check_mergeconflict "$1"
127 data/xonotic-data.pk3dir | | master |
128 data/xonotic-music.pk3dir | | master |
129 data/xonotic-nexcompat.pk3dir | | master | no
130 darkplaces | | div0-stable | svn
131 netradiant | | master |
132 div0-gittools | | master | no
133 d0_blind_id | | master |
134 data/xonotic-maps.pk3dir | | master |
135 mediasource | | master | no
136 fteqcc | | xonotic-stable | noautocrlf
138 # todo: in darkplaces, change repobranch to div0-stable
140 repos=`$ECHO "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
142 base=`git config remote.origin.url`
145 base=${base%xonotic.git}
148 $ECHO "The main repo is not xonotic.git, what have you done?"
152 pushbase=`git config remote.origin.pushurl || true`
155 pushbase=${pushbase%xonotic.git}
160 $ECHO "The main repo is not xonotic.git, what have you done?"
167 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
168 if [ -n "$repo_t" ]; then
178 if [ x"$1" = x"." ]; then
179 $ECHO "$base""xonotic.git"
181 $ECHO "$base${1##*/}.git"
188 [ -n "$pushbase" ] || return 0
189 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
190 if [ -n "$repo_t" ]; then
195 $ECHO "$pushbase$repo_t"
199 if [ x"$1" = x"." ]; then
200 $ECHO "$pushbase""xonotic.git"
202 $ECHO "$pushbase${1##*/}.git"
209 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
210 if [ -n "$repo_t" ]; then
219 $ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
227 # if we have the dir, always keep it
229 msg "Repository $d enabled because it already exists"
233 # if .yes file exists, always keep it
234 if [ -f "$d.yes" ]; then
235 msg "Repository $d enabled by a .yes file"
239 # if we have .no file, skip
240 if [ -f "$d.no" ]; then
241 msg "Repository $d disabled by a .no file, delete $d.no to enable"
244 # if we have matching pk3, skip
245 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
246 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
249 # if "no" flag is set, skip
252 msg "Repository $d disabled by default, create $d.yes to enable"
257 msg "Repository $d enabled by default"
264 if [ "$#" = 0 ]; then
276 fix_upstream_rebase()
278 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
282 # one of the two sides of the merge should be remote upstream, or all is fine
283 r_r=`git symbolic-ref HEAD`
284 r_r=${r_r#refs/heads/}
285 r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
286 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
287 r_bra=${r_bra#refs/heads/}
288 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
289 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
294 r_base=`git merge-base "$r_me" "$r_other"`
296 # no merge-base? upstream did filter-branch
297 if [ -n "$r_base" ]; then
298 # otherwise, check if the two histories are "similar"
299 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
300 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
302 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
303 r_lc_me=`$ECHO "$r_l_me" | wc -l`
304 r_lc_other=`$ECHO "$r_l_other" | wc -l`
305 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
306 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
308 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
309 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
310 git reset --hard "$r_me"
320 fix_upstream_rebase_mergeok()
322 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
323 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
327 fix_upstream_rebase_mergefail()
329 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
330 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
336 verbose git config remote.origin.url "$1"
338 verbose git config remote.origin.pushurl "$2"
340 verbose git config --unset remote.origin.pushurl || true
342 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
343 case ",`repoflags "$d"`," in
345 verbose git config --unset core.autocrlf || true
348 verbose git config core.autocrlf input
351 if [ -z "`git config push.default || true`" ]; then
352 verbose git config push.default current # or is tracking better?
354 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
355 verbose git config filter.mapclean.smudge "cat"
363 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
364 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
365 zip -9y -@<"$ziplist" "$archive" || true
376 # first result is to be ignored, but we use it to check status
377 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
378 { 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*,,'
379 # unit: clock ticks (depends on what "time" returns
387 if ! { time -p true; } >/dev/null 2>&1; then
388 msg "Cannot do timing in this shell"
406 if t=`mirrorspeed "$m"`; then
408 tt=$(($t$op)) # fudge factor
409 msg "$m -> $t$op = $tt ticks"
410 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
421 if [ -n "$bestin" ]; then
422 msg "Best mirror seems to be $pre$bestin$suf"
432 enter "$d0/$d" verbose
433 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
439 pushurl=`repopushurl "$d"`
440 branch=`repobranch "$d"`
441 if [ -d "$d0/$d" ]; then
443 fix_git_config "$url" "$pushurl"
449 # enable the ssh URL for pushing
452 if [ -f ~/.ssh/id_rsa.pub ]; then
454 msg "A key already exists and no new one will be generated. If you"
455 msg "already have done the procedure for getting your key approved, you"
456 msg "can skip the following paragraph and already use the repository."
458 msg "To get access, your key has to be approved first. For that, visit"
459 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
460 msg "the \"Support\" tracker in the \"Repository\" category where you"
461 msg "apply for access and paste the following output into the issue:"
463 msg "`cat ~/.ssh/id_rsa.pub`"
465 msg "Note that you will only have write access to branches that start"
466 msg "with your user name."
467 elif [ -f ~/.ssh/id_dsa.pub ]; then
469 msg "A key already exists and no new one will be generated. If you"
470 msg "already have done the procedure for getting your key approved, you"
471 msg "can skip the following paragraph and already use the repository."
473 msg "To get access, your key has to be approved first. For that, visit"
474 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
475 msg "the \"Support\" tracker in the \"Repository\" category where you"
476 msg "apply for access and paste the following output into the issue:"
478 msg "`cat ~/.ssh/id_dsa.pub`"
480 msg "Note that you will only have write access to branches that start"
481 msg "with your user name."
484 msg "No key has been generated yet. One will be generated now."
485 msg "If other people are using your computer, it is recommended"
486 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
487 msg "when asked for a passphrase."
489 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
491 msg "To get access, your key has to be approved first. For that, visit"
492 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
493 msg "the \"Support\" tracker in the \"Repository\" category where you"
494 msg "apply for access and paste the following output into the issue:"
496 msg "`cat ~/.ssh/id_rsa.pub`"
498 msg "Note that you will only have write access to branches that start"
499 msg "with your user name."
507 if [ x"$1" = x"-N" ]; then
509 elif [ x"$1" = x"-p" ]; then
511 pushbase=ssh://xonotic@git.xonotic.org/
512 elif [ x"$1" = x"-ps" ]; then
514 pushbase=ssh://xonotic@git.xonotic.org/
515 elif [ x"$1" = x"-ph" ]; then
517 pushbase=http://git.xonotic.org/login/xonotic/
518 elif [ x"$1" = x"-s" ]; then
520 base=ssh://xonotic@git.xonotic.org/
521 elif [ x"$1" = x"-g" ]; then
523 base=git://git.xonotic.org/xonotic/
524 elif [ x"$1" = x"-h" ]; then
526 base=http://git.xonotic.org/xonotic/
527 elif [ x"$1" = x"-l" ]; then
535 msg "Invalid location!"
536 msg "Possible locations for the -l option:"
537 msg " nl (Netherlands, run by merlijn)"
538 msg " de (Germany, run by divVerent)"
539 msg " us (United States of America, run by detrate)"
540 msg " best (find automatically)"
541 msg " default (currently nl)"
555 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
562 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
566 base=git://git.xonotic.org/xonotic/
569 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
572 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
573 git config xonotic.all.mirrorselection done
590 *://*.git.xonotic.org/*)
591 location=${base%%.git.xonotic.org/*}
592 location=${location##*://}
600 if [ -n "$location" ]; then
601 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
602 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
604 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
605 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
609 pushurl=`repopushurl .`
610 fix_git_config "$url" "$pushurl"
612 if $allow_pull || $fix_config; then
617 pushurl=`repopushurl "$d"`
618 branch=`repobranch "$d"`
619 if [ -d "$d0/$d" ]; then
620 # if we have .no file, skip
621 if [ -f "$d0/$d.no" ]; then
622 msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
626 enter "$d0/$d" verbose
627 r=`git symbolic-ref HEAD`
629 if git config branch.$r.remote >/dev/null 2>&1; then
630 if ! verbose git pull; then
631 fix_upstream_rebase_mergefail || true
632 check_mergeconflict "$d"
633 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
636 fix_upstream_rebase_mergeok || true
641 checkself "$cmd" "$@"
643 verbose git remote prune origin
647 verbose git clone "$url" "$d0/$d"
648 enter "$d0/$d" verbose
649 fix_git_config "$url" "$pushurl"
650 if [ "$branch" != "master" ]; then
651 verbose git checkout --track -b "$branch" origin/"$branch"
658 misc/tools/xonotic-map-compiler-autobuild download
662 if [ x"$1" = x"-f" ]; then
668 if [ -z "$branch" ]; then
671 branch=${remote#origin/}
680 if [ -n "$checkoutflags" ]; then
681 set -- -f "$@" # to make checkself work again
685 enter "$d0/$d" verbose
687 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
689 verbose git checkout $checkoutflags "$b"
690 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
692 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
695 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
697 verbose git checkout $checkoutflags "$b"
698 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
700 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
702 $ECHO "WTF? Not even branch $b doesn't exist in $d"
707 checkself "$cmd" "$@"
711 $ECHO "The requested branch was not found in any repository."
719 if [ -z "$branch" ]; then
723 if [ -z "$branch" ]; then
726 r=`git symbolic-ref HEAD`
733 dv=`visible_repo_name "$d"`
734 enter "$d0/$d" verbose
735 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
736 $ECHO "Already having this branch in $dv."
738 if yesno "Branch in $dv?"; then
739 if [ -n "$srcbranch" ]; then
742 b=origin/"`repobranch "$d"`"
743 verbose git fetch origin || true
745 # TODO do this without pushing
746 verbose git checkout -b "$branch" "$b"
747 verbose git config "branch.$branch.remote" "$remote"
748 verbose git config "branch.$branch.merge" "refs/heads/$branch"
758 cd "$d0/$d" # am in a pipe, shouldn't use enter
759 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
764 while read -r d BRANCH REV TEXT; do
765 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
768 if [ x"$REV" = x"->" ]; then
771 BRANCH=${BRANCH#remotes/}
772 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
773 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
774 eval "r=\$branches_repos_$ID"
776 eval "branches_repos_$ID=\$r"
778 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
779 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
780 eval "r=\$branches_repos_$ID"
781 printf "%-60s %s\n" "$BRANCH" "$r"
788 dv=`visible_repo_name "$d"`
789 enter "$d0/$d" verbose
790 r=`git symbolic-ref HEAD`
792 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
793 # we have uncommitted changes
794 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
795 if ! verbose git merge origin/"`repobranch "$d"`"; then
796 check_mergeconflict "$d"
797 exit 1 # this should ALWAYS be fatal
807 dv=`visible_repo_name "$d"`
808 enter "$d0/$d" verbose
809 r=`git symbolic-ref HEAD`
811 diffdata=`git diff --color HEAD`
812 if [ -n "$diffdata" ]; then
813 # we have uncommitted changes
814 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
815 verbose git commit -a
818 rem=`git config "branch.$r.remote" || $ECHO origin`
819 bra=`git config "branch.$r.merge" || $ECHO "$r"`
820 upstream="$rem/${bra#refs/heads/}"
821 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
822 upstream="origin/`repobranch "$d"`"
824 logdata=`git log --color "$upstream".."$r"`
825 if [ -n "$logdata" ]; then
826 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
827 verbose git push "$rem" HEAD
830 if [ x"$submit" = x"-s" ]; then
833 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
847 snowleopardhack=false
848 if [ -z "$CC" ]; then
849 export CC="gcc -DSUPPORTIPV6"
874 case "`$CC -dumpversion`" in
875 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
877 # -march=native is broken < 4.3
878 export CC="$CC -mtune=native -march=native"
881 if [ -n "$WE_HATE_OUR_USERS" ]; then
882 export CC="$CC -fno-common"
891 if [ -n "$WE_HATE_OUR_USERS" ]; then
892 TARGETS="sv-$debug cl-$debug"
893 elif [ x"`uname`" = x"Darwin" ]; then
896 TARGETS="sv-$debug cl-$debug sdl-$debug"
899 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
901 TARGETS="sv-$debug sdl-$debug"
904 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"
906 TARGETS="sv-$debug cl-$debug sdl-$debug"
908 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
909 # if we give the command make the arg "", it will surely fail (invalid filename),
910 # so better handle it as an empty client option
913 elif [ -n "$1" ]; then
915 TARGETS_SAVE=$TARGETS
920 TARGETS="$TARGETS sdl-debug"
923 TARGETS="$TARGETS cl-debug"
924 if $snowleopardhack; then
925 export CC="$CC -arch i386"
929 TARGETS="$TARGETS cl-debug"
932 TARGETS="$TARGETS sv-debug"
935 BAD_TARGETS="$BAD_TARGETS $X"
939 if [ -n "$TARGETS" ]; then # at least a valid client
941 else # no valid client, let's assume this option is not meant to be a client then
942 TARGETS=$TARGETS_SAVE
946 if [ -z "$MAKEFLAGS" ]; then
947 if [ -f /proc/cpuinfo ]; then
948 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
949 if [ $ncpus -gt 1 ]; then
953 if [ -n "$WE_HATE_OUR_USERS" ]; then
954 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
958 verbose cd "$d0/d0_blind_id"
959 if ! $compiled0; then
960 # compilation of crypto library failed
961 # use binaries then, if we can...
963 if [ -n "$WE_HATE_OUR_USERS" ]; then
964 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
965 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
966 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
972 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
973 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
974 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
975 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
978 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
979 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
980 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
981 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
989 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
990 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
1000 if [ -f Makefile ]; then
1001 verbose make $MAKEFLAGS distclean
1004 if ! [ -f Makefile ]; then
1005 verbose sh autogen.sh
1008 verbose make $MAKEFLAGS
1011 verbose cd "$d0/fteqcc"
1013 verbose make $MAKEFLAGS clean
1015 verbose make $MAKEFLAGS
1017 verbose cd "$d0/data/xonotic-data.pk3dir"
1019 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1021 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1022 # 4 levels up: data, xonotic-data, qcsrc, server
1024 verbose cd "$d0/darkplaces"
1025 if [ x"$BAD_TARGETS" = x" " ]; then
1026 $ECHO "Warning: invalid empty client, default clients will be used."
1029 verbose make $MAKEFLAGS clean
1031 for T in $TARGETS; do
1032 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1034 for T in $BAD_TARGETS; do
1035 $ECHO "Warning: discarded invalid client $T."
1038 verbose "$SELF" update-maps
1041 if [ -n "$WE_HATE_OUR_USERS" ]; then
1043 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1044 elif [ x"`uname`" = x"Darwin" ]; then
1045 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1046 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
1049 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1053 sdl|glx|agl|dedicated)
1062 if ! [ -x "darkplaces/darkplaces$client" ]; then
1063 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1066 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1070 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1072 # if pulseaudio is running: USE IT
1073 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1074 if ps -C pulseaudio >/dev/null; then
1075 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1076 export SDL_AUDIODRIVER=pulse
1083 if [ x"$USE_GDB" = x"yes" ]; then
1084 set -- gdb --args "$@"
1085 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1086 set -- gdb --batch -x savecore.gdb --args "$@"
1087 elif which catchsegv >/dev/null 2>&1; then
1088 set -- catchsegv "$@"
1092 if [ -f xonotic.core ]; then
1093 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1094 gdb "$binary" xonotic.core
1095 #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
1096 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1098 # rm -f xonotic.core.tar.gz
1100 $ECHO "The core dump can be examined later by"
1101 $ECHO " gdb $binary xonotic.core"
1108 if [ x"$1" = x"-k" ]; then
1113 if verbose cd "$d0/$d"; then
1114 if $keep_going; then
1115 verbose "$@" || true
1125 patchdir=`mktemp -d -t save-patches.XXXXXX`
1127 enter "$d0/$d" verbose
1128 git branch -v -v | cut -c 3- | {
1130 while read -r BRANCH REV UPSTREAM TEXT; do
1133 UPSTREAM=${UPSTREAM#\[}
1134 UPSTREAM=${UPSTREAM%\]}
1135 UPSTREAM=${UPSTREAM%:*}
1139 UPSTREAM=origin/"`repobranch "$d"`"
1143 if [ x"$REV" = x"->" ]; then
1146 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1147 $ECHO "$d" > "$patchdir/$i/info.txt"
1148 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1149 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1150 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1153 rm -rf "$patchdir/$i"
1158 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1163 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1164 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1166 for P in "$patchdir"/*/info.txt; do
1171 read -r UPSTREAM <&3
1173 verbose git checkout HEAD^0
1174 verbose git branch -D "$BRANCH"
1175 if [ x"$TRACK" = x"true" ]; then
1176 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1178 verbose git branch -b "$BRANCH" "$UPSTREAM"
1197 report=$report"$*$LF"
1202 report=$report" $*$LF"
1207 o=`"$@" | sed 's/^/ /' || true`
1213 # sorry, fteqcc repo is managed manually
1217 enter "$d0/$d" verbose
1218 base="`repobranch "$d"`"
1220 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1221 case "${ref#refs/remotes/origin/}" in
1234 if [ -n "$branch" ]; then
1235 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1244 l0=`git rev-list "$base".."$ref" | wc -l`
1245 l1=`git rev-list master.."$ref" | wc -l`
1246 if [ $l0 -gt $l1 ]; then
1253 reportecho " Branch $ref:"
1254 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1255 logdata=`git log --color "$realbase".."$ref"`
1256 if [ -z "$logdata" ]; then
1257 reportecho4 "--> not merging, no changes vs master"
1258 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1259 git push origin :"${ref#refs/remotes/origin/}"
1260 reportecho4 "--> branch deleted"
1263 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1264 if [ -z "$diffdata" ]; then
1265 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1266 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1267 git push origin :"${ref#refs/remotes/origin/}"
1268 reportecho4 "--> branch deleted"
1270 elif $only_delete; then
1271 reportecho4 "--> skipped in delete-only run"
1272 elif [ -z "$branch" ] && [ -n "$note" ]; then
1273 reportdo4 $ECHO "$note"
1274 reportecho4 "--> not merging, already had this one rejected before"
1275 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1276 git checkout "$realbase"
1277 org=`git rev-parse HEAD`
1278 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1279 git reset --hard "$org"
1280 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1282 reportecho4 "--> merge failed"
1283 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1284 git reset --hard "$org"
1285 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1287 reportecho4 "--> compile failed"
1288 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1289 git reset --hard "$org"
1290 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1291 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1292 if [ x"$note" = x"del" ]; then
1293 git push origin :"${ref#refs/remotes/origin/}"
1294 reportecho4 "--> test failed, branch deleted"
1295 elif [ -n "$note" ]; then
1296 reportdo4 $ECHO "$note"
1297 reportecho4 "--> test failed"
1299 reportecho4 "--> test failed, postponed"
1302 # apply crlf, or other cleanup filters (non-behavioural changes)
1304 find . -type f -exec touch {} \;
1305 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1308 case ",`repoflags "$d"`," in
1310 # we do quite a mess here... luckily we know $org
1311 git fetch # svn needs to be current
1312 git rebase -i --onto origin/master "$org"
1313 git svn dcommit --add-author-from
1314 git reset --hard "$org"
1317 git push origin HEAD
1320 reportecho4 "--> MERGED"
1321 if yesno "Delete original branch \"$ref\"?"; then
1322 git push origin :"${ref#refs/remotes/origin/}"
1323 reportecho4 "--> branch deleted"
1327 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1328 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1329 if [ x"$note" = x"del" ]; then
1330 git push origin :"${ref#refs/remotes/origin/}"
1331 reportecho4 "--> branch deleted"
1332 elif [ -n "$note" ]; then
1333 reportdo4 $ECHO "$note"
1334 reportecho4 "--> rejected"
1336 reportecho4 "--> postponed"
1345 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1357 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1358 # ./all clean --reclone
1361 if [ x"$X" = x"--reclone" ]; then
1368 elif [ x"$X" = x"-f" ]; then
1370 elif [ x"$X" = x"-u" ]; then
1372 elif [ x"$X" = x"-U" ]; then
1375 elif [ x"$X" = x"-fu" ]; then
1378 elif [ x"$X" = x"-fU" ]; then
1382 elif [ x"$X" = x"-m" ]; then
1384 elif [ x"$X" = x"-r" ]; then
1386 elif [ x"$X" = x"-D" ]; then
1388 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1391 msg " ,--'-\\P/\`\\ FFFFFFF"
1392 msg " __/_ B/,-.\\ FFFFFFF"
1393 msg " / _\\ (// O\\\\ FFFFFF"
1394 msg "| (O \`) _\\._ _)\\ FFFUU"
1395 msg "| |___/.^d0~~\"\\ \\ UUUU"
1396 msg "| |\`~' \\ | UUUU"
1397 msg "| | __,C>|| UUUU"
1398 msg "\\ /_ ,-/,-' | UUUU"
1399 msg " \\\\_ \\_>~' / UUUU-"
1402 msg "Unknown arg: $X"
1411 if $gotoupstream; then
1413 msg "Must also use -f (delete local changes) when using -u"
1416 if $gotomaster; then
1417 if $fetchupstream; then
1418 verbose git fetch origin
1419 verbose git remote prune origin
1421 verbose git checkout -f "`repobranch "$d"`"
1422 verbose git reset --hard origin/"`repobranch "$d"`"
1424 r=`git symbolic-ref HEAD`
1426 rem=`git config "branch.$r.remote" || $ECHO origin`
1427 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1428 upstream="$rem/${bra#refs/heads/}"
1429 if $fetchupstream; then
1430 verbose git fetch "$rem"
1431 verbose git remote prune "$rem"
1433 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1434 upstream="origin/`repobranch "$d"`"
1436 verbose git reset --hard "$upstream"
1438 elif $gotomaster; then
1440 verbose git checkout -f "`repobranch "$d"`"
1441 verbose git reset --hard
1443 verbose git checkout "`repobranch "$d"`"
1446 verbose git reset --hard
1448 if $rmuntracked; then
1451 verbose git clean -df || true
1454 verbose git clean -xdf || true
1458 if $killbranches; then
1459 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1460 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1461 verbose git branch -D "${B#refs/heads/}"
1464 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1465 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1467 checkself "$cmd" "$@"
1471 # release building goes here
1473 #"$SELF" each git clean -fxd
1474 case "$RELEASETYPE" in
1476 $ECHO >&2 -n "$ESC[2J$ESC[H"
1483 msg " +---------------------------------------------------------.---+"
1485 msg " +---------------------------------------------------------^---+"
1487 msg " | / \ This is the official release build system. |"
1488 msg " | | | If you are not a member of the Xonotic Core Team, |"
1489 msg " | | STOP | you are not supposed to use this script and should |"
1490 msg " | | | instead use ./all compile to compile the engine |"
1491 msg " | \____/ and game code. |"
1493 msg " | [ I understand ] |"
1494 msg " +-------------------------------------------------------------+"
1496 # A LOT of build infrastructure is required:
1499 # - .ssh/config must be configured so the following
1500 # host names are reachable and have a compile
1501 # infrastructure set up:
1502 # - xonotic-build-linux32 (with gcc on x86)
1503 # - xonotic-build-linux64 (with gcc on x86_64)
1504 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1505 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1506 # and x86_64-w64-mingw32-g++)
1507 # - xonotic-build-osx (with Xcode and SDL.framework)
1508 # - AMD Compressonator installed in WINE
1509 # - ResEdit installed in WINE
1510 # - a lot of other requirements you will figure out
1511 # while reading the error messages
1512 # - environment variable RELEASETYPE set
1513 # - optionally, environment variable RELEASEDATE set
1518 msg "Building a FINISHED RELEASE"
1521 msg "Building a $RELEASETYPE"
1524 verbose rm -rf Xonotic Xonotic*.zip
1525 verbose mkdir -p Xonotic
1526 if [ -n "$RELEASEDATE" ]; then
1527 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1529 verbose date +%Y%m%d > Xonotic/stamp.txt
1531 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1533 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1535 verbose rm -rf misc/builddeps
1536 verbose mv misc/buildfiles/win32/* . || true
1537 verbose mv misc/buildfiles/win64 bin64 || true
1538 verbose mv misc/buildfiles/osx/* . || true
1539 verbose rm -rf misc/buildfiles
1540 verbose rm -rf misc/pki
1543 verbose cd darkplaces
1544 verbose git archive --format=tar HEAD
1546 verbose cd Xonotic/source/darkplaces
1551 verbose git archive --format=tar HEAD
1553 verbose cd Xonotic/source/fteqcc
1557 verbose cd data/xonotic-data.pk3dir
1558 verbose git archive --format=tar HEAD -- qcsrc Makefile
1560 verbose cd Xonotic/source
1564 verbose cd d0_blind_id
1565 verbose git archive --format=tar HEAD
1567 verbose cd Xonotic/source/d0_blind_id
1569 verbose sh autogen.sh
1571 rm -f Xonotic/key_15.d0pk
1573 verbose cd Xonotic/mapping
1574 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223.tar.bz2
1575 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223-win32-7z.exe
1576 for X in *-7z.exe; do
1580 # TODO possibly include other tools?
1583 release-compile-run)
1592 if [ -n "$targetfiles" ]; then
1593 case " $HOSTS_THAT_ARE_DISABLED " in
1598 case " $HOSTS_THAT_ARE_MYSELF " in
1600 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1601 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1602 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1603 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1604 for f in $targetfiles; do
1605 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1609 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1610 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1611 verbose ssh "$host" "export LC_ALL=C; ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1612 for f in $targetfiles; do
1613 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1617 # now rebrand the binaries...
1618 for f in $targetfiles; do
1619 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1621 Xonotic/xonotic*.exe)
1622 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1624 d=`mktemp -d -t rebrand.XXXXXX`
1626 $ECHO "-mygames" > darkplaces.opt
1627 zip -9r darkplaces.zip darkplaces.opt
1640 fteqcc_maketargets=$3
1642 darkplaces_maketargets=$5
1644 host=xonotic-build-$suffix
1645 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1646 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1648 release-engine-win32)
1649 verbose "$SELF" release-compile win32 \
1650 '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' \
1651 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1653 verbose "$SELF" release-compile win32 \
1654 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-g++ -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=1' \
1656 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1658 release-engine-win64)
1659 verbose "$SELF" release-compile win64 \
1660 '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' \
1661 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1662 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1663 verbose "$SELF" release-compile win64 \
1664 'STRIP=: DP_MAKE_TARGET=mingw CC="x86_64-w64-mingw32-g++ -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=1' \
1666 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1669 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1670 verbose "$SELF" release-compile osx \
1671 '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"' \
1672 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1673 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1674 verbose "$SELF" release-compile osx \
1675 '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"' \
1677 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1679 release-engine-linux32)
1680 verbose "$SELF" release-compile linux32 \
1681 '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' \
1682 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1683 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1685 release-engine-linux64)
1686 verbose "$SELF" release-compile linux64 \
1687 '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' \
1688 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1689 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1692 verbose "$SELF" release-engine-linux32 &
1693 verbose "$SELF" release-engine-linux64 &
1694 verbose "$SELF" release-engine-win32 &
1695 verbose "$SELF" release-engine-win64 &
1696 verbose "$SELF" release-engine-osx &
1705 verbose "$SELF" update-maps
1708 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1709 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1711 release-buildpk3-transform-raw)
1714 release-buildpk3-transform-normal)
1717 # texture: convert to jpeg and dds
1718 verbose export do_jpeg=true
1719 verbose export jpeg_qual_rgb=97
1720 verbose export jpeg_qual_a=99
1721 verbose export do_dds=false
1722 verbose export do_ogg=false
1723 verbose export del_src=true
1724 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1726 release-buildpk3-transform-normaldds)
1729 # texture: convert to jpeg and dds
1730 # music: reduce bitrate
1731 verbose export do_jpeg=false
1732 verbose export do_jpeg_if_not_dds=true
1733 verbose export jpeg_qual_rgb=95
1734 verbose export jpeg_qual_a=99
1735 verbose export do_dds=true
1736 verbose export dds_flags=
1737 verbose export do_ogg=true
1738 verbose export del_src=true
1739 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1741 release-buildpk3-transform-low)
1744 # texture: convert to jpeg and dds
1745 # music: reduce bitrate
1746 verbose export do_jpeg=true
1747 verbose export jpeg_qual_rgb=80
1748 verbose export jpeg_qual_a=97
1749 verbose export do_dds=false
1750 verbose export do_ogg=true
1751 verbose export ogg_qual=1
1752 verbose export del_src=true
1753 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1755 release-buildpk3-transform-lowdds)
1758 # texture: convert to jpeg and dds
1759 # music: reduce bitrate
1760 verbose export do_jpeg=false
1761 verbose export do_jpeg_if_not_dds=true
1762 verbose export jpeg_qual_rgb=80
1763 verbose export jpeg_qual_a=99
1764 verbose export do_dds=true
1765 verbose export dds_flags=
1766 verbose export do_ogg=true
1767 verbose export ogg_qual=1
1768 verbose export del_src=true
1769 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1782 verbose rm -rf Xonotic/temp
1783 verbose mkdir -p Xonotic/temp
1786 verbose git archive --format=tar HEAD
1788 verbose cd Xonotic/temp
1791 verbose cd Xonotic/temp
1792 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1793 verbose cp ../source/progs.dat .
1794 verbose cp ../source/csprogs.dat .
1795 verbose cp ../source/menu.dat .
1796 verbose rm -rf qcsrc
1797 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1798 major=$(($gv / 10000))
1799 minor=$((($gv / 100) - ($major * 100)))
1800 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1801 versionstr="$major.$minor.$patch"
1802 case "$RELEASETYPE" in
1806 versionstr="$versionstr$RELEASETYPE"
1810 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1811 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1812 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1813 " defaultXonotic.cfg
1814 case "$RELEASETYPE" in
1816 echo "" >> defaultXonotic.cfg
1817 echo "// nicer menu" >> defaultXonotic.cfg
1818 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1822 verbose cd gfx/menu/luminos
1823 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1824 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1825 verbose rm background_l2.svg
1828 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1829 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1830 if [ -f "$X" ]; then
1832 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1836 verbose export git_src_repo="$d0/$src" # skip hash-object
1837 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1838 verbose mkzip "../../$dst" *
1840 verbose rm -rf Xonotic/temp
1843 stamp=`cat Xonotic/stamp.txt`
1849 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1855 while [ "$#" -gt 1 ]; do
1856 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1862 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1863 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1864 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1865 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
1866 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1867 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
1869 release-pack-needsx11)
1872 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1875 verbose "$SELF" release-pack
1880 stamp=`cat Xonotic/stamp.txt`
1881 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1882 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1883 # let's pass crypto import laws of some nasty countries
1884 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
1885 if [ -n "$crypto_libs" ]; then
1886 verbose mkzip Xonotic-$stamp-crypto.zip \
1890 # build the archives
1891 verbose mkzip Xonotic-$stamp-engine.zip \
1893 Xonotic/bin64/*.dll \
1896 Xonotic/xonotic.exe \
1897 Xonotic/source/darkplaces/
1898 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1899 verbose mkzip Xonotic-$stamp-common.zip \
1900 Xonotic/source/fteqcc/ \
1901 Xonotic/source/qcsrc/ \
1906 Xonotic/key_0.d0pk \
1907 Xonotic/data/font-nimbussansl-$stamp.pk3 \
1908 Xonotic/data/font-xolonium-$stamp.pk3
1909 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1910 verbose mkzip0 Xonotic-$stamp.zip \
1911 Xonotic/data/xonotic-$stamp-data.pk3 \
1912 Xonotic/data/xonotic-$stamp-maps.pk3 \
1913 Xonotic/data/xonotic-$stamp-music.pk3 \
1914 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1915 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1916 verbose mkzip0 Xonotic-$stamp-low.zip \
1917 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1918 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1919 Xonotic/data/xonotic-$stamp-music-low.pk3
1920 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1921 verbose mkzip0 Xonotic-$stamp-high.zip \
1922 Xonotic/data/xonotic-$stamp-data-high.pk3 \
1923 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
1924 Xonotic/data/xonotic-$stamp-music.pk3 \
1925 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
1926 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
1928 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
1929 Xonotic/data/xonotic-$stamp-maps-low.pk3 # TODO add a Radiant build
1932 verbose "$SELF" release-prepare
1933 verbose "$SELF" release-maps
1934 verbose "$SELF" release-engine
1935 verbose "$SELF" release-qc
1936 verbose "$SELF" release-pack-needsx11
1937 verbose "$SELF" release-zip
1942 $ECHO " $SELF admin-merge [<branch>]"
1943 $ECHO " $SELF branch <branch>"
1944 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1945 $ECHO " $SELF branches"
1946 $ECHO " $SELF checkout|switch <branch>"
1947 $ECHO " $SELF checkout|switch <remote>/<branch>"
1948 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1949 $ECHO " $SELF clean --reclone"
1950 $ECHO " $SELF compile [-c] [-r|-p] [-0]"
1951 $ECHO " $SELF each|foreach [-k] command..."
1952 $ECHO " $SELF fix_upstream_rebase"
1953 $ECHO " $SELF keygen"
1954 $ECHO " $SELF merge"
1955 $ECHO " $SELF push|commit [-s]"
1956 $ECHO " $SELF release"
1957 $ECHO " $SELF restore-patches"
1958 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1959 $ECHO " $SELF save-patches"
1960 $ECHO " $SELF update-maps"
1961 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"