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