diff options
Diffstat (limited to 'mkinstalldirs')
| -rwxr-xr-x | mkinstalldirs | 150 | 
1 files changed, 150 insertions, 0 deletions
| diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..5d26a48 --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,150 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2005-02-02.21 + +# Original author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to <bug-automake@gnu.org>." + +# process command line arguments +while test $# -gt 0 ; do +  case $1 in +    -h | --help | --h*)         # -h for help +      echo "$usage" +      exit $? +      ;; +    -m)                         # -m PERM arg +      shift +      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } +      dirmode=$1 +      shift +      ;; +    --version) +      echo "$0 $scriptversion" +      exit $? +      ;; +    --)                         # stop option processing +      shift +      break +      ;; +    -*)                         # unknown option +      echo "$usage" 1>&2 +      exit 1 +      ;; +    *)                          # first non-opt arg +      break +      ;; +  esac +done + +for file +do +  if test -d "$file"; then +    shift +  else +    break +  fi +done + +case $# in +  0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error.  This is a problem when calling mkinstalldirs +# from a parallel make.  We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in +  '') +    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then +      echo "mkdir -p -- $*" +      exec mkdir -p -- "$@" +    else +      # On NextStep and OpenStep, the `mkdir' command does not +      # recognize any option.  It will interpret all options as +      # directories to create, and then abort because `.' already +      # exists. +      test -d ./-p && rmdir ./-p +      test -d ./--version && rmdir ./--version +    fi +    ;; +  *) +    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && +       test ! -d ./--version; then +      echo "mkdir -m $dirmode -p -- $*" +      exec mkdir -m "$dirmode" -p -- "$@" +    else +      # Clean up after NextStep and OpenStep mkdir. +      for d in ./-m ./-p ./--version "./$dirmode"; +      do +        test -d $d && rmdir $d +      done +    fi +    ;; +esac + +for file +do +  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` +  shift + +  pathcomp= +  for d +  do +    pathcomp="$pathcomp$d" +    case $pathcomp in +      -*) pathcomp=./$pathcomp ;; +    esac + +    if test ! -d "$pathcomp"; then +      echo "mkdir $pathcomp" + +      mkdir "$pathcomp" || lasterr=$? + +      if test ! -d "$pathcomp"; then +	errstatus=$lasterr +      else +	if test ! -z "$dirmode"; then +	  echo "chmod $dirmode $pathcomp" +	  lasterr="" +	  chmod "$dirmode" "$pathcomp" || lasterr=$? + +	  if test ! -z "$lasterr"; then +	    errstatus=$lasterr +	  fi +	fi +      fi +    fi + +    pathcomp="$pathcomp/" +  done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: | 
