xref: /PHP-5.6/build/order_by_dep.awk (revision c0ce0e79)
1BEGIN {
2	orig_rs = RS;
3	orig_fs = FS;
4	RS=" ";
5	mod_count = 0;
6	SUBSEP=":";
7}
8
9function get_deps(module_name,       depline, cmd)
10{
11	# this could probably be made *much* better
12	RS=orig_rs;
13	FS="[(,) \t]+"
14	cmd = "grep PHP_ADD_EXTENSION_DEP ext/" module_name "/config*.m4"
15	while (cmd | getline) {
16#		printf("GOT: %s,%s,%s,%s,%s\n", $1, $2, $3, $4, $5);
17		if (!length($5)) {
18			$5 = 0;
19		}
20		mod_deps[module_name, $4] = $5;
21	}
22	close(cmd)
23	RS=" ";
24	FS=orig_fs;
25}
26
27function get_module_index(name,  i)
28{
29	for (i in mods) {
30		if (mods[i] == name) {
31			return i;
32		}
33	}
34	return -1;
35}
36
37function do_deps(mod_idx,        module_name, mod_name_len, dep, ext, val, depidx)
38{
39	module_name = mods[mod_idx];
40	mod_name_len = length(module_name);
41
42	for (ext in mod_deps) {
43		if (substr(ext, 0, mod_name_len+1) != module_name SUBSEP) {
44			continue;
45		}
46		val = mod_deps[ext];
47		ext = substr(ext, mod_name_len+2, length(ext)-mod_name_len);
48
49		depidx = get_module_index(ext);
50		if (depidx >= 0) {
51			do_deps(depidx);
52		}
53	}
54	printf("	phpext_%s_ptr,@NEWLINE@", module_name);
55	delete mods[mod_idx];
56}
57
58function count(arr,       n, i)
59{
60	n = 0;
61	for (i in arr)
62		n++;
63	return n;
64}
65
66/^[a-zA-Z0-9_-]+/ {
67	# mini hack for pedantic awk
68	gsub("[^a-zA-Z0-9_-]", "", $1)
69	# add each item to array
70	mods[mod_count++] = $1
71
72	# see if it has any module deps
73	get_deps($1);
74}
75END {
76	# order it correctly
77	out_count = 0;
78
79	while (count(mods)) {
80		for (i = 0; i <= mod_count - 1; i++) {
81			if (i in mods) {
82				do_deps(i);
83			}
84		}
85	}
86}
87