Annotation of src/usr.bin/lorder/lorder.sh, Revision 1.15
1.1 deraadt 1: #!/bin/sh -
1.15 ! jca 2: # $OpenBSD: lorder.sh,v 1.14 2003/07/02 00:21:16 avsm Exp $
1.10 espie 3: # $NetBSD: lorder.sh.gnm,v 1.3 1995/12/20 04:45:11 cgd Exp $
1.1 deraadt 4: #
5: # Copyright (c) 1990, 1993
6: # The Regents of the University of California. All rights reserved.
7: #
8: # Redistribution and use in source and binary forms, with or without
9: # modification, are permitted provided that the following conditions
10: # are met:
11: # 1. Redistributions of source code must retain the above copyright
12: # notice, this list of conditions and the following disclaimer.
13: # 2. Redistributions in binary form must reproduce the above copyright
14: # notice, this list of conditions and the following disclaimer in the
15: # documentation and/or other materials provided with the distribution.
1.13 millert 16: # 3. Neither the name of the University nor the names of its contributors
1.1 deraadt 17: # may be used to endorse or promote products derived from this software
18: # without specific prior written permission.
19: #
20: # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21: # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23: # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30: # SUCH DAMAGE.
31: #
32: # @(#)lorder.sh 8.1 (Berkeley) 6/6/93
33: #
34:
1.10 espie 35: # one argument can be optimized: put out the filename twice
1.1 deraadt 36: case $# in
37: 0)
38: echo "usage: lorder file ...";
39: exit ;;
40: 1)
41: echo $1 $1;
42: exit ;;
43: esac
44:
45: # temporary files
1.14 avsm 46: R=`mktemp /tmp/_referenceXXXXXXXXXX` || exit 1
47: S=`mktemp /tmp/_symbolXXXXXXXXXX` || {
1.12 pvalchev 48: rm -f ${R}
49: exit 1
50: }
1.1 deraadt 51:
52: # remove temporary files on HUP, INT, QUIT, PIPE, TERM
1.11 pvalchev 53: trap "rm -f $R $S; exit 0" 0
54: trap "rm -f $R $S; exit 1" 1 2 3 13 15
1.1 deraadt 55:
1.10 espie 56: # make sure files depend on themselves
57: for file in "$@"; do echo "$file $file" ; done
1.15 ! jca 58: # if the line has " T ", " D ", " G ", " R ", it's a globally defined
1.10 espie 59: # symbol, put it into the symbol file.
1.1 deraadt 60: #
61: # if the line has " U " it's a globally undefined symbol, put it into
62: # the reference file.
1.9 d 63: ${NM:-nm} -go "$@" | sed "
1.10 espie 64: / [TDGR] / {
65: s/:.* [TDGR] / /
1.1 deraadt 66: w $S
67: d
68: }
69: / U / {
70: s/:.* U / /
71: w $R
72: }
73: d
74: "
75:
76: # sort symbols and references on the first field (the symbol)
1.10 espie 77: # join on that field, and print out the file names (dependencies).
1.15 ! jca 78: sort -k 2 -o $R $R
! 79: sort -k 2 -o $S $S
! 80: join -j 2 -o 1.1,2.1 $R $S
1.11 pvalchev 81: rm -f $R $S