NetBSD/distrib/sets/makeplist
dyoung 48171b2e00 Fix typo: osreleasese -> osreleases.
Optimizations: do not re-invoke make(1) unnecessarily, it takes a
full second to bootstrap it on my on my anemic PC. Also, use
xargs/find instead of awk/system()/shell to classify each package
path as a file or directory.

For consistency, adopt similar variables names as makeflist uses.

Use the set-list routines in sets.subr instead of duplicating code.
2003-06-23 09:17:04 +00:00

141 lines
2.5 KiB
Bash
Executable File

#!/bin/sh
#
# Print out the files in some or all lists.
# Usage: makeplist [-a arch] [-m machine] [-s setsdir] [-p prefix] setname pkgname
#
# set defaults
for x in $(
${MAKE:-make} -f- all <<EOF
.include <bsd.own.mk>
all:
@echo machine=\${MACHINE}
@echo machine_arch=\${MACHINE_ARCH}
@echo machine_cpu=\${MACHINE_CPU}
@echo object_fmt=\${OBJECT_FMT}
@echo toolchain_missing=\${TOOLCHAIN_MISSING}
.if defined(USE_XF86_4) && (\${USE_XF86_4} != no)
@echo x11_version=4
.else
@echo x11_version=3
.endif
EOF
); do
eval $x
done
. ./sets.subr
setd=`dirname $0`
prefix=/
usage() {
exec 1>&2
echo "Usage: $0 [-a arch] [-m machine] [-s setsdir] [-p prefix] setname pkgname"
echo " -a arch set arch (e.g, m68k, mips, powerpc) [$machine_arch]"
echo " -m machine set machine (e.g, amiga, i386, macppc) [$machine]"
echo " -s setsdir directory to find sets [$setd]"
echo " -p prefix prefix for created plist [$prefix]"
echo " setname pkgname set and package to build plist for"
exit 1
}
# handle args
while : ; do
case $1 in
-a*)
machine_arch=$2; shift
;;
-m*)
machine=$2; shift
;;
-s*)
setd=$2; shift
;;
-p*)
prefix=$2; shift
;;
-*)
usage
;;
*)
break
;;
esac
shift
done
if [ -n "$1" ]; then
setname="$1"
else
usage
fi
if [ -n "$2" ]; then
pkgname=$2
else
usage
fi
# Determine lib type.
if [ "$object_fmt" = "ELF" ]; then
shlib=elf
else
shlib=aout
fi
stlib=$shlib
# Turn off shlibs for some ports.
if [ "$machine_cpu" = "sh3" -o "$machine_arch" = "m68000" ]; then
shlib=no
fi
lkm=yes
# Turn off LKMs for some ports.
if [ "$machine" = "evbppc" ]; then
lkm=no
fi
filename=/tmp/makeplist.$$
ffilename=/tmp/makeplist.files.$$
dfilename=/tmp/makeplist.dirs.$$
list_set_files $setname | \
env PLISTPKG=$pkgname awk -- '/^#/ { next } $2 == ENVIRON["PLISTPKG"] {sub("^\./", "", $1); print $1}' | sort -u > $filename
SELECTDIRS="-maxdepth 0 -type d"
SELECTNONDIRS="-maxdepth 0 ! -type d"
cd $prefix
#
# match the directories
#
xargs echo $SELECTDIRS < $filename | \
while read ignore ignore ignore ignore args; do
[ -z "$args" ] && break
find $args $SELECTDIRS
done | awk '{ print "@dirrm " $1; }' > $dfilename
#
# match the non-directories
#
xargs echo $SELECTNONDIRS < $filename | \
while read ignore ignore ignore ignore ignore args; do
[ -z "$args" ] && break
find $args $SELECTNONDIRS
done > $ffilename
cd -
echo "@cwd $prefix"
if [ -s $ffilename ]; then
cat $ffilename
fi
if [ -s $dfilename ]; then
sort -r $dfilename
fi
rm -f $filename $ffilename $dfilename
exit 0