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
349 # first result is to be ignored, but we use it to check status
350 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
351 timewrapper git ls-remote "$1" refs/heads/master 2>&1 >/dev/null | head -n 1 | cut -d ' ' -f 2 | tr -d . | sed 's,^0*,,'
352 # unit: clock ticks (depends on what "time" returns
364 if t=`mirrorspeed "$m"`; then
367 if [ -z "$bestt" ] || [ "$t" -lt "$bestt" ]; then
376 msg "Best mirror seems to be $pre$bestin$suf"
383 enter "$d0/$d" verbose
384 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
390 pushurl=`repopushurl "$d"`
391 branch=`repobranch "$d"`
392 if [ -d "$d0/$d" ]; then
394 fix_git_config "$url" "$pushurl"
400 # enable the ssh URL for pushing
403 if [ -f ~/.ssh/id_rsa.pub ]; then
405 msg "A key already exists and no new one will be generated. If you"
406 msg "already have done the procedure for getting your key approved, you"
407 msg "can skip the following paragraph and already use the repository."
409 msg "To get access, your key has to be approved first. For that, visit"
410 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
411 msg "the \"Support\" tracker in the \"Repository\" category where you"
412 msg "apply for access and paste the following output into the issue:"
414 msg "`cat ~/.ssh/id_rsa.pub`"
416 msg "Note that you will only have write access to branches that start"
417 msg "with your user name."
418 elif [ -f ~/.ssh/id_dsa.pub ]; then
420 msg "A key already exists and no new one will be generated. If you"
421 msg "already have done the procedure for getting your key approved, you"
422 msg "can skip the following paragraph and already use the repository."
424 msg "To get access, your key has to be approved first. For that, visit"
425 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
426 msg "the \"Support\" tracker in the \"Repository\" category where you"
427 msg "apply for access and paste the following output into the issue:"
429 msg "`cat ~/.ssh/id_dsa.pub`"
431 msg "Note that you will only have write access to branches that start"
432 msg "with your user name."
435 msg "No key has been generated yet. One will be generated now."
436 msg "If other people are using your computer, it is recommended"
437 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
438 msg "when asked for a passphrase."
440 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
442 msg "To get access, your key has to be approved first. For that, visit"
443 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
444 msg "the \"Support\" tracker in the \"Repository\" category where you"
445 msg "apply for access and paste the following output into the issue:"
447 msg "`cat ~/.ssh/id_rsa.pub`"
449 msg "Note that you will only have write access to branches that start"
450 msg "with your user name."
458 if [ x"$1" = x"-N" ]; then
460 elif [ x"$1" = x"-p" ]; then
462 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
463 pushbase=ssh://xonotic@git.xonotic.org/
465 elif [ x"$1" = x"-s" ]; then
467 base=ssh://xonotic@git.xonotic.org/
469 elif [ x"$1" = x"-g" ]; then
471 base=git://git.xonotic.org/xonotic/
472 elif [ x"$1" = x"-h" ]; then
474 base=http://git.xonotic.org/xonotic/
475 elif [ x"$1" = x"-l" ]; then
482 msg "Invalid location!"
483 msg "Possible locations for the -l option:"
484 msg " nl (Netherlands, run by merlijn)"
485 msg " de (Germany, run by divVerent)"
486 msg " best (find automatically)"
487 msg " default (currently nl)"
505 *://*.git.xonotic.org/*)
506 location=${base%%.git.xonotic.org/*}
507 location=${location##*://}
515 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
518 location=`bestmirror $base"xonotic.git" de nl`
526 if [ -n "$location" ]; then
527 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
528 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
530 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
531 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
535 pushurl=`repopushurl .`
536 fix_git_config "$url" "$pushurl"
538 if $allow_pull || $fix_config; then
543 pushurl=`repopushurl "$d"`
544 branch=`repobranch "$d"`
545 if [ -d "$d0/$d" ]; then
547 enter "$d0/$d" verbose
548 r=`git symbolic-ref HEAD`
550 if git config branch.$r.remote >/dev/null 2>&1; then
551 if ! verbose git pull; then
552 fix_upstream_rebase_mergefail || true
553 check_mergeconflict "$d"
554 echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
557 fix_upstream_rebase_mergeok || true
562 checkself "$cmd" "$@"
564 verbose git remote prune origin
568 verbose git clone "$url" "$d0/$d"
569 enter "$d0/$d" verbose
570 fix_git_config "$url" "$pushurl"
571 if [ "$branch" != "master" ]; then
572 verbose git checkout --track -b "$branch" origin/"$branch"
579 misc/tools/xonotic-map-compiler-autobuild download
583 if [ x"$1" = x"-f" ]; then
589 if [ -z "$branch" ]; then
592 branch=${remote#origin/}
603 enter "$d0/$d" verbose
605 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
607 verbose git checkout $checkoutflags "$b"
608 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
610 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
613 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
615 verbose git checkout $checkoutflags "$b"
616 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
618 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
620 echo "WTF? Not even branch $b doesn't exist in $d"
625 checkself "$cmd" "$@"
629 echo "The requested branch was not found in any repository."
637 if [ -z "$branch" ]; then
641 if [ -z "$branch" ]; then
644 r=`git symbolic-ref HEAD`
651 dv=`visible_repo_name "$d"`
652 enter "$d0/$d" verbose
653 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
654 echo "Already having this branch in $dv."
656 if yesno "Branch in $dv?"; then
657 if [ -n "$srcbranch" ]; then
660 b=origin/"`repobranch "$d"`"
661 verbose git fetch origin || true
663 # TODO do this without pushing
664 verbose git checkout -b "$branch" "$b"
665 verbose git config "branch.$branch.remote" "$remote"
666 verbose git config "branch.$branch.merge" "refs/heads/$branch"
676 cd "$d0/$d" # am in a pipe, shouldn't use enter
677 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
682 while read -r d BRANCH REV TEXT; do
683 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
686 if [ x"$REV" = x"->" ]; then
689 BRANCH=${BRANCH#remotes/}
690 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
691 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
692 eval "r=\$branches_repos_$ID"
694 eval "branches_repos_$ID=\$r"
696 echo -n "$branches_list" | xargs -n 1 echo | sort -u | while IFS= read -r BRANCH; do
697 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
698 eval "r=\$branches_repos_$ID"
699 printf "%-60s %s\n" "$BRANCH" "$r"
706 dv=`visible_repo_name "$d"`
707 enter "$d0/$d" verbose
708 r=`git symbolic-ref HEAD`
710 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
711 # we have uncommitted changes
712 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
713 if ! verbose git merge origin/"`repobranch "$d"`"; then
714 check_mergeconflict "$d"
715 exit 1 # this should ALWAYS be fatal
725 dv=`visible_repo_name "$d"`
726 enter "$d0/$d" verbose
727 r=`git symbolic-ref HEAD`
729 diffdata=`git diff --color HEAD`
730 if [ -n "$diffdata" ]; then
731 # we have uncommitted changes
732 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" 'echo "$diffdata" | less -r'; then
733 verbose git commit -a
736 rem=`git config "branch.$r.remote" || echo origin`
737 bra=`git config "branch.$r.merge" || echo "$r"`
738 upstream="$rem/${bra#refs/heads/}"
739 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
740 upstream="origin/`repobranch "$d"`"
742 logdata=`git log --color "$upstream".."$r"`
743 if [ -n "$logdata" ]; then
744 if yesno "Push \"$r\" in $dv?" 'echo "$logdata" | less -r'; then
745 verbose git push "$rem" HEAD
748 if [ x"$submit" = x"-s" ]; then
751 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
765 snowleopardhack=false
766 if [ -z "$CC" ]; then
767 export CC="gcc -DSUPPORTIPV6"
784 export CC="$CC -g -mtune=native -march=native"
792 if [ -n "$WE_HATE_OUR_USERS" ]; then
793 TARGETS="sv-$debug cl-$debug"
794 elif [ x"`uname`" = x"Darwin" ]; then
797 TARGETS="sv-$debug cl-$debug sdl-$debug"
800 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
802 TARGETS="sv-$debug sdl-$debug"
805 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"
807 TARGETS="sv-$debug cl-$debug sdl-$debug"
809 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
810 # if we give the command make the arg "", it will surely fail (invalid filename),
811 # so better handle it as an empty client option
814 elif [ -n "$1" ]; then
816 TARGETS_SAVE=$TARGETS
821 TARGETS="$TARGETS sdl-debug"
824 TARGETS="$TARGETS cl-debug"
825 if $snowleopardhack; then
826 export CC="$CC -arch i386"
830 TARGETS="$TARGETS cl-debug"
833 TARGETS="$TARGETS sv-debug"
836 BAD_TARGETS="$BAD_TARGETS $X"
840 if [ -n "$TARGETS" ]; then # at least a valid client
842 else # no valid client, let's assume this option is not meant to be a client then
843 TARGETS=$TARGETS_SAVE
847 if [ -z "$MAKEFLAGS" ]; then
848 if [ -f /proc/cpuinfo ]; then
849 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
850 if [ $ncpus -gt 1 ]; then
854 if [ -n "$WE_HATE_OUR_USERS" ]; then
855 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
859 enter "$d0/d0_blind_id" verbose
860 if ! $compiled0; then
861 # compilation of crypto library failed
862 # use binaries then, if we can...
864 if [ -n "$WE_HATE_OUR_USERS" ]; then
865 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
866 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
872 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
873 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
874 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
877 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
878 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
879 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
887 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
897 if [ -f Makefile ]; then
898 verbose make $MAKEFLAGS distclean
901 if ! [ -f Makefile ]; then
902 verbose sh autogen.sh
905 verbose make $MAKEFLAGS
908 enter "$d0/fteqcc" verbose
910 verbose make $MAKEFLAGS clean
912 verbose make $MAKEFLAGS
914 enter "$d0/data/xonotic-data.pk3dir" verbose
916 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
918 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
919 # 4 levels up: data, xonotic-data, qcsrc, server
921 enter "$d0/darkplaces" verbose
922 if [ x"$BAD_TARGETS" = x" " ]; then
923 echo "Warning: invalid empty client, default clients will be used."
926 verbose make $MAKEFLAGS clean
928 for T in $TARGETS; do
929 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
931 for T in $BAD_TARGETS; do
932 echo "Warning: discarded invalid client $T."
935 verbose "$SELF" update-maps
938 if [ -n "$WE_HATE_OUR_USERS" ]; then
940 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
941 elif [ x"`uname`" = x"Darwin" ]; then
942 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
943 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
946 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
950 sdl|glx|agl|dedicated)
959 if ! [ -x "darkplaces/darkplaces$client" ]; then
960 if [ -x "darkplaces/darkplaces$client.exe" ]; then
963 echo "Client darkplaces/darkplaces$client not found, aborting"
967 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
969 # if pulseaudio is running: USE IT
970 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
971 if ps -C pulseaudio >/dev/null; then
972 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
973 export SDL_AUDIODRIVER=pulse
980 if [ -n "$USE_GDB" ]; then
981 set -- gdb --args "$@"
982 elif which gdb >/dev/null 2>&1; then
983 set -- gdb --batch -x savecore.gdb --args "$@"
984 elif which catchsegv >/dev/null 2>&1; then
985 set -- catchsegv "$@"
989 if [ -f xonotic.core ]; then
990 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
991 gdb "$binary" xonotic.core
992 #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
993 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
995 # rm -f xonotic.core.tar.gz
997 echo "The core dump can be examined later by"
998 echo " gdb $binary xonotic.core"
1004 if [ x"$1" = x"-k" ]; then
1009 if verbose cd "$d0/$d"; then
1010 if $keep_going; then
1011 verbose "$@" || true
1021 patchdir=`mktemp -d -t save-patches.XXXXXX`
1023 enter "$d0/$d" verbose
1024 git branch -v -v | cut -c 3- | {
1026 while read -r BRANCH REV UPSTREAM TEXT; do
1029 UPSTREAM=${UPSTREAM#\[}
1030 UPSTREAM=${UPSTREAM%\]}
1031 UPSTREAM=${UPSTREAM%:*}
1035 UPSTREAM=origin/"`repobranch "$d"`"
1039 if [ x"$REV" = x"->" ]; then
1042 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1043 echo "$d" > "$patchdir/$i/info.txt"
1044 echo "$BRANCH" >> "$patchdir/$i/info.txt"
1045 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
1046 echo "$TRACK" >> "$patchdir/$i/info.txt"
1049 rm -rf "$patchdir/$i"
1054 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1059 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1060 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1062 for P in "$patchdir"/*/info.txt; do
1067 read -r UPSTREAM <&3
1069 verbose git checkout HEAD^0
1070 verbose git branch -D "$BRANCH"
1071 if [ x"$TRACK" = x"true" ]; then
1072 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1074 verbose git branch -b "$BRANCH" "$UPSTREAM"
1086 report=$report"$*$LF"
1091 report=$report" $*$LF"
1096 o=`"$@" | sed 's/^/ /' || true`
1102 # sorry, fteqcc repo is managed manually
1106 enter "$d0/$d" verbose
1107 base="`repobranch "$d"`"
1109 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1110 case "${ref#refs/remotes/origin/}" in
1123 if [ -n "$branch" ]; then
1124 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1133 l0=`git rev-list "$base".."$ref" | wc -l`
1134 l1=`git rev-list master.."$ref" | wc -l`
1135 if [ $l0 -gt $l1 ]; then
1142 reportecho " Branch $ref:"
1143 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1144 logdata=`git log --color "$realbase".."$ref"`
1145 if [ -z "$logdata" ]; then
1146 reportecho4 "--> not merging, no changes vs master"
1147 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1148 git push origin :"${ref#refs/remotes/origin/}"
1149 reportecho4 "--> branch deleted"
1152 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1153 if [ -z "$diffdata" ]; then
1154 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1155 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1156 git push origin :"${ref#refs/remotes/origin/}"
1157 reportecho4 "--> branch deleted"
1159 elif [ -z "$branch" ] && [ -n "$note" ]; then
1160 reportdo4 echo "$note"
1161 reportecho4 "--> not merging, already had this one rejected before"
1162 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1163 git checkout "$realbase"
1164 org=`git rev-parse HEAD`
1165 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1166 git reset --hard "$org"
1167 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1169 reportecho4 "--> merge failed"
1170 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1171 git reset --hard "$org"
1172 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1174 reportecho4 "--> compile failed"
1175 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1176 git reset --hard "$org"
1177 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1178 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1179 if [ x"$note" = x"del" ]; then
1180 git push origin :"${ref#refs/remotes/origin/}"
1181 reportecho4 "--> test failed, branch deleted"
1182 elif [ -n "$note" ]; then
1183 reportdo4 echo "$note"
1184 reportecho4 "--> test failed"
1186 reportecho4 "--> test failed, postponed"
1189 # apply crlf, or other cleanup filters (non-behavioural changes)
1191 find . -type f -exec touch {} \;
1192 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1195 case ",`repoflags "$d"`," in
1197 # we do quite a mess here... luckily we know $org
1198 git fetch # svn needs to be current
1199 git rebase -i --onto origin/master "$org"
1200 git svn dcommit --add-author-from
1201 git reset --hard "$org"
1204 git push origin HEAD
1207 reportecho4 "--> MERGED"
1208 if yesno "Delete original branch \"$ref\"?"; then
1209 git push origin :"${ref#refs/remotes/origin/}"
1210 reportecho4 "--> branch deleted"
1214 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1215 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1216 if [ x"$note" = x"del" ]; then
1217 git push origin :"${ref#refs/remotes/origin/}"
1218 reportecho4 "--> branch deleted"
1219 elif [ -n "$note" ]; then
1220 reportdo4 echo "$note"
1221 reportecho4 "--> rejected"
1223 reportecho4 "--> postponed"
1232 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1244 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1245 # ./all clean --reclone
1248 if [ x"$X" = x"--reclone" ]; then
1255 elif [ x"$X" = x"-f" ]; then
1257 elif [ x"$X" = x"-u" ]; then
1259 elif [ x"$X" = x"-U" ]; then
1262 elif [ x"$X" = x"-fu" ]; then
1265 elif [ x"$X" = x"-fU" ]; then
1269 elif [ x"$X" = x"-m" ]; then
1271 elif [ x"$X" = x"-r" ]; then
1273 elif [ x"$X" = x"-D" ]; then
1275 elif echo "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1278 msg ' ,--'\''-\\P/`\\ FFFFFFF'
1279 msg ' __/_ B/,-.\\ FFFFFFF'
1280 msg ' / _\\ (// O\\\\ FFFFFF'
1281 msg '| (O `) _\\._ _)\\ FFFUU'
1282 msg '| |___/.^d0~~"\\ \\ UUUU'
1283 msg '| |`~'\'' \\ | UUUU'
1284 msg '| | __,C>|| UUUU'
1285 msg '\\ /_ ,-/,-'\'' | UUUU'
1286 msg ' \\\\_ \\_>~'\'' / UUUU-'
1289 msg "Unknown arg: $X"
1299 if $gotoupstream; then
1301 msg "Must also use -f (delete local changes) when using -u"
1304 if $gotomaster; then
1305 if $fetchupstream; then
1306 verbose git fetch origin
1307 verbose git remote prune origin
1309 verbose git checkout -f "`repobranch "$d"`"
1310 verbose git reset --hard origin/"`repobranch "$d"`"
1312 r=`git symbolic-ref HEAD`
1314 rem=`git config "branch.$r.remote" || echo origin`
1315 bra=`git config "branch.$r.merge" || echo "$r"`
1316 upstream="$rem/${bra#refs/heads/}"
1317 if $fetchupstream; then
1318 verbose git fetch "$rem"
1319 verbose git remote prune "$rem"
1321 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1322 upstream="origin/`repobranch "$d"`"
1324 verbose git reset --hard "$upstream"
1326 elif $gotomaster; then
1328 verbose git checkout -f "`repobranch "$d"`"
1329 verbose git reset --hard
1331 verbose git checkout "`repobranch "$d"`"
1334 verbose git reset --hard
1336 if $rmuntracked; then
1339 verbose git clean -df
1342 verbose git clean -xdf
1346 if $killbranches; then
1347 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1348 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1349 verbose git branch -D "${B#refs/heads/}"
1352 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1353 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1355 checkself "$cmd" "$@"
1359 # release building goes here
1361 #"$SELF" each git clean -fxd
1362 case "$RELEASETYPE" in
1364 msg "Building a BETA"
1367 msg "Building a RELEASE"
1370 echo >&2 -n "$ESC[2J$ESC[H"
1377 msg " +---------------------------------------------------------.---+"
1379 msg " +---------------------------------------------------------^---+"
1381 msg " | / \ This is the official release build system. |"
1382 msg " | | | If you are not a member of the Xonotic Core Team, |"
1383 msg " | | STOP | you are not supposed to use this script and should |"
1384 msg " | | | instead use ./all compile to compile the engine |"
1385 msg " | \____/ and game code. |"
1387 msg " | [ I understand ] |"
1388 msg " +-------------------------------------------------------------+"
1390 # A LOT of build infrastructure is required:
1393 # - .ssh/config must be configured so the following
1394 # host names are reachable and have a compile
1395 # infrastructure set up:
1396 # - xonotic-build-linux32 (with gcc on x86)
1397 # - xonotic-build-linux64 (with gcc on x86_64)
1398 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1399 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1400 # and x86_64-w64-mingw32-g++)
1401 # - xonotic-build-osx (with Xcode and SDL.framework)
1402 # - AMD Compressonator installed in WINE
1403 # - ResEdit installed in WINE
1404 # - a lot of other requirements you will figure out
1405 # while reading the error messages
1406 # - environment variable RELEASETYPE set
1407 # - optionally, environment variable RELEASEDATE set
1412 verbose rm -rf Xonotic Xonotic*.zip
1413 verbose mkdir -p Xonotic
1414 if [ -n "$RELEASEDATE" ]; then
1415 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1417 verbose date +%Y%m%d > Xonotic/stamp.txt
1419 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1421 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1423 verbose rm -rf misc/builddeps
1424 verbose mv misc/buildfiles/win32/* . || true
1425 verbose mv misc/buildfiles/win64 bin64 || true
1426 verbose mv misc/buildfiles/osx/* . || true
1427 verbose rm -rf misc/buildfiles
1428 verbose rm -rf misc/pki
1431 verbose cd darkplaces
1432 verbose git archive --format=tar HEAD
1434 verbose cd Xonotic/source/darkplaces
1439 verbose git archive --format=tar HEAD
1441 verbose cd Xonotic/source/fteqcc
1445 verbose cd data/xonotic-data.pk3dir
1446 verbose git archive --format=tar HEAD -- qcsrc Makefile
1448 verbose cd Xonotic/source
1451 rm -f Xonotic/key_15.d0pk
1453 release-compile-run)
1462 if [ -n "$targetfiles" ]; then
1463 case " $HOSTS_THAT_ARE_DISABLED " in
1468 case " $HOSTS_THAT_ARE_MYSELF " in
1470 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1471 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1472 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1473 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1474 for f in $targetfiles; do
1475 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1479 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1480 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1481 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1482 for f in $targetfiles; do
1483 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1487 # now rebrand the binaries...
1488 for f in $targetfiles; do
1489 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1492 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1494 d=`mktemp -d -t rebrand.XXXXXX`
1496 echo "-mygames" > darkplaces.opt
1497 zip -9r darkplaces.zip darkplaces.opt
1510 fteqcc_maketargets=$3
1512 darkplaces_maketargets=$5
1514 host=xonotic-build-$suffix
1515 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1516 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1518 release-engine-win32)
1519 verbose "$SELF" release-compile win32 \
1520 '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' \
1521 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1523 verbose "$SELF" release-compile win32 \
1524 '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' \
1526 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1528 release-engine-win64)
1529 verbose "$SELF" release-compile win64 \
1530 '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' \
1531 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1532 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1533 verbose "$SELF" release-compile win64 \
1534 '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' \
1536 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1539 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1540 verbose "$SELF" release-compile osx \
1541 '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"' \
1542 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1543 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1544 verbose "$SELF" release-compile osx \
1545 '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"' \
1547 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1549 release-engine-linux32)
1550 verbose "$SELF" release-compile linux32 \
1551 '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' \
1552 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1553 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1555 release-engine-linux64)
1556 verbose "$SELF" release-compile linux64 \
1557 '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' \
1558 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1559 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1562 verbose "$SELF" release-engine-linux32 &
1563 verbose "$SELF" release-engine-linux64 &
1564 verbose "$SELF" release-engine-win32 &
1565 verbose "$SELF" release-engine-win64 &
1566 verbose "$SELF" release-engine-osx &
1575 verbose "$SELF" update-maps
1578 case "$RELEASETYPE" in
1580 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1581 # back out of: source/qcsrc/server
1584 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1587 verbose rm -f Xonotic/source/*/fteqcc.log
1589 release-buildpk3-transform-raw)
1592 release-buildpk3-transform-normal)
1595 # texture: convert to jpeg and dds
1596 verbose export do_jpeg=true
1597 verbose export jpeg_qual_rgb=95
1598 verbose export jpeg_qual_a=99
1599 verbose export do_dds=true
1600 verbose export dds_flags=
1601 verbose export do_ogg=false
1602 verbose export del_src=true
1603 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1605 release-buildpk3-transform-low)
1608 # texture: convert to jpeg and dds
1609 # music: reduce bitrate
1610 verbose export do_jpeg=true
1611 verbose export jpeg_qual_rgb=80
1612 verbose export jpeg_qual_a=97
1613 verbose export do_dds=false
1614 verbose export do_ogg=true
1615 verbose export ogg_qual=1
1616 verbose export del_src=true
1617 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1619 release-buildpk3-transform-lowdds)
1622 # texture: convert to jpeg and dds
1623 # music: reduce bitrate
1624 verbose export do_jpeg=false
1625 verbose export do_jpeg_if_not_dds=true
1626 verbose export jpeg_qual_rgb=80
1627 verbose export jpeg_qual_a=99
1628 verbose export do_dds=true
1629 verbose export dds_flags=
1630 verbose export do_ogg=true
1631 verbose export ogg_qual=1
1632 verbose export del_src=true
1633 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1646 verbose rm -rf Xonotic/temp
1647 verbose mkdir -p Xonotic/temp
1650 verbose git archive --format=tar HEAD
1652 verbose cd Xonotic/temp
1655 verbose cd Xonotic/temp
1656 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1657 verbose cp ../source/progs.dat .
1658 verbose cp ../source/csprogs.dat .
1659 verbose cp ../source/menu.dat .
1660 verbose rm -rf qcsrc
1661 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1662 major=$(($gv / 10000))
1663 minor=$(($gv / 100 - $major * 100))
1664 patch=$(($gv - $major * 10000 - $minor * 100))
1665 versionstr="$major.$minor.$patch"
1666 case "$RELEASETYPE" in
1668 versionstr="$versionstr""beta"
1672 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1673 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1674 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1675 " defaultXonotic.cfg
1677 verbose cd gfx/menu/luminos
1678 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1679 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1680 verbose rm background_l2.svg
1683 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1684 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1685 if [ -f "$X" ]; then
1687 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1691 verbose export git_src_repo="$d0/$src" # skip hash-object
1692 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1693 verbose mkzip "../../$dst" *
1695 verbose rm -rf Xonotic/temp
1698 stamp=`cat Xonotic/stamp.txt`
1704 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1710 while [ "$#" -gt 1 ]; do
1711 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1717 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1718 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1719 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1720 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1721 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1723 release-pack-needsx11)
1726 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1729 verbose "$SELF" release-pack
1734 stamp=`cat Xonotic/stamp.txt`
1735 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1736 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1737 # let's pass crypto import laws of some nasty countries
1738 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1739 if [ -n "$crypto_libs" ]; then
1740 verbose mkzip Xonotic-$stamp-crypto.zip \
1744 # build the archives
1745 verbose mkzip Xonotic-$stamp-engine.zip \
1747 Xonotic/bin64/*.dll \
1750 Xonotic/xonotic.exe \
1751 Xonotic/source/darkplaces/
1752 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1753 verbose mkzip Xonotic-$stamp-common.zip \
1754 Xonotic/source/fteqcc/ \
1755 Xonotic/source/qcsrc/ \
1760 Xonotic/key_0.d0pk \
1761 Xonotic/data/font-nimbussansl-$stamp.pk3
1762 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1763 verbose mkzip0 Xonotic-$stamp.zip \
1764 Xonotic/data/xonotic-$stamp-data.pk3 \
1765 Xonotic/data/xonotic-$stamp-maps.pk3 \
1766 Xonotic/data/xonotic-$stamp-music.pk3 \
1767 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1768 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1769 verbose mkzip0 Xonotic-$stamp-low.zip \
1770 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1771 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1772 Xonotic/data/xonotic-$stamp-music-low.pk3
1773 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1774 # verbose mkzip0 Xonotic-$stamp-high.zip \
1775 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1776 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1777 # Xonotic/data/xonotic-$stamp-music.pk3 \
1778 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1779 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1780 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1781 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1782 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1783 Xonotic/data/xonotic-$stamp-music-low.pk3
1786 verbose "$SELF" release-prepare
1787 verbose "$SELF" release-maps
1788 verbose "$SELF" release-engine
1789 verbose "$SELF" release-qc
1790 verbose "$SELF" release-pack-needsx11
1791 verbose "$SELF" release-zip
1796 echo " $SELF admin-merge [<branch>]"
1797 echo " $SELF branch <branch>"
1798 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1799 echo " $SELF branches"
1800 echo " $SELF checkout|switch <branch>"
1801 echo " $SELF checkout|switch <remote>/<branch>"
1802 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1803 echo " $SELF clean --reclone"
1804 echo " $SELF compile [-c] [-r] [-0]"
1805 echo " $SELF each|foreach [-k] command..."
1806 echo " $SELF fix_upstream_rebase"
1807 echo " $SELF keygen"
1809 echo " $SELF push|commit [-s]"
1810 echo " $SELF release"
1811 echo " $SELF restore-patches"
1812 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1813 echo " $SELF save-patches"
1814 echo " $SELF update-maps"
1815 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"