1*74a4d8c2SCharles.Forsyth$AWK ' 2*74a4d8c2SCharles.ForsythBEGIN{ 3*74a4d8c2SCharles.Forsyth var["dev"] = "DEVS="; 4*74a4d8c2SCharles.Forsyth var["vga"] = "VGAS="; 5*74a4d8c2SCharles.Forsyth var["ether"] = "ETHERS="; 6*74a4d8c2SCharles.Forsyth var["init"] = "INIT="; 7*74a4d8c2SCharles.Forsyth var["ip"] = "IP="; 8*74a4d8c2SCharles.Forsyth var["port"] = "PORT="; 9*74a4d8c2SCharles.Forsyth var["misc"] = "MISC="; 10*74a4d8c2SCharles.Forsyth var["lib"] = "LIBS="; 11*74a4d8c2SCharles.Forsyth var["link"] = "LINKS="; 12*74a4d8c2SCharles.Forsyth var["root"] = "ROOTFILES="; 13*74a4d8c2SCharles.Forsyth infernoroot = ENVIRON["ROOT"]; 14*74a4d8c2SCharles.Forsyth} 15*74a4d8c2SCharles.Forsyth/^$/{ next; 16*74a4d8c2SCharles.Forsyth} 17*74a4d8c2SCharles.Forsyth/^#/{ next; 18*74a4d8c2SCharles.Forsyth} 19*74a4d8c2SCharles.Forsyth/^env/{ 20*74a4d8c2SCharles.Forsyth inenv = 1; 21*74a4d8c2SCharles.Forsyth next; 22*74a4d8c2SCharles.Forsyth} 23*74a4d8c2SCharles.Forsythinenv != 0 && /^[ ]/{ 24*74a4d8c2SCharles.Forsyth sub("^[ ]*", "", $0) 25*74a4d8c2SCharles.Forsyth printf "%s\n", $0 26*74a4d8c2SCharles.Forsyth next 27*74a4d8c2SCharles.Forsyth} 28*74a4d8c2SCharles.Forsyth/^(code|dev|ether|init|ip|lib|link|mod|misc|port|root|vga)/{ 29*74a4d8c2SCharles.Forsyth inenv = 0; 30*74a4d8c2SCharles.Forsyth if(current != "") 31*74a4d8c2SCharles.Forsyth print current; 32*74a4d8c2SCharles.Forsyth current = var[$1]; 33*74a4d8c2SCharles.Forsyth type = $1; 34*74a4d8c2SCharles.Forsyth next; 35*74a4d8c2SCharles.Forsyth} 36*74a4d8c2SCharles.Forsyth/^[^ ]/ { 37*74a4d8c2SCharles.Forsyth inenv = 0; 38*74a4d8c2SCharles.Forsyth if(current != "") 39*74a4d8c2SCharles.Forsyth print current; 40*74a4d8c2SCharles.Forsyth current = ""; 41*74a4d8c2SCharles.Forsyth} 42*74a4d8c2SCharles.Forsythcurrent && /^[ ]/{ 43*74a4d8c2SCharles.Forsyth if(type == "dev") 44*74a4d8c2SCharles.Forsyth file = "dev" $1; 45*74a4d8c2SCharles.Forsyth else if(type == "root"){ 46*74a4d8c2SCharles.Forsyth if (NF > 1) 47*74a4d8c2SCharles.Forsyth file = $2; 48*74a4d8c2SCharles.Forsyth else if ($1 == "/osinit.dis") 49*74a4d8c2SCharles.Forsyth next; # handled via explicit dependency 50*74a4d8c2SCharles.Forsyth else 51*74a4d8c2SCharles.Forsyth file = $1; 52*74a4d8c2SCharles.Forsyth if(have[file] == 0){ 53*74a4d8c2SCharles.Forsyth current = current " " infernoroot file; 54*74a4d8c2SCharles.Forsyth have[file]++; 55*74a4d8c2SCharles.Forsyth } 56*74a4d8c2SCharles.Forsyth next; 57*74a4d8c2SCharles.Forsyth } 58*74a4d8c2SCharles.Forsyth else 59*74a4d8c2SCharles.Forsyth file = $1; 60*74a4d8c2SCharles.Forsyth if(type == "init" || type == "lib") 61*74a4d8c2SCharles.Forsyth current = current " " file; 62*74a4d8c2SCharles.Forsyth else if(have[file] == 0){ 63*74a4d8c2SCharles.Forsyth if(type == "lib") 64*74a4d8c2SCharles.Forsyth current = current " " file; 65*74a4d8c2SCharles.Forsyth else 66*74a4d8c2SCharles.Forsyth current = current " " file "'.$O'"; 67*74a4d8c2SCharles.Forsyth have[file]++; 68*74a4d8c2SCharles.Forsyth } 69*74a4d8c2SCharles.Forsyth for(i = 2; i <= NF; i++){ 70*74a4d8c2SCharles.Forsyth if($i !~ "^[+=-].*"){ 71*74a4d8c2SCharles.Forsyth if(have[$i] == 0){ 72*74a4d8c2SCharles.Forsyth others[++nothers] = $i; 73*74a4d8c2SCharles.Forsyth have[$i]++; 74*74a4d8c2SCharles.Forsyth } 75*74a4d8c2SCharles.Forsyth } 76*74a4d8c2SCharles.Forsyth } 77*74a4d8c2SCharles.Forsyth next; 78*74a4d8c2SCharles.Forsyth} 79*74a4d8c2SCharles.ForsythEND{ 80*74a4d8c2SCharles.Forsyth if(current != "") 81*74a4d8c2SCharles.Forsyth print current; 82*74a4d8c2SCharles.Forsyth for(i = 1; i <= nothers; i++) 83*74a4d8c2SCharles.Forsyth x = x " " others[i] "'.$O' "; 84*74a4d8c2SCharles.Forsyth if(x) 85*74a4d8c2SCharles.Forsyth printf("OTHERS=%s\n", x); 86*74a4d8c2SCharles.Forsyth}' $* 87