Importing lorder

Change-Id: I0043c56a40a69ea809c909285c06de0273bada9f
This commit is contained in:
Lionel Sambuc 2012-12-04 13:14:52 +01:00
parent 0fbbaa43e9
commit d71cc7b9f6
9 changed files with 220 additions and 2 deletions

View File

@ -276,6 +276,7 @@
./usr/bin/logger minix-sys
./usr/bin/login minix-sys
./usr/bin/look minix-sys
./usr/bin/lorder minix-sys
./usr/bin/lpd minix-sys
./usr/bin/lp minix-sys
./usr/bin/lspci minix-sys
@ -1291,6 +1292,7 @@
./usr/man/man1/logger.1 minix-sys
./usr/man/man1/login.1 minix-sys
./usr/man/man1/look.1 minix-sys
./usr/man/man1/lorder.1 minix-sys
./usr/man/man1/lp.1 minix-sys
./usr/man/man1/ls.1 minix-sys
./usr/man/man1/lspci.1 minix-sys

View File

@ -1,3 +1,8 @@
20121205:
lorder requires a newer version of sort, so to ensure it is present
do the following:
# make -C usr.bin/sort clean all install
20121127:
/etc/mtab is now obsoleted by /proc/mounts. You need to create a
symlink:

View File

@ -54,6 +54,7 @@
2012/10/17 12:00:00,tools/headerlist
2012/10/17 12:00:00,tools/host-mkdep
2012/10/17 12:00:00,tools/lex
2012/10/17 12:00:00,tools/lorder
2012/10/17 12:00:00,tools/Makefile
2012/10/17 12:00:00,tools/Makefile.gnuhost
2012/10/17 12:00:00,tools/Makefile.host
@ -66,6 +67,7 @@
2012/10/17 12:00:00,tools/tic
2012/10/17 12:00:00,usr.bin/gzip/Makefile
2012/10/17 12:00:00,usr.bin/indent
2012/10/17 12:00:00,usr.bin/lorder
2012/10/17 12:00:00,usr.bin/Makefile
2012/10/17 12:00:00,usr.bin/Makefile.inc
2012/10/17 12:00:00,usr.bin/passwd/Makefile

View File

@ -61,7 +61,7 @@ LINT_BITS= lint lint2
SUBDIR= host-mkdep .WAIT compat .WAIT \
binstall .WAIT mktemp .WAIT sed .WAIT \
genassym \
makewhatis mkdep mtree .WAIT \
lorder makewhatis mkdep mtree .WAIT \
m4 \
.WAIT mkfs.mfs \
.WAIT yacc \

28
tools/lorder/Makefile Normal file
View File

@ -0,0 +1,28 @@
# $NetBSD: Makefile,v 1.11 2008/10/25 22:15:28 apb Exp $
.include <bsd.own.mk>
COMPATOBJ!= cd ${.CURDIR}/../compat && ${PRINTOBJDIR}
.-include "${COMPATOBJ}/defs.mk"
TIMESTAMP= ${TOOLDIR}/bin/${_TOOL_PREFIX}lorder
CLEANFILES+= lorder
.PATH: ${.CURDIR}/../../usr.bin/lorder
.include <bsd.hostprog.mk>
install: ${TIMESTAMP}
${TIMESTAMP}: lorder
${HOST_INSTALL_FILE} -m ${BINMODE} ${.ALLSRC} ${.TARGET}
lorder: lorder.sh
${TOOL_SED} -e "s,/bin/sh,"${HOST_BSHELL:Q}",g" \
-e "s,{JOIN:=.*},{JOIN:="${TOOL_JOIN:Q}"}," \
-e "s,{MKTEMP:=.*},{MKTEMP:="${TOOL_MKTEMP:Q}"}," \
-e "s,{NM:=.*},{NM:="${NM:Q}"}," \
-e "s,{SED:=.*},{SED:="${TOOL_SED:Q}"}," \
< ${.ALLSRC} > ${.TARGET}
realall: lorder

View File

@ -12,7 +12,7 @@ SUBDIR= \
genassym \
indent \
ldd \
login m4 \
login lorder m4 \
make man \
mkdep mktemp \
newgrp \

8
usr.bin/lorder/Makefile Normal file
View File

