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 $d.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
611 # if we have .no file, skip
612 if [ -f "$d0/$d.no" ]; then
613 msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
617 enter "$d0/$d" verbose
618 r=`git symbolic-ref HEAD`
620 if git config branch.$r.remote >/dev/null 2>&1; then
621 if ! verbose git pull; then
622 fix_upstream_rebase_mergefail || true
623 check_mergeconflict "$d"
624 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
627 fix_upstream_rebase_mergeok || true
632 checkself "$cmd" "$@"
634 verbose git remote prune origin
638 verbose git clone "$url" "$d0/$d"
639 enter "$d0/$d" verbose
640 fix_git_config "$url" "$pushurl"
641 if [ "$branch" != "master" ]; then
642 verbose git checkout --track -b "$branch" origin/"$branch"
649 misc/tools/xonotic-map-compiler-autobuild download
653 if [ x"$1" = x"-f" ]; then
659 if [ -z "$branch" ]; then
662 branch=${remote#origin/}
671 if [ -n "$checkoutflags" ]; then
672 set -- -f "$@" # to make checkself work again
676 enter "$d0/$d" verbose
678 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
680 verbose git checkout $checkoutflags "$b"
681 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
683 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
686 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
688 verbose git checkout $checkoutflags "$b"
689 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
691 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
693 $ECHO "WTF? Not even branch $b doesn't exist in $d"
698 checkself "$cmd" "$@"
702 $ECHO "The requested branch was not found in any repository."
710 if [ -z "$branch" ]; then
714 if [ -z "$branch" ]; then
717 r=`git symbolic-ref HEAD`
724 dv=`visible_repo_name "$d"`
725 enter "$d0/$d" verbose
726 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
727 $ECHO "Already having this branch in $dv."
729 if yesno "Branch in $dv?"; then
730 if [ -n "$srcbranch" ]; then
733 b=origin/"`repobranch "$d"`"
734 verbose git fetch origin || true
736 # TODO do this without pushing
737 verbose git checkout -b "$branch" "$b"
738 verbose git config "branch.$branch.remote" "$remote"
739 verbose git config "branch.$branch.merge" "refs/heads/$branch"
749 cd "$d0/$d" # am in a pipe, shouldn't use enter
750 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
755 while read -r d BRANCH REV TEXT; do
756 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
759 if [ x"$REV" = x"->" ]; then
762 BRANCH=${BRANCH#remotes/}
763 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
764 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
765 eval "r=\$branches_repos_$ID"
767 eval "branches_repos_$ID=\$r"
769 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
770 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
771 eval "r=\$branches_repos_$ID"
772 printf "%-60s %s\n" "$BRANCH" "$r"
779 dv=`visible_repo_name "$d"`
780 enter "$d0/$d" verbose
781 r=`git symbolic-ref HEAD`
783 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
784 # we have uncommitted changes
785 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
786 if ! verbose git merge origin/"`repobranch "$d"`"; then
787 check_mergeconflict "$d"
788 exit 1 # this should ALWAYS be fatal
798 dv=`visible_repo_name "$d"`
799 enter "$d0/$d" verbose
800 r=`git symbolic-ref HEAD`
802 diffdata=`git diff --color HEAD`
803 if [ -n "$diffdata" ]; then
804 # we have uncommitted changes
805 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
806 verbose git commit -a
809 rem=`git config "branch.$r.remote" || $ECHO origin`
810 bra=`git config "branch.$r.merge" || $ECHO "$r"`
811 upstream="$rem/${bra#refs/heads/}"
812 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
813 upstream="origin/`repobranch "$d"`"
815 logdata=`git log --color "$upstream".."$r"`
816 if [ -n "$logdata" ]; then
817 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
818 verbose git push "$rem" HEAD
821 if [ x"$submit" = x"-s" ]; then
824 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
838 snowleopardhack=false
839 if [ -z "$CC" ]; then
840 export CC="gcc -DSUPPORTIPV6"
858 case "`$CC -dumpversion`" in
859 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
861 # -march=native is broken < 4.3
862 export CC="$CC -mtune=native -march=native"
865 if [ -n "$WE_HATE_OUR_USERS" ]; then
866 export CC="$CC -fno-common"
875 if [ -n "$WE_HATE_OUR_USERS" ]; then
876 TARGETS="sv-$debug cl-$debug"
877 elif [ x"`uname`" = x"Darwin" ]; then
880 TARGETS="sv-$debug cl-$debug sdl-$debug"
883 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
885 TARGETS="sv-$debug sdl-$debug"
888 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"
890 TARGETS="sv-$debug cl-$debug sdl-$debug"
892 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
893 # if we give the command make the arg "", it will surely fail (invalid filename),
894 # so better handle it as an empty client option
897 elif [ -n "$1" ]; then
899 TARGETS_SAVE=$TARGETS
904 TARGETS="$TARGETS sdl-debug"
907 TARGETS="$TARGETS cl-debug"
908 if $snowleopardhack; then
909 export CC="$CC -arch i386"
913 TARGETS="$TARGETS cl-debug"
916 TARGETS="$TARGETS sv-debug"
919 BAD_TARGETS="$BAD_TARGETS $X"
923 if [ -n "$TARGETS" ]; then # at least a valid client
925 else # no valid client, let's assume this option is not meant to be a client then
926 TARGETS=$TARGETS_SAVE
930 if [ -z "$MAKEFLAGS" ]; then
931 if [ -f /proc/cpuinfo ]; then
932 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
933 if [ $ncpus -gt 1 ]; then
937 if [ -n "$WE_HATE_OUR_USERS" ]; then
938 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
942 verbose cd "$d0/d0_blind_id"
943 if ! $compiled0; then
944 # compilation of crypto library failed
945 # use binaries then, if we can...
947 if [ -n "$WE_HATE_OUR_USERS" ]; then
948 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
949 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
950 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
956 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
957 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
958 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
959 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
962 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
963 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
964 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
965 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
973 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
974 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
984 if [ -f Makefile ]; then
985 verbose make $MAKEFLAGS distclean
988 if ! [ -f Makefile ]; then
989 verbose sh autogen.sh
992 verbose make $MAKEFLAGS
995 verbose cd "$d0/fteqcc"
997 verbose make $MAKEFLAGS clean
999 verbose make $MAKEFLAGS
1001 verbose cd "$d0/data/xonotic-data.pk3dir"
1003 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1005 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1006 # 4 levels up: data, xonotic-data, qcsrc, server
1008 verbose cd "$d0/darkplaces"
1009 if [ x"$BAD_TARGETS" = x" " ]; then
1010 $ECHO "Warning: invalid empty client, default clients will be used."
1013 verbose make $MAKEFLAGS clean
1015 for T in $TARGETS; do
1016 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1018 for T in $BAD_TARGETS; do
1019 $ECHO "Warning: discarded invalid client $T."
1022 verbose "$SELF" update-maps
1025 if [ -n "$WE_HATE_OUR_USERS" ]; then
1027 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1028 elif [ x"`uname`" = x"Darwin" ]; then
1029 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1030 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
1033 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1037 sdl|glx|agl|dedicated)
1046 if ! [ -x "darkplaces/darkplaces$client" ]; then
1047 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1050 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1054 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
1056 # if pulseaudio is running: USE IT
1057 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1058 if ps -C pulseaudio >/dev/null; then
1059 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1060 export SDL_AUDIODRIVER=pulse
1067 if [ x"$USE_GDB" = x"yes" ]; then
1068 set -- gdb --args "$@"
1069 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1070 set -- gdb --batch -x savecore.gdb --args "$@"
1071 elif which catchsegv >/dev/null 2>&1; then
1072 set -- catchsegv "$@"
1076 if [ -f xonotic.core ]; then
1077 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1078 gdb "$binary" xonotic.core
1079 #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
1080 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1082 # rm -f xonotic.core.tar.gz
1084 $ECHO "The core dump can be examined later by"
1085 $ECHO " gdb $binary xonotic.core"
1092 if [ x"$1" = x"-k" ]; then
1097 if verbose cd "$d0/$d"; then
1098 if $keep_going; then
1099 verbose "$@" || true
1109 patchdir=`mktemp -d -t save-patches.XXXXXX`
1111 enter "$d0/$d" verbose
1112 git branch -v -v | cut -c 3- | {
1114 while read -r BRANCH REV UPSTREAM TEXT; do
1117 UPSTREAM=${UPSTREAM#\[}
1118 UPSTREAM=${UPSTREAM%\]}
1119 UPSTREAM=${UPSTREAM%:*}
1123 UPSTREAM=origin/"`repobranch "$d"`"
1127 if [ x"$REV" = x"->" ]; then
1130 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1131 $ECHO "$d" > "$patchdir/$i/info.txt"
1132 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1133 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1134 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1137 rm -rf "$patchdir/$i"
1142 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1147 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1148 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1150 for P in "$patchdir"/*/info.txt; do
1155 read -r UPSTREAM <&3
1157 verbose git checkout HEAD^0
1158 verbose git branch -D "$BRANCH"
1159 if [ x"$TRACK" = x"true" ]; then
1160 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1162 verbose git branch -b "$BRANCH" "$UPSTREAM"
1181 report=$report"$*$LF"
1186 report=$report" $*$LF"
1191 o=`"$@" | sed 's/^/ /' || true`
1197 # sorry, fteqcc repo is managed manually
1201 enter "$d0/$d" verbose
1202 base="`repobranch "$d"`"
1204 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1205 case "${ref#refs/remotes/origin/}" in
1218 if [ -n "$branch" ]; then
1219 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1228 l0=`git rev-list "$base".."$ref" | wc -l`
1229 l1=`git rev-list master.."$ref" | wc -l`
1230 if [ $l0 -gt $l1 ]; then
1237 reportecho " Branch $ref:"
1238 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1239 logdata=`git log --color "$realbase".."$ref"`
1240 if [ -z "$logdata" ]; then
1241 reportecho4 "--> not merging, no changes vs master"
1242 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1243 git push origin :"${ref#refs/remotes/origin/}"
1244 reportecho4 "--> branch deleted"
1247 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1248 if [ -z "$diffdata" ]; then
1249 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1250 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1251 git push origin :"${ref#refs/remotes/origin/}"
1252 reportecho4 "--> branch deleted"
1254 elif $only_delete; then
1255 reportecho4 "--> skipped in delete-only run"
1256 elif [ -z "$branch" ] && [ -n "$note" ]; then
1257 reportdo4 $ECHO "$note"
1258 reportecho4 "--> not merging, already had this one rejected before"
1259 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1260 git checkout "$realbase"
1261 org=`git rev-parse HEAD`
1262 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1263 git reset --hard "$org"
1264 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1266 reportecho4 "--> merge failed"
1267 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1268 git reset --hard "$org"
1269 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1271 reportecho4 "--> compile failed"
1272 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1273 git reset --hard "$org"
1274 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1275 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1276 if [ x"$note" = x"del" ]; then
1277 git push origin :"${ref#refs/remotes/origin/}"
1278 reportecho4 "--> test failed, branch deleted"
1279 elif [ -n "$note" ]; then
1280 reportdo4 $ECHO "$note"
1281 reportecho4 "--> test failed"
1283 reportecho4 "--> test failed, postponed"
1286 # apply crlf, or other cleanup filters (non-behavioural changes)
1288 find . -type f -exec touch {} \;
1289 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1292 case ",`repoflags "$d"`," in
1294 # we do quite a mess here... luckily we know $org
1295 git fetch # svn needs to be current
1296 git rebase -i --onto origin/master "$org"
1297 git svn dcommit --add-author-from
1298 git reset --hard "$org"
1301 git push origin HEAD
1304 reportecho4 "--> MERGED"
1305 if yesno "Delete original branch \"$ref\"?"; then
1306 git push origin :"${ref#refs/remotes/origin/}"
1307 reportecho4 "--> branch deleted"
1311 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1312 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1313 if [ x"$note" = x"del" ]; then
1314 git push origin :"${ref#refs/remotes/origin/}"
1315 reportecho4 "--> branch deleted"
1316 elif [ -n "$note" ]; then
1317 reportdo4 $ECHO "$note"
1318 reportecho4 "--> rejected"
1320 reportecho4 "--> postponed"
1329 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1341 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1342 # ./all clean --reclone
1345 if [ x"$X" = x"--reclone" ]; then
1352 elif [ x"$X" = x"-f" ]; then
1354 elif [ x"$X" = x"-u" ]; then
1356 elif [ x"$X" = x"-U" ]; then
1359 elif [ x"$X" = x"-fu" ]; then
1362 elif [ x"$X" = x"-fU" ]; then
1366 elif [ x"$X" = x"-m" ]; then
1368 elif [ x"$X" = x"-r" ]; then
1370 elif [ x"$X" = x"-D" ]; then
1372 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1375 msg " ,--'-\\P/\`\\ FFFFFFF"
1376 msg " __/_ B/,-.\\ FFFFFFF"
1377 msg " / _\\ (// O\\\\ FFFFFF"
1378 msg "| (O \`) _\\._ _)\\ FFFUU"
1379 msg "| |___/.^d0~~\"\\ \\ UUUU"
1380 msg "| |\`~' \\ | UUUU"
1381 msg "| | __,C>|| UUUU"
1382 msg "\\ /_ ,-/,-' | UUUU"
1383 msg " \\\\_ \\_>~' / UUUU-"
1386 msg "Unknown arg: $X"
1395 if $gotoupstream; then
1397 msg "Must also use -f (delete local changes) when using -u"
1400 if $gotomaster; then
1401 if $fetchupstream; then
1402 verbose git fetch origin
1403 verbose git remote prune origin
1405 verbose git checkout -f "`repobranch "$d"`"
1406 verbose git reset --hard origin/"`repobranch "$d"`"
1408 r=`git symbolic-ref HEAD`
1410 rem=`git config "branch.$r.remote" || $ECHO origin`
1411 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1412 upstream="$rem/${bra#refs/heads/}"
1413 if $fetchupstream; then
1414 verbose git fetch "$rem"
1415 verbose git remote prune "$rem"
1417 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1418 upstream="origin/`repobranch "$d"`"
1420 verbose git reset --hard "$upstream"
1422 elif $gotomaster; then
1424 verbose git checkout -f "`repobranch "$d"`"
1425 verbose git reset --hard
1427 verbose git checkout "`repobranch "$d"`"
1430 verbose git reset --hard
1432 if $rmuntracked; then
1435 verbose git clean -df || true
1438 verbose git clean -xdf || true
1442 if $killbranches; then
1443 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1444 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1445 verbose git branch -D "${B#refs/heads/}"
1448 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1449 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1451 checkself "$cmd" "$@"
1455 # release building goes here
1457 #"$SELF" each git clean -fxd
1458 case "$RELEASETYPE" in
1460 $ECHO >&2 -n "$ESC[2J$ESC[H"
1467 msg " +---------------------------------------------------------.---+"
1469 msg " +---------------------------------------------------------^---+"
1471 msg " | / \ This is the official release build system. |"
1472 msg " | | | If you are not a member of the Xonotic Core Team, |"
1473 msg " | | STOP | you are not supposed to use this script and should |"
1474 msg " | | | instead use ./all compile to compile the engine |"
1475 msg " | \____/ and game code. |"
1477 msg " | [ I understand ] |"
1478 msg " +-------------------------------------------------------------+"
1480 # A LOT of build infrastructure is required:
1483 # - .ssh/config must be configured so the following
1484 # host names are reachable and have a compile
1485 # infrastructure set up:
1486 # - xonotic-build-linux32 (with gcc on x86)
1487 # - xonotic-build-linux64 (with gcc on x86_64)
1488 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1489 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1490 # and x86_64-w64-mingw32-g++)
1491 # - xonotic-build-osx (with Xcode and SDL.framework)
1492 # - AMD Compressonator installed in WINE
1493 # - ResEdit installed in WINE
1494 # - a lot of other requirements you will figure out
1495 # while reading the error messages
1496 # - environment variable RELEASETYPE set
1497 # - optionally, environment variable RELEASEDATE set
1502 msg "Building a FINISHED RELEASE"
1505 msg "Building a $RELEASETYPE"
1508 verbose rm -rf Xonotic Xonotic*.zip
1509 verbose mkdir -p Xonotic
1510 if [ -n "$RELEASEDATE" ]; then
1511 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1513 verbose date +%Y%m%d > Xonotic/stamp.txt
1515 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1517 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1519 verbose rm -rf misc/builddeps
1520 verbose mv misc/buildfiles/win32/* . || true
1521 verbose mv misc/buildfiles/win64 bin64 || true
1522 verbose mv misc/buildfiles/osx/* . || true
1523 verbose rm -rf misc/buildfiles
1524 verbose rm -rf misc/pki
1527 verbose cd darkplaces
1528 verbose git archive --format=tar HEAD
1530 verbose cd Xonotic/source/darkplaces
1535 verbose git archive --format=tar HEAD
1537 verbose cd Xonotic/source/fteqcc
1541 verbose cd data/xonotic-data.pk3dir
1542 verbose git archive --format=tar HEAD -- qcsrc Makefile
1544 verbose cd Xonotic/source
1548 verbose cd d0_blind_id
1549 verbose git archive --format=tar HEAD
1551 verbose cd Xonotic/source/d0_blind_id
1553 verbose sh autogen.sh
1555 rm -f Xonotic/key_15.d0pk
1557 verbose cd Xonotic/mapping
1558 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223.tar.bz2
1559 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223-win32-7z.exe
1560 for X in *-7z.exe; do
1564 # TODO possibly include other tools?
1567 release-compile-run)
1576 if [ -n "$targetfiles" ]; then
1577 case " $HOSTS_THAT_ARE_DISABLED " in
1582 case " $HOSTS_THAT_ARE_MYSELF " in
1584 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1585 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1586 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1587 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1588 for f in $targetfiles; do
1589 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1593 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1594 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1595 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1596 for f in $targetfiles; do
1597 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1601 # now rebrand the binaries...
1602 for f in $targetfiles; do
1603 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1605 Xonotic/xonotic*.exe)
1606 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1608 d=`mktemp -d -t rebrand.XXXXXX`
1610 $ECHO "-mygames" > darkplaces.opt
1611 zip -9r darkplaces.zip darkplaces.opt
1624 fteqcc_maketargets=$3
1626 darkplaces_maketargets=$5
1628 host=xonotic-build-$suffix
1629 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1630 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1632 release-engine-win32)
1633 verbose "$SELF" release-compile win32 \
1634 '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' \
1635 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1637 verbose "$SELF" release-compile win32 \
1638 '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' \
1640 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1642 release-engine-win64)
1643 verbose "$SELF" release-compile win64 \
1644 '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' \
1645 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1646 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1647 verbose "$SELF" release-compile win64 \
1648 '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' \
1650 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1653 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1654 verbose "$SELF" release-compile osx \
1655 '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"' \
1656 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1657 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1658 verbose "$SELF" release-compile osx \
1659 '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"' \
1661 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1663 release-engine-linux32)
1664 verbose "$SELF" release-compile linux32 \
1665 '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' \
1666 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1667 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1669 release-engine-linux64)
1670 verbose "$SELF" release-compile linux64 \
1671 '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' \
1672 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1673 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1676 verbose "$SELF" release-engine-linux32 &
1677 verbose "$SELF" release-engine-linux64 &
1678 verbose "$SELF" release-engine-win32 &
1679 verbose "$SELF" release-engine-win64 &
1680 verbose "$SELF" release-engine-osx &
1689 verbose "$SELF" update-maps
1692 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1693 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1695 release-buildpk3-transform-raw)
1698 release-buildpk3-transform-normal)
1701 # texture: convert to jpeg and dds
1702 verbose export do_jpeg=true
1703 verbose export jpeg_qual_rgb=97
1704 verbose export jpeg_qual_a=99
1705 verbose export do_dds=false
1706 verbose export do_ogg=false
1707 verbose export del_src=true
1708 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1710 release-buildpk3-transform-normaldds)
1713 # texture: convert to jpeg and dds
1714 # music: reduce bitrate
1715 verbose export do_jpeg=false
1716 verbose export do_jpeg_if_not_dds=true
1717 verbose export jpeg_qual_rgb=95
1718 verbose export jpeg_qual_a=99
1719 verbose export do_dds=true
1720 verbose export dds_flags=
1721 verbose export do_ogg=true
1722 verbose export del_src=true
1723 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1725 release-buildpk3-transform-low)
1728 # texture: convert to jpeg and dds
1729 # music: reduce bitrate
1730 verbose export do_jpeg=true
1731 verbose export jpeg_qual_rgb=80
1732 verbose export jpeg_qual_a=97
1733 verbose export do_dds=false
1734 verbose export do_ogg=true
1735 verbose export ogg_qual=1
1736 verbose export del_src=true
1737 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1739 release-buildpk3-transform-lowdds)
1742 # texture: convert to jpeg and dds
1743 # music: reduce bitrate
1744 verbose export do_jpeg=false
1745 verbose export do_jpeg_if_not_dds=true
1746 verbose export jpeg_qual_rgb=80
1747 verbose export jpeg_qual_a=99
1748 verbose export do_dds=true
1749 verbose export dds_flags=
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
1766 verbose rm -rf Xonotic/temp
1767 verbose mkdir -p Xonotic/temp
1770 verbose git archive --format=tar HEAD
1772 verbose cd Xonotic/temp
1775 verbose cd Xonotic/temp
1776 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1777 verbose cp ../source/progs.dat .
1778 verbose cp ../source/csprogs.dat .
1779 verbose cp ../source/menu.dat .
1780 verbose rm -rf qcsrc
1781 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1782 major=$(($gv / 10000))
1783 minor=$((($gv / 100) - ($major * 100)))
1784 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1785 versionstr="$major.$minor.$patch"
1786 case "$RELEASETYPE" in
1790 versionstr="$versionstr$RELEASETYPE"
1794 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1795 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1796 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1797 " defaultXonotic.cfg
1798 case "$RELEASETYPE" in
1800 echo "" >> defaultXonotic.cfg
1801 echo "// nicer menu" >> defaultXonotic.cfg
1802 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1806 verbose cd gfx/menu/luminos
1807 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1808 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1809 verbose rm background_l2.svg
1812 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1813 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1814 if [ -f "$X" ]; then
1816 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1820 verbose export git_src_repo="$d0/$src" # skip hash-object
1821 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1822 verbose mkzip "../../$dst" *
1824 verbose rm -rf Xonotic/temp
1827 stamp=`cat Xonotic/stamp.txt`
1833 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1839 while [ "$#" -gt 1 ]; do
1840 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1846 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1847 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1848 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1849 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
1850 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1851 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
1853 release-pack-needsx11)
1856 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1859 verbose "$SELF" release-pack
1864 stamp=`cat Xonotic/stamp.txt`
1865 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1866 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1867 # let's pass crypto import laws of some nasty countries
1868 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
1869 if [ -n "$crypto_libs" ]; then
1870 verbose mkzip Xonotic-$stamp-crypto.zip \
1874 # build the archives
1875 verbose mkzip Xonotic-$stamp-engine.zip \
1877 Xonotic/bin64/*.dll \
1880 Xonotic/xonotic.exe \
1881 Xonotic/source/darkplaces/
1882 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1883 verbose mkzip Xonotic-$stamp-common.zip \
1884 Xonotic/source/fteqcc/ \
1885 Xonotic/source/qcsrc/ \
1890 Xonotic/key_0.d0pk \
1891 Xonotic/data/font-nimbussansl-$stamp.pk3 \
1892 Xonotic/data/font-xolonium-$stamp.pk3
1893 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1894 verbose mkzip0 Xonotic-$stamp.zip \
1895 Xonotic/data/xonotic-$stamp-data.pk3 \
1896 Xonotic/data/xonotic-$stamp-maps.pk3 \
1897 Xonotic/data/xonotic-$stamp-music.pk3 \
1898 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1899 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1900 verbose mkzip0 Xonotic-$stamp-low.zip \
1901 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1902 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1903 Xonotic/data/xonotic-$stamp-music-low.pk3
1904 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1905 verbose mkzip0 Xonotic-$stamp-high.zip \
1906 Xonotic/data/xonotic-$stamp-data-high.pk3 \
1907 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
1908 Xonotic/data/xonotic-$stamp-music.pk3 \
1909 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
1910 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
1912 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
1913 Xonotic/data/xonotic-$stamp-maps-low.pk3 # TODO add a Radiant build
1916 verbose "$SELF" release-prepare
1917 verbose "$SELF" release-maps
1918 verbose "$SELF" release-engine
1919 verbose "$SELF" release-qc
1920 verbose "$SELF" release-pack-needsx11
1921 verbose "$SELF" release-zip
1926 $ECHO " $SELF admin-merge [<branch>]"
1927 $ECHO " $SELF branch <branch>"
1928 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1929 $ECHO " $SELF branches"
1930 $ECHO " $SELF checkout|switch <branch>"
1931 $ECHO " $SELF checkout|switch <remote>/<branch>"
1932 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1933 $ECHO " $SELF clean --reclone"
1934 $ECHO " $SELF compile [-c] [-r] [-0]"
1935 $ECHO " $SELF each|foreach [-k] command..."
1936 $ECHO " $SELF fix_upstream_rebase"
1937 $ECHO " $SELF keygen"
1938 $ECHO " $SELF merge"
1939 $ECHO " $SELF push|commit [-s]"
1940 $ECHO " $SELF release"
1941 $ECHO " $SELF restore-patches"
1942 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1943 $ECHO " $SELF save-patches"
1944 $ECHO " $SELF update-maps"
1945 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"