xref: /inferno-os/os/port/mkdevlist (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
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