open-src/app/winsysck/sun-src/mkinstalldirs
author Jay Cotton <Jay.Cotton@Sun.COM>
Thu, 24 Jul 2008 13:07:37 -0700
changeset 472 c6afe0d6b651
permissions -rwxr-xr-x
6727043 Move winsysck to open source tree
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
472
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     1
#! /bin/sh
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     2
# mkinstalldirs --- make directory hierarchy
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     3
# Author: Noah Friedman <[email protected]>
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     4
# Created: 1993-05-16
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     5
# Public domain
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     6
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     7
errstatus=0
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     8
dirmode=""
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
     9
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    10
usage="\
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    11
Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    12
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    13
# process command line arguments
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    14
while test $# -gt 0 ; do
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    15
  case $1 in
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    16
    -h | --help | --h*)         # -h for help
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    17
      echo "$usage" 1>&2
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    18
      exit 0
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    19
      ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    20
    -m)                         # -m PERM arg
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    21
      shift
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    22
      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    23
      dirmode=$1
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    24
      shift
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    25
      ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    26
    --)                         # stop option processing
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    27
      shift
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    28
      break
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    29
      ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    30
    -*)                         # unknown option
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    31
      echo "$usage" 1>&2
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    32
      exit 1
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    33
      ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    34
    *)                          # first non-opt arg
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    35
      break
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    36
      ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    37
  esac
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    38
done
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    39
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    40
for file
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    41
do
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    42
  if test -d "$file"; then
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    43
    shift
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    44
  else
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    45
    break
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    46
  fi
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    47
done
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    48
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    49
case $# in
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    50
  0) exit 0 ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    51
esac
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    52
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    53
case $dirmode in
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    54
  '')
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    55
    if mkdir -p -- . 2>/dev/null; then
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    56
      echo "mkdir -p -- $*"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    57
      exec mkdir -p -- "$@"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    58
    fi
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    59
    ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    60
  *)
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    61
    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    62
      echo "mkdir -m $dirmode -p -- $*"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    63
      exec mkdir -m "$dirmode" -p -- "$@"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    64
    fi
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    65
    ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    66
esac
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    67
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    68
for file
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    69
do
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    70
  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    71
  shift
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    72
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    73
  pathcomp=
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    74
  for d
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    75
  do
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    76
    pathcomp="$pathcomp$d"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    77
    case $pathcomp in
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    78
      -*) pathcomp=./$pathcomp ;;
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    79
    esac
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    80
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    81
    if test ! -d "$pathcomp"; then
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    82
      echo "mkdir $pathcomp"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    83
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    84
      mkdir "$pathcomp" || lasterr=$?
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    85
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    86
      if test ! -d "$pathcomp"; then
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    87
  	errstatus=$lasterr
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    88
      else
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    89
  	if test ! -z "$dirmode"; then
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    90
	  echo "chmod $dirmode $pathcomp"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    91
    	  lasterr=""
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    92
  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    93
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    94
  	  if test ! -z "$lasterr"; then
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    95
  	    errstatus=$lasterr
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    96
  	  fi
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    97
  	fi
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    98
      fi
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
    99
    fi
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   100
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   101
    pathcomp="$pathcomp/"
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   102
  done
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   103
done
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   104
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   105
exit $errstatus
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   106
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   107
# Local Variables:
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   108
# mode: shell-script
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   109
# sh-indentation: 2
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   110
# End:
c6afe0d6b651 6727043 Move winsysck to open source tree
Jay Cotton <Jay.Cotton@Sun.COM>
parents:
diff changeset
   111
# mkinstalldirs ends here