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