5 if [ -n "$ZSH_VERSION" ]; then
8 if [ -z "$ECHO" ]; then
9 if echo "\\\\" | grep .. >/dev/null; then
16 # I use this in EVERY shell script ;)
22 while ! [ -f ./all ]; do
23 if [ x"`pwd`" = x"/" ]; then
24 $ECHO "Cannot find myself."
25 $ECHO "Please run this script with the working directory inside a Xonotic checkout."
33 # If we are on WINDOWS:
38 # Windows hates users. So this script has to copy itself elsewhere first...
39 cp "$SELF" ../all.xonotic.sh
40 export WE_HATE_OUR_USERS=1
41 exec ../all.xonotic.sh "$@"
49 $ECHO >&2 "$ESC""[1m$*$ESC""[m"
52 self=`git hash-object "$SELF"`
55 self_new=`git hash-object "$SELF"`
56 if [ x"$self" != x"$self_new" ]; then
57 msg "./all has changed."
58 if [ -z "$XONOTIC_FORBID_RERUN_ALL" ]; then
59 msg "Rerunning the requested operation to make sure."
60 export XONOTIC_FORBID_RERUN_ALL=1
63 msg "Please try $SELF update, and then retry your requested operation."
80 $ECHO "the root directory"
90 if git ls-files -u | grep ' 1 '; then
92 $ECHO "MERGE CONFLICT."
93 $ECHO "change into the \"$1\" project directory, and then:"
94 $ECHO "- edit the files mentioned above with your favorite editor,"
95 $ECHO " and fix the conflicts (marked with <<<<<<< blocks)"
96 $ECHO "- for binary files, you can select the files using"
97 $ECHO " git checkout --ours or git checkout --theirs"
98 $ECHO "- when done with a file, 'git add' the file"
99 $ECHO "- when done, 'git commit'"
108 while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
111 if ! IFS= read -r yesno; then
122 check_mergeconflict "$1"
127 data/xonotic-data.pk3dir | | master |
128 data/xonotic-music.pk3dir | | master |
129 data/xonotic-nexcompat.pk3dir | | master | no
130 darkplaces | | div0-stable | svn
131 netradiant | | master |
132 div0-gittools | | master | no
133 d0_blind_id | | master |
134 data/xonotic-maps.pk3dir | | master |
135 mediasource | | master | no
136 fteqcc | | xonotic-stable | noautocrlf
138 # todo: in darkplaces, change repobranch to div0-stable
140 repos=`$ECHO "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
142 base=`git config remote.origin.url`
145 base=${base%xonotic.git}
148 $ECHO "The main repo is not xonotic.git, what have you done?"
152 pushbase=`git config remote.origin.pushurl || true`
155 pushbase=${pushbase%xonotic.git}
160 $ECHO "The main repo is not xonotic.git, what have you done?"
167 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
168 if [ -n "$repo_t" ]; then
178 if [ x"$1" = x"." ]; then
179 $ECHO "$base""xonotic.git"
181 $ECHO "$base${1##*/}.git"
188 [ -n "$pushbase" ] || return 0
189 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
190 if [ -n "$repo_t" ]; then
195 $ECHO "$pushbase$repo_t"
199 if [ x"$1" = x"." ]; then
200 $ECHO "$pushbase""xonotic.git"
202 $ECHO "$pushbase${1##*/}.git"
209 repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
210 if [ -n "$repo_t" ]; then
219 $ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
227 # if we have the dir, always keep it
229 msg "Repository $d enabled because it already exists"
233 # if .yes file exists, always keep it
234 if [ -f "$d.yes" ]; then
235 msg "Repository $d enabled by a .yes file"
239 # if we have .no file, skip
240 if [ -f "$d.no" ]; then
241 msg "Repository $d disabled by a .no file, delete $d.no to enable"
244 # if we have matching pk3, skip
245 if [ x"$p" != x"$d" ] && [ -f "$p" ]; then
246 msg "Repository $d disabled by matching .pk3 file, delete $p or create $d.yes to enable"
249 # if "no" flag is set, skip
252 msg "Repository $d disabled by default, create $d.yes to enable"
257 msg "Repository $d enabled by default"
264 if [ "$#" = 0 ]; then
274 release_args="$cmd $*"
275 msg "*** $release_args: start"
276 release_starttime=`date +%s`
279 release_endtime=`date +%s`
280 release_deltatime=$(($release_endtime - $release_starttime))
281 msg "*** $release_args: $release_deltatime seconds"
283 trap release_end EXIT
284 release_tempstarttime=$release_starttime
287 release_endtime=`date +%s` # RELEASE NOW!!!
289 release_deltatime=$(($release_endtime - $release_tempstarttime))
290 msg "**** $release_args: $*: $release_deltatime seconds"
292 release_tempstarttime=$release_endtime
294 release_git_extract_dir()
296 release_src=$1; shift
297 release_dst=$1; shift
298 # try to create a hardlink
299 if ln -f "$release_src/.git/HEAD" "$release_dst/.hardlink-test"; then
300 rm -f "$release_dst/.hardlink-test"
302 verbose cd "$release_src"
303 git ls-files HEAD -- "$@"
305 while IFS= read -r F; do
306 case "$F" in */*) mkdir -p "$release_dst/${F%/*}" ;; esac
307 verbose ln -f "$release_src/$F" "$release_dst/$F"
312 verbose cd "$release_src"
313 verbose git archive --format=tar HEAD -- "$@"
315 verbose cd "$release_dst"
323 fix_upstream_rebase()
325 if [ -z "$r_me" ] || [ -z "$r_other" ]; then
329 # one of the two sides of the merge should be remote upstream, or all is fine
330 r_r=`git symbolic-ref HEAD`
331 r_r=${r_r#refs/heads/}
332 r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
333 r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
334 r_bra=${r_bra#refs/heads/}
335 if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
336 if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
341 r_base=`git merge-base "$r_me" "$r_other"`
343 # no merge-base? upstream did filter-branch
344 if [ -n "$r_base" ]; then
345 # otherwise, check if the two histories are "similar"
346 r_l_me=`git log --pretty="format:%s" "$r_other".."$r_me" | grep -v "^Merge" | sort -u`
347 r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
349 # heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
350 r_lc_me=`$ECHO "$r_l_me" | wc -l`
351 r_lc_other=`$ECHO "$r_l_other" | wc -l`
352 r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
353 r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
355 if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
356 if yesno "Probable upstream rebase detected, automatically fix?" 'git log --oneline --graph --date-order --left-right "$r_other"..."$r_me"'; then
357 git reset --hard "$r_me"
367 fix_upstream_rebase_mergeok()
369 r_me=`git rev-parse --revs-only HEAD^1 2>/dev/null || true`
370 r_other=`git rev-parse --revs-only HEAD^2 2>/dev/null || true`
374 fix_upstream_rebase_mergefail()
376 r_me=`git rev-parse --revs-only HEAD 2>/dev/null || true`
377 r_other=`git rev-parse --revs-only MERGE_HEAD 2>/dev/null || true`
383 if ! [ -f ".git/config" ]; then
384 $ECHO "Not a git repository. Bailing out to not cause damage."
387 verbose git config remote.origin.url "$1"
389 verbose git config remote.origin.pushurl "$2"
391 verbose git config --unset remote.origin.pushurl || true
393 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
394 case ",`repoflags "$d"`," in
396 verbose git config --unset core.autocrlf || true
399 verbose git config core.autocrlf input
402 if [ -z "`git config push.default || true`" ]; then
403 verbose git config push.default current # or is tracking better?
405 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
406 verbose git config filter.mapclean.smudge "cat"
412 case "$RELEASETYPE" in
422 find "$@" -exec touch -d "2001-01-01 01:01:01 +0000" {} \+ # ugly hack to make the pk3 files rsync-friendly
424 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
425 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
426 zip $zipflags -y -@<"$ziplist" "$archive" || true
433 case "$RELEASETYPE" in
444 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
445 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
446 zip $zipflags -y -@<"$ziplist" "$archive" || true
453 zip -0ry "$archive" "$@"
458 # first result is to be ignored, but we use it to check status
459 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
460 { time -p git ls-remote "$1" refs/heads/master; } 2>&1 >/dev/null | head -n 1 | cut -d ' ' -f 2 | tr -d . | sed 's,^0*,,'
461 # unit: clock ticks (depends on what "time" returns
469 if ! { time -p true; } >/dev/null 2>&1; then
470 msg "Cannot do timing in this shell"
488 if t=`mirrorspeed "$m"`; then
490 tt=$(($t$op)) # fudge factor
491 msg "$m -> $t$op = $tt ticks"
492 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
503 if [ -n "$bestin" ]; then
504 msg "Best mirror seems to be $pre$bestin$suf"
514 enter "$d0/$d" verbose
515 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
521 pushurl=`repopushurl "$d"`
522 branch=`repobranch "$d"`
523 if [ -f "$d0/$d/.git/config" ]; then
525 fix_git_config "$url" "$pushurl"
531 # enable the ssh URL for pushing
534 if [ -f ~/.ssh/id_rsa.pub ]; then
536 msg "A key already exists and no new one will be generated. If you"
537 msg "already have done the procedure for getting your key approved, you"
538 msg "can skip the following paragraph and already use the repository."
540 msg "To get access, your key has to be approved first. For that, visit"
541 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
542 msg "the \"Support\" tracker in the \"Repository\" category where you"
543 msg "apply for access and paste the following output into the issue:"
545 msg "`cat ~/.ssh/id_rsa.pub`"
547 msg "Note that you will only have write access to branches that start"
548 msg "with your user name."
549 elif [ -f ~/.ssh/id_dsa.pub ]; then
551 msg "A key already exists and no new one will be generated. If you"
552 msg "already have done the procedure for getting your key approved, you"
553 msg "can skip the following paragraph and already use the repository."
555 msg "To get access, your key has to be approved first. For that, visit"
556 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
557 msg "the \"Support\" tracker in the \"Repository\" category where you"
558 msg "apply for access and paste the following output into the issue:"
560 msg "`cat ~/.ssh/id_dsa.pub`"
562 msg "Note that you will only have write access to branches that start"
563 msg "with your user name."
566 msg "No key has been generated yet. One will be generated now."
567 msg "If other people are using your computer, it is recommended"
568 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
569 msg "when asked for a passphrase."
571 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
573 msg "To get access, your key has to be approved first. For that, visit"
574 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
575 msg "the \"Support\" tracker in the \"Repository\" category where you"
576 msg "apply for access and paste the following output into the issue:"
578 msg "`cat ~/.ssh/id_rsa.pub`"
580 msg "Note that you will only have write access to branches that start"
581 msg "with your user name."
589 if [ x"$1" = x"-N" ]; then
591 elif [ x"$1" = x"-p" ]; then
593 pushbase=ssh://xonotic@git.xonotic.org/
594 elif [ x"$1" = x"-ps" ]; then
596 pushbase=ssh://xonotic@git.xonotic.org/
597 elif [ x"$1" = x"-ph" ]; then
599 pushbase=http://git.xonotic.org/login/xonotic/
600 elif [ x"$1" = x"-s" ]; then
602 base=ssh://xonotic@git.xonotic.org/
603 elif [ x"$1" = x"-g" ]; then
605 base=git://git.xonotic.org/xonotic/
606 elif [ x"$1" = x"-h" ]; then
608 base=http://git.xonotic.org/xonotic/
609 elif [ x"$1" = x"-l" ]; then
617 msg "Invalid location!"
618 msg "Possible locations for the -l option:"
619 msg " nl (Netherlands, run by merlijn)"
620 msg " de (Germany, run by divVerent)"
621 msg " us (United States of America, run by detrate)"
622 msg " best (find automatically)"
623 msg " default (currently nl)"
637 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
644 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
648 base=git://git.xonotic.org/xonotic/
651 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
654 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
655 git config xonotic.all.mirrorselection done
672 *://*.git.xonotic.org/*)
673 location=${base%%.git.xonotic.org/*}
674 location=${location##*://}
682 if [ -n "$location" ]; then
683 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
684 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
686 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
687 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
691 pushurl=`repopushurl .`
692 fix_git_config "$url" "$pushurl"
694 if $allow_pull || $fix_config; then
699 pushurl=`repopushurl "$d"`
700 branch=`repobranch "$d"`
701 if [ -f "$d0/$d/.git/config" ]; then
702 # if we have .no file, skip
703 if [ -f "$d0/$d.no" ]; then
704 msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
708 enter "$d0/$d" verbose
709 r=`git symbolic-ref HEAD`
711 if git config branch.$r.remote >/dev/null 2>&1; then
712 if ! verbose git pull; then
713 fix_upstream_rebase_mergefail || true
714 check_mergeconflict "$d"
715 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
718 fix_upstream_rebase_mergeok || true
723 checkself "$cmd" "$@"
725 verbose git remote prune origin
729 if [ -d "$d0/$d" ]; then
730 if yesno "$d0/$d is in the way, get rid of it and reclone?"; then
731 verbose rm -rf "$d0/$d"
733 echo "Note: $d0/$d will stay broken."
737 verbose git clone "$url" "$d0/$d"
738 enter "$d0/$d" verbose
739 fix_git_config "$url" "$pushurl"
740 if [ "$branch" != "master" ]; then
741 verbose git checkout --track -b "$branch" origin/"$branch"
748 misc/tools/xonotic-map-compiler-autobuild download
752 if [ x"$1" = x"-f" ]; then
758 if [ -z "$branch" ]; then
761 branch=${remote#origin/}
770 if [ -n "$checkoutflags" ]; then
771 set -- -f "$@" # to make checkself work again
775 enter "$d0/$d" verbose
777 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
779 verbose git checkout $checkoutflags "$b"
780 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
782 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
785 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
786 verbose git checkout $checkoutflags "$b"
787 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
788 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
790 $ECHO "WTF? Not even branch $b doesn't exist in $d"
795 checkself "$cmd" "$@"
799 $ECHO "The requested branch was not found in any repository."
807 if [ -z "$branch" ]; then
811 if [ -z "$branch" ]; then
814 r=`git symbolic-ref HEAD`
821 dv=`visible_repo_name "$d"`
822 enter "$d0/$d" verbose
823 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
824 $ECHO "Already having this branch in $dv."
826 if yesno "Branch in $dv?"; then
827 if [ -n "$srcbranch" ]; then
830 b=origin/"`repobranch "$d"`"
831 verbose git fetch origin || true
833 # TODO do this without pushing
834 verbose git checkout -b "$branch" "$b"
835 verbose git config "branch.$branch.remote" "$remote"
836 verbose git config "branch.$branch.merge" "refs/heads/$branch"
846 cd "$d0/$d" # am in a pipe, shouldn't use enter
847 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
852 while read -r d BRANCH REV TEXT; do
853 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
856 if [ x"$REV" = x"->" ]; then
859 BRANCH=${BRANCH#remotes/}
860 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
861 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
862 eval "r=\$branches_repos_$ID"
864 eval "branches_repos_$ID=\$r"
866 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
867 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
868 eval "r=\$branches_repos_$ID"
869 printf "%-60s %s\n" "$BRANCH" "$r"
876 dv=`visible_repo_name "$d"`
877 enter "$d0/$d" verbose
878 r=`git symbolic-ref HEAD`
880 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
881 # we have uncommitted changes
882 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
883 if ! verbose git merge origin/"`repobranch "$d"`"; then
884 check_mergeconflict "$d"
885 exit 1 # this should ALWAYS be fatal
895 dv=`visible_repo_name "$d"`
896 enter "$d0/$d" verbose
897 r=`git symbolic-ref HEAD`
899 diffdata=`git diff --color HEAD`
900 if [ -n "$diffdata" ]; then
901 # we have uncommitted changes
902 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
903 verbose git commit -a
906 rem=`git config "branch.$r.remote" || $ECHO origin`
907 bra=`git config "branch.$r.merge" || $ECHO "$r"`
908 upstream="$rem/${bra#refs/heads/}"
909 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
910 upstream="origin/`repobranch "$d"`"
912 logdata=`git log --color "$upstream".."$r"`
913 if [ -n "$logdata" ]; then
914 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
915 verbose git push "$rem" HEAD
918 if [ x"$submit" = x"-s" ]; then
921 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
935 snowleopardhack=false
936 if [ -z "$CC" ]; then
937 export CC="gcc -DSUPPORTIPV6"
962 case "`$CC -dumpversion`" in
963 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
965 # -march=native is broken < 4.3
966 if $CC -mtune=native -march=native misc/tools/conftest.c -o conftest >/dev/null 2>&1; then
967 export CC="$CC -mtune=native -march=native"
971 if [ -n "$WE_HATE_OUR_USERS" ]; then
972 export CC="$CC -fno-common"
981 if [ -n "$WE_HATE_OUR_USERS" ]; then
982 TARGETS="sv-$debug cl-$debug"
983 elif [ x"`uname`" = x"Darwin" ]; then
986 TARGETS="sv-$debug cl-$debug sdl-$debug"
989 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
991 TARGETS="sv-$debug sdl-$debug"
994 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"
996 TARGETS="sv-$debug cl-$debug sdl-$debug"
998 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
999 # if we give the command make the arg "", it will surely fail (invalid filename),
1000 # so better handle it as an empty client option
1003 elif [ -n "$1" ]; then
1005 TARGETS_SAVE=$TARGETS
1010 TARGETS="$TARGETS sdl-debug"
1013 TARGETS="$TARGETS cl-debug"
1014 if $snowleopardhack; then
1015 export CC="$CC -arch i386"
1019 TARGETS="$TARGETS cl-debug"
1022 TARGETS="$TARGETS sv-debug"
1025 BAD_TARGETS="$BAD_TARGETS $X"
1029 if [ -n "$TARGETS" ]; then # at least a valid client
1031 else # no valid client, let's assume this option is not meant to be a client then
1032 TARGETS=$TARGETS_SAVE
1036 if [ -z "$MAKEFLAGS" ]; then
1037 if [ -f /proc/cpuinfo ]; then
1038 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
1039 if [ $ncpus -gt 1 ]; then
1043 if [ -n "$WE_HATE_OUR_USERS" ]; then
1044 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
1049 if ! verbose $CC misc/tools/conftest.c -o conftest; then
1053 msg "Y U NO COMPILE CODE?"
1059 verbose cd "$d0/d0_blind_id"
1060 if ! $compiled0; then
1061 # compilation of crypto library failed
1062 # use binaries then, if we can...
1064 if [ -n "$WE_HATE_OUR_USERS" ]; then
1065 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
1066 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
1067 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
1073 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
1074 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
1075 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
1076 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
1079 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
1080 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
1081 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
1082 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
1090 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
1091 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
1101 if [ -f Makefile ]; then
1102 verbose make $MAKEFLAGS distclean
1105 if ! [ -f Makefile ]; then
1106 verbose sh autogen.sh
1109 verbose make $MAKEFLAGS
1112 verbose cd "$d0/fteqcc"
1114 verbose make $MAKEFLAGS clean
1116 verbose make $MAKEFLAGS
1118 verbose cd "$d0/data/xonotic-data.pk3dir"
1120 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1122 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1123 # 4 levels up: data, xonotic-data, qcsrc, server
1125 verbose cd "$d0/darkplaces"
1126 if [ x"$BAD_TARGETS" = x" " ]; then
1127 $ECHO "Warning: invalid empty client, default clients will be used."
1130 verbose make $MAKEFLAGS clean
1132 for T in $TARGETS; do
1133 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1135 for T in $BAD_TARGETS; do
1136 $ECHO "Warning: discarded invalid client $T."
1139 verbose "$SELF" update-maps
1142 if [ -n "$WE_HATE_OUR_USERS" ]; then
1144 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1145 elif [ x"`uname`" = x"Darwin" ]; then
1146 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1147 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
1150 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1154 sdl|glx|agl|dedicated)
1163 if ! [ -x "darkplaces/darkplaces$client" ]; then
1164 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1167 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1171 set -- "darkplaces/darkplaces$client" -xonotic "$@"
1173 # if pulseaudio is running: USE IT
1174 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1175 if ps -C pulseaudio >/dev/null; then
1176 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1177 export SDL_AUDIODRIVER=pulse
1184 if [ x"$USE_GDB" = x"yes" ]; then
1185 set -- gdb --args "$@"
1186 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1187 set -- gdb --batch -x savecore.gdb --args "$@"
1188 elif which catchsegv >/dev/null 2>&1; then
1189 set -- catchsegv "$@"
1193 if [ -f xonotic.core ]; then
1194 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1195 gdb "$binary" xonotic.core
1196 #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
1197 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1199 # rm -f xonotic.core.tar.gz
1201 $ECHO "The core dump can be examined later by"
1202 $ECHO " gdb $binary xonotic.core"
1209 if [ x"$1" = x"-k" ]; then
1214 if verbose cd "$d0/$d"; then
1215 if $keep_going; then
1216 verbose "$@" || true
1226 patchdir=`mktemp -d -t save-patches.XXXXXX`
1228 enter "$d0/$d" verbose
1229 git branch -v -v | cut -c 3- | {
1231 while read -r BRANCH REV UPSTREAM TEXT; do
1234 UPSTREAM=${UPSTREAM#\[}
1235 UPSTREAM=${UPSTREAM%\]}
1236 UPSTREAM=${UPSTREAM%:*}
1240 UPSTREAM=origin/"`repobranch "$d"`"
1244 if [ x"$REV" = x"->" ]; then
1247 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1248 $ECHO "$d" > "$patchdir/$i/info.txt"
1249 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1250 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1251 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1254 rm -rf "$patchdir/$i"
1259 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1264 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1265 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1267 for P in "$patchdir"/*/info.txt; do
1272 read -r UPSTREAM <&3
1274 verbose git checkout HEAD^0
1275 verbose git branch -D "$BRANCH"
1276 if [ x"$TRACK" = x"true" ]; then
1277 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1279 verbose git branch -b "$BRANCH" "$UPSTREAM"
1298 report=$report"$*$LF"
1303 report=$report" $*$LF"
1308 o=`"$@" | sed 's/^/ /' || true`
1314 # sorry, fteqcc repo is managed manually
1318 enter "$d0/$d" verbose
1319 base="`repobranch "$d"`"
1321 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1322 case "${ref#refs/remotes/origin/}" in
1335 if [ -n "$branch" ]; then
1336 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1345 l0=`git rev-list "$base".."$ref" | wc -l`
1346 l1=`git rev-list master.."$ref" | wc -l`
1347 if [ $l0 -gt $l1 ]; then
1354 reportecho " Branch $ref:"
1355 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1356 logdata=`git log --color "$realbase".."$ref"`
1357 if [ -z "$logdata" ]; then
1358 reportecho4 "--> not merging, no changes vs master"
1359 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1360 git push origin :"${ref#refs/remotes/origin/}"
1361 reportecho4 "--> branch deleted"
1364 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1365 if [ -z "$diffdata" ]; then
1366 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1367 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1368 git push origin :"${ref#refs/remotes/origin/}"
1369 reportecho4 "--> branch deleted"
1371 elif $only_delete; then
1372 reportecho4 "--> skipped in delete-only run"
1373 elif [ -z "$branch" ] && [ -n "$note" ]; then
1374 reportdo4 $ECHO "$note"
1375 reportecho4 "--> not merging, already had this one rejected before"
1376 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1377 git checkout "$realbase"
1378 org=`git rev-parse HEAD`
1379 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1380 git reset --hard "$org"
1381 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1383 reportecho4 "--> merge failed"
1384 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1385 git reset --hard "$org"
1386 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1388 reportecho4 "--> compile failed"
1389 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1390 git reset --hard "$org"
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 "--> test failed, branch deleted"
1396 elif [ -n "$note" ]; then
1397 reportdo4 $ECHO "$note"
1398 reportecho4 "--> test failed"
1400 reportecho4 "--> test failed, postponed"
1403 # apply crlf, or other cleanup filters (non-behavioural changes)
1405 find . -type f -exec touch {} \;
1406 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1409 case ",`repoflags "$d"`," in
1411 # we do quite a mess here... luckily we know $org
1412 git fetch # svn needs to be current
1413 git rebase -i --onto origin/master "$org"
1414 git svn dcommit --add-author-from
1415 git reset --hard "$org"
1418 git push origin HEAD
1421 reportecho4 "--> MERGED"
1422 if yesno "Delete original branch \"$ref\"?"; then
1423 git push origin :"${ref#refs/remotes/origin/}"
1424 reportecho4 "--> branch deleted"
1428 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1429 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1430 if [ x"$note" = x"del" ]; then
1431 git push origin :"${ref#refs/remotes/origin/}"
1432 reportecho4 "--> branch deleted"
1433 elif [ -n "$note" ]; then
1434 reportdo4 $ECHO "$note"
1435 reportecho4 "--> rejected"
1437 reportecho4 "--> postponed"
1446 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1458 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1459 # ./all clean --reclone
1462 if [ x"$X" = x"--reclone" ]; then
1469 elif [ x"$X" = x"-f" ]; then
1471 elif [ x"$X" = x"-u" ]; then
1473 elif [ x"$X" = x"-U" ]; then
1476 elif [ x"$X" = x"-fu" ]; then
1479 elif [ x"$X" = x"-fU" ]; then
1483 elif [ x"$X" = x"-m" ]; then
1485 elif [ x"$X" = x"-r" ]; then
1487 elif [ x"$X" = x"-D" ]; then
1489 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1492 msg " ,--'-\\P/\`\\ FFFFFFF"
1493 msg " __/_ B/,-.\\ FFFFFFF"
1494 msg " / _\\ (// O\\\\ FFFFFF"
1495 msg "| (O \`) _\\._ _)\\ FFFUU"
1496 msg "| |___/.^d0~~\"\\ \\ UUUU"
1497 msg "| |\`~' \\ | UUUU"
1498 msg "| | __,C>|| UUUU"
1499 msg "\\ /_ ,-/,-' | UUUU"
1500 msg " \\\\_ \\_>~' / UUUU-"
1503 msg "Unknown arg: $X"
1512 if $gotoupstream; then
1514 msg "Must also use -f (delete local changes) when using -u"
1517 if $gotomaster; then
1518 if $fetchupstream; then
1519 verbose git fetch origin
1520 verbose git remote prune origin
1522 verbose git checkout -f "`repobranch "$d"`"
1523 verbose git reset --hard origin/"`repobranch "$d"`"
1525 r=`git symbolic-ref HEAD`
1527 rem=`git config "branch.$r.remote" || $ECHO origin`
1528 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1529 upstream="$rem/${bra#refs/heads/}"
1530 if $fetchupstream; then
1531 verbose git fetch "$rem"
1532 verbose git remote prune "$rem"
1534 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1535 upstream="origin/`repobranch "$d"`"
1537 verbose git reset --hard "$upstream"
1539 elif $gotomaster; then
1541 verbose git checkout -f "`repobranch "$d"`"
1542 verbose git reset --hard
1544 verbose git checkout "`repobranch "$d"`"
1547 verbose git reset --hard
1549 if $rmuntracked; then
1552 verbose git clean -df || true
1555 verbose git clean -xdf || true
1559 if $killbranches; then
1560 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1561 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1562 verbose git branch -D "${B#refs/heads/}"
1565 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1566 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1568 checkself "$cmd" "$@"
1572 # release building goes here
1574 #"$SELF" each git clean -fxd
1575 case "$RELEASETYPE" in
1577 $ECHO >&2 -n "$ESC[2J$ESC[H"
1584 msg " +---------------------------------------------------------.---+"
1586 msg " +---------------------------------------------------------^---+"
1588 msg " | / \ This is the official release build system. |"
1589 msg " | | | If you are not a member of the Xonotic Core Team, |"
1590 msg " | | STOP | you are not supposed to use this script and should |"
1591 msg " | | | instead use ./all compile to compile the engine |"
1592 msg " | \____/ and game code. |"
1594 msg " | [ I understand ] |"
1595 msg " +-------------------------------------------------------------+"
1597 # A LOT of build infrastructure is required:
1600 # - .ssh/config must be configured so the following
1601 # host names are reachable and have a compile
1602 # infrastructure set up:
1603 # - xonotic-build-linux32 (with gcc on x86)
1604 # - xonotic-build-linux64 (with gcc on x86_64)
1605 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1606 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1607 # and x86_64-w64-mingw32-g++)
1608 # - xonotic-build-osx (with Xcode and SDL.framework)
1609 # - AMD Compressonator installed in WINE
1610 # - ResEdit installed in WINE
1611 # - a lot of other requirements you will figure out
1612 # while reading the error messages
1613 # - environment variable RELEASETYPE set
1614 # - optionally, environment variable RELEASEDATE set
1619 msg "Building a FINISHED RELEASE"
1622 msg "Building a $RELEASETYPE"
1625 verbose rm -rf Xonotic Xonotic*.zip
1626 verbose mkdir -p Xonotic
1627 if [ -n "$RELEASEDATE" ]; then
1628 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1630 verbose date +%Y%m%d > Xonotic/stamp.txt
1632 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
1635 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1636 verbose rm -rf misc/builddeps
1637 verbose mv misc/buildfiles/win32 bin32 || true
1638 verbose mv bin32/SDL.dll . || true
1639 verbose mv misc/buildfiles/win64 bin64 || true
1640 verbose mv misc/buildfiles/osx/* . || true
1641 verbose rm -rf misc/buildfiles
1642 verbose rm -rf misc/pki
1644 release_git_extract_dir "darkplaces" "Xonotic/source/darkplaces" .
1645 release_git_extract_dir "fteqcc" "Xonotic/source/fteqcc" .
1646 release_git_extract_dir "data/xonotic-data.pk3dir" "Xonotic/source" qcsrc Makefile
1647 release_git_extract_dir "d0_blind_id" "Xonotic/source/d0_blind_id" .
1649 verbose cd Xonotic/source/d0_blind_id
1650 verbose sh autogen.sh
1652 rm -f Xonotic/key_15.d0pk
1654 verbose cd Xonotic/mapping
1655 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110701.tar.bz2
1656 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110701-win32-7z.exe
1657 for X in *-7z.exe; do
1661 # TODO possibly include other tools?
1664 release-compile-run)
1673 if [ -n "$targetfiles" ]; then
1674 case " $HOSTS_THAT_ARE_DISABLED " in
1679 case " $HOSTS_THAT_ARE_MYSELF " in
1681 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1682 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1683 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1684 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1685 for f in $targetfiles; do
1686 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1690 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1691 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1692 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"
1693 for f in $targetfiles; do
1694 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1698 # now rebrand the binaries...
1699 for f in $targetfiles; do
1700 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1702 Xonotic/xonotic*.exe)
1703 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1712 fteqcc_maketargets=$3
1714 darkplaces_maketargets=$5
1716 host=xonotic-build-$suffix
1717 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1718 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1720 release-engine-win32)
1721 verbose "$SELF" release-compile win32 \
1722 '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' \
1723 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1725 verbose "$SELF" release-compile win32 \
1726 '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' \
1728 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1730 release-engine-win64)
1731 verbose "$SELF" release-compile win64 \
1732 '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' \
1733 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1734 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1735 verbose "$SELF" release-compile win64 \
1736 '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' \
1738 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1741 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1742 verbose "$SELF" release-compile osx \
1743 '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"' \
1744 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1745 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1747 release-engine-linux32)
1748 verbose "$SELF" release-compile linux32 \
1749 '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' \
1750 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1751 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1753 release-engine-linux64)
1754 verbose "$SELF" release-compile linux64 \
1755 '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' \
1756 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1757 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1760 verbose "$SELF" release-engine-linux32 &
1761 verbose "$SELF" release-engine-linux64 &
1762 verbose "$SELF" release-engine-win32 &
1763 verbose "$SELF" release-engine-win64 &
1764 verbose "$SELF" release-engine-osx &
1773 verbose "$SELF" update-maps
1776 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1777 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1779 release-buildpk3-transform-raw)
1782 release-buildpk3-transform-normal)
1785 # texture: convert to jpeg and dds
1786 verbose export do_jpeg=true
1787 verbose export jpeg_qual_rgb=97
1788 verbose export jpeg_qual_a=99
1789 verbose export do_dds=false
1790 verbose export do_ogg=false
1791 verbose export del_src=true
1792 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1794 release-buildpk3-transform-normaldds)
1797 # texture: convert to jpeg and dds
1798 # music: reduce bitrate
1799 verbose export do_jpeg=false
1800 verbose export do_jpeg_if_not_dds=true
1801 verbose export jpeg_qual_rgb=95
1802 verbose export jpeg_qual_a=99
1803 verbose export do_dds=true
1804 verbose export dds_flags=
1805 verbose export do_ogg=true
1806 verbose export del_src=true
1807 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1809 release-buildpk3-transform-low)
1812 # texture: convert to jpeg and dds
1813 # music: reduce bitrate
1814 verbose export do_jpeg=true
1815 verbose export jpeg_qual_rgb=80
1816 verbose export jpeg_qual_a=97
1817 verbose export do_dds=false
1818 verbose export do_ogg=true
1819 verbose export ogg_qual=1
1820 verbose export del_src=true
1821 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1823 release-buildpk3-transform-lowdds)
1826 # texture: convert to jpeg and dds
1827 # music: reduce bitrate
1828 verbose export do_jpeg=false
1829 verbose export do_jpeg_if_not_dds=true
1830 verbose export jpeg_qual_rgb=80
1831 verbose export jpeg_qual_a=99
1832 verbose export do_dds=true
1833 verbose export dds_flags=
1834 verbose export do_ogg=true
1835 verbose export ogg_qual=1
1836 verbose export del_src=true
1837 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1851 verbose rm -rf Xonotic/temp
1852 release_timereport "deleted temp directory"
1853 verbose mkdir -p Xonotic/temp
1854 release_git_extract_dir "$src" "Xonotic/temp" .
1855 release_timereport "extracted data"
1856 verbose cd Xonotic/temp
1857 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1858 verbose cp ../source/progs.dat .
1859 verbose cp ../source/csprogs.dat .
1860 verbose cp ../source/menu.dat .
1861 verbose rm -rf qcsrc
1862 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1863 major=$(($gv / 10000))
1864 minor=$((($gv / 100) - ($major * 100)))
1865 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1866 versionstr="$major.$minor.$patch"
1867 case "$RELEASETYPE" in
1871 versionstr="$versionstr$RELEASETYPE"
1874 if [ $gv -lt 900 ]; then
1875 # pre-1.0: compatible with any other pre-1.0
1877 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1878 s/^gameversion_min [0-9]*/gameversion_min 0/;
1879 s/^gameversion_max [0-9]*/gameversion_max 9999/;
1880 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1884 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1885 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1886 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1887 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1889 mv defaultXonotic.cfg.new defaultXonotic.cfg
1890 case "$RELEASETYPE" in
1892 echo "" >> defaultXonotic.cfg
1893 echo "// nicer menu" >> defaultXonotic.cfg
1894 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1898 verbose cd gfx/menu/luminos
1899 verbose rm -f background_l2.tga background_ingame_l2.tga
1900 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1901 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1902 verbose rm background_l2.svg
1905 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1906 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1907 if [ -f "$X" ]; then
1909 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1913 verbose export git_src_repo="$d0/$src" # skip hash-object
1914 release_timereport "processed data"
1915 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1916 release_timereport "transformed data"
1917 verbose mkzipr "../../$dst" *
1918 release_timereport "zipped data"
1920 verbose rm -rf Xonotic/temp
1921 release_timereport "deleted temp directory again"
1924 stamp=`cat Xonotic/stamp.txt`
1930 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1936 while [ "$#" -gt 1 ]; do
1937 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1943 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1944 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1945 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1946 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
1947 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1948 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
1950 release-pack-needsx11)
1953 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1956 verbose "$SELF" release-pack
1961 stamp=`cat Xonotic/stamp.txt`
1962 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1963 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1964 # let's pass crypto import laws of some nasty countries
1965 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
1966 if [ -n "$crypto_libs" ]; then
1967 verbose mkzip Xonotic-$stamp-crypto.zip \
1969 Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
1972 # build the archives
1973 verbose mkzip Xonotic-$stamp-engine.zip \
1975 Xonotic/bin32/*.dll \
1976 Xonotic/bin64/*.dll \
1979 Xonotic/xonotic.exe \
1980 Xonotic/source/darkplaces/ \
1981 Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
1982 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1983 verbose mkzip Xonotic-$stamp-common.zip \
1984 Xonotic/source/fteqcc/ \
1985 Xonotic/source/qcsrc/ \
1990 Xonotic/key_0.d0pk \
1991 Xonotic/data/font-nimbussansl-$stamp.pk3 \
1992 Xonotic/data/font-xolonium-$stamp.pk3
1993 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1994 verbose mkzip0 Xonotic-$stamp.zip \
1995 Xonotic/data/xonotic-$stamp-data.pk3 \
1996 Xonotic/data/xonotic-$stamp-maps.pk3 \
1997 Xonotic/data/xonotic-$stamp-music.pk3 \
1998 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1999 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
2000 verbose mkzip0 Xonotic-$stamp-low.zip \
2001 Xonotic/data/xonotic-$stamp-data-low.pk3 \
2002 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
2003 Xonotic/data/xonotic-$stamp-music-low.pk3
2004 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
2005 verbose mkzip Xonotic-$stamp-high.zip \
2007 verbose mkzip0 Xonotic-$stamp-high.zip \
2008 Xonotic/data/xonotic-$stamp-data-high.pk3 \
2009 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
2010 Xonotic/data/xonotic-$stamp-music.pk3 \
2011 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
2012 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
2014 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
2015 Xonotic/data/xonotic-$stamp-maps-low.pk3
2018 verbose "$SELF" release-prepare
2019 verbose "$SELF" release-maps
2020 verbose "$SELF" release-engine
2021 verbose "$SELF" release-qc
2022 verbose "$SELF" release-pack-needsx11
2023 verbose "$SELF" release-zip
2028 $ECHO " $SELF admin-merge [<branch>]"
2029 $ECHO " $SELF branch <branch>"
2030 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
2031 $ECHO " $SELF branches"
2032 $ECHO " $SELF checkout|switch <branch>"
2033 $ECHO " $SELF checkout|switch <remote>/<branch>"
2034 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
2035 $ECHO " $SELF clean --reclone"
2036 $ECHO " $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
2037 $ECHO " $SELF each|foreach [-k] command..."
2038 $ECHO " $SELF fix_upstream_rebase"
2039 $ECHO " $SELF keygen"
2040 $ECHO " $SELF merge"
2041 $ECHO " $SELF push|commit [-s]"
2042 $ECHO " $SELF restore-patches"
2043 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
2044 $ECHO " $SELF save-patches"
2045 $ECHO " $SELF update-maps"
2046 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"