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
299 verbose cd "$release_src"
300 verbose git archive --format=tar HEAD -- "$@"
302 verbose cd "$release_dst"
309 fix_upstream_rebase()
311 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
315 # one of the two sides of the merge should be remote upstream, or all is fine
316 r_r=`git symbolic-ref HEAD`
317 r_r=${r_r#refs/heads/}
318 r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
319 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
320 r_bra=${r_bra#refs/heads/}
321 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
322 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
327 r_base=`git merge-base "$r_me" "$r_other"`
329 # no merge-base? upstream did filter-branch
330 if [ -n "$r_base" ]; then
331 # otherwise, check if the two histories are "similar"
332 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
333 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
335 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
336 r_lc_me=`$ECHO "$r_l_me" | wc -l`
337 r_lc_other=`$ECHO "$r_l_other" | wc -l`
338 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
339 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
341 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
342 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
343 git reset --hard "$r_me"
353 fix_upstream_rebase_mergeok()
355 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
356 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
360 fix_upstream_rebase_mergefail()
362 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
363 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
369 verbose git config remote.origin.url "$1"
371 verbose git config remote.origin.pushurl "$2"
373 verbose git config --unset remote.origin.pushurl || true
375 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
376 case ",`repoflags "$d"`," in
378 verbose git config --unset core.autocrlf || true
381 verbose git config core.autocrlf input
384 if [ -z "`git config push.default || true`" ]; then
385 verbose git config push.default current # or is tracking better?
387 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
388 verbose git config filter.mapclean.smudge "cat"
394 case "$RELEASETYPE" in
404 find "$@" -exec touch -d "2001-01-01 01:01:01 +0000" {} \+ # ugly hack to make the pk3 files rsync-friendly
406 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
407 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
408 zip $zipflags -y -@<"$ziplist" "$archive" || true
415 case "$RELEASETYPE" in
426 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
427 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
428 zip $zipflags -y -@<"$ziplist" "$archive" || true
435 zip -0ry "$archive" "$@"
440 # first result is to be ignored, but we use it to check status
441 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
442 { 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*,,'
443 # unit: clock ticks (depends on what "time" returns
451 if ! { time -p true; } >/dev/null 2>&1; then
452 msg "Cannot do timing in this shell"
470 if t=`mirrorspeed "$m"`; then
472 tt=$(($t$op)) # fudge factor
473 msg "$m -> $t$op = $tt ticks"
474 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
485 if [ -n "$bestin" ]; then
486 msg "Best mirror seems to be $pre$bestin$suf"
496 enter "$d0/$d" verbose
497 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
503 pushurl=`repopushurl "$d"`
504 branch=`repobranch "$d"`
505 if [ -d "$d0/$d" ]; then
507 fix_git_config "$url" "$pushurl"
513 # enable the ssh URL for pushing
516 if [ -f ~/.ssh/id_rsa.pub ]; then
518 msg "A key already exists and no new one will be generated. If you"
519 msg "already have done the procedure for getting your key approved, you"
520 msg "can skip the following paragraph and already use the repository."
522 msg "To get access, your key has to be approved first. For that, visit"
523 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
524 msg "the \"Support\" tracker in the \"Repository\" category where you"
525 msg "apply for access and paste the following output into the issue:"
527 msg "`cat ~/.ssh/id_rsa.pub`"
529 msg "Note that you will only have write access to branches that start"
530 msg "with your user name."
531 elif [ -f ~/.ssh/id_dsa.pub ]; then
533 msg "A key already exists and no new one will be generated. If you"
534 msg "already have done the procedure for getting your key approved, you"
535 msg "can skip the following paragraph and already use the repository."
537 msg "To get access, your key has to be approved first. For that, visit"
538 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
539 msg "the \"Support\" tracker in the \"Repository\" category where you"
540 msg "apply for access and paste the following output into the issue:"
542 msg "`cat ~/.ssh/id_dsa.pub`"
544 msg "Note that you will only have write access to branches that start"
545 msg "with your user name."
548 msg "No key has been generated yet. One will be generated now."
549 msg "If other people are using your computer, it is recommended"
550 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
551 msg "when asked for a passphrase."
553 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
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_rsa.pub`"
562 msg "Note that you will only have write access to branches that start"
563 msg "with your user name."
571 if [ x"$1" = x"-N" ]; then
573 elif [ x"$1" = x"-p" ]; then
575 pushbase=ssh://xonotic@git.xonotic.org/
576 elif [ x"$1" = x"-ps" ]; then
578 pushbase=ssh://xonotic@git.xonotic.org/
579 elif [ x"$1" = x"-ph" ]; then
581 pushbase=http://git.xonotic.org/login/xonotic/
582 elif [ x"$1" = x"-s" ]; then
584 base=ssh://xonotic@git.xonotic.org/
585 elif [ x"$1" = x"-g" ]; then
587 base=git://git.xonotic.org/xonotic/
588 elif [ x"$1" = x"-h" ]; then
590 base=http://git.xonotic.org/xonotic/
591 elif [ x"$1" = x"-l" ]; then
599 msg "Invalid location!"
600 msg "Possible locations for the -l option:"
601 msg " nl (Netherlands, run by merlijn)"
602 msg " de (Germany, run by divVerent)"
603 msg " us (United States of America, run by detrate)"
604 msg " best (find automatically)"
605 msg " default (currently nl)"
619 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
626 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
630 base=git://git.xonotic.org/xonotic/
633 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
636 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
637 git config xonotic.all.mirrorselection done
654 *://*.git.xonotic.org/*)
655 location=${base%%.git.xonotic.org/*}
656 location=${location##*://}
664 if [ -n "$location" ]; then
665 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
666 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
668 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
669 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
673 pushurl=`repopushurl .`
674 fix_git_config "$url" "$pushurl"
676 if $allow_pull || $fix_config; then
681 pushurl=`repopushurl "$d"`
682 branch=`repobranch "$d"`
683 if [ -d "$d0/$d" ]; then
684 # if we have .no file, skip
685 if [ -f "$d0/$d.no" ]; then
686 msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
690 enter "$d0/$d" verbose
691 r=`git symbolic-ref HEAD`
693 if git config branch.$r.remote >/dev/null 2>&1; then
694 if ! verbose git pull; then
695 fix_upstream_rebase_mergefail || true
696 check_mergeconflict "$d"
697 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
700 fix_upstream_rebase_mergeok || true
705 checkself "$cmd" "$@"
707 verbose git remote prune origin
711 verbose git clone "$url" "$d0/$d"
712 enter "$d0/$d" verbose
713 fix_git_config "$url" "$pushurl"
714 if [ "$branch" != "master" ]; then
715 verbose git checkout --track -b "$branch" origin/"$branch"
722 misc/tools/xonotic-map-compiler-autobuild download
726 if [ x"$1" = x"-f" ]; then
732 if [ -z "$branch" ]; then
735 branch=${remote#origin/}
744 if [ -n "$checkoutflags" ]; then
745 set -- -f "$@" # to make checkself work again
749 enter "$d0/$d" verbose
751 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
753 verbose git checkout $checkoutflags "$b"
754 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
756 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
759 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
761 verbose git checkout $checkoutflags "$b"
762 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
764 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
766 $ECHO "WTF? Not even branch $b doesn't exist in $d"
771 checkself "$cmd" "$@"
775 $ECHO "The requested branch was not found in any repository."
783 if [ -z "$branch" ]; then
787 if [ -z "$branch" ]; then
790 r=`git symbolic-ref HEAD`
797 dv=`visible_repo_name "$d"`
798 enter "$d0/$d" verbose
799 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
800 $ECHO "Already having this branch in $dv."
802 if yesno "Branch in $dv?"; then
803 if [ -n "$srcbranch" ]; then
806 b=origin/"`repobranch "$d"`"
807 verbose git fetch origin || true
809 # TODO do this without pushing
810 verbose git checkout -b "$branch" "$b"
811 verbose git config "branch.$branch.remote" "$remote"
812 verbose git config "branch.$branch.merge" "refs/heads/$branch"
822 cd "$d0/$d" # am in a pipe, shouldn't use enter
823 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
828 while read -r d BRANCH REV TEXT; do
829 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
832 if [ x"$REV" = x"->" ]; then
835 BRANCH=${BRANCH#remotes/}
836 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
837 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
838 eval "r=\$branches_repos_$ID"
840 eval "branches_repos_$ID=\$r"
842 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
843 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
844 eval "r=\$branches_repos_$ID"
845 printf "%-60s %s\n" "$BRANCH" "$r"
852 dv=`visible_repo_name "$d"`
853 enter "$d0/$d" verbose
854 r=`git symbolic-ref HEAD`
856 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
857 # we have uncommitted changes
858 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
859 if ! verbose git merge origin/"`repobranch "$d"`"; then
860 check_mergeconflict "$d"
861 exit 1 # this should ALWAYS be fatal
871 dv=`visible_repo_name "$d"`
872 enter "$d0/$d" verbose
873 r=`git symbolic-ref HEAD`
875 diffdata=`git diff --color HEAD`
876 if [ -n "$diffdata" ]; then
877 # we have uncommitted changes
878 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
879 verbose git commit -a
882 rem=`git config "branch.$r.remote" || $ECHO origin`
883 bra=`git config "branch.$r.merge" || $ECHO "$r"`
884 upstream="$rem/${bra#refs/heads/}"
885 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
886 upstream="origin/`repobranch "$d"`"
888 logdata=`git log --color "$upstream".."$r"`
889 if [ -n "$logdata" ]; then
890 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
891 verbose git push "$rem" HEAD
894 if [ x"$submit" = x"-s" ]; then
897 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
911 snowleopardhack=false
912 if [ -z "$CC" ]; then
913 export CC="gcc -DSUPPORTIPV6"
938 case "`$CC -dumpversion`" in
939 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
941 # -march=native is broken < 4.3
942 export CC="$CC -mtune=native -march=native"
945 if [ -n "$WE_HATE_OUR_USERS" ]; then
946 export CC="$CC -fno-common"
955 if [ -n "$WE_HATE_OUR_USERS" ]; then
956 TARGETS="sv-$debug cl-$debug"
957 elif [ x"`uname`" = x"Darwin" ]; then
960 TARGETS="sv-$debug cl-$debug sdl-$debug"
963 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
965 TARGETS="sv-$debug sdl-$debug"
968 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"
970 TARGETS="sv-$debug cl-$debug sdl-$debug"
972 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
973 # if we give the command make the arg "", it will surely fail (invalid filename),
974 # so better handle it as an empty client option
977 elif [ -n "$1" ]; then
979 TARGETS_SAVE=$TARGETS
984 TARGETS="$TARGETS sdl-debug"
987 TARGETS="$TARGETS cl-debug"
988 if $snowleopardhack; then
989 export CC="$CC -arch i386"
993 TARGETS="$TARGETS cl-debug"
996 TARGETS="$TARGETS sv-debug"
999 BAD_TARGETS="$BAD_TARGETS $X"
1003 if [ -n "$TARGETS" ]; then # at least a valid client
1005 else # no valid client, let's assume this option is not meant to be a client then
1006 TARGETS=$TARGETS_SAVE
1010 if [ -z "$MAKEFLAGS" ]; then
1011 if [ -f /proc/cpuinfo ]; then
1012 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
1013 if [ $ncpus -gt 1 ]; then
1017 if [ -n "$WE_HATE_OUR_USERS" ]; then
1018 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
1022 verbose cd "$d0/d0_blind_id"
1023 if ! $compiled0; then
1024 # compilation of crypto library failed
1025 # use binaries then, if we can...
1027 if [ -n "$WE_HATE_OUR_USERS" ]; then
1028 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
1029 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
1030 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
1036 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
1037 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
1038 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
1039 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
1042 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
1043 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
1044 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
1045 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
1053 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
1054 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
1064 if [ -f Makefile ]; then
1065 verbose make $MAKEFLAGS distclean
1068 if ! [ -f Makefile ]; then
1069 verbose sh autogen.sh
1072 verbose make $MAKEFLAGS
1075 verbose cd "$d0/fteqcc"
1077 verbose make $MAKEFLAGS clean
1079 verbose make $MAKEFLAGS
1081 verbose cd "$d0/data/xonotic-data.pk3dir"
1083 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1085 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1086 # 4 levels up: data, xonotic-data, qcsrc, server
1088 verbose cd "$d0/darkplaces"
1089 if [ x"$BAD_TARGETS" = x" " ]; then
1090 $ECHO "Warning: invalid empty client, default clients will be used."
1093 verbose make $MAKEFLAGS clean
1095 for T in $TARGETS; do
1096 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1098 for T in $BAD_TARGETS; do
1099 $ECHO "Warning: discarded invalid client $T."
1102 verbose "$SELF" update-maps
1105 if [ -n "$WE_HATE_OUR_USERS" ]; then
1107 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1108 elif [ x"`uname`" = x"Darwin" ]; then
1109 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1110 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
1113 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1117 sdl|glx|agl|dedicated)
1126 if ! [ -x "darkplaces/darkplaces$client" ]; then
1127 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1130 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1134 set -- "darkplaces/darkplaces$client" -xonotic "$@"
1136 # if pulseaudio is running: USE IT
1137 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1138 if ps -C pulseaudio >/dev/null; then
1139 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1140 export SDL_AUDIODRIVER=pulse
1147 if [ x"$USE_GDB" = x"yes" ]; then
1148 set -- gdb --args "$@"
1149 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1150 set -- gdb --batch -x savecore.gdb --args "$@"
1151 elif which catchsegv >/dev/null 2>&1; then
1152 set -- catchsegv "$@"
1156 if [ -f xonotic.core ]; then
1157 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1158 gdb "$binary" xonotic.core
1159 #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
1160 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1162 # rm -f xonotic.core.tar.gz
1164 $ECHO "The core dump can be examined later by"
1165 $ECHO " gdb $binary xonotic.core"
1172 if [ x"$1" = x"-k" ]; then
1177 if verbose cd "$d0/$d"; then
1178 if $keep_going; then
1179 verbose "$@" || true
1189 patchdir=`mktemp -d -t save-patches.XXXXXX`
1191 enter "$d0/$d" verbose
1192 git branch -v -v | cut -c 3- | {
1194 while read -r BRANCH REV UPSTREAM TEXT; do
1197 UPSTREAM=${UPSTREAM#\[}
1198 UPSTREAM=${UPSTREAM%\]}
1199 UPSTREAM=${UPSTREAM%:*}
1203 UPSTREAM=origin/"`repobranch "$d"`"
1207 if [ x"$REV" = x"->" ]; then
1210 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1211 $ECHO "$d" > "$patchdir/$i/info.txt"
1212 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1213 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1214 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1217 rm -rf "$patchdir/$i"
1222 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1227 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1228 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1230 for P in "$patchdir"/*/info.txt; do
1235 read -r UPSTREAM <&3
1237 verbose git checkout HEAD^0
1238 verbose git branch -D "$BRANCH"
1239 if [ x"$TRACK" = x"true" ]; then
1240 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1242 verbose git branch -b "$BRANCH" "$UPSTREAM"
1261 report=$report"$*$LF"
1266 report=$report" $*$LF"
1271 o=`"$@" | sed 's/^/ /' || true`
1277 # sorry, fteqcc repo is managed manually
1281 enter "$d0/$d" verbose
1282 base="`repobranch "$d"`"
1284 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1285 case "${ref#refs/remotes/origin/}" in
1298 if [ -n "$branch" ]; then
1299 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1308 l0=`git rev-list "$base".."$ref" | wc -l`
1309 l1=`git rev-list master.."$ref" | wc -l`
1310 if [ $l0 -gt $l1 ]; then
1317 reportecho " Branch $ref:"
1318 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1319 logdata=`git log --color "$realbase".."$ref"`
1320 if [ -z "$logdata" ]; then
1321 reportecho4 "--> not merging, no changes vs master"
1322 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1323 git push origin :"${ref#refs/remotes/origin/}"
1324 reportecho4 "--> branch deleted"
1327 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1328 if [ -z "$diffdata" ]; then
1329 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1330 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1331 git push origin :"${ref#refs/remotes/origin/}"
1332 reportecho4 "--> branch deleted"
1334 elif $only_delete; then
1335 reportecho4 "--> skipped in delete-only run"
1336 elif [ -z "$branch" ] && [ -n "$note" ]; then
1337 reportdo4 $ECHO "$note"
1338 reportecho4 "--> not merging, already had this one rejected before"
1339 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1340 git checkout "$realbase"
1341 org=`git rev-parse HEAD`
1342 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1343 git reset --hard "$org"
1344 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1346 reportecho4 "--> merge failed"
1347 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1348 git reset --hard "$org"
1349 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1351 reportecho4 "--> compile failed"
1352 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1353 git reset --hard "$org"
1354 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1355 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1356 if [ x"$note" = x"del" ]; then
1357 git push origin :"${ref#refs/remotes/origin/}"
1358 reportecho4 "--> test failed, branch deleted"
1359 elif [ -n "$note" ]; then
1360 reportdo4 $ECHO "$note"
1361 reportecho4 "--> test failed"
1363 reportecho4 "--> test failed, postponed"
1366 # apply crlf, or other cleanup filters (non-behavioural changes)
1368 find . -type f -exec touch {} \;
1369 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1372 case ",`repoflags "$d"`," in
1374 # we do quite a mess here... luckily we know $org
1375 git fetch # svn needs to be current
1376 git rebase -i --onto origin/master "$org"
1377 git svn dcommit --add-author-from
1378 git reset --hard "$org"
1381 git push origin HEAD
1384 reportecho4 "--> MERGED"
1385 if yesno "Delete original branch \"$ref\"?"; then
1386 git push origin :"${ref#refs/remotes/origin/}"
1387 reportecho4 "--> branch deleted"
1391 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1392 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1393 if [ x"$note" = x"del" ]; then
1394 git push origin :"${ref#refs/remotes/origin/}"
1395 reportecho4 "--> branch deleted"
1396 elif [ -n "$note" ]; then
1397 reportdo4 $ECHO "$note"
1398 reportecho4 "--> rejected"
1400 reportecho4 "--> postponed"
1409 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1421 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1422 # ./all clean --reclone
1425 if [ x"$X" = x"--reclone" ]; then
1432 elif [ x"$X" = x"-f" ]; then
1434 elif [ x"$X" = x"-u" ]; then
1436 elif [ x"$X" = x"-U" ]; then
1439 elif [ x"$X" = x"-fu" ]; then
1442 elif [ x"$X" = x"-fU" ]; then
1446 elif [ x"$X" = x"-m" ]; then
1448 elif [ x"$X" = x"-r" ]; then
1450 elif [ x"$X" = x"-D" ]; then
1452 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1455 msg " ,--'-\\P/\`\\ FFFFFFF"
1456 msg " __/_ B/,-.\\ FFFFFFF"
1457 msg " / _\\ (// O\\\\ FFFFFF"
1458 msg "| (O \`) _\\._ _)\\ FFFUU"
1459 msg "| |___/.^d0~~\"\\ \\ UUUU"
1460 msg "| |\`~' \\ | UUUU"
1461 msg "| | __,C>|| UUUU"
1462 msg "\\ /_ ,-/,-' | UUUU"
1463 msg " \\\\_ \\_>~' / UUUU-"
1466 msg "Unknown arg: $X"
1475 if $gotoupstream; then
1477 msg "Must also use -f (delete local changes) when using -u"
1480 if $gotomaster; then
1481 if $fetchupstream; then
1482 verbose git fetch origin
1483 verbose git remote prune origin
1485 verbose git checkout -f "`repobranch "$d"`"
1486 verbose git reset --hard origin/"`repobranch "$d"`"
1488 r=`git symbolic-ref HEAD`
1490 rem=`git config "branch.$r.remote" || $ECHO origin`
1491 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1492 upstream="$rem/${bra#refs/heads/}"
1493 if $fetchupstream; then
1494 verbose git fetch "$rem"
1495 verbose git remote prune "$rem"
1497 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1498 upstream="origin/`repobranch "$d"`"
1500 verbose git reset --hard "$upstream"
1502 elif $gotomaster; then
1504 verbose git checkout -f "`repobranch "$d"`"
1505 verbose git reset --hard
1507 verbose git checkout "`repobranch "$d"`"
1510 verbose git reset --hard
1512 if $rmuntracked; then
1515 verbose git clean -df || true
1518 verbose git clean -xdf || true
1522 if $killbranches; then
1523 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1524 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1525 verbose git branch -D "${B#refs/heads/}"
1528 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1529 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1531 checkself "$cmd" "$@"
1535 # release building goes here
1537 #"$SELF" each git clean -fxd
1538 case "$RELEASETYPE" in
1540 $ECHO >&2 -n "$ESC[2J$ESC[H"
1547 msg " +---------------------------------------------------------.---+"
1549 msg " +---------------------------------------------------------^---+"
1551 msg " | / \ This is the official release build system. |"
1552 msg " | | | If you are not a member of the Xonotic Core Team, |"
1553 msg " | | STOP | you are not supposed to use this script and should |"
1554 msg " | | | instead use ./all compile to compile the engine |"
1555 msg " | \____/ and game code. |"
1557 msg " | [ I understand ] |"
1558 msg " +-------------------------------------------------------------+"
1560 # A LOT of build infrastructure is required:
1563 # - .ssh/config must be configured so the following
1564 # host names are reachable and have a compile
1565 # infrastructure set up:
1566 # - xonotic-build-linux32 (with gcc on x86)
1567 # - xonotic-build-linux64 (with gcc on x86_64)
1568 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1569 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1570 # and x86_64-w64-mingw32-g++)
1571 # - xonotic-build-osx (with Xcode and SDL.framework)
1572 # - AMD Compressonator installed in WINE
1573 # - ResEdit installed in WINE
1574 # - a lot of other requirements you will figure out
1575 # while reading the error messages
1576 # - environment variable RELEASETYPE set
1577 # - optionally, environment variable RELEASEDATE set
1582 msg "Building a FINISHED RELEASE"
1585 msg "Building a $RELEASETYPE"
1588 verbose rm -rf Xonotic Xonotic*.zip
1589 verbose mkdir -p Xonotic
1590 if [ -n "$RELEASEDATE" ]; then
1591 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1593 verbose date +%Y%m%d > Xonotic/stamp.txt
1595 release_git_extract_dir "." "Xonotic" Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk
1598 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1599 verbose rm -rf misc/builddeps
1600 verbose mv misc/buildfiles/win32/* . || true
1601 verbose mv misc/buildfiles/win64 bin64 || true
1602 verbose mv misc/buildfiles/osx/* . || true
1603 verbose rm -rf misc/buildfiles
1604 verbose rm -rf misc/pki
1606 release_git_extract_dir "darkplaces" "Xonotic/source/darkplaces"
1607 release_git_extract_dir "fteqcc" "Xonotic/source/fteqcc"
1608 release_git_extract_dir "data/xonotic-data.pk3dir" "Xonotic/source" qcsrc Makefile
1609 release_git_extract_dir "d0_blind_id" "Xonotic/source/d0_blind_id"
1611 verbose cd Xonotic/source/d0_blind_id
1612 verbose sh autogen.sh
1614 rm -f Xonotic/key_15.d0pk
1616 verbose cd Xonotic/mapping
1617 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223.tar.bz2
1618 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223-win32-7z.exe
1619 for X in *-7z.exe; do
1623 # TODO possibly include other tools?
1626 release-compile-run)
1635 if [ -n "$targetfiles" ]; then
1636 case " $HOSTS_THAT_ARE_DISABLED " in
1641 case " $HOSTS_THAT_ARE_MYSELF " in
1643 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1644 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1645 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1646 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1647 for f in $targetfiles; do
1648 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1652 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1653 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1654 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"
1655 for f in $targetfiles; do
1656 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1660 # now rebrand the binaries...
1661 for f in $targetfiles; do
1662 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1664 Xonotic/xonotic*.exe)
1665 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1674 fteqcc_maketargets=$3
1676 darkplaces_maketargets=$5
1678 host=xonotic-build-$suffix
1679 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1680 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1682 release-engine-win32)
1683 verbose "$SELF" release-compile win32 \
1684 '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' \
1685 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1687 verbose "$SELF" release-compile win32 \
1688 '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' \
1690 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1692 release-engine-win64)
1693 verbose "$SELF" release-compile win64 \
1694 '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' \
1695 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1696 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1697 verbose "$SELF" release-compile win64 \
1698 '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' \
1700 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1703 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1704 verbose "$SELF" release-compile osx \
1705 '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"' \
1706 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1707 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1709 release-engine-linux32)
1710 verbose "$SELF" release-compile linux32 \
1711 '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' \
1712 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1713 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1715 release-engine-linux64)
1716 verbose "$SELF" release-compile linux64 \
1717 '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' \
1718 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1719 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1722 verbose "$SELF" release-engine-linux32 &
1723 verbose "$SELF" release-engine-linux64 &
1724 verbose "$SELF" release-engine-win32 &
1725 verbose "$SELF" release-engine-win64 &
1726 verbose "$SELF" release-engine-osx &
1735 verbose "$SELF" update-maps
1738 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1739 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1741 release-buildpk3-transform-raw)
1744 release-buildpk3-transform-normal)
1747 # texture: convert to jpeg and dds
1748 verbose export do_jpeg=true
1749 verbose export jpeg_qual_rgb=97
1750 verbose export jpeg_qual_a=99
1751 verbose export do_dds=false
1752 verbose export do_ogg=false
1753 verbose export del_src=true
1754 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1756 release-buildpk3-transform-normaldds)
1759 # texture: convert to jpeg and dds
1760 # music: reduce bitrate
1761 verbose export do_jpeg=false
1762 verbose export do_jpeg_if_not_dds=true
1763 verbose export jpeg_qual_rgb=95
1764 verbose export jpeg_qual_a=99
1765 verbose export do_dds=true
1766 verbose export dds_flags=
1767 verbose export do_ogg=true
1768 verbose export del_src=true
1769 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1771 release-buildpk3-transform-low)
1774 # texture: convert to jpeg and dds
1775 # music: reduce bitrate
1776 verbose export do_jpeg=true
1777 verbose export jpeg_qual_rgb=80
1778 verbose export jpeg_qual_a=97
1779 verbose export do_dds=false
1780 verbose export do_ogg=true
1781 verbose export ogg_qual=1
1782 verbose export del_src=true
1783 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1785 release-buildpk3-transform-lowdds)
1788 # texture: convert to jpeg and dds
1789 # music: reduce bitrate
1790 verbose export do_jpeg=false
1791 verbose export do_jpeg_if_not_dds=true
1792 verbose export jpeg_qual_rgb=80
1793 verbose export jpeg_qual_a=99
1794 verbose export do_dds=true
1795 verbose export dds_flags=
1796 verbose export do_ogg=true
1797 verbose export ogg_qual=1
1798 verbose export del_src=true
1799 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1813 verbose rm -rf Xonotic/temp
1814 release_timereport "deleted temp directory"
1815 verbose mkdir -p Xonotic/temp
1816 release_git_extract_dir "$src" "Xonotic/temp"
1817 release_timereport "extracted data"
1818 verbose cd Xonotic/temp
1819 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1820 verbose cp ../source/progs.dat .
1821 verbose cp ../source/csprogs.dat .
1822 verbose cp ../source/menu.dat .
1823 verbose rm -rf qcsrc
1824 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1825 major=$(($gv / 10000))
1826 minor=$((($gv / 100) - ($major * 100)))
1827 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1828 versionstr="$major.$minor.$patch"
1829 case "$RELEASETYPE" in
1833 versionstr="$versionstr$RELEASETYPE"
1837 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1838 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1839 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1840 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1841 mv defaultXonotic.cfg.new defaultXonotic.cfg
1842 case "$RELEASETYPE" in
1844 echo "" >> defaultXonotic.cfg
1845 echo "// nicer menu" >> defaultXonotic.cfg
1846 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1850 verbose cd gfx/menu/luminos
1851 verbose rm -f background_l2.tga background_ingame_l2.tga
1852 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1853 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1854 verbose rm background_l2.svg
1857 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1858 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1859 if [ -f "$X" ]; then
1861 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1865 verbose export git_src_repo="$d0/$src" # skip hash-object
1866 release_timereport "processed data"
1867 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1868 release_timereport "transformed data"
1869 verbose mkzipr "../../$dst" *
1870 release_timereport "zipped data"
1872 verbose rm -rf Xonotic/temp
1873 release_timereport "deleted temp directory again"
1876 stamp=`cat Xonotic/stamp.txt`
1882 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1888 while [ "$#" -gt 1 ]; do
1889 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1895 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1896 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1897 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1898 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
1899 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1900 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
1902 release-pack-needsx11)
1905 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1908 verbose "$SELF" release-pack
1913 stamp=`cat Xonotic/stamp.txt`
1914 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1915 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1916 # let's pass crypto import laws of some nasty countries
1917 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
1918 if [ -n "$crypto_libs" ]; then
1919 verbose mkzip Xonotic-$stamp-crypto.zip \
1923 # build the archives
1924 verbose mkzip Xonotic-$stamp-engine.zip \
1926 Xonotic/bin64/*.dll \
1929 Xonotic/xonotic.exe \
1930 Xonotic/source/darkplaces/
1931 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1932 verbose mkzip Xonotic-$stamp-common.zip \
1933 Xonotic/source/fteqcc/ \
1934 Xonotic/source/qcsrc/ \
1939 Xonotic/key_0.d0pk \
1940 Xonotic/data/font-nimbussansl-$stamp.pk3 \
1941 Xonotic/data/font-xolonium-$stamp.pk3
1942 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1943 verbose mkzip0 Xonotic-$stamp.zip \
1944 Xonotic/data/xonotic-$stamp-data.pk3 \
1945 Xonotic/data/xonotic-$stamp-maps.pk3 \
1946 Xonotic/data/xonotic-$stamp-music.pk3 \
1947 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1948 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1949 verbose mkzip0 Xonotic-$stamp-low.zip \
1950 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1951 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1952 Xonotic/data/xonotic-$stamp-music-low.pk3
1953 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1954 verbose mkzip0 Xonotic-$stamp-high.zip \
1955 Xonotic/data/xonotic-$stamp-data-high.pk3 \
1956 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
1957 Xonotic/data/xonotic-$stamp-music.pk3 \
1958 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
1959 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
1961 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
1962 Xonotic/data/xonotic-$stamp-maps-low.pk3 # TODO add a Radiant build
1965 verbose "$SELF" release-prepare
1966 verbose "$SELF" release-maps
1967 verbose "$SELF" release-engine
1968 verbose "$SELF" release-qc
1969 verbose "$SELF" release-pack-needsx11
1970 verbose "$SELF" release-zip
1975 $ECHO " $SELF admin-merge [<branch>]"
1976 $ECHO " $SELF branch <branch>"
1977 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1978 $ECHO " $SELF branches"
1979 $ECHO " $SELF checkout|switch <branch>"
1980 $ECHO " $SELF checkout|switch <remote>/<branch>"
1981 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1982 $ECHO " $SELF clean --reclone"
1983 $ECHO " $SELF compile [-c] [-r|-p] [-0]"
1984 $ECHO " $SELF each|foreach [-k] command..."
1985 $ECHO " $SELF fix_upstream_rebase"
1986 $ECHO " $SELF keygen"
1987 $ECHO " $SELF merge"
1988 $ECHO " $SELF push|commit [-s]"
1989 $ECHO " $SELF release"
1990 $ECHO " $SELF restore-patches"
1991 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
1992 $ECHO " $SELF save-patches"
1993 $ECHO " $SELF update-maps"
1994 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"