@ -0,0 +1,8 @@
# $NetBSD: Makefile,v 1.11 1997/03/24 21:59:43 christos Exp $
# @(#)Makefile 8.1 (Berkeley) 6/6/93
MAN= lorder.1
SCRIPTS=lorder.sh
.include <bsd.prog.mk>

71
usr.bin/lorder/lorder.1 Normal file
View File

@ -0,0 +1,71 @@
.\" $NetBSD: lorder.1,v 1.8 2012/03/22 07:58:19 wiz Exp $
.\"
.\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)lorder.1 8.2 (Berkeley) 4/28/95
.\"
.Dd April 28, 1995
.Dt LORDER 1
.Os
.Sh NAME
.Nm lorder
.Nd list dependencies for object files
.Sh SYNOPSIS
.Nm
.Ar
.Sh DESCRIPTION
The
.Nm
utility uses
.Xr nm 1
to determine interdependencies in the list of object files
specified on the command line.
.Nm
outputs a list of file names where the first file contains a symbol
which is defined by the second file.
.Pp
The output is normally used with
.Xr tsort 1
when a library is created to determine the optimum ordering of the
object modules so that all references may be resolved in a single
pass of the loader.
.Sh EXAMPLES
.Bd -literal -offset indent
ar cr library.a `lorder ${OBJS} | tsort`
.Ed
.Sh SEE ALSO
.Xr ar 1 ,
.Xr ld 1 ,
.Xr nm 1 ,
.Xr ranlib 1 ,
.Xr tsort 1
.Sh HISTORY
An
.Nm
utility appeared in
.At v7 .

102
usr.bin/lorder/lorder.sh Normal file
View File

@ -0,0 +1,102 @@
#!/bin/sh -
# $NetBSD: lorder.sh,v 1.15 2007/01/14 16:29:35 apb Exp $
#
# Copyright (c) 1990, 1993
# The Regents of the University of California. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by the University of
# California, Berkeley and its contributors.
# 4. Neither the name of the University nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#)lorder.sh 8.1 (Berkeley) 6/6/93
#
# If the user has set ${NM} then we use it, otherwise we use 'nm'.
# Similarly for JOIN, MKTEMP, SED, and SORT.
#
# For each of these, we try to find the command in the user's path, and
# if that fails we try to find it in the default path. If we can't
# find it, we punt. Once we find it, we canonicalize its name and set
# the path to the default path so that other commands we use are picked
# properly.
: ${JOIN:=join}
: ${MKTEMP:=mktemp}
: ${NM:=nm}
: ${SED:=sed}
: ${SORT:=sort}
for var in JOIN MKTEMP NM SED SORT ; do
if ! eval type "\$${var}" >/dev/null 2>&1 ; then
PATH=/bin:/usr/bin
export PATH
if ! eval type "\$${var}" > /dev/null 2>&1; then
eval echo "lorder: \$${var}: not found" >&2
exit 1
fi
fi
cmd='set $(eval type "\$${var}") ; eval echo \$$#'
eval "${var}=\$(eval \${cmd})"
done
# only one argument is a special case, just output the name twice
case $# in
0)
echo "usage: lorder file ..." >&2;
exit ;;
1)
echo $1 $1;
exit ;;
esac
# temporary files
N=$("${MKTEMP}" /tmp/_nm_.XXXXXX) || exit 1
R=$("${MKTEMP}" /tmp/_reference_.XXXXXX) || exit 1
S=$("${MKTEMP}" /tmp/_symbol_.XXXXXX) || exit 1
# remove temporary files on exit
trap "rm -f $N $R $S; exit 0" 0
trap "rm -f $N $R $S; exit 1" HUP INT QUIT PIPE TERM 2>/dev/null || \
trap "rm -f $N $R $S; exit 1" 1 2 3 13 15
# if the line ends in a colon, assume it's the first occurrence of a new
# object file. Echo it twice, just to make sure it gets into the output.
#
# if the line has " T " or " D " 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.
(for file in $* ; do echo $file":" ; done ; $NM -go $*) >$N
"${SED}" -ne '/:$/{s/://;s/.*/& &/;p;}' <$N
"${SED}" -ne 's/:.* [TDGR] / /p' <$N >$S
"${SED}" -ne 's/:.* U / /p' <$N >$R
# sort symbols and references on the second field (the symbol)
# join on that field, and print out the file names.
"${SORT}" -k2 $R -o $R
"${SORT}" -k2 $S -o $S
"${JOIN}" -j 2 -o 1.1,2.1 $R $S