diff options
author | ru <ru@FreeBSD.org> | 2005-07-15 15:21:12 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2005-07-15 15:21:12 +0000 |
commit | 5d733fb21be407890790d3b80879b213d9cef946 (patch) | |
tree | ac3c73368f35783b9ea16945a3c5985c271b9c6b /usr.bin | |
parent | 31b14305721bc7628636caa27ddcfe8e3858db38 (diff) | |
download | FreeBSD-src-5d733fb21be407890790d3b80879b213d9cef946.zip FreeBSD-src-5d733fb21be407890790d3b80879b213d9cef946.tar.gz |
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.
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/lorder/lorder.sh | 19 |
1 files changed, 14 insertions, 5 deletions
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 |