#! /bin/sh
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Public domain

errstatus=0
dirmode=""

usage="\
Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."

# process command line arguments
while test $# -gt 0 ; do
   case "${1}" in
     -h | --help | --h* )			# -h for help
	echo "${usage}" 1>&2; exit 0 ;;
     -m )					# -m PERM arg
	shift
	test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
	dirmode="${1}"
	shift ;;
     -- ) shift; break ;;			# stop option processing
     -* ) echo "${usage}" 1>&2; exit 1 ;;	# unknown option
     * )  break ;;				# first non-opt arg
   esac
done

for file
do
  if test -d "$file"; then
    shift
  else
    break
  fi
done

case $# in
0) exit 0 ;;
esac

case $dirmode in
'')
  if mkdir -p -- . 2>/dev/null; then
    echo "mkdir -p -- $*"
    exec mkdir -p -- "$@"
  fi ;;
*)
  # We cannot trust mkdir to set the proper permissions on
  # parent directories. So create them manually.
  ;;
esac

for file
do
   case "$file" in
     /* ) pathcomp="/" ;;
     -* ) pathcomp="./" ;;
      * ) pathcomp="" ;;
   esac

   saved_IFS="$IFS"
   IFS="/"
   for d in $file
   do
      IFS="$saved_IFS"
      if test -n "$d"; then
         pathcomp="$pathcomp$d"
         if test ! -d "$pathcomp"; then
            echo "mkdir $pathcomp"
            mkdir "$pathcomp" || lasterr=$?

            if test ! -d "$pathcomp"; then
               errstatus=$lasterr
               break
            elif test -n "$dirmode"; then
               echo "chmod $dirmode $pathcomp"
               lasterr=""
               chmod "$dirmode" "$pathcomp" || lasterr=$?
               if test -n "$lasterr"; then
                  errstatus=$lasterr
                  break
               fi
            fi
         fi
         pathcomp="$pathcomp/"
      fi
   done
done

exit $errstatus

# Local Variables:
# mode: shell-script
# sh-indentation: 3
# End:
# mkinstalldirs ends here
