Blame mkinstalldirs

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