build-scripts/mkinstalldirs
branchSDL-1.2
changeset 12335 5e68900d2232
parent 1361 19418e4422cb
equal deleted inserted replaced
12325:c4f2eeda176f 12335:5e68900d2232
     1 #! /bin/sh
     1 #! /bin/sh
     2 # mkinstalldirs --- make directory hierarchy
     2 # mkinstalldirs --- make directory hierarchy
     3 # Author: Noah Friedman <friedman@prep.ai.mit.edu>
     3 
       
     4 scriptversion=2009-04-28.21; # UTC
       
     5 
       
     6 # Original author: Noah Friedman <friedman@prep.ai.mit.edu>
     4 # Created: 1993-05-16
     7 # 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>.
     6 
    13 
       
    14 nl='
       
    15 '
       
    16 IFS=" ""	$nl"
     7 errstatus=0
    17 errstatus=0
     8 dirmode=""
    18 dirmode=
     9 
    19 
    10 usage="\
    20 usage="\
    11 Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
    21 Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
       
    22 
       
    23 Create each directory DIR (with mode MODE, if specified), including all
       
    24 leading file name components.
       
    25 
       
    26 Report bugs to <bug-automake@gnu.org>."
    12 
    27 
    13 # process command line arguments
    28 # process command line arguments
    14 while test $# -gt 0 ; do
    29 while test $# -gt 0 ; do
    15    case "${1}" in
    30   case $1 in
    16      -h | --help | --h* )			# -h for help
    31     -h | --help | --h*)         # -h for help
    17 	echo "${usage}" 1>&2; exit 0 ;;
    32       echo "$usage"
    18      -m )					# -m PERM arg
    33       exit $?
    19 	shift
    34       ;;
    20 	test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
    35     -m)                         # -m PERM arg
    21 	dirmode="${1}"
    36       shift
    22 	shift ;;
    37       test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
    23      -- ) shift; break ;;			# stop option processing
    38       dirmode=$1
    24      -* ) echo "${usage}" 1>&2; exit 1 ;;	# unknown option
    39       shift
    25      * )  break ;;				# first non-opt arg
    40       ;;
    26    esac
    41     --version)
       
    42       echo "$0 $scriptversion"
       
    43       exit $?
       
    44       ;;
       
    45     --)                         # stop option processing
       
    46       shift
       
    47       break
       
    48       ;;
       
    49     -*)                         # unknown option
       
    50       echo "$usage" 1>&2
       
    51       exit 1
       
    52       ;;
       
    53     *)                          # first non-opt arg
       
    54       break
       
    55       ;;
       
    56   esac
    27 done
    57 done
    28 
    58 
    29 for file
    59 for file
    30 do
    60 do
    31   if test -d "$file"; then
    61   if test -d "$file"; then
    34     break
    64     break
    35   fi
    65   fi
    36 done
    66 done
    37 
    67 
    38 case $# in
    68 case $# in
    39 0) exit 0 ;;
    69   0) exit 0 ;;
    40 esac
    70 esac
    41 
    71 
       
    72 # Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
       
    73 # mkdir -p a/c at the same time, both will detect that a is missing,
       
    74 # one will create a, then the other will try to create a and die with
       
    75 # a "File exists" error.  This is a problem when calling mkinstalldirs
       
    76 # from a parallel make.  We use --version in the probe to restrict
       
    77 # ourselves to GNU mkdir, which is thread-safe.
    42 case $dirmode in
    78 case $dirmode in
    43 '')
    79   '')
    44   if mkdir -p -- . 2>/dev/null; then
    80     if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
    45     echo "mkdir -p -- $*"
    81       echo "mkdir -p -- $*"
    46     exec mkdir -p -- "$@"
    82       exec mkdir -p -- "$@"
    47   fi ;;
    83     else
    48 *)
    84       # On NextStep and OpenStep, the 'mkdir' command does not
    49   if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
    85       # recognize any option.  It will interpret all options as
    50     echo "mkdir -m $dirmode -p -- $*"
    86       # directories to create, and then abort because '.' already
    51     exec mkdir -m "$dirmode" -p -- "$@"
    87       # exists.
    52   fi ;;
    88       test -d ./-p && rmdir ./-p
       
    89       test -d ./--version && rmdir ./--version
       
    90     fi
       
    91     ;;
       
    92   *)
       
    93     if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
       
    94        test ! -d ./--version; then
       
    95       echo "mkdir -m $dirmode -p -- $*"
       
    96       exec mkdir -m "$dirmode" -p -- "$@"
       
    97     else
       
    98       # Clean up after NextStep and OpenStep mkdir.
       
    99       for d in ./-m ./-p ./--version "./$dirmode";
       
   100       do
       
   101         test -d $d && rmdir $d
       
   102       done
       
   103     fi
       
   104     ;;
    53 esac
   105 esac
    54 
   106 
    55 for file
   107 for file
    56 do
   108 do
    57    set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
   109   case $file in
    58    shift
   110     /*) pathcomp=/ ;;
       
   111     *)  pathcomp= ;;
       
   112   esac
       
   113   oIFS=$IFS
       
   114   IFS=/
       
   115   set fnord $file
       
   116   shift
       
   117   IFS=$oIFS
    59 
   118 
    60    pathcomp=
   119   for d
    61    for d
   120   do
    62    do
   121     test "x$d" = x && continue
    63      pathcomp="$pathcomp$d"
       
    64      case "$pathcomp" in
       
    65        -* ) pathcomp=./$pathcomp ;;
       
    66      esac
       
    67 
   122 
    68      if test ! -d "$pathcomp"; then
   123     pathcomp=$pathcomp$d
    69 	echo "mkdir $pathcomp"
   124     case $pathcomp in
       
   125       -*) pathcomp=./$pathcomp ;;
       
   126     esac
    70 
   127 
    71 	mkdir "$pathcomp" || lasterr=$?
   128     if test ! -d "$pathcomp"; then
       
   129       echo "mkdir $pathcomp"
    72 
   130 
    73 	if test ! -d "$pathcomp"; then
   131       mkdir "$pathcomp" || lasterr=$?
    74 	  errstatus=$lasterr
       
    75 	else
       
    76 	  if test ! -z "$dirmode"; then
       
    77 	     echo "chmod $dirmode $pathcomp"
       
    78 
   132 
    79 	     lasterr=""
   133       if test ! -d "$pathcomp"; then
    80 	     chmod "$dirmode" "$pathcomp" || lasterr=$?
   134 	errstatus=$lasterr
       
   135       else
       
   136 	if test ! -z "$dirmode"; then
       
   137 	  echo "chmod $dirmode $pathcomp"
       
   138 	  lasterr=
       
   139 	  chmod "$dirmode" "$pathcomp" || lasterr=$?
    81 
   140 
    82 	     if test ! -z "$lasterr"; then
   141 	  if test ! -z "$lasterr"; then
    83 	       errstatus=$lasterr
   142 	    errstatus=$lasterr
    84 	     fi
       
    85 	  fi
   143 	  fi
    86 	fi
   144 	fi
    87      fi
   145       fi
       
   146     fi
    88 
   147 
    89      pathcomp="$pathcomp/"
   148     pathcomp=$pathcomp/
    90    done
   149   done
    91 done
   150 done
    92 
   151 
    93 exit $errstatus
   152 exit $errstatus
    94 
   153 
    95 # Local Variables:
   154 # Local Variables:
    96 # mode: shell-script
   155 # mode: shell-script
    97 # sh-indentation: 3
   156 # sh-indentation: 2
       
   157 # eval: (add-hook 'write-file-hooks 'time-stamp)
       
   158 # time-stamp-start: "scriptversion="
       
   159 # time-stamp-format: "%:y-%02m-%02d.%02H"
       
   160 # time-stamp-time-zone: "UTC"
       
   161 # time-stamp-end: "; # UTC"
    98 # End:
   162 # End:
    99 # mkinstalldirs ends here