diff options
author | paltherr <paltherr@epfl.ch> | 2003-03-17 15:36:04 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-03-17 15:36:04 +0000 |
commit | 6dfc1be51708a5cf2531b2200cfe08c943179232 (patch) | |
tree | 020fda716047f634a8fde8e0eb935557efa0b683 /support | |
parent | 22c472cff569037c4b8ff87dbf8e8ae2b999a8d7 (diff) | |
download | scala-6dfc1be51708a5cf2531b2200cfe08c943179232.tar.gz scala-6dfc1be51708a5cf2531b2200cfe08c943179232.tar.bz2 scala-6dfc1be51708a5cf2531b2200cfe08c943179232.zip |
- Added scripts
Diffstat (limited to 'support')
-rwxr-xr-x | support/scripts/install | 10 | ||||
-rw-r--r-- | support/scripts/install.sh | 125 | ||||
-rwxr-xr-x | support/scripts/mirror | 10 | ||||
-rw-r--r-- | support/scripts/mirror.sh | 75 | ||||
-rw-r--r-- | support/scripts/stdlib.sh | 77 |
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; +} + +############################################################################## |