PageRenderTime 55ms CodeModel.GetById 46ms app.highlight 6ms RepoModel.GetById 2ms app.codeStats 0ms

/contrib/groff/mkinstalldirs

https://bitbucket.org/freebsd/freebsd-head/
Shell | 158 lines | 109 code | 20 blank | 29 comment | 20 complexity | 64e8ff72710e830f15a347863b848c7d MD5 | raw file
  1#! /bin/sh
  2# mkinstalldirs --- make directory hierarchy
  3
  4scriptversion=2005-06-29.22
  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
 14errstatus=0
 15dirmode=
 16
 17usage="\
 18Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
 19
 20Create each directory DIR (with mode MODE, if specified), including all
 21leading file name components.
 22
 23Report bugs to <bug-automake@gnu.org>."
 24
 25# process command line arguments
 26while test $# -gt 0 ; do
 27  case $1 in
 28    -h | --help | --h*)         # -h for help
 29      echo "$usage"
 30      exit $?
 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 $?
 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
 54done
 55
 56for file
 57do
 58  if test -d "$file"; then
 59    shift
 60  else
 61    break
 62  fi
 63done
 64
 65case $# in
 66  0) exit 0 ;;
 67esac
 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.
 75case $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    ;;
102esac
103
104for file
105do
106  case $file in
107    /*) pathcomp=/ ;;
108    *)  pathcomp= ;;
109  esac
110  oIFS=$IFS
111  IFS=/
112  set fnord $file
113  shift
114  IFS=$oIFS
115
116  for d
117  do
118    test "x$d" = x && continue
119
120    pathcomp=$pathcomp$d
121    case $pathcomp in
122      -*) pathcomp=./$pathcomp ;;
123    esac
124
125    if test ! -d "$pathcomp"; then
126      echo "mkdir $pathcomp"
127
128      mkdir "$pathcomp" || lasterr=$?
129
130      if test ! -d "$pathcomp"; then
131	errstatus=$lasterr
132      else
133	if test ! -z "$dirmode"; then
134	  echo "chmod $dirmode $pathcomp"
135	  lasterr=
136	  chmod "$dirmode" "$pathcomp" || lasterr=$?
137
138	  if test ! -z "$lasterr"; then
139	    errstatus=$lasterr
140	  fi
141	fi
142      fi
143    fi
144
145    pathcomp=$pathcomp/
146  done
147done
148
149exit $errstatus
150
151# Local Variables:
152# mode: shell-script
153# sh-indentation: 2
154# eval: (add-hook 'write-file-hooks 'time-stamp)
155# time-stamp-start: "scriptversion="
156# time-stamp-format: "%:y-%02m-%02d.%02H"
157# time-stamp-end: "$"
158# End: