6 # I use this in EVERY shell script ;)
12 while ! [ -f ./all ]; do
13 if [ x"`pwd`" = x"/" ]; then
14 echo "Cannot find myself."
15 echo "Please run this script with the working directory inside a Xonotic checkout."
23 # If we are on WINDOWS:
28 # Windows hates users. So this script has to copy itself elsewhere first...
29 cp "$SELF" ../all.xonotic.sh
30 export WE_HATE_OUR_USERS=1
31 exec ../all.xonotic.sh "$@"
39 echo >&2 "$ESC[1m$*$ESC[m"
42 self=`git hash-object "$SELF"`
45 self_new=`git hash-object "$SELF"`
46 if [ x"$self" != x"$self_new" ]; then
47 msg "./all has changed."
48 if [ -z "$XONOTIC_FORBID_RERUN_ALL" ]; then
49 msg "Rerunning the requested operation to make sure."
50 export XONOTIC_FORBID_RERUN_ALL=1
53 msg "Please try $SELF update, and then retry your requested operation."
70 echo "the root directory"
80 if git ls-files -u | grep ' 1 '; then
82 echo "MERGE CONFLICT."
83 echo "change into the \"$1\" project directory, and then:"
84 echo "- edit the files mentioned above with your favorite editor,"
85 echo " and fix the conflicts (marked with <<<<<<< blocks)"
86 echo "- for binary files, you can select the files using"
87 echo " git checkout --ours or git checkout --theirs"
88 echo "- when done with a file, 'git add' the file"
89 echo "- when done, 'git commit'"
98 while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
109 check_mergeconflict "$1"
114 data/xonotic-data.pk3dir | | master |
115 data/xonotic-music.pk3dir | | master |
116 data/xonotic-nexcompat.pk3dir | | master | no
117 darkplaces | | div0-stable | svn
118 netradiant | | master |
119 div0-gittools | | master | no
120 d0_blind_id | | master |
121 data/xonotic-maps.pk3dir | | master |
122 mediasource | | master | no
123 fteqcc | | xonotic-stable | noautocrlf
125 # todo: in darkplaces, change repobranch to div0-stable
127 repos=`echo "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
129 base=`git config remote.origin.url`
132 base=${base%xonotic.git}
135 echo "The main repo is not xonotic.git, what have you done?"
139 pushbase=`git config remote.origin.pushurl || true`
142 pushbase=${pushbase%xonotic.git}
147 echo "The main repo is not xonotic.git, what have you done?"
154 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
155 if [ -n "$repo_t" ]; then
165 if [ x"$1" = x"." ]; then
166 echo "$base""xonotic.git"
168 echo "$base${1##*/}.git"
175 [ -n "$pushbase" ] || return 0
176 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
177 if [ -n "$repo_t" ]; then
182 echo "$pushbase$repo_t"
186 if [ x"$1" = x"." ]; then
187 echo "$pushbase""xonotic.git"
189 echo "$pushbase${1##*/}.git"
196 repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
197 if [ -n "$repo_t" ]; then
206 echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
214 # if we have the dir, always keep it
216 msg "Repository $d enabled because it already exists"
220 # if .yes file exists, always keep it
221 if [ -f "$d.yes" ]; then
222 msg "Repository $d enabled by a .yes file"
226 # if we have .no file, skip
227 if [ -f "$d.no" ]; then
228 msg "Repository $d disabled by a .no file, delete $p.no to enable"
231 # if we have matching pk3, skip
232 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
233 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
236 # if "no" flag is set, skip
239 msg "Repository $d disabled by default, create $d.yes to enable"
244 msg "Repository $d enabled by default"
251 if [ "$#" = 0 ]; then
257 fix_upstream_rebase()
259 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
262 r_base=`git merge-base "$r_me" "$r_other"`
264 # no merge-base? upstream did filter-branch
265 if [ -n "$r_base" ]; then
266 # otherwise, check if the two histories are "similar"
267 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
268 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
270 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
271 r_lc_me=`echo "$r_l_me" | wc -l`
272 r_lc_other=`echo "$r_l_other" | wc -l`
273 r_lc_together=`{ echo "$r_l_me"; echo "$r_l_other"; } | sort -u | wc -l`
274 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
276 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
277 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
278 git reset --hard "$r_me"
288 fix_upstream_rebase_mergeok()
290 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
291 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
295 fix_upstream_rebase_mergefail()
297 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
298 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
304 verbose git config remote.origin.url "$1"
306 verbose git config remote.origin.pushurl "$2"
308 verbose git config --unset remote.origin.pushurl || true
310 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
311 case ",`repoflags "$d"`," in
313 verbose git config --unset core.autocrlf || true
316 verbose git config core.autocrlf input
319 if [ -z "`git config push.default || true`" ]; then
320 verbose git config push.default current # or is tracking better?
322 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
323 verbose git config filter.mapclean.smudge "cat"
331 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
332 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
333 zip -9y -@<"$ziplist" "$archive" || true
344 # first result is to be ignored, but we use it to check status
345 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
346 { 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*,,'
347 # unit: clock ticks (depends on what "time" returns
355 if ! { time -p true; } >/dev/null 2>&1; then
363 if t=`mirrorspeed "$m"`; then
366 if [ -z "$bestt" ] || [ "$t" -lt "$bestt" ]; then
375 if [ -n "$bestin" ]; then
376 msg "Best mirror seems to be $pre$bestin$suf"
386 enter "$d0/$d" verbose
387 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
393 pushurl=`repopushurl "$d"`
394 branch=`repobranch "$d"`
395 if [ -d "$d0/$d" ]; then
397 fix_git_config "$url" "$pushurl"
403 # enable the ssh URL for pushing
406 if [ -f ~/.ssh/id_rsa.pub ]; then
408 msg "A key already exists and no new one will be generated. If you"
409 msg "already have done the procedure for getting your key approved, you"
410 msg "can skip the following paragraph and already use the repository."
412 msg "To get access, your key has to be approved first. For that, visit"
413 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
414 msg "the \"Support\" tracker in the \"Repository\" category where you"
415 msg "apply for access and paste the following output into the issue:"
417 msg "`cat ~/.ssh/id_rsa.pub`"
419 msg "Note that you will only have write access to branches that start"
420 msg "with your user name."
421 elif [ -f ~/.ssh/id_dsa.pub ]; then
423 msg "A key already exists and no new one will be generated. If you"
424 msg "already have done the procedure for getting your key approved, you"
425 msg "can skip the following paragraph and already use the repository."
427 msg "To get access, your key has to be approved first. For that, visit"
428 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
429 msg "the \"Support\" tracker in the \"Repository\" category where you"
430 msg "apply for access and paste the following output into the issue:"
432 msg "`cat ~/.ssh/id_dsa.pub`"
434 msg "Note that you will only have write access to branches that start"
435 msg "with your user name."
438 msg "No key has been generated yet. One will be generated now."
439 msg "If other people are using your computer, it is recommended"
440 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
441 msg "when asked for a passphrase."
443 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
445 msg "To get access, your key has to be approved first. For that, visit"
446 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
447 msg "the \"Support\" tracker in the \"Repository\" category where you"
448 msg "apply for access and paste the following output into the issue:"
450 msg "`cat ~/.ssh/id_rsa.pub`"
452 msg "Note that you will only have write access to branches that start"
453 msg "with your user name."
461 if [ x"$1" = x"-N" ]; then
463 elif [ x"$1" = x"-p" ]; then
465 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
466 pushbase=ssh://xonotic@git.xonotic.org/
468 elif [ x"$1" = x"-s" ]; then
470 base=ssh://xonotic@git.xonotic.org/
472 elif [ x"$1" = x"-g" ]; then
474 base=git://git.xonotic.org/xonotic/
475 elif [ x"$1" = x"-h" ]; then
477 base=http://git.xonotic.org/xonotic/
478 elif [ x"$1" = x"-l" ]; then
485 msg "Invalid location!"
486 msg "Possible locations for the -l option:"
487 msg " nl (Netherlands, run by merlijn)"
488 msg " de (Germany, run by divVerent)"
489 msg " best (find automatically)"
490 msg " default (currently nl)"
508 *://*.git.xonotic.org/*)
509 location=${base%%.git.xonotic.org/*}
510 location=${location##*://}
518 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
521 if location=`bestmirror $base"xonotic.git" de nl`; then
533 if [ -n "$location" ]; then
534 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
535 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
537 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
538 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
542 pushurl=`repopushurl .`
543 fix_git_config "$url" "$pushurl"
545 if $allow_pull || $fix_config; then
550 pushurl=`repopushurl "$d"`
551 branch=`repobranch "$d"`
552 if [ -d "$d0/$d" ]; then
554 enter "$d0/$d" verbose
555 r=`git symbolic-ref HEAD`
557 if git config branch.$r.remote >/dev/null 2>&1; then
558 if ! verbose git pull; then
559 fix_upstream_rebase_mergefail || true
560 check_mergeconflict "$d"
561 echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
564 fix_upstream_rebase_mergeok || true
569 checkself "$cmd" "$@"
571 verbose git remote prune origin
575 verbose git clone "$url" "$d0/$d"
576 enter "$d0/$d" verbose
577 fix_git_config "$url" "$pushurl"
578 if [ "$branch" != "master" ]; then
579 verbose git checkout --track -b "$branch" origin/"$branch"
586 misc/tools/xonotic-map-compiler-autobuild download
590 if [ x"$1" = x"-f" ]; then
596 if [ -z "$branch" ]; then
599 branch=${remote#origin/}
610 enter "$d0/$d" verbose
612 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
614 verbose git checkout $checkoutflags "$b"
615 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
617 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
620 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
622 verbose git checkout $checkoutflags "$b"
623 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
625 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
627 echo "WTF? Not even branch $b doesn't exist in $d"
632 checkself "$cmd" "$@"
636 echo "The requested branch was not found in any repository."
644 if [ -z "$branch" ]; then
648 if [ -z "$branch" ]; then
651 r=`git symbolic-ref HEAD`
658 dv=`visible_repo_name "$d"`
659 enter "$d0/$d" verbose
660 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
661 echo "Already having this branch in $dv."
663 if yesno "Branch in $dv?"; then
664 if [ -n "$srcbranch" ]; then
667 b=origin/"`repobranch "$d"`"
668 verbose git fetch origin || true
670 # TODO do this without pushing
671 verbose git checkout -b "$branch" "$b"
672 verbose git config "branch.$branch.remote" "$remote"
673 verbose git config "branch.$branch.merge" "refs/heads/$branch"
683 cd "$d0/$d" # am in a pipe, shouldn't use enter
684 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
689 while read -r d BRANCH REV TEXT; do
690 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
693 if [ x"$REV" = x"->" ]; then
696 BRANCH=${BRANCH#remotes/}
697 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
698 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
699 eval "r=\$branches_repos_$ID"
701 eval "branches_repos_$ID=\$r"
703 echo -n "$branches_list" | xargs -n 1 echo | sort -u | while IFS= read -r BRANCH; do
704 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
705 eval "r=\$branches_repos_$ID"
706 printf "%-60s %s\n" "$BRANCH" "$r"
713 dv=`visible_repo_name "$d"`
714 enter "$d0/$d" verbose
715 r=`git symbolic-ref HEAD`
717 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
718 # we have uncommitted changes
719 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
720 if ! verbose git merge origin/"`repobranch "$d"`"; then
721 check_mergeconflict "$d"
722 exit 1 # this should ALWAYS be fatal
732 dv=`visible_repo_name "$d"`
733 enter "$d0/$d" verbose
734 r=`git symbolic-ref HEAD`
736 diffdata=`git diff --color HEAD`
737 if [ -n "$diffdata" ]; then
738 # we have uncommitted changes
739 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" 'echo "$diffdata" | less -r'; then
740 verbose git commit -a
743 rem=`git config "branch.$r.remote" || echo origin`
744 bra=`git config "branch.$r.merge" || echo "$r"`
745 upstream="$rem/${bra#refs/heads/}"
746 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
747 upstream="origin/`repobranch "$d"`"
749 logdata=`git log --color "$upstream".."$r"`
750 if [ -n "$logdata" ]; then
751 if yesno "Push \"$r\" in $dv?" 'echo "$logdata" | less -r'; then
752 verbose git push "$rem" HEAD
755 if [ x"$submit" = x"-s" ]; then
758 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
772 snowleopardhack=false
773 if [ -z "$CC" ]; then
774 export CC="gcc -DSUPPORTIPV6"
791 export CC="$CC -g -mtune=native -march=native"
799 if [ -n "$WE_HATE_OUR_USERS" ]; then
800 TARGETS="sv-$debug cl-$debug"
801 elif [ x"`uname`" = x"Darwin" ]; then
804 TARGETS="sv-$debug cl-$debug sdl-$debug"
807 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
809 TARGETS="sv-$debug sdl-$debug"
812 export CC="$CC -I$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
814 TARGETS="sv-$debug cl-$debug sdl-$debug"
816 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
817 # if we give the command make the arg "", it will surely fail (invalid filename),
818 # so better handle it as an empty client option
821 elif [ -n "$1" ]; then
823 TARGETS_SAVE=$TARGETS
828 TARGETS="$TARGETS sdl-debug"
831 TARGETS="$TARGETS cl-debug"
832 if $snowleopardhack; then
833 export CC="$CC -arch i386"
837 TARGETS="$TARGETS cl-debug"
840 TARGETS="$TARGETS sv-debug"
843 BAD_TARGETS="$BAD_TARGETS $X"
847 if [ -n "$TARGETS" ]; then # at least a valid client
849 else # no valid client, let's assume this option is not meant to be a client then
850 TARGETS=$TARGETS_SAVE
854 if [ -z "$MAKEFLAGS" ]; then
855 if [ -f /proc/cpuinfo ]; then
856 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
857 if [ $ncpus -gt 1 ]; then
861 if [ -n "$WE_HATE_OUR_USERS" ]; then
862 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
866 enter "$d0/d0_blind_id" verbose
867 if ! $compiled0; then
868 # compilation of crypto library failed
869 # use binaries then, if we can...
871 if [ -n "$WE_HATE_OUR_USERS" ]; then
872 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
873 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
879 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
880 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
881 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
884 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
885 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
886 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
894 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
904 if [ -f Makefile ]; then
905 verbose make $MAKEFLAGS distclean
908 if ! [ -f Makefile ]; then
909 verbose sh autogen.sh
912 verbose make $MAKEFLAGS
915 enter "$d0/fteqcc" verbose
917 verbose make $MAKEFLAGS clean
919 verbose make $MAKEFLAGS
921 enter "$d0/data/xonotic-data.pk3dir" verbose
923 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
925 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
926 # 4 levels up: data, xonotic-data, qcsrc, server
928 enter "$d0/darkplaces" verbose
929 if [ x"$BAD_TARGETS" = x" " ]; then
930 echo "Warning: invalid empty client, default clients will be used."
933 verbose make $MAKEFLAGS clean
935 for T in $TARGETS; do
936 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
938 for T in $BAD_TARGETS; do
939 echo "Warning: discarded invalid client $T."
942 verbose "$SELF" update-maps
945 if [ -n "$WE_HATE_OUR_USERS" ]; then
947 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
948 elif [ x"`uname`" = x"Darwin" ]; then
949 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
950 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
953 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
957 sdl|glx|agl|dedicated)
966 if ! [ -x "darkplaces/darkplaces$client" ]; then
967 if [ -x "darkplaces/darkplaces$client.exe" ]; then
970 echo "Client darkplaces/darkplaces$client not found, aborting"
974 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
976 # if pulseaudio is running: USE IT
977 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
978 if ps -C pulseaudio >/dev/null; then
979 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
980 export SDL_AUDIODRIVER=pulse
987 if [ -n "$USE_GDB" ]; then
988 set -- gdb --args "$@"
989 elif which gdb >/dev/null 2>&1; then
990 set -- gdb --batch -x savecore.gdb --args "$@"
991 elif which catchsegv >/dev/null 2>&1; then
992 set -- catchsegv "$@"
996 if [ -f xonotic.core ]; then
997 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
998 gdb "$binary" xonotic.core
999 #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
1000 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1002 # rm -f xonotic.core.tar.gz
1004 echo "The core dump can be examined later by"
1005 echo " gdb $binary xonotic.core"
1011 if [ x"$1" = x"-k" ]; then
1016 if verbose cd "$d0/$d"; then
1017 if $keep_going; then
1018 verbose "$@" || true
1028 patchdir=`mktemp -d -t save-patches.XXXXXX`
1030 enter "$d0/$d" verbose
1031 git branch -v -v | cut -c 3- | {
1033 while read -r BRANCH REV UPSTREAM TEXT; do
1036 UPSTREAM=${UPSTREAM#\[}
1037 UPSTREAM=${UPSTREAM%\]}
1038 UPSTREAM=${UPSTREAM%:*}
1042 UPSTREAM=origin/"`repobranch "$d"`"
1046 if [ x"$REV" = x"->" ]; then
1049 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1050 echo "$d" > "$patchdir/$i/info.txt"
1051 echo "$BRANCH" >> "$patchdir/$i/info.txt"
1052 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
1053 echo "$TRACK" >> "$patchdir/$i/info.txt"
1056 rm -rf "$patchdir/$i"
1061 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1066 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1067 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1069 for P in "$patchdir"/*/info.txt; do
1074 read -r UPSTREAM <&3
1076 verbose git checkout HEAD^0
1077 verbose git branch -D "$BRANCH"
1078 if [ x"$TRACK" = x"true" ]; then
1079 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1081 verbose git branch -b "$BRANCH" "$UPSTREAM"
1093 report=$report"$*$LF"
1098 report=$report" $*$LF"
1103 o=`"$@" | sed 's/^/ /' || true`
1109 # sorry, fteqcc repo is managed manually
1113 enter "$d0/$d" verbose
1114 base="`repobranch "$d"`"
1116 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1117 case "${ref#refs/remotes/origin/}" in
1130 if [ -n "$branch" ]; then
1131 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1140 l0=`git rev-list "$base".."$ref" | wc -l`
1141 l1=`git rev-list master.."$ref" | wc -l`
1142 if [ $l0 -gt $l1 ]; then
1149 reportecho " Branch $ref:"
1150 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1151 logdata=`git log --color "$realbase".."$ref"`
1152 if [ -z "$logdata" ]; then
1153 reportecho4 "--> not merging, no changes vs master"
1154 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1155 git push origin :"${ref#refs/remotes/origin/}"
1156 reportecho4 "--> branch deleted"
1159 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1160 if [ -z "$diffdata" ]; then
1161 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1162 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1163 git push origin :"${ref#refs/remotes/origin/}"
1164 reportecho4 "--> branch deleted"
1166 elif [ -z "$branch" ] && [ -n "$note" ]; then
1167 reportdo4 echo "$note"
1168 reportecho4 "--> not merging, already had this one rejected before"
1169 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1170 git checkout "$realbase"
1171 org=`git rev-parse HEAD`
1172 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1173 git reset --hard "$org"
1174 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1176 reportecho4 "--> merge failed"
1177 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1178 git reset --hard "$org"
1179 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1181 reportecho4 "--> compile failed"
1182 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1183 git reset --hard "$org"
1184 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1185 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1186 if [ x"$note" = x"del" ]; then
1187 git push origin :"${ref#refs/remotes/origin/}"
1188 reportecho4 "--> test failed, branch deleted"
1189 elif [ -n "$note" ]; then
1190 reportdo4 echo "$note"
1191 reportecho4 "--> test failed"
1193 reportecho4 "--> test failed, postponed"
1196 # apply crlf, or other cleanup filters (non-behavioural changes)
1198 find . -type f -exec touch {} \;
1199 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1202 case ",`repoflags "$d"`," in
1204 # we do quite a mess here... luckily we know $org
1205 git fetch # svn needs to be current
1206 git rebase -i --onto origin/master "$org"
1207 git svn dcommit --add-author-from
1208 git reset --hard "$org"
1211 git push origin HEAD
1214 reportecho4 "--> MERGED"
1215 if yesno "Delete original branch \"$ref\"?"; then
1216 git push origin :"${ref#refs/remotes/origin/}"
1217 reportecho4 "--> branch deleted"
1221 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1222 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1223 if [ x"$note" = x"del" ]; then
1224 git push origin :"${ref#refs/remotes/origin/}"
1225 reportecho4 "--> branch deleted"
1226 elif [ -n "$note" ]; then
1227 reportdo4 echo "$note"
1228 reportecho4 "--> rejected"
1230 reportecho4 "--> postponed"
1239 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1251 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1252 # ./all clean --reclone
1255 if [ x"$X" = x"--reclone" ]; then
1262 elif [ x"$X" = x"-f" ]; then
1264 elif [ x"$X" = x"-u" ]; then
1266 elif [ x"$X" = x"-U" ]; then
1269 elif [ x"$X" = x"-fu" ]; then
1272 elif [ x"$X" = x"-fU" ]; then
1276 elif [ x"$X" = x"-m" ]; then
1278 elif [ x"$X" = x"-r" ]; then
1280 elif [ x"$X" = x"-D" ]; then
1282 elif echo "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1285 msg ' ,--'\''-\\P/`\\ FFFFFFF'
1286 msg ' __/_ B/,-.\\ FFFFFFF'
1287 msg ' / _\\ (// O\\\\ FFFFFF'
1288 msg '| (O `) _\\._ _)\\ FFFUU'
1289 msg '| |___/.^d0~~"\\ \\ UUUU'
1290 msg '| |`~'\'' \\ | UUUU'
1291 msg '| | __,C>|| UUUU'
1292 msg '\\ /_ ,-/,-'\'' | UUUU'
1293 msg ' \\\\_ \\_>~'\'' / UUUU-'
1296 msg "Unknown arg: $X"
1306 if $gotoupstream; then
1308 msg "Must also use -f (delete local changes) when using -u"
1311 if $gotomaster; then
1312 if $fetchupstream; then
1313 verbose git fetch origin
1314 verbose git remote prune origin
1316 verbose git checkout -f "`repobranch "$d"`"
1317 verbose git reset --hard origin/"`repobranch "$d"`"
1319 r=`git symbolic-ref HEAD`
1321 rem=`git config "branch.$r.remote" || echo origin`
1322 bra=`git config "branch.$r.merge" || echo "$r"`
1323 upstream="$rem/${bra#refs/heads/}"
1324 if $fetchupstream; then
1325 verbose git fetch "$rem"
1326 verbose git remote prune "$rem"
1328 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1329 upstream="origin/`repobranch "$d"`"
1331 verbose git reset --hard "$upstream"
1333 elif $gotomaster; then
1335 verbose git checkout -f "`repobranch "$d"`"
1336 verbose git reset --hard
1338 verbose git checkout "`repobranch "$d"`"
1341 verbose git reset --hard
1343 if $rmuntracked; then
1346 verbose git clean -df
1349 verbose git clean -xdf
1353 if $killbranches; then
1354 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1355 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1356 verbose git branch -D "${B#refs/heads/}"
1359 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1360 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1362 checkself "$cmd" "$@"
1366 # release building goes here
1368 #"$SELF" each git clean -fxd
1369 case "$RELEASETYPE" in
1371 msg "Building a BETA"
1374 msg "Building a RELEASE"
1377 echo >&2 -n "$ESC[2J$ESC[H"
1384 msg " +---------------------------------------------------------.---+"
1386 msg " +---------------------------------------------------------^---+"
1388 msg " | / \ This is the official release build system. |"
1389 msg " | | | If you are not a member of the Xonotic Core Team, |"
1390 msg " | | STOP | you are not supposed to use this script and should |"
1391 msg " | | | instead use ./all compile to compile the engine |"
1392 msg " | \____/ and game code. |"
1394 msg " | [ I understand ] |"
1395 msg " +-------------------------------------------------------------+"
1397 # A LOT of build infrastructure is required:
1400 # - .ssh/config must be configured so the following
1401 # host names are reachable and have a compile
1402 # infrastructure set up:
1403 # - xonotic-build-linux32 (with gcc on x86)
1404 # - xonotic-build-linux64 (with gcc on x86_64)
1405 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1406 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1407 # and x86_64-w64-mingw32-g++)
1408 # - xonotic-build-osx (with Xcode and SDL.framework)
1409 # - AMD Compressonator installed in WINE
1410 # - ResEdit installed in WINE
1411 # - a lot of other requirements you will figure out
1412 # while reading the error messages
1413 # - environment variable RELEASETYPE set
1414 # - optionally, environment variable RELEASEDATE set
1419 verbose rm -rf Xonotic Xonotic*.zip
1420 verbose mkdir -p Xonotic
1421 if [ -n "$RELEASEDATE" ]; then
1422 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1424 verbose date +%Y%m%d > Xonotic/stamp.txt
1426 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1428 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1430 verbose rm -rf misc/builddeps
1431 verbose mv misc/buildfiles/win32/* . || true
1432 verbose mv misc/buildfiles/win64 bin64 || true
1433 verbose mv misc/buildfiles/osx/* . || true
1434 verbose rm -rf misc/buildfiles
1435 verbose rm -rf misc/pki
1438 verbose cd darkplaces
1439 verbose git archive --format=tar HEAD
1441 verbose cd Xonotic/source/darkplaces
1446 verbose git archive --format=tar HEAD
1448 verbose cd Xonotic/source/fteqcc
1452 verbose cd data/xonotic-data.pk3dir
1453 verbose git archive --format=tar HEAD -- qcsrc Makefile
1455 verbose cd Xonotic/source
1458 rm -f Xonotic/key_15.d0pk
1460 release-compile-run)
1469 if [ -n "$targetfiles" ]; then
1470 case " $HOSTS_THAT_ARE_DISABLED " in
1475 case " $HOSTS_THAT_ARE_MYSELF " in
1477 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1478 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1479 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1480 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1481 for f in $targetfiles; do
1482 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1486 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1487 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1488 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1489 for f in $targetfiles; do
1490 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1494 # now rebrand the binaries...
1495 for f in $targetfiles; do
1496 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1499 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1501 d=`mktemp -d -t rebrand.XXXXXX`
1503 echo "-mygames" > darkplaces.opt
1504 zip -9r darkplaces.zip darkplaces.opt
1517 fteqcc_maketargets=$3
1519 darkplaces_maketargets=$5
1521 host=xonotic-build-$suffix
1522 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1523 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1525 release-engine-win32)
1526 verbose "$SELF" release-compile win32 \
1527 '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' \
1528 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1530 verbose "$SELF" release-compile win32 \
1531 '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' \
1533 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1535 release-engine-win64)
1536 verbose "$SELF" release-compile win64 \
1537 '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' \
1538 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1539 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1540 verbose "$SELF" release-compile win64 \
1541 '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' \
1543 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1546 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1547 verbose "$SELF" release-compile osx \
1548 '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"' \
1549 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1550 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1551 verbose "$SELF" release-compile osx \
1552 '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"' \
1554 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1556 release-engine-linux32)
1557 verbose "$SELF" release-compile linux32 \
1558 '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' \
1559 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1560 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1562 release-engine-linux64)
1563 verbose "$SELF" release-compile linux64 \
1564 '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' \
1565 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1566 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1569 verbose "$SELF" release-engine-linux32 &
1570 verbose "$SELF" release-engine-linux64 &
1571 verbose "$SELF" release-engine-win32 &
1572 verbose "$SELF" release-engine-win64 &
1573 verbose "$SELF" release-engine-osx &
1582 verbose "$SELF" update-maps
1585 case "$RELEASETYPE" in
1587 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1588 # back out of: source/qcsrc/server
1591 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1594 verbose rm -f Xonotic/source/*/fteqcc.log
1596 release-buildpk3-transform-raw)
1599 release-buildpk3-transform-normal)
1602 # texture: convert to jpeg and dds
1603 verbose export do_jpeg=true
1604 verbose export jpeg_qual_rgb=95
1605 verbose export jpeg_qual_a=99
1606 verbose export do_dds=true
1607 verbose export dds_flags=
1608 verbose export do_ogg=false
1609 verbose export del_src=true
1610 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1612 release-buildpk3-transform-low)
1615 # texture: convert to jpeg and dds
1616 # music: reduce bitrate
1617 verbose export do_jpeg=true
1618 verbose export jpeg_qual_rgb=80
1619 verbose export jpeg_qual_a=97
1620 verbose export do_dds=false
1621 verbose export do_ogg=true
1622 verbose export ogg_qual=1
1623 verbose export del_src=true
1624 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1626 release-buildpk3-transform-lowdds)
1629 # texture: convert to jpeg and dds
1630 # music: reduce bitrate
1631 verbose export do_jpeg=false
1632 verbose export do_jpeg_if_not_dds=true
1633 verbose export jpeg_qual_rgb=80
1634 verbose export jpeg_qual_a=99
1635 verbose export do_dds=true
1636 verbose export dds_flags=
1637 verbose export do_ogg=true
1638 verbose export ogg_qual=1
1639 verbose export del_src=true
1640 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1653 verbose rm -rf Xonotic/temp
1654 verbose mkdir -p Xonotic/temp
1657 verbose git archive --format=tar HEAD
1659 verbose cd Xonotic/temp
1662 verbose cd Xonotic/temp
1663 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1664 verbose cp ../source/progs.dat .
1665 verbose cp ../source/csprogs.dat .
1666 verbose cp ../source/menu.dat .
1667 verbose rm -rf qcsrc
1668 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1669 major=$(($gv / 10000))
1670 minor=$(($gv / 100 - $major * 100))
1671 patch=$(($gv - $major * 10000 - $minor * 100))
1672 versionstr="$major.$minor.$patch"
1673 case "$RELEASETYPE" in
1675 versionstr="$versionstr""beta"
1679 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1680 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1681 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1682 " defaultXonotic.cfg
1684 verbose cd gfx/menu/luminos
1685 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1686 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1687 verbose rm background_l2.svg
1690 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1691 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1692 if [ -f "$X" ]; then
1694 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1698 verbose export git_src_repo="$d0/$src" # skip hash-object
1699 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1700 verbose mkzip "../../$dst" *
1702 verbose rm -rf Xonotic/temp
1705 stamp=`cat Xonotic/stamp.txt`
1711 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1717 while [ "$#" -gt 1 ]; do
1718 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1724 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1725 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1726 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1727 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1728 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1730 release-pack-needsx11)
1733 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1736 verbose "$SELF" release-pack
1741 stamp=`cat Xonotic/stamp.txt`
1742 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1743 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1744 # let's pass crypto import laws of some nasty countries
1745 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1746 if [ -n "$crypto_libs" ]; then
1747 verbose mkzip Xonotic-$stamp-crypto.zip \
1751 # build the archives
1752 verbose mkzip Xonotic-$stamp-engine.zip \
1754 Xonotic/bin64/*.dll \
1757 Xonotic/xonotic.exe \
1758 Xonotic/source/darkplaces/
1759 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1760 verbose mkzip Xonotic-$stamp-common.zip \
1761 Xonotic/source/fteqcc/ \
1762 Xonotic/source/qcsrc/ \
1767 Xonotic/key_0.d0pk \
1768 Xonotic/data/font-nimbussansl-$stamp.pk3
1769 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1770 verbose mkzip0 Xonotic-$stamp.zip \
1771 Xonotic/data/xonotic-$stamp-data.pk3 \
1772 Xonotic/data/xonotic-$stamp-maps.pk3 \
1773 Xonotic/data/xonotic-$stamp-music.pk3 \
1774 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1775 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1776 verbose mkzip0 Xonotic-$stamp-low.zip \
1777 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1778 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1779 Xonotic/data/xonotic-$stamp-music-low.pk3
1780 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1781 # verbose mkzip0 Xonotic-$stamp-high.zip \
1782 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1783 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1784 # Xonotic/data/xonotic-$stamp-music.pk3 \
1785 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1786 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1787 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1788 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1789 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1790 Xonotic/data/xonotic-$stamp-music-low.pk3
1793 verbose "$SELF" release-prepare
1794 verbose "$SELF" release-maps
1795 verbose "$SELF" release-engine
1796 verbose "$SELF" release-qc
1797 verbose "$SELF" release-pack-needsx11
1798 verbose "$SELF" release-zip
1803 echo " $SELF admin-merge [<branch>]"
1804 echo " $SELF branch <branch>"
1805 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1806 echo " $SELF branches"
1807 echo " $SELF checkout|switch <branch>"
1808 echo " $SELF checkout|switch <remote>/<branch>"
1809 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1810 echo " $SELF clean --reclone"
1811 echo " $SELF compile [-c] [-r] [-0]"
1812 echo " $SELF each|foreach [-k] command..."
1813 echo " $SELF fix_upstream_rebase"
1814 echo " $SELF keygen"
1816 echo " $SELF push|commit [-s]"
1817 echo " $SELF release"
1818 echo " $SELF restore-patches"
1819 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1820 echo " $SELF save-patches"
1821 echo " $SELF update-maps"
1822 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"