]> granicus.if.org Git - postgresql/blob - src/tools/find_typedef
Move USE_WIDE_UPPER_LOWER define to c.h, and remove TS_USE_WIDE and use
[postgresql] / src / tools / find_typedef
1 #!/bin/sh
2
3 # $PostgreSQL: pgsql/src/tools/find_typedef,v 1.11 2008/03/18 23:23:08 momjian Exp $
4
5 # This script attempts to find all typedef's in the postgres binaries
6 # by using 'nm' to report all typedef debugging symbols.
7
8 # For this program to work, you must have compiled all binaries with 
9 # debugging symbols.
10 #
11 # This is run on BSD/OS 4.0 or Linux, so you may need to make changes.
12
13 # Ignore the nm errors about a file not being a binary file.
14 #
15 # It gets typedefs by reading "STABS":
16 #
17 #    http://www.informatik.uni-frankfurt.de/doc/texi/stabs_toc.html
18 #
19 #    objdump:
20 #       -G, --stabs  Display (in raw form) any STABS info in the file
21 #
22 #       --stabs
23 #         Display the contents of the .stab, .stab.index, and
24 #         .stab.excl sections from an ELF file.  This is only
25 #         useful on systems (such as Solaris  2.0)  in  which
26 #         .stab debugging symbol-table entries are carried in
27 #         an ELF section.  In most other file formats, debug-
28 #         ging  symbol-table  entries  are  interleaved  with
29 #         linkage symbols, and are visible in the --syms out-
30 #         put.
31
32
33 if [ "$#" -eq 0 -o ! -d "$1" ]
34 then    echo "Usage:  $0 postgres_binary_directory [...]" 1>&2
35         exit 1
36 fi
37
38 for DIR
39 do      # if objdump -W is recognized, only one line of error should appear
40         if [ `objdump -W 2>&1 | wc -l` -eq 1 ]
41         then    # Linux
42                 # Unfortunately the Linux version doesn't show unreferenced typedefs.
43                 # The problem is that they are still in the source code so should be
44                 # indented properly.  However, I think pgindent only cares about
45                 # the typedef references, not the definitions, so I think it might
46                 # be fine
47                 objdump -W "$DIR"/* |
48                 egrep -A3 '(DW_TAG_typedef|DW_TAG_structure_type|DW_TAG_union_type)' |
49                 awk ' $2 == "DW_AT_name" {print $NF}'
50         else    # BSD/OS
51                 objdump --stabs "$DIR"/* |
52                 awk ' $2 == "LSYM" && $7 ~ /:[tT]/ {sub(":.*", "", $7); print $7}'
53         fi
54 done |
55 grep -v ' ' | # some typedefs have spaces, remove them
56 sort |
57 uniq |
58 # these are used both for typedefs and variable names
59 # so do not include them
60 egrep -v '^(date|interval|timestamp|ANY)$'