mkinstalldirs revision 264fa531
1264fa531Smrg#! /bin/sh
2264fa531Smrg# mkinstalldirs --- make directory hierarchy
3264fa531Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu>
4264fa531Smrg# Created: 1993-05-16
5264fa531Smrg# Public domain
6264fa531Smrg
7264fa531Smrgerrstatus=0
8264fa531Smrgdirmode=""
9264fa531Smrg
10264fa531Smrgusage="\
11264fa531SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
12264fa531Smrg
13264fa531Smrg# process command line arguments
14264fa531Smrgwhile test $# -gt 0 ; do
15264fa531Smrg  case $1 in
16264fa531Smrg    -h | --help | --h*)         # -h for help
17264fa531Smrg      echo "$usage" 1>&2
18264fa531Smrg      exit 0
19264fa531Smrg      ;;
20264fa531Smrg    -m)                         # -m PERM arg
21264fa531Smrg      shift
22264fa531Smrg      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
23264fa531Smrg      dirmode=$1
24264fa531Smrg      shift
25264fa531Smrg      ;;
26264fa531Smrg    --)                         # stop option processing
27264fa531Smrg      shift
28264fa531Smrg      break
29264fa531Smrg      ;;
30264fa531Smrg    -*)                         # unknown option
31264fa531Smrg      echo "$usage" 1>&2
32264fa531Smrg      exit 1
33264fa531Smrg      ;;
34264fa531Smrg    *)                          # first non-opt arg
35264fa531Smrg      break
36264fa531Smrg      ;;
37264fa531Smrg  esac
38264fa531Smrgdone
39264fa531Smrg
40264fa531Smrgfor file
41264fa531Smrgdo
42264fa531Smrg  if test -d "$file"; then
43264fa531Smrg    shift
44264fa531Smrg  else
45264fa531Smrg    break
46264fa531Smrg  fi
47264fa531Smrgdone
48264fa531Smrg
49264fa531Smrgcase $# in
50264fa531Smrg  0) exit 0 ;;
51264fa531Smrgesac
52264fa531Smrg
53264fa531Smrgcase $dirmode in
54264fa531Smrg  '')
55264fa531Smrg    if mkdir -p -- . 2>/dev/null; then
56264fa531Smrg      echo "mkdir -p -- $*"
57264fa531Smrg      exec mkdir -p -- "$@"
58264fa531Smrg    fi
59264fa531Smrg    ;;
60264fa531Smrg  *)
61264fa531Smrg    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
62264fa531Smrg      echo "mkdir -m $dirmode -p -- $*"
63264fa531Smrg      exec mkdir -m "$dirmode" -p -- "$@"
64264fa531Smrg    fi
65264fa531Smrg    ;;
66264fa531Smrgesac
67264fa531Smrg
68264fa531Smrgfor file
69264fa531Smrgdo
70264fa531Smrg  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
71264fa531Smrg  shift
72264fa531Smrg
73264fa531Smrg  pathcomp=
74264fa531Smrg  for d
75264fa531Smrg  do
76264fa531Smrg    pathcomp="$pathcomp$d"
77264fa531Smrg    case $pathcomp in
78264fa531Smrg      -*) pathcomp=./$pathcomp ;;
79264fa531Smrg    esac
80264fa531Smrg
81264fa531Smrg    if test ! -d "$pathcomp"; then
82264fa531Smrg      echo "mkdir $pathcomp"
83264fa531Smrg
84264fa531Smrg      mkdir "$pathcomp" || lasterr=$?
85264fa531Smrg
86264fa531Smrg      if test ! -d "$pathcomp"; then
87264fa531Smrg  	errstatus=$lasterr
88264fa531Smrg      else
89264fa531Smrg  	if test ! -z "$dirmode"; then
90264fa531Smrg	  echo "chmod $dirmode $pathcomp"
91264fa531Smrg    	  lasterr=""
92264fa531Smrg  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
93264fa531Smrg
94264fa531Smrg  	  if test ! -z "$lasterr"; then
95264fa531Smrg  	    errstatus=$lasterr
96264fa531Smrg  	  fi
97264fa531Smrg  	fi
98264fa531Smrg      fi
99264fa531Smrg    fi
100264fa531Smrg
101264fa531Smrg    pathcomp="$pathcomp/"
102264fa531Smrg  done
103264fa531Smrgdone
104264fa531Smrg
105264fa531Smrgexit $errstatus
106264fa531Smrg
107264fa531Smrg# Local Variables:
108264fa531Smrg# mode: shell-script
109264fa531Smrg# sh-indentation: 2
110264fa531Smrg# End:
111264fa531Smrg# mkinstalldirs ends here
112