grabc

Tool to identify pixel colors on X
git clone https://git.sinitax.com/muquit/grabc
Log | Files | Refs | README | Upstream | sfeed.txt

install-sh (5577B)


      1#! /bin/sh
      2#
      3# install - install a program, script, or datafile
      4# This comes from X11R5 (mit/util/scripts/install.sh).
      5#
      6# Copyright 1991 by the Massachusetts Institute of Technology
      7#
      8# Permission to use, copy, modify, distribute, and sell this software and its
      9# documentation for any purpose is hereby granted without fee, provided that
     10# the above copyright notice appear in all copies and that both that
     11# copyright notice and this permission notice appear in supporting
     12# documentation, and that the name of M.I.T. not be used in advertising or
     13# publicity pertaining to distribution of the software without specific,
     14# written prior permission.  M.I.T. makes no representations about the
     15# suitability of this software for any purpose.  It is provided "as is"
     16# without express or implied warranty.
     17#
     18# Calling this script install-sh is preferred over install.sh, to prevent
     19# `make' implicit rules from creating a file called install from it
     20# when there is no Makefile.
     21#
     22# This script is compatible with the BSD install script, but was written
     23# from scratch.  It can only install one file at a time, a restriction
     24# shared with many OS's install programs.
     25
     26
     27# set DOITPROG to echo to test this script
     28
     29# Don't use :- since 4.3BSD and earlier shells don't like it.
     30doit="${DOITPROG-}"
     31
     32
     33# put in absolute paths if you don't have them in your path; or use env. vars.
     34
     35mvprog="${MVPROG-mv}"
     36cpprog="${CPPROG-cp}"
     37chmodprog="${CHMODPROG-chmod}"
     38chownprog="${CHOWNPROG-chown}"
     39chgrpprog="${CHGRPPROG-chgrp}"
     40stripprog="${STRIPPROG-strip}"
     41rmprog="${RMPROG-rm}"
     42mkdirprog="${MKDIRPROG-mkdir}"
     43
     44transformbasename=""
     45transform_arg=""
     46instcmd="$mvprog"
     47chmodcmd="$chmodprog 0755"
     48chowncmd=""
     49chgrpcmd=""
     50stripcmd=""
     51rmcmd="$rmprog -f"
     52mvcmd="$mvprog"
     53src=""
     54dst=""
     55dir_arg=""
     56
     57while [ x"$1" != x ]; do
     58    case $1 in
     59	-c) instcmd="$cpprog"
     60	    shift
     61	    continue;;
     62
     63	-d) dir_arg=true
     64	    shift
     65	    continue;;
     66
     67	-m) chmodcmd="$chmodprog $2"
     68	    shift
     69	    shift
     70	    continue;;
     71
     72	-o) chowncmd="$chownprog $2"
     73	    shift
     74	    shift
     75	    continue;;
     76
     77	-g) chgrpcmd="$chgrpprog $2"
     78	    shift
     79	    shift
     80	    continue;;
     81
     82	-s) stripcmd="$stripprog"
     83	    shift
     84	    continue;;
     85
     86	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
     87	    shift
     88	    continue;;
     89
     90	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
     91	    shift
     92	    continue;;
     93
     94	*)  if [ x"$src" = x ]
     95	    then
     96		src=$1
     97	    else
     98		# this colon is to work around a 386BSD /bin/sh bug
     99		:
    100		dst=$1
    101	    fi
    102	    shift
    103	    continue;;
    104    esac
    105done
    106
    107if [ x"$src" = x ]
    108then
    109	echo "install:	no input file specified"
    110	exit 1
    111else
    112	true
    113fi
    114
    115if [ x"$dir_arg" != x ]; then
    116	dst=$src
    117	src=""
    118
    119	if [ -d $dst ]; then
    120		instcmd=:
    121	else
    122		instcmd=mkdir
    123	fi
    124else
    125
    126# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
    127# might cause directories to be created, which would be especially bad
    128# if $src (and thus $dsttmp) contains '*'.
    129
    130	if [ -f $src -o -d $src ]
    131	then
    132		true
    133	else
    134		echo "install:  $src does not exist"
    135		exit 1
    136	fi
    137
    138	if [ x"$dst" = x ]
    139	then
    140		echo "install:	no destination specified"
    141		exit 1
    142	else
    143		true
    144	fi
    145
    146# If destination is a directory, append the input filename; if your system
    147# does not like double slashes in filenames, you may need to add some logic
    148
    149	if [ -d $dst ]
    150	then
    151		dst="$dst"/`basename $src`
    152	else
    153		true
    154	fi
    155fi
    156
    157## this sed command emulates the dirname command
    158dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
    159
    160# Make sure that the destination directory exists.
    161#  this part is taken from Noah Friedman's mkinstalldirs script
    162
    163# Skip lots of stat calls in the usual case.
    164if [ ! -d "$dstdir" ]; then
    165defaultIFS='
    166'
    167IFS="${IFS-${defaultIFS}}"
    168
    169oIFS="${IFS}"
    170# Some sh's can't handle IFS=/ for some reason.
    171IFS='%'
    172set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
    173IFS="${oIFS}"
    174
    175pathcomp=''
    176
    177while [ $# -ne 0 ] ; do
    178	pathcomp="${pathcomp}${1}"
    179	shift
    180
    181	if [ ! -d "${pathcomp}" ] ;
    182        then
    183		$mkdirprog "${pathcomp}"
    184	else
    185		true
    186	fi
    187
    188	pathcomp="${pathcomp}/"
    189done
    190fi
    191
    192if [ x"$dir_arg" != x ]
    193then
    194	$doit $instcmd $dst &&
    195
    196	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
    197	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
    198	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
    199	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
    200else
    201
    202# If we're going to rename the final executable, determine the name now.
    203
    204	if [ x"$transformarg" = x ]
    205	then
    206		dstfile=`basename $dst`
    207	else
    208		dstfile=`basename $dst $transformbasename |
    209			sed $transformarg`$transformbasename
    210	fi
    211
    212# don't allow the sed command to completely eliminate the filename
    213
    214	if [ x"$dstfile" = x ]
    215	then
    216		dstfile=`basename $dst`
    217	else
    218		true
    219	fi
    220
    221# Make a temp file name in the proper directory.
    222
    223	dsttmp=$dstdir/#inst.$$#
    224
    225# Move or copy the file name to the temp name
    226
    227	$doit $instcmd $src $dsttmp &&
    228
    229	trap "rm -f ${dsttmp}" 0 &&
    230
    231# and set any options; do chmod last to preserve setuid bits
    232
    233# If any of these fail, we abort the whole thing.  If we want to
    234# ignore errors from any of these, just make sure not to ignore
    235# errors from the above "$doit $instcmd $src $dsttmp" command.
    236
    237	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
    238	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
    239	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
    240	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
    241
    242# Now rename the file to the real destination.
    243
    244	$doit $rmcmd -f $dstdir/$dstfile &&
    245	$doit $mvcmd $dsttmp $dstdir/$dstfile
    246
    247fi &&
    248
    249
    250exit 0