build-scripts/mkinstalldirs
author Ozkan Sezer <sezeroz@gmail.com>
Thu, 18 Oct 2018 11:58:00 +0300
changeset 12336 2f4ebd8f5693
parent 1361 19418e4422cb
permissions -rwxr-xr-x
use less ancient versions of autofoo scripts
     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: