10bd0e222Smrg#! /bin/sh
20bd0e222Smrg# mkinstalldirs --- make directory hierarchy
30bd0e222Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu>
40bd0e222Smrg# Created: 1993-05-16
50bd0e222Smrg# Public domain
60bd0e222Smrg
70bd0e222Smrgerrstatus=0
80bd0e222Smrgdirmode=""
90bd0e222Smrg
100bd0e222Smrgusage="\
110bd0e222SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
120bd0e222Smrg
130bd0e222Smrg# process command line arguments
140bd0e222Smrgwhile test $# -gt 0 ; do
150bd0e222Smrg  case $1 in
160bd0e222Smrg    -h | --help | --h*)         # -h for help
170bd0e222Smrg      echo "$usage" 1>&2
180bd0e222Smrg      exit 0
190bd0e222Smrg      ;;
200bd0e222Smrg    -m)                         # -m PERM arg
210bd0e222Smrg      shift
220bd0e222Smrg      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
230bd0e222Smrg      dirmode=$1
240bd0e222Smrg      shift
250bd0e222Smrg      ;;
260bd0e222Smrg    --)                         # stop option processing
270bd0e222Smrg      shift
280bd0e222Smrg      break
290bd0e222Smrg      ;;
300bd0e222Smrg    -*)                         # unknown option
310bd0e222Smrg      echo "$usage" 1>&2
320bd0e222Smrg      exit 1
330bd0e222Smrg      ;;
340bd0e222Smrg    *)                          # first non-opt arg
350bd0e222Smrg      break
360bd0e222Smrg      ;;
370bd0e222Smrg  esac
380bd0e222Smrgdone
390bd0e222Smrg
400bd0e222Smrgfor file
410bd0e222Smrgdo
420bd0e222Smrg  if test -d "$file"; then
430bd0e222Smrg    shift
440bd0e222Smrg  else
450bd0e222Smrg    break
460bd0e222Smrg  fi
470bd0e222Smrgdone
480bd0e222Smrg
490bd0e222Smrgcase $# in
500bd0e222Smrg  0) exit 0 ;;
510bd0e222Smrgesac
520bd0e222Smrg
530bd0e222Smrgcase $dirmode in
540bd0e222Smrg  '')
550bd0e222Smrg    if mkdir -p -- . 2>/dev/null; then
560bd0e222Smrg      echo "mkdir -p -- $*"
570bd0e222Smrg      exec mkdir -p -- "$@"
580bd0e222Smrg    fi
590bd0e222Smrg    ;;
600bd0e222Smrg  *)
610bd0e222Smrg    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
620bd0e222Smrg      echo "mkdir -m $dirmode -p -- $*"
630bd0e222Smrg      exec mkdir -m "$dirmode" -p -- "$@"
640bd0e222Smrg    fi
650bd0e222Smrg    ;;
660bd0e222Smrgesac
670bd0e222Smrg
680bd0e222Smrgfor file
690bd0e222Smrgdo
700bd0e222Smrg  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
710bd0e222Smrg  shift
720bd0e222Smrg
730bd0e222Smrg  pathcomp=
740bd0e222Smrg  for d
750bd0e222Smrg  do
760bd0e222Smrg    pathcomp="$pathcomp$d"
770bd0e222Smrg    case $pathcomp in
780bd0e222Smrg      -*) pathcomp=./$pathcomp ;;
790bd0e222Smrg    esac
800bd0e222Smrg
810bd0e222Smrg    if test ! -d "$pathcomp"; then
820bd0e222Smrg      echo "mkdir $pathcomp"
830bd0e222Smrg
840bd0e222Smrg      mkdir "$pathcomp" || lasterr=$?
850bd0e222Smrg
860bd0e222Smrg      if test ! -d "$pathcomp"; then
870bd0e222Smrg  	errstatus=$lasterr
880bd0e222Smrg      else
890bd0e222Smrg  	if test ! -z "$dirmode"; then
900bd0e222Smrg	  echo "chmod $dirmode $pathcomp"
910bd0e222Smrg    	  lasterr=""
920bd0e222Smrg  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
930bd0e222Smrg
940bd0e222Smrg  	  if test ! -z "$lasterr"; then
950bd0e222Smrg  	    errstatus=$lasterr
960bd0e222Smrg  	  fi
970bd0e222Smrg  	fi
980bd0e222Smrg      fi
990bd0e222Smrg    fi
1000bd0e222Smrg
1010bd0e222Smrg    pathcomp="$pathcomp/"
1020bd0e222Smrg  done
1030bd0e222Smrgdone
1040bd0e222Smrg
1050bd0e222Smrgexit $errstatus
1060bd0e222Smrg
1070bd0e222Smrg# Local Variables:
1080bd0e222Smrg# mode: shell-script
1090bd0e222Smrg# sh-indentation: 2
1100bd0e222Smrg# End:
1110bd0e222Smrg# mkinstalldirs ends here
112