miniroon

Simplistic macaroon-based authorization for Unix systems
git clone https://ccx.te2000.cz/git/miniroon
Log | Files | Refs | README

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 }