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