makeplist revision 1.17
1#!/bin/sh 2# 3# Print out the files in some or all lists. 4# Usage: makeplist [-a arch] [-m machine] [-s setsdir] [-p prefix] setname pkgname 5# 6 7rundir=${0%/*} 8. ${rundir}/sets.subr 9prefix=/ 10 11usage() 12{ 13 cat 1>&2 <<USAGE 14Usage: ${0##*/} [-a arch] [-m machine] [-s setsdir] [-p prefix] setname pkgname 15 -a arch set arch (e.g, m68k, mips, powerpc) [$MACHINE_ARCH] 16 -m machine set machine (e.g, amiga, i386, macppc) [$MACHINE] 17 -s setsdir directory to find sets [$setsdir] 18 -p prefix prefix for created plist [$prefix] 19 setname pkgname set and package to build plist for 20USAGE 21 exit 1 22} 23 24# handle args 25while getopts a:m:p:s: ch; do 26 case ${ch} in 27 a) 28 MACHINE_ARCH=${OPTARG} 29 MACHINE_CPU=$(arch_to_cpu ${OPTARG}) 30 ;; 31 m) 32 MACHINE=${OPTARG} 33 ;; 34 p) 35 prefix=${OPTARG} 36 ;; 37 s) 38 setsdir=${OPTARG} 39 ;; 40 *) 41 usage 42 ;; 43 esac 44done 45shift $((${OPTIND} - 1)) 46if [ $# -ne 2 ]; then 47 usage 48fi 49setname="$1" 50pkgname=$2 51 52filename=/tmp/makeplist.$$ 53ffilename=/tmp/makeplist.files.$$ 54dfilename=/tmp/makeplist.dirs.$$ 55 56list_set_files $setname | \ 57 ${ENV_CMD} PLISTPKG=$pkgname ${AWK} ' 58 $2 == ENVIRON["PLISTPKG"] { 59 sub("^\\./", "", $1); 60 print $1 61 }' | ${SORT} -u > $filename 62 63SELECTDIRS="-prune -type d" 64SELECTNONDIRS="! -type d -print -o ( -type d -prune )" 65 66cd $prefix 67# 68# Match the directories. Use find(1) to avoid repeat calls to 69# 'test -d'. 70# 71# This is a little clever. I cannot use 'xargs find', because 72# find wants for the option arguments to follow the path arguments. 73# So I use 'xargs echo $SELECTDIRS' to make a maximum-length proto-command 74# line. I use 'read' to peel the options off the front of the 75# command-line, and 'find $args $SELECTDIRS' to put them at the end. 76# 77xargs echo $SELECTDIRS < $filename | \ 78while read ignore ignore ignore args; do 79 [ -z "$args" ] && break 80 ${FIND} $args $SELECTDIRS 81done | ${AWK} '{ print "@dirrm " $1; }' > $dfilename 82 83# 84# Match the non-directories. Use find(1) to avoid repeat calls to 85# 'test ! -d'. See 'Match the directories' for an explanation of the 86# cleverness. 87# 88xargs echo $SELECTNONDIRS < $filename | \ 89while read ignore ignore ignore ignore ignore ignore ignore ignore ignore \ 90 ignore args; do 91 [ -z "$args" ] && break 92 ${FIND} $args $SELECTNONDIRS 93done > $ffilename 94 95cd - 96 97echo "@cwd $prefix" 98if [ -s $ffilename ]; then 99 cat $ffilename 100fi 101if [ -s $dfilename ]; then 102 ${SORT} -r $dfilename 103fi 104 105rm -f $filename $ffilename $dfilename 106 107exit 0 108