1a99f82b8Smrg#! /bin/sh
2a99f82b8Smrg# mkinstalldirs --- make directory hierarchy
3a99f82b8Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu>
4a99f82b8Smrg# Created: 1993-05-16
5a99f82b8Smrg# Public domain
6a99f82b8Smrg
7a99f82b8Smrgerrstatus=0
8a99f82b8Smrgdirmode=""
9a99f82b8Smrg
10a99f82b8Smrgusage="\
11a99f82b8SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
12a99f82b8Smrg
13a99f82b8Smrg# process command line arguments
14a99f82b8Smrgwhile test $# -gt 0 ; do
15a99f82b8Smrg  case $1 in
16a99f82b8Smrg    -h | --help | --h*)         # -h for help
17a99f82b8Smrg      echo "$usage" 1>&2
18a99f82b8Smrg      exit 0
19a99f82b8Smrg      ;;
20a99f82b8Smrg    -m)                         # -m PERM arg
21a99f82b8Smrg      shift
22a99f82b8Smrg      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
23a99f82b8Smrg      dirmode=$1
24a99f82b8Smrg      shift
25a99f82b8Smrg      ;;
26a99f82b8Smrg    --)                         # stop option processing
27a99f82b8Smrg      shift
28a99f82b8Smrg      break
29a99f82b8Smrg      ;;
30a99f82b8Smrg    -*)                         # unknown option
31a99f82b8Smrg      echo "$usage" 1>&2
32a99f82b8Smrg      exit 1
33a99f82b8Smrg      ;;
34a99f82b8Smrg    *)                          # first non-opt arg
35a99f82b8Smrg      break
36a99f82b8Smrg      ;;
37a99f82b8Smrg  esac
38a99f82b8Smrgdone
39a99f82b8Smrg
40a99f82b8Smrgfor file
41a99f82b8Smrgdo
42a99f82b8Smrg  if test -d "$file"; then
43a99f82b8Smrg    shift
44a99f82b8Smrg  else
45a99f82b8Smrg    break
46a99f82b8Smrg  fi
47a99f82b8Smrgdone
48a99f82b8Smrg
49a99f82b8Smrgcase $# in
50a99f82b8Smrg  0) exit 0 ;;
51a99f82b8Smrgesac
52a99f82b8Smrg
53a99f82b8Smrgcase $dirmode in
54a99f82b8Smrg  '')
55a99f82b8Smrg    if mkdir -p -- . 2>/dev/null; then
56a99f82b8Smrg      echo "mkdir -p -- $*"
57a99f82b8Smrg      exec mkdir -p -- "$@"
58a99f82b8Smrg    fi
59a99f82b8Smrg    ;;
60a99f82b8Smrg  *)
61a99f82b8Smrg    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
62a99f82b8Smrg      echo "mkdir -m $dirmode -p -- $*"
63a99f82b8Smrg      exec mkdir -m "$dirmode" -p -- "$@"
64a99f82b8Smrg    fi
65a99f82b8Smrg    ;;
66a99f82b8Smrgesac
67a99f82b8Smrg
68a99f82b8Smrgfor file
69a99f82b8Smrgdo
70a99f82b8Smrg  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
71a99f82b8Smrg  shift
72a99f82b8Smrg
73a99f82b8Smrg  pathcomp=
74a99f82b8Smrg  for d
75a99f82b8Smrg  do
76a99f82b8Smrg    pathcomp="$pathcomp$d"
77a99f82b8Smrg    case $pathcomp in
78a99f82b8Smrg      -*) pathcomp=./$pathcomp ;;
79a99f82b8Smrg    esac
80a99f82b8Smrg
81a99f82b8Smrg    if test ! -d "$pathcomp"; then
82a99f82b8Smrg      echo "mkdir $pathcomp"
83a99f82b8Smrg
84a99f82b8Smrg      mkdir "$pathcomp" || lasterr=$?
85a99f82b8Smrg
86a99f82b8Smrg      if test ! -d "$pathcomp"; then
87a99f82b8Smrg  	errstatus=$lasterr
88a99f82b8Smrg      else
89a99f82b8Smrg  	if test ! -z "$dirmode"; then
90a99f82b8Smrg	  echo "chmod $dirmode $pathcomp"
91a99f82b8Smrg    	  lasterr=""
92a99f82b8Smrg  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
93a99f82b8Smrg
94a99f82b8Smrg  	  if test ! -z "$lasterr"; then
95a99f82b8Smrg  	    errstatus=$lasterr
96a99f82b8Smrg  	  fi
97a99f82b8Smrg  	fi
98a99f82b8Smrg      fi
99a99f82b8Smrg    fi
100a99f82b8Smrg
101a99f82b8Smrg    pathcomp="$pathcomp/"
102a99f82b8Smrg  done
103a99f82b8Smrgdone
104a99f82b8Smrg
105a99f82b8Smrgexit $errstatus
106a99f82b8Smrg
107a99f82b8Smrg# Local Variables:
108a99f82b8Smrg# mode: shell-script
109a99f82b8Smrg# sh-indentation: 2
110a99f82b8Smrg# End:
111a99f82b8Smrg# mkinstalldirs ends here
112