diff options
author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:59 -0400 |
---|---|---|
committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:34:59 -0400 |
commit | ce7edc9b3c7370f32fec0bc7a8ec3e29ed9a5f61 (patch) | |
tree | acdb9a8816483652a9db1a47db71df5df43707c5 /build/order_by_dep.awk | |
parent | 10f5b47dc7c1cf2b9a00991629f43652710322d3 (diff) | |
download | php-ce7edc9b3c7370f32fec0bc7a8ec3e29ed9a5f61.tar.gz |
Imported Upstream version 5.1.1upstream/5.1.1
Diffstat (limited to 'build/order_by_dep.awk')
-rw-r--r-- | build/order_by_dep.awk | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/build/order_by_dep.awk b/build/order_by_dep.awk new file mode 100644 index 000000000..38128b2e1 --- /dev/null +++ b/build/order_by_dep.awk @@ -0,0 +1,89 @@ +BEGIN { + orig_rs = RS; + orig_fs = FS; + RS=" "; + mod_count = 0; + SUBSEP=":"; +} + +function get_deps(module_name, depline, cmd) +{ + # this could probably be made *much* better + RS=orig_rs; + FS="[(,) \t]+" + cmd = "grep PHP_ADD_EXTENSION_DEP ext/" module_name "/config*.m4" + while (cmd | getline) { +# printf("GOT: %s,%s,%s,%s,%s\n", $1, $2, $3, $4, $5); + if (!length($5)) { + $5 = 0; + } + mod_deps[module_name, $4] = $5; + } + close(cmd) + RS=" "; + FS=orig_fs; +} + +function get_module_index(name, i) +{ + for (i in mods) { + if (mods[i] == name) { + return i; + } + } + return -1; +} + +function do_deps(mod_idx, module_name, mod_name_len, dep, ext, val, depidx) +{ + module_name = mods[mod_idx]; + mod_name_len = length(module_name); + + for (ext in mod_deps) { + if (substr(ext, 0, mod_name_len+1) != module_name SUBSEP) { + continue; + } + val = mod_deps[ext]; + ext = substr(ext, mod_name_len+2, length(ext)-mod_name_len); + + depidx = get_module_index(ext); + if (depidx >= 0) { + do_deps(depidx); + } + } + + #printf(" phpext_%s_ptr,\n", module_name); + printf(" phpext_%s_ptr,@NEWLINE@", module_name); + delete mods[mod_idx]; +} + +function count(arr, n, i) +{ + n = 0; + for (i in arr) + n++; + return n; +} + +/^[a-zA-Z0-9_-]+/ { + # mini hack for pedantic awk + gsub("[^a-zA-Z0-9_-]", "", $1) + # add each item to array + mods[mod_count++] = $1 + + # see if it has any module deps + get_deps($1); +} +END { + # order it correctly + out_count = 0; + + while (count(mods)) { + # count down, since we need to assemble it in reverse order + for (i = mod_count-1; i >= 0; --i) { + if (i in mods) { + do_deps(i); + } + } + } +} |