New module 'javaexec'.
[gnulib.git] / config / mkinstalldirs
index 4977302..6fbe5e1 100644 (file)
@@ -1,10 +1,15 @@
 #! /bin/sh
 # mkinstalldirs --- make directory hierarchy
 #! /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.
 # 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=""
 
 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.
 
 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
 
 # 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
       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
 
   esac
 done
 
-# no `for var; do', it breaks on Solaris 2.7 (at least).
 for file
 do
   if test -d "$file"; then
 for file
 do
   if test -d "$file"; then
@@ -47,17 +66,39 @@ case $# in
   0) exit 0 ;;
 esac
 
   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
   '')
 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 -- "$@"
       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 -- "$@"
       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
 esac
 
 for file
@@ -69,7 +110,7 @@ do
   for d
   do
     pathcomp="$pathcomp$d"
   for d
   do
     pathcomp="$pathcomp$d"
-    case "$pathcomp" in
+    case $pathcomp in
       -*) pathcomp=./$pathcomp ;;
     esac
 
       -*) pathcomp=./$pathcomp ;;
     esac
 
@@ -79,18 +120,17 @@ do
       mkdir "$pathcomp" || lasterr=$?
 
       if test ! -d "$pathcomp"; then
       mkdir "$pathcomp" || lasterr=$?
 
       if test ! -d "$pathcomp"; then
-        errstatus=$lasterr
+       errstatus=$lasterr
       else
       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
 
       fi
     fi
 
@@ -99,3 +139,12 @@ do
 done
 
 exit $errstatus
 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: