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 verbose git config remote.origin.url "$1"
385 verbose git config remote.origin.pushurl "$2"
387 verbose git config --unset remote.origin.pushurl || true
389 verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
390 case ",`repoflags "$d"`," in
392 verbose git config --unset core.autocrlf || true
395 verbose git config core.autocrlf input
398 if [ -z "`git config push.default || true`" ]; then
399 verbose git config push.default current # or is tracking better?
401 verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
402 verbose git config filter.mapclean.smudge "cat"
408 case "$RELEASETYPE" in
418 find "$@" -exec touch -d "2001-01-01 01:01:01 +0000" {} \+ # ugly hack to make the pk3 files rsync-friendly
420 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
421 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
422 zip $zipflags -y -@<"$ziplist" "$archive" || true
429 case "$RELEASETYPE" in
440 find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
441 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
442 zip $zipflags -y -@<"$ziplist" "$archive" || true
449 zip -0ry "$archive" "$@"
454 # first result is to be ignored, but we use it to check status
455 git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
456 { 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*,,'
457 # unit: clock ticks (depends on what "time" returns
465 if ! { time -p true; } >/dev/null 2>&1; then
466 msg "Cannot do timing in this shell"
484 if t=`mirrorspeed "$m"`; then
486 tt=$(($t$op)) # fudge factor
487 msg "$m -> $t$op = $tt ticks"
488 if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
499 if [ -n "$bestin" ]; then
500 msg "Best mirror seems to be $pre$bestin$suf"
510 enter "$d0/$d" verbose
511 verbose fix_upstream_rebase_mergefail && verbose fix_upstream_rebase_mergeok
517 pushurl=`repopushurl "$d"`
518 branch=`repobranch "$d"`
519 if [ -d "$d0/$d" ]; then
521 fix_git_config "$url" "$pushurl"
527 # enable the ssh URL for pushing
530 if [ -f ~/.ssh/id_rsa.pub ]; then
532 msg "A key already exists and no new one will be generated. If you"
533 msg "already have done the procedure for getting your key approved, you"
534 msg "can skip the following paragraph and already use the repository."
536 msg "To get access, your key has to be approved first. For that, visit"
537 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
538 msg "the \"Support\" tracker in the \"Repository\" category where you"
539 msg "apply for access and paste the following output into the issue:"
541 msg "`cat ~/.ssh/id_rsa.pub`"
543 msg "Note that you will only have write access to branches that start"
544 msg "with your user name."
545 elif [ -f ~/.ssh/id_dsa.pub ]; then
547 msg "A key already exists and no new one will be generated. If you"
548 msg "already have done the procedure for getting your key approved, you"
549 msg "can skip the following paragraph and already use the repository."
551 msg "To get access, your key has to be approved first. For that, visit"
552 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
553 msg "the \"Support\" tracker in the \"Repository\" category where you"
554 msg "apply for access and paste the following output into the issue:"
556 msg "`cat ~/.ssh/id_dsa.pub`"
558 msg "Note that you will only have write access to branches that start"
559 msg "with your user name."
562 msg "No key has been generated yet. One will be generated now."
563 msg "If other people are using your computer, it is recommended"
564 msg "to specify a passphrase. Otherwise you can simply hit ENTER"
565 msg "when asked for a passphrase."
567 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
569 msg "To get access, your key has to be approved first. For that, visit"
570 msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
571 msg "the \"Support\" tracker in the \"Repository\" category where you"
572 msg "apply for access and paste the following output into the issue:"
574 msg "`cat ~/.ssh/id_rsa.pub`"
576 msg "Note that you will only have write access to branches that start"
577 msg "with your user name."
585 if [ x"$1" = x"-N" ]; then
587 elif [ x"$1" = x"-p" ]; then
589 pushbase=ssh://xonotic@git.xonotic.org/
590 elif [ x"$1" = x"-ps" ]; then
592 pushbase=ssh://xonotic@git.xonotic.org/
593 elif [ x"$1" = x"-ph" ]; then
595 pushbase=http://git.xonotic.org/login/xonotic/
596 elif [ x"$1" = x"-s" ]; then
598 base=ssh://xonotic@git.xonotic.org/
599 elif [ x"$1" = x"-g" ]; then
601 base=git://git.xonotic.org/xonotic/
602 elif [ x"$1" = x"-h" ]; then
604 base=http://git.xonotic.org/xonotic/
605 elif [ x"$1" = x"-l" ]; then
613 msg "Invalid location!"
614 msg "Possible locations for the -l option:"
615 msg " nl (Netherlands, run by merlijn)"
616 msg " de (Germany, run by divVerent)"
617 msg " us (United States of America, run by detrate)"
618 msg " best (find automatically)"
619 msg " default (currently nl)"
633 if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
640 # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
644 base=git://git.xonotic.org/xonotic/
647 newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
650 if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
651 git config xonotic.all.mirrorselection done
668 *://*.git.xonotic.org/*)
669 location=${base%%.git.xonotic.org/*}
670 location=${location##*://}
678 if [ -n "$location" ]; then
679 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
680 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
682 base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
683 pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
687 pushurl=`repopushurl .`
688 fix_git_config "$url" "$pushurl"
690 if $allow_pull || $fix_config; then
695 pushurl=`repopushurl "$d"`
696 branch=`repobranch "$d"`
697 if [ -d "$d0/$d" ]; then
698 # if we have .no file, skip
699 if [ -f "$d0/$d.no" ]; then
700 msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
704 enter "$d0/$d" verbose
705 r=`git symbolic-ref HEAD`
707 if git config branch.$r.remote >/dev/null 2>&1; then
708 if ! verbose git pull; then
709 fix_upstream_rebase_mergefail || true
710 check_mergeconflict "$d"
711 $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
714 fix_upstream_rebase_mergeok || true
719 checkself "$cmd" "$@"
721 verbose git remote prune origin
725 verbose git clone "$url" "$d0/$d"
726 enter "$d0/$d" verbose
727 fix_git_config "$url" "$pushurl"
728 if [ "$branch" != "master" ]; then
729 verbose git checkout --track -b "$branch" origin/"$branch"
736 misc/tools/xonotic-map-compiler-autobuild download
740 if [ x"$1" = x"-f" ]; then
746 if [ -z "$branch" ]; then
749 branch=${remote#origin/}
758 if [ -n "$checkoutflags" ]; then
759 set -- -f "$@" # to make checkself work again
763 enter "$d0/$d" verbose
765 if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
767 verbose git checkout $checkoutflags "$b"
768 elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
770 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
773 if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
775 verbose git checkout $checkoutflags "$b"
776 elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
778 verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
780 $ECHO "WTF? Not even branch $b doesn't exist in $d"
785 checkself "$cmd" "$@"
789 $ECHO "The requested branch was not found in any repository."
797 if [ -z "$branch" ]; then
801 if [ -z "$branch" ]; then
804 r=`git symbolic-ref HEAD`
811 dv=`visible_repo_name "$d"`
812 enter "$d0/$d" verbose
813 if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
814 $ECHO "Already having this branch in $dv."
816 if yesno "Branch in $dv?"; then
817 if [ -n "$srcbranch" ]; then
820 b=origin/"`repobranch "$d"`"
821 verbose git fetch origin || true
823 # TODO do this without pushing
824 verbose git checkout -b "$branch" "$b"
825 verbose git config "branch.$branch.remote" "$remote"
826 verbose git config "branch.$branch.merge" "refs/heads/$branch"
836 cd "$d0/$d" # am in a pipe, shouldn't use enter
837 git branch -r -v -v | cut -c 3- | sed "s/^(no branch)/(no_branch)/" | sed "s,^,$d ,"
842 while read -r d BRANCH REV TEXT; do
843 if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
846 if [ x"$REV" = x"->" ]; then
849 BRANCH=${BRANCH#remotes/}
850 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
851 branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
852 eval "r=\$branches_repos_$ID"
854 eval "branches_repos_$ID=\$r"
856 $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
857 ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
858 eval "r=\$branches_repos_$ID"
859 printf "%-60s %s\n" "$BRANCH" "$r"
866 dv=`visible_repo_name "$d"`
867 enter "$d0/$d" verbose
868 r=`git symbolic-ref HEAD`
870 if git log HEAD..origin/"`repobranch "$d"`" | grep .; then
871 # we have uncommitted changes
872 if yesno "Could merge from \"`repobranch "$d"`\" into \"$r\" in $dv. Do it?"; then
873 if ! verbose git merge origin/"`repobranch "$d"`"; then
874 check_mergeconflict "$d"
875 exit 1 # this should ALWAYS be fatal
885 dv=`visible_repo_name "$d"`
886 enter "$d0/$d" verbose
887 r=`git symbolic-ref HEAD`
889 diffdata=`git diff --color HEAD`
890 if [ -n "$diffdata" ]; then
891 # we have uncommitted changes
892 if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
893 verbose git commit -a
896 rem=`git config "branch.$r.remote" || $ECHO origin`
897 bra=`git config "branch.$r.merge" || $ECHO "$r"`
898 upstream="$rem/${bra#refs/heads/}"
899 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
900 upstream="origin/`repobranch "$d"`"
902 logdata=`git log --color "$upstream".."$r"`
903 if [ -n "$logdata" ]; then
904 if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
905 verbose git push "$rem" HEAD
908 if [ x"$submit" = x"-s" ]; then
911 verbose git push "$rem" HEAD:"${bra%%/*}/finished/${bra#*/}"
925 snowleopardhack=false
926 if [ -z "$CC" ]; then
927 export CC="gcc -DSUPPORTIPV6"
952 case "`$CC -dumpversion`" in
953 [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
955 # -march=native is broken < 4.3
956 export CC="$CC -mtune=native -march=native"
959 if [ -n "$WE_HATE_OUR_USERS" ]; then
960 export CC="$CC -fno-common"
969 if [ -n "$WE_HATE_OUR_USERS" ]; then
970 TARGETS="sv-$debug cl-$debug"
971 elif [ x"`uname`" = x"Darwin" ]; then
974 TARGETS="sv-$debug cl-$debug sdl-$debug"
977 # AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
979 TARGETS="sv-$debug sdl-$debug"
982 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"
984 TARGETS="sv-$debug cl-$debug sdl-$debug"
986 if [ $# -gt 0 ] && [ x"$1" = x"" ]; then
987 # if we give the command make the arg "", it will surely fail (invalid filename),
988 # so better handle it as an empty client option
991 elif [ -n "$1" ]; then
993 TARGETS_SAVE=$TARGETS
998 TARGETS="$TARGETS sdl-debug"
1001 TARGETS="$TARGETS cl-debug"
1002 if $snowleopardhack; then
1003 export CC="$CC -arch i386"
1007 TARGETS="$TARGETS cl-debug"
1010 TARGETS="$TARGETS sv-debug"
1013 BAD_TARGETS="$BAD_TARGETS $X"
1017 if [ -n "$TARGETS" ]; then # at least a valid client
1019 else # no valid client, let's assume this option is not meant to be a client then
1020 TARGETS=$TARGETS_SAVE
1024 if [ -z "$MAKEFLAGS" ]; then
1025 if [ -f /proc/cpuinfo ]; then
1026 ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
1027 if [ $ncpus -gt 1 ]; then
1031 if [ -n "$WE_HATE_OUR_USERS" ]; then
1032 MAKEFLAGS="$MAKEFLAGS DP_MAKE_TARGET=mingw LIB_JPEG= CFLAGS_LIBJPEG="
1036 verbose cd "$d0/d0_blind_id"
1037 if ! $compiled0; then
1038 # compilation of crypto library failed
1039 # use binaries then, if we can...
1041 if [ -n "$WE_HATE_OUR_USERS" ]; then
1042 verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
1043 verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
1044 verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
1050 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
1051 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
1052 #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
1053 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
1056 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
1057 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
1058 #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
1059 MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
1067 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
1068 verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
1078 if [ -f Makefile ]; then
1079 verbose make $MAKEFLAGS distclean
1082 if ! [ -f Makefile ]; then
1083 verbose sh autogen.sh
1086 verbose make $MAKEFLAGS
1089 verbose cd "$d0/fteqcc"
1091 verbose make $MAKEFLAGS clean
1093 verbose make $MAKEFLAGS
1095 verbose cd "$d0/data/xonotic-data.pk3dir"
1097 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
1099 verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
1100 # 4 levels up: data, xonotic-data, qcsrc, server
1102 verbose cd "$d0/darkplaces"
1103 if [ x"$BAD_TARGETS" = x" " ]; then
1104 $ECHO "Warning: invalid empty client, default clients will be used."
1107 verbose make $MAKEFLAGS clean
1109 for T in $TARGETS; do
1110 verbose make $MAKEFLAGS STRIP=: "$@" "$T"
1112 for T in $BAD_TARGETS; do
1113 $ECHO "Warning: discarded invalid client $T."
1116 verbose "$SELF" update-maps
1119 if [ -n "$WE_HATE_OUR_USERS" ]; then
1121 export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
1122 elif [ x"`uname`" = x"Darwin" ]; then
1123 export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
1124 export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
1127 export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
1131 sdl|glx|agl|dedicated)
1140 if ! [ -x "darkplaces/darkplaces$client" ]; then
1141 if [ -x "darkplaces/darkplaces$client.exe" ]; then
1144 $ECHO "Client darkplaces/darkplaces$client not found, aborting"
1148 set -- "darkplaces/darkplaces$client" -xonotic "$@"
1150 # if pulseaudio is running: USE IT
1151 if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
1152 if ps -C pulseaudio >/dev/null; then
1153 if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
1154 export SDL_AUDIODRIVER=pulse
1161 if [ x"$USE_GDB" = x"yes" ]; then
1162 set -- gdb --args "$@"
1163 elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
1164 set -- gdb --batch -x savecore.gdb --args "$@"
1165 elif which catchsegv >/dev/null 2>&1; then
1166 set -- catchsegv "$@"
1170 if [ -f xonotic.core ]; then
1171 if yesno "The program has CRASHED. Do you want to examine the core dump?"; then
1172 gdb "$binary" xonotic.core
1173 #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
1174 # tar cvzf xonotic.core.tar.gz xonotic.core darkplaces/*.c darkplaces/*.h
1176 # rm -f xonotic.core.tar.gz
1178 $ECHO "The core dump can be examined later by"
1179 $ECHO " gdb $binary xonotic.core"
1186 if [ x"$1" = x"-k" ]; then
1191 if verbose cd "$d0/$d"; then
1192 if $keep_going; then
1193 verbose "$@" || true
1203 patchdir=`mktemp -d -t save-patches.XXXXXX`
1205 enter "$d0/$d" verbose
1206 git branch -v -v | cut -c 3- | {
1208 while read -r BRANCH REV UPSTREAM TEXT; do
1211 UPSTREAM=${UPSTREAM#\[}
1212 UPSTREAM=${UPSTREAM%\]}
1213 UPSTREAM=${UPSTREAM%:*}
1217 UPSTREAM=origin/"`repobranch "$d"`"
1221 if [ x"$REV" = x"->" ]; then
1224 if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
1225 $ECHO "$d" > "$patchdir/$i/info.txt"
1226 $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
1227 $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
1228 $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
1231 rm -rf "$patchdir/$i"
1236 ( cd "$patchdir" && tar cvzf - . ) > "$outfile"
1241 patchdir=`mktemp -d -t restore-patches.XXXXXX`
1242 ( cd "$patchdir" && tar xvzf - ) < "$infile"
1244 for P in "$patchdir"/*/info.txt; do
1249 read -r UPSTREAM <&3
1251 verbose git checkout HEAD^0
1252 verbose git branch -D "$BRANCH"
1253 if [ x"$TRACK" = x"true" ]; then
1254 verbose git checkout --track -b "$BRANCH" "$UPSTREAM"
1256 verbose git branch -b "$BRANCH" "$UPSTREAM"
1275 report=$report"$*$LF"
1280 report=$report" $*$LF"
1285 o=`"$@" | sed 's/^/ /' || true`
1291 # sorry, fteqcc repo is managed manually
1295 enter "$d0/$d" verbose
1296 base="`repobranch "$d"`"
1298 for ref in `git for-each-ref --format='%(refname)' refs/remotes/origin/`; do
1299 case "${ref#refs/remotes/origin/}" in
1312 if [ -n "$branch" ]; then
1313 if [ x"$branch" != x"${ref#refs/remotes/origin/}" ]; then
1322 l0=`git rev-list "$base".."$ref" | wc -l`
1323 l1=`git rev-list master.."$ref" | wc -l`
1324 if [ $l0 -gt $l1 ]; then
1331 reportecho " Branch $ref:"
1332 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1333 logdata=`git log --color "$realbase".."$ref"`
1334 if [ -z "$logdata" ]; then
1335 reportecho4 "--> not merging, no changes vs master"
1336 if yesno "Branch \"$ref\" probably should get deleted. Do it?" ''; then
1337 git push origin :"${ref#refs/remotes/origin/}"
1338 reportecho4 "--> branch deleted"
1341 diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
1342 if [ -z "$diffdata" ]; then
1343 reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
1344 if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
1345 git push origin :"${ref#refs/remotes/origin/}"
1346 reportecho4 "--> branch deleted"
1348 elif $only_delete; then
1349 reportecho4 "--> skipped in delete-only run"
1350 elif [ -z "$branch" ] && [ -n "$note" ]; then
1351 reportdo4 $ECHO "$note"
1352 reportecho4 "--> not merging, already had this one rejected before"
1353 elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
1354 git checkout "$realbase"
1355 org=`git rev-parse HEAD`
1356 if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
1357 git reset --hard "$org"
1358 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
1360 reportecho4 "--> merge failed"
1361 elif ! "$SELF" compile 2>&1 | tee "$t"; then
1362 git reset --hard "$org"
1363 GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
1365 reportecho4 "--> compile failed"
1366 elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
1367 git reset --hard "$org"
1368 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1369 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1370 if [ x"$note" = x"del" ]; then
1371 git push origin :"${ref#refs/remotes/origin/}"
1372 reportecho4 "--> test failed, branch deleted"
1373 elif [ -n "$note" ]; then
1374 reportdo4 $ECHO "$note"
1375 reportecho4 "--> test failed"
1377 reportecho4 "--> test failed, postponed"
1380 # apply crlf, or other cleanup filters (non-behavioural changes)
1382 find . -type f -exec touch {} \;
1383 git commit -a --amend -C HEAD || true # don't fail if nothing to commit
1386 case ",`repoflags "$d"`," in
1388 # we do quite a mess here... luckily we know $org
1389 git fetch # svn needs to be current
1390 git rebase -i --onto origin/master "$org"
1391 git svn dcommit --add-author-from
1392 git reset --hard "$org"
1395 git push origin HEAD
1398 reportecho4 "--> MERGED"
1399 if yesno "Delete original branch \"$ref\"?"; then
1400 git push origin :"${ref#refs/remotes/origin/}"
1401 reportecho4 "--> branch deleted"
1405 GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
1406 note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
1407 if [ x"$note" = x"del" ]; then
1408 git push origin :"${ref#refs/remotes/origin/}"
1409 reportecho4 "--> branch deleted"
1410 elif [ -n "$note" ]; then
1411 reportdo4 $ECHO "$note"
1412 reportecho4 "--> rejected"
1414 reportecho4 "--> postponed"
1423 $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
1435 # ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
1436 # ./all clean --reclone
1439 if [ x"$X" = x"--reclone" ]; then
1446 elif [ x"$X" = x"-f" ]; then
1448 elif [ x"$X" = x"-u" ]; then
1450 elif [ x"$X" = x"-U" ]; then
1453 elif [ x"$X" = x"-fu" ]; then
1456 elif [ x"$X" = x"-fU" ]; then
1460 elif [ x"$X" = x"-m" ]; then
1462 elif [ x"$X" = x"-r" ]; then
1464 elif [ x"$X" = x"-D" ]; then
1466 elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
1469 msg " ,--'-\\P/\`\\ FFFFFFF"
1470 msg " __/_ B/,-.\\ FFFFFFF"
1471 msg " / _\\ (// O\\\\ FFFFFF"
1472 msg "| (O \`) _\\._ _)\\ FFFUU"
1473 msg "| |___/.^d0~~\"\\ \\ UUUU"
1474 msg "| |\`~' \\ | UUUU"
1475 msg "| | __,C>|| UUUU"
1476 msg "\\ /_ ,-/,-' | UUUU"
1477 msg " \\\\_ \\_>~' / UUUU-"
1480 msg "Unknown arg: $X"
1489 if $gotoupstream; then
1491 msg "Must also use -f (delete local changes) when using -u"
1494 if $gotomaster; then
1495 if $fetchupstream; then
1496 verbose git fetch origin
1497 verbose git remote prune origin
1499 verbose git checkout -f "`repobranch "$d"`"
1500 verbose git reset --hard origin/"`repobranch "$d"`"
1502 r=`git symbolic-ref HEAD`
1504 rem=`git config "branch.$r.remote" || $ECHO origin`
1505 bra=`git config "branch.$r.merge" || $ECHO "$r"`
1506 upstream="$rem/${bra#refs/heads/}"
1507 if $fetchupstream; then
1508 verbose git fetch "$rem"
1509 verbose git remote prune "$rem"
1511 if ! git rev-parse "$upstream" >/dev/null 2>&1; then
1512 upstream="origin/`repobranch "$d"`"
1514 verbose git reset --hard "$upstream"
1516 elif $gotomaster; then
1518 verbose git checkout -f "`repobranch "$d"`"
1519 verbose git reset --hard
1521 verbose git checkout "`repobranch "$d"`"
1524 verbose git reset --hard
1526 if $rmuntracked; then
1529 verbose git clean -df || true
1532 verbose git clean -xdf || true
1536 if $killbranches; then
1537 git for-each-ref --format='%(refname)' refs/heads/ | while IFS= read -r B; do
1538 if [ x"$B" != x"`git symbolic-ref HEAD`" ]; then
1539 verbose git branch -D "${B#refs/heads/}"
1542 git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
1543 git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
1545 checkself "$cmd" "$@"
1549 # release building goes here
1551 #"$SELF" each git clean -fxd
1552 case "$RELEASETYPE" in
1554 $ECHO >&2 -n "$ESC[2J$ESC[H"
1561 msg " +---------------------------------------------------------.---+"
1563 msg " +---------------------------------------------------------^---+"
1565 msg " | / \ This is the official release build system. |"
1566 msg " | | | If you are not a member of the Xonotic Core Team, |"
1567 msg " | | STOP | you are not supposed to use this script and should |"
1568 msg " | | | instead use ./all compile to compile the engine |"
1569 msg " | \____/ and game code. |"
1571 msg " | [ I understand ] |"
1572 msg " +-------------------------------------------------------------+"
1574 # A LOT of build infrastructure is required:
1577 # - .ssh/config must be configured so the following
1578 # host names are reachable and have a compile
1579 # infrastructure set up:
1580 # - xonotic-build-linux32 (with gcc on x86)
1581 # - xonotic-build-linux64 (with gcc on x86_64)
1582 # - xonotic-build-win32 (with i586-mingw32msvc-g++)
1583 # - xonotic-build-win64 (with amd64-mingw32msvc-g++
1584 # and x86_64-w64-mingw32-g++)
1585 # - xonotic-build-osx (with Xcode and SDL.framework)
1586 # - AMD Compressonator installed in WINE
1587 # - ResEdit installed in WINE
1588 # - a lot of other requirements you will figure out
1589 # while reading the error messages
1590 # - environment variable RELEASETYPE set
1591 # - optionally, environment variable RELEASEDATE set
1596 msg "Building a FINISHED RELEASE"
1599 msg "Building a $RELEASETYPE"
1602 verbose rm -rf Xonotic Xonotic*.zip
1603 verbose mkdir -p Xonotic
1604 if [ -n "$RELEASEDATE" ]; then
1605 verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
1607 verbose date +%Y%m%d > Xonotic/stamp.txt
1609 release_git_extract_dir "." "Xonotic" Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk
1612 verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
1613 verbose rm -rf misc/builddeps
1614 verbose mv misc/buildfiles/win32/* . || true
1615 verbose mv misc/buildfiles/win64 bin64 || true
1616 verbose mv misc/buildfiles/osx/* . || true
1617 verbose rm -rf misc/buildfiles
1618 verbose rm -rf misc/pki
1620 release_git_extract_dir "darkplaces" "Xonotic/source/darkplaces"
1621 release_git_extract_dir "fteqcc" "Xonotic/source/fteqcc"
1622 release_git_extract_dir "data/xonotic-data.pk3dir" "Xonotic/source" qcsrc Makefile
1623 release_git_extract_dir "d0_blind_id" "Xonotic/source/d0_blind_id"
1625 verbose cd Xonotic/source/d0_blind_id
1626 verbose sh autogen.sh
1628 rm -f Xonotic/key_15.d0pk
1630 verbose cd Xonotic/mapping
1631 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223.tar.bz2
1632 verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110223-win32-7z.exe
1633 for X in *-7z.exe; do
1637 # TODO possibly include other tools?
1640 release-compile-run)
1649 if [ -n "$targetfiles" ]; then
1650 case " $HOSTS_THAT_ARE_DISABLED " in
1655 case " $HOSTS_THAT_ARE_MYSELF " in
1657 verbose rsync --delete -zLvaSHP "$srcdir"/ "$buildpath/"
1658 verbose rsync --delete -zLvaSHP "$depsdir"/ "$buildpath.deps/"
1659 verbose ln -snf "$buildpath.deps" "$buildpath/.deps"
1660 verbose eval make -C "$buildpath" clean $maketargets $makeflags
1661 for f in $targetfiles; do
1662 verbose mv "$buildpath/${f%:*}" "${f##*:}" || true
1666 verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
1667 verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
1668 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"
1669 for f in $targetfiles; do
1670 verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
1674 # now rebrand the binaries...
1675 for f in $targetfiles; do
1676 #verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
1678 Xonotic/xonotic*.exe)
1679 verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
1688 fteqcc_maketargets=$3
1690 darkplaces_maketargets=$5
1692 host=xonotic-build-$suffix
1693 verbose "$SELF" release-compile-run "$host" /tmp/fteqcc.build."$suffix" "$fteqcc_maketargets" "$makeflags" "Xonotic/source/fteqcc" "$d0/misc/builddeps/dp.$suffix" "$fteqcc_files"
1694 verbose "$SELF" release-compile-run "$host" /tmp/Darkplaces.build."$suffix" "$darkplaces_maketargets" "$makeflags" "Xonotic/source/darkplaces" "$d0/misc/builddeps/dp.$suffix" "$darkplaces_files"
1696 release-engine-win32)
1697 verbose "$SELF" release-compile win32 \
1698 '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' \
1699 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
1701 verbose "$SELF" release-compile win32 \
1702 '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' \
1704 release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
1706 release-engine-win64)
1707 verbose "$SELF" release-compile win64 \
1708 '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' \
1709 win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
1710 'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
1711 verbose "$SELF" release-compile win64 \
1712 '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' \
1714 cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
1717 # gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
1718 verbose "$SELF" release-compile osx \
1719 '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"' \
1720 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
1721 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
1723 release-engine-linux32)
1724 verbose "$SELF" release-compile linux32 \
1725 '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' \
1726 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
1727 release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
1729 release-engine-linux64)
1730 verbose "$SELF" release-compile linux64 \
1731 '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' \
1732 all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
1733 release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
1736 verbose "$SELF" release-engine-linux32 &
1737 verbose "$SELF" release-engine-linux64 &
1738 verbose "$SELF" release-engine-win32 &
1739 verbose "$SELF" release-engine-win64 &
1740 verbose "$SELF" release-engine-osx &
1749 verbose "$SELF" update-maps
1752 verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
1753 verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
1755 release-buildpk3-transform-raw)
1758 release-buildpk3-transform-normal)
1761 # texture: convert to jpeg and dds
1762 verbose export do_jpeg=true
1763 verbose export jpeg_qual_rgb=97
1764 verbose export jpeg_qual_a=99
1765 verbose export do_dds=false
1766 verbose export do_ogg=false
1767 verbose export del_src=true
1768 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1770 release-buildpk3-transform-normaldds)
1773 # texture: convert to jpeg and dds
1774 # music: reduce bitrate
1775 verbose export do_jpeg=false
1776 verbose export do_jpeg_if_not_dds=true
1777 verbose export jpeg_qual_rgb=95
1778 verbose export jpeg_qual_a=99
1779 verbose export do_dds=true
1780 verbose export dds_flags=
1781 verbose export do_ogg=true
1782 verbose export del_src=true
1783 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1785 release-buildpk3-transform-low)
1788 # texture: convert to jpeg and dds
1789 # music: reduce bitrate
1790 verbose export do_jpeg=true
1791 verbose export jpeg_qual_rgb=80
1792 verbose export jpeg_qual_a=97
1793 verbose export do_dds=false
1794 verbose export do_ogg=true
1795 verbose export ogg_qual=1
1796 verbose export del_src=true
1797 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1799 release-buildpk3-transform-lowdds)
1802 # texture: convert to jpeg and dds
1803 # music: reduce bitrate
1804 verbose export do_jpeg=false
1805 verbose export do_jpeg_if_not_dds=true
1806 verbose export jpeg_qual_rgb=80
1807 verbose export jpeg_qual_a=99
1808 verbose export do_dds=true
1809 verbose export dds_flags=
1810 verbose export do_ogg=true
1811 verbose export ogg_qual=1
1812 verbose export del_src=true
1813 find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
1827 verbose rm -rf Xonotic/temp
1828 release_timereport "deleted temp directory"
1829 verbose mkdir -p Xonotic/temp
1830 release_git_extract_dir "$src" "Xonotic/temp"
1831 release_timereport "extracted data"
1832 verbose cd Xonotic/temp
1833 if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
1834 verbose cp ../source/progs.dat .
1835 verbose cp ../source/csprogs.dat .
1836 verbose cp ../source/menu.dat .
1837 verbose rm -rf qcsrc
1838 gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
1839 major=$(($gv / 10000))
1840 minor=$((($gv / 100) - ($major * 100)))
1841 patch=$(($gv - ($major * 10000) - ($minor * 100)))
1842 versionstr="$major.$minor.$patch"
1843 case "$RELEASETYPE" in
1847 versionstr="$versionstr$RELEASETYPE"
1851 s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
1852 s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
1853 s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
1854 " < defaultXonotic.cfg > defaultXonotic.cfg.new
1855 mv defaultXonotic.cfg.new defaultXonotic.cfg
1856 case "$RELEASETYPE" in
1858 echo "" >> defaultXonotic.cfg
1859 echo "// nicer menu" >> defaultXonotic.cfg
1860 echo "set menu_watermark \"\"" >> defaultXonotic.cfg
1864 verbose cd gfx/menu/luminos
1865 verbose rm -f background_l2.tga background_ingame_l2.tga
1866 verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
1867 verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
1868 verbose rm background_l2.svg
1871 if [ x"$src" = x"data/xonotic-maps.pk3dir" ]; then
1872 for X in ../../data/*-????????????????????????????????????????-????????????????????????????????????????.pk3; do
1873 if [ -f "$X" ]; then
1875 verbose rm -f maps/*.log maps/*.irc maps/*.lin
1879 verbose export git_src_repo="$d0/$src" # skip hash-object
1880 release_timereport "processed data"
1881 verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
1882 release_timereport "transformed data"
1883 verbose mkzipr "../../$dst" *
1884 release_timereport "zipped data"
1886 verbose rm -rf Xonotic/temp
1887 release_timereport "deleted temp directory again"
1890 stamp=`cat Xonotic/stamp.txt`
1896 dst="data/xonotic-$stamp-${dst#data/xonotic-}"
1902 while [ "$#" -gt 1 ]; do
1903 verbose "$SELF" release-buildpk3 "$src" "Xonotic/$dst$2.pk3" "$1"
1909 verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
1910 verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
1911 verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
1912 verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
1913 verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
1914 verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
1916 release-pack-needsx11)
1919 verbose startx "$SELF" release-pack -- /usr/bin/Xvfb :7
1922 verbose "$SELF" release-pack
1927 stamp=`cat Xonotic/stamp.txt`
1928 # exe and dll files do not need +x, so this makes them eligible for 7zip compression too
1929 chmod a-x Xonotic/*.exe Xonotic/*.dll || true
1930 # let's pass crypto import laws of some nasty countries
1931 crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
1932 if [ -n "$crypto_libs" ]; then
1933 verbose mkzip Xonotic-$stamp-crypto.zip \
1937 # build the archives
1938 verbose mkzip Xonotic-$stamp-engine.zip \
1940 Xonotic/bin64/*.dll \
1943 Xonotic/xonotic.exe \
1944 Xonotic/source/darkplaces/
1945 verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
1946 verbose mkzip Xonotic-$stamp-common.zip \
1947 Xonotic/source/fteqcc/ \
1948 Xonotic/source/qcsrc/ \
1953 Xonotic/key_0.d0pk \
1954 Xonotic/data/font-nimbussansl-$stamp.pk3 \
1955 Xonotic/data/font-xolonium-$stamp.pk3
1956 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
1957 verbose mkzip0 Xonotic-$stamp.zip \
1958 Xonotic/data/xonotic-$stamp-data.pk3 \
1959 Xonotic/data/xonotic-$stamp-maps.pk3 \
1960 Xonotic/data/xonotic-$stamp-music.pk3 \
1961 Xonotic/data/xonotic-$stamp-nexcompat.pk3
1962 verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-low.zip
1963 verbose mkzip0 Xonotic-$stamp-low.zip \
1964 Xonotic/data/xonotic-$stamp-data-low.pk3 \
1965 Xonotic/data/xonotic-$stamp-maps-low.pk3 \
1966 Xonotic/data/xonotic-$stamp-music-low.pk3
1967 verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
1968 verbose mkzip0 Xonotic-$stamp-high.zip \
1969 Xonotic/data/xonotic-$stamp-data-high.pk3 \
1970 Xonotic/data/xonotic-$stamp-maps-high.pk3 \
1971 Xonotic/data/xonotic-$stamp-music.pk3 \
1972 Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
1973 verbose mkzip Xonotic-$stamp-mappingsupport.zip \
1975 verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
1976 Xonotic/data/xonotic-$stamp-maps-low.pk3 # TODO add a Radiant build
1979 verbose "$SELF" release-prepare
1980 verbose "$SELF" release-maps
1981 verbose "$SELF" release-engine
1982 verbose "$SELF" release-qc
1983 verbose "$SELF" release-pack-needsx11
1984 verbose "$SELF" release-zip
1989 $ECHO " $SELF admin-merge [<branch>]"
1990 $ECHO " $SELF branch <branch>"
1991 $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
1992 $ECHO " $SELF branches"
1993 $ECHO " $SELF checkout|switch <branch>"
1994 $ECHO " $SELF checkout|switch <remote>/<branch>"
1995 $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
1996 $ECHO " $SELF clean --reclone"
1997 $ECHO " $SELF compile [-c] [-r|-p] [-0]"
1998 $ECHO " $SELF each|foreach [-k] command..."
1999 $ECHO " $SELF fix_upstream_rebase"
2000 $ECHO " $SELF keygen"
2001 $ECHO " $SELF merge"
2002 $ECHO " $SELF push|commit [-s]"
2003 $ECHO " $SELF release"
2004 $ECHO " $SELF restore-patches"
2005 $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
2006 $ECHO " $SELF save-patches"
2007 $ECHO " $SELF update-maps"
2008 $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"