# # mksyms.awk # # Extract symbols to export from C-header files. # output in version-script format for linking shared libraries. # # Copyright (C) 2008 Micheal Adam # BEGIN { inheader=0; indoxygen=0; } END { } { if (inheader) { if (match($0,"[)][^()]*[;][ \t]*$")) { inheader = 0; } next; } if (indoxygen) { if (match($0,"^#[ \t]*else[ \t]*.*$")) { indoxygen = 0; } next; } } /^static/ || /^[ \t]*typedef/ || !/^[a-zA-Z\_\#]/ { next; } /^extern[ \t]+[^()]+[;][ \t]*$/ { gsub(/[^ \t]+[ \t]+/, ""); sub(/[;][ \t]*$/, ""); printf " %s;\n", $0; next; } /^#[ \t]*ifdef[ \t]*DOXYGEN[ \t]*.*$/ { indoxygen=1; next; } # look for function headers: { gotstart = 0; if ($0 ~ /^[A-Za-z_][A-Za-z0-9_]+/) { gotstart = 1; } if(!gotstart) { next; } } /[_A-Za-z0-9]+[ \t]*[(].*[)][^()]*;[ \t]*$/ { sub(/[(].*$/, ""); gsub(/[^ \t]+[ \t]+/, ""); gsub(/^[*]+/, ""); printf " %s;\n",$0; next; } /[_A-Za-z0-9]+[ \t]*[(]/ { inheader=1; sub(/[(].*$/, ""); gsub(/[^ \t]+[ \t]+/, ""); gsub(/^[*]/, ""); printf " %s;\n",$0; next; }