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