source: trunk/third/libsoup/mkinstalldirs @ 21108

Revision 21108, 3.3 KB checked in by ghudson, 20 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r21107, which included commits to RCS files with non-trunk default branches.
  • Property svn:executable set to *
Line 
1#! /bin/sh
2# mkinstalldirs --- make directory hierarchy
3
4scriptversion=2004-02-15.20
5
6# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
7# Created: 1993-05-16
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>.
13
14errstatus=0
15dirmode=""
16
17usage="\
18Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
19
20Create each directory DIR (with mode MODE, if specified), including all
21leading file name components.
22
23Report bugs to <bug-automake@gnu.org>."
24
25# process command line arguments
26while test $# -gt 0 ; do
27  case $1 in
28    -h | --help | --h*)         # -h for help
29      echo "$usage"
30      exit 0
31      ;;
32    -m)                         # -m PERM arg
33      shift
34      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
35      dirmode=$1
36      shift
37      ;;
38    --version)
39      echo "$0 $scriptversion"
40      exit 0
41      ;;
42    --)                         # stop option processing
43      shift
44      break
45      ;;
46    -*)                         # unknown option
47      echo "$usage" 1>&2
48      exit 1
49      ;;
50    *)                          # first non-opt arg
51      break
52      ;;
53  esac
54done
55
56for file
57do
58  if test -d "$file"; then
59    shift
60  else
61    break
62  fi
63done
64
65case $# in
66  0) exit 0 ;;
67esac
68
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.
75case $dirmode in
76  '')
77    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
78      echo "mkdir -p -- $*"
79      exec 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
87    fi
88    ;;
89  *)
90    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
91       test ! -d ./--version; then
92      echo "mkdir -m $dirmode -p -- $*"
93      exec 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
100    fi
101    ;;
102esac
103
104for file
105do
106  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
107  shift
108
109  pathcomp=
110  for d
111  do
112    pathcomp="$pathcomp$d"
113    case $pathcomp in
114      -*) pathcomp=./$pathcomp ;;
115    esac
116
117    if test ! -d "$pathcomp"; then
118      echo "mkdir $pathcomp"
119
120      mkdir "$pathcomp" || lasterr=$?
121
122      if test ! -d "$pathcomp"; then
123        errstatus=$lasterr
124      else
125        if test ! -z "$dirmode"; then
126          echo "chmod $dirmode $pathcomp"
127          lasterr=""
128          chmod "$dirmode" "$pathcomp" || lasterr=$?
129
130          if test ! -z "$lasterr"; then
131            errstatus=$lasterr
132          fi
133        fi
134      fi
135    fi
136
137    pathcomp="$pathcomp/"
138  done
139done
140
141exit $errstatus
142
143# Local Variables:
144# mode: shell-script
145# 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: "$"
150# End:
Note: See TracBrowser for help on using the repository browser.