]> git.xonotic.org Git - xonotic/xonotic.git/blobdiff - all
start of a release build system (doesn't do much yet)
[xonotic/xonotic.git] / all
diff --git a/all b/all
index b7f404122d551fa9c489129af5ffd3617ffb5fcd..80a43e6525d962f30e8cee3ce505d9b39594ed9e 100755 (executable)
--- a/all
+++ b/all
@@ -240,29 +240,46 @@ case "$cmd" in
                        fi
                done
                ;;
+       update-maps)
+               misc/tools/xonotic-map-compiler-autobuild download
+               ;;
        checkout|switch)
                remote=$1
                branch=$2
                if [ -z "$branch" ]; then
-                       branch=$remote
-                       remote=origin
+                       case "$remote" in
+                               origin/*)
+                                       branch=${remote#origin/}
+                                       remote=origin
+                                       ;;
+                               *)
+                                       branch=$remote
+                                       remote=origin
+                                       ;;
+                       esac
                fi
                exists=false
                for d in $repos; do
                        enter "$d0/$d" verbose
-                       if [ -z "$branch" ]; then
-                               b=`repobranch "$d"`
-                       else
-                               b=$branch
-                       fi
-                       if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
+                       b=$branch
+                       if [ -n "$b" ] && git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
                                exists=true
                                verbose git checkout "$b"
-                       elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
+                       elif [ -n "$b" ] && git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
                                exists=true
                                verbose git checkout --track -b "$b" "$remote/$b"
                        else
-                               verbose git checkout "`repobranch "$d"`"
+                               b=`repobranch "$d"`
+                               if git rev-parse "refs/heads/$b" >/dev/null 2>&1; then
+                                       exists=true
+                                       verbose git checkout "$b"
+                               elif git rev-parse "refs/remotes/$remote/$b" >/dev/null 2>&1; then
+                                       exists=true
+                                       verbose git checkout --track -b "$b" "$remote/$b"
+                               else
+                                       echo "WTF? Not even branch $b doesn't exist in $d"
+                                       exit 1
+                               fi
                        fi
                        cd "$d00"
                        checkself "$cmd" "$@"
@@ -315,35 +332,6 @@ case "$cmd" in
                fi
                ;;
        branches)
-               for d in $repos; do
-                       enter "$d0/$d"
-                       echo "In $d:"
-                       git branch -a -v -v | cut -c 3- | while read -r BRANCH REV UPSTREAM TEXT; do
-                               case "$UPSTREAM" in
-                                       \[*)
-                                               UPSTREAM=${UPSTREAM#\[}
-                                               UPSTREAM=${UPSTREAM%\]}
-                                               UPSTREAM=${UPSTREAM%:*}
-                                               ;;
-                                       *)
-                                               TEXT="$UPSTREAM $TEXT"
-                                               UPSTREAM=
-                                               ;;
-                               esac
-                               if [ x"$REV" = x"->" ]; then
-                                       continue
-                               fi
-                               BRANCH=${BRANCH#remotes/}
-                               echo -n "  $BRANCH"
-                               if [ -n "$UPSTREAM" ]; then
-                                       echo -n " (tracking $UPSTREAM)"
-                               fi
-                               #echo " $TEXT"
-                               echo
-                       done
-               done
-               ;;
-       branches_short)
                for d in $repos; do
                        cd "$d0/$d" # am in a pipe, shouldn't use enter
                        git branch -a -v -v | cut -c 3- | sed "s,^,$d ,"
@@ -352,6 +340,9 @@ case "$cmd" in
                        branches_list=
                        # branches_repos_*=
                        while read -r d BRANCH REV UPSTREAM TEXT; do
+                               if [ x"$BRANCH" = x"`repobranch "$d"`" ]; then
+                                       continue
+                               fi
                                case "$UPSTREAM" in
                                        \[*)
                                                UPSTREAM=${UPSTREAM#\[}
@@ -370,13 +361,21 @@ case "$cmd" in
                                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:$UPSTREAM"
+                               case "$UPSTREAM" in
+                                       '')
+                                               r="$r $d"
+                                               ;;
+                                       *)
+                                               r="$r $d:$UPSTREAM"
+                                               ;;
+                               esac
                                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." "_"`
                                eval "r=\$branches_repos_$ID"
-                               echo "$BRANCH: $r"
+                               printf "%-60s %s\n" "$BRANCH" "$r"
+                               #echo "$BRANCH: $r"
                        done
                }
                ;;
@@ -438,6 +437,9 @@ case "$cmd" in
                        if [ -z "$CC" ]; then
                                export CC=gcc
                        fi
+               elif [ x"`uname`" = x"Darwin" ] && ( [ -d /Library/Frameworks/SDL.framework ] || [ -d $(HOME)/Library/Frameworks/SDL.framework ] ); then
+                       # AGL is broken in Snow Leopard, so let's default to SDL if it is available.
+                       TARGETS="sv-debug sdl-debug"
                else
                        TARGETS="sv-debug cl-debug sdl-debug"
                fi
@@ -498,13 +500,17 @@ case "$cmd" in
                for T in $TARGETS; do
                        verbose make $MAKEFLAGS "$@" "$T"
                done
+               verbose "$SELF" update-maps
+               ;;
+       makebuild)
+               
                ;;
        run)
                if [ -n "$WE_HATE_OUR_USERS" ]; then
                        client=
                        export PATH="$d0/misc/buildfiles/w32:$PATH"
                elif [ x"`uname`" = x"Darwin" ]; then
-                       export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Nexuiz-SDL.app/Contents/MacOS"
+                       export DYLD_LIBRARY_PATH="$d0/misc/buildfiles/osx/Xonotic-SDL.app/Contents/MacOS"
                        client=-sdl
                else
                        client=-sdl
@@ -530,7 +536,7 @@ case "$cmd" in
                set -- "darkplaces/darkplaces$client" -nexuiz -customgamename Xonotic -customgamedirname1 data -customgamedirname2 "" -customgamescreenshotname xonotic -customgameuserdirname xonotic "$@"
 
                # if pulseaudio is running: USE IT
-               if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ]; then
+               if [ -z "$SDL_AUDIODRIVER" ] && ! [ -n "$WE_HATE_OUR_USERS" ] && ! [ x"`uname`" = x"Darwin" ]; then
                        if ps -C pulseaudio >/dev/null; then
                                if ldd /usr/lib/libSDL.so 2>/dev/null | grep pulse >/dev/null; then
                                        export SDL_AUDIODRIVER=pulse
@@ -544,9 +550,18 @@ case "$cmd" in
                "$@"
                ;;
        each|foreach)
+               keep_going=false
+               if [ x"$1" = x"-k" ]; then
+                       keep_going=true
+                       shift
+               fi
                for d in $repos; do
                        if verbose cd "$d0/$d"; then
-                               verbose "$@"
+                               if $keep_going; then
+                                       verbose "$@" || true
+                               else
+                                       verbose "$@"
+                               fi
                                cd "$d0"
                        fi
                done
@@ -667,27 +682,37 @@ case "$cmd" in
                                                ;;
                                esac
                                reportecho "  Branch $ref:"
-                               note=`git notes --ref "refs/notes/admin-merge" show "$ref" 2>/dev/null || true`
-                               if [ -n "$note" ]; then
+                               note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
+                               logdata=`git log --color "$base".."$ref"`
+                               diffdata=`git diff --color --find-copies-harder --ignore-space-change "$base"..."$ref"`
+                               if [ -z "$logdata" ]; then
+                                       reportecho4 "--> not merging, no changes vs master"
+                               elif [ -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
+                                               git push origin :"${ref#refs/remotes/origin/}"
+                                               reportecho4 "--> branch deleted"
+                                       fi
+                               elif [ -n "$note" ]; then
                                        reportdo4 echo "$note"
                                        reportecho4 "--> not merging, already had this one rejected before"
-                               elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ git log --color "$base".."$ref"; git diff --color --find-copies-harder --ignore-space-change "$base"..."$ref"; } | less -r'; then
+                               elif yesno "Branch \"$ref\" may want to get merged. Do it?" '{ echo "$logdata"; echo "$diffdata"; } | less -r'; then
                                        git checkout "$base"
                                        org=`git rev-parse HEAD`
                                        if ! git merge "$ref" 2>&1 | tee "$t"; then
                                                git reset --hard "$org"
-                                               git notes --ref "refs/notes/admin-merge" add -m "Merge failed:$LF`cat "$t"`" "$ref"
+                                               GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Merge failed:$LF`cat "$t"`" "$ref"
                                                reportdo4 cat "$t"
                                                reportecho4 "--> merge failed"
                                        elif ! "$SELF" compile 2>&1 | tee "$t"; then
                                                git reset --hard "$org"
-                                               git notes --ref "refs/notes/admin-merge" add -m "Compile failed:$LF`cat "$t"`" "$ref"
+                                               GIT_NOTES_REF=refs/notes/admin-merge git notes edit -m "Compile failed:$LF`cat "$t"`" "$ref"
                                                reportdo4 cat "$t"
                                                reportecho4 "--> compile failed"
                                        elif ! yesno "Still merge \"$ref\" into `git symbolic-ref HEAD` of $d? Maybe you want to test first."; then
                                                git reset --hard "$org"
-                                               git notes --ref "refs/notes/admin-merge" add "$ref"
-                                               note=`git notes --ref "refs/notes/admin-merge" show "$ref" 2>/dev/null || true`
+                                               git notes edit "$ref"
+                                               note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
                                                reportdo4 echo "$note"
                                                reportecho4 "--> test failed"
                                        else
@@ -710,8 +735,8 @@ case "$cmd" in
                                                fi
                                        fi
                                else
-                                       git notes --ref "refs/notes/admin-merge" add "$ref"
-                                       note=`git notes --ref "refs/notes/admin-merge" show "$ref" 2>/dev/null || true`
+                                       GIT_NOTES_REF=refs/notes/admin-merge git notes edit "$ref"
+                                       note=`GIT_NOTES_REF=refs/notes/admin-merge git notes show "$ref" 2>/dev/null || true`
                                        if [ -n "$note" ]; then
                                                reportdo4 echo "$note"
                                                reportecho4 "--> rejected"
@@ -726,6 +751,52 @@ case "$cmd" in
                rm -f "$t"
                echo "$report" | ssh nexuiz@rm.endoftheinternet.org cat '>>' public_html/xonotic-merge-notes.txt
                ;;
+
+       # release building goes here
+       release-mkdir)
+               mkdir -p Xonotic/"$1"
+               ;;
+       release-prepare)
+               "$SELF" each git clean -fxd
+               mkdir -p Xonotic
+               "$SELF" release-copy Docs/
+               "$SELF" release-copy misc/
+               "$SELF" release-copy server/
+               "$SELF" release-copy xonotic-linux-glx.sh
+               "$SELF" release-copy xonotic-linux-sdl.sh
+               "$SELF" release-mkdir data
+               ;;
+       release-gamedata)
+               "$SELF" release-copy data/font-dejavu.pk3dir/
+               "$SELF" release-copy data/xonotic-data.pk3dir/
+               "$SELF" release-copy data/xonotic-maps.pk3dir/
+               "$SELF" release-copy data/xonotic-music.pk3dir/
+               "$SELF" release-copy data/xonotic-nexcompat.pk3dir/
+               ;;
+       release-copy)
+               rsync --exclude=.git -vaSHPAX "$1" Xonotic/"$1"
+               ;;
+       release-engine)
+               mv Xonotic/misc/buildfiles/w32/* Xonotic/
+               mv Xonotic/misc/buildfiles/osx/* Xonotic/
+               ;;
+       release-pack)
+               # recompress, and edit
+               ;;
+       release-maps)
+               "$SELF" update-maps
+               ;;
+       release-finish)
+               ;;
+       release)
+               "$SELF" release-prepare
+               "$SELF" release-engine
+               "$SELF" release-gamedata
+               "$SELF" release-maps
+               "$SELF" release-finish
+               "$SELF" release-pack
+               ;;
+
        *)
                echo "Usage:"
                echo "  $SELF pull"