198049353Smrg#! /bin/sh
298049353Smrg# mkinstalldirs --- make directory hierarchy
398049353Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu>
498049353Smrg# Created: 1993-05-16
598049353Smrg# Public domain
698049353Smrg
798049353Smrgerrstatus=0
898049353Smrgdirmode=""
998049353Smrg
1098049353Smrgusage="\
1198049353SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
1298049353Smrg
1398049353Smrg# process command line arguments
1498049353Smrgwhile test $# -gt 0 ; do
1598049353Smrg  case $1 in
1698049353Smrg    -h | --help | --h*)         # -h for help
1798049353Smrg      echo "$usage" 1>&2
1898049353Smrg      exit 0
1998049353Smrg      ;;
2098049353Smrg    -m)                         # -m PERM arg
2198049353Smrg      shift
2298049353Smrg      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
2398049353Smrg      dirmode=$1
2498049353Smrg      shift
2598049353Smrg      ;;
2698049353Smrg    --)                         # stop option processing
2798049353Smrg      shift
2898049353Smrg      break
2998049353Smrg      ;;
3098049353Smrg    -*)                         # unknown option
3198049353Smrg      echo "$usage" 1>&2
3298049353Smrg      exit 1
3398049353Smrg      ;;
3498049353Smrg    *)                          # first non-opt arg
3598049353Smrg      break
3698049353Smrg      ;;
3798049353Smrg  esac
3898049353Smrgdone
3998049353Smrg
4098049353Smrgfor file
4198049353Smrgdo
4298049353Smrg  if test -d "$file"; then
4398049353Smrg    shift
4498049353Smrg  else
4598049353Smrg    break
4698049353Smrg  fi
4798049353Smrgdone
4898049353Smrg
4998049353Smrgcase $# in
5098049353Smrg  0) exit 0 ;;
5198049353Smrgesac
5298049353Smrg
5398049353Smrgcase $dirmode in
5498049353Smrg  '')
5598049353Smrg    if mkdir -p -- . 2>/dev/null; then
5698049353Smrg      echo "mkdir -p -- $*"
5798049353Smrg      exec mkdir -p -- "$@"
5898049353Smrg    fi
5998049353Smrg    ;;
6098049353Smrg  *)
6198049353Smrg    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
6298049353Smrg      echo "mkdir -m $dirmode -p -- $*"
6398049353Smrg      exec mkdir -m "$dirmode" -p -- "$@"
6498049353Smrg    fi
6598049353Smrg    ;;
6698049353Smrgesac
6798049353Smrg
6898049353Smrgfor file
6998049353Smrgdo
7098049353Smrg  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
7198049353Smrg  shift
7298049353Smrg
7398049353Smrg  pathcomp=
7498049353Smrg  for d
7598049353Smrg  do
7698049353Smrg    pathcomp="$pathcomp$d"
7798049353Smrg    case $pathcomp in
7898049353Smrg      -*) pathcomp=./$pathcomp ;;
7998049353Smrg    esac
8098049353Smrg
8198049353Smrg    if test ! -d "$pathcomp"; then
8298049353Smrg      echo "mkdir $pathcomp"
8398049353Smrg
8498049353Smrg      mkdir "$pathcomp" || lasterr=$?
8598049353Smrg
8698049353Smrg      if test ! -d "$pathcomp"; then
8798049353Smrg  	errstatus=$lasterr
8898049353Smrg      else
8998049353Smrg  	if test ! -z "$dirmode"; then
9098049353Smrg	  echo "chmod $dirmode $pathcomp"
9198049353Smrg    	  lasterr=""
9298049353Smrg  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
9398049353Smrg
9498049353Smrg  	  if test ! -z "$lasterr"; then
9598049353Smrg  	    errstatus=$lasterr
9698049353Smrg  	  fi
9798049353Smrg  	fi
9898049353Smrg      fi
9998049353Smrg    fi
10098049353Smrg
10198049353Smrg    pathcomp="$pathcomp/"
10298049353Smrg  done
10398049353Smrgdone
10498049353Smrg
10598049353Smrgexit $errstatus
10698049353Smrg
10798049353Smrg# Local Variables:
10898049353Smrg# mode: shell-script
10998049353Smrg# sh-indentation: 2
11098049353Smrg# End:
11198049353Smrg# mkinstalldirs ends here
112