+++ /dev/null
-#! /usr/bin/awk -f
-# This is an awk script which does dependencies. We do NOT want it to
-# recursively follow #include directives.
-# We only add to dependencies those files which are inside of the rootdir
-# tree :)
-
-#
-# Surely there is a more elegant way to see if a file exists. Anyone know
-# what it is?
-#
-function fileExists(f, TMP, dummy, result) {
- if(result=FILEHASH[f]) {
- if(result=="Yes") {
- return "Yes"
- } else {return ""}
- }
- ERRNO = getline dummy < f
- if(ERRNO >= 0) {
- close(f)
- return FILEHASH[f]="Yes"
- } else {
- FILEHASH[f]="No"
- return ""
- }
-}
-
-function Canonic(path) {
- while (path ~ "/[^/]*/\\.\\./")
- gsub("/[^/]*/\\.\\./","/",path)
- return path
-}
-
-BEGIN{
- hasdep=0
- objprefix=""
- USEDC=0
- if(dolib) {
- # dolib = "libdirectory libname"
- split(dolib, dlib)
- I=0
- rootdir=srcdir
- sub("/$","",rootdir)
- sub("/[^/]*$","",rootdir)
- while (getline > 0) {
- if ($0 ~ "OBJS") {
- objs=$0
- } else if ($0 ~ "^/.*\\.h: \\\\$") {
- sub(": \\\\$","",$0)
- USED[USEDC]=$0
- ++USEDC
- }
- }
- sub("^OBJS=[ ]*\"[ ]*","",objs)
- sub("\"[ ]*","",objs)
- split(objs, obj)
- printf "%s: ", dlib[2]
- sub("/$","", dlib[1])
- objprefix=dlib[1]"/"
- for (fname in obj) {
- fullname=dlib[1]"/"obj[fname]
- printf " \\\n %s", fullname
- sub("\\.o$",".c",obj[fname])
- ARGV[ARGC]=obj[fname]
- ++ARGC
- }
- printf "\n"
- }
- if(!hpath) {
- print "hpath is not set"
- exit 1
- }
- if(!srcdir) {
- print "srcdir is not set"
- exit 1
- }
- sub("[/ ]*$","",srcdir)
- srcdir=srcdir"/"
- sub("^\./$","",srcdir)
- split(hpath, parray)
- for(path in parray) {
- sub("^-I","",parray[path])
- sub("[/ ]*$","",parray[path])
- parray[path]=Canonic(parray[path])
- }
- for(path in ARGV) {
- USED[USEDC]=Canonic(srcdir""ARGV[path])
- ++USEDC
- }
-}
-
-/^#[ ]*include[ ]*[<"][^ ]*[>"]/{
- found=0
- if(LASTFILE!=FILENAME) {
- if (hasdep) {
- print cmd
- hasdep=0
- }
- cmd=""
- LASTFILE=FILENAME
- depname=FILENAME
- relpath=FILENAME
- sub("\\.c$",".o: ",depname)
- if (depname==FILENAME) {
- depname=srcdir""depname
- depname=Canonic(depname)
- cmd="\n\t@touch "depname
- } else
- depname=objprefix""depname
- sub("\\.h$",".h: ",depname)
- if(relpath ~ "^\\." ) {
- sub("[^/]*$","", relpath)
- relpath=relpath"/"
- sub("//","/", relpath)
- } else {
- relpath=""
- }
- }
- fname=$0
- sub("^#[ ]*include[ ]*[<\"]","",fname)
- sub("[>\"].*","",fname)
- if(fileExists(relpath""fname)) {
- found=1
- if (!hasdep) {
- printf "%s", depname
- hasdep=1
- }
- fullname=Canonic(srcdir""relpath""fname)
- printf " \\\n %s", fullname
- if(fname ~ "^\\." ) {
- partname=relpath""fname
- afound=0
- for(name in USED) {
- if (USED[name] == fullname) {
- afound=1
- break
- }
- }
- if (!afound) {
- ARGV[ARGC]=partname
- ++ARGC
- USED[USEDC]=fullname
- ++USEDC
- }
- }
- } else {
- for(path in parray) {
- if(fileExists(parray[path]"/"fname)) {
- found=1
- if (!hasdep) {
- printf "%s", depname
- hasdep=1
- }
- printf " \\\n %s", parray[path]"/"fname
- }
- }
- }
-}
-
-END{
- if (hasdep) {
- print cmd
- }
-}