#!@KSH@ -p # # Either bash or ksh will be ok for this; requires (( )) arithmetic # (-p above just says to not parse $ENV file; makes it faster for # those of us who set $ENV) # # install files if they have changed by running 'cmp', then 'install' # as necessary. # # Optionally, can append a suffix before last existing suffix (if any) # # NOTE # We avoid using typical install(1M) programs since they have # large variability across systems and we also need to support ou # -V option. # So we just copy and chmod by hand. # # $Id$ # progname=`basename $0` #progname=${0##*/} # fast basename hack for ksh, bash USAGE=\ "usage: $progname [ -vmV ] file [ file ... ] dest-directory-or-file -v -- verbose -V suffix -- suffix to append to targets (before any . suffix) eg: -V _g would change 'foo' to 'foo_g' and 'libfoo.a' to 'libfoo_g.a' -m mode -- mode for new file(s)" fatal() { if [ "$1" ] then echo $* >&2 fi echo "$USAGE" 1>&2 exit 1 } # # process the options # verbose="" suffix="" mode="" while getopts vm:V: OPT do case "$OPT" in v) verbose="yes";; V) eval suffix=$OPTARG;; m) mode="$OPTARG";; *) fatal esac done shiftcount=`expr $OPTIND - 1` shift $shiftcount args=$* # # Separate source file(s) from dest directory or file # files="" dest="" for d in $args do files="$files $dest" dest=$d done if [ ! "$files" ] || [ ! "$dest" ] then fatal "missing files or invalid destination" fi # # Process the arguments # targets="" for f in $files do # leaf=`basename $f` leaf=${f##*/} # fast basename hack for ksh, bash target=$dest if [ -d $dest ] then # if we were given a suffix, then add it as appropriate if [ "$suffix" ] then case $f in *.*) # leaf=`echo $leaf | # /bin/sed "s/\([~\.]*\)\.\(.*\)$/\1$suffix.\2/"` # ksh,bash hack for above sed script leaf=${leaf%%.*}$suffix.${leaf#*.} [ "$verbose" = "yes" ] && echo "$progname: $f will be installed as $leaf" ;; *) leaf=$leaf$suffix;; esac fi target=$target/$leaf fi [ ! -r $f ] && fatal "can not read $f" if cmp -s $f $target then [ "$verbose" = "yes" ] && echo "'$f' not newer than '$target'" else [ "$verbose" = "yes" ] && echo "rm -f $target" rm -f $target echo "cp -p $f $target" cp -p $f $target || exit 1 targets="$targets $target" # keep list for chmod below fi done if [ "$mode" -a "$targets" ] then [ "$verbose" = "yes" ] && echo "chmod $mode $targets" chmod $mode $targets fi exit 0 # Local Variables: *** # mode:ksh *** # End: ***