codedeps.awk (922B)
1 BEGIN { 2 if(length(target) == 0 || length(srcname) == 0) { 3 exit 2 4 } 5 } 6 7 /^# [0-9]+ "[^"]+"( [0-9]+)*$/ && $3 !~ /^"[<\/]/ { 8 inc[$3]=1 9 } 10 11 /^\/\/ \{IMP\} /{ 12 imp[substr($0,10)] 13 } 14 15 function depname(s) { 16 sub(/"$/, "", s) 17 sub(/^"/, "", s) 18 sub(/^\.\//, "$(src_dir)/", s) 19 return s 20 } 21 22 function deparray(fname) { 23 gsub(/[^a-zA-Z0-9_]/, "__", fname) 24 return "LINKDEP_" fname 25 } 26 27 function objfile(fname) { 28 sub(/\.c$/, ".o", fname) 29 return "$(build_dir)/" fname 30 } 31 32 END { 33 da = deparray(srcname) 34 printf "ifndef %s\n\n", da 35 printf "%s:", target 36 for(f in inc) { 37 printf " %s", depname(f) 38 } 39 printf "\n\n" 40 printf "%s:=%s\n", deparray(srcname), objfile(srcname) 41 append = 0 42 for(f in imp){ 43 if(f == srcname) { 44 continue 45 } 46 printf "include $(build_dir)/%s.deps.mk\n", f 47 append = 1 48 } 49 if(append) { 50 printf "%s+= $(sort ", da 51 for(f in imp){ 52 printf " $(%s)", deparray(f) 53 } 54 printf ")\n" 55 } 56 printf "\nendif\n" 57 }