3 # Print out the files in some or all lists.
4 # Usage: makeplist [options] setname pkgname
6 # -a arch set arch (e.g, m68k, mips, powerpc)
7 # -m machine set machine (e.g, amiga, i386, macppc)
8 # -s setsdir directory to find sets
9 # -p prefix prefix for package creation
10 # -I realprefix prefix for eventual installation
11 # setname pkgname set and package to build plist for
14 rundir
="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
15 .
"${rundir}/sets.subr"
22 Usage: $0 [options] setname pkgname"
24 -a arch set arch (e.g, m68k, mips, powerpc) [${MACHINE_ARCH}]
25 -m machine set machine (e.g, amiga, i386, macppc) [${MACHINE}]
26 -s setsdir directory to find sets [${setsdir}]
27 -p prefix prefix for created plist [${prefix}]
28 -I realprefix prefix for eventual installation [${realprefix}]
29 setname pkgname set and package to build plist for
35 while getopts a
:I
:m
:p
:s
: ch
; do
38 MACHINE_ARCH
="${OPTARG}"
39 MACHINE_CPU
="$(arch_to_cpu "${OPTARG}")"
59 shift $
((${OPTIND} - 1))
66 if ! ${got_realprefix}; then
67 realprefix
="${prefix}"
70 filename
="/tmp/makeplist.$$"
71 ffilename
="/tmp/makeplist.files.$$"
72 dfilename
="/tmp/makeplist.dirs.$$"
74 list_set_files
"${setname}" | \
75 ${ENV_CMD} PLISTPKG="${pkgname}" ${AWK} '
76 $2 == ENVIRON["PLISTPKG"] {
79 }' |
${SORT} -u > "${filename}"
81 SELECTDIRS
="-prune -type d"
82 SELECTNONDIRS
="! -type d -print -o ( -type d -prune )"
85 # XXX: The "lists" do not differentiate between directories and files.
86 # But we need to differentiate between them, so we do so by checking
87 # what's actually present in the file system. Files or directories that
88 # are listed in the "lists" but that do not exist in the file system end
89 # up not appearing in our output, and this subverts a large part of the
90 # purpose of the "lists".
92 # XXX: Given that we have to figure out what is or is not a directory
93 # without assistance from the "lists", it would be much more efficient
94 # to consult the metalog instead of the file system.
101 # Match the directories. Use find(1) to avoid repeat calls to
104 # This is a little clever. I cannot use 'xargs find', because
105 # find wants for the option arguments to follow the path arguments.
106 # So I use 'xargs echo ${SELECTDIRS}' to make a maximum-length proto-command
107 # line. I use 'read' to peel the options off the front of the
108 # command-line, and 'find ${args} ${SELECTDIRS}' to put them at the end.
110 xargs echo ${SELECTDIRS} < "${filename}" | \
111 while read ignore ignore ignore args
; do
112 [ -z "${args}" ] && break
113 ${FIND} ${args} ${SELECTDIRS}
114 done |
${AWK} '{ print "@dirrm " $1; }' > "${dfilename}"
117 # Match the non-directories. Use find(1) to avoid repeat calls to
118 # 'test ! -d'. See 'Match the directories' for an explanation of the
121 xargs echo ${SELECTNONDIRS} < "${filename}" | \
122 while read ignore ignore ignore ignore ignore ignore ignore ignore ignore \
124 [ -z "${args}" ] && break
125 ${FIND} ${args} ${SELECTNONDIRS}
126 done > "${ffilename}"
130 echo "@cwd ${realprefix}"
131 if [ -s "${ffilename}" ]; then
134 if [ -s "${dfilename}" ]; then
135 ${SORT} -r "${dfilename}"
138 rm -f "${filename}" "${ffilename}" "${dfilename}"