New module 'javaexec'.
[gnulib.git] / config / mkinstalldirs
index 4977302..6fbe5e1 100644 (file)
@@ -1,10 +1,15 @@
 #! /bin/sh
 # mkinstalldirs --- make directory hierarchy
+
+scriptversion=2004-02-15.20
+
 # Original author: Noah Friedman <friedman@prep.ai.mit.edu>
 # Created: 1993-05-16
 # Public domain.
-
-version="mkinstalldirs 2003-06-02"
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
 
 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 <bug-automake@gnu.org>."
 
 # 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: