14ecf19b2Smrg#! /bin/sh
24ecf19b2Smrg# mkinstalldirs --- make directory hierarchy
34ecf19b2Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu>
44ecf19b2Smrg# Created: 1993-05-16
54ecf19b2Smrg# Public domain
64ecf19b2Smrg
74ecf19b2Smrgerrstatus=0
84ecf19b2Smrgdirmode=""
94ecf19b2Smrg
104ecf19b2Smrgusage="\
114ecf19b2SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
124ecf19b2Smrg
134ecf19b2Smrg# process command line arguments
144ecf19b2Smrgwhile test $# -gt 0 ; do
154ecf19b2Smrg  case $1 in
164ecf19b2Smrg    -h | --help | --h*)         # -h for help
174ecf19b2Smrg      echo "$usage" 1>&2
184ecf19b2Smrg      exit 0
194ecf19b2Smrg      ;;
204ecf19b2Smrg    -m)                         # -m PERM arg
214ecf19b2Smrg      shift
224ecf19b2Smrg      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
234ecf19b2Smrg      dirmode=$1
244ecf19b2Smrg      shift
254ecf19b2Smrg      ;;
264ecf19b2Smrg    --)                         # stop option processing
274ecf19b2Smrg      shift
284ecf19b2Smrg      break
294ecf19b2Smrg      ;;
304ecf19b2Smrg    -*)                         # unknown option
314ecf19b2Smrg      echo "$usage" 1>&2
324ecf19b2Smrg      exit 1
334ecf19b2Smrg      ;;
344ecf19b2Smrg    *)                          # first non-opt arg
354ecf19b2Smrg      break
364ecf19b2Smrg      ;;
374ecf19b2Smrg  esac
384ecf19b2Smrgdone
394ecf19b2Smrg
404ecf19b2Smrgfor file
414ecf19b2Smrgdo
424ecf19b2Smrg  if test -d "$file"; then
434ecf19b2Smrg    shift
444ecf19b2Smrg  else
454ecf19b2Smrg    break
464ecf19b2Smrg  fi
474ecf19b2Smrgdone
484ecf19b2Smrg
494ecf19b2Smrgcase $# in
504ecf19b2Smrg  0) exit 0 ;;
514ecf19b2Smrgesac
524ecf19b2Smrg
534ecf19b2Smrgcase $dirmode in
544ecf19b2Smrg  '')
554ecf19b2Smrg    if mkdir -p -- . 2>/dev/null; then
564ecf19b2Smrg      echo "mkdir -p -- $*"
574ecf19b2Smrg      exec mkdir -p -- "$@"
584ecf19b2Smrg    fi
594ecf19b2Smrg    ;;
604ecf19b2Smrg  *)
614ecf19b2Smrg    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
624ecf19b2Smrg      echo "mkdir -m $dirmode -p -- $*"
634ecf19b2Smrg      exec mkdir -m "$dirmode" -p -- "$@"
644ecf19b2Smrg    fi
654ecf19b2Smrg    ;;
664ecf19b2Smrgesac
674ecf19b2Smrg
684ecf19b2Smrgfor file
694ecf19b2Smrgdo
704ecf19b2Smrg  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
714ecf19b2Smrg  shift
724ecf19b2Smrg
734ecf19b2Smrg  pathcomp=
744ecf19b2Smrg  for d
754ecf19b2Smrg  do
764ecf19b2Smrg    pathcomp="$pathcomp$d"
774ecf19b2Smrg    case $pathcomp in
784ecf19b2Smrg      -*) pathcomp=./$pathcomp ;;
794ecf19b2Smrg    esac
804ecf19b2Smrg
814ecf19b2Smrg    if test ! -d "$pathcomp"; then
824ecf19b2Smrg      echo "mkdir $pathcomp"
834ecf19b2Smrg
844ecf19b2Smrg      mkdir "$pathcomp" || lasterr=$?
854ecf19b2Smrg
864ecf19b2Smrg      if test ! -d "$pathcomp"; then
874ecf19b2Smrg  	errstatus=$lasterr
884ecf19b2Smrg      else
894ecf19b2Smrg  	if test ! -z "$dirmode"; then
904ecf19b2Smrg	  echo "chmod $dirmode $pathcomp"
914ecf19b2Smrg    	  lasterr=""
924ecf19b2Smrg  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
934ecf19b2Smrg
944ecf19b2Smrg  	  if test ! -z "$lasterr"; then
954ecf19b2Smrg  	    errstatus=$lasterr
964ecf19b2Smrg  	  fi
974ecf19b2Smrg  	fi
984ecf19b2Smrg      fi
994ecf19b2Smrg    fi
1004ecf19b2Smrg
1014ecf19b2Smrg    pathcomp="$pathcomp/"
1024ecf19b2Smrg  done
1034ecf19b2Smrgdone
1044ecf19b2Smrg
1054ecf19b2Smrgexit $errstatus
1064ecf19b2Smrg
1074ecf19b2Smrg# Local Variables:
1084ecf19b2Smrg# mode: shell-script
1094ecf19b2Smrg# sh-indentation: 2
1104ecf19b2Smrg# End:
1114ecf19b2Smrg# mkinstalldirs ends here
112