Blame mkinstalldirs

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