11cc8c64fSmrg#! /bin/sh
21cc8c64fSmrg# mkinstalldirs --- make directory hierarchy
31cc8c64fSmrg# Author: Noah Friedman <friedman@prep.ai.mit.edu>
41cc8c64fSmrg# Created: 1993-05-16
51cc8c64fSmrg# Public domain
61cc8c64fSmrg
71cc8c64fSmrgerrstatus=0
81cc8c64fSmrgdirmode=""
91cc8c64fSmrg
101cc8c64fSmrgusage="\
111cc8c64fSmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
121cc8c64fSmrg
131cc8c64fSmrg# process command line arguments
141cc8c64fSmrgwhile test $# -gt 0 ; do
151cc8c64fSmrg  case $1 in
161cc8c64fSmrg    -h | --help | --h*)         # -h for help
171cc8c64fSmrg      echo "$usage" 1>&2
181cc8c64fSmrg      exit 0
191cc8c64fSmrg      ;;
201cc8c64fSmrg    -m)                         # -m PERM arg
211cc8c64fSmrg      shift
221cc8c64fSmrg      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
231cc8c64fSmrg      dirmode=$1
241cc8c64fSmrg      shift
251cc8c64fSmrg      ;;
261cc8c64fSmrg    --)                         # stop option processing
271cc8c64fSmrg      shift
281cc8c64fSmrg      break
291cc8c64fSmrg      ;;
301cc8c64fSmrg    -*)                         # unknown option
311cc8c64fSmrg      echo "$usage" 1>&2
321cc8c64fSmrg      exit 1
331cc8c64fSmrg      ;;
341cc8c64fSmrg    *)                          # first non-opt arg
351cc8c64fSmrg      break
361cc8c64fSmrg      ;;
371cc8c64fSmrg  esac
381cc8c64fSmrgdone
391cc8c64fSmrg
401cc8c64fSmrgfor file
411cc8c64fSmrgdo
421cc8c64fSmrg  if test -d "$file"; then
431cc8c64fSmrg    shift
441cc8c64fSmrg  else
451cc8c64fSmrg    break
461cc8c64fSmrg  fi
471cc8c64fSmrgdone
481cc8c64fSmrg
491cc8c64fSmrgcase $# in
501cc8c64fSmrg  0) exit 0 ;;
511cc8c64fSmrgesac
521cc8c64fSmrg
531cc8c64fSmrgcase $dirmode in
541cc8c64fSmrg  '')
551cc8c64fSmrg    if mkdir -p -- . 2>/dev/null; then
561cc8c64fSmrg      echo "mkdir -p -- $*"
571cc8c64fSmrg      exec mkdir -p -- "$@"
581cc8c64fSmrg    fi
591cc8c64fSmrg    ;;
601cc8c64fSmrg  *)
611cc8c64fSmrg    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
621cc8c64fSmrg      echo "mkdir -m $dirmode -p -- $*"
631cc8c64fSmrg      exec mkdir -m "$dirmode" -p -- "$@"
641cc8c64fSmrg    fi
651cc8c64fSmrg    ;;
661cc8c64fSmrgesac
671cc8c64fSmrg
681cc8c64fSmrgfor file
691cc8c64fSmrgdo
701cc8c64fSmrg  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
711cc8c64fSmrg  shift
721cc8c64fSmrg
731cc8c64fSmrg  pathcomp=
741cc8c64fSmrg  for d
751cc8c64fSmrg  do
761cc8c64fSmrg    pathcomp="$pathcomp$d"
771cc8c64fSmrg    case $pathcomp in
781cc8c64fSmrg      -*) pathcomp=./$pathcomp ;;
791cc8c64fSmrg    esac
801cc8c64fSmrg
811cc8c64fSmrg    if test ! -d "$pathcomp"; then
821cc8c64fSmrg      echo "mkdir $pathcomp"
831cc8c64fSmrg
841cc8c64fSmrg      mkdir "$pathcomp" || lasterr=$?
851cc8c64fSmrg
861cc8c64fSmrg      if test ! -d "$pathcomp"; then
871cc8c64fSmrg  	errstatus=$lasterr
881cc8c64fSmrg      else
891cc8c64fSmrg  	if test ! -z "$dirmode"; then
901cc8c64fSmrg	  echo "chmod $dirmode $pathcomp"
911cc8c64fSmrg    	  lasterr=""
921cc8c64fSmrg  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
931cc8c64fSmrg
941cc8c64fSmrg  	  if test ! -z "$lasterr"; then
951cc8c64fSmrg  	    errstatus=$lasterr
961cc8c64fSmrg  	  fi
971cc8c64fSmrg  	fi
981cc8c64fSmrg      fi
991cc8c64fSmrg    fi
1001cc8c64fSmrg
1011cc8c64fSmrg    pathcomp="$pathcomp/"
1021cc8c64fSmrg  done
1031cc8c64fSmrgdone
1041cc8c64fSmrg
1051cc8c64fSmrgexit $errstatus
1061cc8c64fSmrg
1071cc8c64fSmrg# Local Variables:
1081cc8c64fSmrg# mode: shell-script
1091cc8c64fSmrg# sh-indentation: 2
1101cc8c64fSmrg# End:
1111cc8c64fSmrg# mkinstalldirs ends here
112