xref: /freebsd/usr.bin/lorder/lorder.sh (revision edf8578117e8844e02c0121147f45e4609b30680)
1#!/bin/sh -
2#
3# SPDX-License-Identifier: BSD-3-Clause
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.
16# 3. Neither the name of the University nor the names of its contributors
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#
35
36# only one argument is a special case, just output the name twice
37case $# in
38	0)
39		echo "usage: lorder file ...";
40		exit ;;
41	1)
42		echo $1 $1;
43		exit ;;
44esac
45
46# temporary files
47R=$(mktemp -t _reference_)
48S=$(mktemp -t _symbol_)
49NM=${NM:-nm}
50
51# remove temporary files on HUP, INT, QUIT, PIPE, TERM
52trap "rm -f $R $S $T; exit 1" 1 2 3 13 15
53
54# make sure all the files get into the output
55for i in $*; do
56	echo $i $i
57done
58
59# if the line has " [RTDW] " it's a globally defined symbol, put it
60# into the symbol file.
61#
62# if the line has " U " it's a globally undefined symbol, put it into
63# the reference file.
64${NM} ${NMFLAGS} -go $* | sed "
65	/ [RTDW] / {
66		s/:.* [RTDW] / /
67		w $S
68		d
69	}
70	/ U / {
71		s/:.* U / /
72		w $R
73	}
74	d
75"
76
77export LC_ALL=C
78# eliminate references that can be resolved by the same library.
79if [ $(expr "$*" : '.*\.a[[:>:]]') -ne 0 ]; then
80	sort -u -o $S $S
81	sort -u -o $R $R
82	T=$(mktemp -t _temp_)
83	comm -23 $R $S >$T
84	mv $T $R
85fi
86
87# sort references and symbols on the second field (the symbol),
88# join on that field, and print out the file names.
89sort -k 2 -o $R $R
90sort -k 2 -o $S $S
91join -j 2 -o 1.1 2.1 $R $S
92rm -f $R $S
93