Blame mkinstalldirs

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