1 1.1.1.1.4.2 haad #! /bin/sh 2 1.1.1.1.4.2 haad # mkinstalldirs --- make directory hierarchy 3 1.1.1.1.4.2 haad 4 1.1.1.1.4.2 haad scriptversion=2004-02-15.20 5 1.1.1.1.4.2 haad 6 1.1.1.1.4.2 haad # Original author: Noah Friedman <friedman (at] prep.ai.mit.edu> 7 1.1.1.1.4.2 haad # Created: 1993-05-16 8 1.1.1.1.4.2 haad # Public domain. 9 1.1.1.1.4.2 haad # 10 1.1.1.1.4.2 haad # This file is maintained in Automake, please report 11 1.1.1.1.4.2 haad # bugs to <bug-automake (at] gnu.org> or send patches to 12 1.1.1.1.4.2 haad # <automake-patches (at] gnu.org>. 13 1.1.1.1.4.2 haad 14 1.1.1.1.4.2 haad errstatus=0 15 1.1.1.1.4.2 haad dirmode="" 16 1.1.1.1.4.2 haad 17 1.1.1.1.4.2 haad usage="\ 18 1.1.1.1.4.2 haad Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... 19 1.1.1.1.4.2 haad 20 1.1.1.1.4.2 haad Create each directory DIR (with mode MODE, if specified), including all 21 1.1.1.1.4.2 haad leading file name components. 22 1.1.1.1.4.2 haad 23 1.1.1.1.4.2 haad Report bugs to <bug-automake (at] gnu.org>." 24 1.1.1.1.4.2 haad 25 1.1.1.1.4.2 haad # process command line arguments 26 1.1.1.1.4.2 haad while test $# -gt 0 ; do 27 1.1.1.1.4.2 haad case $1 in 28 1.1.1.1.4.2 haad -h | --help | --h*) # -h for help 29 1.1.1.1.4.2 haad echo "$usage" 30 1.1.1.1.4.2 haad exit 0 31 1.1.1.1.4.2 haad ;; 32 1.1.1.1.4.2 haad -m) # -m PERM arg 33 1.1.1.1.4.2 haad shift 34 1.1.1.1.4.2 haad test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 35 1.1.1.1.4.2 haad dirmode=$1 36 1.1.1.1.4.2 haad shift 37 1.1.1.1.4.2 haad ;; 38 1.1.1.1.4.2 haad --version) 39 1.1.1.1.4.2 haad echo "$0 $scriptversion" 40 1.1.1.1.4.2 haad exit 0 41 1.1.1.1.4.2 haad ;; 42 1.1.1.1.4.2 haad --) # stop option processing 43 1.1.1.1.4.2 haad shift 44 1.1.1.1.4.2 haad break 45 1.1.1.1.4.2 haad ;; 46 1.1.1.1.4.2 haad -*) # unknown option 47 1.1.1.1.4.2 haad echo "$usage" 1>&2 48 1.1.1.1.4.2 haad exit 1 49 1.1.1.1.4.2 haad ;; 50 1.1.1.1.4.2 haad *) # first non-opt arg 51 1.1.1.1.4.2 haad break 52 1.1.1.1.4.2 haad ;; 53 1.1.1.1.4.2 haad esac 54 1.1.1.1.4.2 haad done 55 1.1.1.1.4.2 haad 56 1.1.1.1.4.2 haad for file 57 1.1.1.1.4.2 haad do 58 1.1.1.1.4.2 haad if test -d "$file"; then 59 1.1.1.1.4.2 haad shift 60 1.1.1.1.4.2 haad else 61 1.1.1.1.4.2 haad break 62 1.1.1.1.4.2 haad fi 63 1.1.1.1.4.2 haad done 64 1.1.1.1.4.2 haad 65 1.1.1.1.4.2 haad case $# in 66 1.1.1.1.4.2 haad 0) exit 0 ;; 67 1.1.1.1.4.2 haad esac 68 1.1.1.1.4.2 haad 69 1.1.1.1.4.2 haad # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and 70 1.1.1.1.4.2 haad # mkdir -p a/c at the same time, both will detect that a is missing, 71 1.1.1.1.4.2 haad # one will create a, then the other will try to create a and die with 72 1.1.1.1.4.2 haad # a "File exists" error. This is a problem when calling mkinstalldirs 73 1.1.1.1.4.2 haad # from a parallel make. We use --version in the probe to restrict 74 1.1.1.1.4.2 haad # ourselves to GNU mkdir, which is thread-safe. 75 1.1.1.1.4.2 haad case $dirmode in 76 1.1.1.1.4.2 haad '') 77 1.1.1.1.4.2 haad if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then 78 1.1.1.1.4.2 haad echo "mkdir -p -- $*" 79 1.1.1.1.4.2 haad exec mkdir -p -- "$@" 80 1.1.1.1.4.2 haad else 81 1.1.1.1.4.2 haad # On NextStep and OpenStep, the `mkdir' command does not 82 1.1.1.1.4.2 haad # recognize any option. It will interpret all options as 83 1.1.1.1.4.2 haad # directories to create, and then abort because `.' already 84 1.1.1.1.4.2 haad # exists. 85 1.1.1.1.4.2 haad test -d ./-p && rmdir ./-p 86 1.1.1.1.4.2 haad test -d ./--version && rmdir ./--version 87 1.1.1.1.4.2 haad fi 88 1.1.1.1.4.2 haad ;; 89 1.1.1.1.4.2 haad *) 90 1.1.1.1.4.2 haad if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && 91 1.1.1.1.4.2 haad test ! -d ./--version; then 92 1.1.1.1.4.2 haad echo "mkdir -m $dirmode -p -- $*" 93 1.1.1.1.4.2 haad exec mkdir -m "$dirmode" -p -- "$@" 94 1.1.1.1.4.2 haad else 95 1.1.1.1.4.2 haad # Clean up after NextStep and OpenStep mkdir. 96 1.1.1.1.4.2 haad for d in ./-m ./-p ./--version "./$dirmode"; 97 1.1.1.1.4.2 haad do 98 1.1.1.1.4.2 haad test -d $d && rmdir $d 99 1.1.1.1.4.2 haad done 100 1.1.1.1.4.2 haad fi 101 1.1.1.1.4.2 haad ;; 102 1.1.1.1.4.2 haad esac 103 1.1.1.1.4.2 haad 104 1.1.1.1.4.2 haad for file 105 1.1.1.1.4.2 haad do 106 1.1.1.1.4.2 haad set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 107 1.1.1.1.4.2 haad shift 108 1.1.1.1.4.2 haad 109 1.1.1.1.4.2 haad pathcomp= 110 1.1.1.1.4.2 haad for d 111 1.1.1.1.4.2 haad do 112 1.1.1.1.4.2 haad pathcomp="$pathcomp$d" 113 1.1.1.1.4.2 haad case $pathcomp in 114 1.1.1.1.4.2 haad -*) pathcomp=./$pathcomp ;; 115 1.1.1.1.4.2 haad esac 116 1.1.1.1.4.2 haad 117 1.1.1.1.4.2 haad if test ! -d "$pathcomp"; then 118 1.1.1.1.4.2 haad echo "mkdir $pathcomp" 119 1.1.1.1.4.2 haad 120 1.1.1.1.4.2 haad mkdir "$pathcomp" || lasterr=$? 121 1.1.1.1.4.2 haad 122 1.1.1.1.4.2 haad if test ! -d "$pathcomp"; then 123 1.1.1.1.4.2 haad errstatus=$lasterr 124 1.1.1.1.4.2 haad else 125 1.1.1.1.4.2 haad if test ! -z "$dirmode"; then 126 1.1.1.1.4.2 haad echo "chmod $dirmode $pathcomp" 127 1.1.1.1.4.2 haad lasterr="" 128 1.1.1.1.4.2 haad chmod "$dirmode" "$pathcomp" || lasterr=$? 129 1.1.1.1.4.2 haad 130 1.1.1.1.4.2 haad if test ! -z "$lasterr"; then 131 1.1.1.1.4.2 haad errstatus=$lasterr 132 1.1.1.1.4.2 haad fi 133 1.1.1.1.4.2 haad fi 134 1.1.1.1.4.2 haad fi 135 1.1.1.1.4.2 haad fi 136 1.1.1.1.4.2 haad 137 1.1.1.1.4.2 haad pathcomp="$pathcomp/" 138 1.1.1.1.4.2 haad done 139 1.1.1.1.4.2 haad done 140 1.1.1.1.4.2 haad 141 1.1.1.1.4.2 haad exit $errstatus 142 1.1.1.1.4.2 haad 143 1.1.1.1.4.2 haad # Local Variables: 144 1.1.1.1.4.2 haad # mode: shell-script 145 1.1.1.1.4.2 haad # sh-indentation: 2 146 1.1.1.1.4.2 haad # eval: (add-hook 'write-file-hooks 'time-stamp) 147 1.1.1.1.4.2 haad # time-stamp-start: "scriptversion=" 148 1.1.1.1.4.2 haad # time-stamp-format: "%:y-%02m-%02d.%02H" 149 1.1.1.1.4.2 haad # time-stamp-end: "$" 150 1.1.1.1.4.2 haad # End: 151