5 if [ -n "$ZSH_VERSION" ]; then
8 if [ -z "$ECHO" ]; then
9 if echo "\\\\" | grep .. >/dev/null; then
16 # I use this in EVERY shell script ;)
22 while ! [ -f ./all ]; do
23 if [ x"`pwd`" = x"/" ]; then
24 $ECHO "Cannot find myself."
25 $ECHO "Please run this script with the working directory inside a Xonotic checkout."
33 # If we are on WINDOWS:
38 # Windows hates users. So this script has to copy itself elsewhere first...
39 cp "$SELF" ../all.xonotic.sh
40 export WE_HATE_OUR_USERS=1
41 exec ../all.xonotic.sh "$@"
49 $ECHO >&2 "$ESC""[1m$*$ESC""[m"
52 self=`git hash-object "$SELF"`
55 self_new=`git hash-object "$SELF"`
56 if [ x"$self" != x"$self_new" ]; then
57 msg "./all has changed."
58 if [ -z "$XONOTIC_FORBID_RERUN_ALL" ]; then
59 msg "Rerunning the requested operation to make sure."
60 export XONOTIC_FORBID_RERUN_ALL=1
63 msg "Please try $SELF update, and then retry your requested operation."
80 $ECHO "the root directory"
90 if git ls-files -u | grep ' 1 '; then
92 $ECHO "MERGE CONFLICT."
93 $ECHO "change into the \"$1\" project directory, and then:"
94 $ECHO "- edit the files mentioned above with your favorite editor,"
95 $ECHO " and fix the conflicts (marked with <<<<<<< blocks)"
96 $ECHO "- for binary files, you can select the files using"
97 $ECHO " git checkout --ours or git checkout --theirs"
98 $ECHO "- when done with a file, 'git add' the file"
99 $ECHO "- when done, 'git commit'"
108 while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
119 check_mergeconflict "$1"
124 data/xonotic-data.pk3dir | | master |
125 data/xonotic-music.pk3dir | | master |
126 data/xonotic-nexcompat.pk3dir | | master | no
127 darkplaces | | div0-stable | svn
128 netradiant | | master |
129 div0-gittools | | master | no
130 d0_blind_id | | master |
131 data/xonotic-maps.pk3dir | | master |
132 mediasource | | master | no
133 fteqcc | | xonotic-stable | noautocrlf
135 # todo: in darkplaces, change repobranch to div0-stable
137 repos=`$ECHO "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
139 base=`git config remote.origin.url`
142 base=${base%xonotic.git}
145 $ECHO "The main repo is not xonotic.git, what have you done?"
149 pushbase=`git config remote.origin.pushurl || true`
152 pushbase=${pushbase%xonotic.git}
157 $ECHO "The main repo is not xonotic.git, what have you done?"
164 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
165 if [ -n "$repo_t" ]; then
175 if [ x"$1" = x"." ]; then
176 $ECHO "$base""xonotic.git"
178 $ECHO "$base${1##*/}.git"
185 [ -n "$pushbase" ] || return 0
186 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
187 if [ -n "$repo_t" ]; then
192 $ECHO "$pushbase$repo_t"
196 if [ x"$1" = x"." ]; then
197 $ECHO "$pushbase""xonotic.git"
199 $ECHO "$pushbase${1##*/}.git"
206 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
207 if [ -n "$repo_t" ]; then
216 $ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
224 # if we have the dir, always keep it
226 msg "Repository $d enabled because it already exists"
230 # if .yes file exists, always keep it
231 if [ -f "$d.yes" ]; then
232 msg "Repository $d enabled by a .yes file"
236 # if we have .no file, skip
237 if [ -f "$d.no" ]; then
238 msg "Repository $d disabled by a .no file, delete $p.no to enable"
241 # if we have matching pk3, skip
242 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
243 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
246 # if "no" flag is set, skip
249 msg "Repository $d disabled by default, create $d.yes to enable"
254 msg "Repository $d enabled by default"
261 if [ "$#" = 0 ]; then
267 fix_upstream_rebase()
269 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
273 # one of the two sides of the merge should be remote upstream, or all is fine
274 r_r=`git symbolic-ref HEAD`
275 r_r=${r_r#refs/heads/}
276 r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
277 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
278 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
279 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
284 r_base=`git merge-base "$r_me" "$r_other"`
286 # no merge-base? upstream did filter-branch
287 if [ -n "$r_base" ]; then
288 # otherwise, check if the two histories are "similar"
289 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
290 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
292 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
293 r_lc_me=`$ECHO "$r_l_me" | wc -l`
294 r_lc_other=`$ECHO "$r_l_other" | wc -l`
295 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
296 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
298 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
299 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
300 git reset --hard "$r_me"
310 fix_upstream_rebase_mergeok()
312 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
313 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
317 fix_upstream_rebase_mergefail()
319 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
320 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
326 verbose git config remote.origin.url "$1"
328 verbose git config remote.origin.pushurl "$2"
330 verbose git config --unset remote.origin.pushurl || true
332 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
333 case ",`repoflags "$d"`," in
335 verbose git config --unset core.autocrlf || true
338 verbose git config core.autocrlf input
341 if [ -z "`git config push.default || true`" ]; then
342 verbose git config push.default current # or is tracking better?
344 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
345 verbose git config filter.mapclean.smudge "cat"
353 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
354 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
355 zip -9y -@<"$ziplist" "$archive" || true
366 # first result is to be ignored, but we use it to check status
367 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
368 { time -p git ls-remote "$1" refs/heads/master; } 2>&1 >/dev/null | head -n 1 | cut -d ' ' -f 2 | tr -d . | sed 's,^0*,,'
369 # unit: clock ticks (depends on what "time" returns
377 if ! { time -p true; } >/dev/null 2>&1; then
395 if t=`mirrorspeed "$m"`; then
397 tt=$(($t$op)) # fudge factor
398 msg "$m -> $t$op = $tt ticks"
399 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
410 if [ -n "$bestin" ]; then
411 msg "Best mirror seems to be $pre$bestin$suf"
421 enter "$d0/$d" verbose
422 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
428 pushurl=`repopushurl "$d"`
429 branch=`repobranch "$d"`
430 if [ -d "$d0/$d" ]; then
432 fix_git_config "$url" "$pushurl"
438 # enable the ssh URL for pushing
441 if [ -f ~/.ssh/id_rsa.pub ]; then
443 msg "A key already exists and no new one will be generated. If you"
444 msg "already have done the procedure for getting your key approved, you"
445 msg "can skip the following paragraph and already use the repository."
447 msg "To get access, your key has to be approved first. For that, visit"
448 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
449 msg "the \"Support\" tracker in the \"Repository\" category where you"
450 msg "apply for access and paste the following output into the issue:"
452 msg "`cat ~/.ssh/id_rsa.pub`"
454 msg "Note that you will only have write access to branches that start"
455 msg "with your user name."
456 elif [ -f ~/.ssh/id_dsa.pub ]; then
458 msg "A key already exists and no new one will be generated. If you"
459 msg "already have done the procedure for getting your key approved, you"
460 msg "can skip the following paragraph and already use the repository."
462 msg "To get access, your key has to be approved first. For that, visit"
463 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
464 msg "the \"Support\" tracker in the \"Repository\" category where you"
465 msg "apply for access and paste the following output into the issue:"
467 msg "`cat ~/.ssh/id_dsa.pub`"
469 msg "Note that you will only have write access to branches that start"
470 msg "with your user name."
473 msg "No key has been generated yet. One will be generated now."
474 msg "If other people are using your computer, it is recommended"
475 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
476 msg "when asked for a passphrase."
478 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
480 msg "To get access, your key has to be approved first. For that, visit"
481 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
482 msg "the \"Support\" tracker in the \"Repository\" category where you"
483 msg "apply for access and paste the following output into the issue:"
485 msg "`cat ~/.ssh/id_rsa.pub`"
487 msg "Note that you will only have write access to branches that start"
488 msg "with your user name."
496 if [ x"$1" = x"-N" ]; then
498 elif [ x"$1" = x"-p" ]; then
500 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
501 pushbase=ssh://xonotic@git.xonotic.org/
503 elif [ x"$1" = x"-s" ]; then
505 base=ssh://xonotic@git.xonotic.org/
507 elif [ x"$1" = x"-g" ]; then
509 base=git://git.xonotic.org/xonotic/
510 elif [ x"$1" = x"-h" ]; then
512 base=http://git.xonotic.org/xonotic/
513 elif [ x"$1" = x"-l" ]; then
521 msg "Invalid location!"
522 msg "Possible locations for the -l option:"
523 msg " nl (Netherlands, run by merlijn)"
524 msg " de (Germany, run by divVerent)"
525 msg " us (United States of America, run by detrate)"
526 msg " best (find automatically)"
527 msg " default (currently nl)"
541 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
542 git config xonotic.all.mirrorselection done
549 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
553 base=git://git.xonotic.org/xonotic/
556 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
559 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
577 *://*.git.xonotic.org/*)
578 location=${base%%.git.xonotic.org/*}
579 location=${location##*://}
587 if [ -n "$location" ]; then
588 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
589 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
591 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
592 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
596 pushurl=`repopushurl .`
597 fix_git_config "$url" "$pushurl"
599 if $allow_pull || $fix_config; then
604 pushurl=`repopushurl "$d"`
605 branch=`repobranch "$d"`
606 if [ -d "$d0/$d" ]; then
608 enter "$d0/$d" verbose
609 r=`git symbolic-ref HEAD`
611 if git config branch.$r.remote >/dev/null 2>&1; then
612 if ! verbose git pull; then
613 fix_upstream_rebase_mergefail || true
614 check_mergeconflict "$d"
615 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
618 fix_upstream_rebase_mergeok || true
623 checkself "$cmd" "$@"
625 verbose git remote prune origin
629 verbose git clone "$url" "$d0/$d"
630 enter "$d0/$d" verbose
631 fix_git_config "$url" "$pushurl"
632 if [ "$branch" != "master" ]; then
633 verbose git checkout --track -b "$branch" origin/"$branch"
640 misc/tools/xonotic-map-compiler-autobuild download
644 if [ x"$1" = x"-f" ]; then
650 if [ -z "$branch" ]; then
653 branch=${remote#origin/}
664 enter "$d0/$d" verbose
666 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
668 verbose git checkout $checkoutflags "$b"
669 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
671 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
674 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
676 verbose git checkout $checkoutflags "$b"
677 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
679 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
681 $ECHO "WTF? Not even branch $b doesn't exist in $d"
686 checkself "$cmd" "$@"
690 $ECHO "The requested branch was not found in any repository."
698 if [ -z "$branch" ]; then
702 if [ -z "$branch" ]; then
705 r=`git symbolic-ref HEAD`
712 dv=`visible_repo_name "$d"`
713 enter "$d0/$d" verbose
714 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
715 $ECHO "Already having this branch in $dv."
717 if yesno "Branch in $dv?"; then
718 if [ -n "$srcbranch" ]; then
721 b=origin/"`repobranch "$d"`"
722 verbose git fetch origin || true
724 # TODO do this without pushing
725 verbose git checkout -b "$branch" "$b"
726 verbose git config "branch.$branch.remote" "$remote"
727 verbose git config "branch.$branch.merge" "refs/heads/$branch"
737 cd "$d0/$d" # am in a pipe, shouldn't use enter
738 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
743 while read -r d BRANCH REV TEXT; do
744 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
747 if [ x"$REV" = x"->" ]; then
750 BRANCH=${BRANCH#remotes/}
751 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
752 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
753 eval "r=\$branches_repos_$ID"
755 eval "branches_repos_$ID=\$r"
757 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
758 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
759 eval "r=\$branches_repos_$ID"
760 printf "%-60s %s\n" "$BRANCH" "$r"
767 dv=`visible_repo_name "$d"`
768 enter "$d0/$d" verbose
769 r=`git symbolic-ref HEAD`
771 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
772 # we have uncommitted changes
773 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
774 if ! verbose git merge origin/"`repobranch "$d"`"; then
775 check_mergeconflict "$d"
776 exit 1 # this should ALWAYS be fatal
786 dv=`visible_repo_name "$d"`
787 enter "$d0/$d" verbose
788 r=`git symbolic-ref HEAD`
790 diffdata=`git diff --color HEAD`
791 if [ -n "$diffdata" ]; then
792 # we have uncommitted changes
793 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
794 verbose git commit -a
797 rem=`git config "branch.$r.remote" || $ECHO origin`
798 bra=`git config "branch.$r.merge" || $ECHO "$r"`
799 upstream="$rem/${bra#refs/heads/}"
800 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
801 upstream="origin/`repobranch "$d"`"
803 logdata=`git log --color "$upstream".."$r"`
804 if [ -n "$logdata" ]; then
805 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
806 verbose git push "$rem" HEAD
809 if [ x"$submit" = x"-s" ]; then
812 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
826 snowleopardhack=false
827 if [ -z "$CC" ]; then
828 export CC="gcc -DSUPPORTIPV6"
846 case "`$CC -dumpversion`" in
847 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
849 # -march=native is broken < 4.3
850 export CC="$CC -mtune=native -march=native"
853 if [ -n "$WE_HATE_OUR_USERS" ]; then
854 export CC="$CC -fno-common"
863 if [ -n "$WE_HATE_OUR_USERS" ]; then
864 TARGETS="sv-$debug cl-$debug"
865 elif [ x"`uname`" = x"Darwin" ]; then
868 TARGETS="sv-$debug cl-$debug sdl-$debug"
871 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
873 TARGETS="sv-$debug sdl-$debug"
876 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"
878 TARGETS="sv-$debug cl-$debug sdl-$debug"
880 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
881 # if we give the command make the arg "", it will surely fail (invalid filename),
882 # so better handle it as an empty client option
885 elif [ -n "$1" ]; then
887 TARGETS_SAVE=$TARGETS
892 TARGETS="$TARGETS sdl-debug"
895 TARGETS="$TARGETS cl-debug"
896 if $snowleopardhack; then
897 export CC="$CC -arch i386"
901 TARGETS="$TARGETS cl-debug"
904 TARGETS="$TARGETS sv-debug"
907 BAD_TARGETS="$BAD_TARGETS $X"
911 if [ -n "$TARGETS" ]; then # at least a valid client
913 else # no valid client, let's assume this option is not meant to be a client then
914 TARGETS=$TARGETS_SAVE
918 if [ -z "$MAKEFLAGS" ]; then
919 if [ -f /proc/cpuinfo ]; then
920 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
921 if [ $ncpus -gt 1 ]; then
925 if [ -n "$WE_HATE_OUR_USERS" ]; then
926 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
930 enter "$d0/d0_blind_id" verbose
931 if ! $compiled0; then
932 # compilation of crypto library failed
933 # use binaries then, if we can...
935 if [ -n "$WE_HATE_OUR_USERS" ]; then
936 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
937 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
938 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
944 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
945 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
946 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
947 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
950 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
951 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
952 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
953 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
961 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
962 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
972 if [ -f Makefile ]; then
973 verbose make $MAKEFLAGS distclean
976 if ! [ -f Makefile ]; then
977 verbose sh autogen.sh
980 verbose make $MAKEFLAGS
983 enter "$d0/fteqcc" verbose
985 verbose make $MAKEFLAGS clean
987 verbose make $MAKEFLAGS
989 enter "$d0/data/xonotic-data.pk3dir" verbose
991 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
993 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
994 # 4 levels up: data, xonotic-data, qcsrc, server
996 enter "$d0/darkplaces" verbose
997 if [ x"$BAD_TARGETS" = x" " ]; then
998 $ECHO "Warning: invalid empty client, default clients will be used."
1001 verbose make $MAKEFLAGS clean
1003 for T in $TARGETS; do
1004 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1006 for T in $BAD_TARGETS; do
1007 $ECHO "Warning: discarded invalid client $T."
1010 verbose "$SELF" update-maps
1013 if [ -n "$WE_HATE_OUR_USERS" ]; then
1015 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1016 elif [ x"`uname`" = x"Darwin" ]; then
1017 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1018 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
1021 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1025 sdl|glx|agl|dedicated)
1034 if ! [ -x "darkplaces/darkplaces$client" ]; then
1035 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1038 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1042 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1044 # if pulseaudio is running: USE IT
1045 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1046 if ps -C pulseaudio >/dev/null; then
1047 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1048 export SDL_AUDIODRIVER=pulse
1055 if [ x"$USE_GDB" = x"yes" ]; then
1056 set -- gdb --args "$@"
1057 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1058 set -- gdb --batch -x savecore.gdb --args "$@"
1059 elif which catchsegv >/dev/null 2>&1; then
1060 set -- catchsegv "$@"
1064 if [ -f xonotic.core ]; then
1065 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1066 gdb "$binary" xonotic.core
1067 #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
1068 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1070 # rm -f xonotic.core.tar.gz
1072 $ECHO "The core dump can be examined later by"
1073 $ECHO " gdb $binary xonotic.core"
1080 if [ x"$1" = x"-k" ]; then
1085 if verbose cd "$d0/$d"; then
1086 if $keep_going; then
1087 verbose "$@" || true
1097 patchdir=`mktemp -d -t save-patches.XXXXXX`
1099 enter "$d0/$d" verbose
1100 git branch -v -v | cut -c 3- | {
1102 while read -r BRANCH REV UPSTREAM TEXT; do
1105 UPSTREAM=${UPSTREAM#\[}
1106 UPSTREAM=${UPSTREAM%\]}
1107 UPSTREAM=${UPSTREAM%:*}
1111 UPSTREAM=origin/"`repobranch "$d"`"
1115 if [ x"$REV" = x"->" ]; then
1118 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1119 $ECHO "$d" > "$patchdir/$i/info.txt"
1120 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1121 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1122 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1125 rm -rf "$patchdir/$i"
1130 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1135 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1136 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1138 for P in "$patchdir"/*/info.txt; do
1143 read -r UPSTREAM <&3
1145 verbose git checkout HEAD^0
1146 verbose git branch -D "$BRANCH"
1147 if [ x"$TRACK" = x"true" ]; then
1148 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1150 verbose git branch -b "$BRANCH" "$UPSTREAM"
1162 report=$report"$*$LF"
1167 report=$report" $*$LF"
1172 o=`"$@" | sed 's/^/ /' || true`
1178 # sorry, fteqcc repo is managed manually
1182 enter "$d0/$d" verbose
1183 base="`repobranch "$d"`"
1185 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1186 case "${ref#refs/remotes/origin/}" in
1199 if [ -n "$branch" ]; then
1200 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1209 l0=`git rev-list "$base".."$ref" | wc -l`
1210 l1=`git rev-list master.."$ref" | wc -l`
1211 if [ $l0 -gt $l1 ]; then
1218 reportecho " Branch $ref:"
1219 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1220 logdata=`git log --color "$realbase".."$ref"`
1221 if [ -z "$logdata" ]; then
1222 reportecho4 "--> not merging, no changes vs master"
1223 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1224 git push origin :"${ref#refs/remotes/origin/}"
1225 reportecho4 "--> branch deleted"
1228 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1229 if [ -z "$diffdata" ]; then
1230 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1231 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1232 git push origin :"${ref#refs/remotes/origin/}"
1233 reportecho4 "--> branch deleted"
1235 elif [ -z "$branch" ] && [ -n "$note" ]; then
1236 reportdo4 $ECHO "$note"
1237 reportecho4 "--> not merging, already had this one rejected before"
1238 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1239 git checkout "$realbase"
1240 org=`git rev-parse HEAD`
1241 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1242 git reset --hard "$org"
1243 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1245 reportecho4 "--> merge failed"
1246 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1247 git reset --hard "$org"
1248 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1250 reportecho4 "--> compile failed"
1251 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1252 git reset --hard "$org"
1253 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1254 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1255 if [ x"$note" = x"del" ]; then
1256 git push origin :"${ref#refs/remotes/origin/}"
1257 reportecho4 "--> test failed, branch deleted"
1258 elif [ -n "$note" ]; then
1259 reportdo4 $ECHO "$note"
1260 reportecho4 "--> test failed"
1262 reportecho4 "--> test failed, postponed"
1265 # apply crlf, or other cleanup filters (non-behavioural changes)
1267 find . -type f -exec touch {} \;
1268 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1271 case ",`repoflags "$d"`," in
1273 # we do quite a mess here... luckily we know $org
1274 git fetch # svn needs to be current
1275 git rebase -i --onto origin/master "$org"
1276 git svn dcommit --add-author-from
1277 git reset --hard "$org"
1280 git push origin HEAD
1283 reportecho4 "--> MERGED"
1284 if yesno "Delete original branch \"$ref\"?"; then
1285 git push origin :"${ref#refs/remotes/origin/}"
1286 reportecho4 "--> branch deleted"
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 "--> branch deleted"
1295 elif [ -n "$note" ]; then
1296 reportdo4 $ECHO "$note"
1297 reportecho4 "--> rejected"
1299 reportecho4 "--> postponed"
1308 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1320 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1321 # ./all clean --reclone
1324 if [ x"$X" = x"--reclone" ]; then
1331 elif [ x"$X" = x"-f" ]; then
1333 elif [ x"$X" = x"-u" ]; then
1335 elif [ x"$X" = x"-U" ]; then
1338 elif [ x"$X" = x"-fu" ]; then
1341 elif [ x"$X" = x"-fU" ]; then
1345 elif [ x"$X" = x"-m" ]; then
1347 elif [ x"$X" = x"-r" ]; then
1349 elif [ x"$X" = x"-D" ]; then
1351 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1354 msg " ,--'-\\P/\`\\ FFFFFFF"
1355 msg " __/_ B/,-.\\ FFFFFFF"
1356 msg " / _\\ (// O\\\\ FFFFFF"
1357 msg "| (O \`) _\\._ _)\\ FFFUU"
1358 msg "| |___/.^d0~~\"\\ \\ UUUU"
1359 msg "| |\`~' \\ | UUUU"
1360 msg "| | __,C>|| UUUU"
1361 msg "\\ /_ ,-/,-' | UUUU"
1362 msg " \\\\_ \\_>~' / UUUU-"
1365 msg "Unknown arg: $X"
1375 if $gotoupstream; then
1377 msg "Must also use -f (delete local changes) when using -u"
1380 if $gotomaster; then
1381 if $fetchupstream; then
1382 verbose git fetch origin
1383 verbose git remote prune origin
1385 verbose git checkout -f "`repobranch "$d"`"
1386 verbose git reset --hard origin/"`repobranch "$d"`"
1388 r=`git symbolic-ref HEAD`
1390 rem=`git config "branch.$r.remote" || $ECHO origin`
1391 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1392 upstream="$rem/${bra#refs/heads/}"
1393 if $fetchupstream; then
1394 verbose git fetch "$rem"
1395 verbose git remote prune "$rem"
1397 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1398 upstream="origin/`repobranch "$d"`"
1400 verbose git reset --hard "$upstream"
1402 elif $gotomaster; then
1404 verbose git checkout -f "`repobranch "$d"`"
1405 verbose git reset --hard
1407 verbose git checkout "`repobranch "$d"`"
1410 verbose git reset --hard
1412 if $rmuntracked; then
1415 verbose git clean -df || true
1418 verbose git clean -xdf || true
1422 if $killbranches; then
1423 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1424 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1425 verbose git branch -D "${B#refs/heads/}"
1428 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1429 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1431 checkself "$cmd" "$@"
1435 # release building goes here
1437 #"$SELF" each git clean -fxd
1438 case "$RELEASETYPE" in
1440 msg "Building a BETA"
1443 msg "Building a RELEASE"
1446 $ECHO >&2 -n "$ESC[2J$ESC[H"
1453 msg " +---------------------------------------------------------.---+"
1455 msg " +---------------------------------------------------------^---+"
1457 msg " | / \ This is the official release build system. |"
1458 msg " | | | If you are not a member of the Xonotic Core Team, |"
1459 msg " | | STOP | you are not supposed to use this script and should |"
1460 msg " | | | instead use ./all compile to compile the engine |"
1461 msg " | \____/ and game code. |"
1463 msg " | [ I understand ] |"
1464 msg " +-------------------------------------------------------------+"
1466 # A LOT of build infrastructure is required:
1469 # - .ssh/config must be configured so the following
1470 # host names are reachable and have a compile
1471 # infrastructure set up:
1472 # - xonotic-build-linux32 (with gcc on x86)
1473 # - xonotic-build-linux64 (with gcc on x86_64)
1474 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1475 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1476 # and x86_64-w64-mingw32-g++)
1477 # - xonotic-build-osx (with Xcode and SDL.framework)
1478 # - AMD Compressonator installed in WINE
1479 # - ResEdit installed in WINE
1480 # - a lot of other requirements you will figure out
1481 # while reading the error messages
1482 # - environment variable RELEASETYPE set
1483 # - optionally, environment variable RELEASEDATE set
1488 verbose rm -rf Xonotic Xonotic*.zip
1489 verbose mkdir -p Xonotic
1490 if [ -n "$RELEASEDATE" ]; then
1491 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1493 verbose date +%Y%m%d > Xonotic/stamp.txt
1495 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1497 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1499 verbose rm -rf misc/builddeps
1500 verbose mv misc/buildfiles/win32/* . || true
1501 verbose mv misc/buildfiles/win64 bin64 || true
1502 verbose mv misc/buildfiles/osx/* . || true
1503 verbose rm -rf misc/buildfiles
1504 verbose rm -rf misc/pki
1507 verbose cd darkplaces
1508 verbose git archive --format=tar HEAD
1510 verbose cd Xonotic/source/darkplaces
1515 verbose git archive --format=tar HEAD
1517 verbose cd Xonotic/source/fteqcc
1521 verbose cd data/xonotic-data.pk3dir
1522 verbose git archive --format=tar HEAD -- qcsrc Makefile
1524 verbose cd Xonotic/source
1527 rm -f Xonotic/key_15.d0pk
1529 release-compile-run)
1538 if [ -n "$targetfiles" ]; then
1539 case " $HOSTS_THAT_ARE_DISABLED " in
1544 case " $HOSTS_THAT_ARE_MYSELF " in
1546 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1547 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1548 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1549 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1550 for f in $targetfiles; do
1551 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1555 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1556 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1557 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1558 for f in $targetfiles; do
1559 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1563 # now rebrand the binaries...
1564 for f in $targetfiles; do
1565 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1568 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1570 d=`mktemp -d -t rebrand.XXXXXX`
1572 $ECHO "-mygames" > darkplaces.opt
1573 zip -9r darkplaces.zip darkplaces.opt
1586 fteqcc_maketargets=$3
1588 darkplaces_maketargets=$5
1590 host=xonotic-build-$suffix
1591 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1592 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1594 release-engine-win32)
1595 verbose "$SELF" release-compile win32 \
1596 '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' \
1597 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1599 verbose "$SELF" release-compile win32 \
1600 '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' \
1602 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1604 release-engine-win64)
1605 verbose "$SELF" release-compile win64 \
1606 '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' \
1607 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1608 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1609 verbose "$SELF" release-compile win64 \
1610 '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' \
1612 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1615 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1616 verbose "$SELF" release-compile osx \
1617 '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"' \
1618 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1619 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1620 verbose "$SELF" release-compile osx \
1621 '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"' \
1623 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1625 release-engine-linux32)
1626 verbose "$SELF" release-compile linux32 \
1627 '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' \
1628 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1629 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1631 release-engine-linux64)
1632 verbose "$SELF" release-compile linux64 \
1633 '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' \
1634 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1635 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1638 verbose "$SELF" release-engine-linux32 &
1639 verbose "$SELF" release-engine-linux64 &
1640 verbose "$SELF" release-engine-win32 &
1641 verbose "$SELF" release-engine-win64 &
1642 verbose "$SELF" release-engine-osx &
1651 verbose "$SELF" update-maps
1654 case "$RELEASETYPE" in
1656 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1657 # back out of: source/qcsrc/server
1660 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1663 verbose rm -f Xonotic/source/*/fteqcc.log
1665 release-buildpk3-transform-raw)
1668 release-buildpk3-transform-normal)
1671 # texture: convert to jpeg and dds
1672 verbose export do_jpeg=true
1673 verbose export jpeg_qual_rgb=95
1674 verbose export jpeg_qual_a=99
1675 verbose export do_dds=true
1676 verbose export dds_flags=
1677 verbose export do_ogg=false
1678 verbose export del_src=true
1679 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1681 release-buildpk3-transform-low)
1684 # texture: convert to jpeg and dds
1685 # music: reduce bitrate
1686 verbose export do_jpeg=true
1687 verbose export jpeg_qual_rgb=80
1688 verbose export jpeg_qual_a=97
1689 verbose export do_dds=false
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
1695 release-buildpk3-transform-lowdds)
1698 # texture: convert to jpeg and dds
1699 # music: reduce bitrate
1700 verbose export do_jpeg=false
1701 verbose export do_jpeg_if_not_dds=true
1702 verbose export jpeg_qual_rgb=80
1703 verbose export jpeg_qual_a=99
1704 verbose export do_dds=true
1705 verbose export dds_flags=
1706 verbose export do_ogg=true
1707 verbose export ogg_qual=1
1708 verbose export del_src=true
1709 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1722 verbose rm -rf Xonotic/temp
1723 verbose mkdir -p Xonotic/temp
1726 verbose git archive --format=tar HEAD
1728 verbose cd Xonotic/temp
1731 verbose cd Xonotic/temp
1732 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1733 verbose cp ../source/progs.dat .
1734 verbose cp ../source/csprogs.dat .
1735 verbose cp ../source/menu.dat .
1736 verbose rm -rf qcsrc
1737 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1738 major=$(($gv / 10000))
1739 minor=$(($gv / 100 - $major * 100))
1740 patch=$(($gv - $major * 10000 - $minor * 100))
1741 versionstr="$major.$minor.$patch"
1742 case "$RELEASETYPE" in
1744 versionstr="$versionstr""beta"
1748 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1749 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1750 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1751 " defaultXonotic.cfg
1753 verbose cd gfx/menu/luminos
1754 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1755 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1756 verbose rm background_l2.svg
1759 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1760 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1761 if [ -f "$X" ]; then
1763 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1767 verbose export git_src_repo="$d0/$src" # skip hash-object
1768 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1769 verbose mkzip "../../$dst" *
1771 verbose rm -rf Xonotic/temp
1774 stamp=`cat Xonotic/stamp.txt`
1780 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1786 while [ "$#" -gt 1 ]; do
1787 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1793 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1794 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1795 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1796 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1797 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1799 release-pack-needsx11)
1802 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1805 verbose "$SELF" release-pack
1810 stamp=`cat Xonotic/stamp.txt`
1811 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1812 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1813 # let's pass crypto import laws of some nasty countries
1814 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1815 if [ -n "$crypto_libs" ]; then
1816 verbose mkzip Xonotic-$stamp-crypto.zip \
1820 # build the archives
1821 verbose mkzip Xonotic-$stamp-engine.zip \
1823 Xonotic/bin64/*.dll \
1826 Xonotic/xonotic.exe \
1827 Xonotic/source/darkplaces/
1828 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1829 verbose mkzip Xonotic-$stamp-common.zip \
1830 Xonotic/source/fteqcc/ \
1831 Xonotic/source/qcsrc/ \
1836 Xonotic/key_0.d0pk \
1837 Xonotic/data/font-nimbussansl-$stamp.pk3
1838 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1839 verbose mkzip0 Xonotic-$stamp.zip \
1840 Xonotic/data/xonotic-$stamp-data.pk3 \
1841 Xonotic/data/xonotic-$stamp-maps.pk3 \
1842 Xonotic/data/xonotic-$stamp-music.pk3 \
1843 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1844 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1845 verbose mkzip0 Xonotic-$stamp-low.zip \
1846 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1847 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1848 Xonotic/data/xonotic-$stamp-music-low.pk3
1849 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1850 # verbose mkzip0 Xonotic-$stamp-high.zip \
1851 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1852 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1853 # Xonotic/data/xonotic-$stamp-music.pk3 \
1854 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1855 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1856 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1857 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1858 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1859 Xonotic/data/xonotic-$stamp-music-low.pk3
1862 verbose "$SELF" release-prepare
1863 verbose "$SELF" release-maps
1864 verbose "$SELF" release-engine
1865 verbose "$SELF" release-qc
1866 verbose "$SELF" release-pack-needsx11
1867 verbose "$SELF" release-zip
1872 $ECHO " $SELF admin-merge [<branch>]"
1873 $ECHO " $SELF branch <branch>"
1874 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1875 $ECHO " $SELF branches"
1876 $ECHO " $SELF checkout|switch <branch>"
1877 $ECHO " $SELF checkout|switch <remote>/<branch>"
1878 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1879 $ECHO " $SELF clean --reclone"
1880 $ECHO " $SELF compile [-c] [-r] [-0]"
1881 $ECHO " $SELF each|foreach [-k] command..."
1882 $ECHO " $SELF fix_upstream_rebase"
1883 $ECHO " $SELF keygen"
1884 $ECHO " $SELF merge"
1885 $ECHO " $SELF push|commit [-s]"
1886 $ECHO " $SELF release"
1887 $ECHO " $SELF restore-patches"
1888 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1889 $ECHO " $SELF save-patches"
1890 $ECHO " $SELF update-maps"
1891 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"