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