Blame mkinstalldirs

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