5 if [ -n "$ZSH_VERSION" ]; then
8 if [ -z "$ECHO" ]; then
9 if echo "\\\\" | grep .. >/dev/null; then
16 # I use this in EVERY shell script ;)
22 while ! [ -f ./all ]; do
23 if [ x"`pwd`" = x"/" ]; then
24 $ECHO "Cannot find myself."
25 $ECHO "Please run this script with the working directory inside a Xonotic checkout."
33 # If we are on WINDOWS:
38 # Windows hates users. So this script has to copy itself elsewhere first...
39 cp "$SELF" ../all.xonotic.sh
40 export WE_HATE_OUR_USERS=1
41 exec ../all.xonotic.sh "$@"
49 $ECHO >&2 "$ESC""[1m$*$ESC""[m"
52 self=`git hash-object "$SELF"`
55 self_new=`git hash-object "$SELF"`
56 if [ x"$self" != x"$self_new" ]; then
57 msg "./all has changed."
58 if [ -z "$XONOTIC_FORBID_RERUN_ALL" ]; then
59 msg "Rerunning the requested operation to make sure."
60 export XONOTIC_FORBID_RERUN_ALL=1
63 msg "Please try $SELF update, and then retry your requested operation."
80 $ECHO "the root directory"
90 if git ls-files -u | grep ' 1 '; then
92 $ECHO "MERGE CONFLICT."
93 $ECHO "change into the \"$1\" project directory, and then:"
94 $ECHO "- edit the files mentioned above with your favorite editor,"
95 $ECHO " and fix the conflicts (marked with <<<<<<< blocks)"
96 $ECHO "- for binary files, you can select the files using"
97 $ECHO " git checkout --ours or git checkout --theirs"
98 $ECHO "- when done with a file, 'git add' the file"
99 $ECHO "- when done, 'git commit'"
108 while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
111 if ! IFS= read -r yesno; then
122 check_mergeconflict "$1"
127 data/xonotic-data.pk3dir | | master |
128 data/xonotic-music.pk3dir | | master |
129 data/xonotic-nexcompat.pk3dir | | master | no
130 darkplaces | | div0-stable | svn
131 netradiant | | master |
132 div0-gittools | | master | no
133 d0_blind_id | | master |
134 data/xonotic-maps.pk3dir | | master |
135 mediasource | | master | no
136 fteqcc | | xonotic-stable | noautocrlf
138 # todo: in darkplaces, change repobranch to div0-stable
140 repos=`$ECHO "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
142 base=`git config remote.origin.url`
145 base=${base%xonotic.git}
148 $ECHO "The main repo is not xonotic.git, what have you done?"
152 pushbase=`git config remote.origin.pushurl || true`
155 pushbase=${pushbase%xonotic.git}
160 $ECHO "The main repo is not xonotic.git, what have you done?"
167 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
168 if [ -n "$repo_t" ]; then
178 if [ x"$1" = x"." ]; then
179 $ECHO "$base""xonotic.git"
181 $ECHO "$base${1##*/}.git"
188 [ -n "$pushbase" ] || return 0
189 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
190 if [ -n "$repo_t" ]; then
195 $ECHO "$pushbase$repo_t"
199 if [ x"$1" = x"." ]; then
200 $ECHO "$pushbase""xonotic.git"
202 $ECHO "$pushbase${1##*/}.git"
209 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
210 if [ -n "$repo_t" ]; then
219 $ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
227 # if we have the dir, always keep it
229 msg "Repository $d enabled because it already exists"
233 # if .yes file exists, always keep it
234 if [ -f "$d.yes" ]; then
235 msg "Repository $d enabled by a .yes file"
239 # if we have .no file, skip
240 if [ -f "$d.no" ]; then
241 msg "Repository $d disabled by a .no file, delete $d.no to enable"
244 # if we have matching pk3, skip
245 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
246 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
249 # if "no" flag is set, skip
252 msg "Repository $d disabled by default, create $d.yes to enable"
257 msg "Repository $d enabled by default"
264 if [ "$#" = 0 ]; then
274 release_args="$cmd $*"
275 msg "*** $release_args: start"
276 release_starttime=`date +%s`
279 release_endtime=`date +%s`
280 release_deltatime=$(($release_endtime - $release_starttime))
281 msg "*** $release_args: $release_deltatime seconds"
283 trap release_end EXIT
284 release_tempstarttime=$release_starttime
287 release_endtime=`date +%s` # RELEASE NOW!!!
289 release_deltatime=$(($release_endtime - $release_tempstarttime))
290 msg "**** $release_args: $*: $release_deltatime seconds"
292 release_tempstarttime=$release_endtime
294 release_git_extract_dir()
296 release_src=$1; shift
297 release_dst=$1; shift
298 # try to create a hardlink
299 if ln -f "$release_src/.git/HEAD" "$release_dst/.hardlink-test"; then
300 rm -f "$release_dst/.hardlink-test"
302 verbose cd "$release_src"
303 git ls-files HEAD -- "$@"
305 while IFS= read -r F; do
306 case "$F" in */*) mkdir -p "$release_dst/${F%/*}" ;; esac
307 verbose ln -f "$release_src/$F" "$release_dst/$F"
312 verbose cd "$release_src"
313 verbose git archive --format=tar HEAD -- "$@"
315 verbose cd "$release_dst"
323 fix_upstream_rebase()
325 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
329 # one of the two sides of the merge should be remote upstream, or all is fine
330 r_r=`git symbolic-ref HEAD`
331 r_r=${r_r#refs/heads/}
332 r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
333 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
334 r_bra=${r_bra#refs/heads/}
335 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
336 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
341 r_base=`git merge-base "$r_me" "$r_other"`
343 # no merge-base? upstream did filter-branch
344 if [ -n "$r_base" ]; then
345 # otherwise, check if the two histories are "similar"
346 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
347 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
349 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
350 r_lc_me=`$ECHO "$r_l_me" | wc -l`
351 r_lc_other=`$ECHO "$r_l_other" | wc -l`
352 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
353 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
355 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
356 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
357 git reset --hard "$r_me"
367 fix_upstream_rebase_mergeok()
369 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
370 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
374 fix_upstream_rebase_mergefail()
376 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
377 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
383 if ! [ -d ".git" ]; then
384 $ECHO "Not a git repository. Bailing out to not cause damage."
387 verbose git config remote.origin.url "$1"
389 verbose git config remote.origin.pushurl "$2"
391 verbose git config --unset remote.origin.pushurl || true
393 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
394 case ",`repoflags "$d"`," in
396 verbose git config --unset core.autocrlf || true
399 verbose git config core.autocrlf input
402 if [ -z "`git config push.default || true`" ]; then
403 verbose git config push.default current # or is tracking better?
405 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
406 verbose git config filter.mapclean.smudge "cat"
412 case "$RELEASETYPE" in
422 find "$@" -exec touch -d "2001-01-01 01:01:01 +0000" {} \+ # ugly hack to make the pk3 files rsync-friendly
424 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
425 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
426 zip $zipflags -y -@<"$ziplist" "$archive" || true
433 case "$RELEASETYPE" in
444 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
445 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
446 zip $zipflags -y -@<"$ziplist" "$archive" || true
453 zip -0ry "$archive" "$@"
458 # first result is to be ignored, but we use it to check status
459 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
460 { 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*,,'
461 # unit: clock ticks (depends on what "time" returns
469 if ! { time -p true; } >/dev/null 2>&1; then
470 msg "Cannot do timing in this shell"
488 if t=`mirrorspeed "$m"`; then
490 tt=$(($t$op)) # fudge factor
491 msg "$m -> $t$op = $tt ticks"
492 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
503 if [ -n "$bestin" ]; then
504 msg "Best mirror seems to be $pre$bestin$suf"
514 enter "$d0/$d" verbose
515 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
521 pushurl=`repopushurl "$d"`
522 branch=`repobranch "$d"`
523 if [ -d "$d0/$d" ]; then
525 fix_git_config "$url" "$pushurl"
531 # enable the ssh URL for pushing
534 if [ -f ~/.ssh/id_rsa.pub ]; then
536 msg "A key already exists and no new one will be generated. If you"
537 msg "already have done the procedure for getting your key approved, you"
538 msg "can skip the following paragraph and already use the repository."
540 msg "To get access, your key has to be approved first. For that, visit"
541 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
542 msg "the \"Support\" tracker in the \"Repository\" category where you"
543 msg "apply for access and paste the following output into the issue:"
545 msg "`cat ~/.ssh/id_rsa.pub`"
547 msg "Note that you will only have write access to branches that start"
548 msg "with your user name."
549 elif [ -f ~/.ssh/id_dsa.pub ]; then
551 msg "A key already exists and no new one will be generated. If you"
552 msg "already have done the procedure for getting your key approved, you"
553 msg "can skip the following paragraph and already use the repository."
555 msg "To get access, your key has to be approved first. For that, visit"
556 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
557 msg "the \"Support\" tracker in the \"Repository\" category where you"
558 msg "apply for access and paste the following output into the issue:"
560 msg "`cat ~/.ssh/id_dsa.pub`"
562 msg "Note that you will only have write access to branches that start"
563 msg "with your user name."
566 msg "No key has been generated yet. One will be generated now."
567 msg "If other people are using your computer, it is recommended"
568 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
569 msg "when asked for a passphrase."
571 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
573 msg "To get access, your key has to be approved first. For that, visit"
574 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
575 msg "the \"Support\" tracker in the \"Repository\" category where you"
576 msg "apply for access and paste the following output into the issue:"
578 msg "`cat ~/.ssh/id_rsa.pub`"
580 msg "Note that you will only have write access to branches that start"
581 msg "with your user name."
589 if [ x"$1" = x"-N" ]; then
591 elif [ x"$1" = x"-p" ]; then
593 pushbase=ssh://xonotic@git.xonotic.org/
594 elif [ x"$1" = x"-ps" ]; then
596 pushbase=ssh://xonotic@git.xonotic.org/
597 elif [ x"$1" = x"-ph" ]; then
599 pushbase=http://git.xonotic.org/login/xonotic/
600 elif [ x"$1" = x"-s" ]; then
602 base=ssh://xonotic@git.xonotic.org/
603 elif [ x"$1" = x"-g" ]; then
605 base=git://git.xonotic.org/xonotic/
606 elif [ x"$1" = x"-h" ]; then
608 base=http://git.xonotic.org/xonotic/
609 elif [ x"$1" = x"-l" ]; then
617 msg "Invalid location!"
618 msg "Possible locations for the -l option:"
619 msg " nl (Netherlands, run by merlijn)"
620 msg " de (Germany, run by divVerent)"
621 msg " us (United States of America, run by detrate)"
622 msg " best (find automatically)"
623 msg " default (currently nl)"
637 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
644 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
648 base=git://git.xonotic.org/xonotic/
651 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
654 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
655 git config xonotic.all.mirrorselection done
672 *://*.git.xonotic.org/*)
673 location=${base%%.git.xonotic.org/*}
674 location=${location##*://}
682 if [ -n "$location" ]; then
683 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
684 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
686 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
687 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
691 pushurl=`repopushurl .`
692 fix_git_config "$url" "$pushurl"
694 if $allow_pull || $fix_config; then
699 pushurl=`repopushurl "$d"`
700 branch=`repobranch "$d"`
701 if [ -d "$d0/$d" ]; then
702 # if we have .no file, skip
703 if [ -f "$d0/$d.no" ]; then
704 msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
708 enter "$d0/$d" verbose
709 r=`git symbolic-ref HEAD`
711 if git config branch.$r.remote >/dev/null 2>&1; then
712 if ! verbose git pull; then
713 fix_upstream_rebase_mergefail || true
714 check_mergeconflict "$d"
715 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
718 fix_upstream_rebase_mergeok || true
723 checkself "$cmd" "$@"
725 verbose git remote prune origin
729 verbose git clone "$url" "$d0/$d"
730 enter "$d0/$d" verbose
731 fix_git_config "$url" "$pushurl"
732 if [ "$branch" != "master" ]; then
733 verbose git checkout --track -b "$branch" origin/"$branch"
740 misc/tools/xonotic-map-compiler-autobuild download
744 if [ x"$1" = x"-f" ]; then
750 if [ -z "$branch" ]; then
753 branch=${remote#origin/}
762 if [ -n "$checkoutflags" ]; then
763 set -- -f "$@" # to make checkself work again
767 enter "$d0/$d" verbose
769 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
771 verbose git checkout $checkoutflags "$b"
772 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
774 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
777 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
778 verbose git checkout $checkoutflags "$b"
779 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
780 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
782 $ECHO "WTF? Not even branch $b doesn't exist in $d"
787 checkself "$cmd" "$@"
791 $ECHO "The requested branch was not found in any repository."
799 if [ -z "$branch" ]; then
803 if [ -z "$branch" ]; then
806 r=`git symbolic-ref HEAD`
813 dv=`visible_repo_name "$d"`
814 enter "$d0/$d" verbose
815 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
816 $ECHO "Already having this branch in $dv."
818 if yesno "Branch in $dv?"; then
819 if [ -n "$srcbranch" ]; then
822 b=origin/"`repobranch "$d"`"
823 verbose git fetch origin || true
825 # TODO do this without pushing
826 verbose git checkout -b "$branch" "$b"
827 verbose git config "branch.$branch.remote" "$remote"
828 verbose git config "branch.$branch.merge" "refs/heads/$branch"
838 cd "$d0/$d" # am in a pipe, shouldn't use enter
839 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
844 while read -r d BRANCH REV TEXT; do
845 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
848 if [ x"$REV" = x"->" ]; then
851 BRANCH=${BRANCH#remotes/}
852 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
853 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
854 eval "r=\$branches_repos_$ID"
856 eval "branches_repos_$ID=\$r"
858 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
859 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
860 eval "r=\$branches_repos_$ID"
861 printf "%-60s %s\n" "$BRANCH" "$r"
868 dv=`visible_repo_name "$d"`
869 enter "$d0/$d" verbose
870 r=`git symbolic-ref HEAD`
872 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
873 # we have uncommitted changes
874 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
875 if ! verbose git merge origin/"`repobranch "$d"`"; then
876 check_mergeconflict "$d"
877 exit 1 # this should ALWAYS be fatal
887 dv=`visible_repo_name "$d"`
888 enter "$d0/$d" verbose
889 r=`git symbolic-ref HEAD`
891 diffdata=`git diff --color HEAD`
892 if [ -n "$diffdata" ]; then
893 # we have uncommitted changes
894 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
895 verbose git commit -a
898 rem=`git config "branch.$r.remote" || $ECHO origin`
899 bra=`git config "branch.$r.merge" || $ECHO "$r"`
900 upstream="$rem/${bra#refs/heads/}"
901 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
902 upstream="origin/`repobranch "$d"`"
904 logdata=`git log --color "$upstream".."$r"`
905 if [ -n "$logdata" ]; then
906 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
907 verbose git push "$rem" HEAD
910 if [ x"$submit" = x"-s" ]; then
913 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
927 snowleopardhack=false
928 if [ -z "$CC" ]; then
929 export CC="gcc -DSUPPORTIPV6"
954 case "`$CC -dumpversion`" in
955 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
957 # -march=native is broken < 4.3
958 export CC="$CC -mtune=native -march=native"
961 if [ -n "$WE_HATE_OUR_USERS" ]; then
962 export CC="$CC -fno-common"
971 if [ -n "$WE_HATE_OUR_USERS" ]; then
972 TARGETS="sv-$debug cl-$debug"
973 elif [ x"`uname`" = x"Darwin" ]; then
976 TARGETS="sv-$debug cl-$debug sdl-$debug"
979 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
981 TARGETS="sv-$debug sdl-$debug"
984 export CC="$CC -fno-reorder-blocks -I$PWD/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
986 TARGETS="sv-$debug cl-$debug sdl-$debug"
988 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
989 # if we give the command make the arg "", it will surely fail (invalid filename),
990 # so better handle it as an empty client option
993 elif [ -n "$1" ]; then
995 TARGETS_SAVE=$TARGETS
1000 TARGETS="$TARGETS sdl-debug"
1003 TARGETS="$TARGETS cl-debug"
1004 if $snowleopardhack; then
1005 export CC="$CC -arch i386"
1009 TARGETS="$TARGETS cl-debug"
1012 TARGETS="$TARGETS sv-debug"
1015 BAD_TARGETS="$BAD_TARGETS $X"
1019 if [ -n "$TARGETS" ]; then # at least a valid client
1021 else # no valid client, let's assume this option is not meant to be a client then
1022 TARGETS=$TARGETS_SAVE
1026 if [ -z "$MAKEFLAGS" ]; then
1027 if [ -f /proc/cpuinfo ]; then
1028 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
1029 if [ $ncpus -gt 1 ]; then
1033 if [ -n "$WE_HATE_OUR_USERS" ]; then
1034 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
1038 verbose cd "$d0/d0_blind_id"
1039 if ! $compiled0; then
1040 # compilation of crypto library failed
1041 # use binaries then, if we can...
1043 if [ -n "$WE_HATE_OUR_USERS" ]; then
1044 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
1045 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
1046 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
1052 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
1053 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
1054 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
1055 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
1058 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
1059 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
1060 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
1061 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
1069 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
1070 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
1080 if [ -f Makefile ]; then
1081 verbose make $MAKEFLAGS distclean
1084 if ! [ -f Makefile ]; then
1085 verbose sh autogen.sh
1088 verbose make $MAKEFLAGS
1091 verbose cd "$d0/fteqcc"
1093 verbose make $MAKEFLAGS clean
1095 verbose make $MAKEFLAGS
1097 verbose cd "$d0/data/xonotic-data.pk3dir"
1099 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1101 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1102 # 4 levels up: data, xonotic-data, qcsrc, server
1104 verbose cd "$d0/darkplaces"
1105 if [ x"$BAD_TARGETS" = x" " ]; then
1106 $ECHO "Warning: invalid empty client, default clients will be used."
1109 verbose make $MAKEFLAGS clean
1111 for T in $TARGETS; do
1112 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1114 for T in $BAD_TARGETS; do
1115 $ECHO "Warning: discarded invalid client $T."
1118 verbose "$SELF" update-maps
1121 if [ -n "$WE_HATE_OUR_USERS" ]; then
1123 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1124 elif [ x"`uname`" = x"Darwin" ]; then
1125 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1126 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
1129 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1133 sdl|glx|agl|dedicated)
1142 if ! [ -x "darkplaces/darkplaces$client" ]; then
1143 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1146 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1150 set -- "darkplaces/darkplaces$client" -xonotic "$@"
1152 # if pulseaudio is running: USE IT
1153 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1154 if ps -C pulseaudio >/dev/null; then
1155 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1156 export SDL_AUDIODRIVER=pulse
1163 if [ x"$USE_GDB" = x"yes" ]; then
1164 set -- gdb --args "$@"
1165 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1166 set -- gdb --batch -x savecore.gdb --args "$@"
1167 elif which catchsegv >/dev/null 2>&1; then
1168 set -- catchsegv "$@"
1172 if [ -f xonotic.core ]; then
1173 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1174 gdb "$binary" xonotic.core
1175 #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
1176 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1178 # rm -f xonotic.core.tar.gz
1180 $ECHO "The core dump can be examined later by"
1181 $ECHO " gdb $binary xonotic.core"
1188 if [ x"$1" = x"-k" ]; then
1193 if verbose cd "$d0/$d"; then
1194 if $keep_going; then
1195 verbose "$@" || true
1205 patchdir=`mktemp -d -t save-patches.XXXXXX`
1207 enter "$d0/$d" verbose
1208 git branch -v -v | cut -c 3- | {
1210 while read -r BRANCH REV UPSTREAM TEXT; do
1213 UPSTREAM=${UPSTREAM#\[}
1214 UPSTREAM=${UPSTREAM%\]}
1215 UPSTREAM=${UPSTREAM%:*}
1219 UPSTREAM=origin/"`repobranch "$d"`"
1223 if [ x"$REV" = x"->" ]; then
1226 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1227 $ECHO "$d" > "$patchdir/$i/info.txt"
1228 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1229 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1230 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1233 rm -rf "$patchdir/$i"
1238 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1243 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1244 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1246 for P in "$patchdir"/*/info.txt; do
1251 read -r UPSTREAM <&3
1253 verbose git checkout HEAD^0
1254 verbose git branch -D "$BRANCH"
1255 if [ x"$TRACK" = x"true" ]; then
1256 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1258 verbose git branch -b "$BRANCH" "$UPSTREAM"
1277 report=$report"$*$LF"
1282 report=$report" $*$LF"
1287 o=`"$@" | sed 's/^/ /' || true`
1293 # sorry, fteqcc repo is managed manually
1297 enter "$d0/$d" verbose
1298 base="`repobranch "$d"`"
1300 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1301 case "${ref#refs/remotes/origin/}" in
1314 if [ -n "$branch" ]; then
1315 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1324 l0=`git rev-list "$base".."$ref" | wc -l`
1325 l1=`git rev-list master.."$ref" | wc -l`
1326 if [ $l0 -gt $l1 ]; then
1333 reportecho " Branch $ref:"
1334 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1335 logdata=`git log --color "$realbase".."$ref"`
1336 if [ -z "$logdata" ]; then
1337 reportecho4 "--> not merging, no changes vs master"
1338 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1339 git push origin :"${ref#refs/remotes/origin/}"
1340 reportecho4 "--> branch deleted"
1343 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1344 if [ -z "$diffdata" ]; then
1345 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1346 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1347 git push origin :"${ref#refs/remotes/origin/}"
1348 reportecho4 "--> branch deleted"
1350 elif $only_delete; then
1351 reportecho4 "--> skipped in delete-only run"
1352 elif [ -z "$branch" ] && [ -n "$note" ]; then
1353 reportdo4 $ECHO "$note"
1354 reportecho4 "--> not merging, already had this one rejected before"
1355 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1356 git checkout "$realbase"
1357 org=`git rev-parse HEAD`
1358 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1359 git reset --hard "$org"
1360 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1362 reportecho4 "--> merge failed"
1363 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1364 git reset --hard "$org"
1365 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1367 reportecho4 "--> compile failed"
1368 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1369 git reset --hard "$org"
1370 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1371 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1372 if [ x"$note" = x"del" ]; then
1373 git push origin :"${ref#refs/remotes/origin/}"
1374 reportecho4 "--> test failed, branch deleted"
1375 elif [ -n "$note" ]; then
1376 reportdo4 $ECHO "$note"
1377 reportecho4 "--> test failed"
1379 reportecho4 "--> test failed, postponed"
1382 # apply crlf, or other cleanup filters (non-behavioural changes)
1384 find . -type f -exec touch {} \;
1385 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1388 case ",`repoflags "$d"`," in
1390 # we do quite a mess here... luckily we know $org
1391 git fetch # svn needs to be current
1392 git rebase -i --onto origin/master "$org"
1393 git svn dcommit --add-author-from
1394 git reset --hard "$org"
1397 git push origin HEAD
1400 reportecho4 "--> MERGED"
1401 if yesno "Delete original branch \"$ref\"?"; then
1402 git push origin :"${ref#refs/remotes/origin/}"
1403 reportecho4 "--> branch deleted"
1407 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1408 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1409 if [ x"$note" = x"del" ]; then
1410 git push origin :"${ref#refs/remotes/origin/}"
1411 reportecho4 "--> branch deleted"
1412 elif [ -n "$note" ]; then
1413 reportdo4 $ECHO "$note"
1414 reportecho4 "--> rejected"
1416 reportecho4 "--> postponed"
1425 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1437 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1438 # ./all clean --reclone
1441 if [ x"$X" = x"--reclone" ]; then
1448 elif [ x"$X" = x"-f" ]; then
1450 elif [ x"$X" = x"-u" ]; then
1452 elif [ x"$X" = x"-U" ]; then
1455 elif [ x"$X" = x"-fu" ]; then
1458 elif [ x"$X" = x"-fU" ]; then
1462 elif [ x"$X" = x"-m" ]; then
1464 elif [ x"$X" = x"-r" ]; then
1466 elif [ x"$X" = x"-D" ]; then
1468 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1471 msg " ,--'-\\P/\`\\ FFFFFFF"
1472 msg " __/_ B/,-.\\ FFFFFFF"
1473 msg " / _\\ (// O\\\\ FFFFFF"
1474 msg "| (O \`) _\\._ _)\\ FFFUU"
1475 msg "| |___/.^d0~~\"\\ \\ UUUU"
1476 msg "| |\`~' \\ | UUUU"
1477 msg "| | __,C>|| UUUU"
1478 msg "\\ /_ ,-/,-' | UUUU"
1479 msg " \\\\_ \\_>~' / UUUU-"
1482 msg "Unknown arg: $X"
1491 if $gotoupstream; then
1493 msg "Must also use -f (delete local changes) when using -u"
1496 if $gotomaster; then
1497 if $fetchupstream; then
1498 verbose git fetch origin
1499 verbose git remote prune origin
1501 verbose git checkout -f "`repobranch "$d"`"
1502 verbose git reset --hard origin/"`repobranch "$d"`"
1504 r=`git symbolic-ref HEAD`
1506 rem=`git config "branch.$r.remote" || $ECHO origin`
1507 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1508 upstream="$rem/${bra#refs/heads/}"
1509 if $fetchupstream; then
1510 verbose git fetch "$rem"
1511 verbose git remote prune "$rem"
1513 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1514 upstream="origin/`repobranch "$d"`"
1516 verbose git reset --hard "$upstream"
1518 elif $gotomaster; then
1520 verbose git checkout -f "`repobranch "$d"`"
1521 verbose git reset --hard
1523 verbose git checkout "`repobranch "$d"`"
1526 verbose git reset --hard
1528 if $rmuntracked; then
1531 verbose git clean -df || true
1534 verbose git clean -xdf || true
1538 if $killbranches; then
1539 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1540 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1541 verbose git branch -D "${B#refs/heads/}"
1544 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1545 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1547 checkself "$cmd" "$@"
1551 # release building goes here
1553 #"$SELF" each git clean -fxd
1554 case "$RELEASETYPE" in
1556 $ECHO >&2 -n "$ESC[2J$ESC[H"
1563 msg " +---------------------------------------------------------.---+"
1565 msg " +---------------------------------------------------------^---+"
1567 msg " | / \ This is the official release build system. |"
1568 msg " | | | If you are not a member of the Xonotic Core Team, |"
1569 msg " | | STOP | you are not supposed to use this script and should |"
1570 msg " | | | instead use ./all compile to compile the engine |"
1571 msg " | \____/ and game code. |"
1573 msg " | [ I understand ] |"
1574 msg " +-------------------------------------------------------------+"
1576 # A LOT of build infrastructure is required:
1579 # - .ssh/config must be configured so the following
1580 # host names are reachable and have a compile
1581 # infrastructure set up:
1582 # - xonotic-build-linux32 (with gcc on x86)
1583 # - xonotic-build-linux64 (with gcc on x86_64)
1584 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1585 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1586 # and x86_64-w64-mingw32-g++)
1587 # - xonotic-build-osx (with Xcode and SDL.framework)
1588 # - AMD Compressonator installed in WINE
1589 # - ResEdit installed in WINE
1590 # - a lot of other requirements you will figure out
1591 # while reading the error messages
1592 # - environment variable RELEASETYPE set
1593 # - optionally, environment variable RELEASEDATE set
1598 msg "Building a FINISHED RELEASE"
1601 msg "Building a $RELEASETYPE"
1604 verbose rm -rf Xonotic Xonotic*.zip
1605 verbose mkdir -p Xonotic
1606 if [ -n "$RELEASEDATE" ]; then
1607 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1609 verbose date +%Y%m%d > Xonotic/stamp.txt
1611 release_git_extract_dir "." "Xonotic" Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk COPYING GPL-2 GPL-3
1614 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1615 verbose rm -rf misc/builddeps
1616 verbose mv misc/buildfiles/win32 bin32 || true
1617 verbose mv bin32/SDL.dll . || true
1618 verbose mv misc/buildfiles/win64 bin64 || true
1619 verbose mv misc/buildfiles/osx/* . || true
1620 verbose rm -rf misc/buildfiles
1621 verbose rm -rf misc/pki
1623 release_git_extract_dir "darkplaces" "Xonotic/source/darkplaces" .
1624 release_git_extract_dir "fteqcc" "Xonotic/source/fteqcc" .
1625 release_git_extract_dir "data/xonotic-data.pk3dir" "Xonotic/source" qcsrc Makefile
1626 release_git_extract_dir "d0_blind_id" "Xonotic/source/d0_blind_id" .
1628 verbose cd Xonotic/source/d0_blind_id
1629 verbose sh autogen.sh
1631 rm -f Xonotic/key_15.d0pk
1633 verbose cd Xonotic/mapping
1634 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110701.tar.bz2
1635 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110701-win32-7z.exe
1636 for X in *-7z.exe; do
1640 # TODO possibly include other tools?
1643 release-compile-run)
1652 if [ -n "$targetfiles" ]; then
1653 case " $HOSTS_THAT_ARE_DISABLED " in
1658 case " $HOSTS_THAT_ARE_MYSELF " in
1660 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1661 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1662 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1663 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1664 for f in $targetfiles; do
1665 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1669 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1670 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1671 verbose ssh "$host" "[ -f /etc/profile ] && . /etc/profile; [ -f ~/.profile ] && . ~/.profile; export LC_ALL=C; ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
1672 for f in $targetfiles; do
1673 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1677 # now rebrand the binaries...
1678 for f in $targetfiles; do
1679 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1681 Xonotic/xonotic*.exe)
1682 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1691 fteqcc_maketargets=$3
1693 darkplaces_maketargets=$5
1695 host=xonotic-build-$suffix
1696 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1697 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1699 release-engine-win32)
1700 verbose "$SELF" release-compile win32 \
1701 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -march=i686 -g1 -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' \
1702 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1704 verbose "$SELF" release-compile win32 \
1705 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-g++ -g1 -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DUSE_WSPIAPI_H -DSUPPORTIPV6" WINDRES="i586-mingw32msvc-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN32RELEASE=1 D3D=1' \
1707 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1709 release-engine-win64)
1710 verbose "$SELF" release-compile win64 \
1711 'STRIP=: DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -g1 -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' \
1712 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1713 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1714 verbose "$SELF" release-compile win64 \
1715 'STRIP=: DP_MAKE_TARGET=mingw CC="x86_64-w64-mingw32-g++ -g1 -Wl,--dynamicbase -Wl,--nxcompat -I.deps/include -L.deps/lib -DSUPPORTIPV6" WINDRES="x86_64-w64-mingw32-windres" SDL_CONFIG=".deps/bin/sdl-config" LIB_JPEG= CFLAGS_LIBJPEG= WIN64RELEASE=1 D3D=1' \
1717 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1720 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1721 verbose "$SELF" release-compile osx \
1722 'STRIP=: CC="gcc -g1 -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"' \
1723 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1724 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1726 release-engine-linux32)
1727 verbose "$SELF" release-compile linux32 \
1728 'STRIP=: CC="gcc -m32 -march=i686 -g1 -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' \
1729 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1730 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1732 release-engine-linux64)
1733 verbose "$SELF" release-compile linux64 \
1734 'STRIP=: CC="gcc -m64 -g1 -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' \
1735 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1736 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1739 verbose "$SELF" release-engine-linux32 &
1740 verbose "$SELF" release-engine-linux64 &
1741 verbose "$SELF" release-engine-win32 &
1742 verbose "$SELF" release-engine-win64 &
1743 verbose "$SELF" release-engine-osx &
1752 verbose "$SELF" update-maps
1755 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1756 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1758 release-buildpk3-transform-raw)
1761 release-buildpk3-transform-normal)
1764 # texture: convert to jpeg and dds
1765 verbose export do_jpeg=true
1766 verbose export jpeg_qual_rgb=97
1767 verbose export jpeg_qual_a=99
1768 verbose export do_dds=false
1769 verbose export do_ogg=false
1770 verbose export del_src=true
1771 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1773 release-buildpk3-transform-normaldds)
1776 # texture: convert to jpeg and dds
1777 # music: reduce bitrate
1778 verbose export do_jpeg=false
1779 verbose export do_jpeg_if_not_dds=true
1780 verbose export jpeg_qual_rgb=95
1781 verbose export jpeg_qual_a=99
1782 verbose export do_dds=true
1783 verbose export dds_flags=
1784 verbose export do_ogg=true
1785 verbose export del_src=true
1786 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1788 release-buildpk3-transform-low)
1791 # texture: convert to jpeg and dds
1792 # music: reduce bitrate
1793 verbose export do_jpeg=true
1794 verbose export jpeg_qual_rgb=80
1795 verbose export jpeg_qual_a=97
1796 verbose export do_dds=false
1797 verbose export do_ogg=true
1798 verbose export ogg_qual=1
1799 verbose export del_src=true
1800 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1802 release-buildpk3-transform-lowdds)
1805 # texture: convert to jpeg and dds
1806 # music: reduce bitrate
1807 verbose export do_jpeg=false
1808 verbose export do_jpeg_if_not_dds=true
1809 verbose export jpeg_qual_rgb=80
1810 verbose export jpeg_qual_a=99
1811 verbose export do_dds=true
1812 verbose export dds_flags=
1813 verbose export do_ogg=true
1814 verbose export ogg_qual=1
1815 verbose export del_src=true
1816 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1830 verbose rm -rf Xonotic/temp
1831 release_timereport "deleted temp directory"
1832 verbose mkdir -p Xonotic/temp
1833 release_git_extract_dir "$src" "Xonotic/temp" .
1834 release_timereport "extracted data"
1835 verbose cd Xonotic/temp
1836 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1837 verbose cp ../source/progs.dat .
1838 verbose cp ../source/csprogs.dat .
1839 verbose cp ../source/menu.dat .
1840 verbose rm -rf qcsrc
1841 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1842 major=$(($gv / 10000))
1843 minor=$((($gv / 100) - ($major * 100)))
1844 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1845 versionstr="$major.$minor.$patch"
1846 case "$RELEASETYPE" in
1850 versionstr="$versionstr$RELEASETYPE"
1853 if [ $gv -lt 900 ]; then
1854 # pre-1.0: compatible with any other pre-1.0
1856 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1857 s/^gameversion_min [0-9]*/gameversion_min 0/;
1858 s/^gameversion_max [0-9]*/gameversion_max 9999/;
1859 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1863 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1864 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1865 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1866 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1868 mv defaultXonotic.cfg.new defaultXonotic.cfg
1869 case "$RELEASETYPE" in
1871 echo "" >> defaultXonotic.cfg
1872 echo "// nicer menu" >> defaultXonotic.cfg
1873 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1877 verbose cd gfx/menu/luminos
1878 verbose rm -f background_l2.tga background_ingame_l2.tga
1879 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1880 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1881 verbose rm background_l2.svg
1884 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1885 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1886 if [ -f "$X" ]; then
1888 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1892 verbose export git_src_repo="$d0/$src" # skip hash-object
1893 release_timereport "processed data"
1894 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1895 release_timereport "transformed data"
1896 verbose mkzipr "../../$dst" *
1897 release_timereport "zipped data"
1899 verbose rm -rf Xonotic/temp
1900 release_timereport "deleted temp directory again"
1903 stamp=`cat Xonotic/stamp.txt`
1909 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1915 while [ "$#" -gt 1 ]; do
1916 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1922 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1923 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1924 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1925 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
1926 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1927 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
1929 release-pack-needsx11)
1932 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1935 verbose "$SELF" release-pack
1940 stamp=`cat Xonotic/stamp.txt`
1941 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1942 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1943 # let's pass crypto import laws of some nasty countries
1944 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
1945 if [ -n "$crypto_libs" ]; then
1946 verbose mkzip Xonotic-$stamp-crypto.zip \
1948 Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
1951 # build the archives
1952 verbose mkzip Xonotic-$stamp-engine.zip \
1954 Xonotic/bin32/*.dll \
1955 Xonotic/bin64/*.dll \
1958 Xonotic/xonotic.exe \
1959 Xonotic/source/darkplaces/ \
1960 Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
1961 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1962 verbose mkzip Xonotic-$stamp-common.zip \
1963 Xonotic/source/fteqcc/ \
1964 Xonotic/source/qcsrc/ \
1969 Xonotic/key_0.d0pk \
1970 Xonotic/data/font-nimbussansl-$stamp.pk3 \
1971 Xonotic/data/font-xolonium-$stamp.pk3
1972 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1973 verbose mkzip0 Xonotic-$stamp.zip \
1974 Xonotic/data/xonotic-$stamp-data.pk3 \
1975 Xonotic/data/xonotic-$stamp-maps.pk3 \
1976 Xonotic/data/xonotic-$stamp-music.pk3 \
1977 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1978 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1979 verbose mkzip0 Xonotic-$stamp-low.zip \
1980 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1981 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1982 Xonotic/data/xonotic-$stamp-music-low.pk3
1983 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1984 verbose mkzip Xonotic-$stamp-high.zip \
1986 verbose mkzip0 Xonotic-$stamp-high.zip \
1987 Xonotic/data/xonotic-$stamp-data-high.pk3 \
1988 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
1989 Xonotic/data/xonotic-$stamp-music.pk3 \
1990 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
1991 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
1993 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
1994 Xonotic/data/xonotic-$stamp-maps-low.pk3
1997 verbose "$SELF" release-prepare
1998 verbose "$SELF" release-maps
1999 verbose "$SELF" release-engine
2000 verbose "$SELF" release-qc
2001 verbose "$SELF" release-pack-needsx11
2002 verbose "$SELF" release-zip
2007 $ECHO " $SELF admin-merge [<branch>]"
2008 $ECHO " $SELF branch <branch>"
2009 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
2010 $ECHO " $SELF branches"
2011 $ECHO " $SELF checkout|switch <branch>"
2012 $ECHO " $SELF checkout|switch <remote>/<branch>"
2013 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
2014 $ECHO " $SELF clean --reclone"
2015 $ECHO " $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
2016 $ECHO " $SELF each|foreach [-k] command..."
2017 $ECHO " $SELF fix_upstream_rebase"
2018 $ECHO " $SELF keygen"
2019 $ECHO " $SELF merge"
2020 $ECHO " $SELF push|commit [-s]"
2021 $ECHO " $SELF restore-patches"
2022 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
2023 $ECHO " $SELF save-patches"
2024 $ECHO " $SELF update-maps"
2025 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"