summaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-03-17 15:36:04 +0000
committerpaltherr <paltherr@epfl.ch>2003-03-17 15:36:04 +0000
commit6dfc1be51708a5cf2531b2200cfe08c943179232 (patch)
tree020fda716047f634a8fde8e0eb935557efa0b683 /support
parent22c472cff569037c4b8ff87dbf8e8ae2b999a8d7 (diff)
downloadscala-6dfc1be51708a5cf2531b2200cfe08c943179232.tar.gz
scala-6dfc1be51708a5cf2531b2200cfe08c943179232.tar.bz2
scala-6dfc1be51708a5cf2531b2200cfe08c943179232.zip
- Added scripts
Diffstat (limited to 'support')
-rwxr-xr-xsupport/scripts/install10
-rw-r--r--support/scripts/install.sh125
-rwxr-xr-xsupport/scripts/mirror10
-rw-r--r--support/scripts/mirror.sh75
-rw-r--r--support/scripts/stdlib.sh77
5 files changed, 297 insertions, 0 deletions
diff --git a/support/scripts/install b/support/scripts/install
new file mode 100755
index 0000000000..e0f19ad9d3
--- /dev/null
+++ b/support/scripts/install
@@ -0,0 +1,10 @@
+#!/bin/bash
+########################################################-*-Shell-script-*-####
+# Install Command
+##############################################################################
+# $Id$
+
+source ${0%/*}/install.sh;
+install "$@"
+
+##############################################################################
diff --git a/support/scripts/install.sh b/support/scripts/install.sh
new file mode 100644
index 0000000000..0a3c6aef1d
--- /dev/null
+++ b/support/scripts/install.sh
@@ -0,0 +1,125 @@
+########################################################-*-Shell-script-*-####
+# Install Function
+##############################################################################
+# $Id$
+
+source ${0%/*}/stdlib.sh;
+
+##############################################################################
+# install
+
+function install-args() {
+ case "$1" in
+ --version ) echo "install (bash script) $version"; exit 0;;
+ -d ) directory="true"; return 1;;
+ --directory ) directory="true"; return 1;;
+ -D ) leading="true"; return 1;;
+ -o ) args-option-value owner "$@";;
+ --owner=* ) args-inline-value owner "$@";;
+ -g ) args-option-value group "$@";;
+ --group=* ) args-inline-value group "$@";;
+ -m ) args-option-value mode "$@";;
+ --mode=* ) args-inline-value mode "$@";;
+ -* ) args-option-unknown "$@";;
+ * ) args-append-array files "$@";;
+ esac;
+}
+
+function install-mkdir() {
+ local dstpath="$1"; shift 1;
+ if [ "$dstpath" != "." ]; then
+ run mkdir -p "$dstpath";
+ fi;
+}
+
+function install-copy() {
+ local srcfile="$1"; shift 1;
+ local dstfile="$1"; shift 1;
+ run cp "$srcfile" "$dstfile";
+}
+
+function install-attr() {
+ local file="$1";
+ if [ -n "$mode" ]; then
+ run chmod "$mode" "$file";
+ fi;
+ if [ -n "$owner" -a -n "$group" ]; then
+ run chmod "$owner:$group" "$file";
+ elif [ -n "$owner" ]; then
+ run chmod "$owner" "$file";
+ elif [ -n "$group" ]; then
+ run chmod "$USER:$group" "$file";
+ fi;
+}
+
+function install-dirs() {
+ while [ $# -gt 0 ]; do
+ local dstpath="$1"; shift 1;
+ install-mkdir "$dstpath";
+ install-attr "$dstpath";
+ done;
+}
+
+function install-file() {
+ local srcfile="$1"; shift 1;
+ local dstfile="$1"; shift 1;
+ local dstpath="`dirname "$dstfile"`";
+ if [ "$leading" == "true" ]; then
+ install-mkdir "$dstpath";
+ fi;
+ install-copy "$srcfile" "$dstfile";
+ install-attr "$dstfile";
+}
+
+function install-files() {
+ local dstpath="$1"; shift 1;
+ while [ $# -gt 0 ]; do
+ local srcfile="$1"; shift 1;
+ local dstfile="$dstpath/`basename "$srcfile"`";
+ install-copy "$srcfile" "$dstfile";
+ install-attr "$dstfile";
+ done;
+}
+
+function install() {
+ local version="1.00";
+ local directory="false";
+ local leading="false";
+ local owner="";
+ local group="";
+ local mode="";
+ local -a files;
+
+ args-loop "$FUNCNAME" "$@";
+
+ local count="${#files[@]}";
+ if [ $count -lt 1 ]; then
+ if [ "$directory" == "true" ]; then
+ abort "$FUNCNAME: missing target directory";
+ else
+ abort "$FUNCNAME: missing source file";
+ fi;
+ fi;
+
+ if [ "$directory" == "true" ]; then
+ install-dirs "${files[@]}";
+ else
+ if [ $count -lt 2 ]; then
+ abort "$FUNCNAME: missing destination";
+ fi;
+
+ local last="${files[$(($count-1))]}";
+ if [ -d "$last" ]; then
+ unset files[$(($count-1))];
+ install-files "$last" "${files[@]}";
+ elif [ $count -eq 2 ]; then
+ install-file "${files[@]}";
+ else
+ local text1="$FUNCNAME: installing multiple files, but last";
+ local text2="argument, \`$last' is not a directory";
+ abort "$text1 $text2";
+ fi;
+ fi;
+}
+
+##############################################################################
diff --git a/support/scripts/mirror b/support/scripts/mirror
new file mode 100755
index 0000000000..179582d1de
--- /dev/null
+++ b/support/scripts/mirror
@@ -0,0 +1,10 @@
+#!/bin/bash
+########################################################-*-Shell-script-*-####
+# Mirror Command
+##############################################################################
+# $Id$
+
+source ${0%/*}/mirror.sh;
+mirror "$@"
+
+##############################################################################
diff --git a/support/scripts/mirror.sh b/support/scripts/mirror.sh
new file mode 100644
index 0000000000..62ecdae950
--- /dev/null
+++ b/support/scripts/mirror.sh
@@ -0,0 +1,75 @@
+########################################################-*-Shell-script-*-####
+# Mirror Function
+##############################################################################
+# $Id$
+
+source ${0%/*}/install.sh;
+
+##############################################################################
+# mirror
+
+# usage: mirror [-C prefix] [install-options] [files] dstdir
+# first cds into <prefix>, then mirrors <files> into <dstdir>
+
+function mirror-args() {
+ case "$1" in
+# --version ) echo "install (bash script) $version"; exit 0;;
+ -C ) args-option-value prefix "$@";;
+ -o ) args-option-value owner "$@";;
+ --owner=* ) args-inline-value owner "$@";;
+ -g ) args-option-value group "$@";;
+ --group=* ) args-inline-value group "$@";;
+ -m ) args-option-value mode "$@";;
+ --mode=* ) args-inline-value mode "$@";;
+ -* ) args-option-unknown "$@";;
+ * ) args-append-array files "$@";;
+ esac;
+}
+
+function mirror-files() {
+ local prefix="$1"; shift 1;
+ local dstpath="$1"; shift 1;
+ while [ $# -gt 0 ]; do
+ local srcfile="$1"; shift 1;
+ local dstfile="$dstpath/$srcfile";
+ install "${instargs[@]}" "$prefix/$srcfile" "$dstfile";
+ done;
+}
+
+function mirror() {
+# local version="1.00";
+ local prefix=".";
+ local owner="";
+ local group="";
+ local mode="";
+ local -a files;
+
+ args-loop "$FUNCNAME" "$@";
+
+ if [ ! -d "$prefix" ]; then
+ abort "$FUNCNAME: could not find directory \`$prefix'";
+ fi;
+
+ local count="${#files[@]}";
+ if [ $count -lt 1 ]; then
+ abort "$FUNCNAME: missing target directory";
+ fi;
+
+ local -a instargs;
+ instargs[${#instargs[@]}]="-D";
+ if [ -n "$owner" ]; then
+ instargs[${#instargs[@]}]="--owner=$owner";
+ fi;
+ if [ -n "$group" ]; then
+ instargs[${#instargs[@]}]="--group=$group";
+ fi;
+ if [ -n "$mode" ]; then
+ instargs[${#instargs[@]}]="--mode=$mode";
+ fi;
+
+ local dstpath="${files[$(($count-1))]}";
+ unset files[$(($count-1))];
+ mirror-files "$prefix" "$dstpath" "${files[@]}";
+}
+
+##############################################################################
diff --git a/support/scripts/stdlib.sh b/support/scripts/stdlib.sh
new file mode 100644
index 0000000000..2a472f104a
--- /dev/null
+++ b/support/scripts/stdlib.sh
@@ -0,0 +1,77 @@
+########################################################-*-Shell-script-*-####
+# Bash Standard Library
+##############################################################################
+# $Id$
+
+function print() {
+ while [ $# -gt 0 ]; do
+ echo "$1";
+ shift 1;
+ done
+}
+
+function abort() {
+ print "$@" 1>&2;
+ exit 1;
+}
+
+function run() {
+ [ "$verbose" = "true" ] && echo "$@";
+ "$@" || exit $?;
+}
+
+##############################################################################
+
+# usage: args-abort <error>
+# abort argument processing with message <error>
+function args-abort() {
+ local error="$1";
+ shift 1;
+ abort "$args_script: $error" "$@";
+}
+
+# usage: args-loop <script> "$@"
+# process all arguments
+function args-loop() {
+ local args_script="$1"; shift 1;
+ while [ $# -gt 0 ]; do
+ $args_script-args "$@";
+ shift $?;
+ done;
+}
+
+# usage: args-option-unknown "$@"
+# <option> ... => abort "unknown <option>";
+function args-option-unknown() {
+ args-abort "unknown option $1";
+}
+
+# usage: args-append-array <array> "$@"
+# <argument> ... => <array>[${#<array>[@]}]=<argument>; shift 1;
+function args-append-array() {
+ local array="$1"; shift 1;
+ eval "$array[\${#$array[@]}]=\"\$1\"";
+ return 1;
+}
+
+# usage: args-option-value <value> "$@"
+# <option> <argument> ... => <value>=<argument>; shift 2;
+function args-option-value() {
+ local value="$1"; shift 1;
+ if [ $# -lt 2 ]; then
+ args-abort "missing argument for option $1";
+ fi;
+ eval "$value=\"\$2\"";
+ return 2;
+}
+
+# usage: args-inline-value <value> "$@"
+# <value-name>=<argument> ... => <value>=<argument>; shift 1;
+function args-inline-value() {
+ local value="$1"; shift 1;
+ local prefix="$value";
+ eval "$value=\"\${1#--$prefix=}\"";
+ return 1;
+}
+
+##############################################################################