# vim: filetype=zsh
set -e
+if [ -n "$ZSH_VERSION" ]; then
+ setopt SH_WORD_SPLIT
+fi
+if [ -z "$ECHO" ]; then
+ if echo "\\\\" | grep .. >/dev/null; then
+ ECHO=echo
+ else
+ ECHO=`which echo`
+ fi
+fi
# I use this in EVERY shell script ;)
LF="
d00=`pwd`
while ! [ -f ./all ]; do
if [ x"`pwd`" = x"/" ]; then
- echo "Cannot find myself."
- echo "Please run this script with the working directory inside a Xonotic checkout."
+ $ECHO "Cannot find myself."
+ $ECHO "Please run this script with the working directory inside a Xonotic checkout."
exit 1
fi
cd ..
msg()
{
- echo >&2 "$ESC[1m$*$ESC[m"
+ $ECHO >&2 "$ESC""[1m$*$ESC""[m"
}
self=`git hash-object "$SELF"`
{
case "$1" in
.)
- echo "the root directory"
+ $ECHO "the root directory"
;;
*)
- echo "\"$1\""
+ $ECHO "\"$1\""
;;
esac
}
check_mergeconflict()
{
if git ls-files -u | grep ' 1 '; then
- echo
- echo "MERGE CONFLICT."
- echo "change into the \"$1\" project directory, and then:"
- echo "- edit the files mentioned above with your favorite editor,"
- echo " and fix the conflicts (marked with <<<<<<< blocks)"
- echo "- for binary files, you can select the files using"
- echo " git checkout --ours or git checkout --theirs"
- echo "- when done with a file, 'git add' the file"
- echo "- when done, 'git commit'"
- echo
+ $ECHO
+ $ECHO "MERGE CONFLICT."
+ $ECHO "change into the \"$1\" project directory, and then:"
+ $ECHO "- edit the files mentioned above with your favorite editor,"
+ $ECHO " and fix the conflicts (marked with <<<<<<< blocks)"
+ $ECHO "- for binary files, you can select the files using"
+ $ECHO " git checkout --ours or git checkout --theirs"
+ $ECHO "- when done with a file, 'git add' the file"
+ $ECHO "- when done, 'git commit'"
+ $ECHO
exit 1
fi
}
yesno=
while [ x"$yesno" != x"y" -a x"$yesno" != x"n" ]; do
eval "$2"
- echo "$1"
- IFS= read -r yesno
+ $ECHO "$1"
+ if ! IFS= read -r yesno; then
+ yesno=n
+ break
+ fi
done
[ x"$yesno" = x"y" ]
}
}
repos_urls="
-. | | master |
-data/xonotic-data.pk3dir | | master |
-data/xonotic-music.pk3dir | | master |
-data/xonotic-nexcompat.pk3dir | | master | no
-darkplaces | | div0-stable | svn
-netradiant | | master |
-div0-gittools | | master | no
-d0_blind_id | git://github.com/divVerent/d0_blind_id.git | master |
-data/xonotic-maps.pk3dir | | master |
-mediasource | | master | no
-fteqcc | git://github.com/Blub/qclib.git | master |
+. | | master |
+data/xonotic-data.pk3dir | | master |
+data/xonotic-music.pk3dir | | master |
+data/xonotic-nexcompat.pk3dir | | master | no
+darkplaces | | div0-stable | svn
+netradiant | | master |
+div0-gittools | | master | no
+d0_blind_id | | master |
+data/xonotic-maps.pk3dir | | master |
+mediasource | | master | no
+fteqcc | | xonotic-stable | noautocrlf
"
# todo: in darkplaces, change repobranch to div0-stable
-repos=`echo "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
+repos=`$ECHO "$repos_urls" | grep . | cut -d '|' -f 1 | tr -d ' '`
base=`git config remote.origin.url`
case "$base" in
base=${base%xonotic.git}
;;
*)
- echo "The main repo is not xonotic.git, what have you done?"
+ $ECHO "The main repo is not xonotic.git, what have you done?"
exit 1
;;
esac
'')
;;
*)
- echo "The main repo is not xonotic.git, what have you done?"
+ $ECHO "The main repo is not xonotic.git, what have you done?"
exit 1
;;
esac
repourl()
{
- repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
+ repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
if [ -n "$repo_t" ]; then
case "$repo_t" in
*://*)
- echo "$repo_t"
+ $ECHO "$repo_t"
;;
*)
- echo "$base$repo_t"
+ $ECHO "$base$repo_t"
;;
esac
else
if [ x"$1" = x"." ]; then
- echo "$base""xonotic.git"
+ $ECHO "$base""xonotic.git"
else
- echo "$base${1##*/}.git"
+ $ECHO "$base${1##*/}.git"
fi
fi
}
repopushurl()
{
[ -n "$pushbase" ] || return 0
- repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
+ repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 2 | tr -d ' '`
if [ -n "$repo_t" ]; then
case "$repo_t" in
*://*)
;;
*)
- echo "$pushbase$repo_t"
+ $ECHO "$pushbase$repo_t"
;;
esac
else
if [ x"$1" = x"." ]; then
- echo "$pushbase""xonotic.git"
+ $ECHO "$pushbase""xonotic.git"
else
- echo "$pushbase${1##*/}.git"
+ $ECHO "$pushbase${1##*/}.git"
fi
fi
}
repobranch()
{
- repo_t=`echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
+ repo_t=`$ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 3 | tr -d ' '`
if [ -n "$repo_t" ]; then
- echo "$repo_t"
+ $ECHO "$repo_t"
else
- echo "master"
+ $ECHO "master"
fi
}
repoflags()
{
- echo "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
+ $ECHO "$repos_urls" | grep "^$1 " | cut -d '|' -f 4 | tr -d ' '
}
listrepos()
# if we have the dir, always keep it
if [ -d "$d" ]; then
msg "Repository $d enabled because it already exists"
- echo "$d"
+ $ECHO "$d"
continue
fi
# if .yes file exists, always keep it
if [ -f "$d.yes" ]; then
msg "Repository $d enabled by a .yes file"
- echo "$d"
+ $ECHO "$d"
continue
fi
# if we have .no file, skip
if [ -f "$d.no" ]; then
- msg "Repository $d disabled by a .no file, delete $p.no to enable"
+ msg "Repository $d disabled by a .no file, delete $d.no to enable"
continue
fi
# if we have matching pk3, skip
esac
# default: enable
msg "Repository $d enabled by default"
- echo "$d"
+ $ECHO "$d"
done
}
cmd=$1
shift
+case "$cmd" in
+ release|release-*)
+ export LC_ALL=C
+
+ release_args="$cmd $*"
+ msg "*** $release_args: start"
+ release_starttime=`date +%s`
+ release_end()
+ {
+ release_endtime=`date +%s`
+ release_deltatime=$(($release_endtime - $release_starttime))
+ msg "*** $release_args: $release_deltatime seconds"
+ }
+ trap release_end EXIT
+ release_tempstarttime=$release_starttime
+ release_timereport()
+ {
+ release_endtime=`date +%s` # RELEASE NOW!!!
+ if [ -n "$*" ]; then
+ release_deltatime=$(($release_endtime - $release_tempstarttime))
+ msg "**** $release_args: $*: $release_deltatime seconds"
+ fi
+ release_tempstarttime=$release_endtime
+ }
+ release_git_extract_dir()
+ {
+ release_src=$1; shift
+ release_dst=$1; shift
+ # try to create a hardlink
+ if ln -f "$release_src/.git/HEAD" "$release_dst/.hardlink-test"; then
+ rm -f "$release_dst/.hardlink-test"
+ {
+ verbose cd "$release_src"
+ git ls-files HEAD -- "$@"
+ } | {
+ while IFS= read -r F; do
+ case "$F" in */*) mkdir -p "$release_dst/${F%/*}" ;; esac
+ verbose ln -f "$release_src/$F" "$release_dst/$F"
+ done
+ }
+ else
+ {
+ verbose cd "$release_src"
+ verbose git archive --format=tar HEAD -- "$@"
+ } | {
+ verbose cd "$release_dst"
+ verbose tar xvf -
+ }
+ fi
+ }
+ ;;
+esac
+
fix_upstream_rebase()
{
if [ -z "$r_me" ] || [ -z "$r_other" ]; then
return
fi
+
+ # one of the two sides of the merge should be remote upstream, or all is fine
+ r_r=`git symbolic-ref HEAD`
+ r_r=${r_r#refs/heads/}
+ r_rem=`git config "branch.$r_rem.remote" || $ECHO origin`
+ r_bra=`git config "branch.$r_bra.merge" || $ECHO "$r_r"`
+ r_bra=${r_bra#refs/heads/}
+ if [ x"$r_me" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
+ if [ x"$r_other" != x"`git rev-parse "$r_rem/$r_bra"`" ]; then
+ return
+ fi
+ fi
+
r_base=`git merge-base "$r_me" "$r_other"`
# no merge-base? upstream did filter-branch
r_l_other=`git log --pretty="format:%s" "$r_me".."$r_other" | grep -v "^Merge" | sort -u`
# heuristics: upstream rebase/filter-branch if more than 50% of the commits of one of the sides are in the other too
- r_lc_me=`echo "$r_l_me" | wc -l`
- r_lc_other=`echo "$r_l_other" | wc -l`
- r_lc_together=`{ echo "$r_l_me"; echo "$r_l_other"; } | sort -u | wc -l`
+ r_lc_me=`$ECHO "$r_l_me" | wc -l`
+ r_lc_other=`$ECHO "$r_l_other" | wc -l`
+ r_lc_together=`{ $ECHO "$r_l_me"; $ECHO "$r_l_other"; } | sort -u | wc -l`
r_lc_same=$(($r_lc_me + $r_lc_other - $r_lc_together))
if [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_me )) ] || [ $(( $r_lc_same * 2 )) -gt $(( $r_lc_other )) ]; then
fix_git_config()
{
+ if ! [ -f ".git/config" ]; then
+ $ECHO "Not a git repository. Bailing out to not cause damage."
+ exit 1
+ fi
verbose git config remote.origin.url "$1"
if [ -n "$2" ]; then
verbose git config remote.origin.pushurl "$2"
verbose git config --unset remote.origin.pushurl || true
fi
verbose git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
- verbose git config core.autocrlf input
- if [ -z "`git config push.default`" ]; then
+ case ",`repoflags "$d"`," in
+ *,noautocrlf,*)
+ verbose git config --unset core.autocrlf || true
+ ;;
+ *)
+ verbose git config core.autocrlf input
+ ;;
+ esac
+ if [ -z "`git config push.default || true`" ]; then
verbose git config push.default current # or is tracking better?
fi
+ verbose git config filter.mapclean.clean "tr -d '\r' | grep '^[^/]'"
+ verbose git config filter.mapclean.smudge "cat"
+}
+
+mkzipr()
+{
+ archive=$1; shift
+ case "$RELEASETYPE" in
+ release)
+ sevenzipflags=-mx=9
+ zipflags=-9
+ ;;
+ *)
+ sevenzipflags=-mx=1
+ zipflags=-1
+ ;;
+ esac
+ find "$@" -exec touch -d "2001-01-01 01:01:01 +0000" {} \+ # ugly hack to make the pk3 files rsync-friendly
+ ziplist=`mktemp`
+ find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
+ 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
+ zip $zipflags -y -@<"$ziplist" "$archive" || true
+ rm -f "$ziplist"
}
mkzip()
{
- archive=$1
- shift
+ archive=$1; shift
+ case "$RELEASETYPE" in
+ release)
+ sevenzipflags=-mx=9
+ zipflags=-9
+ ;;
+ *)
+ sevenzipflags=-mx=1
+ zipflags=-1
+ ;;
+ esac
ziplist=`mktemp`
find "$@" -xtype f \( -executable -or -type l \) -print > "$ziplist"
- 7za a -tzip -mx=9 -x@"$ziplist" "$archive" "$@" || true
- zip -9y -@<"$ziplist" "$archive" || true
+ 7za a -tzip $sevenzipflags -x@"$ziplist" "$archive" "$@" || true
+ zip $zipflags -y -@<"$ziplist" "$archive" || true
rm -f "$ziplist"
}
mkzip0()
{
- zip -0y "$@"
+ archive=$1; shift
+ zip -0ry "$archive" "$@"
+}
+
+mirrorspeed()
+{
+ # first result is to be ignored, but we use it to check status
+ git ls-remote "$1" refs/heads/master >/dev/null 2>&1 || return 1
+ { 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*,,'
+ # unit: clock ticks (depends on what "time" returns
+}
+
+bestmirror()
+{
+ pre=$1; shift
+ suf=$1; shift
+
+ if ! { time -p true; } >/dev/null 2>&1; then
+ msg "Cannot do timing in this shell"
+ return 1
+ fi
+
+ bestin=
+ bestt=
+ for mir in "$@"; do
+ case "$mir" in
+ *:*)
+ in=${mir%%:*}
+ op=${mir#*:}
+ ;;
+ *)
+ in=$mir
+ op=
+ ;;
+ esac
+ m=$pre$in$suf
+ if t=`mirrorspeed "$m"`; then
+ if [ -n "$t" ]; then
+ tt=$(($t$op)) # fudge factor
+ msg "$m -> $t$op = $tt ticks"
+ if [ -z "$bestt" ] || [ "$tt" -lt "$bestt" ]; then
+ bestin=$in
+ bestt=$tt
+ fi
+ else
+ msg "$m -> error"
+ fi
+ else
+ msg "$m -> FAIL"
+ fi
+ done
+ if [ -n "$bestin" ]; then
+ msg "Best mirror seems to be $pre$bestin$suf"
+ $ECHO "$bestin"
+ else
+ return 1
+ fi
}
case "$cmd" in
url=`repourl "$d"`
pushurl=`repopushurl "$d"`
branch=`repobranch "$d"`
- if [ -d "$d0/$d" ]; then
+ if [ -f "$d0/$d/.git/config" ]; then
verbose cd "$d0/$d"
fix_git_config "$url" "$pushurl"
cd "$d0"
msg "To get access, your key has to be approved first. For that, visit"
msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
msg "the \"Support\" tracker in the \"Repository\" category where you"
- msg "apply for access and paste the following output into the ticket:"
+ msg "apply for access and paste the following output into the issue:"
msg ""
msg "`cat ~/.ssh/id_rsa.pub`"
+ msg ""
+ msg "Note that you will only have write access to branches that start"
+ msg "with your user name."
elif [ -f ~/.ssh/id_dsa.pub ]; then
msg ""
msg "A key already exists and no new one will be generated. If you"
msg "To get access, your key has to be approved first. For that, visit"
msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
msg "the \"Support\" tracker in the \"Repository\" category where you"
- msg "apply for access and paste the following output into the ticket:"
+ msg "apply for access and paste the following output into the issue:"
msg ""
msg "`cat ~/.ssh/id_dsa.pub`"
+ msg ""
+ msg "Note that you will only have write access to branches that start"
+ msg "with your user name."
else
msg ""
msg "No key has been generated yet. One will be generated now."
msg "If other people are using your computer, it is recommended"
- msg "to specify a passphrase."
+ msg "to specify a passphrase. Otherwise you can simply hit ENTER"
+ msg "when asked for a passphrase."
msg ""
- ssh-keygen -t rsa -b 4096
+ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
msg ""
msg "To get access, your key has to be approved first. For that, visit"
msg "http://dev.xonotic.org/, then log in, create a \"New Issue\" on"
msg "the \"Support\" tracker in the \"Repository\" category where you"
- msg "apply for access and paste the following output into the ticket:"
+ msg "apply for access and paste the following output into the issue:"
msg ""
msg "`cat ~/.ssh/id_rsa.pub`"
+ msg ""
+ msg "Note that you will only have write access to branches that start"
+ msg "with your user name."
fi
;;
update|pull)
allow_pull=true
fix_config=false
+ location=current
while :; do
if [ x"$1" = x"-N" ]; then
allow_pull=false
elif [ x"$1" = x"-p" ]; then
fix_config=true
- if [ x"$base" != x"ssh://xonotic@git.xonotic.org/" ]; then
- pushbase=ssh://xonotic@git.xonotic.org/
- fi
+ pushbase=ssh://xonotic@git.xonotic.org/
+ elif [ x"$1" = x"-ps" ]; then
+ fix_config=true
+ pushbase=ssh://xonotic@git.xonotic.org/
+ elif [ x"$1" = x"-ph" ]; then
+ fix_config=true
+ pushbase=http://git.xonotic.org/login/xonotic/
elif [ x"$1" = x"-s" ]; then
fix_config=true
base=ssh://xonotic@git.xonotic.org/
- pushbase=
elif [ x"$1" = x"-g" ]; then
fix_config=true
base=git://git.xonotic.org/xonotic/
elif [ x"$1" = x"-h" ]; then
fix_config=true
base=http://git.xonotic.org/xonotic/
+ elif [ x"$1" = x"-l" ]; then
+ case "$2" in
+ nl) ;;
+ de) ;;
+ us) ;;
+ best) ;;
+ default) ;;
+ *)
+ msg "Invalid location!"
+ msg "Possible locations for the -l option:"
+ msg " nl (Netherlands, run by merlijn)"
+ msg " de (Germany, run by divVerent)"
+ msg " us (United States of America, run by detrate)"
+ msg " best (find automatically)"
+ msg " default (currently nl)"
+ exit 1
+ ;;
+ esac
+ fix_config=true
+ location=$2
+ shift
else
break
fi
shift
done
+ case "$location" in
+ current)
+ if [ x"`git config xonotic.all.mirrorselection 2>/dev/null || true`" != x"done" ]; then
+ location=best
+ fi
+ ;;
+ esac
+ case "$location" in
+ best)
+ # if we fetched via ssh://, switch to git:// for fetching and keep using ssh:// for pushing
+ case "$base" in
+ ssh://*|*/login/*)
+ pushbase=$base
+ base=git://git.xonotic.org/xonotic/
+ ;;
+ esac
+ newbase=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,:// .git.xonotic.org/,"`
+ case "$newbase" in
+ *\ *)
+ if location=`bestmirror $newbase"xonotic.git" de us nl:'*6/5'`; then # 20% malus to the NL server to not overload it too much
+ git config xonotic.all.mirrorselection done
+ else
+ location=current
+ fi
+ ;;
+ *)
+ location=current
+ ;;
+ esac
+ ;;
+ esac
+ case "$location" in
+ default)
+ location=
+ ;;
+ current)
+ case "$base" in
+ *://*.git.xonotic.org/*)
+ location=${base%%.git.xonotic.org/*}
+ location=${location##*://}
+ ;;
+ *)
+ location=
+ ;;
+ esac
+ ;;
+ esac
+ if [ -n "$location" ]; then
+ base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
+ pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://$location.git.xonotic.org/,"`
+ else
+ base=`$ECHO "$base" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
+ pushbase=`$ECHO "$pushbase" | sed "s,://\(.*\.\)\?git.xonotic.org/,://git.xonotic.org/,"`
+ fi
if $fix_config; then
url=`repourl .`
pushurl=`repopushurl .`
url=`repourl "$d"`
pushurl=`repopushurl "$d"`
branch=`repobranch "$d"`
- if [ -d "$d0/$d" ]; then
+ if [ -f "$d0/$d/.git/config" ]; then
+ # if we have .no file, skip
+ if [ -f "$d0/$d.no" ]; then
+ msg "Repository $d disabled by a .no file, delete $d.no to enable; thus, not updated"
+ continue
+ fi
if $allow_pull; then
enter "$d0/$d" verbose
r=`git symbolic-ref HEAD`
if ! verbose git pull; then
fix_upstream_rebase_mergefail || true
check_mergeconflict "$d"
- echo "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
+ $ECHO "Pulling failed. Press ENTER to continue, or Ctrl-C to abort."
read -r DUMMY
else
fix_upstream_rebase_mergeok || true
cd "$d0"
fi
else
+ if [ -d "$d0/$d" ]; then
+ if yesno "$d0/$d is in the way, get rid of it and reclone?"; then
+ verbose rm -rf "$d0/$d"
+ else
+ echo "Note: $d0/$d will stay broken."
+ continue
+ fi
+ fi
verbose git clone "$url" "$d0/$d"
enter "$d0/$d" verbose
fix_git_config "$url" "$pushurl"
;;
esac
fi
+ if [ -n "$checkoutflags" ]; then
+ set -- -f "$@" # to make checkself work again
+ fi
exists=false
for d in $repos; do
enter "$d0/$d" verbose
else
b=`repobranch "$d"`
if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
- exists=true
verbose git checkout $checkoutflags "$b"
elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
- exists=true
verbose git checkout $checkoutflags --track -b "$b" "$remote/$b"
else
- echo "WTF? Not even branch $b doesn't exist in $d"
+ $ECHO "WTF? Not even branch $b doesn't exist in $d"
exit 1
fi
fi
cd "$d0"
done
if ! $exists; then
- echo "The requested branch was not found in any repository."
+ $ECHO "The requested branch was not found in any repository."
fi
exec "$SELF" branch
;;
enter "$d0/$d"
r=`git symbolic-ref HEAD`
r=${r#refs/heads/}
- echo "$d is at $r"
+ $ECHO "$d is at $r"
cd "$d0"
done
else
dv=`visible_repo_name "$d"`
enter "$d0/$d" verbose
if git rev-parse "refs/heads/$branch" >/dev/null 2>&1; then
- echo "Already having this branch in $dv."
+ $ECHO "Already having this branch in $dv."
else
if yesno "Branch in $dv?"; then
if [ -n "$srcbranch" ]; then
continue
fi
BRANCH=${BRANCH#remotes/}
- ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
+ ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
branches_list="$branches_list $BRANCH" # TEH SORT MAKEZ IT UNIEQ
eval "r=\$branches_repos_$ID"
r="$r $d"
eval "branches_repos_$ID=\$r"
done
- echo -n "$branches_list" | xargs -n 1 echo | sort -u | while IFS= read -r BRANCH; do
- ID=`echo "$BRANCH" | tr -c "A-Za-z0-9." "_"`
+ $ECHO -n "$branches_list" | xargs -n 1 $ECHO | sort -u | while IFS= read -r BRANCH; do
+ ID=`$ECHO "$BRANCH" | tr -c "A-Za-z0-9." "_"`
eval "r=\$branches_repos_$ID"
printf "%-60s %s\n" "$BRANCH" "$r"
- #echo "$BRANCH: $r"
+ #$ECHO "$BRANCH: $r"
done
}
;;
diffdata=`git diff --color HEAD`
if [ -n "$diffdata" ]; then
# we have uncommitted changes
- if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" 'echo "$diffdata" | less -r'; then
+ if yesno "Uncommitted changes in \"$r\" in $dv. Commit?" '$ECHO "$diffdata" | less -r'; then
verbose git commit -a
fi
fi
- rem=`git config "branch.$r.remote" || echo origin`
- bra=`git config "branch.$r.merge" || echo "$r"`
+ rem=`git config "branch.$r.remote" || $ECHO origin`
+ bra=`git config "branch.$r.merge" || $ECHO "$r"`
upstream="$rem/${bra#refs/heads/}"
if ! git rev-parse "$upstream" >/dev/null 2>&1; then
upstream="origin/`repobranch "$d"`"
fi
logdata=`git log --color "$upstream".."$r"`
if [ -n "$logdata" ]; then
- if yesno "Push \"$r\" in $dv?" 'echo "$logdata" | less -r'; then
+ if yesno "Push \"$r\" in $dv?" '$ECHO "$logdata" | less -r'; then
verbose git push "$rem" HEAD
fi
fi
cleanqc=false
compiled0=false
debug=debug
+ snowleopardhack=false
if [ -z "$CC" ]; then
export CC="gcc -DSUPPORTIPV6"
fi
case "$1" in
-0)
compiled0=true
+ shift
;;
-c)
cleand0=true
cleanqc=true
shift
;;
- -r)
- debug=release
- export CC="$CC -g -mtune=native -march=native"
+ -r|-p)
+ case "$1" in
+ -p)
+ debug=profile
+ ;;
+ -r)
+ debug=release
+ ;;
+ esac
+ export CC="$CC -g"
+ case "`$CC -dumpversion`" in
+ [5-9]*|[1-9][0-9]*|4.[3-9]*|4.[1-9][0-9]*)
+ # gcc 4.3 or higher
+ # -march=native is broken < 4.3
+ if $CC -mtune=native -march=native misc/tools/conftest.c -o conftest >/dev/null 2>&1; then
+ export CC="$CC -mtune=native -march=native"
+ fi
+ ;;
+ esac
+ if [ -n "$WE_HATE_OUR_USERS" ]; then
+ export CC="$CC -fno-common"
+ fi
shift
;;
*)
;;
*)
# AGL cannot be compiled on systems with a kernel > 10.x (Snow Leopard)
+ snowleopardhack=true
TARGETS="sv-$debug sdl-$debug"
;;
esac
- export CC="$CC -I$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks/SDL.framework/Headers -F$PWD/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
+ 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"
else
TARGETS="sv-$debug cl-$debug sdl-$debug"
fi
sdl)
TARGETS="$TARGETS sdl-debug"
;;
- glx|agl|wgl)
+ agl)
+ TARGETS="$TARGETS cl-debug"
+ if $snowleopardhack; then
+ export CC="$CC -arch i386"
+ fi
+ ;;
+ glx|wgl)
TARGETS="$TARGETS cl-debug"
;;
dedicated)
fi
if [ -z "$MAKEFLAGS" ]; then
if [ -f /proc/cpuinfo ]; then
- ncpus=$((`grep -c '^processor :' /proc/cpuinfo`+0))
+ ncpus=$((`grep -c '^processor :' /proc/cpuinfo || true`+0))
if [ $ncpus -gt 1 ]; then
MAKEFLAGS=-j$ncpus
fi
fi
fi
- enter "$d0/d0_blind_id" verbose
+
+ if ! verbose $CC misc/tools/conftest.c -o conftest; then
+ msg ""
+ msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ msg "~~~~~~~~~~ COMPILER ~~~~~~~~~~"
+ msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ msg "~~~~~~~~~~~~~~_...._~~~~~~~~~~"
+ msg "~~~~~~~~~~~,-' \\\`-._~~~~~~"
+ msg "~~~~~~~~~~/ --. >< \\~~~~~"
+ msg "~~~~~~~~~/ (*)> -<: \\~~~~"
+ msg "~~~~~~~~~( ^~-' (*) )~~~~"
+ msg "~~~~~~~~~\\ ^+-_/ |~~~~"
+ msg "~~~~~~~~~~\\ {vvv} |~~~~"
+ msg "~~~~~~~~~~,\\ , {^^^},/~~~~~"
+ msg "~~~~~~~~,/ \`---.....-'~~W~~~~"
+ msg "~~~~~~,/ \\_____/_\\_W~~/~~~~~"
+ msg "~~~~~/ /~~~\\__/~~~~~~"
+ msg "~~~~/ /~~~~~~~~~~~~~~"
+ msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ msg "~~~~~~~ Y U NO COMPILE ~~~~~~~"
+ msg "~~~~~~~~~~~~ CODE ~~~~~~~~~~~~"
+ msg "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+ msg ""
+ exit 1
+ fi
+ rm -f conftest
+
+ verbose cd "$d0/d0_blind_id"
if ! $compiled0; then
# compilation of crypto library failed
# use binaries then, if we can...
mkdir -p .libs
if [ -n "$WE_HATE_OUR_USERS" ]; then
verbose cp "$d0/misc/buildfiles/win32/libd0_blind_id"-* .libs/
+ verbose cp "$d0/misc/buildfiles/win32/libd0_rijndael"-* .libs/
verbose cp "$d0/misc/buildfiles/win32/libgmp"-* .libs/
else
case "`uname`" in
Linux)
case `uname -m` in
x86_64)
- verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
- verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
- MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
+ #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_blind_id".* .libs/
+ #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libd0_rijndael".* .libs/
+ #verbose cp "$d0/misc/builddeps/dp.linux64/lib/libgmp".* .libs/
+ MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux64/lib/"
;;
*86)
- verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
- verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
- MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
+ #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_blind_id".* .libs/
+ #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libd0_rijndael".* .libs/
+ #verbose cp "$d0/misc/builddeps/dp.linux32/lib/libgmp".* .libs/
+ MAKEFLAGS="$MAKEFLAGS DP_CRYPTO_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/ DP_CRYPTO_RIJNDAEL_STATIC_LIBDIR=../misc/builddeps/dp.linux32/lib/"
;;
*)
compiled0=true
;;
Darwin)
verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_blind_id".* .libs/
+ verbose cp "$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS/libd0_rijndael".* .libs/
;;
*)
compiled0=true
verbose make $MAKEFLAGS
fi
- enter "$d0/fteqcc" verbose
+ verbose cd "$d0/fteqcc"
if $cleanqcc; then
verbose make $MAKEFLAGS clean
fi
verbose make $MAKEFLAGS
- enter "$d0/data/xonotic-data.pk3dir" verbose
+ verbose cd "$d0/data/xonotic-data.pk3dir"
if $cleanqc; then
- verbose make FTEQCC="$d0/fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
+ verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS clean
fi
- verbose make FTEQCC="$d0/fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
+ verbose make FTEQCC="../../../../fteqcc/fteqcc.bin" "$@" $MAKEFLAGS
+ # 4 levels up: data, xonotic-data, qcsrc, server
- enter "$d0/darkplaces" verbose
+ verbose cd "$d0/darkplaces"
if [ x"$BAD_TARGETS" = x" " ]; then
- echo "Warning: invalid empty client, default clients will be used."
+ $ECHO "Warning: invalid empty client, default clients will be used."
fi
if $cleandp; then
verbose make $MAKEFLAGS clean
verbose make $MAKEFLAGS STRIP=: "$@" "$T"
done
for T in $BAD_TARGETS; do
- echo "Warning: discarded invalid client $T."
+ $ECHO "Warning: discarded invalid client $T."
done
verbose "$SELF" update-maps
client=
export PATH="$d0/misc/buildfiles/win32:$d0/d0_blind_id/.libs:$PATH"
elif [ x"`uname`" = x"Darwin" ]; then
- export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS:$d0/d0_blind_id/.libs"
- export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/Frameworks"
+ export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/MacOS:$d0/d0_blind_id/.libs"
+ export DYLD_FRAMEWORK_PATH="$d0/misc/buildfiles/osx/Xonotic.app/Contents/Frameworks"
client=-sdl
else
export LD_LIBRARY_PATH="$d0/d0_blind_id/.libs"
if [ -x "darkplaces/darkplaces$client.exe" ]; then
client=$client.exe
else
- echo "Client darkplaces/darkplaces$client not found, aborting"
+ $ECHO "Client darkplaces/darkplaces$client not found, aborting"
exit 1
fi
fi
- set -- "darkplaces/darkplaces$client" -xonotic -mygames "$@"
+ set -- "darkplaces/darkplaces$client" -xonotic "$@"
# if pulseaudio is running: USE IT
if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
binary=$1
- if [ -n "$USE_GDB" ]; then
+ if [ x"$USE_GDB" = x"yes" ]; then
set -- gdb --args "$@"
- elif which gdb >/dev/null 2>&1; then
+ elif [ x"$USE_GDB" != x"no" ] && which gdb >/dev/null 2>&1; then
set -- gdb --batch -x savecore.gdb --args "$@"
elif which catchsegv >/dev/null 2>&1; then
set -- catchsegv "$@"
# # somehow send it
# rm -f xonotic.core.tar.gz
else
- echo "The core dump can be examined later by"
- echo " gdb $binary xonotic.core"
+ $ECHO "The core dump can be examined later by"
+ $ECHO " gdb $binary xonotic.core"
fi
+ exit 1
fi
;;
each|foreach)
continue
fi
if git format-patch -o "$patchdir/$i" "$UPSTREAM".."$BRANCH"; then
- echo "$d" > "$patchdir/$i/info.txt"
- echo "$BRANCH" >> "$patchdir/$i/info.txt"
- echo "$UPSTREAM" >> "$patchdir/$i/info.txt"
- echo "$TRACK" >> "$patchdir/$i/info.txt"
+ $ECHO "$d" > "$patchdir/$i/info.txt"
+ $ECHO "$BRANCH" >> "$patchdir/$i/info.txt"
+ $ECHO "$UPSTREAM" >> "$patchdir/$i/info.txt"
+ $ECHO "$TRACK" >> "$patchdir/$i/info.txt"
i=$(($i+1))
else
rm -rf "$patchdir/$i"
;;
admin-merge)
branch=$1
+ only_delete=false
+ case "$branch" in
+ -d)
+ branch=
+ only_delete=true
+ ;;
+ esac
t=`mktemp`
report=""
reportecho()
{
report=$report"$*$LF"
- echo "$*"
+ $ECHO "$*"
}
reportecho4()
{
report=$report" $*$LF"
- echo " $*"
+ $ECHO " $*"
}
reportdo4()
{
reportecho "$o"
}
for d in $repos; do
+ case "$d" in
+ fteqcc)
+ # sorry, fteqcc repo is managed manually
+ continue
+ ;;
+ esac
enter "$d0/$d" verbose
base="`repobranch "$d"`"
reportecho "In $d:"
diffdata=`git diff --color --find-copies-harder --ignore-space-change "$realbase"..."$ref"`
if [ -z "$diffdata" ]; then
reportecho4 "--> not merging, no changes vs master, branch contains redundant history"
- if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ echo "$logdata"; } | less -r'; then
+ if yesno "Branch \"$ref\" probably should get deleted. Do it?" '{ $ECHO "$logdata"; } | less -r'; then
git push origin :"${ref#refs/remotes/origin/}"
reportecho4 "--> branch deleted"
fi
+ elif $only_delete; then
+ reportecho4 "--> skipped in delete-only run"
elif [ -z "$branch" ] && [ -n "$note" ]; then
- reportdo4 echo "$note"
+ reportdo4 $ECHO "$note"
reportecho4 "--> not merging, already had this one rejected before"
- elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
+ elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ $ECHO "$logdata"; $ECHO "$diffdata"; } | less -r'; then
git checkout "$realbase"
org=`git rev-parse HEAD`
if ! git merge --no-ff "$ref" 2>&1 | tee "$t" && ! { git ls-files -u | grep ' 1 ' >/dev/null; }; then
git push origin :"${ref#refs/remotes/origin/}"
reportecho4 "--> test failed, branch deleted"
elif [ -n "$note" ]; then
- reportdo4 echo "$note"
+ reportdo4 $ECHO "$note"
reportecho4 "--> test failed"
else
reportecho4 "--> test failed, postponed"
fi
else
- echo "MERGING"
+ # apply crlf, or other cleanup filters (non-behavioural changes)
+ git reset --hard
+ find . -type f -exec touch {} \;
+ git commit -a --amend -C HEAD || true # don't fail if nothing to commit
+
+ $ECHO "MERGING"
case ",`repoflags "$d"`," in
*,svn,*)
# we do quite a mess here... luckily we know $org
git push origin :"${ref#refs/remotes/origin/}"
reportecho4 "--> branch deleted"
elif [ -n "$note" ]; then
- reportdo4 echo "$note"
+ reportdo4 $ECHO "$note"
reportecho4 "--> rejected"
else
reportecho4 "--> postponed"
reportecho ""
done
rm -f "$t"
- echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
+ $ECHO "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
;;
clean)
"$SELF" fix_config
# ./all clean [-m] [-f | -fu | -fU] [-r] [-D]
# ./all clean --reclone
found=false
- while :; do
- if [ x"$1" = x"--reclone" ]; then
+ for X in "$@"; do
+ if [ x"$X" = x"--reclone" ]; then
force=true
fetchupstream=true
gotoupstream=true
gotomaster=true
rmuntracked=true
killbranches=true
- elif [ x"$1" = x"-f" ]; then
+ elif [ x"$X" = x"-f" ]; then
force=true
- elif [ x"$1" = x"-u" ]; then
+ elif [ x"$X" = x"-u" ]; then
gotoupstream=true
- elif [ x"$1" = x"-U" ]; then
+ elif [ x"$X" = x"-U" ]; then
gotoupstream=true
fetchupstream=true
- elif [ x"$1" = x"-fu" ]; then
+ elif [ x"$X" = x"-fu" ]; then
force=true
gotoupstream=true
- elif [ x"$1" = x"-fU" ]; then
+ elif [ x"$X" = x"-fU" ]; then
force=true
gotoupstream=true
fetchupstream=true
- elif [ x"$1" = x"-m" ]; then
+ elif [ x"$X" = x"-m" ]; then
gotomaster=true
- elif [ x"$1" = x"-r" ]; then
+ elif [ x"$X" = x"-r" ]; then
rmuntracked=true
- elif [ x"$1" = x"-D" ]; then
+ elif [ x"$X" = x"-D" ]; then
killbranches=true
+ elif $ECHO "$X" | grep '^-FFFF*UUUU*$' >/dev/null; then
+ msg ''
+ msg " _____"
+ msg " ,--'-\\P/\`\\ FFFFFFF"
+ msg " __/_ B/,-.\\ FFFFFFF"
+ msg " / _\\ (// O\\\\ FFFFFF"
+ msg "| (O \`) _\\._ _)\\ FFFUU"
+ msg "| |___/.^d0~~\"\\ \\ UUUU"
+ msg "| |\`~' \\ | UUUU"
+ msg "| | __,C>|| UUUU"
+ msg "\\ /_ ,-/,-' | UUUU"
+ msg " \\\\_ \\_>~' / UUUU-"
+ msg ''
else
- break
+ msg "Unknown arg: $X"
fi
found=true
- shift
done
if ! $found; then
rmuntracked=true
else
r=`git symbolic-ref HEAD`
r=${r#refs/heads/}
- rem=`git config "branch.$r.remote" || echo origin`
- bra=`git config "branch.$r.merge" || echo "$r"`
+ rem=`git config "branch.$r.remote" || $ECHO origin`
+ bra=`git config "branch.$r.merge" || $ECHO "$r"`
upstream="$rem/${bra#refs/heads/}"
if $fetchupstream; then
verbose git fetch "$rem"
if $rmuntracked; then
case "$d" in
.)
- verbose git clean -df
+ verbose git clean -df || true
;;
*)
- verbose git clean -xdf
+ verbose git clean -xdf || true
;;
esac
fi
verbose git branch -D "${B#refs/heads/}"
fi
done
- git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch -t master origin/master || true
- git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch -t "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
+ git rev-parse refs/heads/master >/dev/null 2>&1 || verbose git branch --track master origin/master || true
+ git rev-parse "refs/heads/`repobranch "$d"`" >/dev/null 2>&1 || verbose git branch --track "`repobranch "$d"`" origin/"`repobranch "$d"`" || true
fi
+ checkself "$cmd" "$@"
done
;;
release-prepare)
#"$SELF" each git clean -fxd
case "$RELEASETYPE" in
- beta)
- msg "Building a BETA"
- ;;
- release)
- msg "Building a RELEASE"
- ;;
- *)
- echo >&2 -n "$ESC[2J$ESC[H"
+ '')
+ $ECHO >&2 -n "$ESC[2J$ESC[H"
msg ""
msg ""
msg ""
# (YYYYMMDD)
exit 1
;;
+ release)
+ msg "Building a FINISHED RELEASE"
+ ;;
+ *)
+ msg "Building a $RELEASETYPE"
+ ;;
esac
verbose rm -rf Xonotic Xonotic*.zip
verbose mkdir -p Xonotic
if [ -n "$RELEASEDATE" ]; then
- verbose echo "$RELEASEDATE" > Xonotic/stamp.txt
+ verbose $ECHO "$RELEASEDATE" > Xonotic/stamp.txt
else
verbose date +%Y%m%d > Xonotic/stamp.txt
fi
- verbose git archive --format=tar HEAD -- Docs misc server xonotic-linux-glx.sh xonotic-linux-sdl.sh misc/buildfiles key_0.d0pk | {
+ 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
+ (
verbose cd Xonotic
- verbose mkdir data fteqcc source source/darkplaces source/fteqcc
- verbose tar xvf -
+ verbose mkdir data fteqcc source source/darkplaces source/fteqcc source/d0_blind_id mapping
verbose rm -rf misc/builddeps
- verbose mv misc/buildfiles/win32/* . || true
+ verbose mv misc/buildfiles/win32 bin32 || true
+ verbose mv bin32/SDL.dll . || true
verbose mv misc/buildfiles/win64 bin64 || true
verbose mv misc/buildfiles/osx/* . || true
verbose rm -rf misc/buildfiles
verbose rm -rf misc/pki
- }
- {
- verbose cd darkplaces
- verbose git archive --format=tar HEAD
- } | {
- verbose cd Xonotic/source/darkplaces
- verbose tar xvf -
- }
- {
- verbose cd fteqcc
- verbose git archive --format=tar HEAD
- } | {
- verbose cd Xonotic/source/fteqcc
- verbose tar xvf -
- }
+ )
+ release_git_extract_dir "darkplaces" "Xonotic/source/darkplaces" .
+ release_git_extract_dir "fteqcc" "Xonotic/source/fteqcc" .
+ release_git_extract_dir "data/xonotic-data.pk3dir" "Xonotic/source" qcsrc Makefile
+ release_git_extract_dir "d0_blind_id" "Xonotic/source/d0_blind_id" .
+ (
+ verbose cd Xonotic/source/d0_blind_id
+ verbose sh autogen.sh
+ )
+ rm -f Xonotic/key_15.d0pk
{
- verbose cd data/xonotic-data.pk3dir
- verbose git archive --format=tar HEAD -- qcsrc Makefile
- } | {
- verbose cd Xonotic/source
- verbose tar xvf -
+ verbose cd Xonotic/mapping
+ verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110701.tar.bz2
+ verbose wget http://www.icculus.org/netradiant/files/netradiant-1.5.0-20110701-win32-7z.exe
+ for X in *-7z.exe; do
+ 7za x "$X"
+ rm -f "$X"
+ done
+ # TODO possibly include other tools?
}
- rm -f Xonotic/key_15.d0pk
;;
release-compile-run)
host=$1
*)
verbose rsync --delete -zLvaSHP "$srcdir"/ "$host:$buildpath/"
verbose rsync --delete -zLvaSHP "$depsdir"/ "$host:$buildpath.deps/"
- verbose ssh "$host" "ln -snf $buildpath.deps $buildpath/.deps && cd $buildpath && nice -`nice` make clean $maketargets $makeflags"
+ 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"
for f in $targetfiles; do
verbose rsync -zvaSHP "$host:$buildpath/${f%:*}" "${f##*:}" || true
done
# now rebrand the binaries...
for f in $targetfiles; do
#verbose "$d0/misc/tools/rebrand-darkplaces-engine.sh" "${XONOTIC_BRAND:-$d0/misc/tools/xonotic.brand}" "${f##*:}" || true
- case "$f" in
- xonotic*.exe)
- verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "$f"
- (
- d=`mktemp -d -t rebrand.XXXXXX`
- cd "$d"
- echo "-mygames" > darkplaces.opt
- zip -9r darkplaces.zip darkplaces.opt
- cat darkplaces.zip
- cd "$d0"
- rm -rf "$d"
- ) >> "$f"
+ case "${f##*:}" in
+ Xonotic/xonotic*.exe)
+ verbose "$d0/misc/tools/change-icon-of-exe.sh" "$d0/misc/logos/icons_ico/xonotic.ico" "${f##*:}"
;;
esac
done
;;
release-engine-win32)
verbose "$SELF" release-compile win32 \
- 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -march=i686 -g -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' \
+ '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' \
win 'fteqcc.exe:Xonotic/fteqcc/fteqcc.exe' \
'' ''
verbose "$SELF" release-compile win32 \
- 'STRIP=: DP_MAKE_TARGET=mingw CC="i586-mingw32msvc-gcc -g -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' \
+ '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' \
'' '' \
release 'darkplaces.exe:Xonotic/xonotic.exe darkplaces-sdl.exe:Xonotic/xonotic-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-dedicated.exe'
;;
release-engine-win64)
verbose "$SELF" release-compile win64 \
- 'STRIP=: DP_MAKE_TARGET=mingw CC="amd64-mingw32msvc-gcc -g -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' \
+ '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' \
win 'fteqcc.exe:Xonotic/fteqcc/fteqcc-x64.exe' \
'sv-release sdl-release' 'darkplaces-sdl.exe:Xonotic/xonotic-x64-sdl.exe darkplaces-dedicated.exe:Xonotic/xonotic-x64-dedicated.exe'
verbose "$SELF" release-compile win64 \
- 'STRIP=: DP_MAKE_TARGET=mingw CC="x86_64-w64-mingw32-gcc -g -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=0' \
+ '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' \
'' '' \
cl-release 'darkplaces.exe:Xonotic/xonotic-x64.exe'
;;
release-engine-osx)
# gcc on OSX is buggy, needs -fno-reorder-blocks for a release build to succeed
verbose "$SELF" release-compile osx \
- 'STRIP=: CC="gcc -g -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"' \
+ '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"' \
all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.osx' \
- 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic-SDL.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
- verbose "$SELF" release-compile osx \
- 'STRIP=: CC="gcc -g -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.4 -I.deps/include -L.deps/lib -fno-reorder-blocks -DSUPPORTIPV6"' \
- '' '' \
- 'cl-release' 'darkplaces-agl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-agl-bin'
+ 'sv-release sdl-release' 'darkplaces-sdl:Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin darkplaces-dedicated:Xonotic/xonotic-osx-dedicated'
;;
release-engine-linux32)
verbose "$SELF" release-compile linux32 \
- 'STRIP=: CC="gcc -m32 -march=i686 -g -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' \
+ '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' \
all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux32' \
release 'darkplaces-glx:Xonotic/xonotic-linux32-glx darkplaces-sdl:Xonotic/xonotic-linux32-sdl darkplaces-dedicated:Xonotic/xonotic-linux32-dedicated'
;;
release-engine-linux64)
verbose "$SELF" release-compile linux64 \
- 'STRIP=: CC="gcc -m64 -g -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' \
+ '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' \
all 'fteqcc.bin:Xonotic/fteqcc/fteqcc.linux64' \
release 'darkplaces-glx:Xonotic/xonotic-linux64-glx darkplaces-sdl:Xonotic/xonotic-linux64-sdl darkplaces-dedicated:Xonotic/xonotic-linux64-dedicated'
;;
verbose "$SELF" update-maps
;;
release-qc)
- case "$RELEASETYPE" in
- beta)
- verbose make -C Xonotic/source FTEQCC="$d0/Xonotic/fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
- ;;
- release)
- verbose make -C Xonotic/source FTEQCC="$d0/Xonotic/fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 FTEQCCFLAGS_WATERMARK= clean all
- ;;
- esac
- verbose rm -f Xonotic/source/*/fteqcc.log
+ verbose make -C Xonotic/source FTEQCC="../../../fteqcc/fteqcc.linux32" XON_BUILDSYSTEM=1 clean all
+ verbose rm -f Xonotic/source/qcsrc/*/fteqcc.log
;;
release-buildpk3-transform-raw)
dir=$1
verbose cd "$dir"
# texture: convert to jpeg and dds
verbose export do_jpeg=true
+ verbose export jpeg_qual_rgb=97
+ verbose export jpeg_qual_a=99
+ verbose export do_dds=false
+ verbose export do_ogg=false
+ verbose export del_src=true
+ find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
+ ;;
+ release-buildpk3-transform-normaldds)
+ dir=$1
+ verbose cd "$dir"
+ # texture: convert to jpeg and dds
+ # music: reduce bitrate
+ verbose export do_jpeg=false
+ verbose export do_jpeg_if_not_dds=true
verbose export jpeg_qual_rgb=95
verbose export jpeg_qual_a=99
verbose export do_dds=true
verbose export dds_flags=
- verbose export do_ogg=false
+ verbose export do_ogg=true
verbose export del_src=true
find . -type f -print0 | verbose xargs -0 "$d0"/misc/tools/cached-converter.sh
;;
# music: reduce bitrate
verbose export do_jpeg=true
verbose export jpeg_qual_rgb=80
- verbose export jpeg_qual_a=95
+ verbose export jpeg_qual_a=97
verbose export do_dds=false
verbose export do_ogg=true
verbose export ogg_qual=1
verbose export do_jpeg=false
verbose export do_jpeg_if_not_dds=true
verbose export jpeg_qual_rgb=80
- verbose export jpeg_qual_a=95
+ verbose export jpeg_qual_a=99
verbose export do_dds=true
verbose export dds_flags=
verbose export do_ogg=true
dst="$PWD/$dst"
;;
esac
+ release_timereport
verbose rm -rf Xonotic/temp
+ release_timereport "deleted temp directory"
verbose mkdir -p Xonotic/temp
- {
- verbose cd "$src"
- verbose git archive --format=tar HEAD
- } | {
- verbose cd Xonotic/temp
- verbose tar xvf -
- }
+ release_git_extract_dir "$src" "Xonotic/temp" .
+ release_timereport "extracted data"
verbose cd Xonotic/temp
if [ x"$src" = x"data/xonotic-data.pk3dir" ]; then
verbose cp ../source/progs.dat .
verbose rm -rf qcsrc
gv=`grep "^gameversion " "defaultXonotic.cfg" | awk '{ print $2 }'`
major=$(($gv / 10000))
- minor=$(($gv / 100 - $major * 100))
- patch=$(($gv - $major * 10000 - $minor * 100))
+ minor=$((($gv / 100) - ($major * 100)))
+ patch=$(($gv - ($major * 10000) - ($minor * 100)))
versionstr="$major.$minor.$patch"
case "$RELEASETYPE" in
- beta)
- versionstr="$versionstr""beta"
+ release)
+ ;;
+ *)
+ versionstr="$versionstr$RELEASETYPE"
+ ;;
+ esac
+ if [ $gv -lt 900 ]; then
+ # pre-1.0: compatible with any other pre-1.0
+ verbose sed "
+ s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
+ s/^gameversion_min [0-9]*/gameversion_min 0/;
+ s/^gameversion_max [0-9]*/gameversion_max 9999/;
+ " < defaultXonotic.cfg > defaultXonotic.cfg.new
+ else
+ # >= 1.0
+ verbose sed "
+ s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
+ s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
+ s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
+ " < defaultXonotic.cfg > defaultXonotic.cfg.new
+ fi
+ mv defaultXonotic.cfg.new defaultXonotic.cfg
+ case "$RELEASETYPE" in
+ release)
+ echo "" >> defaultXonotic.cfg
+ echo "// nicer menu" >> defaultXonotic.cfg
+ echo "set menu_watermark \"\"" >> defaultXonotic.cfg
;;
esac
- verbose sed -i "
- s/^set g_xonoticversion [^ ]* /set g_xonoticversion $versionstr /;
- s/^gameversion_min [0-9]*/gameversion_min $(( ($gv / 100) * 100 - 100 ))/;
- s/^gameversion_max [0-9]*/gameversion_max $(( ($gv / 100) * 100 + 199 ))/;
- " defaultXonotic.cfg
(
verbose cd gfx/menu/luminos
+ verbose rm -f background_l2.tga background_ingame_l2.tga
verbose cp "$d0"/mediasource/gfx/menu/luminos_versionbuilder/background_l2.svg .
verbose "$d0"/mediasource/gfx/menu/luminos_versionbuilder/versionbuilder "$versionstr"
verbose rm background_l2.svg
done
fi
verbose export git_src_repo="$d0/$src" # skip hash-object
+ release_timereport "processed data"
verbose "$SELF" release-buildpk3-transform-$transform "Xonotic/temp"
- verbose mkzip "../../$dst" *
+ release_timereport "transformed data"
+ verbose mkzipr "../../$dst" *
+ release_timereport "zipped data"
verbose cd ../..
verbose rm -rf Xonotic/temp
+ release_timereport "deleted temp directory again"
;;
release-buildpk3s)
stamp=`cat Xonotic/stamp.txt`
done
;;
release-pack)
- verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
- verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '' raw '-raw' low '-low' lowdds '-lowdds'
- verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '' raw '-raw' low '-low' lowdds '-lowdds'
- verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
- verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir low ''
+ verbose "$SELF" release-buildpk3s data/font-nimbussansl.pk3dir raw ''
+ verbose "$SELF" release-buildpk3s data/font-xolonium.pk3dir raw ''
+ verbose "$SELF" release-buildpk3s data/xonotic-data.pk3dir normal '-high' low '-low' normaldds ''
+ verbose "$SELF" release-buildpk3s data/xonotic-maps.pk3dir normal '-high' low '-low' normaldds ''
+ verbose "$SELF" release-buildpk3s data/xonotic-music.pk3dir raw '' low '-low'
+ verbose "$SELF" release-buildpk3s data/xonotic-nexcompat.pk3dir normal '-high' normaldds ''
;;
release-pack-needsx11)
case "$DISPLAY" in
# exe and dll files do not need +x, so this makes them eligible for 7zip compression too
chmod a-x Xonotic/*.exe Xonotic/*.dll || true
# let's pass crypto import laws of some nasty countries
- crypto_libs=`find Xonotic -name \*d0_rijndael\*`
+ crypto_libs=`find Xonotic -name \*d0_rijndael\*.so -o -name \*d0_rijndael\*.dylib -o -name \*d0_rijndael\*.dll -o -name \*d0_rijndael\*.c`
if [ -n "$crypto_libs" ]; then
verbose mkzip Xonotic-$stamp-crypto.zip \
- $crypto_libs
+ $crypto_libs \
+ Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
rm -f $crypto_libs
fi
# build the archives
verbose mkzip Xonotic-$stamp-engine.zip \
Xonotic/*.dll \
+ Xonotic/bin32/*.dll \
Xonotic/bin64/*.dll \
Xonotic/*.app \
Xonotic/xonotic-* \
Xonotic/xonotic.exe \
- Xonotic/source/darkplaces/
+ Xonotic/source/darkplaces/ \
+ Xonotic/COPYING Xonotic/GPL-2 Xonotic/GPL-3
verbose cp Xonotic-$stamp-engine.zip Xonotic-$stamp-common.zip
verbose mkzip Xonotic-$stamp-common.zip \
Xonotic/source/fteqcc/ \
Xonotic/fteqcc \
Xonotic/server \
Xonotic/key_0.d0pk \
- Xonotic/data/font-nimbussansl-$stamp.pk3
+ Xonotic/data/font-nimbussansl-$stamp.pk3 \
+ Xonotic/data/font-xolonium-$stamp.pk3
verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp.zip
verbose mkzip0 Xonotic-$stamp.zip \
Xonotic/data/xonotic-$stamp-data.pk3 \
Xonotic/data/xonotic-$stamp-data-low.pk3 \
Xonotic/data/xonotic-$stamp-maps-low.pk3 \
Xonotic/data/xonotic-$stamp-music-low.pk3
- verbose cp Xonotic-$stamp-common.zip Xonotic-$stamp-lowdds.zip
- verbose mkzip0 Xonotic-$stamp-lowdds.zip \
- Xonotic/data/xonotic-$stamp-data-lowdds.pk3 \
- Xonotic/data/xonotic-$stamp-maps-lowdds.pk3 \
- Xonotic/data/xonotic-$stamp-music-low.pk3
verbose mv Xonotic-$stamp-common.zip Xonotic-$stamp-high.zip
+ verbose mkzip Xonotic-$stamp-high.zip \
+ Xonotic/mapping
verbose mkzip0 Xonotic-$stamp-high.zip \
- Xonotic/data/xonotic-$stamp-data-raw.pk3 \
- Xonotic/data/xonotic-$stamp-maps-raw.pk3 \
+ Xonotic/data/xonotic-$stamp-data-high.pk3 \
+ Xonotic/data/xonotic-$stamp-maps-high.pk3 \
Xonotic/data/xonotic-$stamp-music.pk3 \
- Xonotic/data/xonotic-$stamp-nexcompat.pk3
+ Xonotic/data/xonotic-$stamp-nexcompat-high.pk3
+ verbose mkzip Xonotic-$stamp-mappingsupport.zip \
+ Xonotic/mapping
+ verbose mkzip0 Xonotic-$stamp-mappingsupport.zip \
+ Xonotic/data/xonotic-$stamp-maps-low.pk3
;;
release)
verbose "$SELF" release-prepare
;;
*)
- echo "Usage:"
- echo " $SELF admin-merge [<branch>]"
- echo " $SELF branch <branch>"
- echo " $SELF branch <remote> <branch> [<srcbranch>]"
- echo " $SELF branches"
- echo " $SELF checkout|switch <branch>"
- echo " $SELF checkout|switch <remote>/<branch>"
- echo " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
- echo " $SELF clean --reclone"
- echo " $SELF compile [-c]"
- echo " $SELF each|foreach [-k] command..."
- echo " $SELF fix_upstream_rebase"
- echo " $SELF merge"
- echo " $SELF push|commit [-s]"
- echo " $SELF release"
- echo " $SELF restore-patches"
- echo " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
- echo " $SELF save-patches"
- echo " $SELF update-maps"
- echo " $SELF update|pull [-N]"
+ $ECHO "Usage:"
+ $ECHO " $SELF admin-merge [<branch>]"
+ $ECHO " $SELF branch <branch>"
+ $ECHO " $SELF branch <remote> <branch> [<srcbranch>]"
+ $ECHO " $SELF branches"
+ $ECHO " $SELF checkout|switch <branch>"
+ $ECHO " $SELF checkout|switch <remote>/<branch>"
+ $ECHO " $SELF clean [-m] [-f | -fu | -fU] [-r] [-D]"
+ $ECHO " $SELF clean --reclone"
+ $ECHO " $SELF compile [-c] [-r|-p] [-0] [sdl|glx|wgl|agl|dedicated]"
+ $ECHO " $SELF each|foreach [-k] command..."
+ $ECHO " $SELF fix_upstream_rebase"
+ $ECHO " $SELF keygen"
+ $ECHO " $SELF merge"
+ $ECHO " $SELF push|commit [-s]"
+ $ECHO " $SELF restore-patches"
+ $ECHO " $SELF run [sdl|glx|wgl|agl|dedicated] options..."
+ $ECHO " $SELF save-patches"
+ $ECHO " $SELF update-maps"
+ $ECHO " $SELF update|pull [-N] [-s | -h [-p] | -g [-p]] [-l de|nl|default]"
;;
esac