From 5d733fb21be407890790d3b80879b213d9cef946 Mon Sep 17 00:00:00 2001 From: ru Date: Fri, 15 Jul 2005 15:21:12 +0000 Subject: Fix loder(1) to work with libraries. This can be useful to sort long DPADD lists automatically. While here, recognize `W' as the global symbol. This has been tested since 2004. --- usr.bin/lorder/lorder.sh | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'usr.bin/lorder/lorder.sh') diff --git a/usr.bin/lorder/lorder.sh b/usr.bin/lorder/lorder.sh index c908f76..958e95d 100644 --- a/usr.bin/lorder/lorder.sh +++ b/usr.bin/lorder/lorder.sh @@ -52,21 +52,21 @@ S=$(mktemp -t _symbol_) NM=${NM:-nm} # remove temporary files on HUP, INT, QUIT, PIPE, TERM -trap "rm -f $R $S; exit 1" 1 2 3 13 15 +trap "rm -f $R $S $T; exit 1" 1 2 3 13 15 # make sure all the files get into the output for i in $*; do echo $i $i done -# if the line has " T " or " D " it's a globally defined symbol, put it +# if the line has " [TDW] " it's a globally defined symbol, put it # into the symbol file. # # if the line has " U " it's a globally undefined symbol, put it into # the reference file. ${NM} -go $* | sed " - / [TD] / { - s/:.* [TD] / / + / [TDW] / { + s/:.* [TDW] / / w $S d } @@ -77,7 +77,16 @@ ${NM} -go $* | sed " d " -# sort symbols and references on the first field (the symbol) +# eliminate references that can be resolved by the same library. +if [ $(expr "$*" : '.*\.a[[:>:]]') -ne 0 ]; then + sort -u -o $S $S + sort -u -o $R $R + T=$(mktemp -t _temp_) + comm -23 $R $S >$T + mv $T $R +fi + +# sort references and symbols on the second field (the symbol), # join on that field, and print out the file names. sort -k 2 -o $R $R sort -k 2 -o $S $S -- cgit v1.1