version 1.1 | | version 1.2 |
---|
| | |
#! /bin/sh | | #! /bin/sh |
# mkinstalldirs --- make directory hierarchy | | # mkinstalldirs --- make directory hierarchy |
# Author: Noah Friedman <friedman@prep.ai.mit.edu> | | |
| | scriptversion=2004-02-15.20 |
| | |
| | # Original author: Noah Friedman <friedman@prep.ai.mit.edu> |
# Created: 1993-05-16 | | # Created: 1993-05-16 |
# Public domain | | # Public domain. |
| | # |
| | # This file is maintained in Automake, please report |
| | # bugs to <bug-automake@gnu.org> or send patches to |
| | # <automake-patches@gnu.org>. |
| | |
errstatus=0 | | errstatus=0 |
dirmode="" | | dirmode="" |
| | |
usage="\ | | usage="\ |
Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." | | Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... |
| | |
| | Create each directory DIR (with mode MODE, if specified), including all |
| | leading file name components. |
| | |
| | Report bugs to <bug-automake@gnu.org>." |
| | |
# process command line arguments | | # process command line arguments |
while test $# -gt 0 ; do | | while test $# -gt 0 ; do |
case "${1}" in | | case $1 in |
-h | --help | --h* ) # -h for help | | -h | --help | --h* ) # -h for help |
echo "${usage}" 1>&2; exit 0 ;; | | echo "$usage" |
| | exit 0 |
| | ;; |
-m ) # -m PERM arg | | -m ) # -m PERM arg |
shift | | shift |
test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } | | test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } |
dirmode="${1}" | | dirmode=$1 |
shift ;; | | shift |
-- ) shift; break ;; # stop option processing | | ;; |
-* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option | | --version) |
* ) break ;; # first non-opt arg | | echo "$0 $scriptversion" |
| | exit 0 |
| | ;; |
| | --) # stop option processing |
| | shift |
| | break |
| | ;; |
| | -*) # unknown option |
| | echo "$usage" 1>&2 |
| | exit 1 |
| | ;; |
| | *) # first non-opt arg |
| | break |
| | ;; |
esac | | esac |
done | | done |
| | |
| | |
0) exit 0 ;; | | 0) exit 0 ;; |
esac | | esac |
| | |
| | # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and |
| | # mkdir -p a/c at the same time, both will detect that a is missing, |
| | # one will create a, then the other will try to create a and die with |
| | # a "File exists" error. This is a problem when calling mkinstalldirs |
| | # from a parallel make. We use --version in the probe to restrict |
| | # ourselves to GNU mkdir, which is thread-safe. |
case $dirmode in | | case $dirmode in |
'') | | '') |
if mkdir -p -- . 2>/dev/null; then | | if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then |
echo "mkdir -p -- $*" | | echo "mkdir -p -- $*" |
exec mkdir -p -- "$@" | | exec mkdir -p -- "$@" |
fi ;; | | else |
| | # On NextStep and OpenStep, the `mkdir' command does not |
| | # recognize any option. It will interpret all options as |
| | # directories to create, and then abort because `.' already |
| | # exists. |
| | test -d ./-p && rmdir ./-p |
| | test -d ./--version && rmdir ./--version |
| | fi |
| | ;; |
*) | | *) |
if mkdir -m "$dirmode" -p -- . 2>/dev/null; then | | if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && |
| | test ! -d ./--version; then |
echo "mkdir -m $dirmode -p -- $*" | | echo "mkdir -m $dirmode -p -- $*" |
exec mkdir -m "$dirmode" -p -- "$@" | | exec mkdir -m "$dirmode" -p -- "$@" |
fi ;; | | else |
| | # Clean up after NextStep and OpenStep mkdir. |
| | for d in ./-m ./-p ./--version "./$dirmode"; |
| | do |
| | test -d $d && rmdir $d |
| | done |
| | fi |
| | ;; |
esac | | esac |
| | |
for file | | for file |
| | |
for d | | for d |
do | | do |
pathcomp="$pathcomp$d" | | pathcomp="$pathcomp$d" |
case "$pathcomp" in | | case $pathcomp in |
-* ) pathcomp=./$pathcomp ;; | | -* ) pathcomp=./$pathcomp ;; |
esac | | esac |
| | |
| | |
else | | else |
if test ! -z "$dirmode"; then | | if test ! -z "$dirmode"; then |
echo "chmod $dirmode $pathcomp" | | echo "chmod $dirmode $pathcomp" |
| | |
lasterr="" | | lasterr="" |
chmod "$dirmode" "$pathcomp" || lasterr=$? | | chmod "$dirmode" "$pathcomp" || lasterr=$? |
| | |
| | |
| | |
# Local Variables: | | # Local Variables: |
# mode: shell-script | | # mode: shell-script |
# sh-indentation: 3 | | # sh-indentation: 2 |
| | # eval: (add-hook 'write-file-hooks 'time-stamp) |
| | # time-stamp-start: "scriptversion=" |
| | # time-stamp-format: "%:y-%02m-%02d.%02H" |
| | # time-stamp-end: "$" |
# End: | | # End: |
# mkinstalldirs ends here | | |