summaryrefslogtreecommitdiff
path: root/package/upgrade
diff options
context:
space:
mode:
Diffstat (limited to 'package/upgrade')
-rwxr-xr-xpackage/upgrade109
1 files changed, 109 insertions, 0 deletions
diff --git a/package/upgrade b/package/upgrade
new file mode 100755
index 0000000..cc3ead0
--- /dev/null
+++ b/package/upgrade
@@ -0,0 +1,109 @@
+#!/bin/sh
+shout() { echo "upgrade: $@" >&2; }
+barf() { shout "fatal: $@"; exit 111; }
+safe() { "$@" || barf "cannot $@"; }
+
+umask 022
+[ -d package ] || barf "no package directory"
+[ -d src ] || barf "no src directory"
+
+for i in `sed -e '/^it-/!d' -e 's/^it-//' < compile/it=d`
+do
+ all="$all $i"
+done
+usage() { shout "usage: package/upgrade [ [-]$all ]"; exit 100; }
+targets=""
+if [ $# -eq 0 ]
+then
+ for i in $all
+ do
+ targets="$all"
+ done
+else
+ if [ "$1" = "-" ]
+ then
+ shift
+ suppress=":"
+ for i in ${1+"$@"}
+ do
+ case "$all " in
+ *\ $i\ *)
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ suppress="$suppress$i:"
+ done
+ for i in $all
+ do
+ case "$suppress" in
+ *:$i:*)
+ ;;
+ *)
+ targets="$targets $i"
+ ;;
+ esac
+ done
+ else
+ for i in ${1+"$@"}
+ do
+ case "$all " in
+ *\ $i\ *)
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ targets="$targets $i"
+ done
+ fi
+fi
+
+[ "X$targets" = "X" ] && barf "no targets"
+
+version="`head -1 package/version`"
+here="`pwd`"
+command="`echo $here | sed -e 's/-'$version'$//'`/command"
+package="`basename $here | sed -e 's/-'$version'$//'`"
+echo "symlink $package -> $package-$version"
+safe rm -f $package
+safe ln -s $package-$version $package
+safe mv -f $package ..
+
+commands=
+for i in $targets
+do
+ commands="$commands `cat package/commands-$i`"
+done
+
+if [ -r package/command-cp ]
+then
+ for i in `sed -e '/^$/q' < package/command-cp`
+ do
+ echo "copying commands into $i"
+ safe mkdir -p $i
+ for j in $commands
+ do
+ safe rm -f $i/$j'{new}'
+ safe cp -p command/$j $i/$j'{new}'
+ safe mv -f $i/$j'{new}' $i/$j
+ done
+ done
+fi
+
+if [ -r package/command-ln ]
+then
+ for i in `sed -e '/^$/q' < package/command-ln`
+ do
+ echo "linking commands into $i"
+ safe mkdir -p $i
+ for j in $commands
+ do
+ safe rm -f $i/$j'{new}'
+ safe ln -s $command/$j $i/$j'{new}'
+ safe mv -f $i/$j'{new}' $i/$j
+ done
+ done
+fi
+