aboutsummaryrefslogtreecommitdiff
path: root/tools/bison++/smart-install
diff options
context:
space:
mode:
Diffstat (limited to 'tools/bison++/smart-install')
-rw-r--r--tools/bison++/smart-install250
1 files changed, 250 insertions, 0 deletions
diff --git a/tools/bison++/smart-install b/tools/bison++/smart-install
new file mode 100644
index 000000000..5bfddeff8
--- /dev/null
+++ b/tools/bison++/smart-install
@@ -0,0 +1,250 @@
+#! /bin/sh
+# @(#) smart-install.sh ShScript env 1.5 94/09/13 14:03:30 (/u/icdc/rdt/tools/mgmake/SCCS/s.smart-install.sh)
+#
+# Nom du Fichier : smart-install.sh
+# Titre : |Titre|
+# Auteur: coetmeur
+# Date de creation : 01 Sep 94
+#
+# Description :
+# Document de reference : |doc|
+# Objet : |objet|
+#
+#
+#
+# historique :
+# |date| coetmeur |objet|
+#
+mycmdname=smart-install
+
+usage() {
+echo "usage: $mycmdname [<options>] [<file1> <file2>| <files...> <directory>/"
+echo " <file1> : source file"
+echo " <file2> : destination file"
+echo " <files...> : possibly empty list of source files"
+echo " <directory>/ : destination directory with '/' appended"
+echo "trace options: "
+echo " -trace : activate trace"
+echo " -traceonly : activate trace only, disactivate actions"
+echo " -echo : echo actions"
+echo " -quiet : reduce comment messages"
+echo " -usage : show this usage"
+echo "user options: "
+echo " -compare : don't copy if files are equals"
+echo " -used : return error code 1 if nothing is done"
+echo " -preserve : preserve date and flags in copy"
+echo " -apply <command>: apply a command on each file"
+echo " -owner <value> : change owner"
+echo " -group <value> : change group"
+echo " -mode <value> : change protection mode"
+echo " -rename <sed-subst-patterns> : change name of destination "
+echo " in destination directory. "
+echo " <sed-s-pattern> : pattern and replace parts "
+echo " of sed(1) 's' command. can add subdirectory."
+echo "examples: "
+echo " $mycmdname *.h -compare ../include/"
+echo " $mycmdname ../include/"
+echo " $mycmdname -preserve -group kmem -mode 2555 a.out ../bin/"
+echo " $mycmdname -mode 444 -apply 'ranlib -t' *.a ../lib/"
+echo " $mycmdname -rename '#^\\(.*\\)\\.\\([1-9l-p]\\)\\([a-z]*\\)\\.man\$#man\\2/\\1.\\2\\3#' \\"
+echo " *.man ../doc/man/"
+}
+
+badparameters() {
+echo "$mycmdname: $*" >&2
+usage
+exit 2
+}
+
+traceandshow() {
+echo " $@"
+"$@"
+}
+
+doit=""
+traceit=":"
+commentit="echo"
+dest=""
+sources=""
+compareopt=""
+modeopt=""
+groupopt=""
+owneropt=""
+destdir=""
+destisdir=""
+builddirlist=""
+preserveopt=""
+applyopt=""
+donestatus=0
+
+
+while [ "$1" ] ; do
+ case "$1" in
+ -mode)
+ if [ "$modeopt" -a "$modeopt" != "$2" ] ;
+ then badparameters "Ambiguous $1 options"; fi
+ modeopt="$2"
+ shift
+ ;;
+ -owner)
+ if [ "$owneropt" -a "$owneropt" != "$2" ] ;
+ then badparameters "Ambiguous $1 options"; fi
+ owneropt="$2"
+ shift
+ ;;
+ -group)
+ if [ "$groupopt" -a "$groupopt" != "$2" ] ;
+ then badparameters "Ambiguous $1 options"; fi
+ groupopt="$2"
+ shift
+ ;;
+ -apply)
+ if [ "$applyopt" -a "$applyopt" != "$2" ] ;
+ then badparameters "Ambiguous $1 options"; fi
+ applyopt="$2"
+ shift
+ ;;
+ -rename)
+ if [ "$renameopt" -a "$renameopt" != "$2" ] ;
+ then badparameters "Ambiguous $1 options"; fi
+ renameopt="$2"
+ shift
+ ;;
+ -traceonly)
+ doit="echo"
+ traceit="echo"
+ ;;
+ -trace)
+ doit="traceandshow"
+ traceit="echo"
+ ;;
+ -echo)
+ doit="traceandshow"
+ traceit=":"
+ ;;
+ -quiet)
+ commentit=":"
+ doit=""
+ traceit=":"
+ ;;
+ -preserve)
+ preserveopt="true"
+ ;;
+ -used)
+ donestatus=1
+ ;;
+ -compare)
+ compareopt="true"
+ ;;
+ -usage)
+ usage
+ exit 0
+ ;;
+ -*)
+ badparameters Unknown flag "$1"
+ ;;
+ */) sources="$sources $dest"
+ destdir=`dirname "$1."`
+ dest=""
+ destisdir="1$destisdir"
+ ;;
+ *)
+ sources="$sources $dest"
+ dest="$1"
+ ;;
+ esac
+ shift
+done
+set - $sources
+if [ 0$destisdir -gt 1 \
+ -o "$destisdir" -a "$dest" \
+ -o ! "$destisdir" -a "$renameopt" \
+ -o ! "$destisdir" -a $# -ne 1 ] ; then
+ badparameters Bad parameters
+fi
+if [ "$dest" ] ; then destdir=`dirname $dest` ; fi
+if [ "$preserveopt" ] ; then cpcmd="cp -p" ; else cpcmd="cp" ; fi
+
+
+$traceit " 0=<$0>"
+$traceit " mycmdname=<$mycmdname>"
+$traceit " modeopt=<$modeopt>"
+$traceit " owneropt=<$owneropt>"
+$traceit " groupopt=<$groupopt>"
+$traceit " compareopt=<$compareopt>"
+$traceit " preserveopt=<$preserveopt>"
+$traceit " applyopt=<$applyopt>"
+$traceit " cpcmd=<$cpcmd>"
+$traceit " sources=<$sources>"
+$traceit " dest=<$dest>"
+$traceit " destisdir=<$destisdir>"
+$traceit " destdir=<$destdir>"
+
+
+while [ "$1" ] ; do
+ sourcefile="$1"
+ shift
+ sourcename=`basename "$sourcefile"`
+ $traceit " sourcefile=<$sourcefile>"
+ $traceit " sourcename=<$sourcename>"
+ if [ ! -r $sourcefile ] ; then
+ echo "cannot read '$sourcefile'" >&2
+ exit 3
+ fi
+ if [ "$destisdir" ] ; then
+ if [ "$renameopt" ] ; then
+ if destsubname=`echo $sourcename | sed -e "s$renameopt"` &&
+ [ "$destsubname" ] ;
+ then
+ dest="$destdir/$destsubname"
+ destsubdir=`dirname $dest`
+ destname=`basename $dest`
+ $traceit " destsubname=<$destsubname>"
+ else
+ badparameters "Cannot rename '$sourcename' with: sed -e 's$renameopt'"
+ fi
+ else
+ destname="$sourcename"
+ destsubdir="$destdir"
+ dest="$destdir/$destname"
+ fi
+ else
+ destname=`basename $dest`
+ destsubdir=`dirname $dest`
+ fi
+ $traceit " dest=<$dest>"
+ $traceit " destname=<$destname>"
+ $traceit " destsubdir=<$destsubdir>"
+ builddirlist=""
+ subdir="$destsubdir"
+ while [ ! -d "$subdir" ] ; do
+ builddirlist="$subdir $builddirlist"
+ subdir=`dirname "$subdir"`
+ done
+ $traceit " builddirlist=<$builddirlist>"
+ [ ! "$builddirlist" ] || $doit mkdir $builddirlist || exit 3 ;
+
+ if [ "$compareopt" -a -r "$dest" ] && cmp -s $sourcefile $dest ; then
+ # $commentit "${mycmdname}: $sourcefile == $dest"
+ continue;
+ fi
+ donestatus=0
+ desttmp="$destsubdir/#$$#$destname"
+ $traceit " desttmp=<$desttmp>"
+ $commentit "${mycmdname}: $sourcefile -> $dest"
+ if $doit $cpcmd "$sourcefile" "$desttmp" &&
+ trap "$doit rm -f $desttmp" 0 &&
+ if [ "$applyopt" -a ! -w "$desttmp" ] ;
+ then $doit chmod u+w "$desttmp" 2>/dev/null || true ; fi &&
+ if [ "$applyopt" ] ; then $doit $applyopt "$desttmp" ; fi &&
+ if [ "$owneropt" ] ; then $doit chown $owneropt "$desttmp" ; fi &&
+ if [ "$groupopt" ] ; then $doit chgrp $groupopt "$desttmp" ; fi &&
+ if [ "$modeopt" ] ; then $doit chmod $modeopt "$desttmp" ; fi &&
+ $doit mv -f "$desttmp" "$dest" &&
+ trap 0 ; then : ;
+ else
+ echo "problem installing $sourcefile into $dest" >&2
+ exit 3; fi
+done
+
+exit $donestatus