Annotation of embedaddon/php/build/order_by_dep.awk, revision 1.1
1.1 ! misho 1: BEGIN {
! 2: orig_rs = RS;
! 3: orig_fs = FS;
! 4: RS=" ";
! 5: mod_count = 0;
! 6: SUBSEP=":";
! 7: }
! 8:
! 9: function 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:
! 27: function 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:
! 37: function 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:
! 58: function 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: }
! 75: END {
! 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: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>