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
359 if t=`mirrorspeed "$m"`; then
362 if [ -z "$bestt" ] || [ "$t" -lt "$bestt" ]; then
371 msg "Best mirror seems to be $pre$bestin$suf"
378 enter "$d0/$d" verbose
379 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
385 pushurl=`repopushurl "$d"`
386 branch=`repobranch "$d"`
387 if [ -d "$d0/$d" ]; then
389 fix_git_config "$url" "$pushurl"
395 # enable the ssh URL for pushing
398 if [ -f ~/.ssh/id_rsa.pub ]; then
400 msg "A key already exists and no new one will be generated. If you"
401 msg "already have done the procedure for getting your key approved, you"
402 msg "can skip the following paragraph and already use the repository."
404 msg "To get access, your key has to be approved first. For that, visit"
405 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
406 msg "the \"Support\" tracker in the \"Repository\" category where you"
407 msg "apply for access and paste the following output into the issue:"
409 msg "`cat ~/.ssh/id_rsa.pub`"
411 msg "Note that you will only have write access to branches that start"
412 msg "with your user name."
413 elif [ -f ~/.ssh/id_dsa.pub ]; then
415 msg "A key already exists and no new one will be generated. If you"
416 msg "already have done the procedure for getting your key approved, you"
417 msg "can skip the following paragraph and already use the repository."
419 msg "To get access, your key has to be approved first. For that, visit"
420 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
421 msg "the \"Support\" tracker in the \"Repository\" category where you"
422 msg "apply for access and paste the following output into the issue:"
424 msg "`cat ~/.ssh/id_dsa.pub`"
426 msg "Note that you will only have write access to branches that start"
427 msg "with your user name."
430 msg "No key has been generated yet. One will be generated now."
431 msg "If other people are using your computer, it is recommended"
432 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
433 msg "when asked for a passphrase."
435 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
437 msg "To get access, your key has to be approved first. For that, visit"
438 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
439 msg "the \"Support\" tracker in the \"Repository\" category where you"
440 msg "apply for access and paste the following output into the issue:"
442 msg "`cat ~/.ssh/id_rsa.pub`"
444 msg "Note that you will only have write access to branches that start"
445 msg "with your user name."
453 if [ x"$1" = x"-N" ]; then
455 elif [ x"$1" = x"-p" ]; then
457 if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
458 pushbase=ssh://xonotic@git.xonotic.org/
460 elif [ x"$1" = x"-s" ]; then
462 base=ssh://xonotic@git.xonotic.org/
464 elif [ x"$1" = x"-g" ]; then
466 base=git://git.xonotic.org/xonotic/
467 elif [ x"$1" = x"-h" ]; then
469 base=http://git.xonotic.org/xonotic/
470 elif [ x"$1" = x"-l" ]; then
477 msg "Invalid location!"
478 msg "Possible locations for the -l option:"
479 msg " nl (Netherlands, run by merlijn)"
480 msg " de (Germany, run by divVerent)"
481 msg " best (find automatically)"
482 msg " default (currently nl)"
500 *://*.git.xonotic.org/*)
501 location=${base%%.git.xonotic.org/*}
502 location=${location##*://}
510 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
513 location=`bestmirror $base"xonotic.git" de nl`
521 if [ -n "$location" ]; then
522 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
523 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
525 base=`echo "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
526 pushbase=`echo "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
530 pushurl=`repopushurl .`
531 fix_git_config "$url" "$pushurl"
533 if $allow_pull || $fix_config; then
538 pushurl=`repopushurl "$d"`
539 branch=`repobranch "$d"`
540 if [ -d "$d0/$d" ]; then
542 enter "$d0/$d" verbose
543 r=`git symbolic-ref HEAD`
545 if git config branch.$r.remote >/dev/null 2>&1; then
546 if ! verbose git pull; then
547 fix_upstream_rebase_mergefail || true
548 check_mergeconflict "$d"
549 echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
552 fix_upstream_rebase_mergeok || true
557 checkself "$cmd" "$@"
559 verbose git remote prune origin
563 verbose git clone "$url" "$d0/$d"
564 enter "$d0/$d" verbose
565 fix_git_config "$url" "$pushurl"
566 if [ "$branch" != "master" ]; then
567 verbose git checkout --track -b "$branch" origin/"$branch"
574 misc/tools/xonotic-map-compiler-autobuild download
578 if [ x"$1" = x"-f" ]; then
584 if [ -z "$branch" ]; then
587 branch=${remote#origin/}
598 enter "$d0/$d" verbose
600 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
602 verbose git checkout $checkoutflags "$b"
603 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
605 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
608 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
610 verbose git checkout $checkoutflags "$b"
611 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
613 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
615 echo "WTF? Not even branch $b doesn't exist in $d"
620 checkself "$cmd" "$@"
624 echo "The requested branch was not found in any repository."
632 if [ -z "$branch" ]; then
636 if [ -z "$branch" ]; then
639 r=`git symbolic-ref HEAD`
646 dv=`visible_repo_name "$d"`
647 enter "$d0/$d" verbose
648 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
649 echo "Already having this branch in $dv."
651 if yesno "Branch in $dv?"; then
652 if [ -n "$srcbranch" ]; then
655 b=origin/"`repobranch "$d"`"
656 verbose git fetch origin || true
658 # TODO do this without pushing
659 verbose git checkout -b "$branch" "$b"
660 verbose git config "branch.$branch.remote" "$remote"
661 verbose git config "branch.$branch.merge" "refs/heads/$branch"
671 cd "$d0/$d" # am in a pipe, shouldn't use enter
672 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
677 while read -r d BRANCH REV TEXT; do
678 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
681 if [ x"$REV" = x"->" ]; then
684 BRANCH=${BRANCH#remotes/}
685 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
686 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
687 eval "r=\$branches_repos_$ID"
689 eval "branches_repos_$ID=\$r"
691 echo -n "$branches_list" | xargs -n 1 echo | sort -u | while IFS= read -r BRANCH; do
692 ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
693 eval "r=\$branches_repos_$ID"
694 printf "%-60s %s\n" "$BRANCH" "$r"
701 dv=`visible_repo_name "$d"`
702 enter "$d0/$d" verbose
703 r=`git symbolic-ref HEAD`
705 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
706 # we have uncommitted changes
707 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
708 if ! verbose git merge origin/"`repobranch "$d"`"; then
709 check_mergeconflict "$d"
710 exit 1 # this should ALWAYS be fatal
720 dv=`visible_repo_name "$d"`
721 enter "$d0/$d" verbose
722 r=`git symbolic-ref HEAD`
724 diffdata=`git diff --color HEAD`
725 if [ -n "$diffdata" ]; then
726 # we have uncommitted changes
727 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" 'echo "$diffdata" | less -r'; then
728 verbose git commit -a
731 rem=`git config "branch.$r.remote" || echo origin`
732 bra=`git config "branch.$r.merge" || echo "$r"`
733 upstream="$rem/${bra#refs/heads/}"
734 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
735 upstream="origin/`repobranch "$d"`"
737 logdata=`git log --color "$upstream".."$r"`
738 if [ -n "$logdata" ]; then
739 if yesno "Push \"$r\" in $dv?" 'echo "$logdata" | less -r'; then
740 verbose git push "$rem" HEAD
743 if [ x"$submit" = x"-s" ]; then
746 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
760 snowleopardhack=false
761 if [ -z "$CC" ]; then
762 export CC="gcc -DSUPPORTIPV6"
779 export CC="$CC -g -mtune=native -march=native"
787 if [ -n "$WE_HATE_OUR_USERS" ]; then
788 TARGETS="sv-$debug cl-$debug"
789 elif [ x"`uname`" = x"Darwin" ]; then
792 TARGETS="sv-$debug cl-$debug sdl-$debug"
795 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
797 TARGETS="sv-$debug sdl-$debug"
800 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"
802 TARGETS="sv-$debug cl-$debug sdl-$debug"
804 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
805 # if we give the command make the arg "", it will surely fail (invalid filename),
806 # so better handle it as an empty client option
809 elif [ -n "$1" ]; then
811 TARGETS_SAVE=$TARGETS
816 TARGETS="$TARGETS sdl-debug"
819 TARGETS="$TARGETS cl-debug"
820 if $snowleopardhack; then
821 export CC="$CC -arch i386"
825 TARGETS="$TARGETS cl-debug"
828 TARGETS="$TARGETS sv-debug"
831 BAD_TARGETS="$BAD_TARGETS $X"
835 if [ -n "$TARGETS" ]; then # at least a valid client
837 else # no valid client, let's assume this option is not meant to be a client then
838 TARGETS=$TARGETS_SAVE
842 if [ -z "$MAKEFLAGS" ]; then
843 if [ -f /proc/cpuinfo ]; then
844 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
845 if [ $ncpus -gt 1 ]; then
849 if [ -n "$WE_HATE_OUR_USERS" ]; then
850 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
854 enter "$d0/d0_blind_id" verbose
855 if ! $compiled0; then
856 # compilation of crypto library failed
857 # use binaries then, if we can...
859 if [ -n "$WE_HATE_OUR_USERS" ]; then
860 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
861 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
867 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
868 verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
869 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
872 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
873 verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
874 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
882 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
892 if [ -f Makefile ]; then
893 verbose make $MAKEFLAGS distclean
896 if ! [ -f Makefile ]; then
897 verbose sh autogen.sh
900 verbose make $MAKEFLAGS
903 enter "$d0/fteqcc" verbose
905 verbose make $MAKEFLAGS clean
907 verbose make $MAKEFLAGS
909 enter "$d0/data/xonotic-data.pk3dir" verbose
911 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
913 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
914 # 4 levels up: data, xonotic-data, qcsrc, server
916 enter "$d0/darkplaces" verbose
917 if [ x"$BAD_TARGETS" = x" " ]; then
918 echo "Warning: invalid empty client, default clients will be used."
921 verbose make $MAKEFLAGS clean
923 for T in $TARGETS; do
924 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
926 for T in $BAD_TARGETS; do
927 echo "Warning: discarded invalid client $T."
930 verbose "$SELF" update-maps
933 if [ -n "$WE_HATE_OUR_USERS" ]; then
935 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
936 elif [ x"`uname`" = x"Darwin" ]; then
937 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
938 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
941 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
945 sdl|glx|agl|dedicated)
954 if ! [ -x "darkplaces/darkplaces$client" ]; then
955 if [ -x "darkplaces/darkplaces$client.exe" ]; then
958 echo "Client darkplaces/darkplaces$client not found, aborting"
962 set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
964 # if pulseaudio is running: USE IT
965 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
966 if ps -C pulseaudio >/dev/null; then
967 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
968 export SDL_AUDIODRIVER=pulse
975 if [ -n "$USE_GDB" ]; then
976 set -- gdb --args "$@"
977 elif which gdb >/dev/null 2>&1; then
978 set -- gdb --batch -x savecore.gdb --args "$@"
979 elif which catchsegv >/dev/null 2>&1; then
980 set -- catchsegv "$@"
984 if [ -f xonotic.core ]; then
985 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
986 gdb "$binary" xonotic.core
987 #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
988 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
990 # rm -f xonotic.core.tar.gz
992 echo "The core dump can be examined later by"
993 echo " gdb $binary xonotic.core"
999 if [ x"$1" = x"-k" ]; then
1004 if verbose cd "$d0/$d"; then
1005 if $keep_going; then
1006 verbose "$@" || true
1016 patchdir=`mktemp -d -t save-patches.XXXXXX`
1018 enter "$d0/$d" verbose
1019 git branch -v -v | cut -c 3- | {
1021 while read -r BRANCH REV UPSTREAM TEXT; do
1024 UPSTREAM=${UPSTREAM#\[}
1025 UPSTREAM=${UPSTREAM%\]}
1026 UPSTREAM=${UPSTREAM%:*}
1030 UPSTREAM=origin/"`repobranch "$d"`"
1034 if [ x"$REV" = x"->" ]; then
1037 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1038 echo "$d" > "$patchdir/$i/info.txt"
1039 echo "$BRANCH" >> "$patchdir/$i/info.txt"
1040 echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
1041 echo "$TRACK" >> "$patchdir/$i/info.txt"
1044 rm -rf "$patchdir/$i"
1049 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1054 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1055 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1057 for P in "$patchdir"/*/info.txt; do
1062 read -r UPSTREAM <&3
1064 verbose git checkout HEAD^0
1065 verbose git branch -D "$BRANCH"
1066 if [ x"$TRACK" = x"true" ]; then
1067 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1069 verbose git branch -b "$BRANCH" "$UPSTREAM"
1081 report=$report"$*$LF"
1086 report=$report" $*$LF"
1091 o=`"$@" | sed 's/^/ /' || true`
1097 # sorry, fteqcc repo is managed manually
1101 enter "$d0/$d" verbose
1102 base="`repobranch "$d"`"
1104 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1105 case "${ref#refs/remotes/origin/}" in
1118 if [ -n "$branch" ]; then
1119 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1128 l0=`git rev-list "$base".."$ref" | wc -l`
1129 l1=`git rev-list master.."$ref" | wc -l`
1130 if [ $l0 -gt $l1 ]; then
1137 reportecho " Branch $ref:"
1138 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1139 logdata=`git log --color "$realbase".."$ref"`
1140 if [ -z "$logdata" ]; then
1141 reportecho4 "--> not merging, no changes vs master"
1142 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1143 git push origin :"${ref#refs/remotes/origin/}"
1144 reportecho4 "--> branch deleted"
1147 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1148 if [ -z "$diffdata" ]; then
1149 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1150 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
1151 git push origin :"${ref#refs/remotes/origin/}"
1152 reportecho4 "--> branch deleted"
1154 elif [ -z "$branch" ] && [ -n "$note" ]; then
1155 reportdo4 echo "$note"
1156 reportecho4 "--> not merging, already had this one rejected before"
1157 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
1158 git checkout "$realbase"
1159 org=`git rev-parse HEAD`
1160 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1161 git reset --hard "$org"
1162 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1164 reportecho4 "--> merge failed"
1165 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1166 git reset --hard "$org"
1167 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1169 reportecho4 "--> compile failed"
1170 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1171 git reset --hard "$org"
1172 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1173 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1174 if [ x"$note" = x"del" ]; then
1175 git push origin :"${ref#refs/remotes/origin/}"
1176 reportecho4 "--> test failed, branch deleted"
1177 elif [ -n "$note" ]; then
1178 reportdo4 echo "$note"
1179 reportecho4 "--> test failed"
1181 reportecho4 "--> test failed, postponed"
1184 # apply crlf, or other cleanup filters (non-behavioural changes)
1186 find . -type f -exec touch {} \;
1187 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1190 case ",`repoflags "$d"`," in
1192 # we do quite a mess here... luckily we know $org
1193 git fetch # svn needs to be current
1194 git rebase -i --onto origin/master "$org"
1195 git svn dcommit --add-author-from
1196 git reset --hard "$org"
1199 git push origin HEAD
1202 reportecho4 "--> MERGED"
1203 if yesno "Delete original branch \"$ref\"?"; then
1204 git push origin :"${ref#refs/remotes/origin/}"
1205 reportecho4 "--> branch deleted"
1209 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1210 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1211 if [ x"$note" = x"del" ]; then
1212 git push origin :"${ref#refs/remotes/origin/}"
1213 reportecho4 "--> branch deleted"
1214 elif [ -n "$note" ]; then
1215 reportdo4 echo "$note"
1216 reportecho4 "--> rejected"
1218 reportecho4 "--> postponed"
1227 echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1239 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1240 # ./all clean --reclone
1243 if [ x"$X" = x"--reclone" ]; then
1250 elif [ x"$X" = x"-f" ]; then
1252 elif [ x"$X" = x"-u" ]; then
1254 elif [ x"$X" = x"-U" ]; then
1257 elif [ x"$X" = x"-fu" ]; then
1260 elif [ x"$X" = x"-fU" ]; then
1264 elif [ x"$X" = x"-m" ]; then
1266 elif [ x"$X" = x"-r" ]; then
1268 elif [ x"$X" = x"-D" ]; then
1270 elif echo "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1273 msg ' ,--'\''-\\P/`\\ FFFFFFF'
1274 msg ' __/_ B/,-.\\ FFFFFFF'
1275 msg ' / _\\ (// O\\\\ FFFFFF'
1276 msg '| (O `) _\\._ _)\\ FFFUU'
1277 msg '| |___/.^d0~~"\\ \\ UUUU'
1278 msg '| |`~'\'' \\ | UUUU'
1279 msg '| | __,C>|| UUUU'
1280 msg '\\ /_ ,-/,-'\'' | UUUU'
1281 msg ' \\\\_ \\_>~'\'' / UUUU-'
1284 msg "Unknown arg: $X"
1294 if $gotoupstream; then
1296 msg "Must also use -f (delete local changes) when using -u"
1299 if $gotomaster; then
1300 if $fetchupstream; then
1301 verbose git fetch origin
1302 verbose git remote prune origin
1304 verbose git checkout -f "`repobranch "$d"`"
1305 verbose git reset --hard origin/"`repobranch "$d"`"
1307 r=`git symbolic-ref HEAD`
1309 rem=`git config "branch.$r.remote" || echo origin`
1310 bra=`git config "branch.$r.merge" || echo "$r"`
1311 upstream="$rem/${bra#refs/heads/}"
1312 if $fetchupstream; then
1313 verbose git fetch "$rem"
1314 verbose git remote prune "$rem"
1316 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1317 upstream="origin/`repobranch "$d"`"
1319 verbose git reset --hard "$upstream"
1321 elif $gotomaster; then
1323 verbose git checkout -f "`repobranch "$d"`"
1324 verbose git reset --hard
1326 verbose git checkout "`repobranch "$d"`"
1329 verbose git reset --hard
1331 if $rmuntracked; then
1334 verbose git clean -df
1337 verbose git clean -xdf
1341 if $killbranches; then
1342 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1343 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1344 verbose git branch -D "${B#refs/heads/}"
1347 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
1348 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1350 checkself "$cmd" "$@"
1354 # release building goes here
1356 #"$SELF" each git clean -fxd
1357 case "$RELEASETYPE" in
1359 msg "Building a BETA"
1362 msg "Building a RELEASE"
1365 echo >&2 -n "$ESC[2J$ESC[H"
1372 msg " +---------------------------------------------------------.---+"
1374 msg " +---------------------------------------------------------^---+"
1376 msg " | / \ This is the official release build system. |"
1377 msg " | | | If you are not a member of the Xonotic Core Team, |"
1378 msg " | | STOP | you are not supposed to use this script and should |"
1379 msg " | | | instead use ./all compile to compile the engine |"
1380 msg " | \____/ and game code. |"
1382 msg " | [ I understand ] |"
1383 msg " +-------------------------------------------------------------+"
1385 # A LOT of build infrastructure is required:
1388 # - .ssh/config must be configured so the following
1389 # host names are reachable and have a compile
1390 # infrastructure set up:
1391 # - xonotic-build-linux32 (with gcc on x86)
1392 # - xonotic-build-linux64 (with gcc on x86_64)
1393 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1394 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1395 # and x86_64-w64-mingw32-g++)
1396 # - xonotic-build-osx (with Xcode and SDL.framework)
1397 # - AMD Compressonator installed in WINE
1398 # - ResEdit installed in WINE
1399 # - a lot of other requirements you will figure out
1400 # while reading the error messages
1401 # - environment variable RELEASETYPE set
1402 # - optionally, environment variable RELEASEDATE set
1407 verbose rm -rf Xonotic Xonotic*.zip
1408 verbose mkdir -p Xonotic
1409 if [ -n "$RELEASEDATE" ]; then
1410 verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
1412 verbose date +%Y%m%d > Xonotic/stamp.txt
1414 verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
1416 verbose mkdir data fteqcc source source/darkplaces source/fteqcc
1418 verbose rm -rf misc/builddeps
1419 verbose mv misc/buildfiles/win32/* . || true
1420 verbose mv misc/buildfiles/win64 bin64 || true
1421 verbose mv misc/buildfiles/osx/* . || true
1422 verbose rm -rf misc/buildfiles
1423 verbose rm -rf misc/pki
1426 verbose cd darkplaces
1427 verbose git archive --format=tar HEAD
1429 verbose cd Xonotic/source/darkplaces
1434 verbose git archive --format=tar HEAD
1436 verbose cd Xonotic/source/fteqcc
1440 verbose cd data/xonotic-data.pk3dir
1441 verbose git archive --format=tar HEAD -- qcsrc Makefile
1443 verbose cd Xonotic/source
1446 rm -f Xonotic/key_15.d0pk
1448 release-compile-run)
1457 if [ -n "$targetfiles" ]; then
1458 case " $HOSTS_THAT_ARE_DISABLED " in
1463 case " $HOSTS_THAT_ARE_MYSELF " in
1465 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1466 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1467 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1468 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1469 for f in $targetfiles; do
1470 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1474 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1475 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1476 verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1477 for f in $targetfiles; do
1478 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1482 # now rebrand the binaries...
1483 for f in $targetfiles; do
1484 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1487 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1489 d=`mktemp -d -t rebrand.XXXXXX`
1491 echo "-mygames" > darkplaces.opt
1492 zip -9r darkplaces.zip darkplaces.opt
1505 fteqcc_maketargets=$3
1507 darkplaces_maketargets=$5
1509 host=xonotic-build-$suffix
1510 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1511 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1513 release-engine-win32)
1514 verbose "$SELF" release-compile win32 \
1515 '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' \
1516 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1518 verbose "$SELF" release-compile win32 \
1519 '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' \
1521 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1523 release-engine-win64)
1524 verbose "$SELF" release-compile win64 \
1525 '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' \
1526 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1527 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1528 verbose "$SELF" release-compile win64 \
1529 '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' \
1531 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1534 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1535 verbose "$SELF" release-compile osx \
1536 '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"' \
1537 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1538 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1539 verbose "$SELF" release-compile osx \
1540 '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"' \
1542 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
1544 release-engine-linux32)
1545 verbose "$SELF" release-compile linux32 \
1546 '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' \
1547 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1548 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1550 release-engine-linux64)
1551 verbose "$SELF" release-compile linux64 \
1552 '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' \
1553 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1554 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1557 verbose "$SELF" release-engine-linux32 &
1558 verbose "$SELF" release-engine-linux64 &
1559 verbose "$SELF" release-engine-win32 &
1560 verbose "$SELF" release-engine-win64 &
1561 verbose "$SELF" release-engine-osx &
1570 verbose "$SELF" update-maps
1573 case "$RELEASETYPE" in
1575 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1576 # back out of: source/qcsrc/server
1579 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
1582 verbose rm -f Xonotic/source/*/fteqcc.log
1584 release-buildpk3-transform-raw)
1587 release-buildpk3-transform-normal)
1590 # texture: convert to jpeg and dds
1591 verbose export do_jpeg=true
1592 verbose export jpeg_qual_rgb=95
1593 verbose export jpeg_qual_a=99
1594 verbose export do_dds=true
1595 verbose export dds_flags=
1596 verbose export do_ogg=false
1597 verbose export del_src=true
1598 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1600 release-buildpk3-transform-low)
1603 # texture: convert to jpeg and dds
1604 # music: reduce bitrate
1605 verbose export do_jpeg=true
1606 verbose export jpeg_qual_rgb=80
1607 verbose export jpeg_qual_a=97
1608 verbose export do_dds=false
1609 verbose export do_ogg=true
1610 verbose export ogg_qual=1
1611 verbose export del_src=true
1612 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1614 release-buildpk3-transform-lowdds)
1617 # texture: convert to jpeg and dds
1618 # music: reduce bitrate
1619 verbose export do_jpeg=false
1620 verbose export do_jpeg_if_not_dds=true
1621 verbose export jpeg_qual_rgb=80
1622 verbose export jpeg_qual_a=99
1623 verbose export do_dds=true
1624 verbose export dds_flags=
1625 verbose export do_ogg=true
1626 verbose export ogg_qual=1
1627 verbose export del_src=true
1628 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1641 verbose rm -rf Xonotic/temp
1642 verbose mkdir -p Xonotic/temp
1645 verbose git archive --format=tar HEAD
1647 verbose cd Xonotic/temp
1650 verbose cd Xonotic/temp
1651 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1652 verbose cp ../source/progs.dat .
1653 verbose cp ../source/csprogs.dat .
1654 verbose cp ../source/menu.dat .
1655 verbose rm -rf qcsrc
1656 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1657 major=$(($gv / 10000))
1658 minor=$(($gv / 100 - $major * 100))
1659 patch=$(($gv - $major * 10000 - $minor * 100))
1660 versionstr="$major.$minor.$patch"
1661 case "$RELEASETYPE" in
1663 versionstr="$versionstr""beta"
1667 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1668 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1669 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1670 " defaultXonotic.cfg
1672 verbose cd gfx/menu/luminos
1673 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1674 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1675 verbose rm background_l2.svg
1678 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1679 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1680 if [ -f "$X" ]; then
1682 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1686 verbose export git_src_repo="$d0/$src" # skip hash-object
1687 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1688 verbose mkzip "../../$dst" *
1690 verbose rm -rf Xonotic/temp
1693 stamp=`cat Xonotic/stamp.txt`
1699 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1705 while [ "$#" -gt 1 ]; do
1706 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1712 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1713 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' low '-low' lowdds '-lowdds'
1714 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' low '-low' lowdds '-lowdds'
1715 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1716 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
1718 release-pack-needsx11)
1721 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1724 verbose "$SELF" release-pack
1729 stamp=`cat Xonotic/stamp.txt`
1730 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1731 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1732 # let's pass crypto import laws of some nasty countries
1733 crypto_libs=`find Xonotic -name \*d0_rijndael\*`
1734 if [ -n "$crypto_libs" ]; then
1735 verbose mkzip Xonotic-$stamp-crypto.zip \
1739 # build the archives
1740 verbose mkzip Xonotic-$stamp-engine.zip \
1742 Xonotic/bin64/*.dll \
1745 Xonotic/xonotic.exe \
1746 Xonotic/source/darkplaces/
1747 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1748 verbose mkzip Xonotic-$stamp-common.zip \
1749 Xonotic/source/fteqcc/ \
1750 Xonotic/source/qcsrc/ \
1755 Xonotic/key_0.d0pk \
1756 Xonotic/data/font-nimbussansl-$stamp.pk3
1757 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1758 verbose mkzip0 Xonotic-$stamp.zip \
1759 Xonotic/data/xonotic-$stamp-data.pk3 \
1760 Xonotic/data/xonotic-$stamp-maps.pk3 \
1761 Xonotic/data/xonotic-$stamp-music.pk3 \
1762 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1763 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1764 verbose mkzip0 Xonotic-$stamp-low.zip \
1765 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1766 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1767 Xonotic/data/xonotic-$stamp-music-low.pk3
1768 # verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1769 # verbose mkzip0 Xonotic-$stamp-high.zip \
1770 # Xonotic/data/xonotic-$stamp-data-raw.pk3 \
1771 # Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
1772 # Xonotic/data/xonotic-$stamp-music.pk3 \
1773 # Xonotic/data/xonotic-$stamp-nexcompat.pk3
1774 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
1775 verbose mkzip0 Xonotic-$stamp-lowdds.zip \
1776 Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
1777 Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
1778 Xonotic/data/xonotic-$stamp-music-low.pk3
1781 verbose "$SELF" release-prepare
1782 verbose "$SELF" release-maps
1783 verbose "$SELF" release-engine
1784 verbose "$SELF" release-qc
1785 verbose "$SELF" release-pack-needsx11
1786 verbose "$SELF" release-zip
1791 echo " $SELF admin-merge [<branch>]"
1792 echo " $SELF branch <branch>"
1793 echo " $SELF branch <remote> <branch> [<srcbranch>]"
1794 echo " $SELF branches"
1795 echo " $SELF checkout|switch <branch>"
1796 echo " $SELF checkout|switch <remote>/<branch>"
1797 echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1798 echo " $SELF clean --reclone"
1799 echo " $SELF compile [-c] [-r] [-0]"
1800 echo " $SELF each|foreach [-k] command..."
1801 echo " $SELF fix_upstream_rebase"
1802 echo " $SELF keygen"
1804 echo " $SELF push|commit [-s]"
1805 echo " $SELF release"
1806 echo " $SELF restore-patches"
1807 echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1808 echo " $SELF save-patches"
1809 echo " $SELF update-maps"
1810 echo " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"