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