"Fossies" - the Fresh Open Source Software Archive

Member "automake-1.16.3/lib/mkinstalldirs" (23 Aug 2020, 3514 Bytes) of package /linux/misc/automake-1.16.3.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the latest Fossies "Diffs" side-by-side code changes report for "mkinstalldirs": 1.16.2_vs_1.16.3.

    1 #! /bin/sh
    2 # mkinstalldirs --- make directory hierarchy
    3 
    4 scriptversion=2020-07-26.22; # 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 "umask 22"
   96       umask 22
   97       echo "mkdir -m $dirmode -p -- $*"
   98       exec mkdir -m "$dirmode" -p -- "$@"
   99     else
  100       # Clean up after NextStep and OpenStep mkdir.
  101       for d in ./-m ./-p ./--version "./$dirmode";
  102       do
  103         test -d $d && rmdir $d
  104       done
  105     fi
  106     ;;
  107 esac
  108 
  109 echo "umask 22"
  110 umask 22
  111 
  112 for file
  113 do
  114   case $file in
  115     /*) pathcomp=/ ;;
  116     *)  pathcomp= ;;
  117   esac
  118   oIFS=$IFS
  119   IFS=/
  120   set fnord $file
  121   shift
  122   IFS=$oIFS
  123 
  124   for d
  125   do
  126     test "x$d" = x && continue
  127 
  128     pathcomp=$pathcomp$d
  129     case $pathcomp in
  130       -*) pathcomp=./$pathcomp ;;
  131     esac
  132 
  133     if test ! -d "$pathcomp"; then
  134       echo "mkdir $pathcomp"
  135 
  136       mkdir "$pathcomp" || lasterr=$?
  137 
  138       if test ! -d "$pathcomp"; then
  139     errstatus=$lasterr
  140       fi
  141     fi
  142 
  143     pathcomp=$pathcomp/
  144   done
  145 
  146   if test ! -z "$dirmode"; then
  147     echo "chmod $dirmode $file"
  148     chmod "$dirmode" "$file" || errstatus=$?
  149   fi
  150 done
  151 
  152 exit $errstatus
  153 
  154 # Local Variables:
  155 # mode: shell-script
  156 # sh-indentation: 2
  157 # eval: (add-hook 'before-save-hook 'time-stamp)
  158 # time-stamp-start: "scriptversion="
  159 # time-stamp-format: "%:y-%02m-%02d.%02H"
  160 # time-stamp-time-zone: "UTC0"
  161 # time-stamp-end: "; # UTC"
  162 # End: