makeplist revision 1.18 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
7 rundir="$(dirname "$0")" # ${0%/*} isn't good enough when there's no "/"
8 . "${rundir}/sets.subr"
9 prefix=/
10
11 usage()
12 {
13 cat 1>&2 <<USAGE
14 Usage: ${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
20 USAGE
21 exit 1
22 }
23
24 # handle args
25 while 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
44 done
45 shift $((${OPTIND} - 1))
46 if [ $# -ne 2 ]; then
47 usage
48 fi
49 setname="$1"
50 pkgname="$2"
51
52 filename="/tmp/makeplist.$$"
53 ffilename="/tmp/makeplist.files.$$"
54 dfilename="/tmp/makeplist.dirs.$$"
55
56 list_set_files "${setname}" | \
57 ${ENV_CMD} PLISTPKG="${pkgname}" ${AWK} '
58 $2 == ENVIRON["PLISTPKG"] {
59 sub("^\\./", "", $1);
60 print $1
61 }' | ${SORT} -u > "${filename}"
62
63 SELECTDIRS="-prune -type d"
64 SELECTNONDIRS="! -type d -print -o ( -type d -prune )"
65
66 cd "${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 #
77 xargs echo ${SELECTDIRS} < "${filename}" | \
78 while read ignore ignore ignore args; do
79 [ -z "${args}" ] && break
80 ${FIND} ${args} ${SELECTDIRS}
81 done | ${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 #
88 xargs echo ${SELECTNONDIRS} < "${filename}" | \
89 while read ignore ignore ignore ignore ignore ignore ignore ignore ignore \
90 ignore args; do
91 [ -z "${args}" ] && break
92 ${FIND} ${args} ${SELECTNONDIRS}
93 done > "${ffilename}"
94
95 cd -
96
97 echo "@cwd ${prefix}"
98 if [ -s "${ffilename}" ]; then
99 cat "${ffilename}"
100 fi
101 if [ -s "${dfilename}" ]; then
102 ${SORT} -r "${dfilename}"
103 fi
104
105 rm -f "${filename}" "${ffilename}" "${dfilename}"
106
107 exit 0
108