Add Linux support to find_typedefs, with help from Alvaro.
authorBruce Momjian
Tue, 18 Mar 2008 22:45:11 +0000 (22:45 +0000)
committerBruce Momjian
Tue, 18 Mar 2008 22:45:11 +0000 (22:45 +0000)
src/tools/find_typedef

index 1b0930ca358b921d99673aafc6a512e26749c6f0..26715777a3dec7a78f019f60367a55847cdd1d7b 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# $PostgreSQL: pgsql/src/tools/find_typedef,v 1.8 2007/12/21 21:02:41 momjian Exp $
+# $PostgreSQL: pgsql/src/tools/find_typedef,v 1.9 2008/03/18 22:45:11 momjian Exp $
 
 # This script attempts to find all typedef's in the postgres binaries
 # by using 'nm' to report all typedef debugging symbols.
@@ -8,7 +8,7 @@
 # For this program to work, you must have compiled all binaries with 
 # debugging symbols.
 #
-# This is run on BSD/OS 4.0, so you may need to make changes.
+# This is run on BSD/OS 4.0 or Linux, so you may need to make changes.
 # 
 # Ignore the nm errors about a file not being a binary file.
 #
@@ -37,10 +37,18 @@ fi
 
 for DIR
 do
-   objdump --stabs "$DIR"/* |
-   awk ' $2 == "LSYM" && $7 ~ /:[tT]/ {sub(":.*", "", $7); print $7}' |
-   grep -v ' ' # some typedefs have spaces, remove them
+   if [ `objdump -W 2>&1 | wc -l` -eq 1 ]
+   then    # Linux
+       # unfortunately the Linux version doesn't show unreferenced typedefs
+       objdump -W "$DIR"/* |
+       egrep -A3 '(DW_TAG_typedef|DW_TAG_structure_type|DW_TAG_union_type)' |
+       awk ' $2 == "DW_AT_name" {print $NF}'
+   else    # BSD/OS
+       objdump --stabs "$DIR"/* |
+       awk ' $2 == "LSYM" && $7 ~ /:[tT]/ {sub(":.*", "", $7); print $7}'
+   fi
 done |
+grep -v ' ' | # some typedefs have spaces, remove them
 sort |
 uniq |
 # these are used both for typedefs and variable names