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 r_bra=${r_bra#refs/heads/}
279 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
280 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
285 r_base=`git merge-base "$r_me" "$r_other"`
287 # no merge-base? upstream did filter-branch
288 if [ -n "$r_base" ]; then
289 # otherwise, check if the two histories are "similar"
290 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
291 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
293 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
294 r_lc_me=`$ECHO "$r_l_me" | wc -l`
295 r_lc_other=`$ECHO "$r_l_other" | wc -l`
296 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
297 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
299 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
300 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
301 git reset --hard "$r_me"
311 fix_upstream_rebase_mergeok()
313 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
314 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
318 fix_upstream_rebase_mergefail()
320 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
321 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
327 verbose git config remote.origin.url "$1"
329 verbose git config remote.origin.pushurl "$2"
331 verbose git config --unset remote.origin.pushurl || true
333 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
334 case ",`repoflags "$d"`," in
336 verbose git config --unset core.autocrlf || true
339 verbose git config core.autocrlf input
342 if [ -z "`git config push.default || true`" ]; then
343 verbose git config push.default current # or is tracking better?
345 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
346 verbose git config filter.mapclean.smudge "cat"
354 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
355 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
356 zip -9y -@<"$ziplist" "$archive" || true
367 # first result is to be ignored, but we use it to check status
368 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
369 { 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*,,'
370 # unit: clock ticks (depends on what "time" returns
378 if ! { time -p true; } >/dev/null 2>&1; then
396 if t=`mirrorspeed "$m"`; then
398 tt=$(($t$op)) # fudge factor
399 msg "$m -> $t$op = $tt ticks"
400 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
411 if [ -n "$bestin" ]; then
412 msg "Best mirror seems to be $pre$bestin$suf"
422 enter "$d0/$d" verbose
423 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
429 pushurl=`repopushurl "$d"`
430 branch=`repobranch "$d"`
431 if [ -d "$d0/$d" ]; then
433 fix_git_config "$url" "$pushurl"
439 # enable the ssh URL for pushing
442 if [ -f ~/.ssh/id_rsa.pub ]; then
444 msg "A key already exists and no new one will be generated. If you"
445 msg "already have done the procedure for getting your key approved, you"
446 msg "can skip the following paragraph and already use the repository."
448 msg "To get access, your key has to be approved first. For that, visit"
449 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
450 msg "the \"Support\" tracker in the \"Repository\" category where you"
451 msg "apply for access and paste the following output into the issue:"
453 msg "`cat ~/.ssh/id_rsa.pub`"
455 msg "Note that you will only have write access to branches that start"
456 msg "with your user name."
457 elif [ -f ~/.ssh/id_dsa.pub ]; then
459 msg "A key already exists and no new one will be generated. If you"
460 msg "already have done the procedure for getting your key approved, you"
461 msg "can skip the following paragraph and already use the repository."
463 msg "To get access, your key has to be approved first. For that, visit"
464 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
465 msg "the \"Support\" tracker in the \"Repository\" category where you"
466 msg "apply for access and paste the following output into the issue:"
468 msg "`cat ~/.ssh/id_dsa.pub`"
470 msg "Note that you will only have write access to branches that start"
471 msg "with your user name."
474 msg "No key has been generated yet. One will be generated now."
475 msg "If other people are using your computer, it is recommended"
476 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
477 msg "when asked for a passphrase."
479 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
481 msg "To get access, your key has to be approved first. For that, visit"
482 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
483 msg "the \"Support\" tracker in the \"Repository\" category where you"
484 msg "apply for access and paste the following output into the issue:"
486 msg "`cat ~/.ssh/id_rsa.pub`"
488 msg "Note that you will only have write access to branches that start"
489 msg "with your user name."
497 if [ x"$1" = x"-N" ]; then
499 elif [ x"$1" = x"-p" ]; then
501 pushbase=ssh://xonotic@git.xonotic.org/
502 elif [ x"$1" = x"-ps" ]; then
504 pushbase=ssh://xonotic@git.xonotic.org/
505 elif [ x"$1" = x"-ph" ]; then
507 pushbase=http://git.xonotic.org/login/xonotic/
508 elif [ x"$1" = x"-s" ]; then
510 base=ssh://xonotic@git.xonotic.org/
511 elif [ x"$1" = x"-g" ]; then
513 base=git://git.xonotic.org/xonotic/
514 elif [ x"$1" = x"-h" ]; then
516 base=http://git.xonotic.org/xonotic/
517 elif [ x"$1" = x"-l" ]; then
525 msg "Invalid location!"
526 msg "Possible locations for the -l option:"
527 msg " nl (Netherlands, run by merlijn)"
528 msg " de (Germany, run by divVerent)"
529 msg " us (United States of America, run by detrate)"
530 msg " best (find automatically)"
531 msg " default (currently nl)"
545 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
546 git config xonotic.all.mirrorselection done
553 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
557 base=git://git.xonotic.org/xonotic/
560 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
563 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
581 *://*.git.xonotic.org/*)
582 location=${base%%.git.xonotic.org/*}
583 location=${location##*://}
591 if [ -n "$location" ]; then
592 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
593 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
595 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
596 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
600 pushurl=`repopushurl .`
601 fix_git_config "$url" "$pushurl"
603 if $allow_pull || $fix_config; then
608 pushurl=`repopushurl "$d"`
609 branch=`repobranch "$d"`
610 if [ -d "$d0/$d" ]; then
612 enter "$d0/$d" verbose
613 r=`git symbolic-ref HEAD`
615 if git config branch.$r.remote >/dev/null 2>&1; then
616 if ! verbose git pull; then
617 fix_upstream_rebase_mergefail || true
618 check_mergeconflict "$d"
619 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
622 fix_upstream_rebase_mergeok || true
627 checkself "$cmd" "$@"
629 verbose git remote prune origin
633 verbose git clone "$url" "$d0/$d"
634 enter "$d0/$d" verbose
635 fix_git_config "$url" "$pushurl"
636 if [ "$branch" != "master" ]; then
637 verbose git checkout --track -b "$branch" origin/"$branch"
644 misc/tools/xonotic-map-compiler-autobuild download
648 if [ x"$1" = x"-f" ]; then
654 if [ -z "$branch" ]; then
657 branch=${remote#origin/}
666 if [ -n "$checkoutflags" ]; then
667 set -- -f "$@" # to make checkself work again
671 enter "$d0/$d" verbose
673 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
675 verbose git checkout $checkoutflags "$b"
676 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
678 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
681 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
683 verbose git checkout $checkoutflags "$b"
684 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
686 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
688 $ECHO "WTF? Not even branch $b doesn't exist in $d"
693 checkself "$cmd" "$@"
697 $ECHO "The requested branch was not found in any repository."
705 if [ -z "$branch" ]; then
709 if [ -z "$branch" ]; then
712 r=`git symbolic-ref HEAD`
719 dv=`visible_repo_name "$d"`
720 enter "$d0/$d" verbose
721 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
722 $ECHO "Already having this branch in $dv."
724 if yesno "Branch in $dv?"; then
725 if [ -n "$srcbranch" ]; then
728 b=origin/"`repobranch "$d"`"
729 verbose git fetch origin || true
731 # TODO do this without pushing
732 verbose git checkout -b "$branch" "$b"
733 verbose git config "branch.$branch.remote" "$remote"
734 verbose git config "branch.$branch.merge" "refs/heads/$branch"
744 cd "$d0/$d" # am in a pipe, shouldn't use enter
745 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
750 while read -r d BRANCH REV TEXT; do
751 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
754 if [ x"$REV" = x"->" ]; then
757 BRANCH=${BRANCH#remotes/}
758 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
759 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
760 eval "r=\$branches_repos_$ID"
762 eval "branches_repos_$ID=\$r"
764 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
765 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
766 eval "r=\$branches_repos_$ID"
767 printf "%-60s %s\n" "$BRANCH" "$r"
774 dv=`visible_repo_name "$d"`
775 enter "$d0/$d" verbose
776 r=`git symbolic-ref HEAD`
778 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
779 # we have uncommitted changes
780 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
781 if ! verbose git merge origin/"`repobranch "$d"`"; then
782 check_mergeconflict "$d"
783 exit 1 # this should ALWAYS be fatal
793 dv=`visible_repo_name "$d"`
794 enter "$d0/$d" verbose
795 r=`git symbolic-ref HEAD`
797 diffdata=`git diff --color HEAD`
798 if [ -n "$diffdata" ]; then
799 # we have uncommitted changes
800 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
801 verbose git commit -a
804 rem=`git config "branch.$r.remote" || $ECHO origin`
805 bra=`git config "branch.$r.merge" || $ECHO "$r"`
806 upstream="$rem/${bra#refs/heads/}"
807 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
808 upstream="origin/`repobranch "$d"`"
810 logdata=`git log --color "$upstream".."$r"`
811 if [ -n "$logdata" ]; then
812 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
813 verbose git push "$rem" HEAD
816 if [ x"$submit" = x"-s" ]; then
819 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
833 snowleopardhack=false
834 if [ -z "$CC" ]; then
835 export CC="gcc -DSUPPORTIPV6"
853 case "`$CC -dumpversion`" in
854 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
856 # -march=native is broken < 4.3
857 export CC="$CC -mtune=native -march=native"
860 if [ -n "$WE_HATE_OUR_USERS" ]; then
861 export CC="$CC -fno-common"
870 if [ -n "$WE_HATE_OUR_USERS" ]; then
871 TARGETS="sv-$debug cl-$debug"
872 elif [ x"`uname`" = x"Darwin" ]; then
875 TARGETS="sv-$debug cl-$debug sdl-$debug"
878 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
880 TARGETS="sv-$debug sdl-$debug"
883 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"
885 TARGETS="sv-$debug cl-$debug sdl-$debug"
887 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
888 # if we give the command make the arg "", it will surely fail (invalid filename),
889 # so better handle it as an empty client option
892 elif [ -n "$1" ]; then
894 TARGETS_SAVE=$TARGETS
899 TARGETS="$TARGETS sdl-debug"
902 TARGETS="$TARGETS cl-debug"
903 if $snowleopardhack; then
904 export CC="$CC -arch i386"
908 TARGETS="$TARGETS cl-debug"
911 TARGETS="$TARGETS sv-debug"
914 BAD_TARGETS="$BAD_TARGETS $X"
918 if [ -n "$TARGETS" ]; then # at least a valid client
920 else # no valid client, let's assume this option is not meant to be a client then
921 TARGETS=$TARGETS_SAVE
925 if [ -z "$MAKEFLAGS" ]; then
926 if [ -f /proc/cpuinfo ]; then
927 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
928 if [ $ncpus -gt 1 ]; then
932 if [ -n "$WE_HATE_OUR_USERS" ]; then
933 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
937 enter "$d0/d0_blind_id" verbose
938 if ! $compiled0; then
939 # compilation of crypto library failed
940 # use binaries then, if we can...
942 if [ -n "$WE_HATE_OUR_USERS" ]; then
943 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
944 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
945 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
951 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
952 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
953 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
954 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
957 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
958 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
959 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
960 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
968 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
969 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
979 if [ -f Makefile ]; then
980 verbose make $MAKEFLAGS distclean
983 if ! [ -f Makefile ]; then
984 verbose sh autogen.sh
987 verbose make $MAKEFLAGS
990 enter "$d0/fteqcc" verbose
992 verbose make $MAKEFLAGS clean
994 verbose make $MAKEFLAGS
996 enter "$d0/data/xonotic-data.pk3dir" verbose
998 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1000 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1001 # 4 levels up: data, xonotic-data, qcsrc, server
1003 enter "$d0/darkplaces" verbose
1004 if [ x"$BAD_TARGETS" = x" " ]; then
1005 $ECHO "Warning: invalid empty client, default clients will be used."
1008 verbose make $MAKEFLAGS clean
1010 for T in $TARGETS; do
1011 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1013 for T in $BAD_TARGETS; do
1014 $ECHO "Warning: discarded invalid client $T."
1017 verbose "$SELF" update-maps
1020 if [ -n "$WE_HATE_OUR_USERS" ]; then
1022 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1023 elif [ x"`uname`" = x"Darwin" ]; then
1024 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1025 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
1028 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1032 sdl|glx|agl|dedicated)
1041 if ! [ -x "darkplaces/darkplaces$client" ]; then
1042 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1045 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1049 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1051 # if pulseaudio is running: USE IT
1052 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1053 if ps -C pulseaudio >/dev/null; then
1054 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1055 export SDL_AUDIODRIVER=pulse
1062 if [ x"$USE_GDB" = x"yes" ]; then
1063 set -- gdb --args "$@"
1064 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1065 set -- gdb --batch -x savecore.gdb --args "$@"
1066 elif which catchsegv >/dev/null 2>&1; then
1067 set -- catchsegv "$@"
1071 if [ -f xonotic.core ]; then
1072 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1073 gdb "$binary" xonotic.core
1074 #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
1075 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1077 # rm -f xonotic.core.tar.gz
1079 $ECHO "The core dump can be examined later by"
1080 $ECHO " gdb $binary xonotic.core"
1087 if [ x"$1" = x"-k" ]; then
1092 if verbose cd "$d0/$d"; then
1093 if $keep_going; then
1094 verbose "$@" || true
1104 patchdir=`mktemp -d -t save-patches.XXXXXX`
1106 enter "$d0/$d" verbose
1107 git branch -v -v | cut -c 3- | {
1109 while read -r BRANCH REV UPSTREAM TEXT; do
1112 UPSTREAM=${UPSTREAM#\[}
1113 UPSTREAM=${UPSTREAM%\]}
1114 UPSTREAM=${UPSTREAM%:*}
1118 UPSTREAM=origin/"`repobranch "$d"`"
1122 if [ x"$REV" = x"->" ]; then
1125 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1126 $ECHO "$d" > "$patchdir/$i/info.txt"
1127 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1128 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1129 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1132 rm -rf "$patchdir/$i"
1137 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1142 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1143 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1145 for P in "$patchdir"/*/info.txt; do
1150 read -r UPSTREAM <&3
1152 verbose git checkout HEAD^0
1153 verbose git branch -D "$BRANCH"
1154 if [ x"$TRACK" = x"true" ]; then
1155 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1157 verbose git branch -b "$BRANCH" "$UPSTREAM"
1176 report=$report"$*$LF"
1181 report=$report" $*$LF"
1186 o=`"$@" | sed 's/^/ /' || true`
1192 # sorry, fteqcc repo is managed manually
1196 enter "$d0/$d" verbose
1197 base="`repobranch "$d"`"
1199 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1200 case "${ref#refs/remotes/origin/}" in
1213 if [ -n "$branch" ]; then
1214 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1223 l0=`git rev-list "$base".."$ref" | wc -l`
1224 l1=`git rev-list master.."$ref" | wc -l`
1225 if [ $l0 -gt $l1 ]; then
1232 reportecho " Branch $ref:"
1233 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1234 logdata=`git log --color "$realbase".."$ref"`
1235 if [ -z "$logdata" ]; then
1236 reportecho4 "--> not merging, no changes vs master"
1237 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1238 git push origin :"${ref#refs/remotes/origin/}"
1239 reportecho4 "--> branch deleted"
1242 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1243 if [ -z "$diffdata" ]; then
1244 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1245 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1246 git push origin :"${ref#refs/remotes/origin/}"
1247 reportecho4 "--> branch deleted"
1249 elif $only_delete; then
1250 reportecho4 "--> skipped in delete-only run"
1251 elif [ -z "$branch" ] && [ -n "$note" ]; then
1252 reportdo4 $ECHO "$note"
1253 reportecho4 "--> not merging, already had this one rejected before"
1254 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1255 git checkout "$realbase"
1256 org=`git rev-parse HEAD`
1257 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1258 git reset --hard "$org"
1259 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1261 reportecho4 "--> merge failed"
1262 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1263 git reset --hard "$org"
1264 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1266 reportecho4 "--> compile failed"
1267 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1268 git reset --hard "$org"
1269 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1270 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1271 if [ x"$note" = x"del" ]; then
1272 git push origin :"${ref#refs/remotes/origin/}"
1273 reportecho4 "--> test failed, branch deleted"
1274 elif [ -n "$note" ]; then
1275 reportdo4 $ECHO "$note"
1276 reportecho4 "--> test failed"
1278 reportecho4 "--> test failed, postponed"
1281 # apply crlf, or other cleanup filters (non-behavioural changes)
1283 find . -type f -exec touch {} \;
1284 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1287 case ",`repoflags "$d"`," in
1289 # we do quite a mess here... luckily we know $org
1290 git fetch # svn needs to be current
1291 git rebase -i --onto origin/master "$org"
1292 git svn dcommit --add-author-from
1293 git reset --hard "$org"
1296 git push origin HEAD
1299 reportecho4 "--> MERGED"
1300 if yesno "Delete original branch \"$ref\"?"; then
1301 git push origin :"${ref#refs/remotes/origin/}"
1302 reportecho4 "--> branch deleted"
1306 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1307 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1308 if [ x"$note" = x"del" ]; then
1309 git push origin :"${ref#refs/remotes/origin/}"
1310 reportecho4 "--> branch deleted"
1311 elif [ -n "$note" ]; then
1312 reportdo4 $ECHO "$note"
1313 reportecho4 "--> rejected"
1315 reportecho4 "--> postponed"
1324 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1336 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1337 # ./all clean --reclone
1340 if [ x"$X" = x"--reclone" ]; then
1347 elif [ x"$X" = x"-f" ]; then
1349 elif [ x"$X" = x"-u" ]; then
1351 elif [ x"$X" = x"-U" ]; then
1354 elif [ x"$X" = x"-fu" ]; then
1357 elif [ x"$X" = x"-fU" ]; then
1361 elif [ x"$X" = x"-m" ]; then
1363 elif [ x"$X" = x"-r" ]; then
1365 elif [ x"$X" = x"-D" ]; then
1367 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1370 msg " ,--'-\\P/\`\\ FFFFFFF"
1371 msg " __/_ B/,-.\\ FFFFFFF"
1372 msg " / _\\ (// O\\\\ FFFFFF"
1373 msg "| (O \`) _\\._ _)\\ FFFUU"
1374 msg "| |___/.^d0~~\"\\ \\ UUUU"
1375 msg "| |\`~' \\ | UUUU"
1376 msg "| | __,C>|| UUUU"
1377 msg "\\ /_ ,-/,-' | UUUU"
1378 msg " \\\\_ \\_>~' / UUUU-"
1381 msg "Unknown arg: $X"
1390 if $gotoupstream; then
1392 msg "Must also use -f (delete local changes) when using -u"
1395 if $gotomaster; then
1396 if $fetchupstream; then
1397 verbose git fetch origin
1398 verbose git remote prune origin
1400 verbose git checkout -f "`repobranch "$d"`"
1401 verbose git reset --hard origin/"`repobranch "$d"`"
1403 r=`git symbolic-ref HEAD`
1405 rem=`git config "branch.$r.remote" || $ECHO origin`
1406 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1407 upstream="$rem/${bra#refs/heads/}"
1408 if $fetchupstream; then
1409 verbose git fetch "$rem"
1410 verbose git remote prune "$rem"
1412 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1413 upstream="origin/`repobranch "$d"`"
1415 verbose git reset --hard "$upstream"
1417 elif $gotomaster; then
1419 verbose git checkout -f "`repobranch "$d"`"
1420 verbose git reset --hard
1422 verbose git checkout "`repobranch "$d"`"
1425 verbose git reset --hard
1427 if $rmuntracked; then
1430 verbose git clean -df || true
1433 verbose git clean -xdf || true
1437 if $killbranches; then
1438 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1439 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1440 verbose git branch -D "${B#refs/heads/}"
1443 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1444 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1446 checkself "$cmd" "$@"
1450 # release building goes here
1452 #"$SELF" each git clean -fxd
1453 case "$RELEASETYPE" in
1455 $ECHO >&2 -n "$ESC[2J$ESC[H"
1462 msg " +---------------------------------------------------------.---+"
1464 msg " +---------------------------------------------------------^---+"
1466 msg " | / \ This is the official release build system. |"
1467 msg " | | | If you are not a member of the Xonotic Core Team, |"
1468 msg " | | STOP | you are not supposed to use this script and should |"
1469 msg " | | | instead use ./all compile to compile the engine |"
1470 msg " | \____/ and game code. |"
1472 msg " | [ I understand ] |"
1473 msg " +-------------------------------------------------------------+"
1475 # A LOT of build infrastructure is required:
1478 # - .ssh/config must be configured so the following
1479 # host names are reachable and have a compile
1480 # infrastructure set up:
1481 # - xonotic-build-linux32 (with gcc on x86)
1482 # - xonotic-build-linux64 (with gcc on x86_64)
1483 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1484 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1485 # and x86_64-w64-mingw32-g++)
1486 # - xonotic-build-osx (with Xcode and SDL.framework)
1487 # - AMD Compressonator installed in WINE
1488 # - ResEdit installed in WINE
1489 # - a lot of other requirements you will figure out
1490 # while reading the error messages
1491 # - environment variable RELEASETYPE set
1492 # - optionally, environment variable RELEASEDATE set
1497 msg "Building a FINISHED RELEASE"
1500 msg "Building a $RELEASETYPE"
1503 verbose rm -rf Xonotic Xonotic*.zip
1504 verbose mkdir -p Xonotic
1505 if [ -n "$RELEASEDATE" ]; then
1506 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1508 verbose date +%Y%m%d > Xonotic/stamp.txt
1510 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1512 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1514 verbose rm -rf misc/builddeps
1515 verbose mv misc/buildfiles/win32/* . || true
1516 verbose mv misc/buildfiles/win64 bin64 || true
1517 verbose mv misc/buildfiles/osx/* . || true
1518 verbose rm -rf misc/buildfiles
1519 verbose rm -rf misc/pki
1522 verbose cd darkplaces
1523 verbose git archive --format=tar HEAD
1525 verbose cd Xonotic/source/darkplaces
1530 verbose git archive --format=tar HEAD
1532 verbose cd Xonotic/source/fteqcc
1536 verbose cd data/xonotic-data.pk3dir
1537 verbose git archive --format=tar HEAD -- qcsrc Makefile
1539 verbose cd Xonotic/source
1543 verbose cd d0_blind_id
1544 verbose git archive --format=tar HEAD
1546 verbose cd Xonotic/source/d0_blind_id
1548 verbose sh autogen.sh
1550 rm -f Xonotic/key_15.d0pk
1552 verbose cd Xonotic/mapping
1553 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223.tar.bz2
1554 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223-win32-7z.exe
1555 for X in *-7z.exe; do
1559 # TODO possibly include other tools?
1562 release-compile-run)
1571 if [ -n "$targetfiles" ]; then
1572 case " $HOSTS_THAT_ARE_DISABLED " in
1577 case " $HOSTS_THAT_ARE_MYSELF " in
1579 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1580 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1581 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1582 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1583 for f in $targetfiles; do
1584 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1588 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1589 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1590 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1591 for f in $targetfiles; do
1592 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1596 # now rebrand the binaries...
1597 for f in $targetfiles; do
1598 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1600 Xonotic/xonotic*.exe)
1601 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1603 d=`mktemp -d -t rebrand.XXXXXX`
1605 $ECHO "-mygames" > darkplaces.opt
1606 zip -9r darkplaces.zip darkplaces.opt
1619 fteqcc_maketargets=$3
1621 darkplaces_maketargets=$5
1623 host=xonotic-build-$suffix
1624 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1625 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1627 release-engine-win32)
1628 verbose "$SELF" release-compile win32 \
1629 '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' \
1630 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1632 verbose "$SELF" release-compile win32 \
1633 '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' \
1635 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1637 release-engine-win64)
1638 verbose "$SELF" release-compile win64 \
1639 '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' \
1640 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1641 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1642 verbose "$SELF" release-compile win64 \
1643 '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' \
1645 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1648 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1649 verbose "$SELF" release-compile osx \
1650 '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"' \
1651 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1652 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1653 verbose "$SELF" release-compile osx \
1654 '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"' \
1656 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1658 release-engine-linux32)
1659 verbose "$SELF" release-compile linux32 \
1660 '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' \
1661 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1662 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1664 release-engine-linux64)
1665 verbose "$SELF" release-compile linux64 \
1666 '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' \
1667 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1668 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1671 verbose "$SELF" release-engine-linux32 &
1672 verbose "$SELF" release-engine-linux64 &
1673 verbose "$SELF" release-engine-win32 &
1674 verbose "$SELF" release-engine-win64 &
1675 verbose "$SELF" release-engine-osx &
1684 verbose "$SELF" update-maps
1687 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1688 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1690 release-buildpk3-transform-raw)
1693 release-buildpk3-transform-normal)
1696 # texture: convert to jpeg and dds
1697 verbose export do_jpeg=true
1698 verbose export jpeg_qual_rgb=97
1699 verbose export jpeg_qual_a=99
1700 verbose export do_dds=false
1701 verbose export do_ogg=false
1702 verbose export del_src=true
1703 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1705 release-buildpk3-transform-normaldds)
1708 # texture: convert to jpeg and dds
1709 # music: reduce bitrate
1710 verbose export do_jpeg=false
1711 verbose export do_jpeg_if_not_dds=true
1712 verbose export jpeg_qual_rgb=95
1713 verbose export jpeg_qual_a=99
1714 verbose export do_dds=true
1715 verbose export dds_flags=
1716 verbose export do_ogg=true
1717 verbose export del_src=true
1718 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1720 release-buildpk3-transform-low)
1723 # texture: convert to jpeg and dds
1724 # music: reduce bitrate
1725 verbose export do_jpeg=true
1726 verbose export jpeg_qual_rgb=80
1727 verbose export jpeg_qual_a=97
1728 verbose export do_dds=false
1729 verbose export do_ogg=true
1730 verbose export ogg_qual=1
1731 verbose export del_src=true
1732 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1734 release-buildpk3-transform-lowdds)
1737 # texture: convert to jpeg and dds
1738 # music: reduce bitrate
1739 verbose export do_jpeg=false
1740 verbose export do_jpeg_if_not_dds=true
1741 verbose export jpeg_qual_rgb=80
1742 verbose export jpeg_qual_a=99
1743 verbose export do_dds=true
1744 verbose export dds_flags=
1745 verbose export do_ogg=true
1746 verbose export ogg_qual=1
1747 verbose export del_src=true
1748 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1761 verbose rm -rf Xonotic/temp
1762 verbose mkdir -p Xonotic/temp
1765 verbose git archive --format=tar HEAD
1767 verbose cd Xonotic/temp
1770 verbose cd Xonotic/temp
1771 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1772 verbose cp ../source/progs.dat .
1773 verbose cp ../source/csprogs.dat .
1774 verbose cp ../source/menu.dat .
1775 verbose rm -rf qcsrc
1776 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1777 major=$(($gv / 10000))
1778 minor=$((($gv / 100) - ($major * 100)))
1779 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1780 versionstr="$major.$minor.$patch"
1781 case "$RELEASETYPE" in
1785 versionstr="$versionstr$RELEASETYPE"
1789 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1790 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1791 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1792 " defaultXonotic.cfg
1793 case "$RELEASETYPE" in
1795 echo "" >> defaultXonotic.cfg
1796 echo "// nicer menu" >> defaultXonotic.cfg
1797 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1801 verbose cd gfx/menu/luminos
1802 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1803 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1804 verbose rm background_l2.svg
1807 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1808 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1809 if [ -f "$X" ]; then
1811 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1815 verbose export git_src_repo="$d0/$src" # skip hash-object
1816 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1817 verbose mkzip "../../$dst" *
1819 verbose rm -rf Xonotic/temp
1822 stamp=`cat Xonotic/stamp.txt`
1828 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1834 while [ "$#" -gt 1 ]; do
1835 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1841 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1842 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1843 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1844 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
1845 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1846 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
1848 release-pack-needsx11)
1851 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1854 verbose "$SELF" release-pack
1859 stamp=`cat Xonotic/stamp.txt`
1860 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1861 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1862 # let's pass crypto import laws of some nasty countries
1863 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
1864 if [ -n "$crypto_libs" ]; then
1865 verbose mkzip Xonotic-$stamp-crypto.zip \
1869 # build the archives
1870 verbose mkzip Xonotic-$stamp-engine.zip \
1872 Xonotic/bin64/*.dll \
1875 Xonotic/xonotic.exe \
1876 Xonotic/source/darkplaces/
1877 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1878 verbose mkzip Xonotic-$stamp-common.zip \
1879 Xonotic/source/fteqcc/ \
1880 Xonotic/source/qcsrc/ \
1885 Xonotic/key_0.d0pk \
1886 Xonotic/data/font-nimbussansl-$stamp.pk3 \
1887 Xonotic/data/font-xolonium-$stamp.pk3
1888 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1889 verbose mkzip0 Xonotic-$stamp.zip \
1890 Xonotic/data/xonotic-$stamp-data.pk3 \
1891 Xonotic/data/xonotic-$stamp-maps.pk3 \
1892 Xonotic/data/xonotic-$stamp-music.pk3 \
1893 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1894 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1895 verbose mkzip0 Xonotic-$stamp-low.zip \
1896 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1897 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1898 Xonotic/data/xonotic-$stamp-music-low.pk3
1899 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1900 verbose mkzip0 Xonotic-$stamp-high.zip \
1901 Xonotic/data/xonotic-$stamp-data-high.pk3 \
1902 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
1903 Xonotic/data/xonotic-$stamp-music.pk3 \
1904 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
1905 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
1907 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
1908 Xonotic/data/xonotic-$stamp-maps-low.pk3 # TODO add a Radiant build
1911 verbose "$SELF" release-prepare
1912 verbose "$SELF" release-maps
1913 verbose "$SELF" release-engine
1914 verbose "$SELF" release-qc
1915 verbose "$SELF" release-pack-needsx11
1916 verbose "$SELF" release-zip
1921 $ECHO " $SELF admin-merge [<branch>]"
1922 $ECHO " $SELF branch <branch>"
1923 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1924 $ECHO " $SELF branches"
1925 $ECHO " $SELF checkout|switch <branch>"
1926 $ECHO " $SELF checkout|switch <remote>/<branch>"
1927 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1928 $ECHO " $SELF clean --reclone"
1929 $ECHO " $SELF compile [-c] [-r] [-0]"
1930 $ECHO " $SELF each|foreach [-k] command..."
1931 $ECHO " $SELF fix_upstream_rebase"
1932 $ECHO " $SELF keygen"
1933 $ECHO " $SELF merge"
1934 $ECHO " $SELF push|commit [-s]"
1935 $ECHO " $SELF release"
1936 $ECHO " $SELF restore-patches"
1937 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1938 $ECHO " $SELF save-patches"
1939 $ECHO " $SELF update-maps"
1940 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"