Home | History | Annotate | Download | only in autoconf
      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