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 .no file, skip
228 if [ -f "$d.no" ]; then
229 msg "Repository $d disabled by a .no file, delete $d.no to enable"
232 # if .yes file exists, always keep it
233 if [ -f "$d.yes" ]; then
234 msg "Repository $d enabled by a .yes file"
238 # remove broken clones so they don't mess up stuff
239 if [ x"$d" != x"." ] && [ -d "$d" ] && ! [ -d "$d/.git" ]; then
240 msg "$d exists but has no .git subdir. Probably a broken clone. Deleting."
244 # if we have the dir, always keep it
246 msg "Repository $d enabled because it already exists"
250 # if we have matching pk3, skip
251 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
252 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
255 # if "no" flag is set, skip
258 msg "Repository $d disabled by default, create $d.yes to enable"
263 msg "Repository $d enabled by default"
270 if [ "$#" = 0 ]; then
280 release_args="$cmd $*"
281 msg "*** $release_args: start"
282 release_starttime=`date +%s`
285 release_endtime=`date +%s`
286 release_deltatime=$(($release_endtime - $release_starttime))
287 msg "*** $release_args: $release_deltatime seconds"
289 trap release_end EXIT
290 release_tempstarttime=$release_starttime
293 release_endtime=`date +%s` # RELEASE NOW!!!
295 release_deltatime=$(($release_endtime - $release_tempstarttime))
296 msg "**** $release_args: $*: $release_deltatime seconds"
298 release_tempstarttime=$release_endtime
300 release_git_extract_dir()
302 release_src=$1; shift
303 release_dst=$1; shift
304 # try to create a hardlink
305 if ln -f "$release_src/.git/HEAD" "$release_dst/.hardlink-test"; then
306 rm -f "$release_dst/.hardlink-test"
308 verbose cd "$release_src"
309 git ls-files HEAD -- "$@"
311 while IFS= read -r F; do
312 case "$F" in */*) mkdir -p "$release_dst/${F%/*}" ;; esac
313 verbose ln -f "$release_src/$F" "$release_dst/$F"
318 verbose cd "$release_src"
319 verbose git archive --format=tar HEAD -- "$@"
321 verbose cd "$release_dst"
329 fix_upstream_rebase()
331 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
335 # one of the two sides of the merge should be remote upstream, or all is fine
336 r_r=`git symbolic-ref HEAD`
337 r_r=${r_r#refs/heads/}
338 r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
339 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
340 r_bra=${r_bra#refs/heads/}
341 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
342 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
347 r_base=`git merge-base "$r_me" "$r_other"`
349 # no merge-base? upstream did filter-branch
350 if [ -n "$r_base" ]; then
351 # otherwise, check if the two histories are "similar"
352 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
353 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
355 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
356 r_lc_me=`$ECHO "$r_l_me" | wc -l`
357 r_lc_other=`$ECHO "$r_l_other" | wc -l`
358 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
359 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
361 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
362 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
363 git reset --hard "$r_me"
373 fix_upstream_rebase_mergeok()
375 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
376 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
380 fix_upstream_rebase_mergefail()
382 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
383 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
389 if ! [ -f ".git/config" ]; then
390 $ECHO "Not a git repository. Bailing out to not cause damage."
393 verbose git config remote.origin.url "$1"
395 verbose git config remote.origin.pushurl "$2"
397 verbose git config --unset remote.origin.pushurl || true
399 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
400 case ",`repoflags "$d"`," in
402 verbose git config --unset core.autocrlf || true
405 verbose git config core.autocrlf input
408 if [ -z "`git config push.default || true`" ]; then
409 verbose git config push.default current # or is tracking better?
411 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
412 verbose git config filter.mapclean.smudge "cat"
418 case "$RELEASETYPE" in
428 find "$@" -exec touch -d "2001-01-01 01:01:01 +0000" {} \+ # ugly hack to make the pk3 files rsync-friendly
430 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
431 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
432 zip $zipflags -y -@<"$ziplist" "$archive" || true
439 case "$RELEASETYPE" in
450 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
451 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
452 zip $zipflags -y -@<"$ziplist" "$archive" || true
459 zip -0ry "$archive" "$@"
464 # first result is to be ignored, but we use it to check status
465 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
466 { 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*,,'
467 # unit: clock ticks (depends on what "time" returns
475 if ! { time -p true; } >/dev/null 2>&1; then
476 msg "Cannot do timing in this shell"
494 if t=`mirrorspeed "$m"`; then
496 tt=$(($t$op)) # fudge factor
497 msg "$m -> $t$op = $tt ticks"
498 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
509 if [ -n "$bestin" ]; then
510 msg "Best mirror seems to be $pre$bestin$suf"
520 enter "$d0/$d" verbose
521 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
527 pushurl=`repopushurl "$d"`
528 branch=`repobranch "$d"`
529 if [ -f "$d0/$d/.git/config" ]; then
531 fix_git_config "$url" "$pushurl"
537 # enable the ssh URL for pushing
540 if [ -f ~/.ssh/id_rsa.pub ]; then
542 msg "A key already exists and no new one will be generated. If you"
543 msg "already have done the procedure for getting your key approved, you"
544 msg "can skip the following paragraph and already use the repository."
546 msg "To get access, your key has to be approved first. For that, visit"
547 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
548 msg "the \"Support\" tracker in the \"Repository\" category where you"
549 msg "apply for access and paste the following output into the issue:"
551 msg "`cat ~/.ssh/id_rsa.pub`"
553 msg "Note that you will only have write access to branches that start"
554 msg "with your user name."
555 elif [ -f ~/.ssh/id_dsa.pub ]; then
557 msg "A key already exists and no new one will be generated. If you"
558 msg "already have done the procedure for getting your key approved, you"
559 msg "can skip the following paragraph and already use the repository."
561 msg "To get access, your key has to be approved first. For that, visit"
562 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
563 msg "the \"Support\" tracker in the \"Repository\" category where you"
564 msg "apply for access and paste the following output into the issue:"
566 msg "`cat ~/.ssh/id_dsa.pub`"
568 msg "Note that you will only have write access to branches that start"
569 msg "with your user name."
572 msg "No key has been generated yet. One will be generated now."
573 msg "If other people are using your computer, it is recommended"
574 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
575 msg "when asked for a passphrase."
577 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
579 msg "To get access, your key has to be approved first. For that, visit"
580 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
581 msg "the \"Support\" tracker in the \"Repository\" category where you"
582 msg "apply for access and paste the following output into the issue:"
584 msg "`cat ~/.ssh/id_rsa.pub`"
586 msg "Note that you will only have write access to branches that start"
587 msg "with your user name."
594 oldpushbase=$pushbase
595 # transition old URLs
596 if [ x"$base" = x"ssh://xonotic@git.xonotic.org/" ]; then
597 base=ssh://xonotic@push.git.xonotic.org/
599 if [ x"$pushbase" = x"ssh://xonotic@git.xonotic.org/" ]; then
600 pushbase=ssh://xonotic@push.git.xonotic.org/
603 if [ x"$1" = x"-N" ]; then
605 elif [ x"$1" = x"-p" ]; then
606 pushbase=ssh://xonotic@push.git.xonotic.org/
607 elif [ x"$1" = x"-ps" ]; then
608 pushbase=ssh://xonotic@push.git.xonotic.org/
609 elif [ x"$1" = x"-ph" ]; then
610 pushbase=http://push.git.xonotic.org/login/xonotic/
611 elif [ x"$1" = x"-s" ]; then
612 base=ssh://xonotic@push.git.xonotic.org/
613 elif [ x"$1" = x"-g" ]; then
614 base=git://git.xonotic.org/xonotic/
616 elif [ x"$1" = x"-h" ]; then
617 base=http://git.xonotic.org/xonotic/
619 elif [ x"$1" = x"-l" ]; then
627 msg "Invalid location!"
628 msg "Possible locations for the -l option:"
629 msg " nl (Netherlands, run by merlijn)"
630 msg " de (Germany, run by divVerent)"
631 msg " us (United States of America, run by detrate)"
632 msg " best (find automatically)"
633 msg " default (currently nl)"
646 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
653 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
657 base=git://git.xonotic.org/xonotic/
660 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
663 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
664 git config xonotic.all.mirrorselection done
681 *://*.git.xonotic.org/*)
682 location=${base%%.git.xonotic.org/*}
683 location=${location##*://}
691 if [ -n "$location" ]; then
692 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
694 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
696 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://xonotic@push.git.xonotic.org/,"`
697 if [ x"$base" != x"$oldbase" ] || [ x"$pushbase" != x"$oldpushbase" ]; then
699 pushurl=`repopushurl .`
700 fix_git_config "$url" "$pushurl"
702 elif $allow_pull; then
707 pushurl=`repopushurl "$d"`
708 branch=`repobranch "$d"`
709 if [ -f "$d0/$d/.git/config" ]; then
710 # if we have .no file, skip
711 if [ -f "$d0/$d.no" ]; then
712 msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
716 enter "$d0/$d" verbose
717 r=`git symbolic-ref HEAD`
719 if git config branch.$r.remote >/dev/null 2>&1; then
720 if ! verbose git pull; then
721 fix_upstream_rebase_mergefail || true
722 check_mergeconflict "$d"
723 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
726 fix_upstream_rebase_mergeok || true
731 checkself "$cmd" "$@"
733 verbose git remote prune origin
737 if [ -d "$d0/$d" ]; then
738 if yesno "$d0/$d is in the way, get rid of it and reclone?"; then
739 verbose rm -rf "$d0/$d"
741 echo "Note: $d0/$d will stay broken."
745 verbose git clone "$url" "$d0/$d"
746 enter "$d0/$d" verbose
747 fix_git_config "$url" "$pushurl"
748 if [ "$branch" != "master" ]; then
749 verbose git checkout --track -b "$branch" origin/"$branch"
756 misc/tools/xonotic-map-compiler-autobuild download
760 if [ x"$1" = x"-f" ]; then
766 if [ -z "$branch" ]; then
769 branch=${remote#origin/}
778 if [ -n "$checkoutflags" ]; then
779 set -- -f "$@" # to make checkself work again
783 enter "$d0/$d" verbose
785 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
787 verbose git checkout $checkoutflags "$b"
788 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
790 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
793 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
794 verbose git checkout $checkoutflags "$b"
795 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
796 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
798 $ECHO "WTF? Not even branch $b doesn't exist in $d"
803 checkself "$cmd" "$@"
807 $ECHO "The requested branch was not found in any repository."
815 if [ -z "$branch" ]; then
819 if [ -z "$branch" ]; then
822 r=`git symbolic-ref HEAD`
829 dv=`visible_repo_name "$d"`
830 enter "$d0/$d" verbose
831 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
832 $ECHO "Already having this branch in $dv."
834 if yesno "Branch in $dv?"; then
835 if [ -n "$srcbranch" ]; then
838 b=origin/"`repobranch "$d"`"
839 verbose git fetch origin || true
841 # TODO do this without pushing
842 verbose git checkout -b "$branch" "$b"
843 verbose git config "branch.$branch.remote" "$remote"
844 verbose git config "branch.$branch.merge" "refs/heads/$branch"
854 cd "$d0/$d" # am in a pipe, shouldn't use enter
855 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
860 while read -r d BRANCH REV TEXT; do
861 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
864 if [ x"$REV" = x"->" ]; then
867 BRANCH=${BRANCH#remotes/}
868 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
869 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
870 eval "r=\$branches_repos_$ID"
872 eval "branches_repos_$ID=\$r"
874 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
875 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
876 eval "r=\$branches_repos_$ID"
877 printf "%-60s %s\n" "$BRANCH" "$r"
884 dv=`visible_repo_name "$d"`
885 enter "$d0/$d" verbose
886 r=`git symbolic-ref HEAD`
888 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
889 # we have uncommitted changes
890 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
891 if ! verbose git merge origin/"`repobranch "$d"`"; then
892 check_mergeconflict "$d"
893 exit 1 # this should ALWAYS be fatal
903 dv=`visible_repo_name "$d"`
904 enter "$d0/$d" verbose
905 r=`git symbolic-ref HEAD`
907 diffdata=`git diff --color HEAD`
908 if [ -n "$diffdata" ]; then
909 # we have uncommitted changes
910 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
911 verbose git commit -a
914 rem=`git config "branch.$r.remote" || $ECHO origin`
915 bra=`git config "branch.$r.merge" || $ECHO "$r"`
916 upstream="$rem/${bra#refs/heads/}"
917 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
918 upstream="origin/`repobranch "$d"`"
920 logdata=`git log --color "$upstream".."$r"`
921 if [ -n "$logdata" ]; then
922 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
923 verbose git push "$rem" HEAD
926 if [ x"$submit" = x"-s" ]; then
929 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
943 snowleopardhack=false
944 if [ -z "$CC" ]; then
945 export CC="gcc -DSUPPORTIPV6"
970 case "`$CC -dumpversion`" in
971 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
973 # -march=native is broken < 4.3
974 if $CC -mtune=native -march=native misc/tools/conftest.c -o conftest >/dev/null 2>&1; then
975 export CC="$CC -mtune=native -march=native"
979 if [ -n "$WE_HATE_OUR_USERS" ]; then
980 export CC="$CC -fno-common"
989 if [ -n "$WE_HATE_OUR_USERS" ]; then
990 TARGETS="sv-$debug cl-$debug"
991 elif [ x"`uname`" = x"Darwin" ]; then
994 TARGETS="sv-$debug cl-$debug sdl-$debug"
997 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
999 TARGETS="sv-$debug sdl-$debug"
1002 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"
1004 TARGETS="sv-$debug cl-$debug sdl-$debug"
1006 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
1007 # if we give the command make the arg "", it will surely fail (invalid filename),
1008 # so better handle it as an empty client option
1011 elif [ -n "$1" ]; then
1013 TARGETS_SAVE=$TARGETS
1018 TARGETS="$TARGETS sdl-debug"
1021 TARGETS="$TARGETS cl-debug"
1022 if $snowleopardhack; then
1023 export CC="$CC -arch i386"
1027 TARGETS="$TARGETS cl-debug"
1030 TARGETS="$TARGETS sv-debug"
1033 BAD_TARGETS="$BAD_TARGETS $X"
1037 if [ -n "$TARGETS" ]; then # at least a valid client
1039 else # no valid client, let's assume this option is not meant to be a client then
1040 TARGETS=$TARGETS_SAVE
1044 if [ -z "$MAKEFLAGS" ]; then
1045 if [ -f /proc/cpuinfo ]; then
1046 ncpus=$((`grep -c '^processor :' /proc/cpuinfo || true`+0))
1047 if [ $ncpus -gt 1 ]; then
1051 if [ -n "$WE_HATE_OUR_USERS" ]; then
1052 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
1057 if ! verbose $CC misc/tools/conftest.c -o conftest; then
1059 msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
1060 msg "~~~~~~~~~~ COMPILER ~~~~~~~~~~"
1061 msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
1062 msg "~~~~~~~~~~~~~~_...._~~~~~~~~~~"
1063 msg "~~~~~~~~~~~,-' \\\`-._~~~~~~"
1064 msg "~~~~~~~~~~/ --. >< \\~~~~~"
1065 msg "~~~~~~~~~/ (*)> -<: \\~~~~"
1066 msg "~~~~~~~~~( ^~-' (*) )~~~~"
1067 msg "~~~~~~~~~\\ ^+-_/ |~~~~"
1068 msg "~~~~~~~~~~\\ {vvv} |~~~~"
1069 msg "~~~~~~~~~~,\\ , {^^^},/~~~~~"
1070 msg "~~~~~~~~,/ \`---.....-'~~W~~~~"
1071 msg "~~~~~~,/ \\_____/_\\_W~~/~~~~~"
1072 msg "~~~~~/ /~~~\\__/~~~~~~"
1073 msg "~~~~/ /~~~~~~~~~~~~~~"
1074 msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
1075 msg "~~~~~~~ Y U NO COMPILE ~~~~~~~"
1076 msg "~~~~~~~~~~~~ CODE ~~~~~~~~~~~~"
1077 msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
1083 verbose cd "$d0/d0_blind_id"
1084 if ! $compiled0; then
1085 # compilation of crypto library failed
1086 # use binaries then, if we can...
1088 if [ -n "$WE_HATE_OUR_USERS" ]; then
1089 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
1090 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
1091 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
1097 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
1098 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
1099 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
1100 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
1103 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
1104 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
1105 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
1106 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
1114 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
1115 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
1125 if [ -f Makefile ]; then
1126 verbose make $MAKEFLAGS distclean
1129 if ! [ -f Makefile ]; then
1130 verbose sh autogen.sh
1133 verbose make $MAKEFLAGS
1136 verbose cd "$d0/fteqcc"
1138 verbose make $MAKEFLAGS clean
1140 verbose make $MAKEFLAGS
1142 verbose cd "$d0/data/xonotic-data.pk3dir"
1144 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1146 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1147 # 4 levels up: data, xonotic-data, qcsrc, server
1149 verbose cd "$d0/darkplaces"
1150 if [ x"$BAD_TARGETS" = x" " ]; then
1151 $ECHO "Warning: invalid empty client, default clients will be used."
1154 verbose make $MAKEFLAGS clean
1156 for T in $TARGETS; do
1157 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1159 for T in $BAD_TARGETS; do
1160 $ECHO "Warning: discarded invalid client $T."
1163 verbose "$SELF" update-maps
1166 if [ -n "$WE_HATE_OUR_USERS" ]; then
1168 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1169 elif [ x"`uname`" = x"Darwin" ]; then
1170 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1171 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
1174 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1178 sdl|glx|agl|dedicated)
1187 if ! [ -x "darkplaces/darkplaces$client" ]; then
1188 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1191 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1195 set -- "darkplaces/darkplaces$client" -xonotic "$@"
1197 # if pulseaudio is running: USE IT
1198 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1199 if ps -C pulseaudio >/dev/null; then
1200 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1201 export SDL_AUDIODRIVER=pulse
1208 if [ x"$USE_GDB" = x"yes" ]; then
1209 set -- gdb --args "$@"
1210 elif [ x"$USE_GDB" = x"core" ] && which gdb >/dev/null 2>&1; then
1211 set -- gdb --batch -x savecore.gdb --args "$@"
1212 elif which catchsegv >/dev/null 2>&1; then
1213 set -- catchsegv "$@"
1217 if [ -f xonotic.core ]; then
1218 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1219 gdb "$binary" xonotic.core
1220 #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
1221 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1223 # rm -f xonotic.core.tar.gz
1225 $ECHO "The core dump can be examined later by"
1226 $ECHO " gdb $binary xonotic.core"
1233 if [ x"$1" = x"-k" ]; then
1238 if verbose cd "$d0/$d"; then
1239 if $keep_going; then
1240 verbose "$@" || true
1250 patchdir=`mktemp -d -t save-patches.XXXXXX`
1252 enter "$d0/$d" verbose
1253 git branch -v -v | cut -c 3- | {
1255 while read -r BRANCH REV UPSTREAM TEXT; do
1258 UPSTREAM=${UPSTREAM#\[}
1259 UPSTREAM=${UPSTREAM%\]}
1260 UPSTREAM=${UPSTREAM%:*}
1264 UPSTREAM=origin/"`repobranch "$d"`"
1268 if [ x"$REV" = x"->" ]; then
1271 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1272 $ECHO "$d" > "$patchdir/$i/info.txt"
1273 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1274 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1275 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1278 rm -rf "$patchdir/$i"
1283 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1288 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1289 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1291 for P in "$patchdir"/*/info.txt; do
1296 read -r UPSTREAM <&3
1298 verbose git checkout HEAD^0
1299 verbose git branch -D "$BRANCH"
1300 if [ x"$TRACK" = x"true" ]; then
1301 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1303 verbose git branch -b "$BRANCH" "$UPSTREAM"
1322 report=$report"$*$LF"
1327 report=$report" $*$LF"
1332 o=`"$@" | sed 's/^/ /' || true`
1338 # sorry, fteqcc repo is managed manually
1342 enter "$d0/$d" verbose
1343 base="`repobranch "$d"`"
1345 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1346 case "${ref#refs/remotes/origin/}" in
1359 if [ -n "$branch" ]; then
1360 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1369 l0=`git rev-list "$base".."$ref" | wc -l`
1370 l1=`git rev-list master.."$ref" | wc -l`
1371 if [ $l0 -gt $l1 ]; then
1378 reportecho " Branch $ref:"
1379 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1380 logdata=`git log --color "$realbase".."$ref"`
1381 if [ -z "$logdata" ]; then
1382 reportecho4 "--> not merging, no changes vs master"
1383 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1384 git push origin :"${ref#refs/remotes/origin/}"
1385 reportecho4 "--> branch deleted"
1388 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1389 if [ -z "$diffdata" ]; then
1390 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1391 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1392 git push origin :"${ref#refs/remotes/origin/}"
1393 reportecho4 "--> branch deleted"
1395 elif $only_delete; then
1396 reportecho4 "--> skipped in delete-only run"
1397 elif [ -z "$branch" ] && [ -n "$note" ]; then
1398 reportdo4 $ECHO "$note"
1399 reportecho4 "--> not merging, already had this one rejected before"
1400 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1401 git checkout "$realbase"
1402 org=`git rev-parse HEAD`
1403 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1404 git reset --hard "$org"
1405 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1407 reportecho4 "--> merge failed"
1408 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1409 git reset --hard "$org"
1410 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1412 reportecho4 "--> compile failed"
1413 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1414 git reset --hard "$org"
1415 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1416 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1417 if [ x"$note" = x"del" ]; then
1418 git push origin :"${ref#refs/remotes/origin/}"
1419 reportecho4 "--> test failed, branch deleted"
1420 elif [ -n "$note" ]; then
1421 reportdo4 $ECHO "$note"
1422 reportecho4 "--> test failed"
1424 reportecho4 "--> test failed, postponed"
1427 # apply crlf, or other cleanup filters (non-behavioural changes)
1429 find . -type f -exec touch {} \;
1430 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1433 case ",`repoflags "$d"`," in
1435 # we do quite a mess here... luckily we know $org
1436 git fetch # svn needs to be current
1437 git rebase -i --onto origin/master "$org"
1438 git svn dcommit --add-author-from
1439 git reset --hard "$org"
1442 git push origin HEAD
1445 reportecho4 "--> MERGED"
1446 if yesno "Delete original branch \"$ref\"?"; then
1447 git push origin :"${ref#refs/remotes/origin/}"
1448 reportecho4 "--> branch deleted"
1452 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1453 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1454 if [ x"$note" = x"del" ]; then
1455 git push origin :"${ref#refs/remotes/origin/}"
1456 reportecho4 "--> branch deleted"
1457 elif [ -n "$note" ]; then
1458 reportdo4 $ECHO "$note"
1459 reportecho4 "--> rejected"
1461 reportecho4 "--> postponed"
1470 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1482 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1483 # ./all clean --reclone
1486 if [ x"$X" = x"--reclone" ]; then
1493 elif [ x"$X" = x"-f" ]; then
1495 elif [ x"$X" = x"-u" ]; then
1497 elif [ x"$X" = x"-U" ]; then
1500 elif [ x"$X" = x"-fu" ]; then
1503 elif [ x"$X" = x"-fU" ]; then
1507 elif [ x"$X" = x"-m" ]; then
1509 elif [ x"$X" = x"-r" ]; then
1511 elif [ x"$X" = x"-D" ]; then
1513 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1516 msg " ,--'-\\P/\`\\ FFFFFFF"
1517 msg " __/_ B/,-.\\ FFFFFFF"
1518 msg " / _\\ (// O\\\\ FFFFFF"
1519 msg "| (O \`) _\\._ _)\\ FFFUU"
1520 msg "| |___/.^d0~~\"\\ \\ UUUU"
1521 msg "| |\`~' \\ | UUUU"
1522 msg "| | __,C>|| UUUU"
1523 msg "\\ /_ ,-/,-' | UUUU"
1524 msg " \\\\_ \\_>~' / UUUU-"
1527 msg "Unknown arg: $X"
1536 if $gotoupstream; then
1538 msg "Must also use -f (delete local changes) when using -u"
1541 if $gotomaster; then
1542 if $fetchupstream; then
1543 verbose git fetch origin
1544 verbose git remote prune origin
1546 verbose git checkout -f "`repobranch "$d"`"
1547 verbose git reset --hard origin/"`repobranch "$d"`"
1549 r=`git symbolic-ref HEAD`
1551 rem=`git config "branch.$r.remote" || $ECHO origin`
1552 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1553 upstream="$rem/${bra#refs/heads/}"
1554 if $fetchupstream; then
1555 verbose git fetch "$rem"
1556 verbose git remote prune "$rem"
1558 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1559 upstream="origin/`repobranch "$d"`"
1561 verbose git reset --hard "$upstream"
1563 elif $gotomaster; then
1565 verbose git checkout -f "`repobranch "$d"`"
1566 verbose git reset --hard
1568 verbose git checkout "`repobranch "$d"`"
1571 verbose git reset --hard
1573 if $rmuntracked; then
1576 verbose git clean -df || true
1579 verbose git clean -xdf || true
1583 if $killbranches; then
1584 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1585 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1586 verbose git branch -D "${B#refs/heads/}"
1589 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1590 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1592 checkself "$cmd" "$@"
1596 # release building goes here
1598 #"$SELF" each git clean -fxd
1599 case "$RELEASETYPE" in
1601 $ECHO >&2 -n "$ESC[2J$ESC[H"
1608 msg " +---------------------------------------------------------.---+"
1610 msg " +---------------------------------------------------------^---+"
1612 msg " | / \ This is the official release build system. |"
1613 msg " | | | If you are not a member of the Xonotic Core Team, |"
1614 msg " | | STOP | you are not supposed to use this script and should |"
1615 msg " | | | instead use ./all compile to compile the engine |"
1616 msg " | \____/ and game code. |"
1618 msg " | [ I understand ] |"
1619 msg " +-------------------------------------------------------------+"
1621 # A LOT of build infrastructure is required:
1624 # - .ssh/config must be configured so the following
1625 # host names are reachable and have a compile
1626 # infrastructure set up:
1627 # - xonotic-build-linux32 (with gcc on x86)
1628 # - xonotic-build-linux64 (with gcc on x86_64)
1629 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1630 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1631 # and x86_64-w64-mingw32-g++)
1632 # - xonotic-build-osx (with Xcode and SDL.framework)
1633 # - AMD Compressonator installed in WINE
1634 # - ResEdit installed in WINE
1635 # - a lot of other requirements you will figure out
1636 # while reading the error messages
1637 # - environment variable RELEASETYPE set
1638 # - optionally, environment variable RELEASEDATE set
1643 msg "Building a FINISHED RELEASE"
1646 msg "Building a $RELEASETYPE"
1649 verbose rm -rf Xonotic Xonotic*.zip
1650 verbose mkdir -p Xonotic
1651 if [ -n "$RELEASEDATE" ]; then
1652 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1654 verbose date +%Y%m%d > Xonotic/stamp.txt
1656 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
1659 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1660 verbose rm -rf misc/builddeps
1661 verbose mv misc/buildfiles/win32 bin32 || true
1662 verbose mv bin32/SDL.dll . || true
1663 verbose mv misc/buildfiles/win64 bin64 || true
1664 verbose mv misc/buildfiles/osx/* . || true
1665 verbose rm -rf misc/buildfiles
1666 verbose rm -rf misc/pki
1668 release_git_extract_dir "darkplaces" "Xonotic/source/darkplaces" .
1669 release_git_extract_dir "fteqcc" "Xonotic/source/fteqcc" .
1670 release_git_extract_dir "data/xonotic-data.pk3dir" "Xonotic/source" qcsrc Makefile
1671 release_git_extract_dir "d0_blind_id" "Xonotic/source/d0_blind_id" .
1673 verbose cd Xonotic/source/d0_blind_id
1674 verbose sh autogen.sh
1676 rm -f Xonotic/key_15.d0pk
1678 verbose cd Xonotic/mapping
1679 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120114.tar.bz2
1680 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120114-win32-7z.exe
1681 for X in *-7z.exe; do
1685 # TODO possibly include other tools?
1688 release-compile-run)
1697 if [ -n "$targetfiles" ]; then
1698 case " $HOSTS_THAT_ARE_DISABLED " in
1703 case " $HOSTS_THAT_ARE_MYSELF " in
1705 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1706 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1707 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1708 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1709 for f in $targetfiles; do
1710 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1714 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1715 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1716 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"
1717 for f in $targetfiles; do
1718 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1722 # now rebrand the binaries...
1723 for f in $targetfiles; do
1724 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1726 Xonotic/xonotic*.exe)
1727 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1736 fteqcc_maketargets=$3
1738 darkplaces_maketargets=$5
1740 host=xonotic-build-$suffix
1741 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1742 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1744 release-engine-win32)
1745 verbose "$SELF" release-compile win32 \
1746 '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' \
1747 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1749 verbose "$SELF" release-compile win32 \
1750 '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' \
1752 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1754 release-engine-win64)
1755 verbose "$SELF" release-compile win64 \
1756 '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' \
1757 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1758 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1759 verbose "$SELF" release-compile win64 \
1760 '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' \
1762 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1765 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1766 verbose "$SELF" release-compile osx \
1767 '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"' \
1768 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1769 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1771 release-engine-linux32)
1772 verbose "$SELF" release-compile linux32 \
1773 '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' \
1774 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1775 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1777 release-engine-linux64)
1778 verbose "$SELF" release-compile linux64 \
1779 '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' \
1780 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1781 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1784 verbose "$SELF" release-engine-linux32 &
1785 verbose "$SELF" release-engine-linux64 &
1786 verbose "$SELF" release-engine-win32 &
1787 verbose "$SELF" release-engine-win64 &
1788 verbose "$SELF" release-engine-osx &
1797 verbose "$SELF" update-maps
1800 verbose env GIT_DIR="$d0/data/xonotic-data.pk3dir/.git" make -C Xonotic/source FTEQCC="$d0/Xonotic/fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1801 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1803 release-buildpk3-transform-raw)
1806 release-buildpk3-transform-normal)
1809 # texture: convert to jpeg and dds
1810 verbose export do_jpeg=true
1811 verbose export jpeg_qual_rgb=97
1812 verbose export jpeg_qual_a=99
1813 verbose export do_dds=false
1814 verbose export do_ogg=true
1815 verbose export ogg_ogg=false
1816 verbose export del_src=true
1817 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1819 release-buildpk3-transform-normaldds)
1822 # texture: convert to jpeg and dds
1823 # music: reduce bitrate
1824 verbose export do_jpeg=false
1825 verbose export do_jpeg_if_not_dds=true
1826 verbose export jpeg_qual_rgb=95
1827 verbose export jpeg_qual_a=99
1828 verbose export do_dds=true
1829 verbose export dds_flags=
1830 verbose export do_ogg=true
1831 verbose export ogg_ogg=false
1832 verbose export del_src=true
1833 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1835 release-buildpk3-transform-low)
1838 # texture: convert to jpeg and dds
1839 # music: reduce bitrate
1840 verbose export do_jpeg=true
1841 verbose export jpeg_qual_rgb=80
1842 verbose export jpeg_qual_a=97
1843 verbose export do_dds=false
1844 verbose export do_ogg=true
1845 verbose export ogg_qual=1
1846 verbose export del_src=true
1847 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1849 release-buildpk3-transform-lowdds)
1852 # texture: convert to jpeg and dds
1853 # music: reduce bitrate
1854 verbose export do_jpeg=false
1855 verbose export do_jpeg_if_not_dds=true
1856 verbose export jpeg_qual_rgb=80
1857 verbose export jpeg_qual_a=99
1858 verbose export do_dds=true
1859 verbose export dds_flags=
1860 verbose export do_ogg=true
1861 verbose export ogg_qual=1
1862 verbose export del_src=true
1863 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1865 release-buildpk3-transform-mapping)
1868 # remove stuff radiant has no use for
1869 verbose find . -name \*_norm.\* -exec rm -f {} \;
1870 verbose find . -name \*_bump.\* -exec rm -f {} \;
1871 verbose find . -name \*_glow.\* -exec rm -f {} \;
1872 verbose find . -name \*_gloss.\* -exec rm -f {} \;
1873 verbose find . -name \*_pants.\* -exec rm -f {} \;
1874 verbose find . -name \*_shirt.\* -exec rm -f {} \;
1875 verbose find . -name \*_reflect.\* -exec rm -f {} \;
1876 verbose find . -not \( -name \*.tga -o -name \*.png -o -name \*.jpg \) -exec rm -f {} \;
1877 # texture: convert to jpeg and dds
1878 # music: reduce bitrate
1879 verbose export do_jpeg=true
1880 verbose export jpeg_qual_rgb=80
1881 verbose export jpeg_qual_a=97
1882 verbose export do_dds=false
1883 verbose export do_ogg=true
1884 verbose export ogg_qual=1
1885 verbose export del_src=true
1886 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1900 verbose rm -rf Xonotic/temp
1901 release_timereport "deleted temp directory"
1902 verbose mkdir -p Xonotic/temp
1903 release_git_extract_dir "$src" "Xonotic/temp" .
1904 release_timereport "extracted data"
1905 verbose cd Xonotic/temp
1906 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1907 verbose cp ../source/progs.dat .
1908 verbose cp ../source/csprogs.dat .
1909 verbose cp ../source/menu.dat .
1910 verbose rm -rf qcsrc
1911 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1912 major=$(($gv / 10000))
1913 minor=$((($gv / 100) - ($major * 100)))
1914 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1915 versionstr="$major.$minor.$patch"
1916 case "$RELEASETYPE" in
1920 versionstr="$versionstr$RELEASETYPE"
1923 if [ $gv -lt 9900 ]; then
1924 # pre-1.0: compatible with any other pre-1.0
1926 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1927 s/^gameversion_min [0-9]*/gameversion_min 0/;
1928 s/^gameversion_max [0-9]*/gameversion_max 9999/;
1929 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1933 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1934 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1935 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1936 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1938 mv defaultXonotic.cfg.new defaultXonotic.cfg
1939 case "$RELEASETYPE" in
1941 echo "" >> defaultXonotic.cfg
1942 echo "// nicer menu" >> defaultXonotic.cfg
1943 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1947 verbose cd gfx/menu/luminos
1948 verbose rm -f background_l2.tga background_ingame_l2.tga
1949 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1950 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1951 verbose rm background_l2.svg
1954 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1955 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1956 if [ -f "$X" ]; then
1958 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1962 verbose export git_src_repo="$d0/$src" # skip hash-object
1963 release_timereport "processed data"
1964 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1965 release_timereport "transformed data"
1966 find . -type f -size +4k | verbose "$d0"/misc/tools/symlink-deduplicate.sh
1967 release_timereport "deduplicated data"
1968 verbose mkzipr "../../$dst" *
1969 release_timereport "zipped data"
1971 verbose rm -rf Xonotic/temp
1972 release_timereport "deleted temp directory again"
1975 stamp=`cat Xonotic/stamp.txt`
1981 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1987 while [ "$#" -gt 1 ]; do
1988 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1994 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1995 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1996 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1997 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds '' mapping '-mapping'
1998 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1999 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
2001 release-pack-needsx11)
2004 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
2007 verbose "$SELF" release-pack
2012 stamp=`cat Xonotic/stamp.txt`
2013 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
2014 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
2015 # let's pass crypto import laws of some nasty countries
2016 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
2017 if [ -n "$crypto_libs" ]; then
2018 verbose mkzip Xonotic-$stamp-crypto.zip \
2020 Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
2023 # build the archives
2024 verbose mkzip Xonotic-$stamp-enginesource.zip \
2025 Xonotic/source/darkplaces/ \
2026 Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
2027 verbose cp Xonotic-$stamp-enginesource.zip Xonotic-$stamp-engine.zip
2028 verbose mkzip Xonotic-$stamp-engine.zip \
2030 Xonotic/bin32/*.dll \
2031 Xonotic/bin64/*.dll \
2035 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
2036 verbose mkzip Xonotic-$stamp-common.zip \
2037 Xonotic/source/fteqcc/ \
2038 Xonotic/source/qcsrc/ \
2043 Xonotic/key_0.d0pk \
2044 Xonotic/data/font-nimbussansl-$stamp.pk3 \
2045 Xonotic/data/font-xolonium-$stamp.pk3
2046 verbose cp Xonotic-$stamp-enginesource.zip Xonotic-$stamp-source.zip
2047 verbose mkzip Xonotic-$stamp-source.zip \
2048 Xonotic/source/fteqcc/ \
2049 Xonotic/source/qcsrc/ \
2051 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
2052 verbose mkzip0 Xonotic-$stamp.zip \
2053 Xonotic/data/xonotic-$stamp-data.pk3 \
2054 Xonotic/data/xonotic-$stamp-maps.pk3 \
2055 Xonotic/data/xonotic-$stamp-music.pk3 \
2056 Xonotic/data/xonotic-$stamp-nexcompat.pk3
2057 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
2058 verbose mkzip0 Xonotic-$stamp-low.zip \
2059 Xonotic/data/xonotic-$stamp-data-low.pk3 \
2060 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
2061 Xonotic/data/xonotic-$stamp-music-low.pk3
2062 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
2063 verbose mkzip Xonotic-$stamp-high.zip \
2065 verbose mkzip0 Xonotic-$stamp-high.zip \
2066 Xonotic/data/xonotic-$stamp-data-high.pk3 \
2067 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
2068 Xonotic/data/xonotic-$stamp-music.pk3 \
2069 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
2070 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
2072 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
2073 Xonotic/data/xonotic-$stamp-maps-mapping.pk3
2076 verbose "$SELF" release-prepare
2077 verbose "$SELF" release-maps
2078 verbose "$SELF" release-engine
2079 verbose "$SELF" release-qc
2080 verbose "$SELF" release-pack-needsx11
2081 verbose "$SELF" release-zip
2086 $ECHO " $SELF admin-merge [<branch>]"
2087 $ECHO " $SELF branch <branch>"
2088 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
2089 $ECHO " $SELF branches"
2090 $ECHO " $SELF checkout|switch <branch>"
2091 $ECHO " $SELF checkout|switch <remote>/<branch>"
2092 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
2093 $ECHO " $SELF clean --reclone"
2094 $ECHO " $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
2095 $ECHO " $SELF each|foreach [-k] command..."
2096 $ECHO " $SELF fix_upstream_rebase"
2097 $ECHO " $SELF keygen"
2098 $ECHO " $SELF merge"
2099 $ECHO " $SELF push|commit [-s]"
2100 $ECHO " $SELF restore-patches"
2101 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
2102 $ECHO " $SELF save-patches"
2103 $ECHO " $SELF update-maps"
2104 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"