#!/bin/sh

# $PostgreSQL: pgsql/src/tools/find_static,v 1.4 2006/03/11 04:38:41 momjian Exp $

trap "rm -f /tmp/$$" 0 1 2 3 15

# This script finds functions that are either never called, or
# should be static.
# Some functions, like library functions and debug_print functions,
# should remain unchanged.

# Run on a compiled source tree, from the top of the source tree

# My nm utility has 9 characters of address which I strip, then a 'type'
# character, with T as a text function, and U as an undefined function
# symbol, then the function name.

find . -name '[a-z]*.o' -type f -print | while read FILE
do
	nm $FILE | cut -c10-100 |awk '{printf "%s\t%s\t%s\n", "'"$FILE"'",$1,$2}'
done >/tmp/$$
dropdb debug
createdb debug
echo "
	create table debug (file text, scope char, func text);

	copy debug from '/tmp/"$$"';

	select 	* 
	into	table debug2 
	from 	debug;

	create index idebug on debug(scope,func);
	create index idebug2 on debug2(func,scope);
	vacuum debug;
	vacuum debug2;

	update 	debug2 
	set 	scope = '_' 
	from 	debug
	where 	debug2.func = debug.func and
		debug2.scope = 'T' and debug.scope = 'U';

	delete 	from debug2
	where 	scope = '_';

	select 	*
	from 	debug2
	where	scope = 'T'
        order by file, func;
" |psql debug

