X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=config%2Fmkinstalldirs;h=6fbe5e117629c75a723710efc4b2e0341c17c895;hb=5d57b6046c1d6d2c771663cd1d4880fcfdf46a9d;hp=4977302f609ada3da766d89f72788429942f962b;hpb=93ae69e793b8ff343856a71053a7f32dce527e06;p=gnulib.git diff --git a/config/mkinstalldirs b/config/mkinstalldirs index 4977302f6..6fbe5e117 100644 --- a/config/mkinstalldirs +++ b/config/mkinstalldirs @@ -1,10 +1,15 @@ #! /bin/sh # mkinstalldirs --- make directory hierarchy + +scriptversion=2004-02-15.20 + # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. - -version="mkinstalldirs 2003-06-02" +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . errstatus=0 dirmode="" @@ -14,26 +19,40 @@ 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 ." # process command line arguments while test $# -gt 0 ; do - case "${1}" in - -h | --help | --h*) # -h for help - echo "${usage}" 1>&2; exit 0 ;; - -m) # -m PERM arg + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit 0 + ;; + --) # stop option processing shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - dirmode="${1}" - shift ;; - --version) echo "$version"; exit 0;; - --) shift; break ;; # stop option processing - -*) echo "${usage}" 1>&2; exit 1 ;; # unknown option - *) break ;; # first non-opt arg + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; esac done -# no `for var; do', it breaks on Solaris 2.7 (at least). for file do if test -d "$file"; then @@ -47,17 +66,39 @@ case $# in 0) exit 0 ;; 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 '') - if mkdir -p -- . 2>/dev/null; then + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "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 -- $*" 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 for file @@ -69,7 +110,7 @@ do for d do pathcomp="$pathcomp$d" - case "$pathcomp" in + case $pathcomp in -*) pathcomp=./$pathcomp ;; esac @@ -79,18 +120,17 @@ do mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then - errstatus=$lasterr + errstatus=$lasterr else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - - lasterr="" - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi fi fi @@ -99,3 +139,12 @@ do done exit $errstatus + +# Local Variables: +# mode: shell-script +# 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: