11#! /bin/sh
22# mkinstalldirs --- make directory hierarchy
3- # Author: Noah Friedman <friedman@prep.ai.mit.edu>
3+
4+ scriptversion=2004-02-15.20
5+
6+ # Original author: Noah Friedman <friedman@prep.ai.mit.edu>
47# Created: 1993-05-16
5- # Public domain
8+ # Public domain.
9+ #
10+ # This file is maintained in Automake, please report
11+ # bugs to <bug-automake@gnu.org> or send patches to
12+ # <automake-patches@gnu.org>.
613
714errstatus=0
815dirmode=" "
916
1017usage=" \
11- Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
18+ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
19+
20+ Create each directory DIR (with mode MODE, if specified), including all
21+ leading file name components.
22+
23+ Report bugs to <bug-automake@gnu.org>."
1224
1325# process command line arguments
1426while test $# -gt 0; do
1527case $1 in
1628 -h | --help | --h* )# -h for help
17- echo " $usage " 1>&2
29+ echo " $usage "
1830exit 0
1931 ;;
2032 -m)# -m PERM arg
@@ -23,6 +35,10 @@ while test $# -gt 0 ; do
2335 dirmode=$1
2436shift
2537 ;;
38+ --version)
39+ echo " $0 $scriptversion "
40+ exit 0
41+ ;;
2642 --)# stop option processing
2743shift
2844break
@@ -50,17 +66,37 @@ case $# in
5066 0)exit 0 ;;
5167esac
5268
69+ # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and
70+ # mkdir -p a/c at the same time, both will detect that a is missing,
71+ # one will create a, then the other will try to create a and die with
72+ # a "File exists" error. This is a problem when calling mkinstalldirs
73+ # from a parallel make. We use --version in the probe to restrict
74+ # ourselves to GNU mkdir, which is thread-safe.
5375case $dirmode in
5476' ' )
55- if mkdir -p --. 2 > /dev/null; then
77+ if mkdir -p --version . > /dev/null2>&1 && test ! -d ./--version ; then
5678echo " mkdir -p --$* "
5779exec mkdir -p --" $@ "
80+ else
81+ # On NextStep and OpenStep, the `mkdir' command does not
82+ # recognize any option. It will interpret all options as
83+ # directories to create, and then abort because `.' already
84+ # exists.
85+ test -d ./-p&& rmdir ./-p
86+ test -d ./--version&& rmdir ./--version
5887fi
5988 ;;
6089* )
61- if mkdir -m" $dirmode " -p --. 2> /dev/null; then
90+ if mkdir -m" $dirmode " -p --version. > /dev/null2>&1 &&
91+ test ! -d ./--version; then
6292echo " mkdir -m$dirmode -p --$* "
6393exec mkdir -m" $dirmode " -p --" $@ "
94+ else
95+ # Clean up after NextStep and OpenStep mkdir.
96+ for d in ./-m ./-p ./--version" ./$dirmode " ;
97+ do
98+ test -d$d && rmdir$d
99+ done
64100fi
65101 ;;
66102esac
84120 mkdir" $pathcomp " || lasterr=$?
85121
86122if test ! -d" $pathcomp " ; then
87- errstatus=$lasterr
123+ errstatus=$lasterr
88124else
89- if test ! -z" $dirmode " ; then
125+ if test ! -z" $dirmode " ; then
90126echo " chmod$dirmode $pathcomp "
91- lasterr=" "
92- chmod" $dirmode " " $pathcomp " || lasterr=$?
127+ lasterr=" "
128+ chmod" $dirmode " " $pathcomp " || lasterr=$?
93129
94- if test ! -z" $lasterr " ; then
95- errstatus=$lasterr
96- fi
97- fi
130+ if test ! -z" $lasterr " ; then
131+ errstatus=$lasterr
132+ fi
133+ fi
98134fi
99135fi
100136
@@ -107,5 +143,8 @@ exit $errstatus
107143# Local Variables:
108144# mode: shell-script
109145# sh-indentation: 2
146+ # eval: (add-hook 'write-file-hooks 'time-stamp)
147+ # time-stamp-start: "scriptversion="
148+ # time-stamp-format: "%:y-%02m-%02d.%02H"
149+ # time-stamp-end: "$"
110150# End:
111- # mkinstalldirs ends here