File:  [local] / rpl / Attic / mkinstalldirs
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Wed May 5 08:40:52 2010 UTC (14 years ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_0_17, rpl-4_0_16, rpl-4_0_15, HEAD
*** empty log message ***

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

CVSweb interface <joel.bertrand@systella.fr>