dma: don't block on lock/opening the mbox file, backoff instead
[dragonfly.git] / contrib / ncurses-5.4 / test / listused.sh
blob70352faab716ac945effb4b18559d20e99569258
1 #!/bin/sh
2 # $Id: listused.sh,v 1.5 2003/07/05 19:02:41 tom Exp $
3 # A very simple script to list entrypoints that are used by either a test
4 # program, or within the libraries. This relies on the output format of 'nm',
5 # and assumes that the libraries are configured with TRACE defined, and using
6 # these options:
7 # --disable-macros
8 # --enable-widec
9 # Static libraries are used, to provide some filtering based on internal usage
10 # of the different symbols.
12 # keep the sorting independent of locale:
13 if test "${LANGUAGE+set}" = set; then LANGUAGE=C; export LANGUAGE; fi
14 if test "${LANG+set}" = set; then LANG=C; export LANG; fi
15 if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
16 if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
17 if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
18 if test "${LC_COLLATE+set}" = set; then LC_COLLATE=C; export LC_COLLATE; fi
20 NM_OPTS=
22 if test ! -d ../objects ; then
23 echo "? need objects to run this script"
24 exit 1
25 elif test ! -d ../lib ; then
26 echo "? need libraries to run this script"
27 exit 1
30 PROGS=
31 for name in `(echo "test:";sort modules; echo "progs:";sort ../progs/modules) |sed -e 's/[ ].*//' -e '/^[#@]/d'`
33 case $name in
34 *:)
35 PROGS="$PROGS $name"
38 NAME=../objects/${name}.o
39 if test -f $NAME
40 then
41 PROGS="$PROGS $NAME"
44 esac
45 done
47 # For each library -
48 for lib in ../lib/*.a
50 LIB=`basename $lib .a`
51 case $LIB in
52 *_*|*+*)
53 continue
55 esac
57 tmp=`echo $LIB|sed -e 's/w$//'`
58 echo
59 echo "${tmp}:"
60 echo $tmp |sed -e 's/./-/g'
61 # Construct a list of public externals provided by the library.
62 WANT=`nm $NM_OPTS $lib |\
63 sed -e 's/^[^ ]*//' \
64 -e 's/^ *//' \
65 -e '/^[ a-z] /d' \
66 -e '/:$/d' \
67 -e '/^$/d' \
68 -e '/^U /d' \
69 -e 's/^[A-Z] //' \
70 -e '/^_/d' |\
71 sort -u`
72 # List programs which use that external.
73 for name in $WANT
75 HAVE=
76 tags=
77 last=
78 for prog in $PROGS
80 case $prog in
81 *:)
82 tags=$prog
85 TEST=`nm $NM_OPTS $prog |\
86 sed -e 's/^[^ ]*//' \
87 -e 's/^ *//' \
88 -e '/^[ a-z] /d' \
89 -e '/:$/d' \
90 -e '/^$/d' \
91 -e 's/^[A-Z] //' \
92 -e '/^_/d' \
93 -e 's/^'${name}'$/_/' \
94 -e '/^[^_]/d'`
95 if test -n "$TEST"
96 then
97 have=`basename $prog .o`
98 if test -n "$HAVE"
99 then
100 if test "$last" = "$tags"
101 then
102 HAVE="$HAVE $have"
103 else
104 HAVE="$HAVE $tags $have"
106 else
107 HAVE="$tags $have"
109 last="$tags"
112 esac
113 done
114 # if we did not find a program using it directly, see if it
115 # is used within a library.
116 if test -z "$HAVE"
117 then
118 for tmp in ../lib/*.a
120 case $tmp in
121 *_*|*+*)
122 continue
124 esac
125 TEST=`nm $NM_OPTS $tmp |\
126 sed -e 's/^[^ ]*//' \
127 -e 's/^ *//' \
128 -e '/^[ a-z] /d' \
129 -e '/:$/d' \
130 -e '/^$/d' \
131 -e '/^[A-TV-Z] /d' \
132 -e 's/^[A-Z] //' \
133 -e '/^_/d' \
134 -e 's/^'${name}'$/_/' \
135 -e '/^[^_]/d'`
136 if test -n "$TEST"
137 then
138 tmp=`basename $tmp .a |sed -e 's/w$//'`
139 HAVE=`echo $tmp | sed -e 's/lib/lib: /'`
140 break
142 done
144 test -z "$HAVE" && HAVE="-"
145 lenn=`expr 39 - length $name`
146 lenn=`expr $lenn / 8`
147 tabs=
148 while test $lenn != 0
150 tabs="${tabs} "
151 lenn=`expr $lenn - 1`
152 done
153 echo "${name}${tabs}${HAVE}"
154 done
155 done