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