File: mkdirchain

package info (click to toggle)
bibtool 2.55%2Bds-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 2,376 kB
  • sloc: ansic: 10,685; perl: 6,205; makefile: 477; sh: 351; tcl: 51
file content (89 lines) | stat: -rwxr-xr-x 2,629 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/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