#!/bin/sh
# Make directory hierarchy. 
# Written by Noah Friedman <friedman@prep.ai.mit.edu>
# (Minor modificatons by karl@cs.umb.edu.)
# Public domain.

for file in ${1+"$@"} ; do 
   oIFS="${IFS}"; IFS='/'; set - ${file}; IFS="${oIFS}"
   test ".${1}" = "." && shift

   pathcomp=''

   while test $# -ne 0 ; do
     pathcomp="${pathcomp}/${1}"
     shift

     if test ! -d "${pathcomp}"; then
        echo "mkdir $pathcomp" 1>&2
        mkdir "${pathcomp}" || exit 1
     fi
   done
done

exit 0

Date: Fri, 14 May 93 12:47:22 edt
From: friedman@gnu.ai.mit.edu (Noah Friedman)
To: meyering@idefix.comco.com
Cc: gnu-prog-disc@gnu.ai.mit.edu
Subject: Re: directory-making fragment

>Hi Noah.
>I'm thinking about adding this to the *utils.
>Have you heard anything that would indicate I shouldn't?

No, though I discovered from personal experience that this shell fragment
is too long on some systems to appear on a command line.  The pty buffer on
some systems is very small---if you try to do "make installdirs", you get
an immediate failure.  Running it interactively just prints lots of C-g's. 

What I did for the texinfo distribution is to put the script in a separate
file called `mkinstalldirs', then invoke it from the Makefile with the
appropriate arguments.  Here is what it looks like:

    #!/bin/sh
    # Make directory hierarchy. 
    # Written by Noah Friedman <friedman@prep.ai.mit.edu>
    # Public domain.

    umask 002
    for file in ${1+"$@"} ; do 
       oIFS="${IFS}"; IFS='/'; set - ${file}; IFS="${oIFS}"
       test ".${1}" = "." && shift

       pathcomp=''

       while test $# -ne 0 ; do
         pathcomp="${pathcomp}/${1}"
         shift

         if test ! -d "${pathcomp}"; then
            echo "mkdir $pathcomp" 1>&2
            mkdir "${pathcomp}"
         fi
       done
    done

    # eof


>On May 7,  6:18am, Noah Friedman wrote:
>| The following target might be a useful thing for people to include in all
>| GNU Makefiles and make the `install' target depend on it.  This is what I
>| did for Bison.
>| 
>| # Make sure all installation directories, e.g. $(bindir) actually exist by
>| # making them if necessary.
>| installdirs:
>| 	for file in $(bindir) $(datadir) $(libdir) $(infodir) $(mandir) ; do \
>| 	   oIFS="$${IFS}"; IFS='/'; set - $${file}; IFS="$${oIFS}"; \
>| 	   pathcomp=''; test ".$${1}" = "." && shift; \
>| 	   while test $$# -ne 0 ; do \
>| 	     pathcomp="$${pathcomp}/$${1}"; shift; \
>| 	     if test ! -d "$${pathcomp}"; then \
>| 	        echo "making directory $$pathcomp" 1>&2 ; \
>| 	        mkdir "$${pathcomp}"; \
>| 	     fi; \
>| 	   done; \
>| 	done
