10cc6efb6Smrg#! /bin/sh 20cc6efb6Smrg# mkinstalldirs --- make directory hierarchy 30cc6efb6Smrg# Author: Noah Friedman <friedman@prep.ai.mit.edu> 40cc6efb6Smrg# Created: 1993-05-16 50cc6efb6Smrg# Public domain 60cc6efb6Smrg 70cc6efb6Smrgerrstatus=0 80cc6efb6Smrgdirmode="" 90cc6efb6Smrg 100cc6efb6Smrgusage="\ 110cc6efb6SmrgUsage: mkinstalldirs [-h] [--help] [-m mode] dir ..." 120cc6efb6Smrg 130cc6efb6Smrg# process command line arguments 140cc6efb6Smrgwhile test $# -gt 0 ; do 150cc6efb6Smrg case $1 in 160cc6efb6Smrg -h | --help | --h*) # -h for help 170cc6efb6Smrg echo "$usage" 1>&2 180cc6efb6Smrg exit 0 190cc6efb6Smrg ;; 200cc6efb6Smrg -m) # -m PERM arg 210cc6efb6Smrg shift 220cc6efb6Smrg test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } 230cc6efb6Smrg dirmode=$1 240cc6efb6Smrg shift 250cc6efb6Smrg ;; 260cc6efb6Smrg --) # stop option processing 270cc6efb6Smrg shift 280cc6efb6Smrg break 290cc6efb6Smrg ;; 300cc6efb6Smrg -*) # unknown option 310cc6efb6Smrg echo "$usage" 1>&2 320cc6efb6Smrg exit 1 330cc6efb6Smrg ;; 340cc6efb6Smrg *) # first non-opt arg 350cc6efb6Smrg break 360cc6efb6Smrg ;; 370cc6efb6Smrg esac 380cc6efb6Smrgdone 390cc6efb6Smrg 400cc6efb6Smrgfor file 410cc6efb6Smrgdo 420cc6efb6Smrg if test -d "$file"; then 430cc6efb6Smrg shift 440cc6efb6Smrg else 450cc6efb6Smrg break 460cc6efb6Smrg fi 470cc6efb6Smrgdone 480cc6efb6Smrg 490cc6efb6Smrgcase $# in 500cc6efb6Smrg 0) exit 0 ;; 510cc6efb6Smrgesac 520cc6efb6Smrg 530cc6efb6Smrgcase $dirmode in 540cc6efb6Smrg '') 550cc6efb6Smrg if mkdir -p -- . 2>/dev/null; then 560cc6efb6Smrg echo "mkdir -p -- $*" 570cc6efb6Smrg exec mkdir -p -- "$@" 580cc6efb6Smrg fi 590cc6efb6Smrg ;; 600cc6efb6Smrg *) 610cc6efb6Smrg if mkdir -m "$dirmode" -p -- . 2>/dev/null; then 620cc6efb6Smrg echo "mkdir -m $dirmode -p -- $*" 630cc6efb6Smrg exec mkdir -m "$dirmode" -p -- "$@" 640cc6efb6Smrg fi 650cc6efb6Smrg ;; 660cc6efb6Smrgesac 670cc6efb6Smrg 680cc6efb6Smrgfor file 690cc6efb6Smrgdo 700cc6efb6Smrg set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` 710cc6efb6Smrg shift 720cc6efb6Smrg 730cc6efb6Smrg pathcomp= 740cc6efb6Smrg for d 750cc6efb6Smrg do 760cc6efb6Smrg pathcomp="$pathcomp$d" 770cc6efb6Smrg case $pathcomp in 780cc6efb6Smrg -*) pathcomp=./$pathcomp ;; 790cc6efb6Smrg esac 800cc6efb6Smrg 810cc6efb6Smrg if test ! -d "$pathcomp"; then 820cc6efb6Smrg echo "mkdir $pathcomp" 830cc6efb6Smrg 840cc6efb6Smrg mkdir "$pathcomp" || lasterr=$? 850cc6efb6Smrg 860cc6efb6Smrg if test ! -d "$pathcomp"; then 870cc6efb6Smrg errstatus=$lasterr 880cc6efb6Smrg else 890cc6efb6Smrg if test ! -z "$dirmode"; then 900cc6efb6Smrg echo "chmod $dirmode $pathcomp" 910cc6efb6Smrg lasterr="" 920cc6efb6Smrg chmod "$dirmode" "$pathcomp" || lasterr=$? 930cc6efb6Smrg 940cc6efb6Smrg if test ! -z "$lasterr"; then 950cc6efb6Smrg errstatus=$lasterr 960cc6efb6Smrg fi 970cc6efb6Smrg fi 980cc6efb6Smrg fi 990cc6efb6Smrg fi 1000cc6efb6Smrg 1010cc6efb6Smrg pathcomp="$pathcomp/" 1020cc6efb6Smrg done 1030cc6efb6Smrgdone 1040cc6efb6Smrg 1050cc6efb6Smrgexit $errstatus 1060cc6efb6Smrg 1070cc6efb6Smrg# Local Variables: 1080cc6efb6Smrg# mode: shell-script 1090cc6efb6Smrg# sh-indentation: 2 1100cc6efb6Smrg# End: 1110cc6efb6Smrg# mkinstalldirs ends here 112