Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 5/3/83; site hou4b.UUCP Path: utzoo!watmath!clyde!burl!ulysses!mhuxj!houxm!vax135!ariel!hou4b!miker From: miker@hou4b.UUCP (Mike Roberson) Newsgroups: net.lang.c,net.sources Subject: makefile dependency-list creator Message-ID: <1174@hou4b.UUCP> Date: Tue, 2-Oct-84 20:51:52 EDT Article-I.D.: hou4b.1174 Posted: Tue Oct 2 20:51:52 1984 Date-Received: Thu, 4-Oct-84 00:59:04 EDT Distribution: net.lang.c,net.sources Organization: AT&T-Island, Holmdel, NJ Lines: 244 [ peel back foil to expose tater tots ] If you've ever gone thorugh a marathon typing session of entering a program from memory, you realize it's tough figuring out the makefile dependency lists for your program. Well, herein lies an automated means of laziness. These scripts, (odeph and hdepo), create makefile dependency-lists. The input to these scripts is as in the following example. Given the input as: grep include *.c | odeph >ch.mk grep include *.c | hdepo >hc.mk or a file, (dotc), containing: file1.c:#includefile1.c:#include file2.c:#include file2.c:#include "fileb.h" file3.c:#include file3.c:#include file4.c:#include file4.c:#include file4.c:#include "fileb.h" file5.c:#include file5.c:#include "fileb.h" redirected into the scripts, as: odeph ch.mk hdepo hc.mk The script 'odeph' produces a makefile dependence list, (ch.mk), of the form: file1.o : stdio.h filea.h file2.o : stdio.h fileb.h file3.o : stdio.h filea.h file4.o : stdio.h filea.h fileb.h file5.o : stdio.h fileb.h The script 'hdepo' produces a makefile dependence list, (hc.mk), of the form: file1.o file3.o file4.o : filea.h file2.o file4.o file5.o : fileb.h file1.o file2.o file3.o file4.o file5.o : stdio.h #########-cut-#########-cut-#########-cut-#########-cut-#########-cut-######### #! /bin/sh export PATH || (echo "You didn't use (Bourne) sh, you bip!" ; kill $$) # DEPENDENCY=${1:-HOME/bin} echo "all files will be put in the directory \"$DEPENDENCY\", ok? ( = no)\c" read foople # echo $DEPENDENCY/READ.ME cat >$DEPENDENCY/READ.ME <<'!DONE!READ.ME!BIP!' 1) Run dep_init to install the files in a certain directory, as: dep_init $HOME/bin which expands "$HOME/bin" and substitutes it for '$DEPENDENCY' in each file; or: dep_init '$HOME/bin' which substitutes '$HOME/bin' for '$DEPENDENCY' in each file. 2) Then run dep_mv as: dep_mv $HOME/bin but not as: dep_mv '$HOME/bin' These scripts take input as in the following example. Given the input as: grep include *.c | odeph >ch.mk grep include *.c | hdepo >hc.mk or a file, (dotc), containing: file1.c:#include file1.c:#include file2.c:#include file2.c:#include "fileb.h" file3.c:#include file3.c:#include file4.c:#include file4.c:#include file4.c:#include "fileb.h" file5.c:#include file5.c:#include "fileb.h" redirected into the scripts, as: odeph ch.mk hdepo hc.mk The script 'odeph' produces a makefile dependence list, (ch.mk), of the form: file1.o : stdio.h filea.h file2.o : stdio.h fileb.h file3.o : stdio.h filea.h file4.o : stdio.h filea.h fileb.h file5.o : stdio.h fileb.h The script 'hdepo' produces a makefile dependence list, (hc.mk), of the form: file1.o file3.o file4.o : filea.h file2.o file4.o file5.o : fileb.h file1.o file2.o file3.o file4.o file5.o : stdio.h -- Mike "The Guy in Suspenders" Roberson UUCP: {ihnp4,akgua,houxm}!hou4b!miker AT&T-Island, Holmdel, NJ Ph: (201)834-3067 (8:15-5:15 Eastern) !DONE!READ.ME!BIP! # echo $DEPENDENCY/dep_init cat >$DEPENDENCY/dep_init <<'!DONE!dep_init!BIP!' #! /bin/sh if [ $# != 1 ]; then echo "usage: $0 path_name | 'path_name'" exit fi # echo "g|\$DEPENDENCY|s||$1|g" >dep.ed.script echo "w" >>dep.ed.script echo "q" >>dep.ed.script for i in odeph hdepo dep.pass1 do ed $i $DEPENDENCY/dep_mv <<'!DONE!dep_mv!BIP!' #! /bin/sh if [ $# != 1 ]; then echo "usage: $0 path_name" exit fi set -x for i in READ.ME dep_mv odeph hdepo dep.pass1 odeph.awk hdepo.awk dep.pass1.awk do mv $i $1 done rm dep_init set - !DONE!dep_mv!BIP! chmod +x $DEPENDENCY/dep_mv # echo $DEPENDENCY/odeph cat >$DEPENDENCY/odeph <<'!DONE!odeph!BIP!' #! /bin/sh tr -s " " " " | awk -f $DEPENDENCY/dep.pass1.awk | sort | awk -f $DEPENDENCY/odeph.awk !DONE!odeph!BIP! chmod u+x $DEPENDENCY/odeph # echo $DEPENDENCY/hdepo cat >$DEPENDENCY/hdepo <<'!DONE!hdepo!BIP!' #! /bin/sh tr -s " " " " | awk -f $DEPENDENCY/dep.pass1.awk | sort -t: +1 | awk -f $DEPENDENCY/hdepo.awk !DONE!hdepo!BIP! chmod u+x $DEPENDENCY/hdepo # echo $DEPENDENCY/dep.pass1 cat >$DEPENDENCY/dep.pass1 <<'!DONE!dep.pass1!BIP!' #! /bin/sh awk -f $DEPENDENCY/dep.pass1.awk !DONE!dep.pass1!BIP! chmod u+x $DEPENDENCY/dep.pass1 # echo $DEPENDENCY/odeph.awk cat >$DEPENDENCY/odeph.awk <<'!DONE!odeph.awk!BIP!' BEGIN { FS = ":" } $1 != prev { printf "\n\n%s:", $1 ; prev = $1 } $1 == prev { printf " %s", $2 } END { printf "\n" } !DONE!odeph.awk!BIP! # echo $DEPENDENCY/hdepo.awk cat >$DEPENDENCY/hdepo.awk <<'!DONE!hdepo.awk!BIP!' BEGIN { FS = ":" } $2 == "" { next } $2 != prev { if (prev) printf ": %s\n\n", prev prev = $2 } $2 == prev { printf "%s ", $1 } END { printf ": %s\n", prev } !DONE!hdepo.awk!BIP! # echo $DEPENDENCY/dep.pass1 cat >$DEPENDENCY/dep.pass1.awk <<'!DONE!dep.pass1.awk!BIP!' BEGIN { FS = ":" } $2 ~ /^#/ { i = index($2, "<") + 1 if (i - 1) { e = index($2, ">") ss = substr($2, i, e - i) e = index($1, ".c") - 1 one = substr($1, 1, e) printf "%s.o:%s\n", one, ss } else { i = index($2, "\"") + 1 if (i - 1) { ss = substr($2, i); e = index(ss, "\"") ss = substr(ss, 1, e - 1) e = index($1, ".c") - 1 one = substr($1, 1, e) printf "%s.o:%s\n", one, ss } } } END { printf "\n" } !DONE!dep.pass1.awk!BIP! #########-cut-#########-cut-#########-cut-#########-cut-#########-cut-######### -- "may you be the subject of retroactive birth control." Mike "The Guy in Suspenders" Roberson UUCP: {ihnp4,akgua,houxm}!hou4b!miker