f9f7b262bb
uses find(1) in a non-POSIX way. The trouble is that -maxdepth is not an option for POSIX find(1). His NetBSD 1.6.2 system tripped over that. I converted the -maxdepth uses to -prune, which is POSIX-compatible. While I was in makeplist, I wrote a comment about the xargs/find/read cleverness that I use to generate the @dirrm directives.
108 lines
2.3 KiB
Bash
Executable File
108 lines
2.3 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
|
|
#
|
|
|
|
rundir=${0%/*}
|
|
. ${rundir}/sets.subr
|
|
prefix=/
|
|
|
|
usage()
|
|
{
|
|
cat 1>&2 <<USAGE
|
|
Usage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname pkgname
|
|
-a arch set arch (e.g, m68k, mips, powerpc) [$MACHINE_ARCH]
|
|
-m machine set machine (e.g, amiga, i386, macppc) [$MACHINE]
|
|
-s setsdir directory to find sets [$setsdir]
|
|
-p prefix prefix for created plist [$prefix]
|
|
setname pkgname set and package to build plist for
|
|
USAGE
|
|
exit 1
|
|
}
|
|
|
|
# handle args
|
|
while getopts a:m:p:s: ch; do
|
|
case ${ch} in
|
|
a)
|
|
MACHINE_ARCH=${OPTARG}
|
|
MACHINE_CPU=$(arch_to_cpu ${OPTARG})
|
|
;;
|
|
m)
|
|
MACHINE=${OPTARG}
|
|
;;
|
|
p)
|
|
prefix=${OPTARG}
|
|
;;
|
|
s)
|
|
setsdir=${OPTARG}
|
|
;;
|
|
*)
|
|
usage
|
|
;;
|
|
esac
|
|
done
|
|
shift $((${OPTIND} - 1))
|
|
if [ $# -ne 2 ]; then
|
|
usage
|
|
fi
|
|
setname="$1"
|
|
pkgname=$2
|
|
|
|
filename=/tmp/makeplist.$$
|
|
ffilename=/tmp/makeplist.files.$$
|
|
dfilename=/tmp/makeplist.dirs.$$
|
|
|
|
list_set_files $setname | \
|
|
env PLISTPKG=$pkgname awk '
|
|
$2 == ENVIRON["PLISTPKG"] {
|
|
sub("^\\./", "", $1);
|
|
print $1
|
|
}' | sort -u > $filename
|
|
|
|
SELECTDIRS="-prune -type d"
|
|
SELECTNONDIRS="! -type d -print -o ( -type d -prune )"
|
|
|
|
cd $prefix
|
|
#
|
|
# Match the directories. Use find(1) to avoid repeat calls to
|
|
# 'test -d'.
|
|
#
|
|
# This is a little clever. I cannot use 'xargs find', because
|
|
# find wants for the option arguments to follow the path arguments.
|
|
# So I use 'xargs echo $SELECTDIRS' to make a maximum-length proto-command
|
|
# line. I use 'read' to peel the options off the front of the
|
|
# command-line, and 'find $args $SELECTDIRS' to put them at the end.
|
|
#
|
|
xargs echo $SELECTDIRS < $filename | \
|
|
while read ignore ignore ignore args; do
|
|
[ -z "$args" ] && break
|
|
find $args $SELECTDIRS
|
|
done | awk '{ print "@dirrm " $1; }' > $dfilename
|
|
|
|
#
|
|
# Match the non-directories. Use find(1) to avoid repeat calls to
|
|
# 'test ! -d'. See 'Match the directories' for an explanation of the
|
|
# cleverness.
|
|
#
|
|
xargs echo $SELECTNONDIRS < $filename | \
|
|
while read ignore ignore ignore ignore ignore 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
|