Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
executable file 184 lines (163 sloc) 4.35 KB
#! /bin/sh
# mkinstalldirs --- make directory hierarchy
scriptversion=2005-11-03.10
# 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]
mkinstalldirs [--require REQDIR] [-m MODE] DIR ...
Create each directory DIR (with mode MODE, if specified), including all
leading file name components. If REQDIR is specified, then DIR arguments
will not be processed, unless REQDIR already exists.
Report bugs to <bug-automake@gnu.org>."
# process command line arguments
arglist="void" optarg=""
for argval
do
newarg=""
if test "x$optarg" = xdisabled
then
test -d "$argval" || arglist="$arglist \"$argval\""
elif test -n "$optarg"
then
newarg="$optarg"
eval $optarg=\"$argval\"
optarg=""
else
case $argval in
-h | --help | --h*) # -h for help
echo "$usage"
exit $?
;;
-m) # -m PERM arg
optarg=dirmode
;;
--version)
echo "$0 $scriptversion"
exit $?
;;
--require=*) # --require=REQDIR arg
reqdir=`echo $argval | sed -n s'/[^=]*=//'p`
newarg=reqdir
;;
--require) # --require REQDIR arg
optarg=reqdir
;;
--) # stop option processing
optarg=disabled
;;
-*) # unknown option
echo >&2 "$0: illegal option -- $argval"
echo >&2 "$usage"
exit 1
;;
*) # non-option arg
test -d "$argval" || arglist="$arglist \"$argval\""
;;
esac
fi
case $newarg in
reqdir)
test -d "${reqdir}" ||
{
echo >&2 "$0: $reqdir: directory must exist"
exit 1
} ;;
esac
done
if test -n "$optarg" && test "x$optarg" != xdisabled
then
test x$optarg = xdirmode && optarg="-m"
echo >&2 "$0: $optarg: argument expected"
exit 1
fi
eval set $arglist; shift
test $# -gt 0 || exit 0
# 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
case $file in
/*) pathcomp=/ ;;
*) pathcomp= ;;
esac
oIFS=$IFS
IFS=/
set fnord $file
shift
IFS=$oIFS
for d
do
test "x$d" = x && continue
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:
Jump to Line
Something went wrong with that request. Please try again.