mkinstalldirs revision 56f6b22b
156f6b22bSmrg#! /bin/sh
256f6b22bSmrg# mkinstalldirs --- make directory hierarchy
356f6b22bSmrg# Author: Noah Friedman <friedman@prep.ai.mit.edu>
456f6b22bSmrg# Created: 1993-05-16
556f6b22bSmrg# Public domain
656f6b22bSmrg
756f6b22bSmrgerrstatus=0
856f6b22bSmrgdirmode=""
956f6b22bSmrg
1056f6b22bSmrgusage="\
1156f6b22bSmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
1256f6b22bSmrg
1356f6b22bSmrg# process command line arguments
1456f6b22bSmrgwhile test $# -gt 0 ; do
1556f6b22bSmrg  case $1 in
1656f6b22bSmrg    -h | --help | --h*)         # -h for help
1756f6b22bSmrg      echo "$usage" 1>&2
1856f6b22bSmrg      exit 0
1956f6b22bSmrg      ;;
2056f6b22bSmrg    -m)                         # -m PERM arg
2156f6b22bSmrg      shift
2256f6b22bSmrg      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
2356f6b22bSmrg      dirmode=$1
2456f6b22bSmrg      shift
2556f6b22bSmrg      ;;
2656f6b22bSmrg    --)                         # stop option processing
2756f6b22bSmrg      shift
2856f6b22bSmrg      break
2956f6b22bSmrg      ;;
3056f6b22bSmrg    -*)                         # unknown option
3156f6b22bSmrg      echo "$usage" 1>&2
3256f6b22bSmrg      exit 1
3356f6b22bSmrg      ;;
3456f6b22bSmrg    *)                          # first non-opt arg
3556f6b22bSmrg      break
3656f6b22bSmrg      ;;
3756f6b22bSmrg  esac
3856f6b22bSmrgdone
3956f6b22bSmrg
4056f6b22bSmrgfor file
4156f6b22bSmrgdo
4256f6b22bSmrg  if test -d "$file"; then
4356f6b22bSmrg    shift
4456f6b22bSmrg  else
4556f6b22bSmrg    break
4656f6b22bSmrg  fi
4756f6b22bSmrgdone
4856f6b22bSmrg
4956f6b22bSmrgcase $# in
5056f6b22bSmrg  0) exit 0 ;;
5156f6b22bSmrgesac
5256f6b22bSmrg
5356f6b22bSmrgcase $dirmode in
5456f6b22bSmrg  '')
5556f6b22bSmrg    if mkdir -p -- . 2>/dev/null; then
5656f6b22bSmrg      echo "mkdir -p -- $*"
5756f6b22bSmrg      exec mkdir -p -- "$@"
5856f6b22bSmrg    fi
5956f6b22bSmrg    ;;
6056f6b22bSmrg  *)
6156f6b22bSmrg    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
6256f6b22bSmrg      echo "mkdir -m $dirmode -p -- $*"
6356f6b22bSmrg      exec mkdir -m "$dirmode" -p -- "$@"
6456f6b22bSmrg    fi
6556f6b22bSmrg    ;;
6656f6b22bSmrgesac
6756f6b22bSmrg
6856f6b22bSmrgfor file
6956f6b22bSmrgdo
7056f6b22bSmrg  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
7156f6b22bSmrg  shift
7256f6b22bSmrg
7356f6b22bSmrg  pathcomp=
7456f6b22bSmrg  for d
7556f6b22bSmrg  do
7656f6b22bSmrg    pathcomp="$pathcomp$d"
7756f6b22bSmrg    case $pathcomp in
7856f6b22bSmrg      -*) pathcomp=./$pathcomp ;;
7956f6b22bSmrg    esac
8056f6b22bSmrg
8156f6b22bSmrg    if test ! -d "$pathcomp"; then
8256f6b22bSmrg      echo "mkdir $pathcomp"
8356f6b22bSmrg
8456f6b22bSmrg      mkdir "$pathcomp" || lasterr=$?
8556f6b22bSmrg
8656f6b22bSmrg      if test ! -d "$pathcomp"; then
8756f6b22bSmrg  	errstatus=$lasterr
8856f6b22bSmrg      else
8956f6b22bSmrg  	if test ! -z "$dirmode"; then
9056f6b22bSmrg	  echo "chmod $dirmode $pathcomp"
9156f6b22bSmrg    	  lasterr=""
9256f6b22bSmrg  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
9356f6b22bSmrg
9456f6b22bSmrg  	  if test ! -z "$lasterr"; then
9556f6b22bSmrg  	    errstatus=$lasterr
9656f6b22bSmrg  	  fi
9756f6b22bSmrg  	fi
9856f6b22bSmrg      fi
9956f6b22bSmrg    fi
10056f6b22bSmrg
10156f6b22bSmrg    pathcomp="$pathcomp/"
10256f6b22bSmrg  done
10356f6b22bSmrgdone
10456f6b22bSmrg
10556f6b22bSmrgexit $errstatus
10656f6b22bSmrg
10756f6b22bSmrg# Local Variables:
10856f6b22bSmrg# mode: shell-script
10956f6b22bSmrg# sh-indentation: 2
11056f6b22bSmrg# End:
11156f6b22bSmrg# mkinstalldirs ends here
112