xref: /titanic_54/usr/src/contrib/ast/src/cmd/INIT/package.sh (revision 906afcb89d0412cc073b95c2d701a804a8cdb62c)
1*906afcb8SAndy Fiddaman########################################################################
2*906afcb8SAndy Fiddaman#                                                                      #
3*906afcb8SAndy Fiddaman#               This software is part of the ast package               #
4*906afcb8SAndy Fiddaman#          Copyright (c) 1994-2012 AT&T Intellectual Property          #
5*906afcb8SAndy Fiddaman#                      and is licensed under the                       #
6*906afcb8SAndy Fiddaman#                 Eclipse Public License, Version 1.0                  #
7*906afcb8SAndy Fiddaman#                    by AT&T Intellectual Property                     #
8*906afcb8SAndy Fiddaman#                                                                      #
9*906afcb8SAndy Fiddaman#                A copy of the License is available at                 #
10*906afcb8SAndy Fiddaman#          http://www.eclipse.org/org/documents/epl-v10.html           #
11*906afcb8SAndy Fiddaman#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
12*906afcb8SAndy Fiddaman#                                                                      #
13*906afcb8SAndy Fiddaman#              Information and Software Systems Research               #
14*906afcb8SAndy Fiddaman#                            AT&T Research                             #
15*906afcb8SAndy Fiddaman#                           Florham Park NJ                            #
16*906afcb8SAndy Fiddaman#                                                                      #
17*906afcb8SAndy Fiddaman#                 Glenn Fowler <gsf@research.att.com>                  #
18*906afcb8SAndy Fiddaman#                                                                      #
19*906afcb8SAndy Fiddaman########################################################################
20*906afcb8SAndy Fiddaman### this script contains archaic constructs that work with all sh variants ###
21*906afcb8SAndy Fiddaman# package - source and binary package control
22*906afcb8SAndy Fiddaman# Glenn Fowler <gsf@research.att.com>
23*906afcb8SAndy Fiddaman
24*906afcb8SAndy Fiddamancommand=package
25*906afcb8SAndy Fiddaman
26*906afcb8SAndy Fiddamancase $-:$BASH_VERSION in
27*906afcb8SAndy Fiddaman*x*:[0123456789]*)	: bash set -x is broken :; set +ex ;;
28*906afcb8SAndy Fiddamanesac
29*906afcb8SAndy Fiddaman
30*906afcb8SAndy Fiddaman# ksh checks -- ksh between 2007-11-05 and 2011-11-11 conflict with new -lcmd -- wea culpa
31*906afcb8SAndy Fiddamanchecksh()
32*906afcb8SAndy Fiddaman{
33*906afcb8SAndy Fiddaman	egrep 'Version.*(88|1993)' $1 >/dev/null 2>&1 ||
34*906afcb8SAndy Fiddaman	$1 -c '(( .sh.version >= 20111111 ))' >/dev/null 2>&1
35*906afcb8SAndy Fiddaman}
36*906afcb8SAndy Fiddaman
37*906afcb8SAndy Fiddamancase $_AST_BIN_PACKAGE_:$SHELL:$0 in
38*906afcb8SAndy Fiddaman1:*:*|*:/bin/sh:*)
39*906afcb8SAndy Fiddaman	;;
40*906afcb8SAndy Fiddaman*:*/*:*/*)
41*906afcb8SAndy Fiddaman	_AST_BIN_PACKAGE_=1 # prevent non-interactive sh .rc referencing bin/package recursion #
42*906afcb8SAndy Fiddaman	export _AST_BIN_PACKAGE_
43*906afcb8SAndy Fiddaman	if	checksh $SHELL
44*906afcb8SAndy Fiddaman	then	: no -lcmd conflict :
45*906afcb8SAndy Fiddaman	else	case " $* " in
46*906afcb8SAndy Fiddaman		*" debug "*|*" DEBUG "*|*" show "*)
47*906afcb8SAndy Fiddaman			echo $command: $SHELL: warning: possible -lcmd conflict -- falling back to /bin/sh >&2
48*906afcb8SAndy Fiddaman			;;
49*906afcb8SAndy Fiddaman		esac
50*906afcb8SAndy Fiddaman		SHELL=/bin/sh
51*906afcb8SAndy Fiddaman		export SHELL
52*906afcb8SAndy Fiddaman		exec $SHELL "$0" "$@"
53*906afcb8SAndy Fiddaman	fi
54*906afcb8SAndy Fiddaman	;;
55*906afcb8SAndy Fiddamanesac
56*906afcb8SAndy Fiddaman
57*906afcb8SAndy FiddamanLC_ALL=C
58*906afcb8SAndy Fiddamanexport LC_ALL
59*906afcb8SAndy Fiddaman
60*906afcb8SAndy Fiddamansrc="cmd contrib etc lib"
61*906afcb8SAndy Fiddamanuse="/usr/common /exp /usr/local /usr/add-on /usr/addon /usr/tools /usr /opt"
62*906afcb8SAndy Fiddamanusr="/home"
63*906afcb8SAndy Fiddamanlib="" # nee /usr/local/lib /usr/local/shlib
64*906afcb8SAndy Fiddamanccs="/usr/kvm /usr/ccs/bin"
65*906afcb8SAndy Fiddamanorg="gnu GNU"
66*906afcb8SAndy Fiddamanmakefiles="Mamfile Nmakefile nmakefile Makefile makefile"
67*906afcb8SAndy Fiddamanenv="HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH"
68*906afcb8SAndy Fiddamanchecksum=md5sum
69*906afcb8SAndy Fiddamanchecksum_commands="$checksum md5"
70*906afcb8SAndy Fiddamanchecksum_empty="d41d8cd98f00b204e9800998ecf8427e"
71*906afcb8SAndy Fiddaman
72*906afcb8SAndy Fiddamanpackage_use='=$HOSTTYPE=$PACKAGEROOT=$INSTALLROOT=$EXECROOT=$CC='
73*906afcb8SAndy Fiddaman
74*906afcb8SAndy FiddamanPACKAGE_admin_tail_timeout=${PACKAGE_admin_tail_timeout:-"1m"}
75*906afcb8SAndy Fiddaman
76*906afcb8SAndy FiddamanCROSS=0
77*906afcb8SAndy Fiddaman
78*906afcb8SAndy Fiddamanadmin_db=admin.db
79*906afcb8SAndy Fiddamanadmin_env=admin.env
80*906afcb8SAndy Fiddamanadmin_ditto="ditto --checksum --delete --verbose"
81*906afcb8SAndy Fiddamanadmin_ditto_update=--update
82*906afcb8SAndy Fiddamanadmin_ditto_skip="OFFICIAL|core|old|*.core|*.tmp|.nfs*"
83*906afcb8SAndy Fiddamanadmin_list='PACKAGE.$type.lst'
84*906afcb8SAndy Fiddamanadmin_ping="ping -c 1 -w 5"
85*906afcb8SAndy Fiddaman
86*906afcb8SAndy Fiddamandefault_url=default.url
87*906afcb8SAndy FiddamanMAKESKIP=${MAKESKIP:-"*[-.]*"}
88*906afcb8SAndy FiddamanRATZ=ratz
89*906afcb8SAndy FiddamanSED=
90*906afcb8SAndy FiddamanTAR=tar
91*906afcb8SAndy FiddamanTARFLAGS=xv
92*906afcb8SAndy FiddamanTARPROBE=B
93*906afcb8SAndy FiddamanTR=
94*906afcb8SAndy Fiddaman
95*906afcb8SAndy Fiddamanall_types='*.*|sun4'		# all but sun4 match *.*
96*906afcb8SAndy Fiddaman
97*906afcb8SAndy Fiddamancase `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
98*906afcb8SAndy Fiddaman0123)	USAGE=$'
99*906afcb8SAndy Fiddaman[-?
100*906afcb8SAndy Fiddaman@(#)$Id: package (AT&T Research) 2012-06-28 $
101*906afcb8SAndy Fiddaman]'$USAGE_LICENSE$'
102*906afcb8SAndy Fiddaman[+NAME?package - source and binary package control]
103*906afcb8SAndy Fiddaman[+DESCRIPTION?The \bpackage\b command controls source and binary
104*906afcb8SAndy Fiddaman    packages. It is a \bsh\b(1) script coded for maximal portability. All
105*906afcb8SAndy Fiddaman    package files are in the \b$PACKAGEROOT\b directory tree.
106*906afcb8SAndy Fiddaman    \b$PACKAGEROOT\b must at minumum contain a \bbin/package\b command or a
107*906afcb8SAndy Fiddaman    \blib/package\b directory. Binary package files are in the
108*906afcb8SAndy Fiddaman    \b$INSTALLROOT\b (\b$PACKAGEROOT/arch/\b\ahosttype\a) tree, where
109*906afcb8SAndy Fiddaman    \ahosttpe\a=`\bpackage\b`. All \aactions\a but \bhost\b and \buse\b
110*906afcb8SAndy Fiddaman    require the current directory to be under \b$PACKAGEROOT\b. See
111*906afcb8SAndy Fiddaman    \bDETAILS\b for more information.]
112*906afcb8SAndy Fiddaman[+?Note that no environment variables need be set by the user;
113*906afcb8SAndy Fiddaman    \bpackage\b determines the environment based on the current working
114*906afcb8SAndy Fiddaman    directory. The \buse\b action starts a \bsh\b(1) with the environment
115*906afcb8SAndy Fiddaman    initialized. \bCC\b, \bCCFLAGS\b, \bHOSTTYPE\b and \bSHELL\b may be set
116*906afcb8SAndy Fiddaman    by explicit command argument assignments to override the defaults.]
117*906afcb8SAndy Fiddaman[+?Packages are composed of components. Each component is built and
118*906afcb8SAndy Fiddaman    installed by an \bast\b \bnmake\b(1) makefile. Each package is also
119*906afcb8SAndy Fiddaman    described by an \bnmake\b makefile that lists its components and
120*906afcb8SAndy Fiddaman    provides a content description. The package makefile and component
121*906afcb8SAndy Fiddaman    makefiles provide all the information required to read, write, build
122*906afcb8SAndy Fiddaman    and install packages.]
123*906afcb8SAndy Fiddaman[+?Package recipients only need \bsh\b(1) and \bcc\b(1) to build and
124*906afcb8SAndy Fiddaman    install source packages, and \bsh\b to install binary packages.
125*906afcb8SAndy Fiddaman    \bnmake\b and \bksh93\b are required to write new packages. An
126*906afcb8SAndy Fiddaman    \b$INSTALLROOT/bin/cc\b script may be supplied for some architectures.
127*906afcb8SAndy Fiddaman    This script supplies a reasonable set of default options for compilers
128*906afcb8SAndy Fiddaman    that accept multiple dialects or generate multiple object/executable
129*906afcb8SAndy Fiddaman    formats.]
130*906afcb8SAndy Fiddaman[+?The command arguments are composed of a sequence of words: zero or
131*906afcb8SAndy Fiddaman    more \aqualifiers\a, one \aaction\a, and zero or more action-specific
132*906afcb8SAndy Fiddaman    \aarguments\a, and zero or more \aname=value\a definitions. \apackage\a
133*906afcb8SAndy Fiddaman    names a particular package. The naming scheme is a \b-\b separated
134*906afcb8SAndy Fiddaman    hierarchy; the leftmost parts describe ownership, e.g.,
135*906afcb8SAndy Fiddaman    \bgnu-fileutils\b, \bast-base\b. If no packages are specified then all
136*906afcb8SAndy Fiddaman    packages are operated on. \boptget\b(3) documentation options are also
137*906afcb8SAndy Fiddaman    supported. The default with no arguments is \bhost type\b.]
138*906afcb8SAndy Fiddaman[+?The qualifiers are:]
139*906afcb8SAndy Fiddaman    {
140*906afcb8SAndy Fiddaman        [+authorize \aname\a?Remote authorization user name or license
141*906afcb8SAndy Fiddaman            acceptance phrase.]
142*906afcb8SAndy Fiddaman        [+debug|environment?Show environment and actions but do not
143*906afcb8SAndy Fiddaman            execute.]
144*906afcb8SAndy Fiddaman        [+flat?Collapse \b$INSTALLROOT\b { bin fun include lib } onto
145*906afcb8SAndy Fiddaman            \b$PACKAGEROOT\b.]
146*906afcb8SAndy Fiddaman        [+force?Force the action to override saved state.]
147*906afcb8SAndy Fiddaman        [+never?Run make -N and show other actions.]
148*906afcb8SAndy Fiddaman        [+only?Only operate on the specified packages.]
149*906afcb8SAndy Fiddaman        [+password \apassword\a?Remote authorization or license
150*906afcb8SAndy Fiddaman	    acceptance password.]
151*906afcb8SAndy Fiddaman        [+quiet?Do not list captured action output.]
152*906afcb8SAndy Fiddaman        [+show?Run make -n and show other actions.]
153*906afcb8SAndy Fiddaman        [+verbose?Provide detailed action output.]
154*906afcb8SAndy Fiddaman        [+DEBUG?Trace the package script actions in detail.]
155*906afcb8SAndy Fiddaman    }
156*906afcb8SAndy Fiddaman[+?The actions are:]
157*906afcb8SAndy Fiddaman    {
158*906afcb8SAndy Fiddaman        [+admin\b [\ball\b]] [\bdb\b \afile\a]] [\bon\b \apattern\a]][\aaction\a ...]]?Apply
159*906afcb8SAndy Fiddaman            \aaction\a ... to the hosts listed in \afile\a. If \afile\a is
160*906afcb8SAndy Fiddaman            omitted then \badmin.db\b is assumed. The caller must have
161*906afcb8SAndy Fiddaman            \brcp\b(1) and \brsh\b(1) or \bscp\b(1) and \bssh\b(1) access
162*906afcb8SAndy Fiddaman            to the hosts. Output for \aaction\a is saved per-host in the
163*906afcb8SAndy Fiddaman            file \aaction\a\b.log/\b\ahost\a. Logs can be viewed by
164*906afcb8SAndy Fiddaman            \bpackage admin\b [\bon\b \ahost\a]] \bresults\b [\aaction\a]].
165*906afcb8SAndy Fiddaman            By default only local PACKAGEROOT hosts are selected from
166*906afcb8SAndy Fiddaman            \afile\a; \ball\b selects all hosts. \bon\b \apattern\a selects
167*906afcb8SAndy Fiddaman            only hosts matching the \b|\b separated \apattern\a. \afile\a
168*906afcb8SAndy Fiddaman            contains four types of lines. Blank lines and lines beginning
169*906afcb8SAndy Fiddaman            with \b#\b are ignored. Lines starting with \aid\a=\avalue\a
170*906afcb8SAndy Fiddaman            are variable assignments. Set admin_ping to local conventions
171*906afcb8SAndy Fiddaman            if \"'$admin_ping$'\" fails. If a package list is not specified
172*906afcb8SAndy Fiddaman            on the command line the \aaction\a applies to all packages; a
173*906afcb8SAndy Fiddaman            variable assigment \bpackage\b=\"\alist\a\" applies \aaction\a
174*906afcb8SAndy Fiddaman            to the packages in \alist\a for subsequent hosts in \afile\a.
175*906afcb8SAndy Fiddaman            The remaining line type is a host description consisting of 6
176*906afcb8SAndy Fiddaman            tab separated fields. The first 3 are mandatory; the remaining
177*906afcb8SAndy Fiddaman            3 are updated by the \badmin\b action. \afile\a is saved in
178*906afcb8SAndy Fiddaman            \afile\a\b.old\b before update. The fields are:]
179*906afcb8SAndy Fiddaman            {
180*906afcb8SAndy Fiddaman                [+hosttype?The host type as reported by
181*906afcb8SAndy Fiddaman                    \"\bpackage\b\".]
182*906afcb8SAndy Fiddaman                [+[user@]]host?The host name and optionally user name
183*906afcb8SAndy Fiddaman                    for \brcp\b(1) and \brsh\b(1) access.]
184*906afcb8SAndy Fiddaman                [+[remote::[[master]]::]]]]PACKAGEROOT?The absolute remote package
185*906afcb8SAndy Fiddaman                    root directory and optionally the remote protocol (rsh
186*906afcb8SAndy Fiddaman                    or ssh) if the directory is on a different server than
187*906afcb8SAndy Fiddaman                    the master package root directory. If
188*906afcb8SAndy Fiddaman                    \blib/package/admin/'$admin_env$'\b exists under this
189*906afcb8SAndy Fiddaman                    directory then it is sourced by \bsh\b(1) before
190*906afcb8SAndy Fiddaman                    \aaction\a is done. If this field begins with \b-\b
191*906afcb8SAndy Fiddaman                    then the host is ignored. If this field contains \b:\b
192*906afcb8SAndy Fiddaman                    then \bditto\b(1) is used to sync the remote \bsrc\b
193*906afcb8SAndy Fiddaman                    directory hierarchy to the local one. If [\amaster\a]]:
194*906afcb8SAndy Fiddaman		    is specified then the sync is deferred to the \amaster\a
195*906afcb8SAndy Fiddaman		    host. If \amaster\a is omitted (two :) then the sync is
196*906afcb8SAndy Fiddaman		    disabled. These directories must exist on the remote side:
197*906afcb8SAndy Fiddaman		    \blib/package\b, \bsrc/cmd\b, \bsrc/lib\b.]
198*906afcb8SAndy Fiddaman                [+date?\aYYMMDD\a of the last action.]
199*906afcb8SAndy Fiddaman                [+time?Elapsed wall time for the last action.]
200*906afcb8SAndy Fiddaman                [+M T W?The \badmin\b action \bmake\b, \btest\b and
201*906afcb8SAndy Fiddaman                    \bwrite\b action error counts. A non-numeric value in
202*906afcb8SAndy Fiddaman                    any of these fields disables the corresponding action.]
203*906afcb8SAndy Fiddaman	    	[+owner?The owner contact information.]
204*906afcb8SAndy Fiddaman		[+attributes?\aname=value\a attributes. Should at least contain
205*906afcb8SAndy Fiddaman		    \bcc\b=\acompiler-version\a.]
206*906afcb8SAndy Fiddaman            }
207*906afcb8SAndy Fiddaman	[+clean | clobber?Delete the \barch/\b\aHOSTTYPE\a hierarchy; this
208*906afcb8SAndy Fiddaman	    deletes all generated files and directories for \aHOSTTYPE\a.
209*906afcb8SAndy Fiddaman	    The heirarchy can be rebuilt by \bpackage make\b.]
210*906afcb8SAndy Fiddaman        [+contents\b [ \apackage\a ... ]]?List description and
211*906afcb8SAndy Fiddaman            components for \apackage\a on the standard output.]
212*906afcb8SAndy Fiddaman        [+copyright\b [ \apackage\a ... ]]?List the general copyright
213*906afcb8SAndy Fiddaman            notice(s) for \apackage\a on the standard output. Note that
214*906afcb8SAndy Fiddaman            individual components in \apackage\a may contain additional or
215*906afcb8SAndy Fiddaman            replacement notices.]
216*906afcb8SAndy Fiddaman        [+export\b [ \avariable\a ...]]?List \aname\a=\avalue\a for
217*906afcb8SAndy Fiddaman            \avariable\a, one per line. If the \bonly\b attribute is
218*906afcb8SAndy Fiddaman            specified then only the variable values are listed. If no
219*906afcb8SAndy Fiddaman	    variables are specified then \b'$env$'\b are assumed.]
220*906afcb8SAndy Fiddaman        [+help\b [ \aaction\a ]]?Display help text on the standard
221*906afcb8SAndy Fiddaman            error (standard output for \aaction\a).]
222*906afcb8SAndy Fiddaman        [+host\b [ \aattribute\a ... ]]?List
223*906afcb8SAndy Fiddaman            architecture/implementation dependent host information on the
224*906afcb8SAndy Fiddaman            standard output. \btype\b is listed if no attributes are
225*906afcb8SAndy Fiddaman            specified. Information is listed on a single line in
226*906afcb8SAndy Fiddaman            \aattribute\a order. The attributes are:]
227*906afcb8SAndy Fiddaman            {
228*906afcb8SAndy Fiddaman                [+canon \aname\a?An external host type name to be
229*906afcb8SAndy Fiddaman                    converted to \bpackage\b syntax.]
230*906afcb8SAndy Fiddaman                [+cpu?The number of cpus; 1 if the host is not a
231*906afcb8SAndy Fiddaman                    multiprocessor.]
232*906afcb8SAndy Fiddaman                [+name?The host name.]
233*906afcb8SAndy Fiddaman                [+rating?The cpu rating in pseudo mips; the value is
234*906afcb8SAndy Fiddaman                    useful useful only in comparisons with rating values of
235*906afcb8SAndy Fiddaman                    other hosts. Other than a vax rating (mercifully) fixed
236*906afcb8SAndy Fiddaman                    at 1, ratings can vary wildly but consistently from
237*906afcb8SAndy Fiddaman                    vendor mips ratings. \bcc\b(1) may be required to
238*906afcb8SAndy Fiddaman                    determine the rating.]
239*906afcb8SAndy Fiddaman                [+type?The host type, usually in the form
240*906afcb8SAndy Fiddaman                    \avendor\a.\aarchitecture\a, with an optional trailing
241*906afcb8SAndy Fiddaman                    -\aversion\a. The main theme is that type names within
242*906afcb8SAndy Fiddaman                    a family of architectures are named in a similar,
243*906afcb8SAndy Fiddaman                    predictable style. OS point release information is
244*906afcb8SAndy Fiddaman                    avoided as much as possible, but vendor resistance to
245*906afcb8SAndy Fiddaman                    release incompatibilities has for the most part been
246*906afcb8SAndy Fiddaman                    futile.]
247*906afcb8SAndy Fiddaman            }
248*906afcb8SAndy Fiddaman        [+html\b [ \aaction\a ]]?Display html help text on the standard
249*906afcb8SAndy Fiddaman            error (standard output for \aaction\a).]
250*906afcb8SAndy Fiddaman        [+install\b [ \aarchitecture\a ... ]] \adirectory\a [ \apackage\a ... ]]?Copy
251*906afcb8SAndy Fiddaman            the package binary hierarchy to \adirectory\a. If
252*906afcb8SAndy Fiddaman            \aarchitecture\a is omitted then all architectures are
253*906afcb8SAndy Fiddaman            installed. If \bflat\b is specified then exactly one
254*906afcb8SAndy Fiddaman            \aarchitecture\a must be specified; this architecture will be
255*906afcb8SAndy Fiddaman            installed in \adirectory\a without the \barch/\b\aHOSTTYPE\a
256*906afcb8SAndy Fiddaman            directory prefixes. Otherwise each architecture will be
257*906afcb8SAndy Fiddaman            installed in a separate \barch/\b\aHOSTTYPE\a subdirectory of
258*906afcb8SAndy Fiddaman            \adirectory\a. The \aarchitecture\a \b-\b names the current
259*906afcb8SAndy Fiddaman            architecture. \adirectory\a must be an existing directory. If
260*906afcb8SAndy Fiddaman            \apackage\a is omitted then all binary packages are installed.
261*906afcb8SAndy Fiddaman            This action requires \bnmake\b.]
262*906afcb8SAndy Fiddaman        [+license\b [ \apackage\a ... ]]?List the source license(s) for
263*906afcb8SAndy Fiddaman            \apackage\a on the standard output. Note that individual
264*906afcb8SAndy Fiddaman            components in \apackage\a may contain additional or replacement
265*906afcb8SAndy Fiddaman            licenses.]
266*906afcb8SAndy Fiddaman        [+list\b [ \apackage\a ... ]]?List the name, version and
267*906afcb8SAndy Fiddaman            prerequisites for \apackage\a on the standard output.]
268*906afcb8SAndy Fiddaman        [+make\b [ \apackage\a ]] [ \aoption\a ... ]] [ \atarget\a ... ]]?Build
269*906afcb8SAndy Fiddaman	    and install. The default \atarget\a is \binstall\b, which makes
270*906afcb8SAndy Fiddaman	    and installs \apackage\a. If the standard output is a terminal
271*906afcb8SAndy Fiddaman	    then the output is also captured in
272*906afcb8SAndy Fiddaman            \b$INSTALLROOT/lib/package/gen/make.out\b. The build is done in
273*906afcb8SAndy Fiddaman            the \b$INSTALLROOT\b directory tree viewpathed on top of the
274*906afcb8SAndy Fiddaman            \b$PACKAGEROOT\b directory tree. If \bflat\b is specified then
275*906afcb8SAndy Fiddaman            the \b$INSTALLROOT\b { bin fun include lib } directories are
276*906afcb8SAndy Fiddaman            linked to the same directories in the package root. Only one
277*906afcb8SAndy Fiddaman            architecture may be \bflat\b. Leaf directory names matching the
278*906afcb8SAndy Fiddaman            \b|\b-separated shell pattern \b$MAKESKIP\b are ignored. The
279*906afcb8SAndy Fiddaman            \bview\b action is done before making. \aoption\a operands are
280*906afcb8SAndy Fiddaman	    passed to the underlying make command.]
281*906afcb8SAndy Fiddaman        [+read\b [ \apackage\a ... | \aarchive\a ... ]]?Read the named
282*906afcb8SAndy Fiddaman            package or archive(s). Must be run from the package root
283*906afcb8SAndy Fiddaman            directory. Archives are searched for in \b.\b and
284*906afcb8SAndy Fiddaman            \blib/package/tgz\b. Each package archive is read only once.
285*906afcb8SAndy Fiddaman            The file \blib/package/tgz/\b\apackage\a[.\atype\a]]\b.tim\b
286*906afcb8SAndy Fiddaman            tracks the read time. See the \bwrite\b action for archive
287*906afcb8SAndy Fiddaman            naming conventions. Text file archive member are assumed to be
288*906afcb8SAndy Fiddaman            ASCII or UTF-8 encoded.]
289*906afcb8SAndy Fiddaman        [+regress?\bdiff\b(1) the current and previous \bpackage test\b
290*906afcb8SAndy Fiddaman            results.]
291*906afcb8SAndy Fiddaman        [+release\b [ [\aCC\a]]\aYY-MM-DD\a [ [\acc\a]]\ayy-mm-dd\a ]]]] [ \apackage\a ]]?Display
292*906afcb8SAndy Fiddaman            recent changes for the date range [\aCC\a]]\aYY-MM-DD\a (up to
293*906afcb8SAndy Fiddaman        [\acc\a]]\ayy-mm-dd\a.), where \b-\b means lowest (or highest.)
294*906afcb8SAndy Fiddaman            If no dates are specified then changes for the last 4 months
295*906afcb8SAndy Fiddaman            are listed. \apackage\a may be a package or component name.]
296*906afcb8SAndy Fiddaman        [+remove\b [ \apackage\a ]]?Remove files installed for
297*906afcb8SAndy Fiddaman            \apackage\a.]
298*906afcb8SAndy Fiddaman        [+results\b [ \bfailed\b ]] [ \bpath\b ]] [ \bold\b ]] [\bmake\b | \btest\b | \bwrite\b ]]?List
299*906afcb8SAndy Fiddaman            results and interesting messages captured by the most recent
300*906afcb8SAndy Fiddaman            \bmake\b (default), \btest\b or \bwrite\b action. \bold\b
301*906afcb8SAndy Fiddaman            specifies the previous results, if any (current and previous
302*906afcb8SAndy Fiddaman            results are retained.) \b$HOME/.pkgresults\b, if it exists,
303*906afcb8SAndy Fiddaman            must contain an \begrep\b(1) expression of result lines to be
304*906afcb8SAndy Fiddaman            ignored. \bfailed\b lists failures only and \bpath\b lists the
305*906afcb8SAndy Fiddaman            results file path name only.]
306*906afcb8SAndy Fiddaman        [+setup\b [ beta ]] [ binary ]] [ source ]] [ \aarchitecture\a ... ]] [ \aurl\a ]] [ \apackage\a ... ]]?This
307*906afcb8SAndy Fiddaman            action initializes the current directory as a package root, runs the
308*906afcb8SAndy Fiddaman            \bupdate\b action to download new or out of date packages, and runs the
309*906afcb8SAndy Fiddaman            \bread\b action on those packages. If \bflat\b is specified then the
310*906afcb8SAndy Fiddaman            \b$INSTALLROOT\b { bin fun include lib } directories are linked to the
311*906afcb8SAndy Fiddaman            same directories in the package root. Only one architecture may be
312*906afcb8SAndy Fiddaman            \bflat\b. See the \bupdate\b and \bread\b action descriptions for
313*906afcb8SAndy Fiddaman            argument details.]
314*906afcb8SAndy Fiddaman        [+test\b [ \apackage\a ]]?Run the regression tests for
315*906afcb8SAndy Fiddaman            \apackage\a. If the standard output is a terminal then the
316*906afcb8SAndy Fiddaman            output is also captured in
317*906afcb8SAndy Fiddaman            \b$INSTALLROOT/lib/package/gen/test.out\b. In general a package
318*906afcb8SAndy Fiddaman            must be made before it can be tested. Components tested with
319*906afcb8SAndy Fiddaman            the \bregress\b(1) command require \bksh93\b. If \bonly\b is
320*906afcb8SAndy Fiddaman	    also specified then only the listed package components are
321*906afcb8SAndy Fiddaman	    tested, otherwise the closure of the components is tested.]
322*906afcb8SAndy Fiddaman        [+update\b [ beta ]] [ binary ]] [ source ]] [\aarchitecture\a ... ]] [ \aurl\a ]] [ \apackage\a ... ]]?Download
323*906afcb8SAndy Fiddaman            the latest release of the selected and required packages from \aurl\a
324*906afcb8SAndy Fiddaman            (e.g., \bhttp://www.research.att.com/sw/download\b) into the directory
325*906afcb8SAndy Fiddaman            \b$PACKAGEROOT/lib/package/tgz\b. \bbeta\b acesses beta packages;
326*906afcb8SAndy Fiddaman            download these at your own risk. If \aarchitecture\a is omitted then
327*906afcb8SAndy Fiddaman            only architectures already present in the \btgz\b directory will be
328*906afcb8SAndy Fiddaman            downloaded. If \aarchitecture\a is \b-\b then all posted architectures
329*906afcb8SAndy Fiddaman            will be downloaded. If \aurl\a matches \b*.url\b then it is interpreted
330*906afcb8SAndy Fiddaman            as a file containing shell variable assignments for \burl\b,
331*906afcb8SAndy Fiddaman            \bauthorize\b and \bpassword\b. If \aurl\a is omitted then the
332*906afcb8SAndy Fiddaman            definitions for \burl\b, \bauthorize\b and \bpassword\b in
333*906afcb8SAndy Fiddaman            \b$PACKAGEROOT/lib/package/tgz/default.url\b, if it exists, are used.
334*906afcb8SAndy Fiddaman            If \b$PACKAGEROOT/lib/package/tgz/default.url\b does not exist then it
335*906afcb8SAndy Fiddaman            is initialized with the current \burl\b, \bauthorize\b and \bpassword\b
336*906afcb8SAndy Fiddaman            values and read permission for the current user only. If \apackage\a is
337*906afcb8SAndy Fiddaman            omitted then only packages already present in the tgz directory will be
338*906afcb8SAndy Fiddaman            downloaded. If \apackage\a is \b-\b then all posted packages will be
339*906afcb8SAndy Fiddaman            downloaded. If \bsource\b and \bbinary\b are omitted then both source
340*906afcb8SAndy Fiddaman            and binary packages will be downloaded. If \bonly\b is specified then
341*906afcb8SAndy Fiddaman            only the named packages are updated; otherwise the closure of required
342*906afcb8SAndy Fiddaman            packages is updated. This action requires \bwget\b(1), \blynx\b(1),
343*906afcb8SAndy Fiddaman            \bcurl\b(1) or a shell that supports io to
344*906afcb8SAndy Fiddaman	    \b/dev/tcp/\b\ahost\a/\aport\a.]
345*906afcb8SAndy Fiddaman        [+use\b [ \auid\a | \apackage\a | . [ 32 | 64 ]] | 32 | 64 | - ]] [ command ...]]?Run
346*906afcb8SAndy Fiddaman            \acommand\a, or an interactive shell if \acommand\a is omitted,
347*906afcb8SAndy Fiddaman            with the environment initialized for using the package (can you
348*906afcb8SAndy Fiddaman            say \ashared\a \alibrary\a or \adll\a without cussing?) If
349*906afcb8SAndy Fiddaman            \auid\a or \apackage\a or \a.\a is specified then it is used
350*906afcb8SAndy Fiddaman	    to determine a \b$PACKAGEROOT\b, possibly different from
351*906afcb8SAndy Fiddaman	    the current directory. For example, to try out bozo`s package:
352*906afcb8SAndy Fiddaman            \bpackage use bozo\b. The \buse\b action may be run from any
353*906afcb8SAndy Fiddaman            directory. If the file \b$INSTALLROOT/lib/package/profile\b is
354*906afcb8SAndy Fiddaman            readable then it is sourced to initialize the environment. 32 or 64
355*906afcb8SAndy Fiddaman	    implies \b$PACKAGEROOT\b of . and specifies the target architecture
356*906afcb8SAndy Fiddaman	    word size (which may be silently ignored.)]
357*906afcb8SAndy Fiddaman        [+verify\b [ \apackage\a ]]?Verify installed binary files
358*906afcb8SAndy Fiddaman            against the checksum files in
359*906afcb8SAndy Fiddaman            \b$INSTALLROOT/lib/\b\apackage\a\b/gen/*.sum\b. The checksum
360*906afcb8SAndy Fiddaman            files contain mode, user and group information. If the checksum
361*906afcb8SAndy Fiddaman            matches for a given file then the mode, user and group are
362*906afcb8SAndy Fiddaman            changed as necessary to match the checksum entry. A warning is
363*906afcb8SAndy Fiddaman            printed on the standard error for each mismatch. Requires the
364*906afcb8SAndy Fiddaman            \bast\b package \bcksum\b(1) command.]
365*906afcb8SAndy Fiddaman        [+view\b?Initialize the architecture specific viewpath
366*906afcb8SAndy Fiddaman            hierarchy. If \bflat\b is specified then the \b$INSTALLROOT\b {
367*906afcb8SAndy Fiddaman            bin fun include lib } directories are linked to the same
368*906afcb8SAndy Fiddaman            directories in the package root. Only one architecture may be
369*906afcb8SAndy Fiddaman            \bflat\b. The \bmake\b action implicitly calls this action.]
370*906afcb8SAndy Fiddaman        [+write\b [\aformat\a]] \atype\a ... [ \apackage\a ...]]?Write
371*906afcb8SAndy Fiddaman            a package archive for \apackage\a. All work is done in the
372*906afcb8SAndy Fiddaman            \b$PACKAGEROOT/lib/package\b directory. \aformat\a-specific
373*906afcb8SAndy Fiddaman            files are placed in the \aformat\a subdirectory. A
374*906afcb8SAndy Fiddaman            \apackage\a[.\atype\a]]\b.tim\b file in this directory tracks
375*906afcb8SAndy Fiddaman            the write time and prevents a package from being read in the
376*906afcb8SAndy Fiddaman            same root it was written. If more than one file is generated
377*906afcb8SAndy Fiddaman            for a particular \aformat\a then those files are placed in the
378*906afcb8SAndy Fiddaman            \aformat\a/\apackage\a subdirectory. File names in the
379*906afcb8SAndy Fiddaman            \aformat\a subdirectory will contain the package name, a
380*906afcb8SAndy Fiddaman            \ayyyy-mm-dd\a date, and for binary packages, \aHOSTTYPE\a. If
381*906afcb8SAndy Fiddaman            \apackage\a is omitted then an ordered list of previously
382*906afcb8SAndy Fiddaman            written packages is generated. If \bonly\b is specified then
383*906afcb8SAndy Fiddaman            only the named packages will be written; otherwise prerequisite
384*906afcb8SAndy Fiddaman            packages are written first. Package components must be listed
385*906afcb8SAndy Fiddaman            in \apackage\a\b.pkg\b. \aformat\a may be one of:]
386*906afcb8SAndy Fiddaman            {
387*906afcb8SAndy Fiddaman                [+cyg?Generate a \bcygwin\b package.]
388*906afcb8SAndy Fiddaman                [+exp?Generate an \bexptools\b maintainer source
389*906afcb8SAndy Fiddaman                    archive and \aNPD\a file, suitable for \bexpmake\b(1)]
390*906afcb8SAndy Fiddaman                [+lcl?Generate a package archive suitable for
391*906afcb8SAndy Fiddaman                    restoration into the local source tree (i.e., the
392*906afcb8SAndy Fiddaman                    source is not annotated for licencing.)]
393*906afcb8SAndy Fiddaman                [+pkg?Generate a \bpkgmk\b(1) package suitable for
394*906afcb8SAndy Fiddaman                    \bpkgadd\b(1).]
395*906afcb8SAndy Fiddaman                [+rpm?Generate an \brpm\b(1) package.]
396*906afcb8SAndy Fiddaman                [+tgz?Generate a \bgzip\b(1) \btar\b(1) package
397*906afcb8SAndy Fiddaman                    archive. This is the default.]
398*906afcb8SAndy Fiddaman                [+tst?Generate a \btgz\b format package archive in the
399*906afcb8SAndy Fiddaman		    \btst\b subdirectory. Version state files are not updated.]
400*906afcb8SAndy Fiddaman            }
401*906afcb8SAndy Fiddaman        [+?\btype\b specifies the package type which must be one of
402*906afcb8SAndy Fiddaman            \bsource\b, \bbinary\b or \bruntime\b. A source package
403*906afcb8SAndy Fiddaman            contains the source needed to build the corresponding binary
404*906afcb8SAndy Fiddaman            package. A binary package includes the libraries and headers
405*906afcb8SAndy Fiddaman            needed for compiling and linking against the public interfaces.
406*906afcb8SAndy Fiddaman            A runtime package contains the commands and required dynamic
407*906afcb8SAndy Fiddaman            libraries.]
408*906afcb8SAndy Fiddaman        [+?A package may be either a \bbase\b or \bdelta\b. A base
409*906afcb8SAndy Fiddaman            package contains a complete copy of all components. A delta
410*906afcb8SAndy Fiddaman            package contains only changes from a previous base package.
411*906afcb8SAndy Fiddaman            Delta recipients must have the \bast\b \bpax\b(1) command (in
412*906afcb8SAndy Fiddaman            the \bast-base\b package.) If neither \bbase\b nor \bdelta\b is
413*906afcb8SAndy Fiddaman            specified, then the current base is overwritten if there are no
414*906afcb8SAndy Fiddaman            deltas referring to the current base. Only the \btgz\b and
415*906afcb8SAndy Fiddaman            \blcl\b formats support \bdelta\b. If \bbase\b is specified
416*906afcb8SAndy Fiddaman            then a new base and two delta archives are generated: one delta
417*906afcb8SAndy Fiddaman            to generate the new base from the old, and one delta to
418*906afcb8SAndy Fiddaman            generate the old base from the new; the old base is then
419*906afcb8SAndy Fiddaman            removed. If \bdelta\b is specified then a new delta referring
420*906afcb8SAndy Fiddaman            to the current base is written.]
421*906afcb8SAndy Fiddaman        [+?\apackage\a\b.pkg\b may reference other packages. By default
422*906afcb8SAndy Fiddaman            a pointer to those packages is written. The recipient \bpackage
423*906afcb8SAndy Fiddaman            read\b will then check that all required packages have been
424*906afcb8SAndy Fiddaman            downloaded. If \bclosure\b is specified then the components for
425*906afcb8SAndy Fiddaman            all package references are included in the generated package.
426*906afcb8SAndy Fiddaman            This may be useful for \blcl\b and versioning.]
427*906afcb8SAndy Fiddaman        [+?All formats but \blcl\b annotate each \bsource\b file (not
428*906afcb8SAndy Fiddaman            already annotated) with a license comment as it is written to
429*906afcb8SAndy Fiddaman            the package archive using \bproto\b(1).]
430*906afcb8SAndy Fiddaman    }
431*906afcb8SAndy Fiddaman[+DETAILS?The package directory hierarchy is rooted at
432*906afcb8SAndy Fiddaman    \b$PACKAGEROOT\b. All source and binaries reside under this tree. A two
433*906afcb8SAndy Fiddaman    level viewpath is used to separate source and binaries. The top view is
434*906afcb8SAndy Fiddaman    architecture specific, the bottom view is shared source. All building
435*906afcb8SAndy Fiddaman    is done in the architecture specific view; no source view files are
436*906afcb8SAndy Fiddaman    intentionally changed. This means that many different binary
437*906afcb8SAndy Fiddaman    architectures can be made from a single copy of the source.]
438*906afcb8SAndy Fiddaman[+?Independent \b$PACKAGEROOT\b hierarchies can be combined by
439*906afcb8SAndy Fiddaman    appending \b$INSTALLROOT:$PACKAGEROOT\b pairs to \bVPATH\b. The
440*906afcb8SAndy Fiddaman    \bVPATH\b viewing order is from left to right. Each \b$PACKAGEROOT\b
441*906afcb8SAndy Fiddaman    must have a \b$PACKAGEROOT/lib/package\b directory.]
442*906afcb8SAndy Fiddaman[+?Each package contains one or more components. Component source for
443*906afcb8SAndy Fiddaman    the \afoo\a command is in \b$PACKAGEROOT/src/cmd/\b\afoo\a, and source
444*906afcb8SAndy Fiddaman    for the \abar\a library is in \b$PACKAGEROOT/src/lib/lib\b\abar\a. This
445*906afcb8SAndy Fiddaman    naming is for convenience only; the underlying makefiles handle
446*906afcb8SAndy Fiddaman    inter-component build order. The \bINIT\b component, which contains
447*906afcb8SAndy Fiddaman    generic package support files, is always made first, then the
448*906afcb8SAndy Fiddaman    components named \bINIT\b*, then the component order determined by the
449*906afcb8SAndy Fiddaman    closure of component makefile dependencies.]
450*906afcb8SAndy Fiddaman[+?\b$PACKAGEROOT/lib/package\b contains package specific files. The
451*906afcb8SAndy Fiddaman    package naming convention is \agroup\a[-\apart\a]]; e.g., \bast-base\b,
452*906afcb8SAndy Fiddaman    \bgnu-fileutils\b. The *\b.pkg\b files are ast \bnmake\b(1) makefiles
453*906afcb8SAndy Fiddaman    that contain the package name, package components, references to other
454*906afcb8SAndy Fiddaman    packages, and a short package description. *\b.pkg\b files are used by
455*906afcb8SAndy Fiddaman    \bpackage write\b to generate new source and binary packages.]
456*906afcb8SAndy Fiddaman[+?\b$PACKAGEROOT/lib/package/\b\agroup\a\b.lic\b files contain license
457*906afcb8SAndy Fiddaman    information that is used by the \bast\b \bproto\b(1) and \bnmake\b(1)
458*906afcb8SAndy Fiddaman    commands to generate source and binary license strings. \agroup\a is
459*906afcb8SAndy Fiddaman    determined by the first \b:PACKAGE:\b operator name listed in the
460*906afcb8SAndy Fiddaman    component \bnmake\b makefile. \agroup\a\b.lic\b files are part of the
461*906afcb8SAndy Fiddaman    licensing documentation. Each component may have its own \bLICENSE\b file
462*906afcb8SAndy Fiddaman    that overrides the \agroup\a\b.lic\b file. The full text of the licenses
463*906afcb8SAndy Fiddaman    are in the \b$PACKAGEROOT/lib/package/LICENSES\b and
464*906afcb8SAndy Fiddaman    \b$INSTALLROOT/lib/package/LICENSES\b directories.]
465*906afcb8SAndy Fiddaman[+?A few files are generated in \b$PACKAGEROOT/lib/package/gen\b and
466*906afcb8SAndy Fiddaman    \b$INSTALLROOT/lib/package/gen\b. \apackage\a\b.ver\b contains one line
467*906afcb8SAndy Fiddaman    consisting of \apackage version release\a \b1\b for the most recent
468*906afcb8SAndy Fiddaman    instance of \apackage\a read into \b$PACKAGEROOT\b, where \apackage\a
469*906afcb8SAndy Fiddaman    is the package name, \aversion\a is the \aYYYY-MM-DD\a base version,
470*906afcb8SAndy Fiddaman    and \arelease\a is \aversion\a for the base release or \aYYYY-MM-DD\a
471*906afcb8SAndy Fiddaman    for delta releases. \apackage\a\b.req\b contains *\b.ver\b entries for
472*906afcb8SAndy Fiddaman    the packages required by \apackage\a, except that the fourth field is
473*906afcb8SAndy Fiddaman    \b0\b instead of \b1\b. All packages except \bINIT\b require the
474*906afcb8SAndy Fiddaman    \bINIT\b package. A simple sort of \apackage\a\b.pkg\b and *\b.ver\b
475*906afcb8SAndy Fiddaman    determines if the required package have been read in. Finally,
476*906afcb8SAndy Fiddaman    \apackage\a\b.README\b and \apackage\a\a.html\b contain the README text
477*906afcb8SAndy Fiddaman    for \apackage\a and all its components. Included are all changes added
478*906afcb8SAndy Fiddaman    to the component \bRELEASE\b, \bCHANGES\b or \bChangeLog\b files dated
479*906afcb8SAndy Fiddaman    since the two most recent base releases. Component \bRELEASE\b files
480*906afcb8SAndy Fiddaman    contain tag lines of the form [\aYY\a]]\aYY-MM-DD\a [ \atext\a ]] (or
481*906afcb8SAndy Fiddaman    \bdate\b(1) format dates) followed by README text, in reverse
482*906afcb8SAndy Fiddaman    chronological order (newer entries at the top of the file.) \bpackage
483*906afcb8SAndy Fiddaman    release\b lists this information, and \bpackage contents ...\b lists
484*906afcb8SAndy Fiddaman    the descriptions and components.]
485*906afcb8SAndy Fiddaman[+?\b$HOSTYPE\b names the current binary architecture and is determined
486*906afcb8SAndy Fiddaman    by the output of \bpackage\b (no arguments.) The \b$HOSTTYPE\b naming
487*906afcb8SAndy Fiddaman    scheme is used to separate incompatible executable and object formats.
488*906afcb8SAndy Fiddaman    All architecture specific binaries are placed under \b$INSTALLROOT\b
489*906afcb8SAndy Fiddaman    (\b$PACKAGEROOT/arch/$HOSTTYPE\b.) There are a few places that match
490*906afcb8SAndy Fiddaman    against \b$HOSTTYPE\b when making binaries; these are limited to
491*906afcb8SAndy Fiddaman    makefile compiler workarounds, e.g., if \b$HOSTTYPE\b matches \bhp.*\b
492*906afcb8SAndy Fiddaman    then turn off the optimizer for these objects. All other architecture
493*906afcb8SAndy Fiddaman    dependent logic is handled either by the \bast\b \biffe\b(1) command or
494*906afcb8SAndy Fiddaman    by component specific configure scripts. Explicit \b$HOSTYPE\b
495*906afcb8SAndy Fiddaman    values matching *,*cc*[,-*,...]] optionally set the default \bCC\b and
496*906afcb8SAndy Fiddaman    \bCCFLAGS\b. This is handy for build farms that support different
497*906afcb8SAndy Fiddaman    compilers on the same architecture.]
498*906afcb8SAndy Fiddaman[+?Each component contains an \bast\b \bnmake\b(1) makefile (either
499*906afcb8SAndy Fiddaman    \bNmakefile\b or \bMakefile\b) and a \bMAM\b (make abstract machine)
500*906afcb8SAndy Fiddaman    file (\bMamfile\b.) A Mamfile contains a portable makefile description
501*906afcb8SAndy Fiddaman    that is used by \bmamake\b(1) to simulate \bnmake\b. Currently there is
502*906afcb8SAndy Fiddaman    no support for old-make/gnu-make makefiles; if the binaries are just
503*906afcb8SAndy Fiddaman    being built then \bmamake\b will suffice; if source or makefile
504*906afcb8SAndy Fiddaman    modifications are anticipated then \bnmake\b (in the \bast-base\b
505*906afcb8SAndy Fiddaman    package) should be used. Mamfiles are automatically generated by
506*906afcb8SAndy Fiddaman    \bpackage write\b.]
507*906afcb8SAndy Fiddaman[+?Most component C source is prototyped. If \b$CC\b (default value
508*906afcb8SAndy Fiddaman    \bcc\b) is not a prototyping C compiler then \bpackage make\b runs
509*906afcb8SAndy Fiddaman    \bproto\b(1) on portions of the \b$PACKAGEROOT/src\b tree and places
510*906afcb8SAndy Fiddaman    the converted output files in the \b$PACKAGEROOT/proto/src\b tree.
511*906afcb8SAndy Fiddaman    Converted files are then viewpathed over the original source.
512*906afcb8SAndy Fiddaman    \bproto\b(1) converts an ANSI C subset to code that is compatible with
513*906afcb8SAndy Fiddaman    K&R, ANSI, and C++ dialects.]
514*906afcb8SAndy Fiddaman[+?All scripts and commands under \b$PACKAGEROOT\b use \b$PATH\b
515*906afcb8SAndy Fiddaman    relative pathnames (via the \bast\b \bpathpath\b(3) function); there
516*906afcb8SAndy Fiddaman    are no imbedded absolute pathnames. This means that binaries generated
517*906afcb8SAndy Fiddaman    under \b$PACKAGEROOT\b may be copied to a different root; users need
518*906afcb8SAndy Fiddaman    only change their \b$PATH\b variable to reference the new installation
519*906afcb8SAndy Fiddaman    root \bbin\b directory. \bpackage install\b installs binary packages in
520*906afcb8SAndy Fiddaman    a new \b$INSTALLROOT\b.]
521*906afcb8SAndy Fiddaman
522*906afcb8SAndy Fiddaman[ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]
523*906afcb8SAndy Fiddaman
524*906afcb8SAndy Fiddaman[+SEE ALSO?\bautoconfig\b(1), \bcksum\b(1), \bexecrate\b(1), \bexpmake\b(1),
525*906afcb8SAndy Fiddaman	\bgzip\b(1), \bmake\b(1), \bmamake\b(1), \bnmake\b(1), \bpax\b(1),
526*906afcb8SAndy Fiddaman	\bpkgadd\b(1), \bpkgmk\b(1), \bproto\b(1), \bratz\b(1), \brpm\b(1),
527*906afcb8SAndy Fiddaman	\bsh\b(1), \btar\b(1), \boptget\b(3)]
528*906afcb8SAndy Fiddaman'
529*906afcb8SAndy Fiddaman	case $* in
530*906afcb8SAndy Fiddaman	help)	set -- --man ;;
531*906afcb8SAndy Fiddaman	esac
532*906afcb8SAndy Fiddaman	while	getopts -a $command "$USAGE" OPT
533*906afcb8SAndy Fiddaman	do	:
534*906afcb8SAndy Fiddaman	done
535*906afcb8SAndy Fiddaman	shift $OPTIND-1
536*906afcb8SAndy Fiddaman	;;
537*906afcb8SAndy Fiddamanesac
538*906afcb8SAndy Fiddaman
539*906afcb8SAndy Fiddaman# check the args
540*906afcb8SAndy Fiddaman
541*906afcb8SAndy Fiddamancase $AR in
542*906afcb8SAndy Fiddaman'')	AR=ar ;;
543*906afcb8SAndy Fiddamanesac
544*906afcb8SAndy Fiddamancase $CC in
545*906afcb8SAndy Fiddaman'')	CC=cc ;;
546*906afcb8SAndy Fiddamanesac
547*906afcb8SAndy Fiddamancase $LD in
548*906afcb8SAndy Fiddaman'')	LD=ld ;;
549*906afcb8SAndy Fiddamanesac
550*906afcb8SAndy Fiddamancase $NM in
551*906afcb8SAndy Fiddaman'')	NM=nm ;;
552*906afcb8SAndy Fiddamanesac
553*906afcb8SAndy Fiddaman
554*906afcb8SAndy Fiddamanaction=
555*906afcb8SAndy Fiddamanadmin_all=1
556*906afcb8SAndy Fiddamanadmin_on=
557*906afcb8SAndy Fiddamanauthorize=
558*906afcb8SAndy Fiddamanbit=
559*906afcb8SAndy Fiddamanexec=
560*906afcb8SAndy Fiddamanflat=0
561*906afcb8SAndy Fiddamanforce=0
562*906afcb8SAndy Fiddamanglobal=
563*906afcb8SAndy Fiddamanhi=
564*906afcb8SAndy Fiddamanhtml=0
565*906afcb8SAndy Fiddamanifs=${IFS-'
566*906afcb8SAndy Fiddaman	 '}
567*906afcb8SAndy Fiddamanlo=
568*906afcb8SAndy Fiddamanmake=
569*906afcb8SAndy Fiddamanmakeflags='-k -K'
570*906afcb8SAndy Fiddamannmakeflags=
571*906afcb8SAndy Fiddamannmakesep=
572*906afcb8SAndy Fiddamannl="
573*906afcb8SAndy Fiddaman"
574*906afcb8SAndy Fiddamannoexec=
575*906afcb8SAndy Fiddamanonly=0
576*906afcb8SAndy Fiddamanoutput=
577*906afcb8SAndy Fiddamanpackage_src=
578*906afcb8SAndy Fiddamanpassword=
579*906afcb8SAndy Fiddamanquiet=0
580*906afcb8SAndy Fiddamanshow=:
581*906afcb8SAndy Fiddamantab="        "
582*906afcb8SAndy Fiddamanverbose=0
583*906afcb8SAndy FiddamanAUTHORIZE=
584*906afcb8SAndy FiddamanDEBUG=
585*906afcb8SAndy FiddamanHURL=
586*906afcb8SAndy FiddamanPROTOROOT=-
587*906afcb8SAndy FiddamanSHELLMAGIC=-
588*906afcb8SAndy Fiddaman
589*906afcb8SAndy Fiddamanunset FIGNORE BINDIR DLLDIR ETCDIR FUNDIR INCLUDEDIR LIBDIR LOCALEDIR MANDIR SHAREDIR 2>/dev/null || true
590*906afcb8SAndy Fiddaman
591*906afcb8SAndy Fiddamanwhile	:
592*906afcb8SAndy Fiddamando	case $# in
593*906afcb8SAndy Fiddaman	0)	set host type ;;
594*906afcb8SAndy Fiddaman	esac
595*906afcb8SAndy Fiddaman	case $1 in
596*906afcb8SAndy Fiddaman	admin|clean|clobber|contents|copyright|export|host|install|license|list|make|read|regress|release|remove|results|setup|test|update|use|verify|view|write|TEST)
597*906afcb8SAndy Fiddaman		action=$1
598*906afcb8SAndy Fiddaman		shift
599*906afcb8SAndy Fiddaman		break
600*906afcb8SAndy Fiddaman		;;
601*906afcb8SAndy Fiddaman	authorize)
602*906afcb8SAndy Fiddaman		case $# in
603*906afcb8SAndy Fiddaman		1)	echo $command: $1: authorization user name argument expected >&2; exit 1 ;;
604*906afcb8SAndy Fiddaman		esac
605*906afcb8SAndy Fiddaman		shift
606*906afcb8SAndy Fiddaman		authorize=$1
607*906afcb8SAndy Fiddaman		shift
608*906afcb8SAndy Fiddaman		continue
609*906afcb8SAndy Fiddaman		;;
610*906afcb8SAndy Fiddaman	debug|environment)
611*906afcb8SAndy Fiddaman		exec=echo make=echo show=echo
612*906afcb8SAndy Fiddaman		;;
613*906afcb8SAndy Fiddaman	flat)	flat=1
614*906afcb8SAndy Fiddaman		;;
615*906afcb8SAndy Fiddaman	force)	force=1
616*906afcb8SAndy Fiddaman		;;
617*906afcb8SAndy Fiddaman	never)	exec=echo noexec=-N
618*906afcb8SAndy Fiddaman		;;
619*906afcb8SAndy Fiddaman	only)	only=1
620*906afcb8SAndy Fiddaman		;;
621*906afcb8SAndy Fiddaman	password)
622*906afcb8SAndy Fiddaman		case $# in
623*906afcb8SAndy Fiddaman		1)	echo $command: $1: authorization password argument expected >&2; exit 1 ;;
624*906afcb8SAndy Fiddaman		esac
625*906afcb8SAndy Fiddaman		shift
626*906afcb8SAndy Fiddaman		password=$1
627*906afcb8SAndy Fiddaman		shift
628*906afcb8SAndy Fiddaman		continue
629*906afcb8SAndy Fiddaman		;;
630*906afcb8SAndy Fiddaman	quiet)	quiet=1
631*906afcb8SAndy Fiddaman		;;
632*906afcb8SAndy Fiddaman	show)	exec=echo noexec=-n
633*906afcb8SAndy Fiddaman		;;
634*906afcb8SAndy Fiddaman	verbose)verbose=1
635*906afcb8SAndy Fiddaman		;;
636*906afcb8SAndy Fiddaman	DEBUG)	DEBUG=1
637*906afcb8SAndy Fiddaman		PS4='+$LINENO:$SECONDS+ '
638*906afcb8SAndy Fiddaman		set -x
639*906afcb8SAndy Fiddaman		;;
640*906afcb8SAndy Fiddaman	help|HELP|html|man|--[?m]*)
641*906afcb8SAndy Fiddaman		case $1 in
642*906afcb8SAndy Fiddaman		help)	code=0
643*906afcb8SAndy Fiddaman			case $2 in
644*906afcb8SAndy Fiddaman			'')	exec 1>&2 ;;
645*906afcb8SAndy Fiddaman			esac
646*906afcb8SAndy Fiddaman			;;
647*906afcb8SAndy Fiddaman		html)	code=0 html=1
648*906afcb8SAndy Fiddaman			;;
649*906afcb8SAndy Fiddaman		*)	code=2
650*906afcb8SAndy Fiddaman			exec 1>&2
651*906afcb8SAndy Fiddaman			;;
652*906afcb8SAndy Fiddaman		esac
653*906afcb8SAndy Fiddaman		case $html in
654*906afcb8SAndy Fiddaman		1)	bO="<HTML>
655*906afcb8SAndy Fiddaman<HEAD>
656*906afcb8SAndy Fiddaman<TITLE>$2 package installation instructions</TITLE>
657*906afcb8SAndy Fiddaman<HEAD>
658*906afcb8SAndy Fiddaman<BODY bgcolor=white link=teal vlink=dimgray>"
659*906afcb8SAndy Fiddaman			eO='</BODY>
660*906afcb8SAndy Fiddaman</HTML>'
661*906afcb8SAndy Fiddaman			bH="<CENTER><H3><FONT face=courier color=red>"
662*906afcb8SAndy Fiddaman			eH='</FONT></H3></CENTER>'
663*906afcb8SAndy Fiddaman			bP='<P>'
664*906afcb8SAndy Fiddaman			bL='<P><TABLE cellpadding=0 cellspacing=2>'
665*906afcb8SAndy Fiddaman			bL2='<P><TABLE border=0 cellpadding=0 cellspacing=2>'
666*906afcb8SAndy Fiddaman			eL='</TABLE><P>'
667*906afcb8SAndy Fiddaman			bT='<TR><TD align=right valign=top><B>'
668*906afcb8SAndy Fiddaman			bD='</B></TD><TD align=left>'	eD='</TD></TR>'
669*906afcb8SAndy Fiddaman			bB='<B>'			eB='</B>'
670*906afcb8SAndy Fiddaman			bI='<I>'			eI='</I>'
671*906afcb8SAndy Fiddaman			bX='<PRE>'			eX='</PRE>'
672*906afcb8SAndy Fiddaman			bF='<TT>'			eF='</TT>'
673*906afcb8SAndy Fiddaman			Camp='&amp;'
674*906afcb8SAndy Fiddaman			Mcurl='<A href=../../man/man1/curl.html>curl</A>(1)'
675*906afcb8SAndy Fiddaman			Mdate='<A href=../../man/man1/date.html>date</A>(1)'
676*906afcb8SAndy Fiddaman			Mfile='<A href=../../man/man1/file.html>file</A>(1)'
677*906afcb8SAndy Fiddaman			Mgunzip='<A href=../../man/man1/gzip.html>gunzip</A>(1)'
678*906afcb8SAndy Fiddaman			Mhurl='<A href=../../man/man1/hurl.html>hurl</A>(1)'
679*906afcb8SAndy Fiddaman			Mlynx='<A href=../../man/man1/lynx.html>lynx</A>(1)'
680*906afcb8SAndy Fiddaman			Mnmake='<A href=../../man/man1/nmake.html>nmake</A>(1)'
681*906afcb8SAndy Fiddaman			Mpackage='<A href=../../man/man1/package.html>package</A>(1)'
682*906afcb8SAndy Fiddaman			Mproto='<A href=../../man/man1/proto.html>proto</A>(1)'
683*906afcb8SAndy Fiddaman			Mratz='<A href=../../man/man1/ratz.html>ratz</A>'
684*906afcb8SAndy Fiddaman			Mtar='<A href=../../man/man1/tar.html>tar</A>(1)'
685*906afcb8SAndy Fiddaman			Mwget='<A href=../../man/man1/wget.html>wget</A>(1)'
686*906afcb8SAndy Fiddaman			;;
687*906afcb8SAndy Fiddaman		*)	bO=''				eO=''
688*906afcb8SAndy Fiddaman			bH=''				eH=':'
689*906afcb8SAndy Fiddaman			bP=''
690*906afcb8SAndy Fiddaman			bL=''				eL=''
691*906afcb8SAndy Fiddaman			bL2=''
692*906afcb8SAndy Fiddaman			bT='  '
693*906afcb8SAndy Fiddaman			bD=' '				eD=''
694*906afcb8SAndy Fiddaman			bB=''				eB=''
695*906afcb8SAndy Fiddaman			bI=''				eI=''
696*906afcb8SAndy Fiddaman			bX=''				eX=''
697*906afcb8SAndy Fiddaman			bF='"'				eF='"'
698*906afcb8SAndy Fiddaman			Camp='&'
699*906afcb8SAndy Fiddaman			Mcurl='curl(1)'
700*906afcb8SAndy Fiddaman			Mdate='date(1)'
701*906afcb8SAndy Fiddaman			Mfile='file(1)'
702*906afcb8SAndy Fiddaman			Mgunzip='gunzip(1)'
703*906afcb8SAndy Fiddaman			Mhurl='hurl(1)'
704*906afcb8SAndy Fiddaman			Mlynx='lynx(1)'
705*906afcb8SAndy Fiddaman			Mnmake='nmake(1)'
706*906afcb8SAndy Fiddaman			Mpackage='package(1)'
707*906afcb8SAndy Fiddaman			Mproto='proto(1)'
708*906afcb8SAndy Fiddaman			Mratz='ratz'
709*906afcb8SAndy Fiddaman			Mtar='tar(1)'
710*906afcb8SAndy Fiddaman			Mwget='wget(1)'
711*906afcb8SAndy Fiddaman			;;
712*906afcb8SAndy Fiddaman		esac
713*906afcb8SAndy Fiddaman		case $2 in
714*906afcb8SAndy Fiddaman		binary)	echo "${bO}
715*906afcb8SAndy Fiddaman${bH}Binary Package Installation Instructions${eH}
716*906afcb8SAndy Fiddaman${bL}
717*906afcb8SAndy Fiddaman${bT}(1)${bD}Do not install packages as ${bI}root/super-user${eI}. Although some components may
718*906afcb8SAndy Fiddaman      have setuid executables, few must be owned by ${bI}root${eI}. These are best
719*906afcb8SAndy Fiddaman      changed manually when the security implications are understood.${eD}
720*906afcb8SAndy Fiddaman${bT}(2)${bD}Choose a package root directory and cd to it. This will be a local work
721*906afcb8SAndy Fiddaman      area for all packages.${eD}
722*906afcb8SAndy Fiddaman${bT}(3)${bD}These instructions bypass the ${bI}click to download${eI} package links on the
723*906afcb8SAndy Fiddaman      download site. If you already clicked, or if your system does not have
724*906afcb8SAndy Fiddaman      ${Mcurl}, ${Mhurl}, ${Mlynx} or ${Mwget} then use the alternate instructions
725*906afcb8SAndy Fiddaman      for (3),(4),(5) in plan ${bB}B${eB} below. Plan ${bB}B${eB} installs the ${Mhurl}
726*906afcb8SAndy Fiddaman      script which works with ksh and modern bash. The top level URL is:${bX}
727*906afcb8SAndy Fiddaman		URL=http://www.research.att.com/sw/download${eX}${eD}
728*906afcb8SAndy Fiddaman${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then run:${bX}
729*906afcb8SAndy Fiddaman		test -d bin || mkdir bin
730*906afcb8SAndy Fiddaman		url=\$URL/package
731*906afcb8SAndy Fiddaman		(wget -O - \$url||curl -L \$url||hurl \$url) > bin/package
732*906afcb8SAndy Fiddaman		chmod +x bin/package${eX}${eD}
733*906afcb8SAndy Fiddaman${bT}(5)${bD}Determine the list of package names you want from the download site, then
734*906afcb8SAndy Fiddaman      use the ${Mpackage} command to do the actual download:${bX}
735*906afcb8SAndy Fiddaman		bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
736*906afcb8SAndy Fiddaman			setup binary \$URL ${bI}PACKAGE${eI} ...${eX}
737*906afcb8SAndy Fiddaman      (Refer to the ${bB}AUTHORIZATION${eB} paragraph on the main download page for
738*906afcb8SAndy Fiddaman      ${bI}NAME${eI}/${bI}PASSWORD${eI} details.)  This downloads the closure of the latest
739*906afcb8SAndy Fiddaman      binary package(s); covered and up-to-date packages are not downloaded again unless
740*906afcb8SAndy Fiddaman      ${bB}package force ...${eB} is specified. Package content is verified using ${bB}${checksum}${eB}.
741*906afcb8SAndy Fiddaman      If the package root will contain only one architecture then you can install in ${bB}bin${eB} and
742*906afcb8SAndy Fiddaman      ${bB}lib${eB} instead of ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/bin${eB} and ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/lib${eB} by running this
743*906afcb8SAndy Fiddaman      instead:${bX}
744*906afcb8SAndy Fiddaman		bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
745*906afcb8SAndy Fiddaman			flat setup binary \$URL ${bB}PACKAGE${eB} ...${eX}
746*906afcb8SAndy Fiddaman      To update the same packages from the same URL run:${bX}
747*906afcb8SAndy Fiddaman		bin/package setup binary${eX}${eD}
748*906afcb8SAndy Fiddaman${bT}(6)${bD}The packaged binaries are position independent, i.e., they do not
749*906afcb8SAndy Fiddaman      contain hard-coded paths. However, commands with related files, like
750*906afcb8SAndy Fiddaman      ${Mfile} and ${Mnmake}, require the path of the bin directory to be
751*906afcb8SAndy Fiddaman      exported in ${bB}PATH${eb}.${eD}
752*906afcb8SAndy Fiddaman${bT}(7)${bD}You can run the binaries directly from the package root, or you can
753*906afcb8SAndy Fiddaman      install them in a public root (requires the ${bI}AT${Camp}T${eI} ${Mnmake} command):${bX}
754*906afcb8SAndy Fiddaman		bin/package flat install ${bI}DIRECTORY PACKAGE${eI}${eX}
755*906afcb8SAndy Fiddaman      This will install in ${bI}DIRECTORY${eI}${bB}/bin${eB} and ${bI}DIRECTORY${eI}${bB}/lib${eB}. If you want to
756*906afcb8SAndy Fiddaman      preserve the ${bB}arch/${eB}${bI}HOSTTYPE${eI} hierarchy under ${bI}DIRECTORY${eI} then omit the
757*906afcb8SAndy Fiddaman      ${bB}flat${eB} argument. If you don't have ${Mnmake} then the following will do a
758*906afcb8SAndy Fiddaman      flat install:${bX}
759*906afcb8SAndy Fiddaman		cd \$INSTALLROOT
760*906afcb8SAndy Fiddaman		cp -p -r bin lib include ${bI}DIRECTORY${eI}${eX}${eD}
761*906afcb8SAndy Fiddaman${bT}(8)${bD}To summarize, after the first time, the download cycle for the latest
762*906afcb8SAndy Fiddaman      binary release is:${bX}
763*906afcb8SAndy Fiddaman		bin/package setup binary${eX}${eD}${eL}
764*906afcb8SAndy Fiddaman
765*906afcb8SAndy Fiddaman${bH}Binary Package Installation Instructions -- Plan B${eH}
766*906afcb8SAndy Fiddaman${bL}
767*906afcb8SAndy Fiddaman${bT}(3)${bD}Create the subdirectory ${bB}lib/package/tgz${eB} and download all package archives
768*906afcb8SAndy Fiddaman      into that directory.${eD}
769*906afcb8SAndy Fiddaman${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then manually read the ${bB}INIT${eB}
770*906afcb8SAndy Fiddaman      binary package:${bX}
771*906afcb8SAndy Fiddaman		gunzip < lib/package/tgz/INIT.${bI}YYYY-MM-DD.HOSTTYPE${eI}.tgz |
772*906afcb8SAndy Fiddaman			${TAR} ${TARFLAGS}f -${eX}
773*906afcb8SAndy Fiddaman      Note that some browsers automatically unzip downloaded without warning.
774*906afcb8SAndy Fiddaman      If the gunzip fails try:
775*906afcb8SAndy Fiddaman		${TAR} ${TARFLAGS}f -${eX} lib/package/tgz/INIT.${bI}YYYY-MM-DD.HOSTTYPE${eI}.tgz
776*906afcb8SAndy Fiddaman      If your system does not have ${Mtar} or ${Mgunzip} then download the ${Mratz}
777*906afcb8SAndy Fiddaman      binary package:${bX}
778*906afcb8SAndy Fiddaman		mkdir bin
779*906afcb8SAndy Fiddaman		cp lib/package/tgz/ratz.${bI}YYYY-MM-DD.HOSTTYPE${eI}.exe bin/ratz
780*906afcb8SAndy Fiddaman		chmod +x bin/ratz
781*906afcb8SAndy Fiddaman		bin/ratz -lm < lib/package/tgz/INIT.${bI}YYYY-MM-DD/HOSTTYPE${eI}.tgz
782*906afcb8SAndy Fiddaman${bT}(5)${bD}Read all unread package archive(s):${bX}
783*906afcb8SAndy Fiddaman		bin/package read${eX}
784*906afcb8SAndy Fiddaman      Both source and binary packages will be read by this step.${eD}${eL}${eO}"
785*906afcb8SAndy Fiddaman			;;
786*906afcb8SAndy Fiddaman		intro)	echo "${bO}
787*906afcb8SAndy Fiddaman${bH}Package Hierarchy Details${eH}
788*906afcb8SAndy Fiddaman${bP}
789*906afcb8SAndy FiddamanThe package directory hierarchy is rooted at ${bB}\$PACKAGEROOT${eB}. All source and
790*906afcb8SAndy Fiddamanbinaries reside under this tree. A two level viewpath is used to separate
791*906afcb8SAndy Fiddamansource and binaries. The top view is architecture specific, the bottom view
792*906afcb8SAndy Fiddamanis shared source. All building is done in the architecture specific view;
793*906afcb8SAndy Fiddamanno source view files are intentionally changed. This means that many
794*906afcb8SAndy Fiddamandifferent binary architectures can be made from a single copy of the source.
795*906afcb8SAndy Fiddaman${bP}
796*906afcb8SAndy FiddamanEach package contains one or more components. Component source for the ${bI}FOO${eI}
797*906afcb8SAndy Fiddamancommand is in ${bB}\$PACKAGEROOT/src/cmd/${eB}${bI}FOO${eI}, and source for the ${bI}BAR${eI} library is
798*906afcb8SAndy Fiddamanin ${bB}\$PACKAGEROOT/src/lib/lib${eB}${bI}BAR${eI}. This naming is for convenience only; the
799*906afcb8SAndy Fiddamanunderlying makefiles handle inter-component build order. The ${bB}INIT${eB} component,
800*906afcb8SAndy Fiddamanwhich contains generic package support files, is always made first, then the
801*906afcb8SAndy Fiddamancomponents named ${bB}INIT${eB}*, then the order determined by the closure of component
802*906afcb8SAndy Fiddamanmakefile dependencies.
803*906afcb8SAndy Fiddaman${bP}
804*906afcb8SAndy Fiddaman${bB}\$PACKAGEROOT/lib/package${eB} contains package specific files. The package naming
805*906afcb8SAndy Fiddamanconvention is ${bI}GROUP${eI}[${bI}-PART${eI}]; e.g., ${bB}ast-base${eB}, ${bB}gnu-fileutils${eB}. The *${bB}.pkg${eB} files
806*906afcb8SAndy Fiddamanare ${bB}ast${eB} ${Mnmake} makefiles that contain the package name, package components,
807*906afcb8SAndy Fiddamanreferences to other packages, and a short package description. *${bB}.pkg${eB} files
808*906afcb8SAndy Fiddamanare used by ${bF}package write${eF} to generate new source and binary packages.
809*906afcb8SAndy Fiddaman${bP}
810*906afcb8SAndy Fiddaman${bB}\$PACKAGEROOT/lib/package/${eB}${bI}GROUP${eI}${bB}.lic${eB} files contain license information that
811*906afcb8SAndy Fiddamanis used by the ${bB}ast${eB} ${Mproto} and ${Mnmake} commands to generate source and
812*906afcb8SAndy Fiddamanbinary license strings. ${bI}GROUP${eI} is determined by the first ${bB}:PACKAGE:${eB} operator
813*906afcb8SAndy Fiddamanname listed in the component ${bB}nmake${eB} makefile. ${bI}GROUP${eI}${bB}.lic${eB} files are part of the
814*906afcb8SAndy Fiddamanlicensing documentation.  Each component may have its own ${bB}LICENSE${eB} file that
815*906afcb8SAndy Fiddamanoverrides the ${bI}GROUP${eI}${bB}.lic${eB} file.  The full text of the licenses are in the
816*906afcb8SAndy Fiddaman${bB}\$PACKAGEROOT/lib/package/LICENSES${eB} and ${bB}\$INSTALLROOT/lib/package/LICENSES${eB}
817*906afcb8SAndy Fiddamandirectories.
818*906afcb8SAndy Fiddaman${bP}
819*906afcb8SAndy FiddamanA few files are generated in ${bB}\$PACKAGEROOT/lib/package/gen${eB} and
820*906afcb8SAndy Fiddaman${bB}\$INSTALLROOT/lib/package/gen${eB}. ${bI}PACKAGE${eI}${bB}.ver${eB} contains one line consisting of${bX}
821*906afcb8SAndy Fiddaman	${bI}PACKAGE VERSION RELEASE${eI} 1${eX}
822*906afcb8SAndy Fiddamanfor the most recent instance of ${bI}PACKAGE${eI} read into ${bB}\$PACKAGEROOT${eB}, where
823*906afcb8SAndy Fiddaman${bI}PACKAGE${eI} is the package name, ${bI}VERSION${eI} is the ${bI}YYYY-MM-DD${eI} base version,
824*906afcb8SAndy Fiddamanand ${bI}RELEASE${eI} is ${bI}VERSION${eI} for the base release or ${bI}YYYY-MM-DD${eI} for delta releases.
825*906afcb8SAndy Fiddaman${bI}PACKAGE${eI}${bB}.req${eB} contains *${bB}.ver${eB} entries for the packages required by
826*906afcb8SAndy Fiddaman${bI}PACKAGE${eI}, except that the fourth field is 0 instead of 1. All packages
827*906afcb8SAndy Fiddamanexcept ${bB}INIT${eB} and ${Mratz} require the ${bB}INIT${eB} package. A simple sort of ${bI}PACKAGE${eI}${bB}.pkg${eB}
828*906afcb8SAndy Fiddamanand *${bB}.ver${eB} determines if the required package have been read in. Finally,
829*906afcb8SAndy Fiddaman${bI}PACKAGE${eI}${bB}.README${eB} contains the ${bB}README${eB} text for ${bI}PACKAGE${eI} and all its
830*906afcb8SAndy Fiddamancomponents. Included are all changes added to the component ${bB}RELEASE${eB},
831*906afcb8SAndy Fiddaman${bB}CHANGES${eB} or ${bB}ChangeLog${eB} files dated since the two most recent base
832*906afcb8SAndy Fiddamanreleases. Component ${bB}RELEASE${eB} files contain tag lines of the form
833*906afcb8SAndy Fiddaman[${bI}CC${eI}]${bI}YY-MM-DD${eI} [ ${bI}TEXT${eI} ] (or ${Mdate} format dates) followed by README
834*906afcb8SAndy Fiddamantext, in reverse chronological order (newer entries at the top of the
835*906afcb8SAndy Fiddamanfile.) ${bF}package release${eF} generates this information, and
836*906afcb8SAndy Fiddaman${bF}package contents ...${eF} lists the descriptions and components.
837*906afcb8SAndy Fiddaman${bP}
838*906afcb8SAndy Fiddaman${bB}\$HOSTYPE${eB} names the current binary architecture and is determined by the
839*906afcb8SAndy Fiddamanoutput of ${bF}package${eF} (no arguments.) The ${bB}\$HOSTTYPE${eB} naming scheme is used
840*906afcb8SAndy Fiddamanto separate incompatible executable and object formats. All architecture
841*906afcb8SAndy Fiddamanspecific binaries are placed under ${bB}\$INSTALLROOT${eB} (${bB}\$PACKAGEROOT/arch/\$HOSTTYPE${eB}.)
842*906afcb8SAndy FiddamanThere are a few places that match against ${bB}\$HOSTTYPE${eB} when making binaries; these
843*906afcb8SAndy Fiddamanare limited to makefile compiler workarounds, e.g., if ${bB}\$HOSTTYPE${eB} matches
844*906afcb8SAndy Fiddaman'hp.*' then turn off the optimizer for these objects. All other architecture
845*906afcb8SAndy Fiddamandependent logic is handled either by ${bB}\$INSTALLROOT/bin/iffe${eB} or by component
846*906afcb8SAndy Fiddamanspecific configure scripts. Explicit ${bB}\$HOSTYPE${eB} values matching *,*cc*[,-*,...]
847*906afcb8SAndy Fiddamanoptionally set the default ${bB}CC${eB} and ${bB}CCFLAGS${eB}. This is handy for build
848*906afcb8SAndy Fiddamanfarms that support different compilers on the same architecture.
849*906afcb8SAndy Fiddaman${bP}
850*906afcb8SAndy FiddamanEach component contains an ${bB}ast${eB} ${Mnmake} makefile (either ${bB}Nmakefile${eB} or ${bB}Makefile${eB})
851*906afcb8SAndy Fiddamanand a ${bI}MAM${eI} (make abstract machine) file (${bB}Mamfile${eB}.) A Mamfile contains a portable
852*906afcb8SAndy Fiddamanmakefile description that is used by ${bB}\$INSTALLROOT/bin/mamake${eB} to simulate
853*906afcb8SAndy Fiddaman${bB}nmake${eB}. Currently there is no support for old-make/gnu-make makefiles; if
854*906afcb8SAndy Fiddamanthe binaries are just being built then ${bB}mamake${eB} will suffice; if source or
855*906afcb8SAndy Fiddamanmakefile modifications are anticipated then ${bB}nmake${eB} (from the ${bB}ast-open${eB} or
856*906afcb8SAndy Fiddaman${bB}ast-base${eB} package) should be used. Mamfiles are automatically generated by
857*906afcb8SAndy Fiddaman${bF}package write${eF}.
858*906afcb8SAndy Fiddaman${bP}
859*906afcb8SAndy FiddamanMost component C source is prototyped. If ${bB}\$CC${eB} (default value ${bB}cc${eB}) is not a
860*906afcb8SAndy Fiddamanprototyping C compiler then ${bF}package make${eF} runs ${Mproto} on portions of the
861*906afcb8SAndy Fiddaman${bB}\$PACKAGEROOT/src${eB} tree and places the converted output files in the
862*906afcb8SAndy Fiddaman${bB}\$PACKAGEROOT/proto/src${eB} tree. Converted files are then viewpathed over the
863*906afcb8SAndy Fiddamanoriginal source. The ${bB}ast${eB} ${Mproto} command converts an ANSI C subset to code
864*906afcb8SAndy Fiddamanthat is compatible with K&R, ANSI, and C++ dialects.
865*906afcb8SAndy Fiddaman${bP}
866*906afcb8SAndy FiddamanAll scripts and commands under ${bB}\$PACKAGEROOT${eB} use ${bB}\$PATH${eB} relative pathnames;
867*906afcb8SAndy Fiddamanthere are no imbedded absolute pathnames. This means that binaries generated
868*906afcb8SAndy Fiddamanunder ${bB}\$PACKAGEROOT${eB} may be copied to a different root; users need only change
869*906afcb8SAndy Fiddamantheir ${bB}\$PATH${eB} variable to reference the new instalation root bin directory.
870*906afcb8SAndy Fiddaman${bF}package install${eF} installs binary packages in a new ${bB}\$INSTALLROOT${eB}.
871*906afcb8SAndy Fiddaman${eO}"
872*906afcb8SAndy Fiddaman			;;
873*906afcb8SAndy Fiddaman		source)	echo "${bO}
874*906afcb8SAndy Fiddaman${bH}Source Package Installation Instructions${eH}
875*906afcb8SAndy Fiddaman${bL}
876*906afcb8SAndy Fiddaman${bT}(1)${bD}Do not install packages as ${bI}root/super-user${eI}. Although some components may
877*906afcb8SAndy Fiddaman      have setuid executables, few must be owned by ${bI}root${eI}. These are best
878*906afcb8SAndy Fiddaman      changed manually when the security implications are understood.${eD}
879*906afcb8SAndy Fiddaman${bT}(2)${bD}Choose a package root directory and cd to it. This will be a local work
880*906afcb8SAndy Fiddaman      area for all packages.
881*906afcb8SAndy Fiddaman${bT}(3)${bD}These instructions bypass the ${bI}click to download${eI} package links on the
882*906afcb8SAndy Fiddaman      download site. If you already clicked, or if your system does not have
883*906afcb8SAndy Fiddaman      ${Mcurl}, ${Mhurl}, ${Mlynx} or ${Mwget} then use the alternate instructions
884*906afcb8SAndy Fiddaman      for (3),(4),(5) in plan ${bB}B${eB} below. Plan ${bB}B${eB} installs the ${Mhurl}
885*906afcb8SAndy Fiddaman      script which works with ksh and modern bash. The top level URL is:${bX}
886*906afcb8SAndy Fiddaman		URL=http://www.research.att.com/sw/download${eX}${eD}
887*906afcb8SAndy Fiddaman${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then run:${bX}
888*906afcb8SAndy Fiddaman		test -d bin || mkdir bin
889*906afcb8SAndy Fiddaman		url=\$URL/package
890*906afcb8SAndy Fiddaman		(wget -O - \$url||curl -L \$url||hurl \$url) > bin/package
891*906afcb8SAndy Fiddaman		chmod +x bin/package${eX}${eD}
892*906afcb8SAndy Fiddaman${bT}(5)${bD}Determine the list of package names you want from the download site, then
893*906afcb8SAndy Fiddaman      use the ${Mpackage} command to do the actual download:${bX}
894*906afcb8SAndy Fiddaman		bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
895*906afcb8SAndy Fiddaman			setup source \$URL ${bB}PACKAGE${eB} ...${eX}
896*906afcb8SAndy Fiddaman      (Refer to the ${bB}AUTHORIZATION${eB} paragraph on the main download page for
897*906afcb8SAndy Fiddaman      ${bI}NAME${eI}/${bI}PASSWORD${eI} details.)  This downloads the closure of the latest
898*906afcb8SAndy Fiddaman      source package(s); covered and up-to-date packages are not downloaded again unless
899*906afcb8SAndy Fiddaman      ${bB}package force ...${eB} is specified. Package content is verified using ${bB}${checksum}${eB}.
900*906afcb8SAndy Fiddaman      If the package root will contain only one architecture then you can install in ${bB}bin${eB} and
901*906afcb8SAndy Fiddaman      ${bB}lib${eB} instead of ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/bin${eB} and ${bB}arch/${eB}${bI}HOSTTYPE${eI}${bB}/lib${eB} by running this
902*906afcb8SAndy Fiddaman      instead:${bX}
903*906afcb8SAndy Fiddaman		bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
904*906afcb8SAndy Fiddaman			flat setup source \$URL ${bB}PACKAGE${eB} ...${eX}
905*906afcb8SAndy Fiddaman      To update the same packages from the same URL run:${bX}
906*906afcb8SAndy Fiddaman		bin/package setup source${eX}${eD}
907*906afcb8SAndy Fiddaman${bT}(6)${bD}Build and install; all generated files are placed under ${bB}arch/${eB}${bI}HOSTTYPE${eI}
908*906afcb8SAndy Fiddaman      (${bB}\$INSTALLROOT${eB}), where ${bI}HOSTTYPE${eI} is the output of ${bB}bin/package${eB} (with no
909*906afcb8SAndy Fiddaman      arguments.) ${bI}name=value${eI} arguments are supported; ${bB}CC${eB} and ${bB}debug=1${eB} (compile
910*906afcb8SAndy Fiddaman      with -g instead of -O) are likely candidates. The output is written to
911*906afcb8SAndy Fiddaman      the terminal and captured in ${bB}\$INSTALLROOT/lib/package/gen/make.out${eB}:${bX}
912*906afcb8SAndy Fiddaman		bin/package make${eX}${eD}
913*906afcb8SAndy Fiddaman${bT}(7)${bD}List make results and interesting errors:${bX}
914*906afcb8SAndy Fiddaman		bin/package results${eX}
915*906afcb8SAndy Fiddaman      Run the regression tests:${bX}
916*906afcb8SAndy Fiddaman		bin/package test${eX}
917*906afcb8SAndy Fiddaman      List test results and errors:${bX}
918*906afcb8SAndy Fiddaman		bin/package results test${eX}${eD}
919*906afcb8SAndy Fiddaman${bT}(8)${bD}The generated binaries are position independent, i.e., they do not
920*906afcb8SAndy Fiddaman      contain hard-coded paths. However, commands with related files, like
921*906afcb8SAndy Fiddaman      ${Mfile} and ${Mnmake}, require the path of the bin directory to be
922*906afcb8SAndy Fiddaman      exported in ${bB}PATH${eb}.${eD}
923*906afcb8SAndy Fiddaman${bT}(9)${bD}You can run the binaries directly from the package root, or you can
924*906afcb8SAndy Fiddaman      install them in a public root after you are satisfied with the make and
925*906afcb8SAndy Fiddaman      test actions (requires the ${bI}AT${Camp}T${eI} ${Mnmake} command):${bX}
926*906afcb8SAndy Fiddaman		bin/package flat install ${bI}DIRECTORY PACKAGE${eI}${eX}
927*906afcb8SAndy Fiddaman      This will install in ${bI}DIRECTORY${eI}${bB}/bin${eB} and ${bI}DIRECTORY${eI}${bB}/lib${eB}. If you want to
928*906afcb8SAndy Fiddaman      preserve the ${bB}arch/${eB}${bI}HOSTTYPE${eI} hierarchy under ${bI}DIRECTORY${eI} then omit the
929*906afcb8SAndy Fiddaman      ${bB}flat${eB} argument. If you don't have ${Mnmake} then the following will do a
930*906afcb8SAndy Fiddaman      flat install:${bX}
931*906afcb8SAndy Fiddaman		cd \$INSTALLROOT
932*906afcb8SAndy Fiddaman		cp -p -r bin lib include ${bI}DIRECTORY${eI}${eX}${eD}
933*906afcb8SAndy Fiddaman${bT}(10)${bD}To summarize, after the first time the download, build, and test cycle
934*906afcb8SAndy Fiddaman      for the latest source release is:${bX}
935*906afcb8SAndy Fiddaman		bin/package setup source
936*906afcb8SAndy Fiddaman		bin/package make
937*906afcb8SAndy Fiddaman		bin/package test${eX}${eD}${eL}
938*906afcb8SAndy Fiddaman
939*906afcb8SAndy Fiddaman${bH}Source Package Installation Instructions -- Plan B${eH}
940*906afcb8SAndy Fiddaman${bL}
941*906afcb8SAndy Fiddaman${bT}(3)${bD}Create the subdirectory ${bB}lib/package/tgz${eB} and download all package archives
942*906afcb8SAndy Fiddaman      into that directory.${eD}
943*906afcb8SAndy Fiddaman${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then manually read the ${bB}INIT${eB}
944*906afcb8SAndy Fiddaman      source package:${bX}
945*906afcb8SAndy Fiddaman		gunzip < lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz | ${TAR} ${TARFLAGS}f -${eX}
946*906afcb8SAndy Fiddaman      Note that some browsers automatically unzip downloaded without warning.
947*906afcb8SAndy Fiddaman      If the gunzip fails try:
948*906afcb8SAndy Fiddaman		${TAR} ${TARFLAGS}f -${eX} lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz
949*906afcb8SAndy Fiddaman      If your system does not have ${Mtar} or ${Mgunzip} then download the ${Mratz}
950*906afcb8SAndy Fiddaman      source package, compile it, and manually read the ${bB}INIT${eB}
951*906afcb8SAndy Fiddaman      source package:${bX}
952*906afcb8SAndy Fiddaman		mkdir bin
953*906afcb8SAndy Fiddaman		cp lib/package/tgz/ratz.${bI}YYYY-MM-DD${eI}.c lib/package/tgz/ratz.c
954*906afcb8SAndy Fiddaman		cc -o bin/ratz lib/package/tgz/ratz.c
955*906afcb8SAndy Fiddaman		bin/ratz -lm < lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz
956*906afcb8SAndy Fiddaman${bT}(5)${bD}Read all unread package archive(s):${bX}
957*906afcb8SAndy Fiddaman		bin/package read${eX}
958*906afcb8SAndy Fiddaman      Both source and binary packages will be read by this step.${eD}${eL}${eO}"
959*906afcb8SAndy Fiddaman			;;
960*906afcb8SAndy Fiddaman		*)	echo "Usage: $command [ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]
961*906afcb8SAndy Fiddaman
962*906afcb8SAndy Fiddaman   The $command command controls source and binary packages. It must be run
963*906afcb8SAndy Fiddaman   within the package root directory tree. See \"$command help intro\" for
964*906afcb8SAndy Fiddaman   details. In the following, PACKAGE names either a package or a component
965*906afcb8SAndy Fiddaman   within a package; if omitted, all packages are operated on. The default
966*906afcb8SAndy Fiddaman   action is \"host type\".
967*906afcb8SAndy Fiddaman
968*906afcb8SAndy Fiddaman   qualifier:
969*906afcb8SAndy Fiddaman	authorize NAME Remote authorization name or license acceptance phrase.
970*906afcb8SAndy Fiddaman	debug|environment Show environment and actions; do not execute.
971*906afcb8SAndy Fiddaman	flat    Collapse \$INSTALLROOT { bin fun include lib } onto \$PACKAGEROOT.
972*906afcb8SAndy Fiddaman	force	Force the action to override saved state.
973*906afcb8SAndy Fiddaman	never	Run make -N; otherwise show other actions.
974*906afcb8SAndy Fiddaman	only	Only operate on the specified packages.
975*906afcb8SAndy Fiddaman	password PASSWORD Remote authorization or license acceptance password.
976*906afcb8SAndy Fiddaman	quiet	Do not list captured make and test action output.
977*906afcb8SAndy Fiddaman	show	Run make -n; otherwise show other actions.
978*906afcb8SAndy Fiddaman	DEBUG	Trace the package script actions in detail for debugging.
979*906afcb8SAndy Fiddaman   action:
980*906afcb8SAndy Fiddaman	admin [ all ] [ db FILE ] [ on PATTERN ] [ action ... ]
981*906afcb8SAndy Fiddaman		Apply ACTION ... to the hosts listed in FILE. If FILE is
982*906afcb8SAndy Fiddaman		omitted then "admin.db" is assumed. The caller must have rcp(1)
983*906afcb8SAndy Fiddaman		and rsh(1) or scp(1) and ssh(1) access to the hosts. Output
984*906afcb8SAndy Fiddaman		for the action is saved per-host in ACTION.log/HOST. Logs
985*906afcb8SAndy Fiddaman		can be viewed by \"package admin [on HOST] results [ACTION]\".
986*906afcb8SAndy Fiddaman		By default only local PACKAGEROOT hosts are selected from FILE;
987*906afcb8SAndy Fiddaman		\"all\" selects all hosts. \"on PATTERN\" selects only
988*906afcb8SAndy Fiddaman		hosts matching the | separated PATTERN. FILE contains four
989*906afcb8SAndy Fiddaman		types of lines. Blank lines and lines beginning with # are
990*906afcb8SAndy Fiddaman		ignored. Lines starting with id=value are variable assignments.
991*906afcb8SAndy Fiddaman		Set admin_ping to local conventions if \"$admin_ping\" fails.
992*906afcb8SAndy Fiddaman		If a package list is not specified on the command line the
993*906afcb8SAndy Fiddaman		action applies to all packages; a variable assigment
994*906afcb8SAndy Fiddaman		package=list applies action to the packages in list for
995*906afcb8SAndy Fiddaman		subsequent hosts in FILE. The remaining line type is a host
996*906afcb8SAndy Fiddaman		description consisting of 6 tab separated fields. The first 3
997*906afcb8SAndy Fiddaman		are mandatory; the remaining 3 are updated by the admin action:
998*906afcb8SAndy Fiddaman		   hosttype
999*906afcb8SAndy Fiddaman			   The host type as reported by package.
1000*906afcb8SAndy Fiddaman		   [user@]host
1001*906afcb8SAndy Fiddaman			   The host name and optionally user name for rcp(1)
1002*906afcb8SAndy Fiddaman			   and rsh(1) access.
1003*906afcb8SAndy Fiddaman		   [remote:[[master]:]]PACKAGEROOT
1004*906afcb8SAndy Fiddaman			   The absolute remote package root directory and
1005*906afcb8SAndy Fiddaman			   optionally the remote prorocol (rsh or ssh) if
1006*906afcb8SAndy Fiddaman			   the directory is on a different server than the
1007*906afcb8SAndy Fiddaman			   master package root directory. If
1008*906afcb8SAndy Fiddaman			   lib/package/admin/$admin_env exists under
1009*906afcb8SAndy Fiddaman			   this directory then it is sourced by sh(1)
1010*906afcb8SAndy Fiddaman			   before ACTION is done. If this field begins with -
1011*906afcb8SAndy Fiddaman			   then the host is ignored. If this field contains
1012*906afcb8SAndy Fiddaman			   : then ditto(1) is used to sync the remote src
1013*906afcb8SAndy Fiddaman			   directory hierarchy to the local one. If [master]:
1014*906afcb8SAndy Fiddaman			   is specified then the sync is deferred to the
1015*906afcb8SAndy Fiddaman			   master host. If master is omitted (two :) then
1016*906afcb8SAndy Fiddaman			   the sync is disabled. These directories must exist
1017*906afcb8SAndy Fiddaman			   on the remote side: lib/package, src/cmd, src/lib.
1018*906afcb8SAndy Fiddaman		   date    YYMMDD of the last action.
1019*906afcb8SAndy Fiddaman		   date    Elapsed wall time of the last action.
1020*906afcb8SAndy Fiddaman		   M T W   The admin action make, test and write action error
1021*906afcb8SAndy Fiddaman			   counts. A non-numeric value in any of these fields
1022*906afcb8SAndy Fiddaman			   disables the corresponding action.
1023*906afcb8SAndy Fiddaman	    	   owner   The owner contact information.
1024*906afcb8SAndy Fiddaman		   attributes
1025*906afcb8SAndy Fiddaman		           NAME=VALUE attributes. Should at least contain
1026*906afcb8SAndy Fiddaman			   cc=compiler-version.
1027*906afcb8SAndy Fiddaman	clean | clobber
1028*906afcb8SAndy Fiddaman	    Delete the arch/HOSTTYPE hierarchy; this deletes all generated
1029*906afcb8SAndy Fiddaman	    files and directories for HOSTTYPE. The heirarchy can be rebuilt
1030*906afcb8SAndy Fiddaman	    by package make.]
1031*906afcb8SAndy Fiddaman	contents [ package ... ]
1032*906afcb8SAndy Fiddaman		List description and components for PACKAGE on the standard
1033*906afcb8SAndy Fiddaman		output.
1034*906afcb8SAndy Fiddaman	copyright [ package ... ]
1035*906afcb8SAndy Fiddaman		List the general copyright notice(s) for PACKAGE on the
1036*906afcb8SAndy Fiddaman		standard output. Note that individual components in PACKAGE
1037*906afcb8SAndy Fiddaman		may contain additional or replacement notices.
1038*906afcb8SAndy Fiddaman	export [ VARIABLE ... ]
1039*906afcb8SAndy Fiddaman		List NAME=VALUE for each VARIABLE, one per line. If the
1040*906afcb8SAndy Fiddaman		\"only\" attribute is specified then only the variable
1041*906afcb8SAndy Fiddaman		values are listed. If no variables are specified then
1042*906afcb8SAndy Fiddaman		$env are assumed.
1043*906afcb8SAndy Fiddaman	help [ ACTION ]
1044*906afcb8SAndy Fiddaman		Display help text on the standard error [ standard output
1045*906afcb8SAndy Fiddaman		for ACTION ].
1046*906afcb8SAndy Fiddaman	host [ canon cpu name rating type ... ]
1047*906afcb8SAndy Fiddaman		List architecture/implementation dependent host information
1048*906afcb8SAndy Fiddaman		on the standard output. type is listed if no attributes are
1049*906afcb8SAndy Fiddaman		specified. Information is listed on a single line in attributes
1050*906afcb8SAndy Fiddaman		order. The attributes are:
1051*906afcb8SAndy Fiddaman		   canon   The next argument is a host type name to be
1052*906afcb8SAndy Fiddaman			   converted to package syntax.
1053*906afcb8SAndy Fiddaman		   cpu     The number of cpus; 1 if the host is not a
1054*906afcb8SAndy Fiddaman			   multiprocessor.
1055*906afcb8SAndy Fiddaman		   name    The host name.
1056*906afcb8SAndy Fiddaman		   rating  The cpu rating in pseudo mips; the value is useful
1057*906afcb8SAndy Fiddaman			   useful only in comparisons with rating values of
1058*906afcb8SAndy Fiddaman			   other hosts. Other than a vax rating fixed at 1,
1059*906afcb8SAndy Fiddaman			   ratings can vary wildly but consistently from
1060*906afcb8SAndy Fiddaman			   vendor mips ratings. cc(1) may be required to
1061*906afcb8SAndy Fiddaman			   determine the rating.
1062*906afcb8SAndy Fiddaman	           type    The host type, usually of the form
1063*906afcb8SAndy Fiddaman			   vendor.architecture, with an optional trailing
1064*906afcb8SAndy Fiddaman			   -version. The main theme is that type names within
1065*906afcb8SAndy Fiddaman			   a family of architectures are named in a similar,
1066*906afcb8SAndy Fiddaman			   predictable style. Os point release information is
1067*906afcb8SAndy Fiddaman			   avoided as much as possible, but vendor resistance
1068*906afcb8SAndy Fiddaman			   to release incompatibilities has for the most part
1069*906afcb8SAndy Fiddaman			   been futile.
1070*906afcb8SAndy Fiddaman	html [ ACTION ]
1071*906afcb8SAndy Fiddaman		Display html help text on the standard error [ standard output
1072*906afcb8SAndy Fiddaman		for ACTION ].
1073*906afcb8SAndy Fiddaman	install [ ARCHITECTURE ... ] DIR [ PACKAGE ... ]
1074*906afcb8SAndy Fiddaman		Copy the package binary hierarchy to DIR. If ARCHITECTURE is
1075*906afcb8SAndy Fiddaman		omitted then all architectures are installed. If the \"flat\"
1076*906afcb8SAndy Fiddaman		attribute is specified then exactly one ARCHITECTURE must be
1077*906afcb8SAndy Fiddaman		specified; this architecture will be installed in DIR without
1078*906afcb8SAndy Fiddaman		the \"arch/HOSTTYPE\" directory prefixes. Otherwise each
1079*906afcb8SAndy Fiddaman		architecture will be installed in a separate \"arch/HOSTTYPE\"
1080*906afcb8SAndy Fiddaman		subdirectory of DIR. The ARCHITECTURE - names the current
1081*906afcb8SAndy Fiddaman		architecture. DIR must be an existing directory. If PACKAGE
1082*906afcb8SAndy Fiddaman		is omitted then all binary packages are installed. This action
1083*906afcb8SAndy Fiddaman		requires nmake.
1084*906afcb8SAndy Fiddaman	license [ package ... ]
1085*906afcb8SAndy Fiddaman		List the source license(s) for PACKAGE on the standard output.
1086*906afcb8SAndy Fiddaman		Note that individual components in PACKAGE may contain
1087*906afcb8SAndy Fiddaman		additional or replacement licenses.
1088*906afcb8SAndy Fiddaman	list [ PACKAGE ... ]
1089*906afcb8SAndy Fiddaman		List the name, version and prerequisites for PACKAGE on the
1090*906afcb8SAndy Fiddaman		standard output.
1091*906afcb8SAndy Fiddaman	make [ PACKAGE ] [ OPTION ... ] [ TARGET ... ]
1092*906afcb8SAndy Fiddaman		Build and install. The default TARGET is install, which
1093*906afcb8SAndy Fiddaman		makes and installs all packages. If the standard output
1094*906afcb8SAndy Fiddaman		is a terminal then the output is also captured in
1095*906afcb8SAndy Fiddaman		\$INSTALLROOT/lib/package/gen/make.out. The build is done
1096*906afcb8SAndy Fiddaman		in the \$INSTALLROOT directory tree viewpathed on top of
1097*906afcb8SAndy Fiddaman		the \$PACKAGEROOT directory tree. If \"flat\" is specified then
1098*906afcb8SAndy Fiddaman		the \$INSTALLROOT { bin fun include lib } directories are
1099*906afcb8SAndy Fiddaman		linked to the same directories in the package root. Only
1100*906afcb8SAndy Fiddaman		one architecture may be flat. Leaf directory names matching
1101*906afcb8SAndy Fiddaman		the |-separated shell pattern \$MAKESKIP are ignored. The
1102*906afcb8SAndy Fiddaman		view action is done before making. OPTION operands are
1103*906afcb8SAndy Fiddaman		passed to the underlying make command.
1104*906afcb8SAndy Fiddaman	read [ package ... | archive ... ]
1105*906afcb8SAndy Fiddaman		Read the named package archive(s). Must be run from the
1106*906afcb8SAndy Fiddaman		package root directory. Archives are searched for in .
1107*906afcb8SAndy Fiddaman		and lib/package/tgz. Each package is read only once. The
1108*906afcb8SAndy Fiddaman		file lib/package/tgz/package[.type].tim tracks the read time.
1109*906afcb8SAndy Fiddaman		See the write action for archive naming conventions. Text
1110*906afcb8SAndy Fiddaman		file archive member are assumed to be ASCII or UTF-8 encoded.
1111*906afcb8SAndy Fiddaman	regress diff(1) the current and previous package test results.
1112*906afcb8SAndy Fiddaman	release [ [CC]YY-MM-DD [ [cc]yy-mm-dd ] ] [ package ]
1113*906afcb8SAndy Fiddaman		Display recent changes since [CC]YY-MM-DD (up to [cc]yy-mm-dd),
1114*906afcb8SAndy Fiddaman		where - means lowest (or highest.) If no dates are specified
1115*906afcb8SAndy Fiddaman		then changes for the last 4 months are listed. PACKAGE may
1116*906afcb8SAndy Fiddaman		be a package or component name.
1117*906afcb8SAndy Fiddaman	remove PACKAGE
1118*906afcb8SAndy Fiddaman		Remove files installed for PACKAGE.
1119*906afcb8SAndy Fiddaman	results [ path ] [ old ] [ make | test ]
1120*906afcb8SAndy Fiddaman		List results and interesting messages captured by the most
1121*906afcb8SAndy Fiddaman		recent make (default), test or write action. old specifies the
1122*906afcb8SAndy Fiddaman		previous results, if any (current and previous results are
1123*906afcb8SAndy Fiddaman		retained.) $HOME/.pkgresults, if it exists, must contain an
1124*906afcb8SAndy Fiddaman		egrep(1) expression of result lines to be ignored. failed lists
1125*906afcb8SAndy Fiddaman		failures only and path lists the results file path only.
1126*906afcb8SAndy Fiddaman	setup [ beta ] [ binary ] [ source ] [ ARCHITECTURE ... ] [ URL ] [ PACKAGE ... ]
1127*906afcb8SAndy Fiddaman		The action initializes the current directory as a package root,
1128*906afcb8SAndy Fiddaman		runs the update action to download new or out of date packages,
1129*906afcb8SAndy Fiddaman		and runs the read action on those packages. If \"flat\" is
1130*906afcb8SAndy Fiddaman		specified then the \$INSTALLROOT { bin fun include lib }
1131*906afcb8SAndy Fiddaman		directories are linked to the same directories in the package
1132*906afcb8SAndy Fiddaman		root. Only one architecture may be flat. See the update and
1133*906afcb8SAndy Fiddaman		read actions for argument details.
1134*906afcb8SAndy Fiddaman	test [ PACKAGE ]
1135*906afcb8SAndy Fiddaman		Run the regression tests for PACKAGE. If the standard output
1136*906afcb8SAndy Fiddaman		is a terminal then the output is also captured in
1137*906afcb8SAndy Fiddaman		\$INSTALLROOT/lib/package/gen/test.out. In general a package
1138*906afcb8SAndy Fiddaman		must be made before it can be tested. Components tested with
1139*906afcb8SAndy Fiddaman		the \bregress\b(1) command require \bksh93\b. If only is
1140*906afcb8SAndy Fiddaman		also specified then only the listed package components are
1141*906afcb8SAndy Fiddaman		tested, otherwise the closure of the components is tested.
1142*906afcb8SAndy Fiddaman	update [ beta ] [ binary ] [ source ] [ ARCHITECTURE ... ] [ URL ] [ PACKAGE ... ]
1143*906afcb8SAndy Fiddaman		Download the latest release of the selected and required
1144*906afcb8SAndy Fiddaman		packages from URL (e.g.,
1145*906afcb8SAndy Fiddaman		http://www.research.att.com/sw/download) into the directory
1146*906afcb8SAndy Fiddaman		\$PACKAGEROOT/lib/package/tgz. beta acesses beta packages;
1147*906afcb8SAndy Fiddaman		download these at your own risk. If ARCHITECTURE is omitted
1148*906afcb8SAndy Fiddaman		then only architectures already present in the tgz directory
1149*906afcb8SAndy Fiddaman		will be downloaded. If ARCHITECTURE is - then all posted
1150*906afcb8SAndy Fiddaman		architectures will be downloaded. If URL matches *.url then
1151*906afcb8SAndy Fiddaman		it is interpreted as a file containing shell variable
1152*906afcb8SAndy Fiddaman		assignments for url, authorize and password. If URL is
1153*906afcb8SAndy Fiddaman		omitted then the definitions for url, authorize and password
1154*906afcb8SAndy Fiddaman		in \$PACKAGEROOT/lib/package/tgz/$default_url, if it exists,
1155*906afcb8SAndy Fiddaman		are used. If \$PACKAGEROOT/lib/package/tgz/$default_url does
1156*906afcb8SAndy Fiddaman		not exist then it is initialized with the current url,
1157*906afcb8SAndy Fiddaman		authorize and password values and read permission for the
1158*906afcb8SAndy Fiddaman		current user only. If PACKAGE is omitted then only
1159*906afcb8SAndy Fiddaman		packages already present in the tgz directory will be
1160*906afcb8SAndy Fiddaman		downloaded. If PACKAGE is - then all posted packages will be
1161*906afcb8SAndy Fiddaman		downloaded. If source and binary are omitted then both source
1162*906afcb8SAndy Fiddaman		and binary packages will be downloaded. If \bonly\b is
1163*906afcb8SAndy Fiddaman		specified then only the named packages are updated; otherwise
1164*906afcb8SAndy Fiddaman		the closure of required packages is updated. This action
1165*906afcb8SAndy Fiddaman		requires wget(1), lynx(1), curl(1) or a shell that supports
1166*906afcb8SAndy Fiddaman		io to /dev/tcp/HOST/PORT.
1167*906afcb8SAndy Fiddaman   	use [ uid | PACKAGE | . [ 32 | 64 ] | 32 | 64 | - ] [ COMMAND ... ]
1168*906afcb8SAndy Fiddaman   		Run COMMAND or an interactive shell if COMMAND is omitted, with
1169*906afcb8SAndy Fiddaman		the environment initialized for using the package (can you say
1170*906afcb8SAndy Fiddaman		shared library without cussing?) If uid or PACKAGE or . is
1171*906afcb8SAndy Fiddaman		specified then it is used to determine a \$PACKAGEROOT,
1172*906afcb8SAndy Fiddaman		possibly different from the current directory. For example, to
1173*906afcb8SAndy Fiddaman		try out bozo's package: \"package use bozo\". In this case the
1174*906afcb8SAndy Fiddaman		command may be run from any directory. If the file
1175*906afcb8SAndy Fiddaman		\$INSTALLROOT/lib/package/profile is readable then it is
1176*906afcb8SAndy Fiddaman		sourced to initialize the environment. 32 or 64 implies
1177*906afcb8SAndy Fiddaman		\$PACKAGEROOT of . and specifies the target architecture word
1178*906afcb8SAndy Fiddaman		size (which may be silently ignored.)
1179*906afcb8SAndy Fiddaman	verify [ PACKAGE ]
1180*906afcb8SAndy Fiddaman		Verify installed binary files against the checksum files in
1181*906afcb8SAndy Fiddaman		\$INSTALLROOT/lib/package/gen/*.sum. The checksum files contain
1182*906afcb8SAndy Fiddaman		mode, user and group information. If the checksum matches
1183*906afcb8SAndy Fiddaman		for a given file then the mode, user and group are changed
1184*906afcb8SAndy Fiddaman		as necessary to match the checksum entry. A warning is printed
1185*906afcb8SAndy Fiddaman		on the standard error for each mismatch. Requires the ast
1186*906afcb8SAndy Fiddaman		package cksum(1) command.
1187*906afcb8SAndy Fiddaman	view
1188*906afcb8SAndy Fiddaman		Initialize the architecture specific viewpath hierarchy. The
1189*906afcb8SAndy Fiddaman		make action implicitly calls this action. If \"flat\" is specified
1190*906afcb8SAndy Fiddaman		then the \$INSTALLROOT { bin fun include lib } directories are
1191*906afcb8SAndy Fiddaman		linked to the same directories in the package root. Only one
1192*906afcb8SAndy Fiddaman		architecture may be flat.
1193*906afcb8SAndy Fiddaman	write [closure] [cyg|exp|lcl|pkg|rpm|tgz|tst] [base|delta]
1194*906afcb8SAndy Fiddaman			[binary|runtime|source] PACKAGE
1195*906afcb8SAndy Fiddaman		Write a package archive for PACKAGE. All work is done in the
1196*906afcb8SAndy Fiddaman		\$PACKAGEROOT/lib/package directory. FORMAT-specific files
1197*906afcb8SAndy Fiddaman		are placed in the FORMAT subdirectory. A PACKAGE[.TYPE].tim
1198*906afcb8SAndy Fiddaman		file in this directory tracksthe write time and prevents a
1199*906afcb8SAndy Fiddaman		package from being read in the same root it was written. If
1200*906afcb8SAndy Fiddaman		more than one file is generated for a particular FORMAT then
1201*906afcb8SAndy Fiddaman		those files are placed in the FORMAT/PACKAGE subdirectory.
1202*906afcb8SAndy Fiddaman		File names in the FORMAT subdirectory will contain the package
1203*906afcb8SAndy Fiddaman		name, a YYYY-MM-DD date, and for binary packages, HOSTTYPE.
1204*906afcb8SAndy Fiddaman		If PACKAGE is omitted then an ordered list of previously
1205*906afcb8SAndy Fiddaman		written packages is generated. If \"only\" is specified then
1206*906afcb8SAndy Fiddaman		only the named packages will be written; otherwise
1207*906afcb8SAndy Fiddaman		prerequisite packages are written first. Package components
1208*906afcb8SAndy Fiddaman		must be listed in PACKAGE.pkg. FORMAT may be one of:
1209*906afcb8SAndy Fiddaman		   cyg  generate a cygwin package
1210*906afcb8SAndy Fiddaman		   exp  generate an exptools(1) maintainer source archive
1211*906afcb8SAndy Fiddaman		        and NPD file in the exp subdirectory, suitable for
1212*906afcb8SAndy Fiddaman			expmake(1); support files are placed in the
1213*906afcb8SAndy Fiddaman			exp/PACKAGE subdirectory
1214*906afcb8SAndy Fiddaman		   lcl	generate a package archive or delta in the lcl
1215*906afcb8SAndy Fiddaman			subdirectory, suitable for restoration into the
1216*906afcb8SAndy Fiddaman			primary source tree (no source licence annotation)
1217*906afcb8SAndy Fiddaman		   pkg	generate a pkgmk(1) package, suitable for pkgadd(1)
1218*906afcb8SAndy Fiddaman		   rpm  generate an rpm(1) package
1219*906afcb8SAndy Fiddaman		   tgz  generate a gzip(1) tar(1) package archive; this is
1220*906afcb8SAndy Fiddaman			the default
1221*906afcb8SAndy Fiddaman		   tst  generate tgz FORMAT package archive in the tst
1222*906afcb8SAndy Fiddaman			subdirectory; version state files are not updated
1223*906afcb8SAndy Fiddaman		The package type must be one of source, binary or runtime.
1224*906afcb8SAndy Fiddaman		A source package contains the source needed to build the
1225*906afcb8SAndy Fiddaman		corresponding binary package. A binary package includes the
1226*906afcb8SAndy Fiddaman		libraries and headers needed for compiling and linking
1227*906afcb8SAndy Fiddaman		against the public interfaces. A runtime package contains
1228*906afcb8SAndy Fiddaman		the commands and required dynamic libraries.  A package may
1229*906afcb8SAndy Fiddaman		be either a base or delta. A base package contains a
1230*906afcb8SAndy Fiddaman		complete copy of all components.  A delta package contains
1231*906afcb8SAndy Fiddaman		only changes from a previous base package. Delta recipients
1232*906afcb8SAndy Fiddaman		must have the ast pax(1) command (in the ast-base package.)
1233*906afcb8SAndy Fiddaman		If neither base nor delta is specified, then the current
1234*906afcb8SAndy Fiddaman		base is overwritten if there are no deltas referring to the
1235*906afcb8SAndy Fiddaman		current base. Only the tgz and lcl formats support delta.
1236*906afcb8SAndy Fiddaman		If base is specified then a new base and two delta archives
1237*906afcb8SAndy Fiddaman		are generated: one delta to generate the new base from the
1238*906afcb8SAndy Fiddaman		old, and one delta to generate the old base from the new;
1239*906afcb8SAndy Fiddaman		the old base is then removed. If delta is specified then a
1240*906afcb8SAndy Fiddaman		new delta referring to the current base is written.
1241*906afcb8SAndy Fiddaman		package.pkg may reference other packages. By default a
1242*906afcb8SAndy Fiddaman		pointer to those packages is written. The recipient package
1243*906afcb8SAndy Fiddaman		read will then check that all required packages have been
1244*906afcb8SAndy Fiddaman		downloaded. If closure is specified then the components for
1245*906afcb8SAndy Fiddaman		all package references are included in the generated
1246*906afcb8SAndy Fiddaman		package.  This may be useful for lcl and versioning.  All
1247*906afcb8SAndy Fiddaman		formats but lcl annotate each source file (not already
1248*906afcb8SAndy Fiddaman		annotated) with a license comment as it is written to the
1249*906afcb8SAndy Fiddaman		package archive using proto(1).
1250*906afcb8SAndy Fiddaman   name=value:
1251*906afcb8SAndy Fiddaman	variable definition: typically CC=cc or CCFLAGS=-g."
1252*906afcb8SAndy Fiddaman			;;
1253*906afcb8SAndy Fiddaman		esac
1254*906afcb8SAndy Fiddaman		exit $code
1255*906afcb8SAndy Fiddaman		;;
1256*906afcb8SAndy Fiddaman	*=*)	set DEFAULT host type "$@"
1257*906afcb8SAndy Fiddaman		;;
1258*906afcb8SAndy Fiddaman	*)	echo "Usage: $command [ options ] [ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]" >&2
1259*906afcb8SAndy Fiddaman		exit 2
1260*906afcb8SAndy Fiddaman		;;
1261*906afcb8SAndy Fiddaman	esac
1262*906afcb8SAndy Fiddaman	global="$global $1"
1263*906afcb8SAndy Fiddaman	shift
1264*906afcb8SAndy Fiddamandone
1265*906afcb8SAndy Fiddaman
1266*906afcb8SAndy Fiddaman# gather HOSTTYPE *,* options
1267*906afcb8SAndy Fiddaman# 	,*cc*,-*,...	set CC and CCFLAGS
1268*906afcb8SAndy Fiddaman
1269*906afcb8SAndy Fiddamanhostopts()
1270*906afcb8SAndy Fiddaman{
1271*906afcb8SAndy Fiddaman	_ifs_=$IFS
1272*906afcb8SAndy Fiddaman	IFS=,
1273*906afcb8SAndy Fiddaman	set '' $HOSTTYPE
1274*906afcb8SAndy Fiddaman	IFS=$_ifs_
1275*906afcb8SAndy Fiddaman	shift
1276*906afcb8SAndy Fiddaman	while	:
1277*906afcb8SAndy Fiddaman	do	case $# in
1278*906afcb8SAndy Fiddaman		0|1)	break ;;
1279*906afcb8SAndy Fiddaman		esac
1280*906afcb8SAndy Fiddaman		shift
1281*906afcb8SAndy Fiddaman		case $1 in
1282*906afcb8SAndy Fiddaman		*cc*)	CC=$1
1283*906afcb8SAndy Fiddaman			while	:
1284*906afcb8SAndy Fiddaman			do	case $# in
1285*906afcb8SAndy Fiddaman				0|1)	break ;;
1286*906afcb8SAndy Fiddaman				esac
1287*906afcb8SAndy Fiddaman				case $2 in
1288*906afcb8SAndy Fiddaman				-*)	case $assign_CCFLAGS in
1289*906afcb8SAndy Fiddaman					?*)	assign_CCFLAGS="$assign_CCFLAGS " ;;
1290*906afcb8SAndy Fiddaman					esac
1291*906afcb8SAndy Fiddaman					assign_CCFLAGS="$assign_CCFLAGS$2"
1292*906afcb8SAndy Fiddaman					shift
1293*906afcb8SAndy Fiddaman					;;
1294*906afcb8SAndy Fiddaman				*)	break
1295*906afcb8SAndy Fiddaman					;;
1296*906afcb8SAndy Fiddaman				esac
1297*906afcb8SAndy Fiddaman			done
1298*906afcb8SAndy Fiddaman			;;
1299*906afcb8SAndy Fiddaman		esac
1300*906afcb8SAndy Fiddaman	done
1301*906afcb8SAndy Fiddaman}
1302*906afcb8SAndy Fiddaman
1303*906afcb8SAndy Fiddaman# collect command line targets and definitions
1304*906afcb8SAndy Fiddaman
1305*906afcb8SAndy Fiddamancase $_PACKAGE_HOSTTYPE_ in
1306*906afcb8SAndy Fiddaman?*)	HOSTTYPE=$_PACKAGE_HOSTTYPE_
1307*906afcb8SAndy Fiddaman	KEEP_HOSTTYPE=1
1308*906afcb8SAndy Fiddaman	;;
1309*906afcb8SAndy Fiddaman*)	KEEP_HOSTTYPE=0
1310*906afcb8SAndy Fiddaman	;;
1311*906afcb8SAndy Fiddamanesac
1312*906afcb8SAndy FiddamanKEEP_PACKAGEROOT=0
1313*906afcb8SAndy FiddamanKEEP_SHELL=0
1314*906afcb8SAndy FiddamanUSER_VPATH=
1315*906afcb8SAndy Fiddamanargs=
1316*906afcb8SAndy Fiddamanassign=
1317*906afcb8SAndy Fiddamanassign_CCFLAGS=
1318*906afcb8SAndy Fiddamanfor i
1319*906afcb8SAndy Fiddamando	case $i in
1320*906afcb8SAndy Fiddaman	*:*=*)	args="$args $i"
1321*906afcb8SAndy Fiddaman		continue
1322*906afcb8SAndy Fiddaman		;;
1323*906afcb8SAndy Fiddaman	*=*)	eval `echo ' ' "$i" | sed 's,^[ 	]*\([^=]*\)=\(.*\),n=\1 v='\''\2'\'','`
1324*906afcb8SAndy Fiddaman		;;
1325*906afcb8SAndy Fiddaman	esac
1326*906afcb8SAndy Fiddaman	case $i in
1327*906afcb8SAndy Fiddaman	AR=*|LD=*|NM=*)
1328*906afcb8SAndy Fiddaman		assign="$assign $n='$v'"
1329*906afcb8SAndy Fiddaman		eval $n='$'v
1330*906afcb8SAndy Fiddaman		;;
1331*906afcb8SAndy Fiddaman	CC=*)	eval $n='$'v
1332*906afcb8SAndy Fiddaman		;;
1333*906afcb8SAndy Fiddaman	CCFLAGS=*)
1334*906afcb8SAndy Fiddaman		eval $n='$'v
1335*906afcb8SAndy Fiddaman		assign_CCFLAGS="CCFLAGS=\"\$CCFLAGS\""
1336*906afcb8SAndy Fiddaman		;;
1337*906afcb8SAndy Fiddaman	HOSTTYPE=*)
1338*906afcb8SAndy Fiddaman		eval $n='$'v
1339*906afcb8SAndy Fiddaman		case $HOSTTYPE in
1340*906afcb8SAndy Fiddaman		?*)	KEEP_HOSTTYPE=1 ;;
1341*906afcb8SAndy Fiddaman		esac
1342*906afcb8SAndy Fiddaman		;;
1343*906afcb8SAndy Fiddaman	HURL=*)	eval $n='$'v
1344*906afcb8SAndy Fiddaman		;;
1345*906afcb8SAndy Fiddaman	PACKAGEROOT=*)
1346*906afcb8SAndy Fiddaman		eval $n='$'v
1347*906afcb8SAndy Fiddaman		case $PACKAGEROOT in
1348*906afcb8SAndy Fiddaman		?*)	KEEP_PACKAGEROOT=1 ;;
1349*906afcb8SAndy Fiddaman		esac
1350*906afcb8SAndy Fiddaman		;;
1351*906afcb8SAndy Fiddaman	SHELL=*)eval $n='$'v
1352*906afcb8SAndy Fiddaman		case $SHELL in
1353*906afcb8SAndy Fiddaman		?*)	KEEP_SHELL=1 ;;
1354*906afcb8SAndy Fiddaman		esac
1355*906afcb8SAndy Fiddaman		;;
1356*906afcb8SAndy Fiddaman	TAR=*)	eval $n='$'v
1357*906afcb8SAndy Fiddaman		;;
1358*906afcb8SAndy Fiddaman	TARFLAGS=*)
1359*906afcb8SAndy Fiddaman		eval $n='$'v
1360*906afcb8SAndy Fiddaman		;;
1361*906afcb8SAndy Fiddaman	VPATH=*)eval USER_$n='$'v
1362*906afcb8SAndy Fiddaman		;;
1363*906afcb8SAndy Fiddaman	'debug=1')
1364*906afcb8SAndy Fiddaman		makeflags="$makeflags --debug-symbols"
1365*906afcb8SAndy Fiddaman		;;
1366*906afcb8SAndy Fiddaman	'strip=1')
1367*906afcb8SAndy Fiddaman		makeflags="$makeflags --strip-symbols"
1368*906afcb8SAndy Fiddaman		;;
1369*906afcb8SAndy Fiddaman	*=*)	assign="$assign $n='$v'"
1370*906afcb8SAndy Fiddaman		;;
1371*906afcb8SAndy Fiddaman	*)	args="$args $i"
1372*906afcb8SAndy Fiddaman		;;
1373*906afcb8SAndy Fiddaman	esac
1374*906afcb8SAndy Fiddamandone
1375*906afcb8SAndy Fiddamancase $HOSTTYPE in
1376*906afcb8SAndy Fiddaman*,*)	hostopts $HOSTTYPE ;;
1377*906afcb8SAndy Fiddamanesac
1378*906afcb8SAndy Fiddamancase $assign_CCFLAGS in
1379*906afcb8SAndy Fiddaman?*)	assign="$assign $assign_CCFLAGS"
1380*906afcb8SAndy Fiddamanesac
1381*906afcb8SAndy Fiddamancase $CC in
1382*906afcb8SAndy Fiddaman''|cc)	;;
1383*906afcb8SAndy Fiddaman*)	export CC ;;
1384*906afcb8SAndy Fiddamanesac
1385*906afcb8SAndy Fiddaman
1386*906afcb8SAndy Fiddaman# grab action specific args
1387*906afcb8SAndy Fiddaman
1388*906afcb8SAndy Fiddamancase $action in
1389*906afcb8SAndy Fiddamanadmin)	while	:
1390*906afcb8SAndy Fiddaman	do	case $# in
1391*906afcb8SAndy Fiddaman		0)	set list
1392*906afcb8SAndy Fiddaman			break
1393*906afcb8SAndy Fiddaman			;;
1394*906afcb8SAndy Fiddaman		esac
1395*906afcb8SAndy Fiddaman		case $1 in
1396*906afcb8SAndy Fiddaman		all)	admin_all=1
1397*906afcb8SAndy Fiddaman			;;
1398*906afcb8SAndy Fiddaman		db)	case $# in
1399*906afcb8SAndy Fiddaman			1)	echo $command: $action: $1: db file argument expected >&2
1400*906afcb8SAndy Fiddaman				exit 1
1401*906afcb8SAndy Fiddaman				;;
1402*906afcb8SAndy Fiddaman			esac
1403*906afcb8SAndy Fiddaman			shift
1404*906afcb8SAndy Fiddaman			admin_db=$1
1405*906afcb8SAndy Fiddaman			;;
1406*906afcb8SAndy Fiddaman		on)	case $# in
1407*906afcb8SAndy Fiddaman			1)	echo $command: $action: $1: host pattern argument expected >&2
1408*906afcb8SAndy Fiddaman				exit 1
1409*906afcb8SAndy Fiddaman				;;
1410*906afcb8SAndy Fiddaman			esac
1411*906afcb8SAndy Fiddaman			shift
1412*906afcb8SAndy Fiddaman			admin_on=$1
1413*906afcb8SAndy Fiddaman			;;
1414*906afcb8SAndy Fiddaman		*)	break
1415*906afcb8SAndy Fiddaman			;;
1416*906afcb8SAndy Fiddaman		esac
1417*906afcb8SAndy Fiddaman		shift
1418*906afcb8SAndy Fiddaman	done
1419*906afcb8SAndy Fiddaman	admin_action=$1
1420*906afcb8SAndy Fiddaman	admin_args=$*
1421*906afcb8SAndy Fiddaman	for i
1422*906afcb8SAndy Fiddaman	do	case $i in
1423*906afcb8SAndy Fiddaman		debug|environment|force|never|only|quiet|show|DEBUG)
1424*906afcb8SAndy Fiddaman			;;
1425*906afcb8SAndy Fiddaman		*)	admin_action=$i
1426*906afcb8SAndy Fiddaman			break
1427*906afcb8SAndy Fiddaman			;;
1428*906afcb8SAndy Fiddaman		esac
1429*906afcb8SAndy Fiddaman	done
1430*906afcb8SAndy Fiddaman	;;
1431*906afcb8SAndy Fiddamansetup)	PACKAGEROOT=${PWD:-`pwd`}
1432*906afcb8SAndy Fiddaman	export PACKAGEROOT
1433*906afcb8SAndy Fiddaman	KEEP_PACKAGEROOT=1
1434*906afcb8SAndy Fiddaman	;;
1435*906afcb8SAndy Fiddamanuse)	case $1 in
1436*906afcb8SAndy Fiddaman	.|32|64)case $1 in
1437*906afcb8SAndy Fiddaman		32|64)	bit=$1 ;;
1438*906afcb8SAndy Fiddaman		esac
1439*906afcb8SAndy Fiddaman		shift
1440*906afcb8SAndy Fiddaman
1441*906afcb8SAndy Fiddaman		# HOSTTYPE specific setup
1442*906afcb8SAndy Fiddaman
1443*906afcb8SAndy Fiddaman		case $HOSTTYPE in
1444*906afcb8SAndy Fiddaman		win32.*)sys=uwin
1445*906afcb8SAndy Fiddaman			wow=`uname -i`
1446*906afcb8SAndy Fiddaman			case $bit in
1447*906afcb8SAndy Fiddaman			32)	case $HOSTTYPE in
1448*906afcb8SAndy Fiddaman				*-64)	HOSTTYPE=${HOSTTYPE%-64} ;;
1449*906afcb8SAndy Fiddaman				esac
1450*906afcb8SAndy Fiddaman				case $wow in
1451*906afcb8SAndy Fiddaman				*/32)	;;
1452*906afcb8SAndy Fiddaman				*)	vpath / /$bit ;;
1453*906afcb8SAndy Fiddaman				esac
1454*906afcb8SAndy Fiddaman				;;
1455*906afcb8SAndy Fiddaman			64)	case $HOSTTYPE in
1456*906afcb8SAndy Fiddaman				*-64)	;;
1457*906afcb8SAndy Fiddaman				*)	HOSTTYPE=$HOSTTYPE-64 ;;
1458*906afcb8SAndy Fiddaman				esac
1459*906afcb8SAndy Fiddaman				case $wow in
1460*906afcb8SAndy Fiddaman				*/32)	echo $command: cannot build $bit-bit on $wow $sys >&2; exit 2 ;;
1461*906afcb8SAndy Fiddaman				*)	vpath / /$bit ;;
1462*906afcb8SAndy Fiddaman				esac
1463*906afcb8SAndy Fiddaman				;;
1464*906afcb8SAndy Fiddaman			esac
1465*906afcb8SAndy Fiddaman			case $bit in
1466*906afcb8SAndy Fiddaman			'')	PS1="($sys) " ;;
1467*906afcb8SAndy Fiddaman			*)	PS1="($sys-$bit) " ;;
1468*906afcb8SAndy Fiddaman			esac
1469*906afcb8SAndy Fiddaman
1470*906afcb8SAndy Fiddaman			$exec umask 002
1471*906afcb8SAndy Fiddaman			$exec unset MAKESKIP
1472*906afcb8SAndy Fiddaman
1473*906afcb8SAndy Fiddaman			$exec export P=$PWD
1474*906afcb8SAndy Fiddaman			$exec export A=$P/arch/$HOSTTYPE
1475*906afcb8SAndy Fiddaman
1476*906afcb8SAndy Fiddaman			$exec export CDPATH=:..:$A/src/cmd:$A/src/lib:$A/src/uwin:$P/lib/package
1477*906afcb8SAndy Fiddaman			$exec export INSTALLROOT=$A
1478*906afcb8SAndy Fiddaman			$exec export PACKAGEROOT=$P
1479*906afcb8SAndy Fiddaman			$exec export PATH=$A/bin:$P/bin:$PATH
1480*906afcb8SAndy Fiddaman			$exec export PS1="$PS1"
1481*906afcb8SAndy Fiddaman			$exec export VPATH=$A:$P
1482*906afcb8SAndy Fiddaman			$exec export nativepp=/usr/lib
1483*906afcb8SAndy Fiddaman
1484*906afcb8SAndy Fiddaman			if	test '' != "$INSTALLROOT" -a -d $INSTALLROOT/include/ast
1485*906afcb8SAndy Fiddaman			then	$exec export PACKAGE_ast=$INSTALLROOT
1486*906afcb8SAndy Fiddaman			elif	test -d ${PWD%/*}/ast/arch/$HOSTTYPE
1487*906afcb8SAndy Fiddaman			then	$exec export PACKAGE_ast=${PWD%/*}/ast/arch/$HOSTTYPE
1488*906afcb8SAndy Fiddaman			fi
1489*906afcb8SAndy Fiddaman
1490*906afcb8SAndy Fiddaman			# run the command
1491*906afcb8SAndy Fiddaman
1492*906afcb8SAndy Fiddaman			case $# in
1493*906afcb8SAndy Fiddaman			0)	case $show in
1494*906afcb8SAndy Fiddaman				':')	$exec exec $SHELL ;;
1495*906afcb8SAndy Fiddaman				esac
1496*906afcb8SAndy Fiddaman				;;
1497*906afcb8SAndy Fiddaman			*)	$exec exec $SHELL -c "$@"
1498*906afcb8SAndy Fiddaman				;;
1499*906afcb8SAndy Fiddaman			esac
1500*906afcb8SAndy Fiddaman			exit
1501*906afcb8SAndy Fiddaman			;;
1502*906afcb8SAndy Fiddaman		esac
1503*906afcb8SAndy Fiddaman		PACKAGEROOT=${PWD:-`pwd`}
1504*906afcb8SAndy Fiddaman		$show export PACKAGEROOT
1505*906afcb8SAndy Fiddaman	esac
1506*906afcb8SAndy Fiddaman	;;
1507*906afcb8SAndy Fiddamanesac
1508*906afcb8SAndy Fiddaman
1509*906afcb8SAndy Fiddaman# true if arg is a valid PACKAGEROOT
1510*906afcb8SAndy Fiddaman
1511*906afcb8SAndy Fiddamanpackageroot() # dir
1512*906afcb8SAndy Fiddaman{
1513*906afcb8SAndy Fiddaman	test -d $1/lib/$command -o -x $1/bin/$command
1514*906afcb8SAndy Fiddaman}
1515*906afcb8SAndy Fiddaman
1516*906afcb8SAndy Fiddaman# true if arg is executable
1517*906afcb8SAndy Fiddaman
1518*906afcb8SAndy Fiddamanexecutable() # [!] command
1519*906afcb8SAndy Fiddaman{
1520*906afcb8SAndy Fiddaman	case $1 in
1521*906afcb8SAndy Fiddaman	'!')	test ! -x "$2" -a ! -x "$2.exe"; return ;;
1522*906afcb8SAndy Fiddaman	*)	test -x "$1" -o -x "$1.exe"; return ;;
1523*906afcb8SAndy Fiddaman	esac
1524*906afcb8SAndy Fiddaman}
1525*906afcb8SAndy Fiddaman
1526*906afcb8SAndy Fiddaman# initialize SHELLMAGIC
1527*906afcb8SAndy Fiddaman# tangible proof of cygwin's disdain for unix (well, this and execrate)
1528*906afcb8SAndy Fiddaman
1529*906afcb8SAndy Fiddamanshellmagic()
1530*906afcb8SAndy Fiddaman{
1531*906afcb8SAndy Fiddaman	case $SHELLMAGIC in
1532*906afcb8SAndy Fiddaman	'')	;;
1533*906afcb8SAndy Fiddaman	-)	if	test -f /emx/bin/sh.exe
1534*906afcb8SAndy Fiddaman		then	SHELLMAGIC='#!/emx/bin/sh.exe'$nl
1535*906afcb8SAndy Fiddaman		elif	test -f /bin/env.exe
1536*906afcb8SAndy Fiddaman		then	SHELLMAGIC='#!/bin/env sh'$nl
1537*906afcb8SAndy Fiddaman		else	SHELLMAGIC=
1538*906afcb8SAndy Fiddaman		fi
1539*906afcb8SAndy Fiddaman		;;
1540*906afcb8SAndy Fiddaman	esac
1541*906afcb8SAndy Fiddaman}
1542*906afcb8SAndy Fiddaman
1543*906afcb8SAndy Fiddaman# true if arg is executable command on $PATH
1544*906afcb8SAndy Fiddaman
1545*906afcb8SAndy Fiddamanonpath() # command
1546*906afcb8SAndy Fiddaman{
1547*906afcb8SAndy Fiddaman	_onpath_b=$1
1548*906afcb8SAndy Fiddaman	case $_onpath_b in
1549*906afcb8SAndy Fiddaman	/*)	if	executable $_onpath_b
1550*906afcb8SAndy Fiddaman		then	_onpath_=$_onpath_b
1551*906afcb8SAndy Fiddaman			return 0
1552*906afcb8SAndy Fiddaman		fi
1553*906afcb8SAndy Fiddaman		return 1
1554*906afcb8SAndy Fiddaman		;;
1555*906afcb8SAndy Fiddaman	esac
1556*906afcb8SAndy Fiddaman	IFS=':'
1557*906afcb8SAndy Fiddaman	set '' $PATH
1558*906afcb8SAndy Fiddaman	IFS=$ifs
1559*906afcb8SAndy Fiddaman	shift
1560*906afcb8SAndy Fiddaman	for _onpath_d
1561*906afcb8SAndy Fiddaman	do	case $_onpath_d in
1562*906afcb8SAndy Fiddaman		'')	_onpath_d=. ;;
1563*906afcb8SAndy Fiddaman		esac
1564*906afcb8SAndy Fiddaman		if	executable "$_onpath_d/$_onpath_b"
1565*906afcb8SAndy Fiddaman		then	_onpath_=$_onpath_d/$_onpath_b
1566*906afcb8SAndy Fiddaman			return 0
1567*906afcb8SAndy Fiddaman		fi
1568*906afcb8SAndy Fiddaman	done
1569*906afcb8SAndy Fiddaman	return 1
1570*906afcb8SAndy Fiddaman}
1571*906afcb8SAndy Fiddaman
1572*906afcb8SAndy Fiddaman# true if no nmake or nmake not from AT&T or nmake too old
1573*906afcb8SAndy Fiddaman
1574*906afcb8SAndy Fiddamannonmake() # nmake
1575*906afcb8SAndy Fiddaman{
1576*906afcb8SAndy Fiddaman	_nonmake_version=`( $1 -n -f - 'print $(MAKEVERSION:@/.*AT&T.* //:/-//G:@/.* .*/19960101/)' . ) </dev/null 2>/dev/null || echo 19840919`
1577*906afcb8SAndy Fiddaman	if	test $_nonmake_version -lt 20001031
1578*906afcb8SAndy Fiddaman	then	return 0
1579*906afcb8SAndy Fiddaman	fi
1580*906afcb8SAndy Fiddaman	return 1
1581*906afcb8SAndy Fiddaman}
1582*906afcb8SAndy Fiddaman
1583*906afcb8SAndy Fiddaman# determine local host attributes
1584*906afcb8SAndy Fiddaman
1585*906afcb8SAndy Fiddamanhostinfo() # attribute ...
1586*906afcb8SAndy Fiddaman{
1587*906afcb8SAndy Fiddaman	case $DEBUG in
1588*906afcb8SAndy Fiddaman	1)	set -x ;;
1589*906afcb8SAndy Fiddaman	esac
1590*906afcb8SAndy Fiddaman	map=
1591*906afcb8SAndy Fiddaman	something=
1592*906afcb8SAndy Fiddaman	path=$PATH
1593*906afcb8SAndy Fiddaman	for i in $ccs
1594*906afcb8SAndy Fiddaman	do	PATH=$PATH:$i
1595*906afcb8SAndy Fiddaman	done
1596*906afcb8SAndy Fiddaman	for i in $use
1597*906afcb8SAndy Fiddaman	do	for j in $org
1598*906afcb8SAndy Fiddaman		do	PATH=$PATH:$i/$j/bin
1599*906afcb8SAndy Fiddaman		done
1600*906afcb8SAndy Fiddaman		PATH=$PATH:$i/bin
1601*906afcb8SAndy Fiddaman	done
1602*906afcb8SAndy Fiddaman	# LD_LIBRARY_PATH may be out of sync with PATH here
1603*906afcb8SAndy Fiddaman	case $SED in
1604*906afcb8SAndy Fiddaman	'')	SED=sed
1605*906afcb8SAndy Fiddaman		$SED 1d < /dev/null > /dev/null 2>&1 ||
1606*906afcb8SAndy Fiddaman		for dir in /bin /usr/bin
1607*906afcb8SAndy Fiddaman		do	if	test -x $dir/$SED
1608*906afcb8SAndy Fiddaman			then	SED=$dir/$SED
1609*906afcb8SAndy Fiddaman				break
1610*906afcb8SAndy Fiddaman			fi
1611*906afcb8SAndy Fiddaman		done
1612*906afcb8SAndy Fiddaman		TR=tr
1613*906afcb8SAndy Fiddaman		$TR < /dev/null > /dev/null 2>&1 ||
1614*906afcb8SAndy Fiddaman		for dir in /bin /usr/bin
1615*906afcb8SAndy Fiddaman		do	if	test -x $dir/$TR
1616*906afcb8SAndy Fiddaman			then	TR=$dir/$TR
1617*906afcb8SAndy Fiddaman				break
1618*906afcb8SAndy Fiddaman			fi
1619*906afcb8SAndy Fiddaman		done
1620*906afcb8SAndy Fiddaman		;;
1621*906afcb8SAndy Fiddaman	esac
1622*906afcb8SAndy Fiddaman	case $PACKAGE_PATH in
1623*906afcb8SAndy Fiddaman	?*)	for i in `echo $PACKAGE_PATH | $SED 's,:, ,g'`
1624*906afcb8SAndy Fiddaman		do	PATH=$PATH:$i/bin
1625*906afcb8SAndy Fiddaman		done
1626*906afcb8SAndy Fiddaman		;;
1627*906afcb8SAndy Fiddaman	esac
1628*906afcb8SAndy Fiddaman
1629*906afcb8SAndy Fiddaman	# validate the args
1630*906afcb8SAndy Fiddaman
1631*906afcb8SAndy Fiddaman	canon=
1632*906afcb8SAndy Fiddaman	cc=$CC
1633*906afcb8SAndy Fiddaman	for info
1634*906afcb8SAndy Fiddaman	do	case $canon in
1635*906afcb8SAndy Fiddaman		-)	canon=$info
1636*906afcb8SAndy Fiddaman			;;
1637*906afcb8SAndy Fiddaman		*)	case $info in
1638*906afcb8SAndy Fiddaman			*/*|*[cC][cC])
1639*906afcb8SAndy Fiddaman				cc=$info
1640*906afcb8SAndy Fiddaman				;;
1641*906afcb8SAndy Fiddaman			canon)	canon=-
1642*906afcb8SAndy Fiddaman				something=1
1643*906afcb8SAndy Fiddaman				;;
1644*906afcb8SAndy Fiddaman			cpu|name|rating|type)
1645*906afcb8SAndy Fiddaman				something=1
1646*906afcb8SAndy Fiddaman				;;
1647*906afcb8SAndy Fiddaman			*)	echo "$command: $action: $info: unknown attribute" >&2
1648*906afcb8SAndy Fiddaman				exit 1
1649*906afcb8SAndy Fiddaman				;;
1650*906afcb8SAndy Fiddaman			esac
1651*906afcb8SAndy Fiddaman			;;
1652*906afcb8SAndy Fiddaman		esac
1653*906afcb8SAndy Fiddaman	done
1654*906afcb8SAndy Fiddaman	case $canon in
1655*906afcb8SAndy Fiddaman	-)	echo "$command: $action: canon: host type name expected" >&2
1656*906afcb8SAndy Fiddaman		exit 1
1657*906afcb8SAndy Fiddaman		;;
1658*906afcb8SAndy Fiddaman	esac
1659*906afcb8SAndy Fiddaman	case $something in
1660*906afcb8SAndy Fiddaman	"")	set "$@" type ;;
1661*906afcb8SAndy Fiddaman	esac
1662*906afcb8SAndy Fiddaman	case $DEBUG in
1663*906afcb8SAndy Fiddaman	'')	exec 9>&2
1664*906afcb8SAndy Fiddaman		exec 2>/dev/null
1665*906afcb8SAndy Fiddaman		;;
1666*906afcb8SAndy Fiddaman	esac
1667*906afcb8SAndy Fiddaman
1668*906afcb8SAndy Fiddaman	# compute the info
1669*906afcb8SAndy Fiddaman
1670*906afcb8SAndy Fiddaman	_hostinfo_=
1671*906afcb8SAndy Fiddaman	for info
1672*906afcb8SAndy Fiddaman	do
1673*906afcb8SAndy Fiddaman	case $info in
1674*906afcb8SAndy Fiddaman	cpu)	case $NPROC in
1675*906afcb8SAndy Fiddaman		[123456789]*)
1676*906afcb8SAndy Fiddaman			_hostinfo_="$_hostinfo_ $NPROC"
1677*906afcb8SAndy Fiddaman			continue
1678*906afcb8SAndy Fiddaman			;;
1679*906afcb8SAndy Fiddaman		esac
1680*906afcb8SAndy Fiddaman		cpu=`grep -ic '^processor[ 	][ 	]*:[ 	]*[0123456789]' /proc/cpuinfo`
1681*906afcb8SAndy Fiddaman		case $cpu in
1682*906afcb8SAndy Fiddaman		[123456789]*)
1683*906afcb8SAndy Fiddaman			_hostinfo_="$_hostinfo_ $cpu"
1684*906afcb8SAndy Fiddaman			continue
1685*906afcb8SAndy Fiddaman			;;
1686*906afcb8SAndy Fiddaman		esac
1687*906afcb8SAndy Fiddaman		cpu=1
1688*906afcb8SAndy Fiddaman		# exact match
1689*906afcb8SAndy Fiddaman		set							\
1690*906afcb8SAndy Fiddaman			hinv			'^Processor [0123456789]'	\
1691*906afcb8SAndy Fiddaman			psrinfo			'on-line'		\
1692*906afcb8SAndy Fiddaman			'cat /reg/LOCAL_MACHINE/Hardware/Description/System/CentralProcessor'					'.'			\
1693*906afcb8SAndy Fiddaman			'cat /proc/registry/HKEY_LOCAL_MACHINE/Hardware/Description/System/CentralProcessor'			'.'			\
1694*906afcb8SAndy Fiddaman
1695*906afcb8SAndy Fiddaman		while	:
1696*906afcb8SAndy Fiddaman		do	case $# in
1697*906afcb8SAndy Fiddaman			0)	break ;;
1698*906afcb8SAndy Fiddaman			esac
1699*906afcb8SAndy Fiddaman			i=`$1 2>/dev/null | grep -c "$2"`
1700*906afcb8SAndy Fiddaman			case $i in
1701*906afcb8SAndy Fiddaman			[123456789]*)
1702*906afcb8SAndy Fiddaman				cpu=$i
1703*906afcb8SAndy Fiddaman				break
1704*906afcb8SAndy Fiddaman				;;
1705*906afcb8SAndy Fiddaman			esac
1706*906afcb8SAndy Fiddaman			shift;shift
1707*906afcb8SAndy Fiddaman		done
1708*906afcb8SAndy Fiddaman		case $cpu in
1709*906afcb8SAndy Fiddaman		0|1)	set						\
1710*906afcb8SAndy Fiddaman			/bin/mpstat
1711*906afcb8SAndy Fiddaman
1712*906afcb8SAndy Fiddaman			while	:
1713*906afcb8SAndy Fiddaman			do	case $# in
1714*906afcb8SAndy Fiddaman				0)	break ;;
1715*906afcb8SAndy Fiddaman				esac
1716*906afcb8SAndy Fiddaman				if	executable $1
1717*906afcb8SAndy Fiddaman				then	case `$1 | grep -ic '^cpu '` in
1718*906afcb8SAndy Fiddaman					1)	cpu=`$1 | grep -ic '^ *[0123456789][0123456789]* '`
1719*906afcb8SAndy Fiddaman						break
1720*906afcb8SAndy Fiddaman						;;
1721*906afcb8SAndy Fiddaman					esac
1722*906afcb8SAndy Fiddaman				fi
1723*906afcb8SAndy Fiddaman				shift
1724*906afcb8SAndy Fiddaman			done
1725*906afcb8SAndy Fiddaman			;;
1726*906afcb8SAndy Fiddaman		esac
1727*906afcb8SAndy Fiddaman		case $cpu in
1728*906afcb8SAndy Fiddaman		0|1)	# token match
1729*906afcb8SAndy Fiddaman			set						\
1730*906afcb8SAndy Fiddaman			/usr/kvm/mpstat			'cpu[0123456789]'	\
1731*906afcb8SAndy Fiddaman			/usr/etc/cpustatus		'enable'	\
1732*906afcb8SAndy Fiddaman			/usr/alliant/showsched		'CE'		\
1733*906afcb8SAndy Fiddaman			'ls /config/hw/system/cpu'	'cpu'		\
1734*906afcb8SAndy Fiddaman			prtconf				'cpu-unit'	\
1735*906afcb8SAndy Fiddaman
1736*906afcb8SAndy Fiddaman			while	:
1737*906afcb8SAndy Fiddaman			do	case $# in
1738*906afcb8SAndy Fiddaman				0)	break ;;
1739*906afcb8SAndy Fiddaman				esac
1740*906afcb8SAndy Fiddaman				i=`$1 2>/dev/null | $TR ' 	' '
1741*906afcb8SAndy Fiddaman
1742*906afcb8SAndy Fiddaman' | grep -c "^$2"`
1743*906afcb8SAndy Fiddaman				case $i in
1744*906afcb8SAndy Fiddaman				[123456789]*)
1745*906afcb8SAndy Fiddaman					cpu=$i
1746*906afcb8SAndy Fiddaman					break
1747*906afcb8SAndy Fiddaman					;;
1748*906afcb8SAndy Fiddaman				esac
1749*906afcb8SAndy Fiddaman				shift;shift
1750*906afcb8SAndy Fiddaman			done
1751*906afcb8SAndy Fiddaman			;;
1752*906afcb8SAndy Fiddaman		esac
1753*906afcb8SAndy Fiddaman		case $cpu in
1754*906afcb8SAndy Fiddaman		0|1)	# special match
1755*906afcb8SAndy Fiddaman			set						\
1756*906afcb8SAndy Fiddaman									\
1757*906afcb8SAndy Fiddaman			hinv						\
1758*906afcb8SAndy Fiddaman			'/^[0123456789][0123456789]* .* Processors*$/'		\
1759*906afcb8SAndy Fiddaman			'/[ 	].*//'					\
1760*906afcb8SAndy Fiddaman									\
1761*906afcb8SAndy Fiddaman			/usr/bin/hostinfo				\
1762*906afcb8SAndy Fiddaman			'/^[0123456789][0123456789]* .* physically available\.*$/'	\
1763*906afcb8SAndy Fiddaman			'/[ 	].*//'					\
1764*906afcb8SAndy Fiddaman
1765*906afcb8SAndy Fiddaman			while	:
1766*906afcb8SAndy Fiddaman			do	case $# in
1767*906afcb8SAndy Fiddaman				0)	break ;;
1768*906afcb8SAndy Fiddaman				esac
1769*906afcb8SAndy Fiddaman				i=`$1 2>/dev/null | $SED -e "${2}!d" -e "s${3}"`
1770*906afcb8SAndy Fiddaman				case $i in
1771*906afcb8SAndy Fiddaman				[123456789]*)
1772*906afcb8SAndy Fiddaman					cpu=$i
1773*906afcb8SAndy Fiddaman					break
1774*906afcb8SAndy Fiddaman					;;
1775*906afcb8SAndy Fiddaman				esac
1776*906afcb8SAndy Fiddaman				shift;shift;shift
1777*906afcb8SAndy Fiddaman			done
1778*906afcb8SAndy Fiddaman			;;
1779*906afcb8SAndy Fiddaman		esac
1780*906afcb8SAndy Fiddaman		case $cpu in
1781*906afcb8SAndy Fiddaman		0|1)	cpu=`(
1782*906afcb8SAndy Fiddaman			cd ${TMPDIR:-/tmp}
1783*906afcb8SAndy Fiddaman			tmp=hi$$
1784*906afcb8SAndy Fiddaman			trap 'rm -f $tmp.*' 0 1 2
1785*906afcb8SAndy Fiddaman			cat > $tmp.c <<!
1786*906afcb8SAndy Fiddaman#include <stdio.h>
1787*906afcb8SAndy Fiddaman#include <pthread.h>
1788*906afcb8SAndy Fiddamanint main()
1789*906afcb8SAndy Fiddaman{
1790*906afcb8SAndy Fiddaman	printf("%d\n", pthread_num_processors_np());
1791*906afcb8SAndy Fiddaman	return 0;
1792*906afcb8SAndy Fiddaman}
1793*906afcb8SAndy Fiddaman!
1794*906afcb8SAndy Fiddaman			for o in -lpthread ''
1795*906afcb8SAndy Fiddaman			do	if	$CC $o -O -o $tmp.exe $tmp.c $o >/dev/null 2>&1 ||
1796*906afcb8SAndy Fiddaman					gcc $o -O -o $tmp.exe $tmp.c $o >/dev/null 2>&1
1797*906afcb8SAndy Fiddaman				then	./$tmp.exe
1798*906afcb8SAndy Fiddaman					break
1799*906afcb8SAndy Fiddaman				fi
1800*906afcb8SAndy Fiddaman			done
1801*906afcb8SAndy Fiddaman			)`
1802*906afcb8SAndy Fiddaman			case $cpu in
1803*906afcb8SAndy Fiddaman			[0123456789]*)	;;
1804*906afcb8SAndy Fiddaman			*)	cpu=1 ;;
1805*906afcb8SAndy Fiddaman			esac
1806*906afcb8SAndy Fiddaman			;;
1807*906afcb8SAndy Fiddaman		esac
1808*906afcb8SAndy Fiddaman		_hostinfo_="$_hostinfo_ $cpu"
1809*906afcb8SAndy Fiddaman		;;
1810*906afcb8SAndy Fiddaman	name)	_name_=`hostname || uname -n || cat /etc/whoami || echo local`
1811*906afcb8SAndy Fiddaman		_hostinfo_="$_hostinfo_ $_name_"
1812*906afcb8SAndy Fiddaman		;;
1813*906afcb8SAndy Fiddaman	rating)	for rating in `grep -i ^bogomips /proc/cpuinfo 2>/dev/null | $SED -e 's,.*:[ 	]*,,' -e 's,\(...*\)\..*,\1,' -e 's,\(\..\).*,\1,'`
1814*906afcb8SAndy Fiddaman		do	case $rating in
1815*906afcb8SAndy Fiddaman			[0123456789]*)	break ;;
1816*906afcb8SAndy Fiddaman			esac
1817*906afcb8SAndy Fiddaman		done
1818*906afcb8SAndy Fiddaman		case $rating in
1819*906afcb8SAndy Fiddaman		[0123456789]*)	;;
1820*906afcb8SAndy Fiddaman		*)	cd ${TMPDIR:-/tmp}
1821*906afcb8SAndy Fiddaman			tmp=hi$$
1822*906afcb8SAndy Fiddaman			trap 'rm -f $tmp.*' 0 1 2
1823*906afcb8SAndy Fiddaman			cat > $tmp.c <<!
1824*906afcb8SAndy Fiddaman#include <stdio.h>
1825*906afcb8SAndy Fiddaman#include <sys/types.h>
1826*906afcb8SAndy Fiddaman#if TD || TZ
1827*906afcb8SAndy Fiddaman#include <sys/time.h>
1828*906afcb8SAndy Fiddaman#else
1829*906afcb8SAndy Fiddamanextern time_t	time();
1830*906afcb8SAndy Fiddaman#endif
1831*906afcb8SAndy Fiddamanint main()
1832*906afcb8SAndy Fiddaman{
1833*906afcb8SAndy Fiddaman	register unsigned long	i;
1834*906afcb8SAndy Fiddaman	register unsigned long	j;
1835*906afcb8SAndy Fiddaman	register unsigned long	k;
1836*906afcb8SAndy Fiddaman	unsigned long		l;
1837*906afcb8SAndy Fiddaman	unsigned long		m;
1838*906afcb8SAndy Fiddaman	unsigned long		t;
1839*906afcb8SAndy Fiddaman	int			x;
1840*906afcb8SAndy Fiddaman#if TD || TZ
1841*906afcb8SAndy Fiddaman	struct timeval		b;
1842*906afcb8SAndy Fiddaman	struct timeval		e;
1843*906afcb8SAndy Fiddaman#if TZ
1844*906afcb8SAndy Fiddaman	struct timezone		z;
1845*906afcb8SAndy Fiddaman#endif
1846*906afcb8SAndy Fiddaman#endif
1847*906afcb8SAndy Fiddaman	l = 500;
1848*906afcb8SAndy Fiddaman	m = 890;
1849*906afcb8SAndy Fiddaman	x = 0;
1850*906afcb8SAndy Fiddaman	for (;;)
1851*906afcb8SAndy Fiddaman	{
1852*906afcb8SAndy Fiddaman#if TD || TZ
1853*906afcb8SAndy Fiddaman#if TZ
1854*906afcb8SAndy Fiddaman		gettimeofday(&b, &z);
1855*906afcb8SAndy Fiddaman#else
1856*906afcb8SAndy Fiddaman		gettimeofday(&b);
1857*906afcb8SAndy Fiddaman#endif
1858*906afcb8SAndy Fiddaman#else
1859*906afcb8SAndy Fiddaman		t = (unsigned long)time((time_t*)0);
1860*906afcb8SAndy Fiddaman#endif
1861*906afcb8SAndy Fiddaman		k = 0;
1862*906afcb8SAndy Fiddaman		for (i = 0; i < l; i++)
1863*906afcb8SAndy Fiddaman			for (j = 0; j < 50000; j++)
1864*906afcb8SAndy Fiddaman				k += j;
1865*906afcb8SAndy Fiddaman#if TD || TZ
1866*906afcb8SAndy Fiddaman#if TZ
1867*906afcb8SAndy Fiddaman		gettimeofday(&e, &z);
1868*906afcb8SAndy Fiddaman#else
1869*906afcb8SAndy Fiddaman		gettimeofday(&e);
1870*906afcb8SAndy Fiddaman#endif
1871*906afcb8SAndy Fiddaman		t = (e.tv_sec - b.tv_sec) * 1000 + (e.tv_usec - b.tv_usec) / 1000;
1872*906afcb8SAndy Fiddaman		if (!x++ && t < 1000)
1873*906afcb8SAndy Fiddaman		{
1874*906afcb8SAndy Fiddaman			t = 10000 / t;
1875*906afcb8SAndy Fiddaman			l = (l * t) / 10;
1876*906afcb8SAndy Fiddaman			continue;
1877*906afcb8SAndy Fiddaman		}
1878*906afcb8SAndy Fiddaman#else
1879*906afcb8SAndy Fiddaman		t = ((unsigned long)time((time_t*)0) - t) * 1000;
1880*906afcb8SAndy Fiddaman		if (!x++ && t < 20000)
1881*906afcb8SAndy Fiddaman		{
1882*906afcb8SAndy Fiddaman			t = 200000l / t;
1883*906afcb8SAndy Fiddaman			l = (l * t) / 10;
1884*906afcb8SAndy Fiddaman			continue;
1885*906afcb8SAndy Fiddaman		}
1886*906afcb8SAndy Fiddaman#endif
1887*906afcb8SAndy Fiddaman#if PR
1888*906afcb8SAndy Fiddaman		printf("[ k=%lu l=%lu m=%lu t=%lu ] ", k, l, m, t);
1889*906afcb8SAndy Fiddaman#endif
1890*906afcb8SAndy Fiddaman		if (t == 0)
1891*906afcb8SAndy Fiddaman			t = 1;
1892*906afcb8SAndy Fiddaman		break;
1893*906afcb8SAndy Fiddaman	}
1894*906afcb8SAndy Fiddaman	printf("%lu\n", ((l * m) / 10) / t);
1895*906afcb8SAndy Fiddaman	return k == 0;
1896*906afcb8SAndy Fiddaman}
1897*906afcb8SAndy Fiddaman!
1898*906afcb8SAndy Fiddaman			rating=
1899*906afcb8SAndy Fiddaman			for o in -DTZ -DTD ''
1900*906afcb8SAndy Fiddaman			do	if	$CC $o -O -o $tmp.exe $tmp.c >/dev/null 2>&1 ||
1901*906afcb8SAndy Fiddaman					gcc $o -O -o $tmp.exe $tmp.c >/dev/null 2>&1
1902*906afcb8SAndy Fiddaman				then	rating=`./$tmp.exe`
1903*906afcb8SAndy Fiddaman					break
1904*906afcb8SAndy Fiddaman				fi
1905*906afcb8SAndy Fiddaman			done
1906*906afcb8SAndy Fiddaman			case $rating in
1907*906afcb8SAndy Fiddaman			[0123456789]*)	;;
1908*906afcb8SAndy Fiddaman			*)	rating=1 ;;
1909*906afcb8SAndy Fiddaman			esac
1910*906afcb8SAndy Fiddaman			;;
1911*906afcb8SAndy Fiddaman		esac
1912*906afcb8SAndy Fiddaman		_hostinfo_="$_hostinfo_ $rating"
1913*906afcb8SAndy Fiddaman		;;
1914*906afcb8SAndy Fiddaman	type|canon)
1915*906afcb8SAndy Fiddaman		case $CROSS:$canon in
1916*906afcb8SAndy Fiddaman		0:)	case $cc in
1917*906afcb8SAndy Fiddaman			cc)	case $KEEP_HOSTTYPE:$HOSTTYPE in
1918*906afcb8SAndy Fiddaman				0:?*)	if	test -d ${PACKAGEROOT:-.}/arch/$HOSTTYPE
1919*906afcb8SAndy Fiddaman					then	KEEP_HOSTTYPE=1
1920*906afcb8SAndy Fiddaman					fi
1921*906afcb8SAndy Fiddaman					;;
1922*906afcb8SAndy Fiddaman				esac
1923*906afcb8SAndy Fiddaman				;;
1924*906afcb8SAndy Fiddaman			esac
1925*906afcb8SAndy Fiddaman			case $KEEP_HOSTTYPE in
1926*906afcb8SAndy Fiddaman			1)	_hostinfo_="$_hostinfo_ $HOSTTYPE"
1927*906afcb8SAndy Fiddaman				continue
1928*906afcb8SAndy Fiddaman				;;
1929*906afcb8SAndy Fiddaman			esac
1930*906afcb8SAndy Fiddaman			;;
1931*906afcb8SAndy Fiddaman		esac
1932*906afcb8SAndy Fiddaman		case $cc in
1933*906afcb8SAndy Fiddaman		/*)	a=`$cc -dumpmachine $CCFLAGS 2>/dev/null`
1934*906afcb8SAndy Fiddaman			case $a in
1935*906afcb8SAndy Fiddaman			'')	case $CCFLAGS in
1936*906afcb8SAndy Fiddaman				?*)	a=`$cc -dumpmachine 2>/dev/null` ;;
1937*906afcb8SAndy Fiddaman				esac
1938*906afcb8SAndy Fiddaman				;;
1939*906afcb8SAndy Fiddaman			esac
1940*906afcb8SAndy Fiddaman			case $a in
1941*906afcb8SAndy Fiddaman			''|*' '*|*/*:*)
1942*906afcb8SAndy Fiddaman				;;
1943*906afcb8SAndy Fiddaman			*.*-*)	_hostinfo_="$_hostinfo_ $a"
1944*906afcb8SAndy Fiddaman				continue
1945*906afcb8SAndy Fiddaman				;;
1946*906afcb8SAndy Fiddaman			*-*-*)	case $canon in
1947*906afcb8SAndy Fiddaman				'')	canon=$a ;;
1948*906afcb8SAndy Fiddaman				esac
1949*906afcb8SAndy Fiddaman				;;
1950*906afcb8SAndy Fiddaman			*)	_hostinfo_="$_hostinfo_ $a"
1951*906afcb8SAndy Fiddaman				continue
1952*906afcb8SAndy Fiddaman				;;
1953*906afcb8SAndy Fiddaman			esac
1954*906afcb8SAndy Fiddaman			;;
1955*906afcb8SAndy Fiddaman		esac
1956*906afcb8SAndy Fiddaman		IFS=:
1957*906afcb8SAndy Fiddaman		set /$IFS$PATH
1958*906afcb8SAndy Fiddaman		IFS=$ifs
1959*906afcb8SAndy Fiddaman		shift
1960*906afcb8SAndy Fiddaman		f=../lib/hostinfo/typemap
1961*906afcb8SAndy Fiddaman		for i
1962*906afcb8SAndy Fiddaman		do	case $i in
1963*906afcb8SAndy Fiddaman			"")	i=. ;;
1964*906afcb8SAndy Fiddaman			esac
1965*906afcb8SAndy Fiddaman			case $canon in
1966*906afcb8SAndy Fiddaman			'')	case $cc in
1967*906afcb8SAndy Fiddaman				/*|cc)	;;
1968*906afcb8SAndy Fiddaman				*)	if	executable $i/$cc
1969*906afcb8SAndy Fiddaman					then	a=`$i/$cc -dumpmachine $CCFLAGS 2>/dev/null`
1970*906afcb8SAndy Fiddaman						case $a in
1971*906afcb8SAndy Fiddaman						'')	case $CCFLAGS in
1972*906afcb8SAndy Fiddaman							?*)	a=`$cc -dumpmachine 2>/dev/null` ;;
1973*906afcb8SAndy Fiddaman							esac
1974*906afcb8SAndy Fiddaman							;;
1975*906afcb8SAndy Fiddaman						esac
1976*906afcb8SAndy Fiddaman						case $a in
1977*906afcb8SAndy Fiddaman						''|*' '*|*/*:*)
1978*906afcb8SAndy Fiddaman							;;
1979*906afcb8SAndy Fiddaman						*-*)	canon=$a
1980*906afcb8SAndy Fiddaman							;;
1981*906afcb8SAndy Fiddaman						*)	_hostinfo_="$_hostinfo_ $a"
1982*906afcb8SAndy Fiddaman							continue 2
1983*906afcb8SAndy Fiddaman							;;
1984*906afcb8SAndy Fiddaman						esac
1985*906afcb8SAndy Fiddaman					fi
1986*906afcb8SAndy Fiddaman					;;
1987*906afcb8SAndy Fiddaman				esac
1988*906afcb8SAndy Fiddaman				;;
1989*906afcb8SAndy Fiddaman			esac
1990*906afcb8SAndy Fiddaman			if	test -f "$i/$f"
1991*906afcb8SAndy Fiddaman			then	map="`grep -v '^#' $i/$f` $map"
1992*906afcb8SAndy Fiddaman			fi
1993*906afcb8SAndy Fiddaman		done
1994*906afcb8SAndy Fiddaman
1995*906afcb8SAndy Fiddaman		# inconsistent -dumpmachine filtered here
1996*906afcb8SAndy Fiddaman
1997*906afcb8SAndy Fiddaman		case -${canon}- in
1998*906afcb8SAndy Fiddaman		--|*-powerpc-*)
1999*906afcb8SAndy Fiddaman			h=`hostname || uname -n || cat /etc/whoami`
2000*906afcb8SAndy Fiddaman			case $h in
2001*906afcb8SAndy Fiddaman			'')	h=local ;;
2002*906afcb8SAndy Fiddaman			esac
2003*906afcb8SAndy Fiddaman			a=`arch || uname -m || att uname -m || uname -s || att uname -s`
2004*906afcb8SAndy Fiddaman			case $a in
2005*906afcb8SAndy Fiddaman			*[\ \	]*)	a=`echo $a | $SED "s/[ 	]/-/g"` ;;
2006*906afcb8SAndy Fiddaman			esac
2007*906afcb8SAndy Fiddaman			case $a in
2008*906afcb8SAndy Fiddaman			'')	a=unknown ;;
2009*906afcb8SAndy Fiddaman			esac
2010*906afcb8SAndy Fiddaman			m=`mach || machine || uname -p || att uname -p`
2011*906afcb8SAndy Fiddaman			case $m in
2012*906afcb8SAndy Fiddaman			*[\ \	]*)	m=`echo $m | $SED "s/[ 	]/-/g"` ;;
2013*906afcb8SAndy Fiddaman			esac
2014*906afcb8SAndy Fiddaman			case $m in
2015*906afcb8SAndy Fiddaman			'')	m=unknown ;;
2016*906afcb8SAndy Fiddaman			esac
2017*906afcb8SAndy Fiddaman			x=`uname -a || att uname -a`
2018*906afcb8SAndy Fiddaman			case $x in
2019*906afcb8SAndy Fiddaman			'')	x="unknown $host unknown unknown unknown unknown unknown" ;;
2020*906afcb8SAndy Fiddaman			esac
2021*906afcb8SAndy Fiddaman			set "" $h $a $m $x
2022*906afcb8SAndy Fiddaman			expected=$1 host=$2 arch=$3 mach=$4 os=$5 sys=$6 rel=$7 ver=$8
2023*906afcb8SAndy Fiddaman			;;
2024*906afcb8SAndy Fiddaman		*)	case $canon in
2025*906afcb8SAndy Fiddaman			*-*)	IFS=-
2026*906afcb8SAndy Fiddaman				set "" $canon
2027*906afcb8SAndy Fiddaman				shift
2028*906afcb8SAndy Fiddaman				IFS=$ifs
2029*906afcb8SAndy Fiddaman				case $# in
2030*906afcb8SAndy Fiddaman				2)	host= mach= arch=$1 os=$2 sys= rel= ;;
2031*906afcb8SAndy Fiddaman				*)	host= mach=$2 arch=$1 os=$3 sys= rel= ;;
2032*906afcb8SAndy Fiddaman				esac
2033*906afcb8SAndy Fiddaman				case $os in
2034*906afcb8SAndy Fiddaman				[abcdefghijklmnopqrstuvwxyz]*[0123456789])
2035*906afcb8SAndy Fiddaman					eval `echo $os | $SED -e 's/^\([^0123456789.]*\)\.*\(.*\)/os=\1 rel=\2/'`
2036*906afcb8SAndy Fiddaman					;;
2037*906afcb8SAndy Fiddaman				esac
2038*906afcb8SAndy Fiddaman				;;
2039*906afcb8SAndy Fiddaman			*)	arch=$canon mach= os= sys= rel=
2040*906afcb8SAndy Fiddaman				;;
2041*906afcb8SAndy Fiddaman			esac
2042*906afcb8SAndy Fiddaman			;;
2043*906afcb8SAndy Fiddaman		esac
2044*906afcb8SAndy Fiddaman		type=unknown
2045*906afcb8SAndy Fiddaman		case $host in
2046*906afcb8SAndy Fiddaman		*.*)	host=`echo $host | $SED -e 's/\..*//'` ;;
2047*906afcb8SAndy Fiddaman		esac
2048*906afcb8SAndy Fiddaman		case $mach in
2049*906afcb8SAndy Fiddaman		unknown)
2050*906afcb8SAndy Fiddaman			mach=
2051*906afcb8SAndy Fiddaman			;;
2052*906afcb8SAndy Fiddaman		[Rr][0123][0123456789][0123456789][0123456789])
2053*906afcb8SAndy Fiddaman			mach=mips1
2054*906afcb8SAndy Fiddaman			;;
2055*906afcb8SAndy Fiddaman		[Rr][4][0123456789][0123456789][0123456789])
2056*906afcb8SAndy Fiddaman			mach=mips2
2057*906afcb8SAndy Fiddaman			;;
2058*906afcb8SAndy Fiddaman		[Rr][56789][0123456789][0123456789][0123456789]|[Rr][123456789][0123456789][0123456789][0123456789][0123456789])
2059*906afcb8SAndy Fiddaman			mach=mips4
2060*906afcb8SAndy Fiddaman			;;
2061*906afcb8SAndy Fiddaman		pc)	arch=i386
2062*906afcb8SAndy Fiddaman			mach=
2063*906afcb8SAndy Fiddaman			;;
2064*906afcb8SAndy Fiddaman		[Pp][Oo][Ww][Ee][Rr][Pp][Cc])
2065*906afcb8SAndy Fiddaman			arch=ppc
2066*906afcb8SAndy Fiddaman			mach=
2067*906afcb8SAndy Fiddaman			;;
2068*906afcb8SAndy Fiddaman		*)	case $arch in
2069*906afcb8SAndy Fiddaman			34[0123456789][0123456789])
2070*906afcb8SAndy Fiddaman				os=ncr
2071*906afcb8SAndy Fiddaman				arch=i386
2072*906afcb8SAndy Fiddaman				;;
2073*906afcb8SAndy Fiddaman			esac
2074*906afcb8SAndy Fiddaman			;;
2075*906afcb8SAndy Fiddaman		esac
2076*906afcb8SAndy Fiddaman		case $canon in
2077*906afcb8SAndy Fiddaman		'')	set						\
2078*906afcb8SAndy Fiddaman									\
2079*906afcb8SAndy Fiddaman			/NextDeveloper		-d	next	-	\
2080*906afcb8SAndy Fiddaman			/config/hw/system/cpu	-d	tandem	mach	\
2081*906afcb8SAndy Fiddaman
2082*906afcb8SAndy Fiddaman			while	:
2083*906afcb8SAndy Fiddaman			do	case $# in
2084*906afcb8SAndy Fiddaman				0)	break ;;
2085*906afcb8SAndy Fiddaman				esac
2086*906afcb8SAndy Fiddaman				if	test $2 $1
2087*906afcb8SAndy Fiddaman				then	os=$3
2088*906afcb8SAndy Fiddaman					case $4 in
2089*906afcb8SAndy Fiddaman					arch)	mach=$arch ;;
2090*906afcb8SAndy Fiddaman					mach)	arch=$mach ;;
2091*906afcb8SAndy Fiddaman					esac
2092*906afcb8SAndy Fiddaman					break
2093*906afcb8SAndy Fiddaman				fi
2094*906afcb8SAndy Fiddaman				shift;shift;shift;shift
2095*906afcb8SAndy Fiddaman			done
2096*906afcb8SAndy Fiddaman			;;
2097*906afcb8SAndy Fiddaman		esac
2098*906afcb8SAndy Fiddaman		case $os in
2099*906afcb8SAndy Fiddaman		AIX*|aix*)
2100*906afcb8SAndy Fiddaman			type=ibm.risc
2101*906afcb8SAndy Fiddaman			;;
2102*906afcb8SAndy Fiddaman		HP-UX)	case $arch in
2103*906afcb8SAndy Fiddaman			9000/[78]*)
2104*906afcb8SAndy Fiddaman				type=hp.pa
2105*906afcb8SAndy Fiddaman				;;
2106*906afcb8SAndy Fiddaman			*/*)	type=hp.`echo $arch | $SED 's,/,_,g'`
2107*906afcb8SAndy Fiddaman				;;
2108*906afcb8SAndy Fiddaman			*)	type=hp.$arch
2109*906afcb8SAndy Fiddaman				;;
2110*906afcb8SAndy Fiddaman			esac
2111*906afcb8SAndy Fiddaman			;;
2112*906afcb8SAndy Fiddaman		[Ii][Rr][Ii][Xx]*)
2113*906afcb8SAndy Fiddaman			set xx `hinv | $SED -e '/^CPU:/!d' -e 's/CPU:[ 	]*\([^ 	]*\)[ 	]*\([^ 	]*\).*/\1 \2/' -e q | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
2114*906afcb8SAndy Fiddaman			shift
2115*906afcb8SAndy Fiddaman			type=$1
2116*906afcb8SAndy Fiddaman			n=
2117*906afcb8SAndy Fiddaman			case $2 in
2118*906afcb8SAndy Fiddaman			r[0123][0123456789][0123456789][0123456789])
2119*906afcb8SAndy Fiddaman				n=1
2120*906afcb8SAndy Fiddaman				;;
2121*906afcb8SAndy Fiddaman			r[4][0123][0123456789][0123456789])
2122*906afcb8SAndy Fiddaman				n=2
2123*906afcb8SAndy Fiddaman				;;
2124*906afcb8SAndy Fiddaman			r[4][456789][0123456789][0123456789]|r[5][0123456789][0123456789][0123456789])
2125*906afcb8SAndy Fiddaman				n=3
2126*906afcb8SAndy Fiddaman				;;
2127*906afcb8SAndy Fiddaman			r[6789][0123456789][0123456789][0123456789]|r[123456789][0123456789][0123456789][0123456789][0123456789])
2128*906afcb8SAndy Fiddaman				n=4
2129*906afcb8SAndy Fiddaman				;;
2130*906afcb8SAndy Fiddaman			esac
2131*906afcb8SAndy Fiddaman			case $rel in
2132*906afcb8SAndy Fiddaman			[01234].*|5.[012]|5.[012].*)
2133*906afcb8SAndy Fiddaman				case $n in
2134*906afcb8SAndy Fiddaman				1)	;;
2135*906afcb8SAndy Fiddaman				*)	n=2 ;;
2136*906afcb8SAndy Fiddaman				esac
2137*906afcb8SAndy Fiddaman				;;
2138*906afcb8SAndy Fiddaman			5.*)	case $n in
2139*906afcb8SAndy Fiddaman				2)	n=3 ;;
2140*906afcb8SAndy Fiddaman				esac
2141*906afcb8SAndy Fiddaman				;;
2142*906afcb8SAndy Fiddaman			esac
2143*906afcb8SAndy Fiddaman			if	executable $cc
2144*906afcb8SAndy Fiddaman			then	a=$cc
2145*906afcb8SAndy Fiddaman			else	IFS=:
2146*906afcb8SAndy Fiddaman				set /$IFS$PATH
2147*906afcb8SAndy Fiddaman				IFS=$ifs
2148*906afcb8SAndy Fiddaman				shift
2149*906afcb8SAndy Fiddaman				for i
2150*906afcb8SAndy Fiddaman				do	a=$i/$cc
2151*906afcb8SAndy Fiddaman					if	executable $a
2152*906afcb8SAndy Fiddaman					then	break
2153*906afcb8SAndy Fiddaman					fi
2154*906afcb8SAndy Fiddaman				done
2155*906afcb8SAndy Fiddaman			fi
2156*906afcb8SAndy Fiddaman			split='
2157*906afcb8SAndy Fiddaman'
2158*906afcb8SAndy Fiddaman			a=`strings $a < /dev/null | $SED -e 's/[^abcdefghijklmnopqrstuvwxyz0123456789]/ /g' -e 's/[ 	][ 	]*/\'"$split"'/g' | $SED -e "/^${type}[0123456789]$/!d" -e "s/^${type}//" -e q`
2159*906afcb8SAndy Fiddaman			case $a in
2160*906afcb8SAndy Fiddaman			[0123456789])	n=$a ;;
2161*906afcb8SAndy Fiddaman			esac
2162*906afcb8SAndy Fiddaman			case $n in
2163*906afcb8SAndy Fiddaman			4)	a=`$cc -${type}3 2>&1`
2164*906afcb8SAndy Fiddaman				case $a in
2165*906afcb8SAndy Fiddaman				*unknown*|*install*|*conflict*)
2166*906afcb8SAndy Fiddaman					;;
2167*906afcb8SAndy Fiddaman				*)	n=3
2168*906afcb8SAndy Fiddaman					;;
2169*906afcb8SAndy Fiddaman				esac
2170*906afcb8SAndy Fiddaman				;;
2171*906afcb8SAndy Fiddaman			esac
2172*906afcb8SAndy Fiddaman			a=`$cc -show F0oB@r.c 2>&1`
2173*906afcb8SAndy Fiddaman			case $n:$a in
2174*906afcb8SAndy Fiddaman			[!2]:*mips2*)	n=2 ;;
2175*906afcb8SAndy Fiddaman			[!23]:*mips3*)	n=3 ;;
2176*906afcb8SAndy Fiddaman			[!234]:*mips4*)	n=4 ;;
2177*906afcb8SAndy Fiddaman			esac
2178*906afcb8SAndy Fiddaman			case $n:$a in
2179*906afcb8SAndy Fiddaman			[!2]:*[Oo]32*)	abi=-o32 ;;
2180*906afcb8SAndy Fiddaman			[!3]:*[Nn]32*)	abi=-n32 ;;
2181*906afcb8SAndy Fiddaman			esac
2182*906afcb8SAndy Fiddaman			mach=${type}$n
2183*906afcb8SAndy Fiddaman			type=sgi.$mach
2184*906afcb8SAndy Fiddaman			;;
2185*906afcb8SAndy Fiddaman		OSx*|SMP*|pyramid)
2186*906afcb8SAndy Fiddaman			type=pyr
2187*906afcb8SAndy Fiddaman			;;
2188*906afcb8SAndy Fiddaman		OS/390)	type=mvs.390
2189*906afcb8SAndy Fiddaman			;;
2190*906afcb8SAndy Fiddaman		[Ss][Cc][Oo]*)
2191*906afcb8SAndy Fiddaman			type=sco
2192*906afcb8SAndy Fiddaman			;;
2193*906afcb8SAndy Fiddaman		[Ss]ol*)
2194*906afcb8SAndy Fiddaman			v=`echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//'`
2195*906afcb8SAndy Fiddaman			case $v in
2196*906afcb8SAndy Fiddaman			[6789]|[1-9][0-9])
2197*906afcb8SAndy Fiddaman				;;
2198*906afcb8SAndy Fiddaman			*)	v=
2199*906afcb8SAndy Fiddaman				;;
2200*906afcb8SAndy Fiddaman			esac
2201*906afcb8SAndy Fiddaman			case $arch in
2202*906afcb8SAndy Fiddaman			'')	case $mach in
2203*906afcb8SAndy Fiddaman				'')	arch=sun4 ;;
2204*906afcb8SAndy Fiddaman				*)	arch=$mach ;;
2205*906afcb8SAndy Fiddaman				esac
2206*906afcb8SAndy Fiddaman				;;
2207*906afcb8SAndy Fiddaman			esac
2208*906afcb8SAndy Fiddaman			case $arch in
2209*906afcb8SAndy Fiddaman			sparc)	arch=sun4 ;;
2210*906afcb8SAndy Fiddaman			esac
2211*906afcb8SAndy Fiddaman			type=sol$v.$arch
2212*906afcb8SAndy Fiddaman			;;
2213*906afcb8SAndy Fiddaman		[Ss]un*)type=`echo $arch | $SED -e 's/\(sun.\).*/\1/'`
2214*906afcb8SAndy Fiddaman			case $type in
2215*906afcb8SAndy Fiddaman			sparc)	type=sun4 ;;
2216*906afcb8SAndy Fiddaman			esac
2217*906afcb8SAndy Fiddaman			case $rel in
2218*906afcb8SAndy Fiddaman			[01234]*)
2219*906afcb8SAndy Fiddaman				;;
2220*906afcb8SAndy Fiddaman			'')	case $os in
2221*906afcb8SAndy Fiddaman				*[Oo][Ss])
2222*906afcb8SAndy Fiddaman					;;
2223*906afcb8SAndy Fiddaman				*)	type=sol.$type
2224*906afcb8SAndy Fiddaman					;;
2225*906afcb8SAndy Fiddaman				esac
2226*906afcb8SAndy Fiddaman				;;
2227*906afcb8SAndy Fiddaman			*)	case $type in
2228*906afcb8SAndy Fiddaman				'')	case $mach in
2229*906afcb8SAndy Fiddaman					sparc*)	type=sun4 ;;
2230*906afcb8SAndy Fiddaman					*)	type=$mach ;;
2231*906afcb8SAndy Fiddaman					esac
2232*906afcb8SAndy Fiddaman					;;
2233*906afcb8SAndy Fiddaman				esac
2234*906afcb8SAndy Fiddaman				v=`echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//'`
2235*906afcb8SAndy Fiddaman				case $v in
2236*906afcb8SAndy Fiddaman				[6789]|[1-9][0-9])
2237*906afcb8SAndy Fiddaman					;;
2238*906afcb8SAndy Fiddaman				*)	v=
2239*906afcb8SAndy Fiddaman					;;
2240*906afcb8SAndy Fiddaman				esac
2241*906afcb8SAndy Fiddaman				type=sol$v.$type
2242*906afcb8SAndy Fiddaman				;;
2243*906afcb8SAndy Fiddaman			esac
2244*906afcb8SAndy Fiddaman			case $type in
2245*906afcb8SAndy Fiddaman			sun*|*.*)
2246*906afcb8SAndy Fiddaman				;;
2247*906afcb8SAndy Fiddaman			*)	type=sun.$type
2248*906afcb8SAndy Fiddaman				;;
2249*906afcb8SAndy Fiddaman			esac
2250*906afcb8SAndy Fiddaman			;;
2251*906afcb8SAndy Fiddaman		[Uu][Nn][Ii][Xx]_[Ss][Vv])
2252*906afcb8SAndy Fiddaman			type=unixware
2253*906afcb8SAndy Fiddaman			;;
2254*906afcb8SAndy Fiddaman		UTS*|uts*)
2255*906afcb8SAndy Fiddaman			if	test -x /bin/u370 -o -x /bin/u390
2256*906afcb8SAndy Fiddaman			then	type=uts.390
2257*906afcb8SAndy Fiddaman			else	case $arch in
2258*906afcb8SAndy Fiddaman				'')	arch=$mach ;;
2259*906afcb8SAndy Fiddaman				esac
2260*906afcb8SAndy Fiddaman				type=uts.$arch
2261*906afcb8SAndy Fiddaman			fi
2262*906afcb8SAndy Fiddaman			;;
2263*906afcb8SAndy Fiddaman		$host)	type=$arch
2264*906afcb8SAndy Fiddaman			case $type in
2265*906afcb8SAndy Fiddaman			*.*|*[0123456789]*86|*68*)
2266*906afcb8SAndy Fiddaman				;;
2267*906afcb8SAndy Fiddaman			*)	case $mach in
2268*906afcb8SAndy Fiddaman				*[0123456789]*86|*68*|mips)
2269*906afcb8SAndy Fiddaman					type=$type.$mach
2270*906afcb8SAndy Fiddaman					;;
2271*906afcb8SAndy Fiddaman				esac
2272*906afcb8SAndy Fiddaman				;;
2273*906afcb8SAndy Fiddaman			esac
2274*906afcb8SAndy Fiddaman			;;
2275*906afcb8SAndy Fiddaman		unknown)
2276*906afcb8SAndy Fiddaman			case $arch in
2277*906afcb8SAndy Fiddaman			?*)	case $arch in
2278*906afcb8SAndy Fiddaman				sun*)	mach= ;;
2279*906afcb8SAndy Fiddaman				esac
2280*906afcb8SAndy Fiddaman				type=$arch
2281*906afcb8SAndy Fiddaman				case $mach in
2282*906afcb8SAndy Fiddaman				?*)	type=$type.$mach ;;
2283*906afcb8SAndy Fiddaman				esac
2284*906afcb8SAndy Fiddaman				;;
2285*906afcb8SAndy Fiddaman			esac
2286*906afcb8SAndy Fiddaman			;;
2287*906afcb8SAndy Fiddaman		*)	case $ver in
2288*906afcb8SAndy Fiddaman			FTX*|ftx*)
2289*906afcb8SAndy Fiddaman				case $mach in
2290*906afcb8SAndy Fiddaman				*[0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
2291*906afcb8SAndy Fiddaman					mach=`echo $mach | $SED -e 's/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*$//'`
2292*906afcb8SAndy Fiddaman					;;
2293*906afcb8SAndy Fiddaman				esac
2294*906afcb8SAndy Fiddaman				type=stratus.$mach
2295*906afcb8SAndy Fiddaman				;;
2296*906afcb8SAndy Fiddaman			*)	case $arch in
2297*906afcb8SAndy Fiddaman				[Oo][Ss][-/.]2)
2298*906afcb8SAndy Fiddaman					type=os2
2299*906afcb8SAndy Fiddaman					arch=$rel
2300*906afcb8SAndy Fiddaman					;;
2301*906afcb8SAndy Fiddaman				*)	type=`echo $os | $SED -e 's/[0123456789].*//' -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789.].*//'`
2302*906afcb8SAndy Fiddaman					;;
2303*906afcb8SAndy Fiddaman				esac
2304*906afcb8SAndy Fiddaman				case $type in
2305*906afcb8SAndy Fiddaman				[Cc][Yy][Gg][Ww][Ii][Nn]_*)
2306*906afcb8SAndy Fiddaman					type=cygwin
2307*906afcb8SAndy Fiddaman					;;
2308*906afcb8SAndy Fiddaman				[Uu][Ww][Ii][Nn]*|[Ww]indows_[0123456789][0123456789]|[Ww]indows_[Nn][Tt])
2309*906afcb8SAndy Fiddaman					type=win32
2310*906afcb8SAndy Fiddaman					arch=`echo $arch | $SED -e 's/_[^_]*$//'`
2311*906afcb8SAndy Fiddaman					;;
2312*906afcb8SAndy Fiddaman				esac
2313*906afcb8SAndy Fiddaman				case $arch in
2314*906afcb8SAndy Fiddaman				'')	case $mach in
2315*906afcb8SAndy Fiddaman					?*)	type=$type.$mach ;;
2316*906afcb8SAndy Fiddaman					esac
2317*906afcb8SAndy Fiddaman					;;
2318*906afcb8SAndy Fiddaman				*)	type=$type.$arch ;;
2319*906afcb8SAndy Fiddaman				esac
2320*906afcb8SAndy Fiddaman				;;
2321*906afcb8SAndy Fiddaman			esac
2322*906afcb8SAndy Fiddaman		esac
2323*906afcb8SAndy Fiddaman		case $type in
2324*906afcb8SAndy Fiddaman		[0123456789]*)
2325*906afcb8SAndy Fiddaman			case $mach in
2326*906afcb8SAndy Fiddaman			?*)	type=$mach ;;
2327*906afcb8SAndy Fiddaman			esac
2328*906afcb8SAndy Fiddaman			case $type in
2329*906afcb8SAndy Fiddaman			*/MC)	type=ncr.$type ;;
2330*906afcb8SAndy Fiddaman			esac
2331*906afcb8SAndy Fiddaman			;;
2332*906afcb8SAndy Fiddaman		*.*)	;;
2333*906afcb8SAndy Fiddaman		*[0123456789]*86|*68*)
2334*906afcb8SAndy Fiddaman			case $rel in
2335*906afcb8SAndy Fiddaman			[34].[0123456789]*)
2336*906afcb8SAndy Fiddaman				type=att.$type
2337*906afcb8SAndy Fiddaman				;;
2338*906afcb8SAndy Fiddaman			esac
2339*906afcb8SAndy Fiddaman			;;
2340*906afcb8SAndy Fiddaman		[abcdefghijklmnopqrstuvwxyz]*[0123456789])
2341*906afcb8SAndy Fiddaman			;;
2342*906afcb8SAndy Fiddaman		[abcdefghijklmnopqrstuvwxyz]*)	case $mach in
2343*906afcb8SAndy Fiddaman			$type)	case $ver in
2344*906afcb8SAndy Fiddaman				Fault*|fault*|FAULT*)
2345*906afcb8SAndy Fiddaman					type=ft.$type
2346*906afcb8SAndy Fiddaman					;;
2347*906afcb8SAndy Fiddaman				esac
2348*906afcb8SAndy Fiddaman				;;
2349*906afcb8SAndy Fiddaman			?*)	case $arch in
2350*906afcb8SAndy Fiddaman				'')	type=$type.$mach ;;
2351*906afcb8SAndy Fiddaman				*)	type=$type.$arch ;;
2352*906afcb8SAndy Fiddaman				esac
2353*906afcb8SAndy Fiddaman				;;
2354*906afcb8SAndy Fiddaman			esac
2355*906afcb8SAndy Fiddaman			;;
2356*906afcb8SAndy Fiddaman		esac
2357*906afcb8SAndy Fiddaman		case $type in
2358*906afcb8SAndy Fiddaman		*[-_]32|*[-_]64|*[-_]128)
2359*906afcb8SAndy Fiddaman			bits=`echo $type | $SED 's,.*[-_],,'`
2360*906afcb8SAndy Fiddaman			type=`echo $type | $SED 's,[-_][0-9]*$,,'`
2361*906afcb8SAndy Fiddaman			;;
2362*906afcb8SAndy Fiddaman		*)	bits=
2363*906afcb8SAndy Fiddaman			;;
2364*906afcb8SAndy Fiddaman		esac
2365*906afcb8SAndy Fiddaman		type=`echo $type | $SED -e 's%[-+/].*%%' | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
2366*906afcb8SAndy Fiddaman		case $type in
2367*906afcb8SAndy Fiddaman		*.*)	lhs=`echo $type | $SED -e 's/\..*//'`
2368*906afcb8SAndy Fiddaman			rhs=`echo $type | $SED -e 's/.*\.//'`
2369*906afcb8SAndy Fiddaman			case $rhs in
2370*906afcb8SAndy Fiddaman			[x0123456789]*86)	rhs=i$rhs ;;
2371*906afcb8SAndy Fiddaman			68*)			rhs=m$rhs ;;
2372*906afcb8SAndy Fiddaman			esac
2373*906afcb8SAndy Fiddaman			case $rhs in
2374*906afcb8SAndy Fiddaman			i[x23456789]86|i?[x23456789]86|*86pc)
2375*906afcb8SAndy Fiddaman						rhs=i386 ;;
2376*906afcb8SAndy Fiddaman			powerpc)		rhs=ppc ;;
2377*906afcb8SAndy Fiddaman			s[0123456789]*[0123456789]x)
2378*906afcb8SAndy Fiddaman						rhs=`echo $rhs | $SED -e 's/x$/-64/'` ;;
2379*906afcb8SAndy Fiddaman			esac
2380*906afcb8SAndy Fiddaman			case $rhs in
2381*906afcb8SAndy Fiddaman			arm[abcdefghijklmnopqrstuvwxyz_][0123456789]*)
2382*906afcb8SAndy Fiddaman						rhs=arm ;;
2383*906afcb8SAndy Fiddaman			hppa)			rhs=pa ;;
2384*906afcb8SAndy Fiddaman			esac
2385*906afcb8SAndy Fiddaman			case $lhs in
2386*906afcb8SAndy Fiddaman			?*coff|?*dwarf|?*elf)
2387*906afcb8SAndy Fiddaman				case $lhs in
2388*906afcb8SAndy Fiddaman				?*coff)	x=coff ;;
2389*906afcb8SAndy Fiddaman				?*dwarf)x=coff ;;
2390*906afcb8SAndy Fiddaman				?*elf)	x=elf ;;
2391*906afcb8SAndy Fiddaman				esac
2392*906afcb8SAndy Fiddaman				lhs=`echo ${lhs}XXX | $SED -e "s/${x}XXX//"`
2393*906afcb8SAndy Fiddaman				;;
2394*906afcb8SAndy Fiddaman			esac
2395*906afcb8SAndy Fiddaman			case $lhs in
2396*906afcb8SAndy Fiddaman			bsdi)			lhs=bsd ;;
2397*906afcb8SAndy Fiddaman			darwin)			case $rel in
2398*906afcb8SAndy Fiddaman						[01234567].*)	lhs=${lhs}7 ;;
2399*906afcb8SAndy Fiddaman						esac
2400*906afcb8SAndy Fiddaman						;;
2401*906afcb8SAndy Fiddaman			freebsd)		case $rel in
2402*906afcb8SAndy Fiddaman						[01234].*)	lhs=${lhs}4 ;;
2403*906afcb8SAndy Fiddaman						[123456789]*.*)	lhs=${lhs}`echo $rel | $SED -e 's/\..*//'` ;;
2404*906afcb8SAndy Fiddaman						esac
2405*906afcb8SAndy Fiddaman						;;
2406*906afcb8SAndy Fiddaman			hpux)			lhs=hp ;;
2407*906afcb8SAndy Fiddaman			mvs)			rhs=390 ;;
2408*906afcb8SAndy Fiddaman			esac
2409*906afcb8SAndy Fiddaman			case $lhs in
2410*906afcb8SAndy Fiddaman			'')			type=$rhs ;;
2411*906afcb8SAndy Fiddaman			$rhs)			type=$lhs ;;
2412*906afcb8SAndy Fiddaman			*)			type=$lhs.$rhs ;;
2413*906afcb8SAndy Fiddaman			esac
2414*906afcb8SAndy Fiddaman			;;
2415*906afcb8SAndy Fiddaman		esac
2416*906afcb8SAndy Fiddaman		case $type in
2417*906afcb8SAndy Fiddaman		sgi.mips*)
2418*906afcb8SAndy Fiddaman			case $mach in
2419*906afcb8SAndy Fiddaman			mips2)	type=sgi.$mach
2420*906afcb8SAndy Fiddaman				abi=-o32
2421*906afcb8SAndy Fiddaman				;;
2422*906afcb8SAndy Fiddaman			mips3)	type=sgi.$mach
2423*906afcb8SAndy Fiddaman				abi=-n32
2424*906afcb8SAndy Fiddaman				;;
2425*906afcb8SAndy Fiddaman			mips[456789])
2426*906afcb8SAndy Fiddaman				type=sgi.$mach
2427*906afcb8SAndy Fiddaman				case $abi in
2428*906afcb8SAndy Fiddaman				*-n32) ;;
2429*906afcb8SAndy Fiddaman				*) abi=-64 ;;
2430*906afcb8SAndy Fiddaman				esac
2431*906afcb8SAndy Fiddaman				;;
2432*906afcb8SAndy Fiddaman			*)	pwd=`pwd`
2433*906afcb8SAndy Fiddaman				cd ${TMPDIR:-/tmp}
2434*906afcb8SAndy Fiddaman				tmp=hi$$
2435*906afcb8SAndy Fiddaman				trap 'rm -f $tmp.*' 0 1 2
2436*906afcb8SAndy Fiddaman				cat > $tmp.a.c <<!
2437*906afcb8SAndy Fiddamanextern int b();
2438*906afcb8SAndy Fiddamanint main() { return b(); }
2439*906afcb8SAndy Fiddaman!
2440*906afcb8SAndy Fiddaman				cat > $tmp.b.c <<!
2441*906afcb8SAndy Fiddamanint b() { return 0; }
2442*906afcb8SAndy Fiddaman!
2443*906afcb8SAndy Fiddaman				abi=
2444*906afcb8SAndy Fiddaman				if	$cc -c $tmp.a.c
2445*906afcb8SAndy Fiddaman				then	for i in -n32 -o32 -64
2446*906afcb8SAndy Fiddaman					do	if	$cc $i -c $tmp.b.c &&
2447*906afcb8SAndy Fiddaman							$cc -o $tmp.exe $tmp.a.o $tmp.b.o
2448*906afcb8SAndy Fiddaman						then	abi=$i
2449*906afcb8SAndy Fiddaman							for i in 2 3 4 5 6 7 8 9
2450*906afcb8SAndy Fiddaman							do	case $i:$abi in
2451*906afcb8SAndy Fiddaman								2:-n32|2:-64|3:-64)
2452*906afcb8SAndy Fiddaman									continue
2453*906afcb8SAndy Fiddaman									;;
2454*906afcb8SAndy Fiddaman								esac
2455*906afcb8SAndy Fiddaman								if	$cc $abi -mips$i -c $tmp.b.c &&
2456*906afcb8SAndy Fiddaman									$cc -o $tmp.exe $tmp.a.o $tmp.b.o
2457*906afcb8SAndy Fiddaman								then	type=`echo $type | $SED -e 's/.$//'`$i
2458*906afcb8SAndy Fiddaman									break
2459*906afcb8SAndy Fiddaman								fi
2460*906afcb8SAndy Fiddaman							done
2461*906afcb8SAndy Fiddaman							break
2462*906afcb8SAndy Fiddaman						fi
2463*906afcb8SAndy Fiddaman					done
2464*906afcb8SAndy Fiddaman				fi </dev/null >/dev/null 2>&1
2465*906afcb8SAndy Fiddaman				rm -f $tmp.*
2466*906afcb8SAndy Fiddaman				trap - 0 1 2
2467*906afcb8SAndy Fiddaman				cd $pwd
2468*906afcb8SAndy Fiddaman				;;
2469*906afcb8SAndy Fiddaman			esac
2470*906afcb8SAndy Fiddaman			case $type$abi in
2471*906afcb8SAndy Fiddaman			sgi.mips2-o32)
2472*906afcb8SAndy Fiddaman				;;
2473*906afcb8SAndy Fiddaman			sgi.mips3)
2474*906afcb8SAndy Fiddaman				type=$type-o32
2475*906afcb8SAndy Fiddaman				;;
2476*906afcb8SAndy Fiddaman			sgi.mips3-n32)
2477*906afcb8SAndy Fiddaman				;;
2478*906afcb8SAndy Fiddaman			sgi.mips4)
2479*906afcb8SAndy Fiddaman				type=$type-o32
2480*906afcb8SAndy Fiddaman				;;
2481*906afcb8SAndy Fiddaman			sgi.mips[456789]-64)
2482*906afcb8SAndy Fiddaman				;;
2483*906afcb8SAndy Fiddaman			*)	type=$type$abi
2484*906afcb8SAndy Fiddaman				;;
2485*906afcb8SAndy Fiddaman			esac
2486*906afcb8SAndy Fiddaman			;;
2487*906afcb8SAndy Fiddaman		*)	case $bits in
2488*906afcb8SAndy Fiddaman			'')	case `file /bin/sh 2>/dev/null` in
2489*906afcb8SAndy Fiddaman				*universal*64*)
2490*906afcb8SAndy Fiddaman					pwd=`pwd`
2491*906afcb8SAndy Fiddaman					cd ${TMPDIR:-/tmp}
2492*906afcb8SAndy Fiddaman					tmp=hi$$
2493*906afcb8SAndy Fiddaman					trap 'rm -f $tmp.*' 0 1 2
2494*906afcb8SAndy Fiddaman					cat > $tmp.a.c <<!
2495*906afcb8SAndy Fiddamanint main() { return 0; }
2496*906afcb8SAndy Fiddaman!
2497*906afcb8SAndy Fiddaman					if	$cc -o $tmp.a.exe $tmp.a.c
2498*906afcb8SAndy Fiddaman					then	case `file $tmp.a.exe` in
2499*906afcb8SAndy Fiddaman						*64*)	bits=64 ;;
2500*906afcb8SAndy Fiddaman						esac
2501*906afcb8SAndy Fiddaman					fi </dev/null >/dev/null 2>&1
2502*906afcb8SAndy Fiddaman					rm -f $tmp.*
2503*906afcb8SAndy Fiddaman					trap - 0 1 2
2504*906afcb8SAndy Fiddaman					cd $pwd
2505*906afcb8SAndy Fiddaman					;;
2506*906afcb8SAndy Fiddaman				esac
2507*906afcb8SAndy Fiddaman				;;
2508*906afcb8SAndy Fiddaman			esac
2509*906afcb8SAndy Fiddaman			;;
2510*906afcb8SAndy Fiddaman		esac
2511*906afcb8SAndy Fiddaman		case $bits in
2512*906afcb8SAndy Fiddaman		32)	case $type in
2513*906afcb8SAndy Fiddaman			*.i386)	bits= ;;
2514*906afcb8SAndy Fiddaman			esac
2515*906afcb8SAndy Fiddaman			;;
2516*906afcb8SAndy Fiddaman		esac
2517*906afcb8SAndy Fiddaman		case $bits in
2518*906afcb8SAndy Fiddaman		?*)	type=$type-$bits ;;
2519*906afcb8SAndy Fiddaman		esac
2520*906afcb8SAndy Fiddaman
2521*906afcb8SAndy Fiddaman		# last chance mapping
2522*906afcb8SAndy Fiddaman
2523*906afcb8SAndy Fiddaman		set "" "" $map
2524*906afcb8SAndy Fiddaman		while	:
2525*906afcb8SAndy Fiddaman		do	case $# in
2526*906afcb8SAndy Fiddaman			[012])	break ;;
2527*906afcb8SAndy Fiddaman			esac
2528*906afcb8SAndy Fiddaman			shift;shift
2529*906afcb8SAndy Fiddaman			eval "	case \$type in
2530*906afcb8SAndy Fiddaman				$1)	type=\$2; break ;;
2531*906afcb8SAndy Fiddaman				esac"
2532*906afcb8SAndy Fiddaman		done
2533*906afcb8SAndy Fiddaman		_hostinfo_="$_hostinfo_ $type"
2534*906afcb8SAndy Fiddaman		;;
2535*906afcb8SAndy Fiddaman	esac
2536*906afcb8SAndy Fiddaman	done
2537*906afcb8SAndy Fiddaman	set '' $_hostinfo_
2538*906afcb8SAndy Fiddaman	shift
2539*906afcb8SAndy Fiddaman	_hostinfo_=$*
2540*906afcb8SAndy Fiddaman
2541*906afcb8SAndy Fiddaman	# restore the global state
2542*906afcb8SAndy Fiddaman
2543*906afcb8SAndy Fiddaman	PATH=$path
2544*906afcb8SAndy Fiddaman	case $DEBUG in
2545*906afcb8SAndy Fiddaman	'')	exec 2>&9
2546*906afcb8SAndy Fiddaman		exec 9>&-
2547*906afcb8SAndy Fiddaman		;;
2548*906afcb8SAndy Fiddaman	esac
2549*906afcb8SAndy Fiddaman}
2550*906afcb8SAndy Fiddaman
2551*906afcb8SAndy Fiddaman# info message
2552*906afcb8SAndy Fiddaman
2553*906afcb8SAndy Fiddamannote() # message ...
2554*906afcb8SAndy Fiddaman{
2555*906afcb8SAndy Fiddaman	echo $command: "$@" >&2
2556*906afcb8SAndy Fiddaman}
2557*906afcb8SAndy Fiddaman
2558*906afcb8SAndy Fiddaman# cc checks
2559*906afcb8SAndy Fiddaman#
2560*906afcb8SAndy Fiddaman#	CC: compiler base name name
2561*906afcb8SAndy Fiddaman#	cc: full path, empty if not found
2562*906afcb8SAndy Fiddaman
2563*906afcb8SAndy Fiddamancheckcc()
2564*906afcb8SAndy Fiddaman{
2565*906afcb8SAndy Fiddaman	cc=
2566*906afcb8SAndy Fiddaman	if	onpath $CC
2567*906afcb8SAndy Fiddaman	then	cc=$_onpath_
2568*906afcb8SAndy Fiddaman	else	case $CC in
2569*906afcb8SAndy Fiddaman		cc)	if	onpath gcc
2570*906afcb8SAndy Fiddaman			then	CC=gcc
2571*906afcb8SAndy Fiddaman				cc=$_onpath_
2572*906afcb8SAndy Fiddaman			fi
2573*906afcb8SAndy Fiddaman			;;
2574*906afcb8SAndy Fiddaman		esac
2575*906afcb8SAndy Fiddaman	fi
2576*906afcb8SAndy Fiddaman	case $cc in
2577*906afcb8SAndy Fiddaman	'')	case $action in
2578*906afcb8SAndy Fiddaman		make|test)	note "$CC: not found"; exit 1 ;;
2579*906afcb8SAndy Fiddaman		*)		note "warning: $CC: not found" ;;
2580*906afcb8SAndy Fiddaman		esac
2581*906afcb8SAndy Fiddaman		;;
2582*906afcb8SAndy Fiddaman	esac
2583*906afcb8SAndy Fiddaman}
2584*906afcb8SAndy Fiddaman
2585*906afcb8SAndy Fiddaman# some actions have their own PACKAGEROOT or kick out early
2586*906afcb8SAndy Fiddaman
2587*906afcb8SAndy Fiddamancase $action in
2588*906afcb8SAndy Fiddamanhost)	eval u=$package_use
2589*906afcb8SAndy Fiddaman	case $u in
2590*906afcb8SAndy Fiddaman	$PACKAGE_USE)
2591*906afcb8SAndy Fiddaman		;;
2592*906afcb8SAndy Fiddaman	*)	if	onpath $0
2593*906afcb8SAndy Fiddaman		then	case $_onpath_ in
2594*906afcb8SAndy Fiddaman			*/arch/$HOSTTYPE/bin/package)
2595*906afcb8SAndy Fiddaman				KEEP_HOSTTYPE=1
2596*906afcb8SAndy Fiddaman				;;
2597*906afcb8SAndy Fiddaman			*)	KEEP_HOSTTYPE=0
2598*906afcb8SAndy Fiddaman				;;
2599*906afcb8SAndy Fiddaman			esac
2600*906afcb8SAndy Fiddaman		else	KEEP_HOSTTYPE=0
2601*906afcb8SAndy Fiddaman		fi
2602*906afcb8SAndy Fiddaman		;;
2603*906afcb8SAndy Fiddaman	esac
2604*906afcb8SAndy Fiddaman	hostinfo $args
2605*906afcb8SAndy Fiddaman	echo $_hostinfo_
2606*906afcb8SAndy Fiddaman	exit 0
2607*906afcb8SAndy Fiddaman	;;
2608*906afcb8SAndy Fiddamanexport|setup|use)
2609*906afcb8SAndy Fiddaman	x=
2610*906afcb8SAndy Fiddaman	;;
2611*906afcb8SAndy Fiddaman*)	x=
2612*906afcb8SAndy Fiddaman	eval u=$package_use
2613*906afcb8SAndy Fiddaman	case $u in
2614*906afcb8SAndy Fiddaman	$PACKAGE_USE)
2615*906afcb8SAndy Fiddaman		case :$PATH: in
2616*906afcb8SAndy Fiddaman		*:$INSTALLROOT/bin:*)
2617*906afcb8SAndy Fiddaman			case $LIBPATH: in
2618*906afcb8SAndy Fiddaman			$INSTALLROOT/bin:$INSTALLROOT/lib:*)
2619*906afcb8SAndy Fiddaman				case $SHLIB_PATH: in
2620*906afcb8SAndy Fiddaman				$INSTALLROOT/lib:*)
2621*906afcb8SAndy Fiddaman					x=1
2622*906afcb8SAndy Fiddaman					;;
2623*906afcb8SAndy Fiddaman				esac
2624*906afcb8SAndy Fiddaman				;;
2625*906afcb8SAndy Fiddaman			esac
2626*906afcb8SAndy Fiddaman			;;
2627*906afcb8SAndy Fiddaman		esac
2628*906afcb8SAndy Fiddaman		;;
2629*906afcb8SAndy Fiddaman	esac
2630*906afcb8SAndy Fiddaman	;;
2631*906afcb8SAndy Fiddamanesac
2632*906afcb8SAndy Fiddamanrun=-
2633*906afcb8SAndy Fiddamancase $x in
2634*906afcb8SAndy Fiddaman1)	: accept the current package use environment
2635*906afcb8SAndy Fiddaman
2636*906afcb8SAndy Fiddaman	OK=ok
2637*906afcb8SAndy Fiddaman	KSH=$EXECROOT/bin/ksh
2638*906afcb8SAndy Fiddaman	MAKE=nmake
2639*906afcb8SAndy Fiddaman	NMAKE=$EXECROOT/bin/$MAKE
2640*906afcb8SAndy Fiddaman	SUM=$EXECROOT/bin/sum
2641*906afcb8SAndy Fiddaman	TEE=$EXECROOT/bin/tee
2642*906afcb8SAndy Fiddaman	INITROOT=$PACKAGEROOT/src/cmd/INIT
2643*906afcb8SAndy Fiddaman	checkcc
2644*906afcb8SAndy Fiddaman	;;
2645*906afcb8SAndy Fiddaman*)	hosttype=
2646*906afcb8SAndy Fiddaman	case $KEEP_PACKAGEROOT in
2647*906afcb8SAndy Fiddaman	0)	case $action in
2648*906afcb8SAndy Fiddaman		use)	PACKAGEROOT=
2649*906afcb8SAndy Fiddaman			case $show in
2650*906afcb8SAndy Fiddaman			echo)	exec=echo make=echo show=echo ;;
2651*906afcb8SAndy Fiddaman			esac
2652*906afcb8SAndy Fiddaman			set '' $args
2653*906afcb8SAndy Fiddaman			shift
2654*906afcb8SAndy Fiddaman			case $# in
2655*906afcb8SAndy Fiddaman			0)	;;
2656*906afcb8SAndy Fiddaman			*)	case $1 in
2657*906afcb8SAndy Fiddaman				-|.)	;;
2658*906afcb8SAndy Fiddaman				/*)	PACKAGEROOT=$1
2659*906afcb8SAndy Fiddaman					;;
2660*906afcb8SAndy Fiddaman				*)	i=`echo ~$1`
2661*906afcb8SAndy Fiddaman					if	packageroot $i
2662*906afcb8SAndy Fiddaman					then	PACKAGEROOT=$i
2663*906afcb8SAndy Fiddaman					else	for i in `echo $HOME | sed -e 's,/[^/]*$,,'` $usr $use
2664*906afcb8SAndy Fiddaman						do	if	packageroot $i/$1
2665*906afcb8SAndy Fiddaman							then	PACKAGEROOT=$i/$1
2666*906afcb8SAndy Fiddaman								break
2667*906afcb8SAndy Fiddaman							fi
2668*906afcb8SAndy Fiddaman						done
2669*906afcb8SAndy Fiddaman						case $PACKAGEROOT in
2670*906afcb8SAndy Fiddaman						'')	hosttype=$1 ;;
2671*906afcb8SAndy Fiddaman						esac
2672*906afcb8SAndy Fiddaman					fi
2673*906afcb8SAndy Fiddaman					;;
2674*906afcb8SAndy Fiddaman				esac
2675*906afcb8SAndy Fiddaman				shift
2676*906afcb8SAndy Fiddaman				;;
2677*906afcb8SAndy Fiddaman			esac
2678*906afcb8SAndy Fiddaman			run="$@"
2679*906afcb8SAndy Fiddaman			;;
2680*906afcb8SAndy Fiddaman		esac
2681*906afcb8SAndy Fiddaman		case $PACKAGEROOT in
2682*906afcb8SAndy Fiddaman		'')	PACKAGEROOT=${PWD:-`pwd`} ;;
2683*906afcb8SAndy Fiddaman		esac
2684*906afcb8SAndy Fiddaman
2685*906afcb8SAndy Fiddaman		# . must be within the PACKAGEROOT tree
2686*906afcb8SAndy Fiddaman
2687*906afcb8SAndy Fiddaman		i=X$PACKAGEROOT
2688*906afcb8SAndy Fiddaman		IFS=/
2689*906afcb8SAndy Fiddaman		set $i
2690*906afcb8SAndy Fiddaman		IFS=$ifs
2691*906afcb8SAndy Fiddaman		while	:
2692*906afcb8SAndy Fiddaman		do	i=$1
2693*906afcb8SAndy Fiddaman			shift
2694*906afcb8SAndy Fiddaman			case $i in
2695*906afcb8SAndy Fiddaman			X)	break ;;
2696*906afcb8SAndy Fiddaman			esac
2697*906afcb8SAndy Fiddaman		done
2698*906afcb8SAndy Fiddaman		case $PACKAGEROOT in
2699*906afcb8SAndy Fiddaman		//*)	d=/ ;;
2700*906afcb8SAndy Fiddaman		*)	d= ;;
2701*906afcb8SAndy Fiddaman		esac
2702*906afcb8SAndy Fiddaman		case $1 in
2703*906afcb8SAndy Fiddaman		home)	k=1 ;;
2704*906afcb8SAndy Fiddaman		*)	k=0 ;;
2705*906afcb8SAndy Fiddaman		esac
2706*906afcb8SAndy Fiddaman		for i
2707*906afcb8SAndy Fiddaman		do	case $i in
2708*906afcb8SAndy Fiddaman			'')	continue ;;
2709*906afcb8SAndy Fiddaman			esac
2710*906afcb8SAndy Fiddaman			d=$d/$i
2711*906afcb8SAndy Fiddaman			case $k in
2712*906afcb8SAndy Fiddaman			2)	k=1
2713*906afcb8SAndy Fiddaman				;;
2714*906afcb8SAndy Fiddaman			1)	k=0
2715*906afcb8SAndy Fiddaman				;;
2716*906afcb8SAndy Fiddaman			0)	case $i in
2717*906afcb8SAndy Fiddaman				arch)	k=2
2718*906afcb8SAndy Fiddaman					;;
2719*906afcb8SAndy Fiddaman				*)	if	packageroot $d
2720*906afcb8SAndy Fiddaman					then	PACKAGEROOT=$d
2721*906afcb8SAndy Fiddaman					fi
2722*906afcb8SAndy Fiddaman					;;
2723*906afcb8SAndy Fiddaman				esac
2724*906afcb8SAndy Fiddaman				;;
2725*906afcb8SAndy Fiddaman			esac
2726*906afcb8SAndy Fiddaman		done
2727*906afcb8SAndy Fiddaman		;;
2728*906afcb8SAndy Fiddaman	esac
2729*906afcb8SAndy Fiddaman	INITROOT=$PACKAGEROOT/src/cmd/INIT
2730*906afcb8SAndy Fiddaman	$show PACKAGEROOT=$PACKAGEROOT
2731*906afcb8SAndy Fiddaman	$show export PACKAGEROOT
2732*906afcb8SAndy Fiddaman	export PACKAGEROOT
2733*906afcb8SAndy Fiddaman
2734*906afcb8SAndy Fiddaman	# initialize the architecture environment
2735*906afcb8SAndy Fiddaman
2736*906afcb8SAndy Fiddaman	case $KEEP_HOSTTYPE in
2737*906afcb8SAndy Fiddaman	0)	hostinfo type
2738*906afcb8SAndy Fiddaman		HOSTTYPE=$_hostinfo_
2739*906afcb8SAndy Fiddaman		;;
2740*906afcb8SAndy Fiddaman	1)	_PACKAGE_HOSTTYPE_=$HOSTTYPE
2741*906afcb8SAndy Fiddaman		export _PACKAGE_HOSTTYPE_
2742*906afcb8SAndy Fiddaman		;;
2743*906afcb8SAndy Fiddaman	esac
2744*906afcb8SAndy Fiddaman	$show HOSTTYPE=$HOSTTYPE
2745*906afcb8SAndy Fiddaman	$show export HOSTTYPE
2746*906afcb8SAndy Fiddaman	export HOSTTYPE
2747*906afcb8SAndy Fiddaman	INSTALLROOT=$PACKAGEROOT/arch/$HOSTTYPE
2748*906afcb8SAndy Fiddaman	case $action in
2749*906afcb8SAndy Fiddaman	admin|install|make|read|remove|test|verify|view|write)
2750*906afcb8SAndy Fiddaman		;;
2751*906afcb8SAndy Fiddaman	*)	if	test ! -d $INSTALLROOT
2752*906afcb8SAndy Fiddaman		then	INSTALLROOT=$PACKAGEROOT
2753*906afcb8SAndy Fiddaman		fi
2754*906afcb8SAndy Fiddaman		;;
2755*906afcb8SAndy Fiddaman	esac
2756*906afcb8SAndy Fiddaman	$show INSTALLROOT=$INSTALLROOT
2757*906afcb8SAndy Fiddaman	$show export INSTALLROOT
2758*906afcb8SAndy Fiddaman	export INSTALLROOT
2759*906afcb8SAndy Fiddaman
2760*906afcb8SAndy Fiddaman	# check the basic package hierarchy
2761*906afcb8SAndy Fiddaman
2762*906afcb8SAndy Fiddaman	case $action in
2763*906afcb8SAndy Fiddaman	export|use)
2764*906afcb8SAndy Fiddaman		packageroot $PACKAGEROOT || {
2765*906afcb8SAndy Fiddaman			echo "$command: $PACKAGEROOT: invalid package root directory" >&2
2766*906afcb8SAndy Fiddaman			exit 1
2767*906afcb8SAndy Fiddaman		}
2768*906afcb8SAndy Fiddaman		case $KEEP_HOSTTYPE:$hosttype in
2769*906afcb8SAndy Fiddaman		0:?*)	if	test -d ${PACKAGEROOT:-.}/arch/$hosttype
2770*906afcb8SAndy Fiddaman			then	KEEP_HOSTTYPE=1
2771*906afcb8SAndy Fiddaman				HOSTTYPE=$hosttype
2772*906afcb8SAndy Fiddaman			else	echo "$command: $hosttype: package root not found" >&2
2773*906afcb8SAndy Fiddaman				exit 1
2774*906afcb8SAndy Fiddaman			fi
2775*906afcb8SAndy Fiddaman			;;
2776*906afcb8SAndy Fiddaman		esac
2777*906afcb8SAndy Fiddaman		;;
2778*906afcb8SAndy Fiddaman	*)	packageroot $PACKAGEROOT || {
2779*906afcb8SAndy Fiddaman			case $KEEP_PACKAGEROOT in
2780*906afcb8SAndy Fiddaman			1)	;;
2781*906afcb8SAndy Fiddaman			*)	echo "$command: $PACKAGEROOT: must be in the package root directory tree" >&2
2782*906afcb8SAndy Fiddaman				exit 1
2783*906afcb8SAndy Fiddaman				;;
2784*906afcb8SAndy Fiddaman			esac
2785*906afcb8SAndy Fiddaman		}
2786*906afcb8SAndy Fiddaman
2787*906afcb8SAndy Fiddaman		case $action in
2788*906afcb8SAndy Fiddaman		admin)	;;
2789*906afcb8SAndy Fiddaman		*)	for i in arch arch/$HOSTTYPE
2790*906afcb8SAndy Fiddaman			do	test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
2791*906afcb8SAndy Fiddaman			done
2792*906afcb8SAndy Fiddaman			for i in lib
2793*906afcb8SAndy Fiddaman			do	test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
2794*906afcb8SAndy Fiddaman			done
2795*906afcb8SAndy Fiddaman			;;
2796*906afcb8SAndy Fiddaman		esac
2797*906afcb8SAndy Fiddaman
2798*906afcb8SAndy Fiddaman		# no $INITROOT means INIT already installed elsewhere
2799*906afcb8SAndy Fiddaman
2800*906afcb8SAndy Fiddaman		if	test -d $INITROOT
2801*906afcb8SAndy Fiddaman		then
2802*906afcb8SAndy Fiddaman			# update the basic package commands
2803*906afcb8SAndy Fiddaman
2804*906afcb8SAndy Fiddaman			for i in execrate ignore mamprobe silent
2805*906afcb8SAndy Fiddaman			do	test -h $PACKAGEROOT/bin/$i 2>/dev/null ||
2806*906afcb8SAndy Fiddaman				case `ls -t $INITROOT/$i.sh $PACKAGEROOT/bin/$i 2>/dev/null` in
2807*906afcb8SAndy Fiddaman				"$INITROOT/$i.sh"*)
2808*906afcb8SAndy Fiddaman					note update $PACKAGEROOT/bin/$i
2809*906afcb8SAndy Fiddaman					shellmagic
2810*906afcb8SAndy Fiddaman					case $SHELLMAGIC in
2811*906afcb8SAndy Fiddaman					'')	$exec cp $INITROOT/$i.sh $PACKAGEROOT/bin/$i || exit
2812*906afcb8SAndy Fiddaman						;;
2813*906afcb8SAndy Fiddaman					*)	case $exec in
2814*906afcb8SAndy Fiddaman						'')	{
2815*906afcb8SAndy Fiddaman							echo "$SHELLMAGIC"
2816*906afcb8SAndy Fiddaman							cat $INITROOT/$i.sh
2817*906afcb8SAndy Fiddaman							} > $PACKAGEROOT/bin/$i || exit
2818*906afcb8SAndy Fiddaman							;;
2819*906afcb8SAndy Fiddaman						*)	echo "{
2820*906afcb8SAndy Fiddamanecho \"$SHELLMAGIC\"
2821*906afcb8SAndy Fiddamancat $INITROOT/$i.sh
2822*906afcb8SAndy Fiddaman} > $PACKAGEROOT/bin/$i"
2823*906afcb8SAndy Fiddaman							;;
2824*906afcb8SAndy Fiddaman						esac
2825*906afcb8SAndy Fiddaman						;;
2826*906afcb8SAndy Fiddaman					esac
2827*906afcb8SAndy Fiddaman					$exec chmod +x $PACKAGEROOT/bin/$i || exit
2828*906afcb8SAndy Fiddaman					;;
2829*906afcb8SAndy Fiddaman				esac
2830*906afcb8SAndy Fiddaman			done
2831*906afcb8SAndy Fiddaman		fi
2832*906afcb8SAndy Fiddaman		;;
2833*906afcb8SAndy Fiddaman	esac
2834*906afcb8SAndy Fiddaman	path=$PATH
2835*906afcb8SAndy Fiddaman	PATH=$INSTALLROOT/bin:$PACKAGEROOT/bin:$PATH
2836*906afcb8SAndy Fiddaman	checkcc
2837*906afcb8SAndy Fiddaman	PATH=$path
2838*906afcb8SAndy Fiddaman	case $cc in
2839*906afcb8SAndy Fiddaman	?*)	if	test -f $INITROOT/hello.c
2840*906afcb8SAndy Fiddaman		then
2841*906afcb8SAndy Fiddaman			# check if $CC (full path $cc) is a cross compiler
2842*906afcb8SAndy Fiddaman
2843*906afcb8SAndy Fiddaman			(
2844*906afcb8SAndy Fiddaman				cd /tmp || exit 3
2845*906afcb8SAndy Fiddaman				cp $INITROOT/hello.c pkg$$.c || exit 3
2846*906afcb8SAndy Fiddaman				$cc -o pkg$$.exe pkg$$.c > pkg$$.e 2>&1 || {
2847*906afcb8SAndy Fiddaman					if $cc -Dnew=old -o pkg$$.exe pkg$$.c > /dev/null 2>&1
2848*906afcb8SAndy Fiddaman					then	echo "$command: ${warn}$CC: must be a C compiler (not C++)" >&2
2849*906afcb8SAndy Fiddaman					else	cat pkg$$.e
2850*906afcb8SAndy Fiddaman						echo "$command: ${warn}$CC: failed to compile and link $INITROOT/hello.c -- is it a C compiler?" >&2
2851*906afcb8SAndy Fiddaman					fi
2852*906afcb8SAndy Fiddaman					exit 2
2853*906afcb8SAndy Fiddaman				}
2854*906afcb8SAndy Fiddaman				if ./pkg$$.exe >/dev/null 2>&1
2855*906afcb8SAndy Fiddaman				then	code=0
2856*906afcb8SAndy Fiddaman				else	code=1
2857*906afcb8SAndy Fiddaman				fi
2858*906afcb8SAndy Fiddaman				rm -f pkg$$.*
2859*906afcb8SAndy Fiddaman				exit $code
2860*906afcb8SAndy Fiddaman			)
2861*906afcb8SAndy Fiddaman			code=$?
2862*906afcb8SAndy Fiddaman			case $code in
2863*906afcb8SAndy Fiddaman			1)	CROSS=1 ;;
2864*906afcb8SAndy Fiddaman			esac
2865*906afcb8SAndy Fiddaman		fi
2866*906afcb8SAndy Fiddaman		;;
2867*906afcb8SAndy Fiddaman	esac
2868*906afcb8SAndy Fiddaman	EXECTYPE=$HOSTTYPE
2869*906afcb8SAndy Fiddaman	EXECROOT=$INSTALLROOT
2870*906afcb8SAndy Fiddaman	case $CROSS in
2871*906afcb8SAndy Fiddaman	0) 	# dll hackery -- why is this so complicated?
2872*906afcb8SAndy Fiddaman
2873*906afcb8SAndy Fiddaman		abi=
2874*906afcb8SAndy Fiddaman		case $HOSTTYPE in
2875*906afcb8SAndy Fiddaman		sgi.mips[0123456789]*)
2876*906afcb8SAndy Fiddaman			x=rld
2877*906afcb8SAndy Fiddaman			if	executable /lib32/$x || executable /lib64/$x
2878*906afcb8SAndy Fiddaman			then	case $INSTALLROOT in
2879*906afcb8SAndy Fiddaman				*/sgi.mips[0123456789]*)
2880*906afcb8SAndy Fiddaman					u=`echo $INSTALLROOT | sed -e 's,-[^-/]*$,,' -e 's,.$,,'`
2881*906afcb8SAndy Fiddaman					;;
2882*906afcb8SAndy Fiddaman				*)	u=
2883*906afcb8SAndy Fiddaman					;;
2884*906afcb8SAndy Fiddaman				esac
2885*906afcb8SAndy Fiddaman				for a in "n=2 v= l=" "n=3 v=N32 l=lib32" "n=4-n32 v=N32 l=lib32" "n=4 v=64 l=lib64"
2886*906afcb8SAndy Fiddaman				do	eval $a
2887*906afcb8SAndy Fiddaman					case $v in
2888*906afcb8SAndy Fiddaman					N32)	case $n:$HOSTTYPE in
2889*906afcb8SAndy Fiddaman						*-n32:*-n32)	;;
2890*906afcb8SAndy Fiddaman						*-n32:*)	continue ;;
2891*906afcb8SAndy Fiddaman						*:*-n32)	continue ;;
2892*906afcb8SAndy Fiddaman						esac
2893*906afcb8SAndy Fiddaman						;;
2894*906afcb8SAndy Fiddaman					esac
2895*906afcb8SAndy Fiddaman					case $l in
2896*906afcb8SAndy Fiddaman					?*)	if	executable ! /$l/$x
2897*906afcb8SAndy Fiddaman						then	continue
2898*906afcb8SAndy Fiddaman						fi
2899*906afcb8SAndy Fiddaman						;;
2900*906afcb8SAndy Fiddaman					esac
2901*906afcb8SAndy Fiddaman					case $u in
2902*906afcb8SAndy Fiddaman					'')	case $HOSTTYPE in
2903*906afcb8SAndy Fiddaman						sgi.mips$n|sgi.mips$n-*)
2904*906afcb8SAndy Fiddaman							abi="$abi 'd=$INSTALLROOT v=$v'"
2905*906afcb8SAndy Fiddaman							;;
2906*906afcb8SAndy Fiddaman						*)	continue
2907*906afcb8SAndy Fiddaman							;;
2908*906afcb8SAndy Fiddaman						esac
2909*906afcb8SAndy Fiddaman						;;
2910*906afcb8SAndy Fiddaman					*)	if	test -d $u$n
2911*906afcb8SAndy Fiddaman						then	abi="$abi 'd=$u$n v=$v'"
2912*906afcb8SAndy Fiddaman						fi
2913*906afcb8SAndy Fiddaman						;;
2914*906afcb8SAndy Fiddaman					esac
2915*906afcb8SAndy Fiddaman				done
2916*906afcb8SAndy Fiddaman			fi
2917*906afcb8SAndy Fiddaman			;;
2918*906afcb8SAndy Fiddaman		esac
2919*906afcb8SAndy Fiddaman		case $abi in
2920*906afcb8SAndy Fiddaman		'')	abi="'d=$INSTALLROOT v='" ;;
2921*906afcb8SAndy Fiddaman		esac
2922*906afcb8SAndy Fiddaman		p=0
2923*906afcb8SAndy Fiddaman		eval "
2924*906afcb8SAndy Fiddaman			for a in $abi
2925*906afcb8SAndy Fiddaman			do	eval \$a
2926*906afcb8SAndy Fiddaman				eval \"
2927*906afcb8SAndy Fiddaman					case \\\$LD_LIBRARY\${v}_PATH: in
2928*906afcb8SAndy Fiddaman					\\\$d/lib:*)
2929*906afcb8SAndy Fiddaman						;;
2930*906afcb8SAndy Fiddaman					*)	x=\\\$LD_LIBRARY\${v}_PATH
2931*906afcb8SAndy Fiddaman						case \\\$x in
2932*906afcb8SAndy Fiddaman						''|:*)	;;
2933*906afcb8SAndy Fiddaman						*)	x=:\\\$x ;;
2934*906afcb8SAndy Fiddaman						esac
2935*906afcb8SAndy Fiddaman						LD_LIBRARY\${v}_PATH=\$d/lib\\\$x
2936*906afcb8SAndy Fiddaman						export LD_LIBRARY\${v}_PATH
2937*906afcb8SAndy Fiddaman						p=1
2938*906afcb8SAndy Fiddaman						;;
2939*906afcb8SAndy Fiddaman					esac
2940*906afcb8SAndy Fiddaman				\"
2941*906afcb8SAndy Fiddaman			done
2942*906afcb8SAndy Fiddaman		"
2943*906afcb8SAndy Fiddaman		case $LD_LIBRARY_PATH in
2944*906afcb8SAndy Fiddaman		'')	;;
2945*906afcb8SAndy Fiddaman		*)	for d in $lib
2946*906afcb8SAndy Fiddaman			do	case $HOSTTYPE in
2947*906afcb8SAndy Fiddaman				*64)	if	test -d ${d}64
2948*906afcb8SAndy Fiddaman					then	d=${d}64
2949*906afcb8SAndy Fiddaman					fi
2950*906afcb8SAndy Fiddaman					;;
2951*906afcb8SAndy Fiddaman				esac
2952*906afcb8SAndy Fiddaman				case :$LD_LIBRARY_PATH: in
2953*906afcb8SAndy Fiddaman				*:$d:*)	;;
2954*906afcb8SAndy Fiddaman				*)	if	test -d $d
2955*906afcb8SAndy Fiddaman					then	LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$d
2956*906afcb8SAndy Fiddaman						p=1
2957*906afcb8SAndy Fiddaman					fi
2958*906afcb8SAndy Fiddaman					;;
2959*906afcb8SAndy Fiddaman				esac
2960*906afcb8SAndy Fiddaman			done
2961*906afcb8SAndy Fiddaman			;;
2962*906afcb8SAndy Fiddaman		esac
2963*906afcb8SAndy Fiddaman		case $p in
2964*906afcb8SAndy Fiddaman		1)	$show LD_LIBRARY_PATH=$LD_LIBRARY_PATH
2965*906afcb8SAndy Fiddaman			$show export LD_LIBRARY_PATH
2966*906afcb8SAndy Fiddaman			export LD_LIBRARY_PATH
2967*906afcb8SAndy Fiddaman			;;
2968*906afcb8SAndy Fiddaman		esac
2969*906afcb8SAndy Fiddaman		case $LIBPATH: in
2970*906afcb8SAndy Fiddaman		$INSTALLROOT/bin:$INSTALLROOT/lib:*)
2971*906afcb8SAndy Fiddaman			;;
2972*906afcb8SAndy Fiddaman		*)	case $LIBPATH in
2973*906afcb8SAndy Fiddaman			'')	LIBPATH=/usr/lib:/lib ;;
2974*906afcb8SAndy Fiddaman			esac
2975*906afcb8SAndy Fiddaman			LIBPATH=$INSTALLROOT/bin:$INSTALLROOT/lib:$LIBPATH
2976*906afcb8SAndy Fiddaman			$show LIBPATH=$LIBPATH
2977*906afcb8SAndy Fiddaman			$show export LIBPATH
2978*906afcb8SAndy Fiddaman			export LIBPATH
2979*906afcb8SAndy Fiddaman			;;
2980*906afcb8SAndy Fiddaman		esac
2981*906afcb8SAndy Fiddaman		case $SHLIB_PATH: in
2982*906afcb8SAndy Fiddaman		$INSTALLROOT/lib:*)
2983*906afcb8SAndy Fiddaman			;;
2984*906afcb8SAndy Fiddaman		*)	SHLIB_PATH=$INSTALLROOT/lib${SHLIB_PATH:+:$SHLIB_PATH}
2985*906afcb8SAndy Fiddaman			$show SHLIB_PATH=$SHLIB_PATH
2986*906afcb8SAndy Fiddaman			$show export SHLIB_PATH
2987*906afcb8SAndy Fiddaman			export SHLIB_PATH
2988*906afcb8SAndy Fiddaman			;;
2989*906afcb8SAndy Fiddaman		esac
2990*906afcb8SAndy Fiddaman		case $DYLD_LIBRARY_PATH: in
2991*906afcb8SAndy Fiddaman		$INSTALLROOT/lib:*)
2992*906afcb8SAndy Fiddaman			;;
2993*906afcb8SAndy Fiddaman		*)	DYLD_LIBRARY_PATH=$INSTALLROOT/lib${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}
2994*906afcb8SAndy Fiddaman			$show DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
2995*906afcb8SAndy Fiddaman			$show export DYLD_LIBRARY_PATH
2996*906afcb8SAndy Fiddaman			export DYLD_LIBRARY_PATH
2997*906afcb8SAndy Fiddaman			;;
2998*906afcb8SAndy Fiddaman		esac
2999*906afcb8SAndy Fiddaman		case $_RLD_ROOT in
3000*906afcb8SAndy Fiddaman		$INSTALLROOT/arch*)	;;
3001*906afcb8SAndy Fiddaman		':')	_RLD_ROOT=$INSTALLROOT/arch:/ ;;
3002*906afcb8SAndy Fiddaman		/|*:/)	_RLD_ROOT=$INSTALLROOT/arch:$_RLD_ROOT ;;
3003*906afcb8SAndy Fiddaman		*)	_RLD_ROOT=$INSTALLROOT/arch:$_RLD_ROOT:/ ;;
3004*906afcb8SAndy Fiddaman		esac
3005*906afcb8SAndy Fiddaman		$show _RLD_ROOT=$_RLD_ROOT
3006*906afcb8SAndy Fiddaman		$show export _RLD_ROOT
3007*906afcb8SAndy Fiddaman		export _RLD_ROOT
3008*906afcb8SAndy Fiddaman
3009*906afcb8SAndy Fiddaman		# now set up PATH
3010*906afcb8SAndy Fiddaman		#
3011*906afcb8SAndy Fiddaman		# NOTE: PACKAGEROOT==INSTALLROOT is possible for binary installations
3012*906afcb8SAndy Fiddaman
3013*906afcb8SAndy Fiddaman		case $PATH: in
3014*906afcb8SAndy Fiddaman		$PACKAGEROOT/bin:*)
3015*906afcb8SAndy Fiddaman			;;
3016*906afcb8SAndy Fiddaman		*)	PATH=$PACKAGEROOT/bin:$PATH
3017*906afcb8SAndy Fiddaman			;;
3018*906afcb8SAndy Fiddaman		esac
3019*906afcb8SAndy Fiddaman		case $PATH: in
3020*906afcb8SAndy Fiddaman		$INSTALLROOT/bin:*)
3021*906afcb8SAndy Fiddaman			;;
3022*906afcb8SAndy Fiddaman		*)	PATH=$INSTALLROOT/bin:$PATH
3023*906afcb8SAndy Fiddaman			;;
3024*906afcb8SAndy Fiddaman		esac
3025*906afcb8SAndy Fiddaman		$show PATH=$PATH
3026*906afcb8SAndy Fiddaman		$show export PATH
3027*906afcb8SAndy Fiddaman		export PATH
3028*906afcb8SAndy Fiddaman		;;
3029*906afcb8SAndy Fiddaman	*)	for i in package proto nmake
3030*906afcb8SAndy Fiddaman		do	if	onpath $i
3031*906afcb8SAndy Fiddaman			then	EXECROOT=`echo $_onpath_ | sed -e 's,//*[^/]*//*[^/]*$,,'`
3032*906afcb8SAndy Fiddaman				EXECTYPE=`echo $EXECROOT | sed -e 's,.*/,,'`
3033*906afcb8SAndy Fiddaman				break
3034*906afcb8SAndy Fiddaman			fi
3035*906afcb8SAndy Fiddaman		done
3036*906afcb8SAndy Fiddaman		case $HOSTTYPE in
3037*906afcb8SAndy Fiddaman		$EXECTYPE)
3038*906afcb8SAndy Fiddaman			OCC=$CC
3039*906afcb8SAndy Fiddaman			CC=cc
3040*906afcb8SAndy Fiddaman			hostinfo type
3041*906afcb8SAndy Fiddaman			EXECTYPE=$_hostinfo_
3042*906afcb8SAndy Fiddaman			case $HOSTTYPE in
3043*906afcb8SAndy Fiddaman			$EXECTYPE)
3044*906afcb8SAndy Fiddaman				echo "$command: $CC: seems to be a cross-compiler" >&2
3045*906afcb8SAndy Fiddaman				echo "$command: set HOSTTYPE to something other than the native $EXECTYPE" >&2
3046*906afcb8SAndy Fiddaman				exit 1
3047*906afcb8SAndy Fiddaman				;;
3048*906afcb8SAndy Fiddaman			esac
3049*906afcb8SAndy Fiddaman			;;
3050*906afcb8SAndy Fiddaman		esac
3051*906afcb8SAndy Fiddaman		$show EXECTYPE=$EXECTYPE
3052*906afcb8SAndy Fiddaman		$show export EXECTYPE
3053*906afcb8SAndy Fiddaman		export EXECTYPE
3054*906afcb8SAndy Fiddaman		;;
3055*906afcb8SAndy Fiddaman	esac
3056*906afcb8SAndy Fiddaman	$show EXECROOT=$EXECROOT
3057*906afcb8SAndy Fiddaman	$show export EXECROOT
3058*906afcb8SAndy Fiddaman	export EXECROOT
3059*906afcb8SAndy Fiddaman
3060*906afcb8SAndy Fiddaman	# use these if possible
3061*906afcb8SAndy Fiddaman
3062*906afcb8SAndy Fiddaman	OK=ok
3063*906afcb8SAndy Fiddaman	KSH=$EXECROOT/bin/ksh
3064*906afcb8SAndy Fiddaman	MAKE=nmake
3065*906afcb8SAndy Fiddaman	NMAKE=$EXECROOT/bin/$MAKE
3066*906afcb8SAndy Fiddaman	SUM=$EXECROOT/bin/sum
3067*906afcb8SAndy Fiddaman	TEE=$EXECROOT/bin/tee
3068*906afcb8SAndy Fiddaman
3069*906afcb8SAndy Fiddaman	# grab a decent default shell
3070*906afcb8SAndy Fiddaman
3071*906afcb8SAndy Fiddaman	case $KEEP_SHELL in
3072*906afcb8SAndy Fiddaman	0)	executable "$SHELL" || SHELL=
3073*906afcb8SAndy Fiddaman		case $SHELL in
3074*906afcb8SAndy Fiddaman		?*)	checksh $SHELL || SHELL= ;;
3075*906afcb8SAndy Fiddaman		esac
3076*906afcb8SAndy Fiddaman		case $SHELL in
3077*906afcb8SAndy Fiddaman		''|/bin/*|/usr/bin/*)
3078*906afcb8SAndy Fiddaman			case $SHELL in
3079*906afcb8SAndy Fiddaman			'')	SHELL=/bin/sh ;;
3080*906afcb8SAndy Fiddaman			esac
3081*906afcb8SAndy Fiddaman			for i in ksh sh bash
3082*906afcb8SAndy Fiddaman			do	if	onpath $i && checksh $_onpath_
3083*906afcb8SAndy Fiddaman				then	SHELL=$_onpath_
3084*906afcb8SAndy Fiddaman					break
3085*906afcb8SAndy Fiddaman				fi
3086*906afcb8SAndy Fiddaman			done
3087*906afcb8SAndy Fiddaman			;;
3088*906afcb8SAndy Fiddaman		*/*ksh)	if	executable $KSH
3089*906afcb8SAndy Fiddaman			then	SHELL=$KSH
3090*906afcb8SAndy Fiddaman			fi
3091*906afcb8SAndy Fiddaman			;;
3092*906afcb8SAndy Fiddaman		esac
3093*906afcb8SAndy Fiddaman		;;
3094*906afcb8SAndy Fiddaman	esac
3095*906afcb8SAndy Fiddaman
3096*906afcb8SAndy Fiddaman	# $SHELL must be /bin/sh compatible
3097*906afcb8SAndy Fiddaman
3098*906afcb8SAndy Fiddaman	case $SHELL in
3099*906afcb8SAndy Fiddaman	/bin/sh);;
3100*906afcb8SAndy Fiddaman	'')	SHELL=/bin/sh
3101*906afcb8SAndy Fiddaman		;;
3102*906afcb8SAndy Fiddaman	*)	$SHELL -c 'trap "exit 0" 0; exit 1' 2>/dev/null
3103*906afcb8SAndy Fiddaman		case $? in
3104*906afcb8SAndy Fiddaman		1)	SHELL=/bin/sh
3105*906afcb8SAndy Fiddaman			;;
3106*906afcb8SAndy Fiddaman		*)	# catch (our own) pipe/socket configuration mismatches
3107*906afcb8SAndy Fiddaman			$SHELL -c "date | $SHELL -c 'read x'"
3108*906afcb8SAndy Fiddaman			case $? in
3109*906afcb8SAndy Fiddaman			0)	;;
3110*906afcb8SAndy Fiddaman			*)	SHELL=/bin/sh ;;
3111*906afcb8SAndy Fiddaman			esac
3112*906afcb8SAndy Fiddaman			;;
3113*906afcb8SAndy Fiddaman		esac
3114*906afcb8SAndy Fiddaman		;;
3115*906afcb8SAndy Fiddaman	esac
3116*906afcb8SAndy Fiddaman	export SHELL
3117*906afcb8SAndy Fiddaman	$show SHELL=$SHELL
3118*906afcb8SAndy Fiddaman	$show export SHELL
3119*906afcb8SAndy Fiddaman	COSHELL=$SHELL
3120*906afcb8SAndy Fiddaman	export COSHELL
3121*906afcb8SAndy Fiddaman	$show COSHELL=$COSHELL
3122*906afcb8SAndy Fiddaman	$show export COSHELL
3123*906afcb8SAndy Fiddaman
3124*906afcb8SAndy Fiddaman	# tame the environment
3125*906afcb8SAndy Fiddaman
3126*906afcb8SAndy Fiddaman	case $action in
3127*906afcb8SAndy Fiddaman	use)	;;
3128*906afcb8SAndy Fiddaman	*)	ENV=
3129*906afcb8SAndy Fiddaman		ERROR_OPTIONS=
3130*906afcb8SAndy Fiddaman		export ENV ERROR_OPTIONS
3131*906afcb8SAndy Fiddaman		;;
3132*906afcb8SAndy Fiddaman	esac
3133*906afcb8SAndy Fiddaman
3134*906afcb8SAndy Fiddaman	# finalize the views
3135*906afcb8SAndy Fiddaman
3136*906afcb8SAndy Fiddaman	case $USER_VPATH in
3137*906afcb8SAndy Fiddaman	'')	case $VPATH in
3138*906afcb8SAndy Fiddaman		?*)	IFS=':'
3139*906afcb8SAndy Fiddaman			set '' $VPATH
3140*906afcb8SAndy Fiddaman			shift
3141*906afcb8SAndy Fiddaman			IFS=$ifs
3142*906afcb8SAndy Fiddaman			USER_VPATH=
3143*906afcb8SAndy Fiddaman			for i
3144*906afcb8SAndy Fiddaman			do	case $i in
3145*906afcb8SAndy Fiddaman				*/arch/$HOSTTYPE)	;;
3146*906afcb8SAndy Fiddaman				*/arch/*/*)		;;
3147*906afcb8SAndy Fiddaman				*/arch/*)		continue ;;
3148*906afcb8SAndy Fiddaman				esac
3149*906afcb8SAndy Fiddaman				if	packageroot $i
3150*906afcb8SAndy Fiddaman				then	case $USER_VPATH in
3151*906afcb8SAndy Fiddaman					'')	USER_VPATH=$i ;;
3152*906afcb8SAndy Fiddaman					?*)	USER_VPATH=$USER_VPATH:$i ;;
3153*906afcb8SAndy Fiddaman					esac
3154*906afcb8SAndy Fiddaman				fi
3155*906afcb8SAndy Fiddaman			done
3156*906afcb8SAndy Fiddaman		esac
3157*906afcb8SAndy Fiddaman		;;
3158*906afcb8SAndy Fiddaman	esac
3159*906afcb8SAndy Fiddaman	case $USER_VPATH in
3160*906afcb8SAndy Fiddaman	?*)	IFS=':'
3161*906afcb8SAndy Fiddaman		set '' $USER_VPATH
3162*906afcb8SAndy Fiddaman		shift
3163*906afcb8SAndy Fiddaman		IFS=$ifs
3164*906afcb8SAndy Fiddaman		USER_VPATH=
3165*906afcb8SAndy Fiddaman		USER_VPATH_CHAIN=
3166*906afcb8SAndy Fiddaman		p=$PACKAGEROOT
3167*906afcb8SAndy Fiddaman		for i
3168*906afcb8SAndy Fiddaman		do	case $i in
3169*906afcb8SAndy Fiddaman			''|$PACKAGEROOT|$INSTALLROOT)
3170*906afcb8SAndy Fiddaman				;;
3171*906afcb8SAndy Fiddaman			?*)	USER_VPATH=$USER_VPATH:$i
3172*906afcb8SAndy Fiddaman				USER_VPATH_CHAIN="$USER_VPATH_CHAIN $p $i"
3173*906afcb8SAndy Fiddaman				p=$i
3174*906afcb8SAndy Fiddaman				case $PROTOROOT in
3175*906afcb8SAndy Fiddaman				-)	executable $i/bin/mamake && PROTOROOT= ;;
3176*906afcb8SAndy Fiddaman				esac
3177*906afcb8SAndy Fiddaman				;;
3178*906afcb8SAndy Fiddaman			esac
3179*906afcb8SAndy Fiddaman		done
3180*906afcb8SAndy Fiddaman		;;
3181*906afcb8SAndy Fiddaman	esac
3182*906afcb8SAndy Fiddaman	;;
3183*906afcb8SAndy Fiddamanesac
3184*906afcb8SAndy Fiddaman
3185*906afcb8SAndy FiddamanPACKAGESRC=$PACKAGEROOT/lib/package
3186*906afcb8SAndy FiddamanPACKAGEBIN=$INSTALLROOT/lib/package
3187*906afcb8SAndy Fiddamancase $action:$run in
3188*906afcb8SAndy Fiddamanuse:-)	set '' $args
3189*906afcb8SAndy Fiddaman	shift
3190*906afcb8SAndy Fiddaman	case $# in
3191*906afcb8SAndy Fiddaman	0)	;;
3192*906afcb8SAndy Fiddaman	*)	shift ;;
3193*906afcb8SAndy Fiddaman	esac
3194*906afcb8SAndy Fiddaman	run="$@"
3195*906afcb8SAndy Fiddaman	;;
3196*906afcb8SAndy Fiddamanesac
3197*906afcb8SAndy Fiddaman
3198*906afcb8SAndy Fiddaman# HOSTTYPE specific package profile
3199*906afcb8SAndy Fiddaman
3200*906afcb8SAndy Fiddamanif	test -r $INSTALLROOT/lib/package/profile
3201*906afcb8SAndy Fiddamanthen	. $INSTALLROOT/lib/package/profile
3202*906afcb8SAndy Fiddamanfi
3203*906afcb8SAndy Fiddaman
3204*906afcb8SAndy Fiddaman# more cygwin hassles
3205*906afcb8SAndy Fiddaman
3206*906afcb8SAndy Fiddamancase $HOSTTYPE in
3207*906afcb8SAndy Fiddamancygwin.*)
3208*906afcb8SAndy Fiddaman	lose=
3209*906afcb8SAndy Fiddaman	case $CYGWIN in
3210*906afcb8SAndy Fiddaman	*nontsec*)
3211*906afcb8SAndy Fiddaman		lose=ntsec
3212*906afcb8SAndy Fiddaman		;;
3213*906afcb8SAndy Fiddaman	*ntsec*);;
3214*906afcb8SAndy Fiddaman	*)	exe=/tmp/pkg$$.exe
3215*906afcb8SAndy Fiddaman		rm -f $exe
3216*906afcb8SAndy Fiddaman		: > $exe
3217*906afcb8SAndy Fiddaman		if	test -x $exe
3218*906afcb8SAndy Fiddaman		then	lose=ntsec
3219*906afcb8SAndy Fiddaman		fi
3220*906afcb8SAndy Fiddaman		;;
3221*906afcb8SAndy Fiddaman	esac
3222*906afcb8SAndy Fiddaman	case $CYGWIN in
3223*906afcb8SAndy Fiddaman	*nobinmode*)
3224*906afcb8SAndy Fiddaman		case $lose in
3225*906afcb8SAndy Fiddaman		'')	lose=binmode ;;
3226*906afcb8SAndy Fiddaman		*)	lose="$lose binmode" ;;
3227*906afcb8SAndy Fiddaman		esac
3228*906afcb8SAndy Fiddaman		;;
3229*906afcb8SAndy Fiddaman	esac
3230*906afcb8SAndy Fiddaman	case $lose in
3231*906afcb8SAndy Fiddaman	?*)	echo "$command: $HOSTTYPE: export '$lose' in CYGWIN or languish in windows" >&2
3232*906afcb8SAndy Fiddaman		exit 1
3233*906afcb8SAndy Fiddaman		;;
3234*906afcb8SAndy Fiddaman	esac
3235*906afcb8SAndy Fiddaman	;;
3236*906afcb8SAndy Fiddamanesac
3237*906afcb8SAndy Fiddaman
3238*906afcb8SAndy Fiddaman# set up the view state
3239*906afcb8SAndy Fiddaman
3240*906afcb8SAndy FiddamanVIEW_bin=$INSTALLROOT VIEW_src=$PACKAGEROOT VIEW_all="$INSTALLROOT $PACKAGEROOT"
3241*906afcb8SAndy Fiddamanif	(vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN) >/dev/null 2>&1 &&
3242*906afcb8SAndy Fiddaman	 vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN
3243*906afcb8SAndy Fiddamanthen	$show vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN
3244*906afcb8SAndy Fiddamanelse	VPATH=$INSTALLROOT:$PACKAGEROOT$USER_VPATH
3245*906afcb8SAndy Fiddaman	$show VPATH=$VPATH
3246*906afcb8SAndy Fiddaman	$show export VPATH
3247*906afcb8SAndy Fiddaman	export VPATH
3248*906afcb8SAndy Fiddaman	IFS=':'
3249*906afcb8SAndy Fiddaman	set '' $VPATH
3250*906afcb8SAndy Fiddaman	shift
3251*906afcb8SAndy Fiddaman	IFS=$ifs
3252*906afcb8SAndy Fiddaman	for i
3253*906afcb8SAndy Fiddaman	do	case $i in
3254*906afcb8SAndy Fiddaman		*/arch/*/*)
3255*906afcb8SAndy Fiddaman			VIEW_src="$VIEW_src $i"
3256*906afcb8SAndy Fiddaman			;;
3257*906afcb8SAndy Fiddaman		*/arch/*)
3258*906afcb8SAndy Fiddaman			VIEW_bin="$VIEW_bin $i"
3259*906afcb8SAndy Fiddaman			;;
3260*906afcb8SAndy Fiddaman		*)
3261*906afcb8SAndy Fiddaman			VIEW_src="$VIEW_src $i"
3262*906afcb8SAndy Fiddaman			;;
3263*906afcb8SAndy Fiddaman		esac
3264*906afcb8SAndy Fiddaman		VIEW_all="$VIEW_all $i"
3265*906afcb8SAndy Fiddaman	done
3266*906afcb8SAndy Fiddamanfi
3267*906afcb8SAndy Fiddaman
3268*906afcb8SAndy Fiddaman# return 0 if arg in src|bin|all view
3269*906afcb8SAndy Fiddaman
3270*906afcb8SAndy Fiddamanview() # [test] [-|type] [src|bin|all] file
3271*906afcb8SAndy Fiddaman{
3272*906afcb8SAndy Fiddaman	case $1 in
3273*906afcb8SAndy Fiddaman	-[dfsx])_view_T_=$1; shift ;;
3274*906afcb8SAndy Fiddaman	*)	_view_T_=-f ;;
3275*906afcb8SAndy Fiddaman	esac
3276*906afcb8SAndy Fiddaman	case $1 in
3277*906afcb8SAndy Fiddaman	-)	_view_t_= ;;
3278*906afcb8SAndy Fiddaman	*)	_view_t_=$1 ;;
3279*906afcb8SAndy Fiddaman	esac
3280*906afcb8SAndy Fiddaman	shift
3281*906afcb8SAndy Fiddaman	case $1 in
3282*906afcb8SAndy Fiddaman	all)	shift; _view_v_=$VIEW_all ;;
3283*906afcb8SAndy Fiddaman	bin)	shift; _view_v_=$VIEW_bin ;;
3284*906afcb8SAndy Fiddaman	src)	shift; _view_v_=$VIEW_src ;;
3285*906afcb8SAndy Fiddaman	*)	_view_v_=$VIEW_all ;;
3286*906afcb8SAndy Fiddaman	esac
3287*906afcb8SAndy Fiddaman	case $1 in
3288*906afcb8SAndy Fiddaman	/*)	if	test $_view_T_ $1
3289*906afcb8SAndy Fiddaman		then	_view_=$1
3290*906afcb8SAndy Fiddaman			return 0
3291*906afcb8SAndy Fiddaman		fi
3292*906afcb8SAndy Fiddaman		;;
3293*906afcb8SAndy Fiddaman	*)	for _view_d_ in $_view_v_
3294*906afcb8SAndy Fiddaman		do	if	test $_view_T_ $_view_d_/$1
3295*906afcb8SAndy Fiddaman			then	_view_=$_view_d_/$1
3296*906afcb8SAndy Fiddaman				return 0
3297*906afcb8SAndy Fiddaman			fi
3298*906afcb8SAndy Fiddaman		done
3299*906afcb8SAndy Fiddaman		;;
3300*906afcb8SAndy Fiddaman	esac
3301*906afcb8SAndy Fiddaman	_view_=
3302*906afcb8SAndy Fiddaman	case $_view_t_ in
3303*906afcb8SAndy Fiddaman	?*)	echo $command: $1: $_view_t_ not found >&2 ;;
3304*906afcb8SAndy Fiddaman	esac
3305*906afcb8SAndy Fiddaman	return 1
3306*906afcb8SAndy Fiddaman}
3307*906afcb8SAndy Fiddaman
3308*906afcb8SAndy Fiddaman# determine the package and targets
3309*906afcb8SAndy Fiddaman
3310*906afcb8SAndy Fiddamancase $action in
3311*906afcb8SAndy Fiddamanadmin)	case $admin_action in
3312*906afcb8SAndy Fiddaman	results)action=$admin_action
3313*906afcb8SAndy Fiddaman		set '' $admin_args
3314*906afcb8SAndy Fiddaman		shift;shift
3315*906afcb8SAndy Fiddaman		admin_args="admin $*"
3316*906afcb8SAndy Fiddaman		case $admin_on in
3317*906afcb8SAndy Fiddaman		'')	target=$admin_args ;;
3318*906afcb8SAndy Fiddaman		*)	target="on $admin_on $admin_args" ;;
3319*906afcb8SAndy Fiddaman		esac
3320*906afcb8SAndy Fiddaman		;;
3321*906afcb8SAndy Fiddaman	esac
3322*906afcb8SAndy Fiddaman	;;
3323*906afcb8SAndy Fiddamanrelease)set '' $args
3324*906afcb8SAndy Fiddaman	target=
3325*906afcb8SAndy Fiddaman	while	:
3326*906afcb8SAndy Fiddaman	do	shift
3327*906afcb8SAndy Fiddaman		case $1 in
3328*906afcb8SAndy Fiddaman		-|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
3329*906afcb8SAndy Fiddaman			target="$target $1"
3330*906afcb8SAndy Fiddaman			;;
3331*906afcb8SAndy Fiddaman		*)	break
3332*906afcb8SAndy Fiddaman			;;
3333*906afcb8SAndy Fiddaman		esac
3334*906afcb8SAndy Fiddaman	done
3335*906afcb8SAndy Fiddaman	package=$*
3336*906afcb8SAndy Fiddaman	;;
3337*906afcb8SAndy Fiddamansetup)	# { update read } with optional (bin|fun|include|lib) symlinks
3338*906afcb8SAndy Fiddaman	# flat option sets up { bin fun include lib } symlinks from
3339*906afcb8SAndy Fiddaman	# $INSTALLROOT to $PACKAGEROOT
3340*906afcb8SAndy Fiddaman
3341*906afcb8SAndy Fiddaman	# . is the package root
3342*906afcb8SAndy Fiddaman
3343*906afcb8SAndy Fiddaman	set '' $args
3344*906afcb8SAndy Fiddaman	shift
3345*906afcb8SAndy Fiddaman	types=
3346*906afcb8SAndy Fiddaman	url=
3347*906afcb8SAndy Fiddaman	while	:
3348*906afcb8SAndy Fiddaman	do	case $# in
3349*906afcb8SAndy Fiddaman		0)	break ;;
3350*906afcb8SAndy Fiddaman		esac
3351*906afcb8SAndy Fiddaman		case $1 in
3352*906afcb8SAndy Fiddaman		--)	shift
3353*906afcb8SAndy Fiddaman			break
3354*906afcb8SAndy Fiddaman			;;
3355*906afcb8SAndy Fiddaman		flat)	flat=1 # backwards compatibility -- documentation dropped
3356*906afcb8SAndy Fiddaman			;;
3357*906afcb8SAndy Fiddaman		*://*|*.url)
3358*906afcb8SAndy Fiddaman			url=$1
3359*906afcb8SAndy Fiddaman			shift
3360*906afcb8SAndy Fiddaman			break
3361*906afcb8SAndy Fiddaman			;;
3362*906afcb8SAndy Fiddaman		*)	types="$types $1"
3363*906afcb8SAndy Fiddaman			;;
3364*906afcb8SAndy Fiddaman		esac
3365*906afcb8SAndy Fiddaman		shift
3366*906afcb8SAndy Fiddaman	done
3367*906afcb8SAndy Fiddaman	if	test ! -d $PACKAGEROOT/lib/package/tgz
3368*906afcb8SAndy Fiddaman	then	$exec mkdir -p $PACKAGEROOT/lib/package/tgz || exit
3369*906afcb8SAndy Fiddaman	fi
3370*906afcb8SAndy Fiddaman	case " $types " in
3371*906afcb8SAndy Fiddaman	*" source "*)
3372*906afcb8SAndy Fiddaman		case " $* " in
3373*906afcb8SAndy Fiddaman		'  ')	;;
3374*906afcb8SAndy Fiddaman		*" INIT "*)
3375*906afcb8SAndy Fiddaman			;;
3376*906afcb8SAndy Fiddaman		*)	view - all src/cmd/INIT ||
3377*906afcb8SAndy Fiddaman			set INIT "$@"
3378*906afcb8SAndy Fiddaman			;;
3379*906afcb8SAndy Fiddaman		esac
3380*906afcb8SAndy Fiddaman		;;
3381*906afcb8SAndy Fiddaman	esac
3382*906afcb8SAndy Fiddaman	packages=`$0 $global authorize "$authorize" password "$password" update setup $types $url "$@" PACKAGEROOT=$PACKAGEROOT`
3383*906afcb8SAndy Fiddaman	case $packages in
3384*906afcb8SAndy Fiddaman	?*)	$0 $global read $packages PACKAGEROOT=$PACKAGEROOT
3385*906afcb8SAndy Fiddaman	esac
3386*906afcb8SAndy Fiddaman	exit
3387*906afcb8SAndy Fiddaman	;;
3388*906afcb8SAndy Fiddaman*)	package=
3389*906afcb8SAndy Fiddaman	target=
3390*906afcb8SAndy Fiddaman	set '' $args
3391*906afcb8SAndy Fiddaman	while	:
3392*906afcb8SAndy Fiddaman	do	shift
3393*906afcb8SAndy Fiddaman		case $# in
3394*906afcb8SAndy Fiddaman		0)	break ;;
3395*906afcb8SAndy Fiddaman		esac
3396*906afcb8SAndy Fiddaman		case $1 in
3397*906afcb8SAndy Fiddaman		''|-)	target="$target $package"
3398*906afcb8SAndy Fiddaman			package=
3399*906afcb8SAndy Fiddaman			;;
3400*906afcb8SAndy Fiddaman		*)	if	view - src "lib/package/$1.pkg"
3401*906afcb8SAndy Fiddaman			then	package="$package $1"
3402*906afcb8SAndy Fiddaman			else	target="$target $package $1"
3403*906afcb8SAndy Fiddaman				package=
3404*906afcb8SAndy Fiddaman			fi
3405*906afcb8SAndy Fiddaman			;;
3406*906afcb8SAndy Fiddaman		esac
3407*906afcb8SAndy Fiddaman	done
3408*906afcb8SAndy Fiddaman	;;
3409*906afcb8SAndy Fiddamanesac
3410*906afcb8SAndy Fiddaman
3411*906afcb8SAndy Fiddaman# flatten -- assumes symlink support
3412*906afcb8SAndy Fiddaman
3413*906afcb8SAndy Fiddamancase $flat in
3414*906afcb8SAndy Fiddaman1)	case $action in
3415*906afcb8SAndy Fiddaman	make|read|setup|update|use|view)
3416*906afcb8SAndy Fiddaman		if	test ! -d $INSTALLROOT
3417*906afcb8SAndy Fiddaman		then	$exec mkdir -p $INSTALLROOT || exit
3418*906afcb8SAndy Fiddaman		fi
3419*906afcb8SAndy Fiddaman		for i in bin include lib fun man share
3420*906afcb8SAndy Fiddaman		do	if	test ! -d $INSTALLROOT/../../$i
3421*906afcb8SAndy Fiddaman			then	$exec mkdir $INSTALLROOT/../../$i
3422*906afcb8SAndy Fiddaman			fi
3423*906afcb8SAndy Fiddaman			if	test ! -d $INSTALLROOT/$i
3424*906afcb8SAndy Fiddaman			then	if	test ! -h $INSTALLROOT/$i
3425*906afcb8SAndy Fiddaman				then	$exec ln -s ../../$i $INSTALLROOT/$i
3426*906afcb8SAndy Fiddaman				fi
3427*906afcb8SAndy Fiddaman			elif	test ! -h $INSTALLROOT/$i
3428*906afcb8SAndy Fiddaman			then	for x in $INSTALLROOT/$i/.[a-z]* $INSTALLROOT/$i/*
3429*906afcb8SAndy Fiddaman				do	if	test -f $x -o -d $x
3430*906afcb8SAndy Fiddaman					then	if	test ! -d $INSTALLROOT/$i/$x || test ! -d $INSTALLROOT/../../$i/$x
3431*906afcb8SAndy Fiddaman						then	$exec mv $x $INSTALLROOT/../../$i
3432*906afcb8SAndy Fiddaman						fi
3433*906afcb8SAndy Fiddaman					fi
3434*906afcb8SAndy Fiddaman				done
3435*906afcb8SAndy Fiddaman				$exec rm -rf $INSTALLROOT/$i
3436*906afcb8SAndy Fiddaman				$exec ln -s ../../$i $INSTALLROOT/$i
3437*906afcb8SAndy Fiddaman			fi
3438*906afcb8SAndy Fiddaman		done
3439*906afcb8SAndy Fiddaman		;;
3440*906afcb8SAndy Fiddaman	esac
3441*906afcb8SAndy Fiddaman	;;
3442*906afcb8SAndy Fiddamanesac
3443*906afcb8SAndy Fiddaman
3444*906afcb8SAndy Fiddaman# check that cmd args are up to date a.out's
3445*906afcb8SAndy Fiddaman
3446*906afcb8SAndy Fiddamancheckaout()	# cmd ...
3447*906afcb8SAndy Fiddaman{
3448*906afcb8SAndy Fiddaman	case $PROTOROOT in
3449*906afcb8SAndy Fiddaman	-)	PROTOROOT=
3450*906afcb8SAndy Fiddaman		case $* in
3451*906afcb8SAndy Fiddaman		ratz)	if	test -f $INITROOT/ratz.c -a -w $PACKAGEROOT
3452*906afcb8SAndy Fiddaman			then	test -f $INITROOT/hello.c || {
3453*906afcb8SAndy Fiddaman					cat > $INITROOT/hello.c <<'!'
3454*906afcb8SAndy Fiddaman#ifndef printf
3455*906afcb8SAndy Fiddaman#include <stdio.h>
3456*906afcb8SAndy Fiddaman#endif
3457*906afcb8SAndy Fiddamanint main() { int new = 0; printf("hello world\n"); return new;}
3458*906afcb8SAndy Fiddaman!
3459*906afcb8SAndy Fiddaman				}
3460*906afcb8SAndy Fiddaman				test -f $INITROOT/p.c || {
3461*906afcb8SAndy Fiddaman					cat > $INITROOT/p.c <<'!'
3462*906afcb8SAndy Fiddaman/*
3463*906afcb8SAndy Fiddaman * small test for prototyping cc
3464*906afcb8SAndy Fiddaman */
3465*906afcb8SAndy Fiddaman
3466*906afcb8SAndy Fiddamanint main(int argc, char** argv) { return argc || argv; }
3467*906afcb8SAndy Fiddaman!
3468*906afcb8SAndy Fiddaman				}
3469*906afcb8SAndy Fiddaman			fi
3470*906afcb8SAndy Fiddaman			;;
3471*906afcb8SAndy Fiddaman		esac
3472*906afcb8SAndy Fiddaman		test -f $INITROOT/hello.c -a -f $INITROOT/p.c -a -w $PACKAGEROOT || {
3473*906afcb8SAndy Fiddaman			for i
3474*906afcb8SAndy Fiddaman			do	onpath $i || {
3475*906afcb8SAndy Fiddaman					echo "$command: $i: command not found" >&2
3476*906afcb8SAndy Fiddaman					return 1
3477*906afcb8SAndy Fiddaman				}
3478*906afcb8SAndy Fiddaman			done
3479*906afcb8SAndy Fiddaman			return 0
3480*906afcb8SAndy Fiddaman		}
3481*906afcb8SAndy Fiddaman		case $cc in
3482*906afcb8SAndy Fiddaman		'')	_PACKAGE_cc=0
3483*906afcb8SAndy Fiddaman			;;
3484*906afcb8SAndy Fiddaman		*)	_PACKAGE_cc=1
3485*906afcb8SAndy Fiddaman			test -f $INITROOT/hello.c -a -f $INITROOT/p.c || {
3486*906afcb8SAndy Fiddaman				echo "$command: $INITROOT: INIT package source not found" >&2
3487*906afcb8SAndy Fiddaman				return 1
3488*906afcb8SAndy Fiddaman			}
3489*906afcb8SAndy Fiddaman			executable $INSTALLROOT/bin/nmake || {
3490*906afcb8SAndy Fiddaman				# check for prototyping cc
3491*906afcb8SAndy Fiddaman				# NOTE: proto.c must be K&R compatible
3492*906afcb8SAndy Fiddaman
3493*906afcb8SAndy Fiddaman				$CC -c $INITROOT/p.c >/dev/null 2>&1
3494*906afcb8SAndy Fiddaman				c=$?
3495*906afcb8SAndy Fiddaman				rm -f p.*
3496*906afcb8SAndy Fiddaman				test 0 != "$c" && {
3497*906afcb8SAndy Fiddaman					checkaout proto || return
3498*906afcb8SAndy Fiddaman					PROTOROOT=$PACKAGEROOT/proto
3499*906afcb8SAndy Fiddaman					$show PROTOROOT=$PACKAGEROOT/proto
3500*906afcb8SAndy Fiddaman					export PROTOROOT
3501*906afcb8SAndy Fiddaman					INITPROTO=$PROTOROOT/src/cmd/INIT
3502*906afcb8SAndy Fiddaman					note proto convert $PACKAGEROOT/src into $PROTOROOT/src
3503*906afcb8SAndy Fiddaman					if	test -d $PACKAGEROOT/src/cmd/nmake
3504*906afcb8SAndy Fiddaman					then	dirs="src/cmd/INIT src/lib/libast src/lib/libardir src/lib/libcoshell src/lib/libpp src/cmd/probe src/cmd/cpp src/cmd/nmake"
3505*906afcb8SAndy Fiddaman					else	dirs="src"
3506*906afcb8SAndy Fiddaman					fi
3507*906afcb8SAndy Fiddaman					(
3508*906afcb8SAndy Fiddaman						if	test -f $PROTOROOT/UPDATE
3509*906afcb8SAndy Fiddaman						then	newer="-newer $PROTOROOT/UPDATE"
3510*906afcb8SAndy Fiddaman						else	newer=""
3511*906afcb8SAndy Fiddaman						fi
3512*906afcb8SAndy Fiddaman						case $exec in
3513*906afcb8SAndy Fiddaman						'')	cd $PACKAGEROOT
3514*906afcb8SAndy Fiddaman							find $dirs -name '*.[CcHh]' $newer -print | proto -v -L - -C proto
3515*906afcb8SAndy Fiddaman							;;
3516*906afcb8SAndy Fiddaman						*)	$exec cd $PACKAGEROOT
3517*906afcb8SAndy Fiddaman							$exec "find $dirs -name '*.[CcHh]' $newer -print | proto -L - -C proto"
3518*906afcb8SAndy Fiddaman							;;
3519*906afcb8SAndy Fiddaman						esac
3520*906afcb8SAndy Fiddaman						$exec touch $PROTOROOT/UPDATE
3521*906afcb8SAndy Fiddaman					)
3522*906afcb8SAndy Fiddaman					if	(vpath $INSTALLROOT - $INSTALLROOT $PROTOROOT $PROTOROOT $PACKAGEROOT) >/dev/null 2>&1 &&
3523*906afcb8SAndy Fiddaman						 vpath $INSTALLROOT - $INSTALLROOT $PROTOROOT $PROTOROOT $PACKAGEROOT
3524*906afcb8SAndy Fiddaman					then	$show vpath $INSTALLROOT $PROTOROOT $PROTOROOT $PACKAGEROOT $USER_VPATH_CHAIN
3525*906afcb8SAndy Fiddaman					else	VPATH=$INSTALLROOT:$PROTOROOT:$PACKAGEROOT$USER_VPATH
3526*906afcb8SAndy Fiddaman						$show VPATH=$VPATH
3527*906afcb8SAndy Fiddaman						export VPATH
3528*906afcb8SAndy Fiddaman					fi
3529*906afcb8SAndy Fiddaman				}
3530*906afcb8SAndy Fiddaman			}
3531*906afcb8SAndy Fiddaman			for i in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
3532*906afcb8SAndy Fiddaman			do	test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || return
3533*906afcb8SAndy Fiddaman			done
3534*906afcb8SAndy Fiddaman			;;
3535*906afcb8SAndy Fiddaman		esac
3536*906afcb8SAndy Fiddaman		;;
3537*906afcb8SAndy Fiddaman	esac
3538*906afcb8SAndy Fiddaman	case $_PACKAGE_cc in
3539*906afcb8SAndy Fiddaman	'')	case $cc in
3540*906afcb8SAndy Fiddaman		'')	_PACKAGE_cc=0 ;;
3541*906afcb8SAndy Fiddaman		*)	_PACKAGE_cc=1 ;;
3542*906afcb8SAndy Fiddaman		esac
3543*906afcb8SAndy Fiddaman		;;
3544*906afcb8SAndy Fiddaman	esac
3545*906afcb8SAndy Fiddaman	for i
3546*906afcb8SAndy Fiddaman	do	eval j=\$_PACKAGE_AOUT_$i
3547*906afcb8SAndy Fiddaman		case $j in
3548*906afcb8SAndy Fiddaman		'')	eval _PACKAGE_AOUT_$i=1 ;;
3549*906afcb8SAndy Fiddaman		*)	continue ;;
3550*906afcb8SAndy Fiddaman		esac
3551*906afcb8SAndy Fiddaman		k=$_PACKAGE_cc
3552*906afcb8SAndy Fiddaman		if	test -f $INITROOT/$i.c
3553*906afcb8SAndy Fiddaman		then	k=${k}1
3554*906afcb8SAndy Fiddaman		else	k=${k}0
3555*906afcb8SAndy Fiddaman		fi
3556*906afcb8SAndy Fiddaman		if	executable $EXECROOT/bin/$i
3557*906afcb8SAndy Fiddaman		then	k=${k}1
3558*906afcb8SAndy Fiddaman		else	k=${k}0
3559*906afcb8SAndy Fiddaman		fi
3560*906afcb8SAndy Fiddaman		: $k : compiler : source : binary :
3561*906afcb8SAndy Fiddaman		case $k in
3562*906afcb8SAndy Fiddaman		*00)	view - bin/$i && continue ;;
3563*906afcb8SAndy Fiddaman		esac
3564*906afcb8SAndy Fiddaman		case $k in
3565*906afcb8SAndy Fiddaman		000)	echo "$command: $i: not found: download the INIT package $HOSTTYPE binary to continue" >&2
3566*906afcb8SAndy Fiddaman			return 1
3567*906afcb8SAndy Fiddaman			;;
3568*906afcb8SAndy Fiddaman		010)	echo "$command: $i: not found: set CC=C-compiler or download the INIT package $HOSTTYPE binary to continue" >&2
3569*906afcb8SAndy Fiddaman			return 1
3570*906afcb8SAndy Fiddaman			;;
3571*906afcb8SAndy Fiddaman		100)	echo "$command: $i: not found: download the INIT package source or $HOSTTYPE binary to continue" >&2
3572*906afcb8SAndy Fiddaman			return 1
3573*906afcb8SAndy Fiddaman			;;
3574*906afcb8SAndy Fiddaman		110)	case $CROSS in
3575*906afcb8SAndy Fiddaman			1)	echo "$command: $i: not found: make the local $EXECTYPE binary package before $HOSTTYPE" >&2
3576*906afcb8SAndy Fiddaman				return 1
3577*906afcb8SAndy Fiddaman				;;
3578*906afcb8SAndy Fiddaman			esac
3579*906afcb8SAndy Fiddaman			;;
3580*906afcb8SAndy Fiddaman		?01)	: accept binary
3581*906afcb8SAndy Fiddaman			continue
3582*906afcb8SAndy Fiddaman			;;
3583*906afcb8SAndy Fiddaman		011)	: accept binary
3584*906afcb8SAndy Fiddaman			continue
3585*906afcb8SAndy Fiddaman			;;
3586*906afcb8SAndy Fiddaman		??1)	case $CROSS in
3587*906afcb8SAndy Fiddaman			1)	continue ;;
3588*906afcb8SAndy Fiddaman			esac
3589*906afcb8SAndy Fiddaman			;;
3590*906afcb8SAndy Fiddaman		esac
3591*906afcb8SAndy Fiddaman		case `ls -t $INITROOT/$i.c $INSTALLROOT/bin/$i 2>/dev/null` in
3592*906afcb8SAndy Fiddaman		"$INITROOT/$i.c"*)
3593*906afcb8SAndy Fiddaman			note update $INSTALLROOT/bin/$i
3594*906afcb8SAndy Fiddaman			if	test proto != "$i" && executable $INSTALLROOT/bin/proto
3595*906afcb8SAndy Fiddaman			then	case $exec in
3596*906afcb8SAndy Fiddaman				'')	$INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c || return ;;
3597*906afcb8SAndy Fiddaman				*)	$exec "$INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c" ;;
3598*906afcb8SAndy Fiddaman				esac
3599*906afcb8SAndy Fiddaman				$exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $i.c || return
3600*906afcb8SAndy Fiddaman				$exec rm -f $i.c
3601*906afcb8SAndy Fiddaman			else	if	test ! -d $INSTALLROOT/bin
3602*906afcb8SAndy Fiddaman				then	for j in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
3603*906afcb8SAndy Fiddaman					do	test -d $PACKAGEROOT/$j || $exec mkdir $PACKAGEROOT/$j || return
3604*906afcb8SAndy Fiddaman					done
3605*906afcb8SAndy Fiddaman				fi
3606*906afcb8SAndy Fiddaman				if	test '' != "$PROTOROOT" -a -f $INITPROTO/$i.c
3607*906afcb8SAndy Fiddaman				then	$exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITPROTO/$i.c || return
3608*906afcb8SAndy Fiddaman				else	$exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITROOT/$i.c || return
3609*906afcb8SAndy Fiddaman				fi
3610*906afcb8SAndy Fiddaman				case $i:$exec in
3611*906afcb8SAndy Fiddaman				proto:)	test -d $INSTALLROOT/include || mkdir $INSTALLROOT/include
3612*906afcb8SAndy Fiddaman					$INSTALLROOT/bin/proto -f /dev/null > $i.c
3613*906afcb8SAndy Fiddaman					cmp -s $i.c $INSTALLROOT/include/prototyped.h 2>/dev/null || cp $i.c $INSTALLROOT/include/prototyped.h
3614*906afcb8SAndy Fiddaman					rm $i.c
3615*906afcb8SAndy Fiddaman					;;
3616*906afcb8SAndy Fiddaman				esac
3617*906afcb8SAndy Fiddaman			fi
3618*906afcb8SAndy Fiddaman			test -f $i.o && $exec rm -f $i.o
3619*906afcb8SAndy Fiddaman			i=$PATH
3620*906afcb8SAndy Fiddaman			PATH=/bin
3621*906afcb8SAndy Fiddaman			PATH=$i
3622*906afcb8SAndy Fiddaman			;;
3623*906afcb8SAndy Fiddaman		esac
3624*906afcb8SAndy Fiddaman	done
3625*906afcb8SAndy Fiddaman	return 0
3626*906afcb8SAndy Fiddaman}
3627*906afcb8SAndy Fiddaman
3628*906afcb8SAndy Fiddaman# check package requirements against received packages
3629*906afcb8SAndy Fiddaman
3630*906afcb8SAndy Fiddamanrequirements() # source|binary [ package ]
3631*906afcb8SAndy Fiddaman{
3632*906afcb8SAndy Fiddaman	case $1 in
3633*906afcb8SAndy Fiddaman	binary)	r=$VIEW_BIN ;;
3634*906afcb8SAndy Fiddaman	source)	r=$VIEW_SRC ;;
3635*906afcb8SAndy Fiddaman	*)	r=$VIEW_ALL ;;
3636*906afcb8SAndy Fiddaman	esac
3637*906afcb8SAndy Fiddaman	shift
3638*906afcb8SAndy Fiddaman	case $1 in
3639*906afcb8SAndy Fiddaman	'')	x= ;;
3640*906afcb8SAndy Fiddaman	*)	x=$* ;;
3641*906afcb8SAndy Fiddaman	esac
3642*906afcb8SAndy Fiddaman	set ''
3643*906afcb8SAndy Fiddaman	for d in $r
3644*906afcb8SAndy Fiddaman	do	set "$@" $d/gen/*.ver
3645*906afcb8SAndy Fiddaman		case $x in
3646*906afcb8SAndy Fiddaman		'')	set "$@" $d/gen/*.req
3647*906afcb8SAndy Fiddaman			;;
3648*906afcb8SAndy Fiddaman		*)	for p in $x
3649*906afcb8SAndy Fiddaman			do	set "$@" $d/gen/$p.req
3650*906afcb8SAndy Fiddaman			done
3651*906afcb8SAndy Fiddaman			;;
3652*906afcb8SAndy Fiddaman		esac
3653*906afcb8SAndy Fiddaman	done
3654*906afcb8SAndy Fiddaman	shift
3655*906afcb8SAndy Fiddaman	e=0
3656*906afcb8SAndy Fiddaman	x=$*
3657*906afcb8SAndy Fiddaman	y=
3658*906afcb8SAndy Fiddaman	n=
3659*906afcb8SAndy Fiddaman	set ''
3660*906afcb8SAndy Fiddaman	for i in $x
3661*906afcb8SAndy Fiddaman	do	p=`echo $i | sed -e 's,.*/,,' -e 's,\....$,,'`
3662*906afcb8SAndy Fiddaman		if	test -f $i
3663*906afcb8SAndy Fiddaman		then	set "$@" $i
3664*906afcb8SAndy Fiddaman			y="$y $p"
3665*906afcb8SAndy Fiddaman		else	case $p in
3666*906afcb8SAndy Fiddaman			'*')	;;
3667*906afcb8SAndy Fiddaman			*)	n="$n $p" ;;
3668*906afcb8SAndy Fiddaman			esac
3669*906afcb8SAndy Fiddaman		fi
3670*906afcb8SAndy Fiddaman	done
3671*906afcb8SAndy Fiddaman	for i in $n
3672*906afcb8SAndy Fiddaman	do	case " $y " in
3673*906afcb8SAndy Fiddaman		*" $i "*)
3674*906afcb8SAndy Fiddaman			;;
3675*906afcb8SAndy Fiddaman		*)	echo "$command: $i: must read or write package" >&2
3676*906afcb8SAndy Fiddaman			e=1
3677*906afcb8SAndy Fiddaman			;;
3678*906afcb8SAndy Fiddaman		esac
3679*906afcb8SAndy Fiddaman	done
3680*906afcb8SAndy Fiddaman	case $e in
3681*906afcb8SAndy Fiddaman	1)	exit 1 ;;
3682*906afcb8SAndy Fiddaman	esac
3683*906afcb8SAndy Fiddaman	shift
3684*906afcb8SAndy Fiddaman	test 0 != "$#" && release=`sort -r "$@" | {
3685*906afcb8SAndy Fiddaman		q=
3686*906afcb8SAndy Fiddaman		e=0
3687*906afcb8SAndy Fiddaman		o=
3688*906afcb8SAndy Fiddaman		while	read p v r s
3689*906afcb8SAndy Fiddaman		do	q="$q
3690*906afcb8SAndy Fiddaman$v $r"
3691*906afcb8SAndy Fiddaman			case $p in
3692*906afcb8SAndy Fiddaman			$o)	continue ;;
3693*906afcb8SAndy Fiddaman			esac
3694*906afcb8SAndy Fiddaman			case $s in
3695*906afcb8SAndy Fiddaman			0)	e=1
3696*906afcb8SAndy Fiddaman				case $r in
3697*906afcb8SAndy Fiddaman				base)	echo "$command: base package $p.$v or newer required" >&2 ;;
3698*906afcb8SAndy Fiddaman				*)	echo "$command: delta package $p.$v.$r or newer required" >&2 ;;
3699*906afcb8SAndy Fiddaman				esac
3700*906afcb8SAndy Fiddaman				;;
3701*906afcb8SAndy Fiddaman			esac
3702*906afcb8SAndy Fiddaman			o=$p
3703*906afcb8SAndy Fiddaman		done
3704*906afcb8SAndy Fiddaman		case $e in
3705*906afcb8SAndy Fiddaman		0)	echo "$q" | sort | { read v r; read v r; echo $v; } ;;
3706*906afcb8SAndy Fiddaman		1)	echo ERROR ;;
3707*906afcb8SAndy Fiddaman		esac
3708*906afcb8SAndy Fiddaman	}`
3709*906afcb8SAndy Fiddaman	case $release in
3710*906afcb8SAndy Fiddaman	ERROR)	case $force in
3711*906afcb8SAndy Fiddaman		0)	exit 1 ;;
3712*906afcb8SAndy Fiddaman		esac
3713*906afcb8SAndy Fiddaman		;;
3714*906afcb8SAndy Fiddaman	?*)	eval `echo $release | sed -e 's,\(.*\)-\(.*\)-\(.*\),yy=\1 mm=\2 dd=\3,'`
3715*906afcb8SAndy Fiddaman		# slide back 4 months
3716*906afcb8SAndy Fiddaman		case $mm in
3717*906afcb8SAndy Fiddaman		01)	mm=09 dd=1 ;;
3718*906afcb8SAndy Fiddaman		02)	mm=10 dd=1 ;;
3719*906afcb8SAndy Fiddaman		03)	mm=11 dd=1 ;;
3720*906afcb8SAndy Fiddaman		04)	mm=12 dd=1 ;;
3721*906afcb8SAndy Fiddaman		05)	mm=01 dd=0 ;;
3722*906afcb8SAndy Fiddaman		06)	mm=02 dd=0 ;;
3723*906afcb8SAndy Fiddaman		07)	mm=03 dd=0 ;;
3724*906afcb8SAndy Fiddaman		08)	mm=04 dd=0 ;;
3725*906afcb8SAndy Fiddaman		09)	mm=05 dd=0 ;;
3726*906afcb8SAndy Fiddaman		10)	mm=06 dd=0 ;;
3727*906afcb8SAndy Fiddaman		11)	mm=07 dd=0 ;;
3728*906afcb8SAndy Fiddaman		12)	mm=08 dd=0 ;;
3729*906afcb8SAndy Fiddaman		esac
3730*906afcb8SAndy Fiddaman		case $dd in
3731*906afcb8SAndy Fiddaman		1)	yy=`expr $yy - 1` ;;
3732*906afcb8SAndy Fiddaman		esac
3733*906afcb8SAndy Fiddaman		release=$yy-$mm-01
3734*906afcb8SAndy Fiddaman		count=1
3735*906afcb8SAndy Fiddaman		lo=$release
3736*906afcb8SAndy Fiddaman		release="-f $release -r $count"
3737*906afcb8SAndy Fiddaman		;;
3738*906afcb8SAndy Fiddaman	esac
3739*906afcb8SAndy Fiddaman}
3740*906afcb8SAndy Fiddaman
3741*906afcb8SAndy Fiddaman# write ordered package prerequisite list to the standard output
3742*906afcb8SAndy Fiddaman
3743*906afcb8SAndy Fiddamanorder() # [ package ]
3744*906afcb8SAndy Fiddaman{
3745*906afcb8SAndy Fiddaman	_order_t_=lib/package/tgz
3746*906afcb8SAndy Fiddaman	case $action in
3747*906afcb8SAndy Fiddaman	binary)	_order_a_=.$HOSTTYPE ;;
3748*906afcb8SAndy Fiddaman	*)	_order_a_= ;;
3749*906afcb8SAndy Fiddaman	esac
3750*906afcb8SAndy Fiddaman	_order_n_=$#
3751*906afcb8SAndy Fiddaman	case $_order_n_ in
3752*906afcb8SAndy Fiddaman	0)	_order_p_=
3753*906afcb8SAndy Fiddaman		for _order_v_ in $VIEW_all
3754*906afcb8SAndy Fiddaman		do	for _order_f_ in $_order_v_/lib/package/*.pkg
3755*906afcb8SAndy Fiddaman			do	if	test -f $_order_f_
3756*906afcb8SAndy Fiddaman				then	_order_p_="$_order_p_ $_order_f_"
3757*906afcb8SAndy Fiddaman				fi
3758*906afcb8SAndy Fiddaman			done
3759*906afcb8SAndy Fiddaman		done
3760*906afcb8SAndy Fiddaman		set '' $_order_p_
3761*906afcb8SAndy Fiddaman		shift
3762*906afcb8SAndy Fiddaman	esac
3763*906afcb8SAndy Fiddaman	{
3764*906afcb8SAndy Fiddaman	if	test ratz != "$*"
3765*906afcb8SAndy Fiddaman	then	for _order_f_ in ratz INIT
3766*906afcb8SAndy Fiddaman		do	if	view -s - src $_order_t_/$_order_f_$_order_a_.tim
3767*906afcb8SAndy Fiddaman			then	echo $_order_f_ $_order_f_
3768*906afcb8SAndy Fiddaman			fi
3769*906afcb8SAndy Fiddaman		done
3770*906afcb8SAndy Fiddaman	fi
3771*906afcb8SAndy Fiddaman	for _order_f_
3772*906afcb8SAndy Fiddaman	do	while	:
3773*906afcb8SAndy Fiddaman		do	view - src $_order_f_ && break
3774*906afcb8SAndy Fiddaman			case $_order_f_ in
3775*906afcb8SAndy Fiddaman			*.pkg)	;;
3776*906afcb8SAndy Fiddaman			*)	_order_f_=$_order_f_.pkg; view - src $_order_f_ && break ;;
3777*906afcb8SAndy Fiddaman			esac
3778*906afcb8SAndy Fiddaman			case $_order_f_ in
3779*906afcb8SAndy Fiddaman			*/*)	;;
3780*906afcb8SAndy Fiddaman			*)	_order_f_=lib/package/$_order_f_; view - src $_order_f_ && break ;;
3781*906afcb8SAndy Fiddaman			esac
3782*906afcb8SAndy Fiddaman			echo "$command: $_order_f_: not a package" >&2
3783*906afcb8SAndy Fiddaman			continue 2
3784*906afcb8SAndy Fiddaman		done
3785*906afcb8SAndy Fiddaman		_order_f_=$_view_
3786*906afcb8SAndy Fiddaman		_order_p_=`echo $_order_f_ | sed -e 's,.*/,,' -e 's,\.pkg$,,'`
3787*906afcb8SAndy Fiddaman		case $_order_n_ in
3788*906afcb8SAndy Fiddaman		0)	view -s - src $_order_t_/$_order_p_$_order_a_.tim || continue ;;
3789*906afcb8SAndy Fiddaman		esac
3790*906afcb8SAndy Fiddaman		echo $_order_p_ $_order_p_
3791*906afcb8SAndy Fiddaman		case $_order_p_ in
3792*906afcb8SAndy Fiddaman		INIT|ratz)
3793*906afcb8SAndy Fiddaman			;;
3794*906afcb8SAndy Fiddaman		*)	echo INIT $_order_p_
3795*906afcb8SAndy Fiddaman			;;
3796*906afcb8SAndy Fiddaman		esac
3797*906afcb8SAndy Fiddaman		{
3798*906afcb8SAndy Fiddaman		req= req_sep=
3799*906afcb8SAndy Fiddaman		op=::
3800*906afcb8SAndy Fiddaman		while	read line
3801*906afcb8SAndy Fiddaman		do	IFS=' 	\\'
3802*906afcb8SAndy Fiddaman			set '' $line
3803*906afcb8SAndy Fiddaman			IFS=$ifs
3804*906afcb8SAndy Fiddaman			while	:
3805*906afcb8SAndy Fiddaman			do	shift
3806*906afcb8SAndy Fiddaman				case $# in
3807*906afcb8SAndy Fiddaman				0)	break ;;
3808*906afcb8SAndy Fiddaman				esac
3809*906afcb8SAndy Fiddaman				case $1 in
3810*906afcb8SAndy Fiddaman				:*:)	op=$1
3811*906afcb8SAndy Fiddaman					;;
3812*906afcb8SAndy Fiddaman				INIT|'$('*|*')')
3813*906afcb8SAndy Fiddaman					;;
3814*906afcb8SAndy Fiddaman				*)	case $op in
3815*906afcb8SAndy Fiddaman					:REQUIRES:)
3816*906afcb8SAndy Fiddaman						req="$req$req_sep$1"
3817*906afcb8SAndy Fiddaman						req_sep=" "
3818*906afcb8SAndy Fiddaman						;;
3819*906afcb8SAndy Fiddaman					esac
3820*906afcb8SAndy Fiddaman					;;
3821*906afcb8SAndy Fiddaman				esac
3822*906afcb8SAndy Fiddaman			done
3823*906afcb8SAndy Fiddaman		done
3824*906afcb8SAndy Fiddaman		for _order_i_ in $req
3825*906afcb8SAndy Fiddaman		do	if	view - src lib/package/$_order_i_.pkg
3826*906afcb8SAndy Fiddaman			then	case $_order_u_ in
3827*906afcb8SAndy Fiddaman				0)	view -s - src $_order_t_/$_order_i_$_order_a_.tim || continue ;;
3828*906afcb8SAndy Fiddaman				esac
3829*906afcb8SAndy Fiddaman				echo $_order_i_ $_order_i_; echo INIT $_order_i_; echo $_order_i_ $_order_p_
3830*906afcb8SAndy Fiddaman			fi
3831*906afcb8SAndy Fiddaman		done
3832*906afcb8SAndy Fiddaman		} < $_order_f_
3833*906afcb8SAndy Fiddaman	done
3834*906afcb8SAndy Fiddaman	} | tsort
3835*906afcb8SAndy Fiddaman}
3836*906afcb8SAndy Fiddaman
3837*906afcb8SAndy Fiddaman# generate the package component list in _components_
3838*906afcb8SAndy Fiddaman
3839*906afcb8SAndy Fiddamancomponents() # [ package ]
3840*906afcb8SAndy Fiddaman{
3841*906afcb8SAndy Fiddaman	_components_=
3842*906afcb8SAndy Fiddaman	for p
3843*906afcb8SAndy Fiddaman	do	case $p in
3844*906afcb8SAndy Fiddaman		'')	;;
3845*906afcb8SAndy Fiddaman		INIT)	case " $_components_ " in
3846*906afcb8SAndy Fiddaman			*" $p "*)	;;
3847*906afcb8SAndy Fiddaman			*)		_components_="$_components_ $p" ;;
3848*906afcb8SAndy Fiddaman			esac
3849*906afcb8SAndy Fiddaman			;;
3850*906afcb8SAndy Fiddaman		*)	if	view - src lib/package/$p.pkg
3851*906afcb8SAndy Fiddaman			then	p=$_view_
3852*906afcb8SAndy Fiddaman				op=::
3853*906afcb8SAndy Fiddaman				exec < $p
3854*906afcb8SAndy Fiddaman				while	read line
3855*906afcb8SAndy Fiddaman				do	IFS=' 	\\'
3856*906afcb8SAndy Fiddaman					set '' $line
3857*906afcb8SAndy Fiddaman					IFS=$ifs
3858*906afcb8SAndy Fiddaman					while	:
3859*906afcb8SAndy Fiddaman					do	shift
3860*906afcb8SAndy Fiddaman						case $# in
3861*906afcb8SAndy Fiddaman						0)	break ;;
3862*906afcb8SAndy Fiddaman						esac
3863*906afcb8SAndy Fiddaman						case $1 in
3864*906afcb8SAndy Fiddaman						:*:)	op=$1
3865*906afcb8SAndy Fiddaman							;;
3866*906afcb8SAndy Fiddaman						INIT|'$('*|*')')
3867*906afcb8SAndy Fiddaman							;;
3868*906afcb8SAndy Fiddaman						*)	case $op in
3869*906afcb8SAndy Fiddaman							:PACKAGE:)
3870*906afcb8SAndy Fiddaman								case " $_components_ " in
3871*906afcb8SAndy Fiddaman								*" $1 "*)	;;
3872*906afcb8SAndy Fiddaman								*)		_components_="$_components_ $1" ;;
3873*906afcb8SAndy Fiddaman								esac
3874*906afcb8SAndy Fiddaman								;;
3875*906afcb8SAndy Fiddaman							esac
3876*906afcb8SAndy Fiddaman							;;
3877*906afcb8SAndy Fiddaman						esac
3878*906afcb8SAndy Fiddaman					done
3879*906afcb8SAndy Fiddaman				done
3880*906afcb8SAndy Fiddaman				exec < /dev/null
3881*906afcb8SAndy Fiddaman			elif	test -d $PACKAGEROOT/src/cmd/$p -o -d $PACKAGEROOT/src/lib/$p
3882*906afcb8SAndy Fiddaman			then	_components_="$_components_ $p"
3883*906afcb8SAndy Fiddaman			else	echo "$command: $p: package or component not found" >&2
3884*906afcb8SAndy Fiddaman				exit 1
3885*906afcb8SAndy Fiddaman			fi
3886*906afcb8SAndy Fiddaman			;;
3887*906afcb8SAndy Fiddaman		esac
3888*906afcb8SAndy Fiddaman	done
3889*906afcb8SAndy Fiddaman}
3890*906afcb8SAndy Fiddaman
3891*906afcb8SAndy Fiddaman# list main environment values
3892*906afcb8SAndy Fiddaman
3893*906afcb8SAndy Fiddamanshowenv()
3894*906afcb8SAndy Fiddaman{
3895*906afcb8SAndy Fiddaman	case $1 in
3896*906afcb8SAndy Fiddaman	''|make)for __i__ in CC SHELL $env
3897*906afcb8SAndy Fiddaman		do	eval echo $__i__='$'$__i__
3898*906afcb8SAndy Fiddaman		done
3899*906afcb8SAndy Fiddaman		;;
3900*906afcb8SAndy Fiddaman	esac
3901*906afcb8SAndy Fiddaman}
3902*906afcb8SAndy Fiddaman
3903*906afcb8SAndy Fiddaman# capture command output
3904*906afcb8SAndy Fiddaman
3905*906afcb8SAndy Fiddamancapture() # file command ...
3906*906afcb8SAndy Fiddaman{
3907*906afcb8SAndy Fiddaman	case $make:$noexec in
3908*906afcb8SAndy Fiddaman	:)	case $action in
3909*906afcb8SAndy Fiddaman		install|make|view)
3910*906afcb8SAndy Fiddaman			o=$action
3911*906afcb8SAndy Fiddaman			;;
3912*906afcb8SAndy Fiddaman		*)	case $package in
3913*906afcb8SAndy Fiddaman			''|*' '*)
3914*906afcb8SAndy Fiddaman				o=$action
3915*906afcb8SAndy Fiddaman				;;
3916*906afcb8SAndy Fiddaman			*)	o=$package
3917*906afcb8SAndy Fiddaman				;;
3918*906afcb8SAndy Fiddaman			esac
3919*906afcb8SAndy Fiddaman			;;
3920*906afcb8SAndy Fiddaman		esac
3921*906afcb8SAndy Fiddaman		case $action in
3922*906afcb8SAndy Fiddaman		write)	d=$PACKAGESRC/gen ;;
3923*906afcb8SAndy Fiddaman		*)	d=$PACKAGEBIN/gen ;;
3924*906afcb8SAndy Fiddaman		esac
3925*906afcb8SAndy Fiddaman		test -d $d || $exec mkdir $d
3926*906afcb8SAndy Fiddaman		o=$d/$o
3927*906afcb8SAndy Fiddaman		case $o in
3928*906afcb8SAndy Fiddaman		$output)o=$o.out
3929*906afcb8SAndy Fiddaman			s=
3930*906afcb8SAndy Fiddaman			;;
3931*906afcb8SAndy Fiddaman		*)	output=$o
3932*906afcb8SAndy Fiddaman			if	test -f $o.old
3933*906afcb8SAndy Fiddaman			then	mv $o.old $o.out.1
3934*906afcb8SAndy Fiddaman				if	test -f $o.out
3935*906afcb8SAndy Fiddaman				then	mv $o.out $o.out.2
3936*906afcb8SAndy Fiddaman				fi
3937*906afcb8SAndy Fiddaman			elif	test -f $o.out
3938*906afcb8SAndy Fiddaman			then	for i in `ls -t $o.out.? 2>/dev/null`
3939*906afcb8SAndy Fiddaman				do	break
3940*906afcb8SAndy Fiddaman				done
3941*906afcb8SAndy Fiddaman				case $i in
3942*906afcb8SAndy Fiddaman				*.1)	i=2 ;;
3943*906afcb8SAndy Fiddaman				*.2)	i=3 ;;
3944*906afcb8SAndy Fiddaman				*.3)	i=4 ;;
3945*906afcb8SAndy Fiddaman				*.4)	i=5 ;;
3946*906afcb8SAndy Fiddaman				*.5)	i=6 ;;
3947*906afcb8SAndy Fiddaman				*.6)	i=7 ;;
3948*906afcb8SAndy Fiddaman				*.7)	i=8 ;;
3949*906afcb8SAndy Fiddaman				*.8)	i=9 ;;
3950*906afcb8SAndy Fiddaman				*)	i=1 ;;
3951*906afcb8SAndy Fiddaman				esac
3952*906afcb8SAndy Fiddaman				mv $o.out $o.out.$i
3953*906afcb8SAndy Fiddaman			fi
3954*906afcb8SAndy Fiddaman			o=$o.out
3955*906afcb8SAndy Fiddaman			: > $o
3956*906afcb8SAndy Fiddaman			note $action output captured in $o
3957*906afcb8SAndy Fiddaman			s="$command: $action start at `date` in $INSTALLROOT"
3958*906afcb8SAndy Fiddaman			case $quiet in
3959*906afcb8SAndy Fiddaman			0)	trap "echo \"$command: $action done  at \`date\`\" in $INSTALLROOT 2>&1 | \$TEE -a $o" 0 1 2 ;;
3960*906afcb8SAndy Fiddaman			*)	trap "echo \"$command: $action done  at \`date\`\" in $INSTALLROOT >> $o" 0 1 2 ;;
3961*906afcb8SAndy Fiddaman			esac
3962*906afcb8SAndy Fiddaman			;;
3963*906afcb8SAndy Fiddaman		esac
3964*906afcb8SAndy Fiddaman		case $quiet in
3965*906afcb8SAndy Fiddaman		0)	if	executable ! $TEE
3966*906afcb8SAndy Fiddaman			then	TEE=tee
3967*906afcb8SAndy Fiddaman			fi
3968*906afcb8SAndy Fiddaman			{
3969*906afcb8SAndy Fiddaman				case $s in
3970*906afcb8SAndy Fiddaman				?*)	echo "$s"  ;;
3971*906afcb8SAndy Fiddaman				esac
3972*906afcb8SAndy Fiddaman				showenv $action
3973*906afcb8SAndy Fiddaman				"$@"
3974*906afcb8SAndy Fiddaman			} < /dev/null 2>&1 | $TEE -a $o
3975*906afcb8SAndy Fiddaman			;;
3976*906afcb8SAndy Fiddaman		*)	{
3977*906afcb8SAndy Fiddaman				case $s in
3978*906afcb8SAndy Fiddaman				?*)	echo "$s"  ;;
3979*906afcb8SAndy Fiddaman				esac
3980*906afcb8SAndy Fiddaman				showenv $action
3981*906afcb8SAndy Fiddaman				"$@"
3982*906afcb8SAndy Fiddaman			} < /dev/null > $o 2>&1
3983*906afcb8SAndy Fiddaman			;;
3984*906afcb8SAndy Fiddaman		esac
3985*906afcb8SAndy Fiddaman		;;
3986*906afcb8SAndy Fiddaman	*)	$make "$@"
3987*906afcb8SAndy Fiddaman		;;
3988*906afcb8SAndy Fiddaman	esac
3989*906afcb8SAndy Fiddaman}
3990*906afcb8SAndy Fiddaman
3991*906afcb8SAndy Fiddamanpackage_install() # dest sum
3992*906afcb8SAndy Fiddaman{
3993*906afcb8SAndy Fiddaman	dest=$1 sum=$2
3994*906afcb8SAndy Fiddaman	ot=
3995*906afcb8SAndy Fiddaman	code=0
3996*906afcb8SAndy Fiddaman	sed -e '/ /!d' -e 's,[^ ]* ,,' -e 's, \(arch/[^/]*\)/, \1 ,' -e '/ arch\//!s,^[^ ]* [^ ]* [^ ]*,& .,' -e 's,/\([^ /]*\)$, \1,' $sum |
3997*906afcb8SAndy Fiddaman	while	read mode user group arch dir file
3998*906afcb8SAndy Fiddaman	do	case $flat:$arch in
3999*906afcb8SAndy Fiddaman		1:*|?:.)t=$dest/$dir ;;
4000*906afcb8SAndy Fiddaman		*)	t=$dest/$arch/$dir ;;
4001*906afcb8SAndy Fiddaman		esac
4002*906afcb8SAndy Fiddaman		case $t in
4003*906afcb8SAndy Fiddaman		$ot)	;;
4004*906afcb8SAndy Fiddaman		*)	if	test ! -d "$t"
4005*906afcb8SAndy Fiddaman			then	$exec mkdir -p "$t" || exit
4006*906afcb8SAndy Fiddaman			fi
4007*906afcb8SAndy Fiddaman			ot=$t
4008*906afcb8SAndy Fiddaman			;;
4009*906afcb8SAndy Fiddaman		esac
4010*906afcb8SAndy Fiddaman		case $file in
4011*906afcb8SAndy Fiddaman		?*)	case $arch in
4012*906afcb8SAndy Fiddaman			.)	f=$dir/$file ;;
4013*906afcb8SAndy Fiddaman			*)	f=$arch/$dir/$file ;;
4014*906afcb8SAndy Fiddaman			esac
4015*906afcb8SAndy Fiddaman			if	test -f "$f"
4016*906afcb8SAndy Fiddaman			then	t=$t/$file
4017*906afcb8SAndy Fiddaman				case $quiet in
4018*906afcb8SAndy Fiddaman				0)	echo "$t" ;;
4019*906afcb8SAndy Fiddaman				esac
4020*906afcb8SAndy Fiddaman				$exec cp -f "$f" "$t" || code=1
4021*906afcb8SAndy Fiddaman				$exec chmod $mode "$t" || code=1
4022*906afcb8SAndy Fiddaman			fi
4023*906afcb8SAndy Fiddaman			;;
4024*906afcb8SAndy Fiddaman		esac
4025*906afcb8SAndy Fiddaman	done
4026*906afcb8SAndy Fiddaman	return $code
4027*906afcb8SAndy Fiddaman}
4028*906afcb8SAndy Fiddaman
4029*906afcb8SAndy Fiddamanpackage_verify() # sum
4030*906afcb8SAndy Fiddaman{
4031*906afcb8SAndy Fiddaman	$exec $SUM -cp $1
4032*906afcb8SAndy Fiddaman}
4033*906afcb8SAndy Fiddaman
4034*906afcb8SAndy Fiddamanmake_recurse() # dir
4035*906afcb8SAndy Fiddaman{
4036*906afcb8SAndy Fiddaman	for _make_recurse_j in $makefiles
4037*906afcb8SAndy Fiddaman	do	if	view - $1/$_make_recurse_j
4038*906afcb8SAndy Fiddaman		then	return
4039*906afcb8SAndy Fiddaman		fi
4040*906afcb8SAndy Fiddaman	done
4041*906afcb8SAndy Fiddaman	if	test -d $1
4042*906afcb8SAndy Fiddaman	then	case $exec in
4043*906afcb8SAndy Fiddaman		'')	echo :MAKE: > $1/Makefile || exit ;;
4044*906afcb8SAndy Fiddaman		*)	$exec "echo :MAKE: > $1/Makefile" ;;
4045*906afcb8SAndy Fiddaman		esac
4046*906afcb8SAndy Fiddaman	fi
4047*906afcb8SAndy Fiddaman}
4048*906afcb8SAndy Fiddaman
4049*906afcb8SAndy Fiddamanget() # host path [ file size ]
4050*906afcb8SAndy Fiddaman{
4051*906afcb8SAndy Fiddaman	case $HURL in
4052*906afcb8SAndy Fiddaman	'')	HURL=.
4053*906afcb8SAndy Fiddaman		for i in wget lynx curl
4054*906afcb8SAndy Fiddaman		do	if	onpath $i
4055*906afcb8SAndy Fiddaman			then	HURL=$i
4056*906afcb8SAndy Fiddaman				break;
4057*906afcb8SAndy Fiddaman			fi
4058*906afcb8SAndy Fiddaman		done
4059*906afcb8SAndy Fiddaman		AUTHORIZE="User-Agent: package AT&T Research\\r\\n"
4060*906afcb8SAndy Fiddaman		case $HURL:$authorize in
4061*906afcb8SAndy Fiddaman		.:?*)	AUTHORIZE="${AUTHORIZE}Authorization: Basic `print -n -r -- $authorize:$password | uuencode -h -x base64`\\r\\n" ;;
4062*906afcb8SAndy Fiddaman		esac
4063*906afcb8SAndy Fiddaman		;;
4064*906afcb8SAndy Fiddaman	esac
4065*906afcb8SAndy Fiddaman	getfd=8
4066*906afcb8SAndy Fiddaman	case $3 in
4067*906afcb8SAndy Fiddaman	'')	case $HURL in
4068*906afcb8SAndy Fiddaman		.)	host=$1
4069*906afcb8SAndy Fiddaman			path=$2
4070*906afcb8SAndy Fiddaman			while	:
4071*906afcb8SAndy Fiddaman			do	eval "exec $getfd<> /dev/tcp/$host/80" || exit
4072*906afcb8SAndy Fiddaman				case $path in
4073*906afcb8SAndy Fiddaman				/*)	;;
4074*906afcb8SAndy Fiddaman				*)	path=/$path ;;
4075*906afcb8SAndy Fiddaman				esac
4076*906afcb8SAndy Fiddaman				print "GET $path HTTP/1.0\\r\\nHost: $host\\r\\n$AUTHORIZE\\r" >&$getfd
4077*906afcb8SAndy Fiddaman				cat <&8 > get.tmp
4078*906afcb8SAndy Fiddaman				got=`sed -e 1q get.tmp`
4079*906afcb8SAndy Fiddaman				case $got in
4080*906afcb8SAndy Fiddaman				*" "200" "*)
4081*906afcb8SAndy Fiddaman					got=`sed -e '1,/^.$/d' -e '/^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]/!d' get.tmp`
4082*906afcb8SAndy Fiddaman					: > get.err
4083*906afcb8SAndy Fiddaman					code=0
4084*906afcb8SAndy Fiddaman					break
4085*906afcb8SAndy Fiddaman					;;
4086*906afcb8SAndy Fiddaman				*" "30[123]" "*)
4087*906afcb8SAndy Fiddaman					got=`sed -e '/^Location: /!d' -e 's,^Location: \(.*\)://\([^/]*\)\(/.*\),prot='\''\1'\'' host='\''\2'\'' path='\''\3'\'',' get.tmp`
4088*906afcb8SAndy Fiddaman					case $got in
4089*906afcb8SAndy Fiddaman					'')	rm get.tmp
4090*906afcb8SAndy Fiddaman						echo "$command: $action: $url: redirect error" >&2
4091*906afcb8SAndy Fiddaman						exit 1
4092*906afcb8SAndy Fiddaman						;;
4093*906afcb8SAndy Fiddaman					esac
4094*906afcb8SAndy Fiddaman					eval $got
4095*906afcb8SAndy Fiddaman					;;
4096*906afcb8SAndy Fiddaman				*)	rm get.tmp
4097*906afcb8SAndy Fiddaman					echo "$command: $action: $url: $got" >&2
4098*906afcb8SAndy Fiddaman					echo '' "$got" > get.err
4099*906afcb8SAndy Fiddaman					code=1
4100*906afcb8SAndy Fiddaman					break
4101*906afcb8SAndy Fiddaman					;;
4102*906afcb8SAndy Fiddaman				esac
4103*906afcb8SAndy Fiddaman			done
4104*906afcb8SAndy Fiddaman			;;
4105*906afcb8SAndy Fiddaman		curl)	case $authorize in
4106*906afcb8SAndy Fiddaman			'')	curl -s -L -o get.tmp http://$1/$2 2> get.err; code=$? ;;
4107*906afcb8SAndy Fiddaman			*)	curl -s -L -o get.tmp -u "$authorize":"$password" http://$1/$2 2> get.err; code=$? ;;
4108*906afcb8SAndy Fiddaman			esac
4109*906afcb8SAndy Fiddaman			got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp 2>/dev/null`
4110*906afcb8SAndy Fiddaman			case $code in
4111*906afcb8SAndy Fiddaman			0)	if	grep '^<H1>Authorization Required</H1>' get.tmp > get.err
4112*906afcb8SAndy Fiddaman				then	code=1
4113*906afcb8SAndy Fiddaman				fi
4114*906afcb8SAndy Fiddaman				;;
4115*906afcb8SAndy Fiddaman			esac
4116*906afcb8SAndy Fiddaman			;;
4117*906afcb8SAndy Fiddaman		hurl)	case $authorize in
4118*906afcb8SAndy Fiddaman			'')	hurl http://$1/$2 > get.tmp 2> get.err; code=$? ;;
4119*906afcb8SAndy Fiddaman			*)	hurl -a "$authorize":"$password" http://$1/$2 > get.tmp 2> get.err; code=$? ;;
4120*906afcb8SAndy Fiddaman			esac
4121*906afcb8SAndy Fiddaman			got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp`
4122*906afcb8SAndy Fiddaman			;;
4123*906afcb8SAndy Fiddaman		lynx)	case $authorize in
4124*906afcb8SAndy Fiddaman			'')	lynx -source http://$1/$2 > get.tmp 2> get.err; code=$? ;;
4125*906afcb8SAndy Fiddaman			*)	lynx -source -auth "$authorize":"$password" http://$1/$2 > get.tmp 2> get.err; code=$? ;;
4126*906afcb8SAndy Fiddaman			esac
4127*906afcb8SAndy Fiddaman			got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp`
4128*906afcb8SAndy Fiddaman			;;
4129*906afcb8SAndy Fiddaman		wget)	wget -nv -O get.tmp ${authorize:+--http-user="$authorize"} ${password:+--http-passwd="$password"} http://$1/$2 2> get.err
4130*906afcb8SAndy Fiddaman			code=$?
4131*906afcb8SAndy Fiddaman			got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp 2>/dev/null`
4132*906afcb8SAndy Fiddaman			;;
4133*906afcb8SAndy Fiddaman		*)	echo $command: $action: $HURL: url get command not found >&2
4134*906afcb8SAndy Fiddaman			exit 1
4135*906afcb8SAndy Fiddaman			;;
4136*906afcb8SAndy Fiddaman		esac
4137*906afcb8SAndy Fiddaman		if	test 0 != "$code"
4138*906afcb8SAndy Fiddaman		then	case `cat get.err get.tmp 2>/dev/null` in
4139*906afcb8SAndy Fiddaman			*[Aa][Uu][Tt][Hh][Oo][Rr][Ii][SsZz]*|*[Dd][Ee][Nn][Ii][Ee][Dd]*)
4140*906afcb8SAndy Fiddaman				echo $command: $action: authorization required -- see $url for license acceptance authorization name and password >&2
4141*906afcb8SAndy Fiddaman				;;
4142*906afcb8SAndy Fiddaman			*)	cat get.err
4143*906afcb8SAndy Fiddaman				;;
4144*906afcb8SAndy Fiddaman			esac
4145*906afcb8SAndy Fiddaman			rm -f get.tmp get.err
4146*906afcb8SAndy Fiddaman			echo $command: $action: $2: download failed >&2
4147*906afcb8SAndy Fiddaman			exit 1
4148*906afcb8SAndy Fiddaman		fi
4149*906afcb8SAndy Fiddaman		rm -f get.tmp get.err
4150*906afcb8SAndy Fiddaman		;;
4151*906afcb8SAndy Fiddaman	*)	case $exec in
4152*906afcb8SAndy Fiddaman		'')	echo "$3 ($4 bytes):" >&2
4153*906afcb8SAndy Fiddaman			case $HURL in
4154*906afcb8SAndy Fiddaman			.)	eval "exec $getfd<> /dev/tcp/$1/80" || exit
4155*906afcb8SAndy Fiddaman				path=$2/$3
4156*906afcb8SAndy Fiddaman				case $path in
4157*906afcb8SAndy Fiddaman				/*)	;;
4158*906afcb8SAndy Fiddaman				*)	path=/$path ;;
4159*906afcb8SAndy Fiddaman				esac
4160*906afcb8SAndy Fiddaman				print "GET $path HTTP/1.0\\r\\nHost: $host\\r\\n$AUTHORIZE\\r" >&$getfd
4161*906afcb8SAndy Fiddaman				read got <&$getfd
4162*906afcb8SAndy Fiddaman				case $got in
4163*906afcb8SAndy Fiddaman				*" 200 "*)
4164*906afcb8SAndy Fiddaman					code=0
4165*906afcb8SAndy Fiddaman					: > get.err
4166*906afcb8SAndy Fiddaman					;;
4167*906afcb8SAndy Fiddaman				*)	echo '' "$got" > get.err
4168*906afcb8SAndy Fiddaman					code=1
4169*906afcb8SAndy Fiddaman					;;
4170*906afcb8SAndy Fiddaman				esac
4171*906afcb8SAndy Fiddaman				while	read got <&$getfd
4172*906afcb8SAndy Fiddaman				do	case $got in
4173*906afcb8SAndy Fiddaman					''|?)	break ;;
4174*906afcb8SAndy Fiddaman					esac
4175*906afcb8SAndy Fiddaman				done
4176*906afcb8SAndy Fiddaman				cat <&$getfd > get.tmp
4177*906afcb8SAndy Fiddaman				;;
4178*906afcb8SAndy Fiddaman			curl)	case $authorize in
4179*906afcb8SAndy Fiddaman				'')	curl -s -L -o get.tmp http://$1/$2/$3 2> get.err; code=$? ;;
4180*906afcb8SAndy Fiddaman				*)	curl -s -L -o get.tmp -u "$authorize":"$password" http://$1/$2/$3 2> get.err; code=$?
4181*906afcb8SAndy Fiddaman				esac
4182*906afcb8SAndy Fiddaman				case $code in
4183*906afcb8SAndy Fiddaman				0)	if	grep '^<H1>Authorization Required</H1>' get.tmp > get.err
4184*906afcb8SAndy Fiddaman					then	code=1
4185*906afcb8SAndy Fiddaman					fi
4186*906afcb8SAndy Fiddaman					;;
4187*906afcb8SAndy Fiddaman				esac
4188*906afcb8SAndy Fiddaman				;;
4189*906afcb8SAndy Fiddaman			hurl)	case $authorize in
4190*906afcb8SAndy Fiddaman				'')	ksh -x hurl http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
4191*906afcb8SAndy Fiddaman				*)	ksh -x hurl -a "$authorize":"$password" http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
4192*906afcb8SAndy Fiddaman				esac
4193*906afcb8SAndy Fiddaman				;;
4194*906afcb8SAndy Fiddaman			lynx)	case $authorize in
4195*906afcb8SAndy Fiddaman				'')	lynx -source http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
4196*906afcb8SAndy Fiddaman				*)	lynx -source -auth "$authorize":"$password" http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
4197*906afcb8SAndy Fiddaman				esac
4198*906afcb8SAndy Fiddaman				;;
4199*906afcb8SAndy Fiddaman			wget)	wget -nv -O get.tmp ${authorize:+--http-user="$authorize"} ${password:+--http-passwd="$password"} http://$1/$2/$3 2> get.err
4200*906afcb8SAndy Fiddaman				code=$?
4201*906afcb8SAndy Fiddaman				;;
4202*906afcb8SAndy Fiddaman			*)	echo $command: $action: $HURL: url get command not found >&2
4203*906afcb8SAndy Fiddaman				exit 1
4204*906afcb8SAndy Fiddaman				;;
4205*906afcb8SAndy Fiddaman			esac
4206*906afcb8SAndy Fiddaman			if	test 0 != "$code"
4207*906afcb8SAndy Fiddaman			then	case `cat get.err get.tmp` in
4208*906afcb8SAndy Fiddaman				*[Aa][Uu][Tt][Hh][Oo][Rr][Ii][SsZz]*|*[Dd][Ee][Nn][Ii][Ee][Dd]*)
4209*906afcb8SAndy Fiddaman					echo $command: $action: authorization required -- see $url for license acceptance authorization name and password >&2
4210*906afcb8SAndy Fiddaman					;;
4211*906afcb8SAndy Fiddaman				*)	cat get.err
4212*906afcb8SAndy Fiddaman					;;
4213*906afcb8SAndy Fiddaman				esac
4214*906afcb8SAndy Fiddaman				rm get.tmp get.err
4215*906afcb8SAndy Fiddaman				echo $command: $action: $3: download failed >&2
4216*906afcb8SAndy Fiddaman				exit 1
4217*906afcb8SAndy Fiddaman			fi
4218*906afcb8SAndy Fiddaman			rm get.err
4219*906afcb8SAndy Fiddaman			case $checksum:$5 in
4220*906afcb8SAndy Fiddaman			:*|*:-)	z=`wc -c < get.tmp`
4221*906afcb8SAndy Fiddaman				case " $z " in
4222*906afcb8SAndy Fiddaman				*" $4 "*)
4223*906afcb8SAndy Fiddaman					;;
4224*906afcb8SAndy Fiddaman				*)	rm -f get.tmp
4225*906afcb8SAndy Fiddaman					echo $command: $3: download error: expected $4 bytes, got $z >&2
4226*906afcb8SAndy Fiddaman					exit 1
4227*906afcb8SAndy Fiddaman					;;
4228*906afcb8SAndy Fiddaman				esac
4229*906afcb8SAndy Fiddaman				;;
4230*906afcb8SAndy Fiddaman			*)	z=`$checksum < get.tmp | sed -e 's,^[ 	][ 	]*,,' -e 's,[ 	].*,,'`
4231*906afcb8SAndy Fiddaman				case " $z " in
4232*906afcb8SAndy Fiddaman				*" $5 "*)
4233*906afcb8SAndy Fiddaman					;;
4234*906afcb8SAndy Fiddaman				*)	rm -f get.tmp
4235*906afcb8SAndy Fiddaman					echo $command: $3: download $checksum error: expected $5, got $z >&2
4236*906afcb8SAndy Fiddaman					exit 1
4237*906afcb8SAndy Fiddaman					;;
4238*906afcb8SAndy Fiddaman				esac
4239*906afcb8SAndy Fiddaman				;;
4240*906afcb8SAndy Fiddaman			esac
4241*906afcb8SAndy Fiddaman			mv get.tmp $3 || exit
4242*906afcb8SAndy Fiddaman			;;
4243*906afcb8SAndy Fiddaman		*)	echo "$3 ($4 bytes)" >&2
4244*906afcb8SAndy Fiddaman			;;
4245*906afcb8SAndy Fiddaman		esac
4246*906afcb8SAndy Fiddaman	esac
4247*906afcb8SAndy Fiddaman}
4248*906afcb8SAndy Fiddaman
4249*906afcb8SAndy Fiddaman# generate copyright notice
4250*906afcb8SAndy Fiddaman
4251*906afcb8SAndy Fiddamancopyright()
4252*906afcb8SAndy Fiddaman{
4253*906afcb8SAndy Fiddaman	if	test -f $1.lic
4254*906afcb8SAndy Fiddaman	then	echo $1 package general copyright notice
4255*906afcb8SAndy Fiddaman		echo
4256*906afcb8SAndy Fiddaman		proto -c'#' -p -s -l $1.lic -o type=verbose,author='*' /dev/null
4257*906afcb8SAndy Fiddaman		return 0
4258*906afcb8SAndy Fiddaman	fi
4259*906afcb8SAndy Fiddaman	case $1 in
4260*906afcb8SAndy Fiddaman	*-*)	eval `echo '' $1 | sed 's/\([^-]*\)-\(.*\)/__j__="\1" __i__="\2"/'`
4261*906afcb8SAndy Fiddaman		if	copyright $__i__ || copyright $__j__
4262*906afcb8SAndy Fiddaman		then	return 0
4263*906afcb8SAndy Fiddaman		fi
4264*906afcb8SAndy Fiddaman		;;
4265*906afcb8SAndy Fiddaman	esac
4266*906afcb8SAndy Fiddaman	return 1
4267*906afcb8SAndy Fiddaman}
4268*906afcb8SAndy Fiddaman
4269*906afcb8SAndy Fiddaman# run remote make on host
4270*906afcb8SAndy Fiddaman
4271*906afcb8SAndy Fiddamanremote() # host no-exec-background
4272*906afcb8SAndy Fiddaman{
4273*906afcb8SAndy Fiddaman	host=$1
4274*906afcb8SAndy Fiddaman	background=$2
4275*906afcb8SAndy Fiddaman	eval name=\$${host}_name user=\$${host}_user snarf=\$${host}_snarf type=\$${host}_type rsh=\$${host}_rsh root=\$${host}_root keep=\$${host}_keep log=\$${host}_log
4276*906afcb8SAndy Fiddaman	case $keep in
4277*906afcb8SAndy Fiddaman	1*)	;;
4278*906afcb8SAndy Fiddaman	*)	return ;;
4279*906afcb8SAndy Fiddaman	esac
4280*906afcb8SAndy Fiddaman	case $host in
4281*906afcb8SAndy Fiddaman	$main)	;;
4282*906afcb8SAndy Fiddaman	*)	case $exec in
4283*906afcb8SAndy Fiddaman		'')	exec > $admin_log/$log 2>&1 ;;
4284*906afcb8SAndy Fiddaman		*)	echo "exec > $admin_log/$log 2>&1" ;;
4285*906afcb8SAndy Fiddaman		esac
4286*906afcb8SAndy Fiddaman		;;
4287*906afcb8SAndy Fiddaman	esac
4288*906afcb8SAndy Fiddaman	if	$admin_ping $name >/dev/null 2>&1 || $admin_ping $name >/dev/null 2>&1
4289*906afcb8SAndy Fiddaman	then	cmd=". ./.profile"
4290*906afcb8SAndy Fiddaman		case $root in
4291*906afcb8SAndy Fiddaman		.)	root=
4292*906afcb8SAndy Fiddaman			;;
4293*906afcb8SAndy Fiddaman		*)	cmd="$cmd && cd $root"
4294*906afcb8SAndy Fiddaman			root=$root/
4295*906afcb8SAndy Fiddaman			;;
4296*906afcb8SAndy Fiddaman		esac
4297*906afcb8SAndy Fiddaman		cmd="$cmd && { test -f lib/package/admin/$admin_env && . ./lib/package/admin/$admin_env || true ;} && PATH=\${PWD:-\`pwd\`}/bin:\$PATH \${SHELL:-/bin/sh} -c 'package $admin_args PACKAGEROOT=\${PWD:-\`pwd\`} HOSTTYPE=$type VPATH='"
4298*906afcb8SAndy Fiddaman		case $admin_binary in
4299*906afcb8SAndy Fiddaman		'')	snarf= ;;
4300*906afcb8SAndy Fiddaman		esac
4301*906afcb8SAndy Fiddaman		case $snarf in
4302*906afcb8SAndy Fiddaman		'')	$exec $rsh $user$name "$cmd" $background
4303*906afcb8SAndy Fiddaman			;;
4304*906afcb8SAndy Fiddaman		*?)	rcp=`echo $rsh | sed 's/\(.\).*/\1/'`cp
4305*906afcb8SAndy Fiddaman			case $background in
4306*906afcb8SAndy Fiddaman			?*)	$exec "{" ;;
4307*906afcb8SAndy Fiddaman			esac
4308*906afcb8SAndy Fiddaman			$exec $rsh $user$name "$cmd"
4309*906afcb8SAndy Fiddaman			eval lst=$admin_list
4310*906afcb8SAndy Fiddaman			case $admin_pkgs in
4311*906afcb8SAndy Fiddaman			'')	filter=cat ;;
4312*906afcb8SAndy Fiddaman			*)	filter="egrep lib/package/tgz/($admin_pkgs)\\." ;;
4313*906afcb8SAndy Fiddaman			esac
4314*906afcb8SAndy Fiddaman			if	$exec $rcp $user$name:${root}lib/package/tgz/$lst $PACKAGESRC/tgz
4315*906afcb8SAndy Fiddaman			then	$exec $rcp `$filter $PACKAGESRC/tgz/$lst | sed "s,^,$user$name:,"` $PACKAGESRC/tgz
4316*906afcb8SAndy Fiddaman			else	echo "$command: $user$name:${root}lib/package/tgz/$lst: not found" >&2
4317*906afcb8SAndy Fiddaman			fi
4318*906afcb8SAndy Fiddaman			case $background in
4319*906afcb8SAndy Fiddaman			?*)	$exec "} $background" ;;
4320*906afcb8SAndy Fiddaman			esac
4321*906afcb8SAndy Fiddaman			;;
4322*906afcb8SAndy Fiddaman		esac
4323*906afcb8SAndy Fiddaman	else	echo "$command: $name: down" >&2
4324*906afcb8SAndy Fiddaman	fi
4325*906afcb8SAndy Fiddaman}
4326*906afcb8SAndy Fiddaman
4327*906afcb8SAndy Fiddaman# update package_src
4328*906afcb8SAndy Fiddaman
4329*906afcb8SAndy Fiddamanchecksrc()
4330*906afcb8SAndy Fiddaman{
4331*906afcb8SAndy Fiddaman	case $package_src in
4332*906afcb8SAndy Fiddaman	'')	package_src=$src
4333*906afcb8SAndy Fiddaman		for _i_ in `cd $PACKAGESRC; ls *.def *.lic *.pkg 2>/dev/null | sed 's/[-.].*//'`
4334*906afcb8SAndy Fiddaman		do	case " $package_src " in
4335*906afcb8SAndy Fiddaman			*" $_i_ "*)
4336*906afcb8SAndy Fiddaman				;;
4337*906afcb8SAndy Fiddaman			*)	package_src="$package_src $_i_"
4338*906afcb8SAndy Fiddaman				;;
4339*906afcb8SAndy Fiddaman			esac
4340*906afcb8SAndy Fiddaman		done
4341*906afcb8SAndy Fiddaman		;;
4342*906afcb8SAndy Fiddaman	esac
4343*906afcb8SAndy Fiddaman}
4344*906afcb8SAndy Fiddaman
4345*906afcb8SAndy Fiddaman# check for native ascii 0:yes 1:no
4346*906afcb8SAndy Fiddaman
4347*906afcb8SAndy Fiddaman__isascii__=
4348*906afcb8SAndy Fiddaman
4349*906afcb8SAndy Fiddamanisascii()
4350*906afcb8SAndy Fiddaman{
4351*906afcb8SAndy Fiddaman	case $__isascii__ in
4352*906afcb8SAndy Fiddaman	'')	case `echo A | od -o | sed -e 's/[ 	]*$//' -e '/[ 	]/!d' -e 's/.*[ 	]//'` in
4353*906afcb8SAndy Fiddaman		005101|040412)	__isascii__=0 ;;
4354*906afcb8SAndy Fiddaman		*)		__isascii__=1 ;;
4355*906afcb8SAndy Fiddaman		esac
4356*906afcb8SAndy Fiddaman	esac
4357*906afcb8SAndy Fiddaman	return $__isascii__
4358*906afcb8SAndy Fiddaman}
4359*906afcb8SAndy Fiddaman
4360*906afcb8SAndy Fiddamancase $action in
4361*906afcb8SAndy Fiddaman
4362*906afcb8SAndy Fiddamanadmin)	while	test ! -f $admin_db
4363*906afcb8SAndy Fiddaman	do	case $admin_db in
4364*906afcb8SAndy Fiddaman		/*)	echo $command: $action: $admin_db: data file not found >&2
4365*906afcb8SAndy Fiddaman			exit 1
4366*906afcb8SAndy Fiddaman			;;
4367*906afcb8SAndy Fiddaman		esac
4368*906afcb8SAndy Fiddaman		view file src lib/package/admin/$admin_db || exit 1
4369*906afcb8SAndy Fiddaman		admin_db=$_view_
4370*906afcb8SAndy Fiddaman	done
4371*906afcb8SAndy Fiddaman	admin_components=
4372*906afcb8SAndy Fiddaman	case $admin_action in
4373*906afcb8SAndy Fiddaman	list)	cat $admin_db
4374*906afcb8SAndy Fiddaman		exit
4375*906afcb8SAndy Fiddaman		;;
4376*906afcb8SAndy Fiddaman	test)	set $admin_args
4377*906afcb8SAndy Fiddaman		while	:
4378*906afcb8SAndy Fiddaman		do	case $# in
4379*906afcb8SAndy Fiddaman			1)	break ;;
4380*906afcb8SAndy Fiddaman			esac
4381*906afcb8SAndy Fiddaman			shift
4382*906afcb8SAndy Fiddaman			case $1 in
4383*906afcb8SAndy Fiddaman			*=*)	;;
4384*906afcb8SAndy Fiddaman			*)	admin_components=-$1
4385*906afcb8SAndy Fiddaman				break
4386*906afcb8SAndy Fiddaman				;;
4387*906afcb8SAndy Fiddaman			esac
4388*906afcb8SAndy Fiddaman		done
4389*906afcb8SAndy Fiddaman		;;
4390*906afcb8SAndy Fiddaman	esac
4391*906afcb8SAndy Fiddaman	: all work done in $PACKAGESRC/admin
4392*906afcb8SAndy Fiddaman	cd $PACKAGESRC/admin || exit
4393*906afcb8SAndy Fiddaman	checksrc
4394*906afcb8SAndy Fiddaman	packages=
4395*906afcb8SAndy Fiddaman	admin_log=${admin_action}${admin_components}.log
4396*906afcb8SAndy Fiddaman	exec < $admin_db || exit
4397*906afcb8SAndy Fiddaman	test -d $admin_log || $exec mkdir $admin_log || exit
4398*906afcb8SAndy Fiddaman	case $admin_on in
4399*906afcb8SAndy Fiddaman	'')	admin_on="*" ;;
4400*906afcb8SAndy Fiddaman	esac
4401*906afcb8SAndy Fiddaman	hostname=
4402*906afcb8SAndy Fiddaman	hosts=
4403*906afcb8SAndy Fiddaman	logs=
4404*906afcb8SAndy Fiddaman	local_hosts=
4405*906afcb8SAndy Fiddaman	local_types=
4406*906afcb8SAndy Fiddaman	pids=
4407*906afcb8SAndy Fiddaman	remote_hosts=
4408*906afcb8SAndy Fiddaman	sync_hosts=
4409*906afcb8SAndy Fiddaman	admin_host=_admin_host_
4410*906afcb8SAndy Fiddaman	admin_out=
4411*906afcb8SAndy Fiddaman	case " $admin_args " in
4412*906afcb8SAndy Fiddaman	*" write binary "*|*" write "*" binary "*)
4413*906afcb8SAndy Fiddaman		admin_binary=1
4414*906afcb8SAndy Fiddaman		;;
4415*906afcb8SAndy Fiddaman	*)	admin_binary=
4416*906afcb8SAndy Fiddaman		;;
4417*906afcb8SAndy Fiddaman	esac
4418*906afcb8SAndy Fiddaman	case $only in
4419*906afcb8SAndy Fiddaman	1)	admin_args="only $admin_args" ;;
4420*906afcb8SAndy Fiddaman	esac
4421*906afcb8SAndy Fiddaman	trap 'kill $pids >/dev/null 2>&1' 1 2 3 15
4422*906afcb8SAndy Fiddaman	index=0
4423*906afcb8SAndy Fiddaman	while	read type host root date time make test write owner attributes
4424*906afcb8SAndy Fiddaman	do	case $type in
4425*906afcb8SAndy Fiddaman		''|'#'*);;
4426*906afcb8SAndy Fiddaman		*=*)	eval "$type $host $root $date $time $make $test $write $owner $attributes"
4427*906afcb8SAndy Fiddaman			;;
4428*906afcb8SAndy Fiddaman		*)	case $admin_action in
4429*906afcb8SAndy Fiddaman			make|test|write)
4430*906afcb8SAndy Fiddaman				eval f='$'$admin_action
4431*906afcb8SAndy Fiddaman				case $f in
4432*906afcb8SAndy Fiddaman				*[!0123456789]*)	continue ;;
4433*906afcb8SAndy Fiddaman				esac
4434*906afcb8SAndy Fiddaman				;;
4435*906afcb8SAndy Fiddaman			esac
4436*906afcb8SAndy Fiddaman			rsh=rsh
4437*906afcb8SAndy Fiddaman			case $host in
4438*906afcb8SAndy Fiddaman			*@*)	IFS=@
4439*906afcb8SAndy Fiddaman				set '' $host
4440*906afcb8SAndy Fiddaman				IFS=$ifs
4441*906afcb8SAndy Fiddaman				user=${2}@
4442*906afcb8SAndy Fiddaman				host=$3
4443*906afcb8SAndy Fiddaman				;;
4444*906afcb8SAndy Fiddaman			*)	user=
4445*906afcb8SAndy Fiddaman				;;
4446*906afcb8SAndy Fiddaman			esac
4447*906afcb8SAndy Fiddaman			: type=$type host=$host root=$root date=$date time=$time make=$make test=$test write=$write :
4448*906afcb8SAndy Fiddaman			name=$host
4449*906afcb8SAndy Fiddaman			host=`echo $name | sed 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789],__,g'`
4450*906afcb8SAndy Fiddaman			eval x='$'${host}_index
4451*906afcb8SAndy Fiddaman			eval ${host}_index=1
4452*906afcb8SAndy Fiddaman			case $x in
4453*906afcb8SAndy Fiddaman			1)	i=0
4454*906afcb8SAndy Fiddaman				while	:
4455*906afcb8SAndy Fiddaman				do	case $i in
4456*906afcb8SAndy Fiddaman					$index)	h=''
4457*906afcb8SAndy Fiddaman						break
4458*906afcb8SAndy Fiddaman						;;
4459*906afcb8SAndy Fiddaman					esac
4460*906afcb8SAndy Fiddaman					i=`expr $i + 1`
4461*906afcb8SAndy Fiddaman					eval h='$'${admin_host}${i}_name
4462*906afcb8SAndy Fiddaman					case $h in
4463*906afcb8SAndy Fiddaman					$host)	host=${admin_host}${i}
4464*906afcb8SAndy Fiddaman						eval user='$'${host}_user root='$'${host}_rsh:$host:'$'${host}_root
4465*906afcb8SAndy Fiddaman						break
4466*906afcb8SAndy Fiddaman						;;
4467*906afcb8SAndy Fiddaman					esac
4468*906afcb8SAndy Fiddaman				done
4469*906afcb8SAndy Fiddaman				;;
4470*906afcb8SAndy Fiddaman			esac
4471*906afcb8SAndy Fiddaman			case $root in
4472*906afcb8SAndy Fiddaman			*:$name:*)root=`echo '' $root | sed 's,:.*,:,'` ;;
4473*906afcb8SAndy Fiddaman			esac
4474*906afcb8SAndy Fiddaman			case $root in
4475*906afcb8SAndy Fiddaman			*:*:*)	index=`expr $index + 1`
4476*906afcb8SAndy Fiddaman				host=${admin_host}$index
4477*906afcb8SAndy Fiddaman				;;
4478*906afcb8SAndy Fiddaman			*:*)	case " $sync_hosts " in
4479*906afcb8SAndy Fiddaman				*" $name ${admin_host}"*)
4480*906afcb8SAndy Fiddaman					set '' '' $sync_hosts
4481*906afcb8SAndy Fiddaman					while	:
4482*906afcb8SAndy Fiddaman					do	shift
4483*906afcb8SAndy Fiddaman						shift
4484*906afcb8SAndy Fiddaman						case $1 in
4485*906afcb8SAndy Fiddaman						$name)	host=$2
4486*906afcb8SAndy Fiddaman							break
4487*906afcb8SAndy Fiddaman							;;
4488*906afcb8SAndy Fiddaman						esac
4489*906afcb8SAndy Fiddaman					done
4490*906afcb8SAndy Fiddaman					;;
4491*906afcb8SAndy Fiddaman				*)	index=`expr $index + 1`
4492*906afcb8SAndy Fiddaman					host=${admin_host}$index
4493*906afcb8SAndy Fiddaman					sync_hosts="$sync_hosts $name $host"
4494*906afcb8SAndy Fiddaman					;;
4495*906afcb8SAndy Fiddaman				esac
4496*906afcb8SAndy Fiddaman				;;
4497*906afcb8SAndy Fiddaman			*)	index=`expr $index + 1`
4498*906afcb8SAndy Fiddaman				host=${admin_host}$index
4499*906afcb8SAndy Fiddaman				;;
4500*906afcb8SAndy Fiddaman			esac
4501*906afcb8SAndy Fiddaman			case $root in
4502*906afcb8SAndy Fiddaman			-*)	continue
4503*906afcb8SAndy Fiddaman				;;
4504*906afcb8SAndy Fiddaman			*:*)	case $admin_all in
4505*906afcb8SAndy Fiddaman				0)	continue ;;
4506*906afcb8SAndy Fiddaman				esac
4507*906afcb8SAndy Fiddaman				case $root in
4508*906afcb8SAndy Fiddaman				*:)	root=${root}. ;;
4509*906afcb8SAndy Fiddaman				esac
4510*906afcb8SAndy Fiddaman				IFS=:
4511*906afcb8SAndy Fiddaman				set '' $root
4512*906afcb8SAndy Fiddaman				IFS=$ifs
4513*906afcb8SAndy Fiddaman				sync=$host
4514*906afcb8SAndy Fiddaman				case $hostname in
4515*906afcb8SAndy Fiddaman				'')	hostinfo name
4516*906afcb8SAndy Fiddaman					hostname=$_hostinfo_
4517*906afcb8SAndy Fiddaman					;;
4518*906afcb8SAndy Fiddaman				esac
4519*906afcb8SAndy Fiddaman				shift
4520*906afcb8SAndy Fiddaman				case $# in
4521*906afcb8SAndy Fiddaman				0)	;;
4522*906afcb8SAndy Fiddaman				1)	root=$1
4523*906afcb8SAndy Fiddaman					;;
4524*906afcb8SAndy Fiddaman				2)	rsh=$1 root=$2
4525*906afcb8SAndy Fiddaman					;;
4526*906afcb8SAndy Fiddaman				*)	rsh=$1 sync=$2 root=$3
4527*906afcb8SAndy Fiddaman					case $sync in
4528*906afcb8SAndy Fiddaman					${admin_host}*)
4529*906afcb8SAndy Fiddaman						;;
4530*906afcb8SAndy Fiddaman					?*)	case " $sync_hosts " in
4531*906afcb8SAndy Fiddaman						*" $sync ${admin_host}"*)
4532*906afcb8SAndy Fiddaman							set '' '' $sync_hosts
4533*906afcb8SAndy Fiddaman							while	:
4534*906afcb8SAndy Fiddaman							do	shift
4535*906afcb8SAndy Fiddaman								shift
4536*906afcb8SAndy Fiddaman								case $1 in
4537*906afcb8SAndy Fiddaman								$sync)	sync=$2
4538*906afcb8SAndy Fiddaman									break
4539*906afcb8SAndy Fiddaman									;;
4540*906afcb8SAndy Fiddaman								esac
4541*906afcb8SAndy Fiddaman							done
4542*906afcb8SAndy Fiddaman							;;
4543*906afcb8SAndy Fiddaman						*)	index=`expr $index + 1`
4544*906afcb8SAndy Fiddaman							x=${admin_host}$index
4545*906afcb8SAndy Fiddaman							sync_hosts="$sync_hosts $sync $x"
4546*906afcb8SAndy Fiddaman							sync=$x
4547*906afcb8SAndy Fiddaman							;;
4548*906afcb8SAndy Fiddaman						esac
4549*906afcb8SAndy Fiddaman						;;
4550*906afcb8SAndy Fiddaman					esac
4551*906afcb8SAndy Fiddaman					;;
4552*906afcb8SAndy Fiddaman				esac
4553*906afcb8SAndy Fiddaman				;;
4554*906afcb8SAndy Fiddaman			*)	sync=
4555*906afcb8SAndy Fiddaman				;;
4556*906afcb8SAndy Fiddaman			esac
4557*906afcb8SAndy Fiddaman			case $name in
4558*906afcb8SAndy Fiddaman			$admin_on)
4559*906afcb8SAndy Fiddaman				keep=1
4560*906afcb8SAndy Fiddaman				;;
4561*906afcb8SAndy Fiddaman			*)	case " $admin_on " in
4562*906afcb8SAndy Fiddaman				*" $name "*)	keep=1 ;;
4563*906afcb8SAndy Fiddaman				*)		keep=0 ;;
4564*906afcb8SAndy Fiddaman				esac
4565*906afcb8SAndy Fiddaman				;;
4566*906afcb8SAndy Fiddaman			esac
4567*906afcb8SAndy Fiddaman			case " $admin_out " in
4568*906afcb8SAndy Fiddaman			*" $name "*)
4569*906afcb8SAndy Fiddaman				log=$name.$type
4570*906afcb8SAndy Fiddaman				;;
4571*906afcb8SAndy Fiddaman			*)	admin_out="$admin_out $name"
4572*906afcb8SAndy Fiddaman				log=$name
4573*906afcb8SAndy Fiddaman				;;
4574*906afcb8SAndy Fiddaman			esac
4575*906afcb8SAndy Fiddaman			case $sync in
4576*906afcb8SAndy Fiddaman			'')	local_types="$local_types $type" ;;
4577*906afcb8SAndy Fiddaman			esac
4578*906afcb8SAndy Fiddaman			case $sync in
4579*906afcb8SAndy Fiddaman			$host)	remote_hosts="$remote_hosts $host"
4580*906afcb8SAndy Fiddaman				;;
4581*906afcb8SAndy Fiddaman			?*)	eval ${sync}_share=\"\$${sync}_share $host\"
4582*906afcb8SAndy Fiddaman				;;
4583*906afcb8SAndy Fiddaman			'')	local_hosts="$local_hosts $host"
4584*906afcb8SAndy Fiddaman				;;
4585*906afcb8SAndy Fiddaman			esac
4586*906afcb8SAndy Fiddaman			eval ${host}_name='$'name ${host}_type='$'type ${host}_user='$'user ${host}_sync='$'sync ${host}_snarf='$'sync ${host}_rsh='$'rsh ${host}_root='$'root ${host}_keep='$'keep ${host}_log='$'log
4587*906afcb8SAndy Fiddaman			;;
4588*906afcb8SAndy Fiddaman		esac
4589*906afcb8SAndy Fiddaman	done
4590*906afcb8SAndy Fiddaman	p=
4591*906afcb8SAndy Fiddaman	for i in $admin_args
4592*906afcb8SAndy Fiddaman	do	p="$i $p"
4593*906afcb8SAndy Fiddaman	done
4594*906afcb8SAndy Fiddaman	admin_pkgs=
4595*906afcb8SAndy Fiddaman	for i in $p
4596*906afcb8SAndy Fiddaman	do	if	view - src "lib/package/$i.pkg"
4597*906afcb8SAndy Fiddaman		then	case $admin_pkgs in
4598*906afcb8SAndy Fiddaman			'')	admin_pkgs="$i" ;;
4599*906afcb8SAndy Fiddaman			*)	admin_pkgs="$admin_pkgs|$i" ;;
4600*906afcb8SAndy Fiddaman			esac
4601*906afcb8SAndy Fiddaman		fi
4602*906afcb8SAndy Fiddaman	done
4603*906afcb8SAndy Fiddaman	: "admin_binary :" $admin_binary
4604*906afcb8SAndy Fiddaman	: "admin_args   :" $admin_args
4605*906afcb8SAndy Fiddaman	: "admin_pkgs   :" $admin_pkgs
4606*906afcb8SAndy Fiddaman	: "admin_on     :" "$admin_on"
4607*906afcb8SAndy Fiddaman	: "local_hosts  :" $local_hosts
4608*906afcb8SAndy Fiddaman	: "local_types  :" $local_types
4609*906afcb8SAndy Fiddaman	: "remote_hosts :" $remote_hosts
4610*906afcb8SAndy Fiddaman	: "sync_hosts   :" $sync_hosts
4611*906afcb8SAndy Fiddaman	: "sync_share   :" $sync_share
4612*906afcb8SAndy Fiddaman	case $admin_binary in
4613*906afcb8SAndy Fiddaman	1)	admin_bin_types=
4614*906afcb8SAndy Fiddaman		admin_bin_main=
4615*906afcb8SAndy Fiddaman		for main in $local_hosts $remote_hosts
4616*906afcb8SAndy Fiddaman		do	eval share=\$${main}_share keep=\$${main}_keep
4617*906afcb8SAndy Fiddaman			case $keep in
4618*906afcb8SAndy Fiddaman			0*)	continue ;;
4619*906afcb8SAndy Fiddaman			esac
4620*906afcb8SAndy Fiddaman			for host in $main $share
4621*906afcb8SAndy Fiddaman			do	case " $admin_bin_hosts " in
4622*906afcb8SAndy Fiddaman				*" $host "*)
4623*906afcb8SAndy Fiddaman					continue
4624*906afcb8SAndy Fiddaman					;;
4625*906afcb8SAndy Fiddaman				esac
4626*906afcb8SAndy Fiddaman				eval type=\$${host}_type
4627*906afcb8SAndy Fiddaman				case " $admin_bin_types " in
4628*906afcb8SAndy Fiddaman				*" $type "*)
4629*906afcb8SAndy Fiddaman					continue
4630*906afcb8SAndy Fiddaman					;;
4631*906afcb8SAndy Fiddaman				esac
4632*906afcb8SAndy Fiddaman				case " $types " in
4633*906afcb8SAndy Fiddaman				"  ")	;;
4634*906afcb8SAndy Fiddaman				*" $type "*)
4635*906afcb8SAndy Fiddaman					;;
4636*906afcb8SAndy Fiddaman				*)	continue
4637*906afcb8SAndy Fiddaman					;;
4638*906afcb8SAndy Fiddaman				esac
4639*906afcb8SAndy Fiddaman				admin_bin_hosts="$admin_bin_hosts $host"
4640*906afcb8SAndy Fiddaman				admin_bin_types="$admin_bin_types $type"
4641*906afcb8SAndy Fiddaman				case " $admin_bin_hosts " in
4642*906afcb8SAndy Fiddaman				*" $main "*)
4643*906afcb8SAndy Fiddaman					;;
4644*906afcb8SAndy Fiddaman				*)	case " $admin_bin_main " in
4645*906afcb8SAndy Fiddaman					*" $main "*)
4646*906afcb8SAndy Fiddaman						;;
4647*906afcb8SAndy Fiddaman					*)	admin_bin_main="$admin_bin_main $main"
4648*906afcb8SAndy Fiddaman						;;
4649*906afcb8SAndy Fiddaman					esac
4650*906afcb8SAndy Fiddaman					;;
4651*906afcb8SAndy Fiddaman				esac
4652*906afcb8SAndy Fiddaman			done
4653*906afcb8SAndy Fiddaman		done
4654*906afcb8SAndy Fiddaman		local=
4655*906afcb8SAndy Fiddaman		remote=
4656*906afcb8SAndy Fiddaman		for host in $admin_bin_main $admin_bin_hosts
4657*906afcb8SAndy Fiddaman		do	case " $local_hosts " in
4658*906afcb8SAndy Fiddaman			*" $host "*)
4659*906afcb8SAndy Fiddaman				local="$local $host"
4660*906afcb8SAndy Fiddaman				;;
4661*906afcb8SAndy Fiddaman			*)	case " $remote_hosts " in
4662*906afcb8SAndy Fiddaman				*" $host "*)
4663*906afcb8SAndy Fiddaman					remote="$remote $host"
4664*906afcb8SAndy Fiddaman					;;
4665*906afcb8SAndy Fiddaman				esac
4666*906afcb8SAndy Fiddaman				;;
4667*906afcb8SAndy Fiddaman			esac
4668*906afcb8SAndy Fiddaman		done
4669*906afcb8SAndy Fiddaman		local_hosts=$local
4670*906afcb8SAndy Fiddaman		remote_hosts=$remote
4671*906afcb8SAndy Fiddaman		;;
4672*906afcb8SAndy Fiddaman	esac
4673*906afcb8SAndy Fiddaman	for host in $remote_hosts $local_hosts
4674*906afcb8SAndy Fiddaman	do	eval share=\$${host}_share
4675*906afcb8SAndy Fiddaman		case $share in
4676*906afcb8SAndy Fiddaman		?*)	while	:
4677*906afcb8SAndy Fiddaman			do	oshare=$share
4678*906afcb8SAndy Fiddaman				for s in $share
4679*906afcb8SAndy Fiddaman				do	eval r='$'${s}_share
4680*906afcb8SAndy Fiddaman					case $r in
4681*906afcb8SAndy Fiddaman					?*)	case " $share " in
4682*906afcb8SAndy Fiddaman						*" $r "*)	;;
4683*906afcb8SAndy Fiddaman						*)		share="$share $r" ;;
4684*906afcb8SAndy Fiddaman						esac
4685*906afcb8SAndy Fiddaman						;;
4686*906afcb8SAndy Fiddaman					esac
4687*906afcb8SAndy Fiddaman				done
4688*906afcb8SAndy Fiddaman				case $share in
4689*906afcb8SAndy Fiddaman				$oshare)	eval ${host}_share="'$share'"
4690*906afcb8SAndy Fiddaman						break
4691*906afcb8SAndy Fiddaman						;;
4692*906afcb8SAndy Fiddaman				esac
4693*906afcb8SAndy Fiddaman			done
4694*906afcb8SAndy Fiddaman			;;
4695*906afcb8SAndy Fiddaman		esac
4696*906afcb8SAndy Fiddaman	done
4697*906afcb8SAndy Fiddaman	for host in $remote_hosts
4698*906afcb8SAndy Fiddaman	do	eval type=\$${host}_type
4699*906afcb8SAndy Fiddaman		case " $local_types " in
4700*906afcb8SAndy Fiddaman		*" $type "*)
4701*906afcb8SAndy Fiddaman			eval ${host}_snarf=
4702*906afcb8SAndy Fiddaman			;;
4703*906afcb8SAndy Fiddaman		esac
4704*906afcb8SAndy Fiddaman		eval name=\$${host}_name keep=\$${host}_keep share=\$${host}_share
4705*906afcb8SAndy Fiddaman		for share in $share
4706*906afcb8SAndy Fiddaman		do	eval type=\$${share}_type keep=\$keep\$${share}_keep
4707*906afcb8SAndy Fiddaman			case " $local_types " in
4708*906afcb8SAndy Fiddaman			*" $type "*)
4709*906afcb8SAndy Fiddaman				eval ${share}_snarf=
4710*906afcb8SAndy Fiddaman				;;
4711*906afcb8SAndy Fiddaman			esac
4712*906afcb8SAndy Fiddaman		done
4713*906afcb8SAndy Fiddaman		case $keep in
4714*906afcb8SAndy Fiddaman		0*1*)	keep=2$keep ;;
4715*906afcb8SAndy Fiddaman		*1*)	;;
4716*906afcb8SAndy Fiddaman		*)	keep=0 ;;
4717*906afcb8SAndy Fiddaman		esac
4718*906afcb8SAndy Fiddaman		eval ${host}_keep=$keep
4719*906afcb8SAndy Fiddaman	done
4720*906afcb8SAndy Fiddaman	for host in $remote_hosts $local_hosts
4721*906afcb8SAndy Fiddaman	do	eval name=\$${host}_name user=\$${host}_user type=\$${host}_type sync=\$${host}_sync snarf=\$${host}_snarf share=\$${host}_share rsh=\$${host}_rsh root=\$${host}_root keep=\$${host}_keep
4722*906afcb8SAndy Fiddaman		case $keep in
4723*906afcb8SAndy Fiddaman		0*)	continue ;;
4724*906afcb8SAndy Fiddaman		esac
4725*906afcb8SAndy Fiddaman		case $sync in
4726*906afcb8SAndy Fiddaman		'')	case $admin_action in
4727*906afcb8SAndy Fiddaman			ditto)	continue ;;
4728*906afcb8SAndy Fiddaman			esac
4729*906afcb8SAndy Fiddaman			case $admin_binary in
4730*906afcb8SAndy Fiddaman			1)	case $keep in
4731*906afcb8SAndy Fiddaman				1*|?*1*);;
4732*906afcb8SAndy Fiddaman				*)	continue ;;
4733*906afcb8SAndy Fiddaman				esac
4734*906afcb8SAndy Fiddaman				;;
4735*906afcb8SAndy Fiddaman			esac
4736*906afcb8SAndy Fiddaman			;;
4737*906afcb8SAndy Fiddaman		esac
4738*906afcb8SAndy Fiddaman		eval main_log='$'${host}_log
4739*906afcb8SAndy Fiddaman		main=
4740*906afcb8SAndy Fiddaman		share_keep=
4741*906afcb8SAndy Fiddaman		for i in $host $share
4742*906afcb8SAndy Fiddaman		do	eval n='$'${i}_name t='$'${i}_type q='$'${i}_sync s='$'${i}_snarf l='$'${i}_log k='$'${i}_keep
4743*906afcb8SAndy Fiddaman			case $main:$k in
4744*906afcb8SAndy Fiddaman			:*)	;;
4745*906afcb8SAndy Fiddaman			*:0)	continue ;;
4746*906afcb8SAndy Fiddaman			esac
4747*906afcb8SAndy Fiddaman			case $admin_binary in
4748*906afcb8SAndy Fiddaman			1)	case $s:$q in
4749*906afcb8SAndy Fiddaman				:?*)	continue ;;
4750*906afcb8SAndy Fiddaman				esac
4751*906afcb8SAndy Fiddaman				case " $admin_bin_hosts " in
4752*906afcb8SAndy Fiddaman				*" $i "*)
4753*906afcb8SAndy Fiddaman					;;
4754*906afcb8SAndy Fiddaman				*)	continue
4755*906afcb8SAndy Fiddaman					;;
4756*906afcb8SAndy Fiddaman				esac
4757*906afcb8SAndy Fiddaman				;;
4758*906afcb8SAndy Fiddaman			esac
4759*906afcb8SAndy Fiddaman			case $main in
4760*906afcb8SAndy Fiddaman			'')	main=$i ;;
4761*906afcb8SAndy Fiddaman			*)	share_keep="$share_keep $i" ;;
4762*906afcb8SAndy Fiddaman			esac
4763*906afcb8SAndy Fiddaman			echo package "$admin_args" "[ $n $t ]"
4764*906afcb8SAndy Fiddaman			case $exec in
4765*906afcb8SAndy Fiddaman			'')	: > $admin_log/$l ;;
4766*906afcb8SAndy Fiddaman			*)	$exec ": > $admin_log/$l" ;;
4767*906afcb8SAndy Fiddaman			esac
4768*906afcb8SAndy Fiddaman		done
4769*906afcb8SAndy Fiddaman		host=$main
4770*906afcb8SAndy Fiddaman		share=$share_keep
4771*906afcb8SAndy Fiddaman		case $force in
4772*906afcb8SAndy Fiddaman		0)	admin_ditto_update=--update ;;
4773*906afcb8SAndy Fiddaman		*)	admin_ditto_update= ;;
4774*906afcb8SAndy Fiddaman		esac
4775*906afcb8SAndy Fiddaman		case $exec in
4776*906afcb8SAndy Fiddaman		'')	{
4777*906afcb8SAndy Fiddaman			case $admin_binary:$sync in
4778*906afcb8SAndy Fiddaman			:?*)	eval syncname='$'${sync}_name
4779*906afcb8SAndy Fiddaman				test -x $PACKAGEROOT/bin/package && $admin_ditto $admin_ditto_update --remote=$rsh --expr="name=='package'" $PACKAGEROOT/bin $user$syncname:$root/bin
4780*906afcb8SAndy Fiddaman				test -d $PACKAGESRC && $admin_ditto $admin_ditto_update --remote=$rsh --expr="if(level>1&&path!='LICENSES/*')status=SKIP;path=='LICENSES*|*.(pkg|lic|def)'" $PACKAGESRC $user$syncname:$root/lib/package
4781*906afcb8SAndy Fiddaman				for dir in $package_src
4782*906afcb8SAndy Fiddaman				do	case $MAKESKIP in
4783*906afcb8SAndy Fiddaman					'')	expr="--expr=if(name=='$admin_ditto_skip')status=SKIP" ;;
4784*906afcb8SAndy Fiddaman					*)	expr="--expr=if(name=='$admin_ditto_skip'||level==1&&name=='$MAKESKIP')status=SKIP" ;;
4785*906afcb8SAndy Fiddaman					esac
4786*906afcb8SAndy Fiddaman					test -d $PACKAGEROOT/src/$dir && $admin_ditto $admin_ditto_update --remote=$rsh "$expr" $PACKAGEROOT/src/$dir $user$syncname:$root/src/$dir
4787*906afcb8SAndy Fiddaman				done
4788*906afcb8SAndy Fiddaman				;;
4789*906afcb8SAndy Fiddaman			esac
4790*906afcb8SAndy Fiddaman			case $admin_action in
4791*906afcb8SAndy Fiddaman			ditto)	;;
4792*906afcb8SAndy Fiddaman			?*)	pids=
4793*906afcb8SAndy Fiddaman				set '' $host $share
4794*906afcb8SAndy Fiddaman				while	:
4795*906afcb8SAndy Fiddaman				do	shift
4796*906afcb8SAndy Fiddaman					case $# in
4797*906afcb8SAndy Fiddaman					0)	break
4798*906afcb8SAndy Fiddaman						;;
4799*906afcb8SAndy Fiddaman					1)	remote $1
4800*906afcb8SAndy Fiddaman						;;
4801*906afcb8SAndy Fiddaman					*)	remote $1 &
4802*906afcb8SAndy Fiddaman						pids="$pids $!"
4803*906afcb8SAndy Fiddaman						;;
4804*906afcb8SAndy Fiddaman					esac
4805*906afcb8SAndy Fiddaman				done
4806*906afcb8SAndy Fiddaman				case $pids in
4807*906afcb8SAndy Fiddaman				?*)	wait $pids ;;
4808*906afcb8SAndy Fiddaman				esac
4809*906afcb8SAndy Fiddaman				;;
4810*906afcb8SAndy Fiddaman			esac
4811*906afcb8SAndy Fiddaman			} < /dev/null > $admin_log/$main_log 2>&1 &
4812*906afcb8SAndy Fiddaman			pids="$pids $!"
4813*906afcb8SAndy Fiddaman			;;
4814*906afcb8SAndy Fiddaman		*)	echo "{"
4815*906afcb8SAndy Fiddaman			case $admin_binary:$sync in
4816*906afcb8SAndy Fiddaman			:?*)	eval syncname='$'${sync}_name
4817*906afcb8SAndy Fiddaman				test -d $PACKAGESRC && echo $admin_ditto $admin_ditto_update --remote=$rsh --expr="if(level>1)status=SKIP;name=='*.(pkg|lic|def)'" $PACKAGESRC $user$syncname:$root/lib/package
4818*906afcb8SAndy Fiddaman				for dir in $package_src
4819*906afcb8SAndy Fiddaman				do	case $MAKESKIP in
4820*906afcb8SAndy Fiddaman					'')	expr="--expr=if(name=='$admin_ditto_skip')status=SKIP" ;;
4821*906afcb8SAndy Fiddaman					*)	expr="--expr=if(name=='$admin_ditto_skip'||level==1&&name=='$MAKESKIP')status=SKIP" ;;
4822*906afcb8SAndy Fiddaman					esac
4823*906afcb8SAndy Fiddaman					test -d $PACKAGEROOT/src/$dir && echo $admin_ditto $admin_ditto_update --remote=$rsh "$expr" $PACKAGEROOT/src/$dir $user$syncname:$root/src/$dir
4824*906afcb8SAndy Fiddaman				done
4825*906afcb8SAndy Fiddaman				;;
4826*906afcb8SAndy Fiddaman			esac
4827*906afcb8SAndy Fiddaman			case $admin_action in
4828*906afcb8SAndy Fiddaman			ditto)	;;
4829*906afcb8SAndy Fiddaman			?*)	pids=
4830*906afcb8SAndy Fiddaman				set '' $host $share
4831*906afcb8SAndy Fiddaman				while	:
4832*906afcb8SAndy Fiddaman				do	shift
4833*906afcb8SAndy Fiddaman					case $# in
4834*906afcb8SAndy Fiddaman					0)	break
4835*906afcb8SAndy Fiddaman						;;
4836*906afcb8SAndy Fiddaman					1)	remote $1
4837*906afcb8SAndy Fiddaman						;;
4838*906afcb8SAndy Fiddaman					*)	remote $1 "&"
4839*906afcb8SAndy Fiddaman						pids=1
4840*906afcb8SAndy Fiddaman						;;
4841*906afcb8SAndy Fiddaman					esac
4842*906afcb8SAndy Fiddaman				done
4843*906afcb8SAndy Fiddaman				case $pids in
4844*906afcb8SAndy Fiddaman				1)	echo wait ;;
4845*906afcb8SAndy Fiddaman				esac
4846*906afcb8SAndy Fiddaman				;;
4847*906afcb8SAndy Fiddaman			esac
4848*906afcb8SAndy Fiddaman			echo "} < /dev/null > $admin_log/$main_log 2>&1 &"
4849*906afcb8SAndy Fiddaman			;;
4850*906afcb8SAndy Fiddaman		esac
4851*906afcb8SAndy Fiddaman		eval name='$'${main}_name
4852*906afcb8SAndy Fiddaman		hosts="$hosts $name"
4853*906afcb8SAndy Fiddaman		logs="$logs $main_log"
4854*906afcb8SAndy Fiddaman		for share in $share
4855*906afcb8SAndy Fiddaman		do	eval keep=\$${share}_keep
4856*906afcb8SAndy Fiddaman			case $keep in
4857*906afcb8SAndy Fiddaman			1)	eval name='$'${share}_name log='$'${share}_log
4858*906afcb8SAndy Fiddaman				hosts="$hosts $name"
4859*906afcb8SAndy Fiddaman				logs="$logs $log"
4860*906afcb8SAndy Fiddaman				;;
4861*906afcb8SAndy Fiddaman			esac
4862*906afcb8SAndy Fiddaman		done
4863*906afcb8SAndy Fiddaman	done
4864*906afcb8SAndy Fiddaman	case $exec in
4865*906afcb8SAndy Fiddaman	'')	# track the progress
4866*906afcb8SAndy Fiddaman		case $quiet in
4867*906afcb8SAndy Fiddaman		0)	cd $admin_log
4868*906afcb8SAndy Fiddaman			tail -t $PACKAGE_admin_tail_timeout -f $logs
4869*906afcb8SAndy Fiddaman			cd ..
4870*906afcb8SAndy Fiddaman			;;
4871*906afcb8SAndy Fiddaman		esac
4872*906afcb8SAndy Fiddaman		# wait for the remote actions to complete
4873*906afcb8SAndy Fiddaman		wait
4874*906afcb8SAndy Fiddaman		trap - 1 2 3 15
4875*906afcb8SAndy Fiddaman		# update the db
4876*906afcb8SAndy Fiddaman		exec < $admin_db || exit
4877*906afcb8SAndy Fiddaman		exec 9>&1
4878*906afcb8SAndy Fiddaman		D=`date +%y%m%d`
4879*906afcb8SAndy Fiddaman		while	read line
4880*906afcb8SAndy Fiddaman		do	set -- $line
4881*906afcb8SAndy Fiddaman			case $1 in
4882*906afcb8SAndy Fiddaman			''|'#'*|*=*)
4883*906afcb8SAndy Fiddaman				;;
4884*906afcb8SAndy Fiddaman			*)	case " $hosts " in
4885*906afcb8SAndy Fiddaman				*" $2 "*)
4886*906afcb8SAndy Fiddaman					: ast date command assumed :
4887*906afcb8SAndy Fiddaman					E=`eval date -E \`egrep '[ 	](start|done)[ 	][ 	]*at[ 	]' $admin_log/$2 | sed -e 's/.*[ 	][ 	]*at[ 	][ 	]*//' -e 's/[ 	][ 	]*in[ 	].*$//' -e 's/.*/"&"/'\``
4888*906afcb8SAndy Fiddaman					M=$6 T=$7 W=$8
4889*906afcb8SAndy Fiddaman					case $admin_action in
4890*906afcb8SAndy Fiddaman					make|view)
4891*906afcb8SAndy Fiddaman						M=`egrep -c ']:.* (\*\*\*.* code|don'\''t know) | \*\*\* termination code ' $admin_log/$2` ;;
4892*906afcb8SAndy Fiddaman					test)	T=`grep -ci 'fail[es]' $admin_log/$2` ;;
4893*906afcb8SAndy Fiddaman					*)	W=`grep '^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*:.' $admin_log/$2 | egrep -cv 'start at|done  at|output captured|warning:|: package not found|whence: command not found'` ;;
4894*906afcb8SAndy Fiddaman					esac
4895*906afcb8SAndy Fiddaman					case $1 in
4896*906afcb8SAndy Fiddaman					?|??|???|????|?????|??????|???????)
4897*906afcb8SAndy Fiddaman						t1='		'
4898*906afcb8SAndy Fiddaman						;;
4899*906afcb8SAndy Fiddaman					????????|?????????|??????????|???????????|????????????|?????????????|??????????????|???????????????)
4900*906afcb8SAndy Fiddaman						t1='	'
4901*906afcb8SAndy Fiddaman						;;
4902*906afcb8SAndy Fiddaman					*)	t1=''
4903*906afcb8SAndy Fiddaman						;;
4904*906afcb8SAndy Fiddaman					esac
4905*906afcb8SAndy Fiddaman					case $2 in
4906*906afcb8SAndy Fiddaman					?|??|???|????|?????|??????|???????)
4907*906afcb8SAndy Fiddaman						t2='	'
4908*906afcb8SAndy Fiddaman						;;
4909*906afcb8SAndy Fiddaman					*)	t2=''
4910*906afcb8SAndy Fiddaman						;;
4911*906afcb8SAndy Fiddaman					esac
4912*906afcb8SAndy Fiddaman					case $3 in
4913*906afcb8SAndy Fiddaman					?|??|???|????|?????|??????|???????)
4914*906afcb8SAndy Fiddaman						t3='	'
4915*906afcb8SAndy Fiddaman						;;
4916*906afcb8SAndy Fiddaman					*)	t3=''
4917*906afcb8SAndy Fiddaman						;;
4918*906afcb8SAndy Fiddaman					esac
4919*906afcb8SAndy Fiddaman					case $E in
4920*906afcb8SAndy Fiddaman					?????)	E=" $E" ;;
4921*906afcb8SAndy Fiddaman					????)	E="  $E" ;;
4922*906afcb8SAndy Fiddaman					???)	E="   $E" ;;
4923*906afcb8SAndy Fiddaman					??)	E="    $E" ;;
4924*906afcb8SAndy Fiddaman					?)	E="     $E" ;;
4925*906afcb8SAndy Fiddaman					esac
4926*906afcb8SAndy Fiddaman					case $M in
4927*906afcb8SAndy Fiddaman					???)	M="$M" ;;
4928*906afcb8SAndy Fiddaman					??)	M=" $M" ;;
4929*906afcb8SAndy Fiddaman					?)	M="  $M" ;;
4930*906afcb8SAndy Fiddaman					'')	M="  0" ;;
4931*906afcb8SAndy Fiddaman					esac
4932*906afcb8SAndy Fiddaman					case $T in
4933*906afcb8SAndy Fiddaman					???)	T="$T" ;;
4934*906afcb8SAndy Fiddaman					??)	T=" $T" ;;
4935*906afcb8SAndy Fiddaman					?)	T="  $T" ;;
4936*906afcb8SAndy Fiddaman					'')	T="  0" ;;
4937*906afcb8SAndy Fiddaman					esac
4938*906afcb8SAndy Fiddaman					case $W in
4939*906afcb8SAndy Fiddaman					???)	W="$W" ;;
4940*906afcb8SAndy Fiddaman					??)	W=" $W" ;;
4941*906afcb8SAndy Fiddaman					?)	W="  $W" ;;
4942*906afcb8SAndy Fiddaman					'')	W="  0" ;;
4943*906afcb8SAndy Fiddaman					esac
4944*906afcb8SAndy Fiddaman					A=$1$t1
4945*906afcb8SAndy Fiddaman					H=$2$t2
4946*906afcb8SAndy Fiddaman					R=$3$t3
4947*906afcb8SAndy Fiddaman					case $# in
4948*906afcb8SAndy Fiddaman					[0-8])	O=
4949*906afcb8SAndy Fiddaman						K=
4950*906afcb8SAndy Fiddaman						;;
4951*906afcb8SAndy Fiddaman					*)	shift 8
4952*906afcb8SAndy Fiddaman						O=$1
4953*906afcb8SAndy Fiddaman						K=$2
4954*906afcb8SAndy Fiddaman						case $O in
4955*906afcb8SAndy Fiddaman						''|?|??|???)	K="	$K" ;;
4956*906afcb8SAndy Fiddaman						esac
4957*906afcb8SAndy Fiddaman						case $# in
4958*906afcb8SAndy Fiddaman						[0-2])	;;
4959*906afcb8SAndy Fiddaman						*)	K="$K $*" ;;
4960*906afcb8SAndy Fiddaman						esac
4961*906afcb8SAndy Fiddaman						;;
4962*906afcb8SAndy Fiddaman					esac
4963*906afcb8SAndy Fiddaman					echo "$A	$H	$R	$D	$E	$M $T $W $O	$K"
4964*906afcb8SAndy Fiddaman					echo "$A	$H	$R	$D	$E	$M $T $W $O	$K" >&9
4965*906afcb8SAndy Fiddaman					continue
4966*906afcb8SAndy Fiddaman					;;
4967*906afcb8SAndy Fiddaman				esac
4968*906afcb8SAndy Fiddaman				;;
4969*906afcb8SAndy Fiddaman			esac
4970*906afcb8SAndy Fiddaman			echo "$line"
4971*906afcb8SAndy Fiddaman		done > $admin_db.new
4972*906afcb8SAndy Fiddaman		mv $admin_db $admin_db.old
4973*906afcb8SAndy Fiddaman		mv $admin_db.new $admin_db
4974*906afcb8SAndy Fiddaman		;;
4975*906afcb8SAndy Fiddaman	esac
4976*906afcb8SAndy Fiddaman	;;
4977*906afcb8SAndy Fiddaman
4978*906afcb8SAndy Fiddamanclean|clobber)
4979*906afcb8SAndy Fiddaman	cd $PACKAGEROOT
4980*906afcb8SAndy Fiddaman	$exec rm -rf $INSTALLROOT
4981*906afcb8SAndy Fiddaman	exit
4982*906afcb8SAndy Fiddaman	;;
4983*906afcb8SAndy Fiddaman
4984*906afcb8SAndy Fiddamancontents|list)
4985*906afcb8SAndy Fiddaman	# all work in $PACKAGESRC
4986*906afcb8SAndy Fiddaman
4987*906afcb8SAndy Fiddaman	cd $PACKAGESRC
4988*906afcb8SAndy Fiddaman
4989*906afcb8SAndy Fiddaman	# generate the package list
4990*906afcb8SAndy Fiddaman
4991*906afcb8SAndy Fiddaman	set '' $target $package
4992*906afcb8SAndy Fiddaman	shift
4993*906afcb8SAndy Fiddaman	argc=$#
4994*906afcb8SAndy Fiddaman	case $# in
4995*906afcb8SAndy Fiddaman	0)	set '' *.pkg
4996*906afcb8SAndy Fiddaman		case $2 in
4997*906afcb8SAndy Fiddaman		'*.pkg')
4998*906afcb8SAndy Fiddaman			echo $command: $action: no packages >&2
4999*906afcb8SAndy Fiddaman			exit 1
5000*906afcb8SAndy Fiddaman			;;
5001*906afcb8SAndy Fiddaman		esac
5002*906afcb8SAndy Fiddaman		set '' `echo $* | sed 's,\.pkg,,g'`
5003*906afcb8SAndy Fiddaman		shift
5004*906afcb8SAndy Fiddaman		;;
5005*906afcb8SAndy Fiddaman	esac
5006*906afcb8SAndy Fiddaman	sep="$nl    "
5007*906afcb8SAndy Fiddaman	echo packages in $PACKAGEROOT
5008*906afcb8SAndy Fiddaman	case $action in
5009*906afcb8SAndy Fiddaman	list)	echo
5010*906afcb8SAndy Fiddaman		echo "NAME${nl}VERSION${nl}RELEASE${nl}TYPE${nl}STATUS${nl}REQUIRES${nl}----${nl}-------${nl}-------${nl}----${nl}------${nl}--------" | pr -6 -a -o4 -t
5011*906afcb8SAndy Fiddaman		;;
5012*906afcb8SAndy Fiddaman	esac
5013*906afcb8SAndy Fiddaman	{
5014*906afcb8SAndy Fiddaman	omit=:
5015*906afcb8SAndy Fiddaman	for pkg
5016*906afcb8SAndy Fiddaman	do	if	test ! -f $pkg.pkg
5017*906afcb8SAndy Fiddaman		then	echo $command: $action: $pkg: not a package >&2
5018*906afcb8SAndy Fiddaman		else	if	test -f gen/$pkg.ver
5019*906afcb8SAndy Fiddaman			then	set '' `cat gen/$pkg.ver`
5020*906afcb8SAndy Fiddaman				case $3 in
5021*906afcb8SAndy Fiddaman				$2)	ver=base ;;
5022*906afcb8SAndy Fiddaman				*)	ver=$3 ;;
5023*906afcb8SAndy Fiddaman				esac
5024*906afcb8SAndy Fiddaman				if	test -s tgz/$pkg.tim
5025*906afcb8SAndy Fiddaman				then	sts=local
5026*906afcb8SAndy Fiddaman				else	sts=
5027*906afcb8SAndy Fiddaman				fi
5028*906afcb8SAndy Fiddaman			else	ver=
5029*906afcb8SAndy Fiddaman				sts=unwritten
5030*906afcb8SAndy Fiddaman			fi
5031*906afcb8SAndy Fiddaman			typ=
5032*906afcb8SAndy Fiddaman			txt=
5033*906afcb8SAndy Fiddaman			cmp= cmp_sep=
5034*906afcb8SAndy Fiddaman			req= req_sep=
5035*906afcb8SAndy Fiddaman			op=::
5036*906afcb8SAndy Fiddaman			exec < $pkg.pkg
5037*906afcb8SAndy Fiddaman			while	read line
5038*906afcb8SAndy Fiddaman			do	IFS=' 	\\'
5039*906afcb8SAndy Fiddaman				set '' $line
5040*906afcb8SAndy Fiddaman				IFS=$ifs
5041*906afcb8SAndy Fiddaman				while	:
5042*906afcb8SAndy Fiddaman				do	shift
5043*906afcb8SAndy Fiddaman					case $# in
5044*906afcb8SAndy Fiddaman					0)	break ;;
5045*906afcb8SAndy Fiddaman					esac
5046*906afcb8SAndy Fiddaman					case $1 in
5047*906afcb8SAndy Fiddaman					:*:)	op=$1
5048*906afcb8SAndy Fiddaman						;;
5049*906afcb8SAndy Fiddaman					INIT|'$('*|*')')
5050*906afcb8SAndy Fiddaman						;;
5051*906afcb8SAndy Fiddaman					*)	case $op in
5052*906afcb8SAndy Fiddaman						:DESCRIPTION:)
5053*906afcb8SAndy Fiddaman							txt="$txt$sep$line"
5054*906afcb8SAndy Fiddaman							break
5055*906afcb8SAndy Fiddaman							;;
5056*906afcb8SAndy Fiddaman						:PACKAGE:)
5057*906afcb8SAndy Fiddaman							cmp="$cmp$cmp_sep$1"
5058*906afcb8SAndy Fiddaman							cmp_sep=$nl
5059*906afcb8SAndy Fiddaman							;;
5060*906afcb8SAndy Fiddaman						:REQUIRES:)
5061*906afcb8SAndy Fiddaman							req="$req$req_sep$1"
5062*906afcb8SAndy Fiddaman							req_sep=" "
5063*906afcb8SAndy Fiddaman							;;
5064*906afcb8SAndy Fiddaman						esac
5065*906afcb8SAndy Fiddaman						;;
5066*906afcb8SAndy Fiddaman					esac
5067*906afcb8SAndy Fiddaman				done
5068*906afcb8SAndy Fiddaman			done
5069*906afcb8SAndy Fiddaman			exec < /dev/null
5070*906afcb8SAndy Fiddaman			case $txt in
5071*906afcb8SAndy Fiddaman			?*)	txt="$nl$txt" ;;
5072*906afcb8SAndy Fiddaman			esac
5073*906afcb8SAndy Fiddaman			case :$ver: in
5074*906afcb8SAndy Fiddaman			*::*)	;;
5075*906afcb8SAndy Fiddaman			*)	case $action in
5076*906afcb8SAndy Fiddaman				list)	case $sts in
5077*906afcb8SAndy Fiddaman					'')	case `ls -t "tgz/$pkg.$ver.base" "tgz/$pkg.tim" 2>/dev/null` in
5078*906afcb8SAndy Fiddaman						"tgz/$pkg.tim"*)
5079*906afcb8SAndy Fiddaman							sts=read
5080*906afcb8SAndy Fiddaman							;;
5081*906afcb8SAndy Fiddaman						*)	sts=unread
5082*906afcb8SAndy Fiddaman							;;
5083*906afcb8SAndy Fiddaman						esac
5084*906afcb8SAndy Fiddaman						;;
5085*906afcb8SAndy Fiddaman					esac
5086*906afcb8SAndy Fiddaman					echo "$pkg${nl}$ver${nl}base${nl}$typ${nl}$sts${nl}$req"
5087*906afcb8SAndy Fiddaman					case $typ in
5088*906afcb8SAndy Fiddaman					'')	omit=$omit$pkg.$ver.base: ;;
5089*906afcb8SAndy Fiddaman					esac
5090*906afcb8SAndy Fiddaman					;;
5091*906afcb8SAndy Fiddaman				*)	case $req in
5092*906afcb8SAndy Fiddaman					?*)	req=": $req" ;;
5093*906afcb8SAndy Fiddaman					esac
5094*906afcb8SAndy Fiddaman					echo
5095*906afcb8SAndy Fiddaman					echo $pkg $ver $req "$txt"
5096*906afcb8SAndy Fiddaman					case $cmp in
5097*906afcb8SAndy Fiddaman					?*)	echo "${sep}Components in this package:$nl"
5098*906afcb8SAndy Fiddaman						echo "$cmp" | pr -4 -o4 -t ;;
5099*906afcb8SAndy Fiddaman					esac
5100*906afcb8SAndy Fiddaman					;;
5101*906afcb8SAndy Fiddaman				esac
5102*906afcb8SAndy Fiddaman				;;
5103*906afcb8SAndy Fiddaman			esac
5104*906afcb8SAndy Fiddaman		fi
5105*906afcb8SAndy Fiddaman	done
5106*906afcb8SAndy Fiddaman	case $argc:$action in
5107*906afcb8SAndy Fiddaman	0:list)	if	test -d tgz
5108*906afcb8SAndy Fiddaman		then	cd tgz
5109*906afcb8SAndy Fiddaman			# f:file p:package v:version r:release t:type u:update
5110*906afcb8SAndy Fiddaman			for f in `find . -name '*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]*' -print | sed 's,^\./,,' | sort -r`
5111*906afcb8SAndy Fiddaman			do	eval `echo "$f" | sed -e 's,\.c$,,' -e 's,\.gz$,,' -e 's,\.exe$,,' -e 's,\.tgz$,,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]\([0123456789][0123456789][0123456789][0123456789][^_.]*\)[_.]*\(.*\),p=\1 v=\2 r=\3 t=\4,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]*\(.*\),p=\1 v=\2 r=base t=\3,'`
5112*906afcb8SAndy Fiddaman				case $t in
5113*906afcb8SAndy Fiddaman				'')	case $omit in
5114*906afcb8SAndy Fiddaman					*:$p.$v.$r:*)	continue ;;
5115*906afcb8SAndy Fiddaman					esac
5116*906afcb8SAndy Fiddaman					u=$p.tim
5117*906afcb8SAndy Fiddaman					;;
5118*906afcb8SAndy Fiddaman				*)	u=$p.$t.tim
5119*906afcb8SAndy Fiddaman					;;
5120*906afcb8SAndy Fiddaman				esac
5121*906afcb8SAndy Fiddaman				if	test -s "$u"
5122*906afcb8SAndy Fiddaman				then	s=local
5123*906afcb8SAndy Fiddaman				elif	test -f "$u"
5124*906afcb8SAndy Fiddaman				then	case `ls -t "$f" "$u" 2>/dev/null` in
5125*906afcb8SAndy Fiddaman					"$u"*)	s=read ;;
5126*906afcb8SAndy Fiddaman					*)	s=unread ;;
5127*906afcb8SAndy Fiddaman					esac
5128*906afcb8SAndy Fiddaman				else	s=unread
5129*906afcb8SAndy Fiddaman				fi
5130*906afcb8SAndy Fiddaman				echo "$p$nl$v$nl$r$nl$t$nl$s$nl"
5131*906afcb8SAndy Fiddaman			done
5132*906afcb8SAndy Fiddaman		fi
5133*906afcb8SAndy Fiddaman		;;
5134*906afcb8SAndy Fiddaman	esac
5135*906afcb8SAndy Fiddaman	} |
5136*906afcb8SAndy Fiddaman	case $action in
5137*906afcb8SAndy Fiddaman	list)	pr -6 -a -o4 -t | sort -u ;;
5138*906afcb8SAndy Fiddaman	*)	cat ;;
5139*906afcb8SAndy Fiddaman	esac
5140*906afcb8SAndy Fiddaman	case $argc in
5141*906afcb8SAndy Fiddaman	0)	if	test -d $PACKAGEROOT/arch
5142*906afcb8SAndy Fiddaman		then	echo
5143*906afcb8SAndy Fiddaman			echo architectures in $PACKAGEROOT
5144*906afcb8SAndy Fiddaman			echo
5145*906afcb8SAndy Fiddaman			for i in `ls $PACKAGEROOT/arch`
5146*906afcb8SAndy Fiddaman			do	if	test -f $PACKAGEROOT/arch/$i/lib/package/gen/host
5147*906afcb8SAndy Fiddaman				then	h=`cat $PACKAGEROOT/arch/$i/lib/package/gen/host`
5148*906afcb8SAndy Fiddaman				else	h=
5149*906afcb8SAndy Fiddaman				fi
5150*906afcb8SAndy Fiddaman				echo $i
5151*906afcb8SAndy Fiddaman				echo $h
5152*906afcb8SAndy Fiddaman				echo
5153*906afcb8SAndy Fiddaman				echo
5154*906afcb8SAndy Fiddaman			done | pr -4 -a -o4 -t
5155*906afcb8SAndy Fiddaman		fi
5156*906afcb8SAndy Fiddaman		;;
5157*906afcb8SAndy Fiddaman	esac
5158*906afcb8SAndy Fiddaman	;;
5159*906afcb8SAndy Fiddaman
5160*906afcb8SAndy Fiddamancopyright)
5161*906afcb8SAndy Fiddaman	# all work in $PACKAGESRC
5162*906afcb8SAndy Fiddaman
5163*906afcb8SAndy Fiddaman	cd $PACKAGESRC
5164*906afcb8SAndy Fiddaman
5165*906afcb8SAndy Fiddaman	# generate the package list
5166*906afcb8SAndy Fiddaman
5167*906afcb8SAndy Fiddaman	set '' $target $package
5168*906afcb8SAndy Fiddaman	shift
5169*906afcb8SAndy Fiddaman	argc=$#
5170*906afcb8SAndy Fiddaman	case $# in
5171*906afcb8SAndy Fiddaman	0)	set '' `echo *.lic | sed 's,\.lic,,g'`
5172*906afcb8SAndy Fiddaman		shift
5173*906afcb8SAndy Fiddaman		case $1 in
5174*906afcb8SAndy Fiddaman		'*')	echo $command: $action: no packages >&2
5175*906afcb8SAndy Fiddaman			exit 1
5176*906afcb8SAndy Fiddaman			;;
5177*906afcb8SAndy Fiddaman		esac
5178*906afcb8SAndy Fiddaman		;;
5179*906afcb8SAndy Fiddaman	esac
5180*906afcb8SAndy Fiddaman	checkaout proto || exit
5181*906afcb8SAndy Fiddaman	for i
5182*906afcb8SAndy Fiddaman	do	copyright $i
5183*906afcb8SAndy Fiddaman	done
5184*906afcb8SAndy Fiddaman	;;
5185*906afcb8SAndy Fiddaman
5186*906afcb8SAndy Fiddamanexport)	case $INSTALLROOT in
5187*906afcb8SAndy Fiddaman	$PACKAGEROOT)
5188*906afcb8SAndy Fiddaman		INSTALLROOT=$INSTALLROOT/arch/$HOSTTYPE
5189*906afcb8SAndy Fiddaman		;;
5190*906afcb8SAndy Fiddaman	esac
5191*906afcb8SAndy Fiddaman	case $only in
5192*906afcb8SAndy Fiddaman	0)	v='$i=' ;;
5193*906afcb8SAndy Fiddaman	*)	v= ;;
5194*906afcb8SAndy Fiddaman	esac
5195*906afcb8SAndy Fiddaman	set '' $target $package
5196*906afcb8SAndy Fiddaman	case $# in
5197*906afcb8SAndy Fiddaman	1)	set '' $env ;;
5198*906afcb8SAndy Fiddaman	esac
5199*906afcb8SAndy Fiddaman	while	:
5200*906afcb8SAndy Fiddaman	do	case $# in
5201*906afcb8SAndy Fiddaman		1)	break ;;
5202*906afcb8SAndy Fiddaman		esac
5203*906afcb8SAndy Fiddaman		shift
5204*906afcb8SAndy Fiddaman		i=$1
5205*906afcb8SAndy Fiddaman		eval echo ${v}'$'${i}
5206*906afcb8SAndy Fiddaman	done
5207*906afcb8SAndy Fiddaman	;;
5208*906afcb8SAndy Fiddaman
5209*906afcb8SAndy Fiddamaninstall)cd $PACKAGEROOT
5210*906afcb8SAndy Fiddaman	set '' $package
5211*906afcb8SAndy Fiddaman	shift
5212*906afcb8SAndy Fiddaman	case $only in
5213*906afcb8SAndy Fiddaman	0)	set '' `order "$@"`
5214*906afcb8SAndy Fiddaman		shift
5215*906afcb8SAndy Fiddaman		;;
5216*906afcb8SAndy Fiddaman	esac
5217*906afcb8SAndy Fiddaman	case $# in
5218*906afcb8SAndy Fiddaman	0)	echo "$command: at least one package name expected" >&2
5219*906afcb8SAndy Fiddaman		exit 1
5220*906afcb8SAndy Fiddaman		;;
5221*906afcb8SAndy Fiddaman	esac
5222*906afcb8SAndy Fiddaman	package=$*
5223*906afcb8SAndy Fiddaman	requirements - $package
5224*906afcb8SAndy Fiddaman	set '' $target
5225*906afcb8SAndy Fiddaman	shift
5226*906afcb8SAndy Fiddaman	case $1 in
5227*906afcb8SAndy Fiddaman	flat)	flat=1 # backwards compatibility -- documentation dropped
5228*906afcb8SAndy Fiddaman		shift
5229*906afcb8SAndy Fiddaman		;;
5230*906afcb8SAndy Fiddaman	esac
5231*906afcb8SAndy Fiddaman	case $# in
5232*906afcb8SAndy Fiddaman	0)	echo "$command: $action: target directory argument expected" >&2
5233*906afcb8SAndy Fiddaman		exit 1
5234*906afcb8SAndy Fiddaman		;;
5235*906afcb8SAndy Fiddaman	esac
5236*906afcb8SAndy Fiddaman	target=
5237*906afcb8SAndy Fiddaman	while	:
5238*906afcb8SAndy Fiddaman	do	case $# in
5239*906afcb8SAndy Fiddaman		1)	directory=$1
5240*906afcb8SAndy Fiddaman			break
5241*906afcb8SAndy Fiddaman			;;
5242*906afcb8SAndy Fiddaman		esac
5243*906afcb8SAndy Fiddaman		target="$target $1"
5244*906afcb8SAndy Fiddaman		shift
5245*906afcb8SAndy Fiddaman	done
5246*906afcb8SAndy Fiddaman	if	test ! -d $directory
5247*906afcb8SAndy Fiddaman	then	echo "$command: $action: $directory: target directory not found" >&2
5248*906afcb8SAndy Fiddaman		exit 1
5249*906afcb8SAndy Fiddaman	fi
5250*906afcb8SAndy Fiddaman	case $target in
5251*906afcb8SAndy Fiddaman	'')	cd arch
5252*906afcb8SAndy Fiddaman		set '' *
5253*906afcb8SAndy Fiddaman		shift
5254*906afcb8SAndy Fiddaman		target=$*
5255*906afcb8SAndy Fiddaman		cd ..
5256*906afcb8SAndy Fiddaman		;;
5257*906afcb8SAndy Fiddaman	esac
5258*906afcb8SAndy Fiddaman	code=0
5259*906afcb8SAndy Fiddaman	makecheck=1
5260*906afcb8SAndy Fiddaman	for a in $target
5261*906afcb8SAndy Fiddaman	do	case $a in
5262*906afcb8SAndy Fiddaman		-)	a=$HOSTTYPE ;;
5263*906afcb8SAndy Fiddaman		esac
5264*906afcb8SAndy Fiddaman		case $flat:$a in
5265*906afcb8SAndy Fiddaman		1:*|?:.)dest=$directory
5266*906afcb8SAndy Fiddaman			;;
5267*906afcb8SAndy Fiddaman		*)	dest=$directory/arch/$a
5268*906afcb8SAndy Fiddaman			if	test "" = "$exec" -a ! -d $dest
5269*906afcb8SAndy Fiddaman			then	mkdir -p $dest || {
5270*906afcb8SAndy Fiddaman					echo "$command: $dest: destination directory must exist" >&2
5271*906afcb8SAndy Fiddaman					exit 1
5272*906afcb8SAndy Fiddaman				}
5273*906afcb8SAndy Fiddaman			fi
5274*906afcb8SAndy Fiddaman			;;
5275*906afcb8SAndy Fiddaman		esac
5276*906afcb8SAndy Fiddaman		for i in $package
5277*906afcb8SAndy Fiddaman		do	if	test "ratz" = "$i"
5278*906afcb8SAndy Fiddaman			then	: skip
5279*906afcb8SAndy Fiddaman			elif	test -f arch/$a/lib/package/gen/$i.sum
5280*906afcb8SAndy Fiddaman			then	package_install $directory arch/$a/lib/package/gen/$i.sum || code=1
5281*906afcb8SAndy Fiddaman			elif	test ! -d arch/$a/bin
5282*906afcb8SAndy Fiddaman			then	echo "$command: $a: invalid architecture" >&2
5283*906afcb8SAndy Fiddaman			elif	test ! -d $dest
5284*906afcb8SAndy Fiddaman			then	echo "$command: $dest: destination directory must exist" >&2
5285*906afcb8SAndy Fiddaman			else	if	test "" != "$makecheck"
5286*906afcb8SAndy Fiddaman				then	if	onpath $MAKE
5287*906afcb8SAndy Fiddaman					then	MAKE=$_onpath_
5288*906afcb8SAndy Fiddaman					else	echo "$command: $MAKE: not found" >&2
5289*906afcb8SAndy Fiddaman						exit 1
5290*906afcb8SAndy Fiddaman					fi
5291*906afcb8SAndy Fiddaman					makecheck=
5292*906afcb8SAndy Fiddaman				fi
5293*906afcb8SAndy Fiddaman				if	test "" != "$exec"
5294*906afcb8SAndy Fiddaman				then	(
5295*906afcb8SAndy Fiddaman						trap - 0 1 2 15
5296*906afcb8SAndy Fiddaman						echo "=== $i installation manifest ==="
5297*906afcb8SAndy Fiddaman						cd arch/$a
5298*906afcb8SAndy Fiddaman						(
5299*906afcb8SAndy Fiddaman						cd lib/package
5300*906afcb8SAndy Fiddaman						INSTALLROOT=$PACKAGEROOT/arch/$a
5301*906afcb8SAndy Fiddaman						VPATH=$INSTALLROOT:$PACKAGEROOT:$VPATH
5302*906afcb8SAndy Fiddaman						export INSTALLROOT VPATH
5303*906afcb8SAndy Fiddaman						$MAKE -s $makeflags -f $i.pkg $qualifier list.installed $assign
5304*906afcb8SAndy Fiddaman						) | sort -u
5305*906afcb8SAndy Fiddaman					)
5306*906afcb8SAndy Fiddaman				else	(
5307*906afcb8SAndy Fiddaman						set -
5308*906afcb8SAndy Fiddaman						cd arch/$a
5309*906afcb8SAndy Fiddaman						(
5310*906afcb8SAndy Fiddaman						cd lib/package
5311*906afcb8SAndy Fiddaman						INSTALLROOT=$PACKAGEROOT/arch/$a
5312*906afcb8SAndy Fiddaman						VPATH=$INSTALLROOT:$PACKAGEROOT:$VPATH
5313*906afcb8SAndy Fiddaman						export INSTALLROOT VPATH
5314*906afcb8SAndy Fiddaman						echo lib/$command
5315*906afcb8SAndy Fiddaman						$MAKE -s $makeflags -f $i.pkg $qualifier list.installed $assign
5316*906afcb8SAndy Fiddaman						) | sort -u | pax -drw -ps $dest
5317*906afcb8SAndy Fiddaman					)
5318*906afcb8SAndy Fiddaman				fi
5319*906afcb8SAndy Fiddaman			fi
5320*906afcb8SAndy Fiddaman		done
5321*906afcb8SAndy Fiddaman	done
5322*906afcb8SAndy Fiddaman	exit $code
5323*906afcb8SAndy Fiddaman	;;
5324*906afcb8SAndy Fiddaman
5325*906afcb8SAndy Fiddamanlicense)# all work in $PACKAGESRC/LICENSES
5326*906afcb8SAndy Fiddaman
5327*906afcb8SAndy Fiddaman	cd $PACKAGESRC/LICENSES || exit
5328*906afcb8SAndy Fiddaman
5329*906afcb8SAndy Fiddaman	# generate the package list
5330*906afcb8SAndy Fiddaman
5331*906afcb8SAndy Fiddaman	set '' $target $package
5332*906afcb8SAndy Fiddaman	shift
5333*906afcb8SAndy Fiddaman	argc=$#
5334*906afcb8SAndy Fiddaman	case $# in
5335*906afcb8SAndy Fiddaman	0)	set '' *
5336*906afcb8SAndy Fiddaman		shift
5337*906afcb8SAndy Fiddaman		case $1 in
5338*906afcb8SAndy Fiddaman		'*')	echo $command: $action: no licenses >&2
5339*906afcb8SAndy Fiddaman			exit 1
5340*906afcb8SAndy Fiddaman			;;
5341*906afcb8SAndy Fiddaman		esac
5342*906afcb8SAndy Fiddaman		;;
5343*906afcb8SAndy Fiddaman	*)	checkaout proto || exit
5344*906afcb8SAndy Fiddaman		a=
5345*906afcb8SAndy Fiddaman		for i
5346*906afcb8SAndy Fiddaman		do	while	:
5347*906afcb8SAndy Fiddaman			do	if	test -f ../$i.lic
5348*906afcb8SAndy Fiddaman				then	j=`proto -df -l ../$i.lic -o query=type /dev/null 2>/dev/null`
5349*906afcb8SAndy Fiddaman					case $j in
5350*906afcb8SAndy Fiddaman					?*)	if	test -f $j
5351*906afcb8SAndy Fiddaman						then	case " $a " in
5352*906afcb8SAndy Fiddaman							*" $j "*)	;;
5353*906afcb8SAndy Fiddaman							*)		a="$a $j" ;;
5354*906afcb8SAndy Fiddaman							esac
5355*906afcb8SAndy Fiddaman						fi
5356*906afcb8SAndy Fiddaman						break
5357*906afcb8SAndy Fiddaman						;;
5358*906afcb8SAndy Fiddaman					esac
5359*906afcb8SAndy Fiddaman				fi
5360*906afcb8SAndy Fiddaman				case $i in
5361*906afcb8SAndy Fiddaman				*-*)	i=`echo $i | sed 's/-[^-]*$//'`
5362*906afcb8SAndy Fiddaman					;;
5363*906afcb8SAndy Fiddaman				*)	echo "$command: $i: package license not found" >&2
5364*906afcb8SAndy Fiddaman					break
5365*906afcb8SAndy Fiddaman					;;
5366*906afcb8SAndy Fiddaman				esac
5367*906afcb8SAndy Fiddaman			done
5368*906afcb8SAndy Fiddaman		done
5369*906afcb8SAndy Fiddaman		set '' $a
5370*906afcb8SAndy Fiddaman		shift
5371*906afcb8SAndy Fiddaman		;;
5372*906afcb8SAndy Fiddaman	esac
5373*906afcb8SAndy Fiddaman	for i
5374*906afcb8SAndy Fiddaman	do	case $exec in
5375*906afcb8SAndy Fiddaman		'')	echo
5376*906afcb8SAndy Fiddaman			echo "		--- $i source license ---"
5377*906afcb8SAndy Fiddaman			echo
5378*906afcb8SAndy Fiddaman			cat $i
5379*906afcb8SAndy Fiddaman			;;
5380*906afcb8SAndy Fiddaman		*)	echo $PACKAGESRC/LICENSES/$i
5381*906afcb8SAndy Fiddaman			;;
5382*906afcb8SAndy Fiddaman		esac
5383*906afcb8SAndy Fiddaman	done
5384*906afcb8SAndy Fiddaman	;;
5385*906afcb8SAndy Fiddaman
5386*906afcb8SAndy Fiddamanmake|view)
5387*906afcb8SAndy Fiddaman	cd $PACKAGEROOT
5388*906afcb8SAndy Fiddaman	case $package in
5389*906afcb8SAndy Fiddaman	'')	lic="lib/package/*.lic"
5390*906afcb8SAndy Fiddaman		;;
5391*906afcb8SAndy Fiddaman	*) 	for i in $package
5392*906afcb8SAndy Fiddaman		do	lic="$lic lib/package/$i.lic"
5393*906afcb8SAndy Fiddaman			case $i in
5394*906afcb8SAndy Fiddaman			*-*)	lic="$lic lib/package/"`echo $i | sed 's,-.*,,'`".lic" ;;
5395*906afcb8SAndy Fiddaman			esac
5396*906afcb8SAndy Fiddaman		done
5397*906afcb8SAndy Fiddaman		;;
5398*906afcb8SAndy Fiddaman	esac
5399*906afcb8SAndy Fiddaman	checksrc
5400*906afcb8SAndy Fiddaman	requirements source $package
5401*906afcb8SAndy Fiddaman	components $package
5402*906afcb8SAndy Fiddaman	package=$_components_
5403*906afcb8SAndy Fiddaman
5404*906afcb8SAndy Fiddaman	# check for some required commands
5405*906afcb8SAndy Fiddaman
5406*906afcb8SAndy Fiddaman	must="$AR"
5407*906afcb8SAndy Fiddaman	warn="$NM yacc bison"
5408*906afcb8SAndy Fiddaman	test="$must $warn"
5409*906afcb8SAndy Fiddaman	have=
5410*906afcb8SAndy Fiddaman	IFS=:
5411*906afcb8SAndy Fiddaman	set /$IFS$PATH
5412*906afcb8SAndy Fiddaman	IFS=$ifs
5413*906afcb8SAndy Fiddaman	shift
5414*906afcb8SAndy Fiddaman	for t in $test
5415*906afcb8SAndy Fiddaman	do	if	executable $t
5416*906afcb8SAndy Fiddaman		then	have="$have $t"
5417*906afcb8SAndy Fiddaman		fi
5418*906afcb8SAndy Fiddaman	done
5419*906afcb8SAndy Fiddaman	for d
5420*906afcb8SAndy Fiddaman	do	for t in $test
5421*906afcb8SAndy Fiddaman		do	case " $have " in
5422*906afcb8SAndy Fiddaman			*" $t "*)
5423*906afcb8SAndy Fiddaman				;;
5424*906afcb8SAndy Fiddaman			*)	if	executable $d/$t
5425*906afcb8SAndy Fiddaman				then	have="$have $t"
5426*906afcb8SAndy Fiddaman				fi
5427*906afcb8SAndy Fiddaman				;;
5428*906afcb8SAndy Fiddaman			esac
5429*906afcb8SAndy Fiddaman		done
5430*906afcb8SAndy Fiddaman	done
5431*906afcb8SAndy Fiddaman	case " $have " in
5432*906afcb8SAndy Fiddaman	*" bison "*)	;;
5433*906afcb8SAndy Fiddaman	*" yacc "*)	have="$have bison" ;;
5434*906afcb8SAndy Fiddaman	esac
5435*906afcb8SAndy Fiddaman	case " $have " in
5436*906afcb8SAndy Fiddaman	*" yacc "*)	;;
5437*906afcb8SAndy Fiddaman	*" bison "*)	have="$have yacc" ;;
5438*906afcb8SAndy Fiddaman	esac
5439*906afcb8SAndy Fiddaman	for t in $test
5440*906afcb8SAndy Fiddaman	do	case " $have " in
5441*906afcb8SAndy Fiddaman		*" $t "*)
5442*906afcb8SAndy Fiddaman			;;
5443*906afcb8SAndy Fiddaman		*)	case " $must " in
5444*906afcb8SAndy Fiddaman			*" $t "*)
5445*906afcb8SAndy Fiddaman				echo "$command: $t: not found -- must be on PATH to $action" >&2
5446*906afcb8SAndy Fiddaman				exit 1
5447*906afcb8SAndy Fiddaman				;;
5448*906afcb8SAndy Fiddaman			*)	echo "$command: warning: $t: not found -- some $action actions may fail" >&2
5449*906afcb8SAndy Fiddaman				;;
5450*906afcb8SAndy Fiddaman			esac
5451*906afcb8SAndy Fiddaman			;;
5452*906afcb8SAndy Fiddaman		esac
5453*906afcb8SAndy Fiddaman	done
5454*906afcb8SAndy Fiddaman
5455*906afcb8SAndy Fiddaman	# verify the top view
5456*906afcb8SAndy Fiddaman
5457*906afcb8SAndy Fiddaman	if	test ! -d $PACKAGEROOT/src
5458*906afcb8SAndy Fiddaman	then	note no source packages to make
5459*906afcb8SAndy Fiddaman		exit 0
5460*906afcb8SAndy Fiddaman	elif	test ! -d $INSTALLROOT/src
5461*906afcb8SAndy Fiddaman	then	note initialize the $INSTALLROOT view
5462*906afcb8SAndy Fiddaman	fi
5463*906afcb8SAndy Fiddaman	for i in arch arch/$HOSTTYPE
5464*906afcb8SAndy Fiddaman	do	test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
5465*906afcb8SAndy Fiddaman	done
5466*906afcb8SAndy Fiddaman	for i in bin bin/$OK bin/$OK/lib fun include lib lib/package lib/package/gen src man man/man1 man/man3 man/man8
5467*906afcb8SAndy Fiddaman	do	test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
5468*906afcb8SAndy Fiddaman	done
5469*906afcb8SAndy Fiddaman	make_recurse src
5470*906afcb8SAndy Fiddaman	o= k=
5471*906afcb8SAndy Fiddaman	for i in $makefiles
5472*906afcb8SAndy Fiddaman	do	case $o in
5473*906afcb8SAndy Fiddaman		?*)	o="$o -o" k="$k|" ;;
5474*906afcb8SAndy Fiddaman		esac
5475*906afcb8SAndy Fiddaman		o="$o -name $i"
5476*906afcb8SAndy Fiddaman		k="$k$i"
5477*906afcb8SAndy Fiddaman	done
5478*906afcb8SAndy Fiddaman	o="( $o ) -print"
5479*906afcb8SAndy Fiddaman	for d in $package_src
5480*906afcb8SAndy Fiddaman	do	i=src/$d
5481*906afcb8SAndy Fiddaman		if	test -d $i
5482*906afcb8SAndy Fiddaman		then	test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
5483*906afcb8SAndy Fiddaman			make_recurse $i
5484*906afcb8SAndy Fiddaman			for j in `cd $i; find . $o 2>/dev/null | sed -e 's,^\./,,' -e '/\//!d' -e 's,/[^/]*$,,' | sort -u`
5485*906afcb8SAndy Fiddaman			do	case $j in
5486*906afcb8SAndy Fiddaman				$k|$MAKESKIP) continue ;;
5487*906afcb8SAndy Fiddaman				esac
5488*906afcb8SAndy Fiddaman				test -d $INSTALLROOT/$i/$j ||
5489*906afcb8SAndy Fiddaman				$exec mkdir -p $INSTALLROOT/$i/$j || exit
5490*906afcb8SAndy Fiddaman			done
5491*906afcb8SAndy Fiddaman		fi
5492*906afcb8SAndy Fiddaman	done
5493*906afcb8SAndy Fiddaman	def=
5494*906afcb8SAndy Fiddaman	for i in $lic
5495*906afcb8SAndy Fiddaman	do	test -f $i || continue
5496*906afcb8SAndy Fiddaman		cmp -s $i $INSTALLROOT/$i 2>/dev/null ||
5497*906afcb8SAndy Fiddaman		$exec cp $PACKAGEROOT/$i $INSTALLROOT/$i
5498*906afcb8SAndy Fiddaman		for j in `grep '^. .*\.def$' $i`
5499*906afcb8SAndy Fiddaman		do	case $j in
5500*906afcb8SAndy Fiddaman			.)	;;
5501*906afcb8SAndy Fiddaman			*)	case " $def " in
5502*906afcb8SAndy Fiddaman				*" $i "*)	;;
5503*906afcb8SAndy Fiddaman				*)		def="$def $i" ;;
5504*906afcb8SAndy Fiddaman				esac
5505*906afcb8SAndy Fiddaman				;;
5506*906afcb8SAndy Fiddaman			esac
5507*906afcb8SAndy Fiddaman		done
5508*906afcb8SAndy Fiddaman	done
5509*906afcb8SAndy Fiddaman	for i in $def
5510*906afcb8SAndy Fiddaman	do	i=lib/package/$i
5511*906afcb8SAndy Fiddaman		test -f $i || continue
5512*906afcb8SAndy Fiddaman		cmp -s $i $INSTALLROOT/$i 2>/dev/null ||
5513*906afcb8SAndy Fiddaman		$exec cp $PACKAGEROOT/$i $INSTALLROOT/$i
5514*906afcb8SAndy Fiddaman	done
5515*906afcb8SAndy Fiddaman
5516*906afcb8SAndy Fiddaman	# check $CC and { ar cc ld ldd } intercepts
5517*906afcb8SAndy Fiddaman
5518*906afcb8SAndy Fiddaman	h="${HOSTTYPE} ${HOSTTYPE}.*"
5519*906afcb8SAndy Fiddaman	case $HOSTTYPE in
5520*906afcb8SAndy Fiddaman	*.*)	t=`echo $HOSTTYPE | sed 's/[.][^.]*//'`
5521*906afcb8SAndy Fiddaman		h="$h $t"
5522*906afcb8SAndy Fiddaman		;;
5523*906afcb8SAndy Fiddaman	*)	t=$HOSTTYPE
5524*906afcb8SAndy Fiddaman		;;
5525*906afcb8SAndy Fiddaman	esac
5526*906afcb8SAndy Fiddaman	case $t in
5527*906afcb8SAndy Fiddaman	*[0123456789])
5528*906afcb8SAndy Fiddaman		t=`echo $t | sed 's/[0123456789]*$//'`
5529*906afcb8SAndy Fiddaman		h="$h $t"
5530*906afcb8SAndy Fiddaman		;;
5531*906afcb8SAndy Fiddaman	esac
5532*906afcb8SAndy Fiddaman	case $CC in
5533*906afcb8SAndy Fiddaman	cc)	c=cc
5534*906afcb8SAndy Fiddaman		b=$INSTALLROOT/bin/$c
5535*906afcb8SAndy Fiddaman		t=$INSTALLROOT/lib/package/gen/$c.tim
5536*906afcb8SAndy Fiddaman		intercept=0
5537*906afcb8SAndy Fiddaman		for k in $h
5538*906afcb8SAndy Fiddaman		do	for s in $INITROOT/$c.$k
5539*906afcb8SAndy Fiddaman			do	test -x "$s" || continue
5540*906afcb8SAndy Fiddaman				if	cmp -s "$s" "$b" >/dev/null 2>&1
5541*906afcb8SAndy Fiddaman				then	intercept=1
5542*906afcb8SAndy Fiddaman					break 2
5543*906afcb8SAndy Fiddaman				fi
5544*906afcb8SAndy Fiddaman				case `ls -t "$t" "$b" "$s" 2>/dev/null` in
5545*906afcb8SAndy Fiddaman				$t*)	;;
5546*906afcb8SAndy Fiddaman				$b*)	cc=$b
5547*906afcb8SAndy Fiddaman					;;
5548*906afcb8SAndy Fiddaman				$s*)	cd $INSTALLROOT/lib/package/gen
5549*906afcb8SAndy Fiddaman					tmp=pkg$$
5550*906afcb8SAndy Fiddaman					eval '$'exec echo "'int main(){return 0;}' > $tmp.c"
5551*906afcb8SAndy Fiddaman					if	$exec $s -o $tmp.exe $tmp.c >/dev/null 2>&1 &&
5552*906afcb8SAndy Fiddaman						test -x $tmp.exe
5553*906afcb8SAndy Fiddaman					then	case $HOSTTYPE in
5554*906afcb8SAndy Fiddaman						*.mips*)$s -version >/dev/null 2>&1 || s= ;;
5555*906afcb8SAndy Fiddaman						esac
5556*906afcb8SAndy Fiddaman						case $s in
5557*906afcb8SAndy Fiddaman						?*)	$exec sed "s/^HOSTTYPE=.*/HOSTTYPE=$HOSTTYPE/" < "$s" > "$b" || exit
5558*906afcb8SAndy Fiddaman							$exec chmod +x "$b" || exit
5559*906afcb8SAndy Fiddaman							cc=$b
5560*906afcb8SAndy Fiddaman							intercept=1
5561*906afcb8SAndy Fiddaman							note update $b
5562*906afcb8SAndy Fiddaman							;;
5563*906afcb8SAndy Fiddaman						esac
5564*906afcb8SAndy Fiddaman					fi
5565*906afcb8SAndy Fiddaman					$exec rm -f $tmp.*
5566*906afcb8SAndy Fiddaman					$exec touch "$t"
5567*906afcb8SAndy Fiddaman					cd $PACKAGEROOT
5568*906afcb8SAndy Fiddaman					;;
5569*906afcb8SAndy Fiddaman				esac
5570*906afcb8SAndy Fiddaman				break 2
5571*906afcb8SAndy Fiddaman			done
5572*906afcb8SAndy Fiddaman		done
5573*906afcb8SAndy Fiddaman		case $intercept in
5574*906afcb8SAndy Fiddaman		1)	c=ld
5575*906afcb8SAndy Fiddaman			b=$INSTALLROOT/bin/$c
5576*906afcb8SAndy Fiddaman			for k in $h
5577*906afcb8SAndy Fiddaman			do	for s in $INITROOT/$c.$k
5578*906afcb8SAndy Fiddaman				do	test -x "$s" || continue
5579*906afcb8SAndy Fiddaman					case `ls -t "$b" "$s" 2>/dev/null` in
5580*906afcb8SAndy Fiddaman					$b*)	;;
5581*906afcb8SAndy Fiddaman					$s*)	$exec cp "$s" "$b"
5582*906afcb8SAndy Fiddaman						note update $b
5583*906afcb8SAndy Fiddaman						;;
5584*906afcb8SAndy Fiddaman					esac
5585*906afcb8SAndy Fiddaman				done
5586*906afcb8SAndy Fiddaman			done
5587*906afcb8SAndy Fiddaman			;;
5588*906afcb8SAndy Fiddaman		esac
5589*906afcb8SAndy Fiddaman		;;
5590*906afcb8SAndy Fiddaman	esac
5591*906afcb8SAndy Fiddaman	c=ldd
5592*906afcb8SAndy Fiddaman	b=$INSTALLROOT/bin/$c
5593*906afcb8SAndy Fiddaman	for t in $h
5594*906afcb8SAndy Fiddaman	do	s=$INITROOT/$c.$t
5595*906afcb8SAndy Fiddaman		test -x "$s" || continue
5596*906afcb8SAndy Fiddaman		onpath $c ||
5597*906afcb8SAndy Fiddaman		case `ls -t "$b" "$s" 2>/dev/null` in
5598*906afcb8SAndy Fiddaman		$b*)	;;
5599*906afcb8SAndy Fiddaman		$s*)	$exec cp "$s" "$b"
5600*906afcb8SAndy Fiddaman			note update $b
5601*906afcb8SAndy Fiddaman			;;
5602*906afcb8SAndy Fiddaman		esac
5603*906afcb8SAndy Fiddaman	done
5604*906afcb8SAndy Fiddaman# following code stubbed out just in case ar.ibm.risc is needed
5605*906afcb8SAndy Fiddaman#	c=ar
5606*906afcb8SAndy Fiddaman#	b=$INSTALLROOT/bin/$c
5607*906afcb8SAndy Fiddaman#	for t in $h
5608*906afcb8SAndy Fiddaman#	do	s=$INITROOT/$c.$t
5609*906afcb8SAndy Fiddaman#		test -x "$s" || continue
5610*906afcb8SAndy Fiddaman#		onpath $c ||
5611*906afcb8SAndy Fiddaman#		case `ls -t "$b" "$s" 2>/dev/null` in
5612*906afcb8SAndy Fiddaman#		$b*)	;;
5613*906afcb8SAndy Fiddaman#		$s*)	x=`$s -tv /foo/bar.a 2>&1 | egrep -i 'option|usage'`
5614*906afcb8SAndy Fiddaman#			case $x in
5615*906afcb8SAndy Fiddaman#			'')	$exec cp "$s" "$b"
5616*906afcb8SAndy Fiddaman#				note update $b
5617*906afcb8SAndy Fiddaman#				;;
5618*906afcb8SAndy Fiddaman#			esac
5619*906afcb8SAndy Fiddaman#			;;
5620*906afcb8SAndy Fiddaman#		esac
5621*906afcb8SAndy Fiddaman#	done
5622*906afcb8SAndy Fiddaman	case $cc in
5623*906afcb8SAndy Fiddaman	/*)	;;
5624*906afcb8SAndy Fiddaman	*)	echo "$command: $CC: not found -- set CC=C-compiler" >&2
5625*906afcb8SAndy Fiddaman		exit 1
5626*906afcb8SAndy Fiddaman		;;
5627*906afcb8SAndy Fiddaman	esac
5628*906afcb8SAndy Fiddaman	case $exec in
5629*906afcb8SAndy Fiddaman	'')	cd $INSTALLROOT/lib/package/gen
5630*906afcb8SAndy Fiddaman		tmp=pkg$$
5631*906afcb8SAndy Fiddaman		echo 'int main(){return 0;}' > $tmp.c
5632*906afcb8SAndy Fiddaman		if	$CC -o $tmp.exe $tmp.c > /dev/null 2> $tmp.err &&
5633*906afcb8SAndy Fiddaman			test -x $tmp.exe
5634*906afcb8SAndy Fiddaman		then	: ok
5635*906afcb8SAndy Fiddaman		else	echo "$command: $CC: failed to compile this program:" >&2
5636*906afcb8SAndy Fiddaman			cat $tmp.c >&2
5637*906afcb8SAndy Fiddaman			if	test -s $tmp.err
5638*906afcb8SAndy Fiddaman			then	cat $tmp.err >&2
5639*906afcb8SAndy Fiddaman			else	echo "$command: $CC: not a C compiler" >&2
5640*906afcb8SAndy Fiddaman			fi
5641*906afcb8SAndy Fiddaman			rm -f $tmp.*
5642*906afcb8SAndy Fiddaman			exit 1
5643*906afcb8SAndy Fiddaman		fi
5644*906afcb8SAndy Fiddaman		rm -f $tmp.*
5645*906afcb8SAndy Fiddaman		cd $PACKAGEROOT
5646*906afcb8SAndy Fiddaman		;;
5647*906afcb8SAndy Fiddaman	esac
5648*906afcb8SAndy Fiddaman
5649*906afcb8SAndy Fiddaman	# remember the default $CC
5650*906afcb8SAndy Fiddaman
5651*906afcb8SAndy Fiddaman	case $CC in
5652*906afcb8SAndy Fiddaman	cc)	;;
5653*906afcb8SAndy Fiddaman	*)	if	test -x $INSTALLROOT/bin/cc
5654*906afcb8SAndy Fiddaman		then	case `sed 1q $INSTALLROOT/bin/cc` in
5655*906afcb8SAndy Fiddaman			": $CC :")
5656*906afcb8SAndy Fiddaman				CC=cc
5657*906afcb8SAndy Fiddaman				export CC
5658*906afcb8SAndy Fiddaman				;;
5659*906afcb8SAndy Fiddaman			*)	assign="$assign CC=\"\$CC\""
5660*906afcb8SAndy Fiddaman				;;
5661*906afcb8SAndy Fiddaman			esac
5662*906afcb8SAndy Fiddaman		else	case $CROSS in
5663*906afcb8SAndy Fiddaman			1)	assign="$assign CC=\"\$CC\""
5664*906afcb8SAndy Fiddaman				;;
5665*906afcb8SAndy Fiddaman			*)	case $exec in
5666*906afcb8SAndy Fiddaman				'')	{
5667*906afcb8SAndy Fiddaman					echo ": $CC :"
5668*906afcb8SAndy Fiddaman					echo "$CC \"\$@\""
5669*906afcb8SAndy Fiddaman					} > $INSTALLROOT/bin/cc
5670*906afcb8SAndy Fiddaman					chmod +x $INSTALLROOT/bin/cc
5671*906afcb8SAndy Fiddaman					;;
5672*906afcb8SAndy Fiddaman				*)	note generate a $INSTALLROOT/bin/cc wrapper for $CC
5673*906afcb8SAndy Fiddaman					;;
5674*906afcb8SAndy Fiddaman				esac
5675*906afcb8SAndy Fiddaman				CC=cc
5676*906afcb8SAndy Fiddaman				export CC
5677*906afcb8SAndy Fiddaman				;;
5678*906afcb8SAndy Fiddaman			esac
5679*906afcb8SAndy Fiddaman		fi
5680*906afcb8SAndy Fiddaman		;;
5681*906afcb8SAndy Fiddaman	esac
5682*906afcb8SAndy Fiddaman
5683*906afcb8SAndy Fiddaman	# no $INITROOT means INIT already installed elsewhere
5684*906afcb8SAndy Fiddaman
5685*906afcb8SAndy Fiddaman	if	test -d $INITROOT
5686*906afcb8SAndy Fiddaman	then
5687*906afcb8SAndy Fiddaman		# update probe scripts
5688*906afcb8SAndy Fiddaman
5689*906afcb8SAndy Fiddaman		for i in lib/probe lib/probe/C lib/probe/C/make
5690*906afcb8SAndy Fiddaman		do	test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
5691*906afcb8SAndy Fiddaman		done
5692*906afcb8SAndy Fiddaman		i=$INSTALLROOT/lib/probe/C/make/probe
5693*906afcb8SAndy Fiddaman		j=$INITROOT/C+probe
5694*906afcb8SAndy Fiddaman		k=$INITROOT/make.probe
5695*906afcb8SAndy Fiddaman		case `ls -t $i $j $k 2>/dev/null` in
5696*906afcb8SAndy Fiddaman		$i*)	;;
5697*906afcb8SAndy Fiddaman		*)	if	test -f $j -a -f $k
5698*906afcb8SAndy Fiddaman			then	note update $i
5699*906afcb8SAndy Fiddaman				shellmagic
5700*906afcb8SAndy Fiddaman				case $exec in
5701*906afcb8SAndy Fiddaman				'')	{
5702*906afcb8SAndy Fiddaman					case $SHELLMAGIC in
5703*906afcb8SAndy Fiddaman					?*)	echo "$SHELLMAGIC" ;;
5704*906afcb8SAndy Fiddaman					esac
5705*906afcb8SAndy Fiddaman					cat $j $k
5706*906afcb8SAndy Fiddaman					} > $i || exit
5707*906afcb8SAndy Fiddaman					;;
5708*906afcb8SAndy Fiddaman				*)	echo "{
5709*906afcb8SAndy Fiddamanecho $SHELLMAGIC
5710*906afcb8SAndy Fiddamancat $j $k
5711*906afcb8SAndy Fiddaman} > $i"
5712*906afcb8SAndy Fiddaman					;;
5713*906afcb8SAndy Fiddaman				esac
5714*906afcb8SAndy Fiddaman				$exec chmod +x $i || exit
5715*906afcb8SAndy Fiddaman			fi
5716*906afcb8SAndy Fiddaman			;;
5717*906afcb8SAndy Fiddaman		esac
5718*906afcb8SAndy Fiddaman	fi
5719*906afcb8SAndy Fiddaman
5720*906afcb8SAndy Fiddaman	# initialize a few mamake related commands
5721*906afcb8SAndy Fiddaman
5722*906afcb8SAndy Fiddaman	checkaout mamake proto ratz release || exit
5723*906afcb8SAndy Fiddaman
5724*906afcb8SAndy Fiddaman	# execrate if necessary
5725*906afcb8SAndy Fiddaman
5726*906afcb8SAndy Fiddaman	if	(execrate) >/dev/null 2>&1
5727*906afcb8SAndy Fiddaman	then	execrate=execrate
5728*906afcb8SAndy Fiddaman		$make cd $INSTALLROOT/bin
5729*906afcb8SAndy Fiddaman		for i in chmod chgrp cmp cp ln mv rm
5730*906afcb8SAndy Fiddaman		do	if	test ! -x $OK/$i -a -x /bin/$i.exe
5731*906afcb8SAndy Fiddaman			then	shellmagic
5732*906afcb8SAndy Fiddaman				case $exec in
5733*906afcb8SAndy Fiddaman				'')	echo "$SHELLMAGIC"'execrate /bin/'$i' "$@"' > $OK/$i
5734*906afcb8SAndy Fiddaman					chmod +x $OK/$i
5735*906afcb8SAndy Fiddaman					;;
5736*906afcb8SAndy Fiddaman				*)	$exec echo \'"$SHELLMAGIC"'execrate /bin/'$i' "$@"'\'' >' $OK/$i
5737*906afcb8SAndy Fiddaman					$exec chmod +x $OK/$i
5738*906afcb8SAndy Fiddaman					;;
5739*906afcb8SAndy Fiddaman				esac
5740*906afcb8SAndy Fiddaman			fi
5741*906afcb8SAndy Fiddaman		done
5742*906afcb8SAndy Fiddaman		PATH=$INSTALLROOT/bin/$OK:$PATH
5743*906afcb8SAndy Fiddaman		export PATH
5744*906afcb8SAndy Fiddaman	else	execrate=
5745*906afcb8SAndy Fiddaman	fi
5746*906afcb8SAndy Fiddaman	case $action in
5747*906afcb8SAndy Fiddaman	view)	exit 0 ;;
5748*906afcb8SAndy Fiddaman	esac
5749*906afcb8SAndy Fiddaman
5750*906afcb8SAndy Fiddaman	# all work under $INSTALLROOT/src
5751*906afcb8SAndy Fiddaman
5752*906afcb8SAndy Fiddaman	$make cd $INSTALLROOT/src
5753*906afcb8SAndy Fiddaman
5754*906afcb8SAndy Fiddaman	# record the build host name
5755*906afcb8SAndy Fiddaman
5756*906afcb8SAndy Fiddaman	case $noexec in
5757*906afcb8SAndy Fiddaman	'')	hostinfo name
5758*906afcb8SAndy Fiddaman		echo "$_hostinfo_" | sed 's,\..*,,' > $PACKAGEBIN/gen/host
5759*906afcb8SAndy Fiddaman		;;
5760*906afcb8SAndy Fiddaman	esac
5761*906afcb8SAndy Fiddaman
5762*906afcb8SAndy Fiddaman	# make in parallel if possible
5763*906afcb8SAndy Fiddaman
5764*906afcb8SAndy Fiddaman	case $NPROC in
5765*906afcb8SAndy Fiddaman	'')	hostinfo cpu
5766*906afcb8SAndy Fiddaman		case $_hostinfo_ in
5767*906afcb8SAndy Fiddaman		0|1)	;;
5768*906afcb8SAndy Fiddaman		*)	NPROC=$_hostinfo_
5769*906afcb8SAndy Fiddaman			$show NPROC=$NPROC
5770*906afcb8SAndy Fiddaman			$show export NPROC
5771*906afcb8SAndy Fiddaman			export NPROC
5772*906afcb8SAndy Fiddaman			;;
5773*906afcb8SAndy Fiddaman		esac
5774*906afcb8SAndy Fiddaman		;;
5775*906afcb8SAndy Fiddaman	esac
5776*906afcb8SAndy Fiddaman
5777*906afcb8SAndy Fiddaman	# separate flags from target list
5778*906afcb8SAndy Fiddaman
5779*906afcb8SAndy Fiddaman	case $target in
5780*906afcb8SAndy Fiddaman	*-*)	a=
5781*906afcb8SAndy Fiddaman		for t in $target
5782*906afcb8SAndy Fiddaman		do	case $t in
5783*906afcb8SAndy Fiddaman			-[eiknFKNV]*|--*-symbols)
5784*906afcb8SAndy Fiddaman				makeflags="$makeflags $t"
5785*906afcb8SAndy Fiddaman				;;
5786*906afcb8SAndy Fiddaman			-*)	nmakeflags="$nmakeflags $t"
5787*906afcb8SAndy Fiddaman				;;
5788*906afcb8SAndy Fiddaman			*)	a="$a $t"
5789*906afcb8SAndy Fiddaman				;;
5790*906afcb8SAndy Fiddaman			esac
5791*906afcb8SAndy Fiddaman		done
5792*906afcb8SAndy Fiddaman		target=$a
5793*906afcb8SAndy Fiddaman		;;
5794*906afcb8SAndy Fiddaman	esac
5795*906afcb8SAndy Fiddaman
5796*906afcb8SAndy Fiddaman	# generate nmake first if possible
5797*906afcb8SAndy Fiddaman
5798*906afcb8SAndy Fiddaman	if	executable ! $NMAKE && test -d $PACKAGEROOT/src/cmd/nmake
5799*906afcb8SAndy Fiddaman	then	if	nonmake $MAKE
5800*906afcb8SAndy Fiddaman		then	note make $NMAKE with mamake
5801*906afcb8SAndy Fiddaman			c=$CC
5802*906afcb8SAndy Fiddaman			a=$assign
5803*906afcb8SAndy Fiddaman			case $HOSTTYPE in
5804*906afcb8SAndy Fiddaman			win32*|cygwin*)
5805*906afcb8SAndy Fiddaman				CC="$CC -D_BLD_STATIC"
5806*906afcb8SAndy Fiddaman				accept="libast"
5807*906afcb8SAndy Fiddaman				case $assign in
5808*906afcb8SAndy Fiddaman				*' CC='*)	;;
5809*906afcb8SAndy Fiddaman				*)		assign="$assign CC=\"\$CC\"" ;;
5810*906afcb8SAndy Fiddaman				esac
5811*906afcb8SAndy Fiddaman				;;
5812*906afcb8SAndy Fiddaman			*)	accept=nmake
5813*906afcb8SAndy Fiddaman				;;
5814*906afcb8SAndy Fiddaman			esac
5815*906afcb8SAndy Fiddaman			eval capture mamake \$makeflags \$nmakeflags \$noexec install nmake $assign
5816*906afcb8SAndy Fiddaman			assign=$a
5817*906afcb8SAndy Fiddaman			CC=$c
5818*906afcb8SAndy Fiddaman			case $make$noexec in
5819*906afcb8SAndy Fiddaman			'')	if	executable ! $NMAKE
5820*906afcb8SAndy Fiddaman				then	echo "$command: $action: errors making $NMAKE" >&2
5821*906afcb8SAndy Fiddaman					exit 1
5822*906afcb8SAndy Fiddaman				fi
5823*906afcb8SAndy Fiddaman				;;
5824*906afcb8SAndy Fiddaman			*)	make=echo
5825*906afcb8SAndy Fiddaman				;;
5826*906afcb8SAndy Fiddaman			esac
5827*906afcb8SAndy Fiddaman			if	test '' != "$PROTOROOT"
5828*906afcb8SAndy Fiddaman			then	if	(vpath $INSTALLROOT - $PROTOROOT - $INSTALLROOT $PACKAGEROOT) >/dev/null 2>&1 &&
5829*906afcb8SAndy Fiddaman					 vpath $INSTALLROOT - $PROTOROOT - $INSTALLROOT $PACKAGEROOT
5830*906afcb8SAndy Fiddaman				then	$show vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN
5831*906afcb8SAndy Fiddaman				else	VPATH=$INSTALLROOT:$PACKAGEROOT$USER_VPATH
5832*906afcb8SAndy Fiddaman					$show VPATH=$VPATH
5833*906afcb8SAndy Fiddaman					export VPATH
5834*906afcb8SAndy Fiddaman				fi
5835*906afcb8SAndy Fiddaman			fi
5836*906afcb8SAndy Fiddaman			note believe generated files for $accept
5837*906afcb8SAndy Fiddaman			eval capture \$NMAKE \$makeflags \$nmakeflags \$noexec recurse believe \$nmakesep $accept $assign
5838*906afcb8SAndy Fiddaman			$exec touch $INSTALLROOT/bin/.paths
5839*906afcb8SAndy Fiddaman			note make the remaining targets with $NMAKE
5840*906afcb8SAndy Fiddaman		else	eval capture $MAKE \$makeflags \$nmakeflags \$noexec install nmake $assign
5841*906afcb8SAndy Fiddaman			case $make$noexec in
5842*906afcb8SAndy Fiddaman			'')	if	executable ! $NMAKE
5843*906afcb8SAndy Fiddaman				then	echo "$command: $action: errors making $NMAKE" >&2
5844*906afcb8SAndy Fiddaman					exit 1
5845*906afcb8SAndy Fiddaman				fi
5846*906afcb8SAndy Fiddaman				;;
5847*906afcb8SAndy Fiddaman			*)	make=echo
5848*906afcb8SAndy Fiddaman				;;
5849*906afcb8SAndy Fiddaman			esac
5850*906afcb8SAndy Fiddaman		fi
5851*906afcb8SAndy Fiddaman	fi
5852*906afcb8SAndy Fiddaman
5853*906afcb8SAndy Fiddaman	# generate ksh next if possible
5854*906afcb8SAndy Fiddaman
5855*906afcb8SAndy Fiddaman	if	nonmake $MAKE
5856*906afcb8SAndy Fiddaman	then	: no need to generate ksh next -- it could be the only package
5857*906afcb8SAndy Fiddaman	elif	test "$KEEP_SHELL" != 1 -a -d $PACKAGEROOT/src/cmd/ksh93 && executable ! $KSH
5858*906afcb8SAndy Fiddaman	then	eval capture nmake $nmakeflags \$makeflags \$noexec install ksh93 $assign
5859*906afcb8SAndy Fiddaman		case $make$noexec in
5860*906afcb8SAndy Fiddaman		'')	if	executable ! $KSH
5861*906afcb8SAndy Fiddaman			then	echo "$command: $action: errors making $KSH" >&2
5862*906afcb8SAndy Fiddaman				exit 1
5863*906afcb8SAndy Fiddaman			fi
5864*906afcb8SAndy Fiddaman			;;
5865*906afcb8SAndy Fiddaman		*)	make=echo
5866*906afcb8SAndy Fiddaman			;;
5867*906afcb8SAndy Fiddaman		esac
5868*906afcb8SAndy Fiddaman	fi
5869*906afcb8SAndy Fiddaman
5870*906afcb8SAndy Fiddaman	# mamprobe data should have been generated by this point
5871*906afcb8SAndy Fiddaman
5872*906afcb8SAndy Fiddaman	case $exec in
5873*906afcb8SAndy Fiddaman	'')	if	test ! -f $INSTALLROOT/bin/.paths -o -w $INSTALLROOT/bin/.paths
5874*906afcb8SAndy Fiddaman		then	N='
5875*906afcb8SAndy Fiddaman'
5876*906afcb8SAndy Fiddaman			b= f= h= n= p= u= B= L=
5877*906afcb8SAndy Fiddaman			if	test -f $INSTALLROOT/bin/.paths
5878*906afcb8SAndy Fiddaman			then	exec < $INSTALLROOT/bin/.paths
5879*906afcb8SAndy Fiddaman				while	read x
5880*906afcb8SAndy Fiddaman				do	case $x in
5881*906afcb8SAndy Fiddaman					'#'?*)		case $h in
5882*906afcb8SAndy Fiddaman							'')	h=$x ;;
5883*906afcb8SAndy Fiddaman							esac
5884*906afcb8SAndy Fiddaman							;;
5885*906afcb8SAndy Fiddaman					*BUILTIN_LIB=*)	b=$x
5886*906afcb8SAndy Fiddaman							;;
5887*906afcb8SAndy Fiddaman					*FPATH=*)	f=$x
5888*906afcb8SAndy Fiddaman							;;
5889*906afcb8SAndy Fiddaman					*PLUGIN_LIB=*)	p=$x
5890*906afcb8SAndy Fiddaman							;;
5891*906afcb8SAndy Fiddaman					*)		case $u in
5892*906afcb8SAndy Fiddaman							?*)	u=$u$N ;;
5893*906afcb8SAndy Fiddaman							esac
5894*906afcb8SAndy Fiddaman							u=$u$x
5895*906afcb8SAndy Fiddaman							;;
5896*906afcb8SAndy Fiddaman					esac
5897*906afcb8SAndy Fiddaman				done
5898*906afcb8SAndy Fiddaman			fi
5899*906afcb8SAndy Fiddaman			ifs=$IFS
5900*906afcb8SAndy Fiddaman			m=
5901*906afcb8SAndy Fiddaman			case $p in
5902*906afcb8SAndy Fiddaman			?*)	b=
5903*906afcb8SAndy Fiddaman				;;
5904*906afcb8SAndy Fiddaman			esac
5905*906afcb8SAndy Fiddaman			case $b in
5906*906afcb8SAndy Fiddaman			?*)	IFS='='
5907*906afcb8SAndy Fiddaman				set $b
5908*906afcb8SAndy Fiddaman				IFS=$ifs
5909*906afcb8SAndy Fiddaman				shift
5910*906afcb8SAndy Fiddaman				p="PLUGIN_LIB=$*"
5911*906afcb8SAndy Fiddaman				case $b in
5912*906afcb8SAndy Fiddaman				[Nn][Oo]*)	p=no$p ;;
5913*906afcb8SAndy Fiddaman				esac
5914*906afcb8SAndy Fiddaman				m=1
5915*906afcb8SAndy Fiddaman				;;
5916*906afcb8SAndy Fiddaman			esac
5917*906afcb8SAndy Fiddaman			case $f in
5918*906afcb8SAndy Fiddaman			'')	f="FPATH=../fun"
5919*906afcb8SAndy Fiddaman				m=1
5920*906afcb8SAndy Fiddaman				;;
5921*906afcb8SAndy Fiddaman			esac
5922*906afcb8SAndy Fiddaman			case $h in
5923*906afcb8SAndy Fiddaman			'')	h='# use { no NO } prefix to permanently disable #' ;;
5924*906afcb8SAndy Fiddaman			esac
5925*906afcb8SAndy Fiddaman			case $p in
5926*906afcb8SAndy Fiddaman			'')	p="PLUGIN_LIB=cmd"
5927*906afcb8SAndy Fiddaman				if	grep '^setv mam_cc_DIALECT .* EXPORT=[AD]LL' $INSTALLROOT/lib/probe/C/mam/* >/dev/null 2>&1
5928*906afcb8SAndy Fiddaman				then	p=no$p
5929*906afcb8SAndy Fiddaman				fi
5930*906afcb8SAndy Fiddaman				m=1
5931*906afcb8SAndy Fiddaman				;;
5932*906afcb8SAndy Fiddaman			esac
5933*906afcb8SAndy Fiddaman			case $m in
5934*906afcb8SAndy Fiddaman			1)	case $u in
5935*906afcb8SAndy Fiddaman				?*)	u=$N$u ;;
5936*906afcb8SAndy Fiddaman				esac
5937*906afcb8SAndy Fiddaman				echo "$h$N$p$N$f$N$u" > $INSTALLROOT/bin/.paths
5938*906afcb8SAndy Fiddaman				;;
5939*906afcb8SAndy Fiddaman			esac
5940*906afcb8SAndy Fiddaman		fi
5941*906afcb8SAndy Fiddaman		;;
5942*906afcb8SAndy Fiddaman	esac
5943*906afcb8SAndy Fiddaman
5944*906afcb8SAndy Fiddaman	# run from separate copies since nmake and ksh may be rebuilt
5945*906afcb8SAndy Fiddaman
5946*906afcb8SAndy Fiddaman	case $EXECROOT in
5947*906afcb8SAndy Fiddaman	$INSTALLROOT)
5948*906afcb8SAndy Fiddaman		$make cd $INSTALLROOT/bin
5949*906afcb8SAndy Fiddaman		if	executable /bin/cp
5950*906afcb8SAndy Fiddaman		then	cp=/bin/cp
5951*906afcb8SAndy Fiddaman		else	cp=cp
5952*906afcb8SAndy Fiddaman		fi
5953*906afcb8SAndy Fiddaman		if	executable /bin/mv
5954*906afcb8SAndy Fiddaman		then	mv=/bin/mv
5955*906afcb8SAndy Fiddaman		else	mv=mv
5956*906afcb8SAndy Fiddaman		fi
5957*906afcb8SAndy Fiddaman		if	executable /bin/rm
5958*906afcb8SAndy Fiddaman		then	rm=/bin/rm
5959*906afcb8SAndy Fiddaman		else	rm=rm
5960*906afcb8SAndy Fiddaman		fi
5961*906afcb8SAndy Fiddaman		for i in \
5962*906afcb8SAndy Fiddaman			ksh nmake tee cp ln mv rm \
5963*906afcb8SAndy Fiddaman			*ast*.dll *cmd*.dll *dll*.dll *shell*.dll
5964*906afcb8SAndy Fiddaman		do	executable $i && {
5965*906afcb8SAndy Fiddaman				cmp -s $i $OK/$i 2>/dev/null || {
5966*906afcb8SAndy Fiddaman					test -f $OK/$i &&
5967*906afcb8SAndy Fiddaman					$exec $execrate $rm $OK/$i </dev/null
5968*906afcb8SAndy Fiddaman					test -f $OK/$i &&
5969*906afcb8SAndy Fiddaman					$exec $execrate $mv $OK/$i $OK/$i.old </dev/null
5970*906afcb8SAndy Fiddaman					test -f $OK/$i &&
5971*906afcb8SAndy Fiddaman					case $exec:$i in
5972*906afcb8SAndy Fiddaman					:nmake|:ksh)
5973*906afcb8SAndy Fiddaman						echo "$command: $OK/$i: cannot update [may be in use by a running process] remove manually and try again" >&2
5974*906afcb8SAndy Fiddaman						exit 1
5975*906afcb8SAndy Fiddaman						;;
5976*906afcb8SAndy Fiddaman					esac
5977*906afcb8SAndy Fiddaman					$exec $execrate $cp $i $OK/$i
5978*906afcb8SAndy Fiddaman				}
5979*906afcb8SAndy Fiddaman			}
5980*906afcb8SAndy Fiddaman		done
5981*906afcb8SAndy Fiddaman		if	test -f ../lib/make/makerules.mo
5982*906afcb8SAndy Fiddaman		then	cmp -s ../lib/make/makerules.mo $OK/lib/makerules.mo ||
5983*906afcb8SAndy Fiddaman			$exec $execrate $cp -p ../lib/make/makerules.mo $OK/lib/makerules.mo ||
5984*906afcb8SAndy Fiddaman			$exec $execrate $cp ../lib/make/makerules.mo $OK/lib/makerules.mo
5985*906afcb8SAndy Fiddaman		fi
5986*906afcb8SAndy Fiddaman		if	executable $OK/nmake
5987*906afcb8SAndy Fiddaman		then	MAKE="$INSTALLROOT/bin/$OK/nmake LOCALRULESPATH=$INSTALLROOT/bin/$OK/lib"
5988*906afcb8SAndy Fiddaman		fi
5989*906afcb8SAndy Fiddaman		if	executable $OK/tee
5990*906afcb8SAndy Fiddaman		then	TEE=$INSTALLROOT/bin/$OK/tee
5991*906afcb8SAndy Fiddaman		fi
5992*906afcb8SAndy Fiddaman		if	test "$KEEP_SHELL" != 1 && executable $OK/ksh
5993*906afcb8SAndy Fiddaman		then	SHELL=$INSTALLROOT/bin/$OK/ksh
5994*906afcb8SAndy Fiddaman			export SHELL
5995*906afcb8SAndy Fiddaman			COSHELL=$SHELL
5996*906afcb8SAndy Fiddaman			export COSHELL
5997*906afcb8SAndy Fiddaman		fi
5998*906afcb8SAndy Fiddaman		case :$PATH: in
5999*906afcb8SAndy Fiddaman		*:$INSTALLROOT/bin/$OK:*)
6000*906afcb8SAndy Fiddaman			;;
6001*906afcb8SAndy Fiddaman		*)	PATH=$INSTALLROOT/bin/$OK:$PATH
6002*906afcb8SAndy Fiddaman			export PATH
6003*906afcb8SAndy Fiddaman			;;
6004*906afcb8SAndy Fiddaman		esac
6005*906afcb8SAndy Fiddaman		$make cd $INSTALLROOT/src
6006*906afcb8SAndy Fiddaman		;;
6007*906afcb8SAndy Fiddaman	esac
6008*906afcb8SAndy Fiddaman
6009*906afcb8SAndy Fiddaman	# fall back to mamake if nmake not found or too old
6010*906afcb8SAndy Fiddaman
6011*906afcb8SAndy Fiddaman	if	nonmake $MAKE
6012*906afcb8SAndy Fiddaman	then	note make with mamake
6013*906afcb8SAndy Fiddaman		case $target in
6014*906afcb8SAndy Fiddaman		'')	target="install" ;;
6015*906afcb8SAndy Fiddaman		esac
6016*906afcb8SAndy Fiddaman		eval capture mamake \$makeflags \$noexec \$target $assign
6017*906afcb8SAndy Fiddaman	else	case $target in
6018*906afcb8SAndy Fiddaman		'')	target="install cc-" ;;
6019*906afcb8SAndy Fiddaman		esac
6020*906afcb8SAndy Fiddaman		eval capture \$MAKE \$makeflags \$nmakeflags \$noexec recurse \$target \$nmakesep \$package $assign
6021*906afcb8SAndy Fiddaman	fi
6022*906afcb8SAndy Fiddaman	;;
6023*906afcb8SAndy Fiddaman
6024*906afcb8SAndy Fiddamanread)	case ${PWD:-`pwd`} in
6025*906afcb8SAndy Fiddaman	$PACKAGEROOT)
6026*906afcb8SAndy Fiddaman		;;
6027*906afcb8SAndy Fiddaman	*)	echo "$command: must be in package root directory" >&2
6028*906afcb8SAndy Fiddaman		exit 1
6029*906afcb8SAndy Fiddaman		;;
6030*906afcb8SAndy Fiddaman	esac
6031*906afcb8SAndy Fiddaman	PAX=
6032*906afcb8SAndy Fiddaman	if	onpath pax
6033*906afcb8SAndy Fiddaman	then	case `$_onpath_ -rw --?meter 2>&1` in
6034*906afcb8SAndy Fiddaman		*--meter*)	PAX=pax ;;
6035*906afcb8SAndy Fiddaman		esac
6036*906afcb8SAndy Fiddaman	fi
6037*906afcb8SAndy Fiddaman	code=0
6038*906afcb8SAndy Fiddaman	i=
6039*906afcb8SAndy Fiddaman	x=
6040*906afcb8SAndy Fiddaman	remove=
6041*906afcb8SAndy Fiddaman	touch=
6042*906afcb8SAndy Fiddaman	set '' $target
6043*906afcb8SAndy Fiddaman	case $2 in
6044*906afcb8SAndy Fiddaman	lcl|tgz)tgz=$2
6045*906afcb8SAndy Fiddaman		shift 2
6046*906afcb8SAndy Fiddaman		target=$*
6047*906afcb8SAndy Fiddaman		;;
6048*906afcb8SAndy Fiddaman	*)	tgz=tgz
6049*906afcb8SAndy Fiddaman		;;
6050*906afcb8SAndy Fiddaman	esac
6051*906afcb8SAndy Fiddaman	set '' $package $target
6052*906afcb8SAndy Fiddaman	case $# in
6053*906afcb8SAndy Fiddaman	1)	verbose=:
6054*906afcb8SAndy Fiddaman		set '' `ls lib/package/$tgz/*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
6055*906afcb8SAndy Fiddaman		;;
6056*906afcb8SAndy Fiddaman	*)	verbose=
6057*906afcb8SAndy Fiddaman		;;
6058*906afcb8SAndy Fiddaman	esac
6059*906afcb8SAndy Fiddaman	shift
6060*906afcb8SAndy Fiddaman	files=
6061*906afcb8SAndy Fiddaman	for f
6062*906afcb8SAndy Fiddaman	do	if	test -f "$f"
6063*906afcb8SAndy Fiddaman		then	: ok
6064*906afcb8SAndy Fiddaman		elif	test -f "lib/package/$tgz/$f"
6065*906afcb8SAndy Fiddaman		then	f=lib/package/$tgz/$f
6066*906afcb8SAndy Fiddaman		else	set '' `ls -r ${f}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
6067*906afcb8SAndy Fiddaman			if	test '' != "$2" -a -f "$2"
6068*906afcb8SAndy Fiddaman			then	f=$2
6069*906afcb8SAndy Fiddaman			else	set '' `ls -r lib/package/$tgz/${f}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
6070*906afcb8SAndy Fiddaman				if	test '' != "$2" -a -f "$2"
6071*906afcb8SAndy Fiddaman				then	f=$2
6072*906afcb8SAndy Fiddaman				else	echo "$command: $f: package archive not found" >&2
6073*906afcb8SAndy Fiddaman					continue
6074*906afcb8SAndy Fiddaman				fi
6075*906afcb8SAndy Fiddaman			fi
6076*906afcb8SAndy Fiddaman		fi
6077*906afcb8SAndy Fiddaman		files="$files $f"
6078*906afcb8SAndy Fiddaman	done
6079*906afcb8SAndy Fiddaman	case $files in
6080*906afcb8SAndy Fiddaman	'')	echo "$command: lib/package/$tgz: no package archives" >&2
6081*906afcb8SAndy Fiddaman		exit 1
6082*906afcb8SAndy Fiddaman		;;
6083*906afcb8SAndy Fiddaman	esac
6084*906afcb8SAndy Fiddaman	set '' `ls -r $files 2>/dev/null`
6085*906afcb8SAndy Fiddaman	shift
6086*906afcb8SAndy Fiddaman	f1= f2= f3= f4=
6087*906afcb8SAndy Fiddaman	for f
6088*906afcb8SAndy Fiddaman	do	case $f in
6089*906afcb8SAndy Fiddaman		ratz.*|*/ratz.*)
6090*906afcb8SAndy Fiddaman			f1="$f1 $f"
6091*906afcb8SAndy Fiddaman			;;
6092*906afcb8SAndy Fiddaman		INIT.*|*/INIT.*)
6093*906afcb8SAndy Fiddaman			f2="$f2 $f"
6094*906afcb8SAndy Fiddaman			;;
6095*906afcb8SAndy Fiddaman		INIT*|*/INIT*)
6096*906afcb8SAndy Fiddaman			f3="$f3 $f"
6097*906afcb8SAndy Fiddaman			;;
6098*906afcb8SAndy Fiddaman		*)	f4="$f4 $f"
6099*906afcb8SAndy Fiddaman			;;
6100*906afcb8SAndy Fiddaman		esac
6101*906afcb8SAndy Fiddaman	done
6102*906afcb8SAndy Fiddaman	gen=
6103*906afcb8SAndy Fiddaman	set '' $f1 $f2 $f3 $f4
6104*906afcb8SAndy Fiddaman	while	:
6105*906afcb8SAndy Fiddaman	do	shift
6106*906afcb8SAndy Fiddaman		case $# in
6107*906afcb8SAndy Fiddaman		0)	break ;;
6108*906afcb8SAndy Fiddaman		esac
6109*906afcb8SAndy Fiddaman		f=$1
6110*906afcb8SAndy Fiddaman		case $f in
6111*906afcb8SAndy Fiddaman		*.gz)	: standalone packages unbundled manually
6112*906afcb8SAndy Fiddaman			continue
6113*906afcb8SAndy Fiddaman			;;
6114*906afcb8SAndy Fiddaman		*.md5)	: tarball checksum
6115*906afcb8SAndy Fiddaman			continue
6116*906afcb8SAndy Fiddaman			;;
6117*906afcb8SAndy Fiddaman		*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]*)
6118*906afcb8SAndy Fiddaman			;;
6119*906afcb8SAndy Fiddaman		*)	echo "$command: $f: not a package archive" >&2
6120*906afcb8SAndy Fiddaman			code=1
6121*906afcb8SAndy Fiddaman			continue
6122*906afcb8SAndy Fiddaman			;;
6123*906afcb8SAndy Fiddaman		esac
6124*906afcb8SAndy Fiddaman		case $f in
6125*906afcb8SAndy Fiddaman		*/*)	eval `echo "$f" | sed -e 's,\(.*/\)\(.*\),d=\1 a=\2,'` ;;
6126*906afcb8SAndy Fiddaman		*)	d= a=$f ;;
6127*906afcb8SAndy Fiddaman		esac
6128*906afcb8SAndy Fiddaman		# f:file d:dir a:base p:package v:version r:release t:type
6129*906afcb8SAndy Fiddaman		eval `echo "$a" | sed -e 's,\.c$,,' -e 's,\.gz$,,' -e 's,\.exe$,,' -e 's,\.tgz$,,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]\([0123456789][0123456789][0123456789][0123456789][^_.]*\)[_.]*\(.*\),p=\1 v=\2 r=\3 t=\4,' -e 's,\([^_.]*\)[_.]\([0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]\)[_.]*\(.*\),p=\1 v=\2 r=base t=\3,'`
6130*906afcb8SAndy Fiddaman		case $r in
6131*906afcb8SAndy Fiddaman		base)	y=$p.base ;;
6132*906afcb8SAndy Fiddaman		*)	y=$p.delta ;;
6133*906afcb8SAndy Fiddaman		esac
6134*906afcb8SAndy Fiddaman		case " $x " in
6135*906afcb8SAndy Fiddaman		*" $y "*)
6136*906afcb8SAndy Fiddaman			continue
6137*906afcb8SAndy Fiddaman			;;
6138*906afcb8SAndy Fiddaman		esac
6139*906afcb8SAndy Fiddaman		case $t in
6140*906afcb8SAndy Fiddaman		'')	w=$PACKAGESRC
6141*906afcb8SAndy Fiddaman			q=
6142*906afcb8SAndy Fiddaman			Q=
6143*906afcb8SAndy Fiddaman			m=
6144*906afcb8SAndy Fiddaman			;;
6145*906afcb8SAndy Fiddaman		*)	w=$PACKAGEROOT/arch/$t/lib/package
6146*906afcb8SAndy Fiddaman			q=".$t"
6147*906afcb8SAndy Fiddaman			Q="_$t"
6148*906afcb8SAndy Fiddaman			m="[_.]$t"
6149*906afcb8SAndy Fiddaman			;;
6150*906afcb8SAndy Fiddaman		esac
6151*906afcb8SAndy Fiddaman		u=$d$p$q.tim
6152*906afcb8SAndy Fiddaman		if	test -s "$u"
6153*906afcb8SAndy Fiddaman		then	continue
6154*906afcb8SAndy Fiddaman		else	case $force in
6155*906afcb8SAndy Fiddaman			0)	case `ls -t "$f" "$u" 2>/dev/null` in
6156*906afcb8SAndy Fiddaman				"$u"*)	case $verbose in
6157*906afcb8SAndy Fiddaman					1)	note $p already read ;;
6158*906afcb8SAndy Fiddaman					esac
6159*906afcb8SAndy Fiddaman					continue
6160*906afcb8SAndy Fiddaman					;;
6161*906afcb8SAndy Fiddaman				esac
6162*906afcb8SAndy Fiddaman				;;
6163*906afcb8SAndy Fiddaman			esac
6164*906afcb8SAndy Fiddaman		fi
6165*906afcb8SAndy Fiddaman		case $p in
6166*906afcb8SAndy Fiddaman		INIT)	if	test -f $PACKAGEROOT/bin/package
6167*906afcb8SAndy Fiddaman			then	$exec mv $PACKAGEROOT/bin/package $PACKAGEROOT/bin/package.old
6168*906afcb8SAndy Fiddaman			fi
6169*906afcb8SAndy Fiddaman			;;
6170*906afcb8SAndy Fiddaman		esac
6171*906afcb8SAndy Fiddaman		z=
6172*906afcb8SAndy Fiddaman		case $r in
6173*906afcb8SAndy Fiddaman		base)	# base archive
6174*906afcb8SAndy Fiddaman			if	test ratz = "$p"
6175*906afcb8SAndy Fiddaman			then	# ratz packages are not archives
6176*906afcb8SAndy Fiddaman				case $t in
6177*906afcb8SAndy Fiddaman				'')	for i in src src/cmd src/cmd/INIT
6178*906afcb8SAndy Fiddaman					do	test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
6179*906afcb8SAndy Fiddaman					done
6180*906afcb8SAndy Fiddaman					$exec cp $f $PACKAGEROOT/src/cmd/INIT/$p.c
6181*906afcb8SAndy Fiddaman					;;
6182*906afcb8SAndy Fiddaman				*)	for i in arch arch/$t arch/$t/bin
6183*906afcb8SAndy Fiddaman					do	test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
6184*906afcb8SAndy Fiddaman					done
6185*906afcb8SAndy Fiddaman					$exec cp $f $PACKAGEROOT/arch/$t/bin/$p &&
6186*906afcb8SAndy Fiddaman					$exec chmod +x $PACKAGEROOT/arch/$t/bin/$p
6187*906afcb8SAndy Fiddaman					;;
6188*906afcb8SAndy Fiddaman				esac
6189*906afcb8SAndy Fiddaman			elif	test "" != "$PAX"
6190*906afcb8SAndy Fiddaman			then	$exec pax -L --from=ascii --local -m -ps -rvf "$f" || {
6191*906afcb8SAndy Fiddaman					code=1
6192*906afcb8SAndy Fiddaman					continue
6193*906afcb8SAndy Fiddaman				}
6194*906afcb8SAndy Fiddaman			else	if	onpath gunzip && onpath $TAR && isascii
6195*906afcb8SAndy Fiddaman				then	case $TARPROBE in
6196*906afcb8SAndy Fiddaman					?*)	for i in $TARPROBE
6197*906afcb8SAndy Fiddaman						do	if	$TAR ${i}f - /dev/null > /dev/null 2>&1
6198*906afcb8SAndy Fiddaman							then	TARFLAGS=$TARFLAGS$i
6199*906afcb8SAndy Fiddaman							fi
6200*906afcb8SAndy Fiddaman						done
6201*906afcb8SAndy Fiddaman						TARPROBE=
6202*906afcb8SAndy Fiddaman						;;
6203*906afcb8SAndy Fiddaman					esac
6204*906afcb8SAndy Fiddaman					if	gunzip -l < "$f" > /dev/null 2>&1
6205*906afcb8SAndy Fiddaman					then	case $exec in
6206*906afcb8SAndy Fiddaman						'')	$exec gunzip < "$f" | $TAR ${TARFLAGS}f - ;;
6207*906afcb8SAndy Fiddaman						*)	$exec "gunzip < $f | $TAR ${TARFLAGS}f -" ;;
6208*906afcb8SAndy Fiddaman						esac || {
6209*906afcb8SAndy Fiddaman							code=1
6210*906afcb8SAndy Fiddaman							continue
6211*906afcb8SAndy Fiddaman						}
6212*906afcb8SAndy Fiddaman					else	$exec $TAR ${TARFLAGS}f "$f" || {
6213*906afcb8SAndy Fiddaman							code=1
6214*906afcb8SAndy Fiddaman							continue
6215*906afcb8SAndy Fiddaman						}
6216*906afcb8SAndy Fiddaman					fi
6217*906afcb8SAndy Fiddaman				else	checkaout ratz && onpath ratz || {
6218*906afcb8SAndy Fiddaman						code=1
6219*906afcb8SAndy Fiddaman						continue
6220*906afcb8SAndy Fiddaman					}
6221*906afcb8SAndy Fiddaman					RATZ=$_onpath_
6222*906afcb8SAndy Fiddaman					case $exec in
6223*906afcb8SAndy Fiddaman					'')	echo $f:
6224*906afcb8SAndy Fiddaman						$exec $RATZ -lm < "$f"
6225*906afcb8SAndy Fiddaman						;;
6226*906afcb8SAndy Fiddaman					*)	$exec "$RATZ -lm < $f"
6227*906afcb8SAndy Fiddaman						;;
6228*906afcb8SAndy Fiddaman					esac || {
6229*906afcb8SAndy Fiddaman						code=1
6230*906afcb8SAndy Fiddaman						continue
6231*906afcb8SAndy Fiddaman					}
6232*906afcb8SAndy Fiddaman				fi
6233*906afcb8SAndy Fiddaman				if	test -f $PACKAGEBIN/gen/$p.sum
6234*906afcb8SAndy Fiddaman				then	while	read md5 mode usr grp file
6235*906afcb8SAndy Fiddaman					do	case $file in
6236*906afcb8SAndy Fiddaman						-*)	file=./$file ;;
6237*906afcb8SAndy Fiddaman						esac
6238*906afcb8SAndy Fiddaman						case $mode in
6239*906afcb8SAndy Fiddaman						[01234567][01234567][01234567][01234567])
6240*906afcb8SAndy Fiddaman							case $grp in
6241*906afcb8SAndy Fiddaman							-)	;;
6242*906afcb8SAndy Fiddaman							*)	$exec chgrp $grp "$file" ;;
6243*906afcb8SAndy Fiddaman							esac
6244*906afcb8SAndy Fiddaman							case $usr in
6245*906afcb8SAndy Fiddaman							-)	;;
6246*906afcb8SAndy Fiddaman							*)	$exec chown $usr "$file" ;;
6247*906afcb8SAndy Fiddaman							esac
6248*906afcb8SAndy Fiddaman							$exec chmod $mode "$file"
6249*906afcb8SAndy Fiddaman							;;
6250*906afcb8SAndy Fiddaman						esac
6251*906afcb8SAndy Fiddaman					done < $PACKAGEBIN/gen/$p.sum
6252*906afcb8SAndy Fiddaman				fi
6253*906afcb8SAndy Fiddaman			fi
6254*906afcb8SAndy Fiddaman			;;
6255*906afcb8SAndy Fiddaman		*)	# delta archive
6256*906afcb8SAndy Fiddaman			test "" != "$PAX" || {
6257*906afcb8SAndy Fiddaman				echo "$command: $f: pax required to read delta archive" >&2
6258*906afcb8SAndy Fiddaman				code=1
6259*906afcb8SAndy Fiddaman				continue
6260*906afcb8SAndy Fiddaman			}
6261*906afcb8SAndy Fiddaman			case `echo "$v:
6262*906afcb8SAndy Fiddaman$r:" | sort` in
6263*906afcb8SAndy Fiddaman			$r:*)	y=$p.base
6264*906afcb8SAndy Fiddaman				b=${d}${p}_${r}${Q}.tgz
6265*906afcb8SAndy Fiddaman				test -f "$b" || b=${d}${p}.${r}${q}.tgz
6266*906afcb8SAndy Fiddaman				test -f "$b" || {
6267*906afcb8SAndy Fiddaman					case " $gen " in
6268*906afcb8SAndy Fiddaman					*" $b "*)
6269*906afcb8SAndy Fiddaman						;;
6270*906afcb8SAndy Fiddaman					*)	case $# in
6271*906afcb8SAndy Fiddaman						1)	echo "$command: $f: base archive $b required to read delta" >&2
6272*906afcb8SAndy Fiddaman							code=1
6273*906afcb8SAndy Fiddaman							;;
6274*906afcb8SAndy Fiddaman						*)	shift
6275*906afcb8SAndy Fiddaman							y=$1
6276*906afcb8SAndy Fiddaman							shift
6277*906afcb8SAndy Fiddaman						set '' $y $f "$@"
6278*906afcb8SAndy Fiddaman						esac
6279*906afcb8SAndy Fiddaman						continue
6280*906afcb8SAndy Fiddaman						;;
6281*906afcb8SAndy Fiddaman					esac
6282*906afcb8SAndy Fiddaman				}
6283*906afcb8SAndy Fiddaman				# -m with delta bug fixed 2005-02-08
6284*906afcb8SAndy Fiddaman				$exec pax -L --from=ascii --local -ps -rvf "$f" -z "$b" || {
6285*906afcb8SAndy Fiddaman					code=1
6286*906afcb8SAndy Fiddaman					continue
6287*906afcb8SAndy Fiddaman				}
6288*906afcb8SAndy Fiddaman				note $f: generate new base $d$p.$v$q.tgz
6289*906afcb8SAndy Fiddaman				$exec pax -rf "$f" -z "$b" -wf $d$p.$v$q.tgz -x tgz || {
6290*906afcb8SAndy Fiddaman					code=1
6291*906afcb8SAndy Fiddaman					continue
6292*906afcb8SAndy Fiddaman				}
6293*906afcb8SAndy Fiddaman				case $exec in
6294*906afcb8SAndy Fiddaman				'')	echo $p $v $v 1 > $w/gen/$p.ver
6295*906afcb8SAndy Fiddaman					;;
6296*906afcb8SAndy Fiddaman				*)	z=$d${p}[_.]$v$q.tgz
6297*906afcb8SAndy Fiddaman					$exec "echo $p $v $v 1 > $w/gen/$p.ver"
6298*906afcb8SAndy Fiddaman					gen="$gen $d$p.$v$q.tgz"
6299*906afcb8SAndy Fiddaman					;;
6300*906afcb8SAndy Fiddaman				esac
6301*906afcb8SAndy Fiddaman				case " $remove " in
6302*906afcb8SAndy Fiddaman				*" $f "*)	;;
6303*906afcb8SAndy Fiddaman				*)		remove="$remove $f" ;;
6304*906afcb8SAndy Fiddaman				esac
6305*906afcb8SAndy Fiddaman				;;
6306*906afcb8SAndy Fiddaman			*)	b=${d}${p}_${v}${Q}.tgz
6307*906afcb8SAndy Fiddaman				test -f "$b" || b=${d}${p}.${v}${q}.tgz
6308*906afcb8SAndy Fiddaman				test -f "$b" || {
6309*906afcb8SAndy Fiddaman					case " $gen " in
6310*906afcb8SAndy Fiddaman					*" $b "*)
6311*906afcb8SAndy Fiddaman						;;
6312*906afcb8SAndy Fiddaman					*)	case $# in
6313*906afcb8SAndy Fiddaman						1)	echo "$command: $f: base archive $b required to read delta" >&2
6314*906afcb8SAndy Fiddaman							code=1
6315*906afcb8SAndy Fiddaman							;;
6316*906afcb8SAndy Fiddaman						*)	shift
6317*906afcb8SAndy Fiddaman							y=$1
6318*906afcb8SAndy Fiddaman							shift
6319*906afcb8SAndy Fiddaman							set '' $y $f "$@"
6320*906afcb8SAndy Fiddaman						esac
6321*906afcb8SAndy Fiddaman						continue
6322*906afcb8SAndy Fiddaman						;;
6323*906afcb8SAndy Fiddaman					esac
6324*906afcb8SAndy Fiddaman				}
6325*906afcb8SAndy Fiddaman				# -m with delta bug fixed 2005-02-08
6326*906afcb8SAndy Fiddaman				$exec pax -L --from=ascii --local -ps -rvf "$f" -z "$b" || {
6327*906afcb8SAndy Fiddaman					code=1
6328*906afcb8SAndy Fiddaman					continue
6329*906afcb8SAndy Fiddaman				}
6330*906afcb8SAndy Fiddaman				;;
6331*906afcb8SAndy Fiddaman			esac
6332*906afcb8SAndy Fiddaman			;;
6333*906afcb8SAndy Fiddaman		*)	echo "$command: $f: unknown archive type" >&2
6334*906afcb8SAndy Fiddaman			code=1
6335*906afcb8SAndy Fiddaman			continue
6336*906afcb8SAndy Fiddaman			;;
6337*906afcb8SAndy Fiddaman		esac
6338*906afcb8SAndy Fiddaman
6339*906afcb8SAndy Fiddaman		# check for ini files
6340*906afcb8SAndy Fiddaman
6341*906afcb8SAndy Fiddaman		if	executable $w/$p.ini
6342*906afcb8SAndy Fiddaman		then	$exec $w/$p.ini read || {
6343*906afcb8SAndy Fiddaman				code=1
6344*906afcb8SAndy Fiddaman				continue
6345*906afcb8SAndy Fiddaman			}
6346*906afcb8SAndy Fiddaman		fi
6347*906afcb8SAndy Fiddaman
6348*906afcb8SAndy Fiddaman		# add to the obsolete list
6349*906afcb8SAndy Fiddaman
6350*906afcb8SAndy Fiddaman		k=
6351*906afcb8SAndy Fiddaman		for i in `ls $d$p[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]????$m* $z 2>/dev/null`
6352*906afcb8SAndy Fiddaman		do	case $i in
6353*906afcb8SAndy Fiddaman			*.md5)	continue
6354*906afcb8SAndy Fiddaman				;;
6355*906afcb8SAndy Fiddaman			$d${p}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]$m*)
6356*906afcb8SAndy Fiddaman				;;
6357*906afcb8SAndy Fiddaman			$d${p}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]$m*)
6358*906afcb8SAndy Fiddaman				continue
6359*906afcb8SAndy Fiddaman				;;
6360*906afcb8SAndy Fiddaman			esac
6361*906afcb8SAndy Fiddaman			case $k in
6362*906afcb8SAndy Fiddaman			?*)	case " $remove " in
6363*906afcb8SAndy Fiddaman				*" $k "*)	;;
6364*906afcb8SAndy Fiddaman				*)		remove="$remove $k" ;;
6365*906afcb8SAndy Fiddaman				esac
6366*906afcb8SAndy Fiddaman				;;
6367*906afcb8SAndy Fiddaman			esac
6368*906afcb8SAndy Fiddaman			k=$i
6369*906afcb8SAndy Fiddaman		done
6370*906afcb8SAndy Fiddaman		x="$x $y"
6371*906afcb8SAndy Fiddaman		case " $touch " in
6372*906afcb8SAndy Fiddaman		*" $u "*)	;;
6373*906afcb8SAndy Fiddaman		*)		touch="$touch $u" ;;
6374*906afcb8SAndy Fiddaman		esac
6375*906afcb8SAndy Fiddaman	done
6376*906afcb8SAndy Fiddaman	if	test ! -f $PACKAGEROOT/bin/package -a -f $PACKAGEROOT/bin/package.old
6377*906afcb8SAndy Fiddaman	then	$exec cp $PACKAGEROOT/bin/package.old $PACKAGEROOT/bin/package
6378*906afcb8SAndy Fiddaman	fi
6379*906afcb8SAndy Fiddaman
6380*906afcb8SAndy Fiddaman	# drop obsolete archives
6381*906afcb8SAndy Fiddaman
6382*906afcb8SAndy Fiddaman	case $remove in
6383*906afcb8SAndy Fiddaman	?*)	$exec rm -f $remove ;;
6384*906afcb8SAndy Fiddaman	esac
6385*906afcb8SAndy Fiddaman
6386*906afcb8SAndy Fiddaman	# mark the updated archives
6387*906afcb8SAndy Fiddaman
6388*906afcb8SAndy Fiddaman	case $touch in
6389*906afcb8SAndy Fiddaman	?*)	sleep 1; $exec touch $touch ;;
6390*906afcb8SAndy Fiddaman	esac
6391*906afcb8SAndy Fiddaman
6392*906afcb8SAndy Fiddaman	# check the requirements
6393*906afcb8SAndy Fiddaman
6394*906afcb8SAndy Fiddaman	case $code$exec in
6395*906afcb8SAndy Fiddaman	0)	requirements - $x ;;
6396*906afcb8SAndy Fiddaman	esac
6397*906afcb8SAndy Fiddaman	exit $code
6398*906afcb8SAndy Fiddaman	;;
6399*906afcb8SAndy Fiddaman
6400*906afcb8SAndy Fiddamanregress)if	test ! -d $PACKAGEBIN/gen
6401*906afcb8SAndy Fiddaman	then	echo "$command: 'package make' and 'package test' required for regression" >&2
6402*906afcb8SAndy Fiddaman		exit 1
6403*906afcb8SAndy Fiddaman	fi
6404*906afcb8SAndy Fiddaman	dir=$PACKAGEBIN/gen
6405*906afcb8SAndy Fiddaman	cd $dir
6406*906afcb8SAndy Fiddaman	for s in out old
6407*906afcb8SAndy Fiddaman	do	case `ls -t regress.$s test.$s 2>/dev/null` in
6408*906afcb8SAndy Fiddaman		regress*)
6409*906afcb8SAndy Fiddaman			;;
6410*906afcb8SAndy Fiddaman		test*)	if	test -f regress.$s
6411*906afcb8SAndy Fiddaman			then	$exec mv regress.$s regress.old
6412*906afcb8SAndy Fiddaman			fi
6413*906afcb8SAndy Fiddaman			case $exec in
6414*906afcb8SAndy Fiddaman			'')	egrep -i '\*\*\*|FAIL|^TEST.* [123456789][0123456789]* error|core.*dump' test.$s |
6415*906afcb8SAndy Fiddaman				sed 	-e '/\*\*\* [0123456789]/d' \
6416*906afcb8SAndy Fiddaman					-e '/^TEST.\//s,/[^ ]*/,,' \
6417*906afcb8SAndy Fiddaman					-e 's,[ 	][ 	]*$,,' \
6418*906afcb8SAndy Fiddaman					-e 's/[0123456789][0123456789]*:* \([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*[Cc][Oo][Rr][Ee][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*)\)/\1/' \
6419*906afcb8SAndy Fiddaman					-e 's/\.sh failed at .* with /.sh failed /' \
6420*906afcb8SAndy Fiddaman					> regress.$s
6421*906afcb8SAndy Fiddaman				;;
6422*906afcb8SAndy Fiddaman			*)	$exec filter test failures from $dir/test.$s to $dir/regress.$s
6423*906afcb8SAndy Fiddaman				;;
6424*906afcb8SAndy Fiddaman			esac
6425*906afcb8SAndy Fiddaman			;;
6426*906afcb8SAndy Fiddaman		esac
6427*906afcb8SAndy Fiddaman	done
6428*906afcb8SAndy Fiddaman	if	test -f regress.out -a -f regress.old
6429*906afcb8SAndy Fiddaman	then	$exec diff -b regress.out regress.old
6430*906afcb8SAndy Fiddaman	else	echo "$command: at least 2 test runs required for regression" >&2
6431*906afcb8SAndy Fiddaman			exit 1
6432*906afcb8SAndy Fiddaman	fi
6433*906afcb8SAndy Fiddaman	;;
6434*906afcb8SAndy Fiddaman
6435*906afcb8SAndy Fiddamanrelease)count= lo= hi=
6436*906afcb8SAndy Fiddaman	checksrc
6437*906afcb8SAndy Fiddaman	checkaout release || exit
6438*906afcb8SAndy Fiddaman	requirements source $package
6439*906afcb8SAndy Fiddaman	components $package
6440*906afcb8SAndy Fiddaman	package=$_components_
6441*906afcb8SAndy Fiddaman	set '' $target
6442*906afcb8SAndy Fiddaman	shift
6443*906afcb8SAndy Fiddaman	case $# in
6444*906afcb8SAndy Fiddaman	0)	;;
6445*906afcb8SAndy Fiddaman	*)	case $1 in
6446*906afcb8SAndy Fiddaman		-|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
6447*906afcb8SAndy Fiddaman			case $1 in
6448*906afcb8SAndy Fiddaman			-)	lo= release= ;;
6449*906afcb8SAndy Fiddaman			*)	lo=$1 release="-f $1" ;;
6450*906afcb8SAndy Fiddaman			esac
6451*906afcb8SAndy Fiddaman			shift
6452*906afcb8SAndy Fiddaman			case $1 in
6453*906afcb8SAndy Fiddaman			-|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
6454*906afcb8SAndy Fiddaman				case $1 in
6455*906afcb8SAndy Fiddaman				-)	hi= ;;
6456*906afcb8SAndy Fiddaman				*)	hi=$1 release="$release -t $1" ;;
6457*906afcb8SAndy Fiddaman				esac
6458*906afcb8SAndy Fiddaman				shift
6459*906afcb8SAndy Fiddaman				;;
6460*906afcb8SAndy Fiddaman			esac
6461*906afcb8SAndy Fiddaman			;;
6462*906afcb8SAndy Fiddaman		[0123456789]|[0123456789][0123456789]|[0123456789][0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789][0123456789]*)
6463*906afcb8SAndy Fiddaman			count=$1
6464*906afcb8SAndy Fiddaman			release="-r $count"
6465*906afcb8SAndy Fiddaman			shift
6466*906afcb8SAndy Fiddaman			;;
6467*906afcb8SAndy Fiddaman		esac
6468*906afcb8SAndy Fiddaman		;;
6469*906afcb8SAndy Fiddaman	esac
6470*906afcb8SAndy Fiddaman	case $# in
6471*906afcb8SAndy Fiddaman	0)	case $package in
6472*906afcb8SAndy Fiddaman		'')	package=* ;;
6473*906afcb8SAndy Fiddaman		esac
6474*906afcb8SAndy Fiddaman		;;
6475*906afcb8SAndy Fiddaman	*)	case $package in
6476*906afcb8SAndy Fiddaman		'')	package=$*
6477*906afcb8SAndy Fiddaman			;;
6478*906afcb8SAndy Fiddaman		*)	echo $command: $*: lo-date hi-date arguments expected >&2
6479*906afcb8SAndy Fiddaman			exit 1
6480*906afcb8SAndy Fiddaman			;;
6481*906afcb8SAndy Fiddaman		esac
6482*906afcb8SAndy Fiddaman		;;
6483*906afcb8SAndy Fiddaman	esac
6484*906afcb8SAndy Fiddaman	echo
6485*906afcb8SAndy Fiddaman	case $count:$lo:$hi in
6486*906afcb8SAndy Fiddaman	::)	echo "All recorded changes follow." ;;
6487*906afcb8SAndy Fiddaman	1::)	echo "Changes since the last release follow." ;;
6488*906afcb8SAndy Fiddaman	?*::)	echo "Changes since the last $count releases follow." ;;
6489*906afcb8SAndy Fiddaman	1:?*:)	echo "Changes since $lo or the last release follow." ;;
6490*906afcb8SAndy Fiddaman	*:?*:*)	echo "Changes since $lo follow." ;;
6491*906afcb8SAndy Fiddaman	*::?*)	echo "Changes before $hi follow." ;;
6492*906afcb8SAndy Fiddaman	*)	echo "Changes between $lo and $hi follow." ;;
6493*906afcb8SAndy Fiddaman	esac
6494*906afcb8SAndy Fiddaman	x=
6495*906afcb8SAndy Fiddaman	for r in $INSTALLROOT $PACKAGEROOT
6496*906afcb8SAndy Fiddaman	do	for s in $package_src
6497*906afcb8SAndy Fiddaman		do	d=$r/src/$s
6498*906afcb8SAndy Fiddaman			if	test -d $d
6499*906afcb8SAndy Fiddaman			then	cd $d
6500*906afcb8SAndy Fiddaman				for i in $package
6501*906afcb8SAndy Fiddaman				do	if	test -h $i 2>/dev/null
6502*906afcb8SAndy Fiddaman					then	continue
6503*906afcb8SAndy Fiddaman					fi
6504*906afcb8SAndy Fiddaman					case " $x " in
6505*906afcb8SAndy Fiddaman					*" $i "*)	continue ;;
6506*906afcb8SAndy Fiddaman					esac
6507*906afcb8SAndy Fiddaman					for f in RELEASE CHANGES ChangeLog
6508*906afcb8SAndy Fiddaman					do	if	test -f $i/$f
6509*906afcb8SAndy Fiddaman						then	$exec release $release $i/$f
6510*906afcb8SAndy Fiddaman							x="$x $i"
6511*906afcb8SAndy Fiddaman							for f in $i/*/$f
6512*906afcb8SAndy Fiddaman							do	if	test -f $f
6513*906afcb8SAndy Fiddaman								then	$exec release $release $f
6514*906afcb8SAndy Fiddaman								fi
6515*906afcb8SAndy Fiddaman							done
6516*906afcb8SAndy Fiddaman							break
6517*906afcb8SAndy Fiddaman						fi
6518*906afcb8SAndy Fiddaman					done
6519*906afcb8SAndy Fiddaman				done
6520*906afcb8SAndy Fiddaman			fi
6521*906afcb8SAndy Fiddaman		done
6522*906afcb8SAndy Fiddaman	done
6523*906afcb8SAndy Fiddaman	;;
6524*906afcb8SAndy Fiddaman
6525*906afcb8SAndy Fiddamanremove)	echo "$command: $action: not implemented yet" >&2
6526*906afcb8SAndy Fiddaman	exit 1
6527*906afcb8SAndy Fiddaman	;;
6528*906afcb8SAndy Fiddaman
6529*906afcb8SAndy Fiddamanresults)set '' $target
6530*906afcb8SAndy Fiddaman	shift
6531*906afcb8SAndy Fiddaman	def=make
6532*906afcb8SAndy Fiddaman	dir=$PACKAGEBIN/gen
6533*906afcb8SAndy Fiddaman	case $verbose in
6534*906afcb8SAndy Fiddaman	0)	filter=yes ;;
6535*906afcb8SAndy Fiddaman	*)	filter=cat ;;
6536*906afcb8SAndy Fiddaman	esac
6537*906afcb8SAndy Fiddaman	path=0
6538*906afcb8SAndy Fiddaman	suf=out
6539*906afcb8SAndy Fiddaman	on=
6540*906afcb8SAndy Fiddaman	while	:
6541*906afcb8SAndy Fiddaman	do	case $# in
6542*906afcb8SAndy Fiddaman		0)	break ;;
6543*906afcb8SAndy Fiddaman		esac
6544*906afcb8SAndy Fiddaman		case $1 in
6545*906afcb8SAndy Fiddaman		--)	shift
6546*906afcb8SAndy Fiddaman			break
6547*906afcb8SAndy Fiddaman			;;
6548*906afcb8SAndy Fiddaman		admin)	dir=$PACKAGESRC/admin
6549*906afcb8SAndy Fiddaman			;;
6550*906afcb8SAndy Fiddaman		error*|fail*)
6551*906afcb8SAndy Fiddaman			filter=errors
6552*906afcb8SAndy Fiddaman			;;
6553*906afcb8SAndy Fiddaman		make|test|view|write)
6554*906afcb8SAndy Fiddaman			def=$1
6555*906afcb8SAndy Fiddaman			case $filter:$1:$SHELL in
6556*906afcb8SAndy Fiddaman			errors:*:*)	;;
6557*906afcb8SAndy Fiddaman			*:test:*/ksh*)	filter=rt ;;
6558*906afcb8SAndy Fiddaman			esac
6559*906afcb8SAndy Fiddaman			;;
6560*906afcb8SAndy Fiddaman		old)	suf=old
6561*906afcb8SAndy Fiddaman			;;
6562*906afcb8SAndy Fiddaman		on)	case $# in
6563*906afcb8SAndy Fiddaman			1)	echo $command: $action: $1: host pattern argument expected >&2
6564*906afcb8SAndy Fiddaman				exit 1
6565*906afcb8SAndy Fiddaman				;;
6566*906afcb8SAndy Fiddaman			esac
6567*906afcb8SAndy Fiddaman			shift
6568*906afcb8SAndy Fiddaman			case $on in
6569*906afcb8SAndy Fiddaman			?*)	on="$on|" ;;
6570*906afcb8SAndy Fiddaman			esac
6571*906afcb8SAndy Fiddaman			on="$on$1"
6572*906afcb8SAndy Fiddaman			;;
6573*906afcb8SAndy Fiddaman		path)	path=1
6574*906afcb8SAndy Fiddaman			;;
6575*906afcb8SAndy Fiddaman		test)	def=test
6576*906afcb8SAndy Fiddaman			filter=rt
6577*906afcb8SAndy Fiddaman			;;
6578*906afcb8SAndy Fiddaman		*)	break
6579*906afcb8SAndy Fiddaman			;;
6580*906afcb8SAndy Fiddaman		esac
6581*906afcb8SAndy Fiddaman		shift
6582*906afcb8SAndy Fiddaman	done
6583*906afcb8SAndy Fiddaman	case $dir in
6584*906afcb8SAndy Fiddaman	*/admin)case $on in
6585*906afcb8SAndy Fiddaman		'')	on="*" ;;
6586*906afcb8SAndy Fiddaman		*)	on="@($on)" ;;
6587*906afcb8SAndy Fiddaman		esac
6588*906afcb8SAndy Fiddaman		def=$def.log/$on
6589*906afcb8SAndy Fiddaman		;;
6590*906afcb8SAndy Fiddaman	esac
6591*906afcb8SAndy Fiddaman	case $# in
6592*906afcb8SAndy Fiddaman	0)	set "$def" ;;
6593*906afcb8SAndy Fiddaman	esac
6594*906afcb8SAndy Fiddaman	m=
6595*906afcb8SAndy Fiddaman	t=
6596*906afcb8SAndy Fiddaman	for i
6597*906afcb8SAndy Fiddaman	do	k=0
6598*906afcb8SAndy Fiddaman		eval set '""' $i - $i.$suf - $dir/$i - $dir/$i.$suf -
6599*906afcb8SAndy Fiddaman		shift
6600*906afcb8SAndy Fiddaman		for j
6601*906afcb8SAndy Fiddaman		do	case $j in
6602*906afcb8SAndy Fiddaman			-)	case $k in
6603*906afcb8SAndy Fiddaman				1)	continue 2 ;;
6604*906afcb8SAndy Fiddaman				esac
6605*906afcb8SAndy Fiddaman				;;
6606*906afcb8SAndy Fiddaman			*)	if	test -f $j
6607*906afcb8SAndy Fiddaman				then	k=1
6608*906afcb8SAndy Fiddaman					case /$j in
6609*906afcb8SAndy Fiddaman					*/test.*)	t="$t $j" ;;
6610*906afcb8SAndy Fiddaman					*)		m="$m $j" ;;
6611*906afcb8SAndy Fiddaman					esac
6612*906afcb8SAndy Fiddaman				fi
6613*906afcb8SAndy Fiddaman				;;
6614*906afcb8SAndy Fiddaman			esac
6615*906afcb8SAndy Fiddaman		done
6616*906afcb8SAndy Fiddaman		echo "$command: $i action output not found" >&2
6617*906afcb8SAndy Fiddaman		exit 1
6618*906afcb8SAndy Fiddaman	done
6619*906afcb8SAndy Fiddaman	sep=
6620*906afcb8SAndy Fiddaman	case $t in
6621*906afcb8SAndy Fiddaman	?*)	case $path in
6622*906afcb8SAndy Fiddaman		0)	for j in $t
6623*906afcb8SAndy Fiddaman			do	echo "$sep==> $j <=="
6624*906afcb8SAndy Fiddaman				sep=$nl
6625*906afcb8SAndy Fiddaman				case $filter in
6626*906afcb8SAndy Fiddaman				cat)	$exec cat $j
6627*906afcb8SAndy Fiddaman					;;
6628*906afcb8SAndy Fiddaman				errors)	$exec egrep -i '\*\*\*|FAIL[ES]|^TEST.* [123456789][0123456789]* error|core.*dump' $j | sed -e '/^TEST.\//s,/[^ ]*/,,'
6629*906afcb8SAndy Fiddaman					;;
6630*906afcb8SAndy Fiddaman				rt)	$exec $KSH rt - $j
6631*906afcb8SAndy Fiddaman					;;
6632*906afcb8SAndy Fiddaman				*)	$exec egrep -i '^TEST|FAIL' $j
6633*906afcb8SAndy Fiddaman					;;
6634*906afcb8SAndy Fiddaman				esac
6635*906afcb8SAndy Fiddaman			done
6636*906afcb8SAndy Fiddaman			;;
6637*906afcb8SAndy Fiddaman		1)	echo $t
6638*906afcb8SAndy Fiddaman			;;
6639*906afcb8SAndy Fiddaman		esac
6640*906afcb8SAndy Fiddaman		;;
6641*906afcb8SAndy Fiddaman	esac
6642*906afcb8SAndy Fiddaman	case $m in
6643*906afcb8SAndy Fiddaman	?*)	case $path in
6644*906afcb8SAndy Fiddaman		0)	case $filter in
6645*906afcb8SAndy Fiddaman			cat)	cat $m
6646*906afcb8SAndy Fiddaman				;;
6647*906afcb8SAndy Fiddaman			*)	if	test -f $HOME/.pkgresults
6648*906afcb8SAndy Fiddaman				then	i="`cat $HOME/.pkgresults`"
6649*906afcb8SAndy Fiddaman					case $i in
6650*906afcb8SAndy Fiddaman					'|'*)	;;
6651*906afcb8SAndy Fiddaman					*)	i="|$i" ;;
6652*906afcb8SAndy Fiddaman					esac
6653*906afcb8SAndy Fiddaman				else	i=
6654*906afcb8SAndy Fiddaman				fi
6655*906afcb8SAndy Fiddaman				for j in $m
6656*906afcb8SAndy Fiddaman				do	echo "$sep==> $j <=="
6657*906afcb8SAndy Fiddaman					sep=$nl
6658*906afcb8SAndy Fiddaman					case $filter in
6659*906afcb8SAndy Fiddaman					errors)	$exeg egrep '^pax:|\*\*\*' $j
6660*906afcb8SAndy Fiddaman						;;
6661*906afcb8SAndy Fiddaman					*)	$exec egrep -iv '^($||[\+\[]|cc[^-:]|kill |make.*(file system time|has been replaced)|so|[0123456789]+ error|uncrate |[0123456789]+ block|ar: creat|iffe: test: |conf: (check|generate|test)|[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*=|gsf@research|ar:.*warning|cpio:|ld:.*(duplicate symbol|to obtain more information)|[0123456789]*$|(checking|creating|touch) [/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789])| obsolete predefined symbol | is (almost always misused|dangerous|deprecated|not implemented)| trigraph| assigned to | cast .* different size| integer overflow .*<<| optimization may be attained | passed as |::__builtin|pragma.*prototyped|^creating.*\.a$|warning.*not optimized|exceeds size thresh|ld:.*preempts|is unchanged|with value >=|(-l|lib)\*|/(ast|sys)/(dir|limits|param|stropts)\.h.*redefined|usage|base registers|`\.\.\.` obsolete'"$i" $j |
6662*906afcb8SAndy Fiddaman						$exec grep :
6663*906afcb8SAndy Fiddaman						;;
6664*906afcb8SAndy Fiddaman					esac
6665*906afcb8SAndy Fiddaman				done
6666*906afcb8SAndy Fiddaman				;;
6667*906afcb8SAndy Fiddaman			esac
6668*906afcb8SAndy Fiddaman			;;
6669*906afcb8SAndy Fiddaman		1)	echo $m
6670*906afcb8SAndy Fiddaman			;;
6671*906afcb8SAndy Fiddaman		esac
6672*906afcb8SAndy Fiddaman	esac
6673*906afcb8SAndy Fiddaman	;;
6674*906afcb8SAndy Fiddaman
6675*906afcb8SAndy Fiddamantest)	requirements source $package
6676*906afcb8SAndy Fiddaman	components $package
6677*906afcb8SAndy Fiddaman	package=$_components_
6678*906afcb8SAndy Fiddaman	case $only in
6679*906afcb8SAndy Fiddaman	0)	only= ;;
6680*906afcb8SAndy Fiddaman	1)	only=--recurse=only ;;
6681*906afcb8SAndy Fiddaman	esac
6682*906afcb8SAndy Fiddaman
6683*906afcb8SAndy Fiddaman	# must have nmake
6684*906afcb8SAndy Fiddaman
6685*906afcb8SAndy Fiddaman	if	nonmake $MAKE
6686*906afcb8SAndy Fiddaman	then	echo $command: $action: must have $MAKE to test >&2
6687*906afcb8SAndy Fiddaman		exit 1
6688*906afcb8SAndy Fiddaman	fi
6689*906afcb8SAndy Fiddaman
6690*906afcb8SAndy Fiddaman	# all work under $INSTALLROOT/src
6691*906afcb8SAndy Fiddaman
6692*906afcb8SAndy Fiddaman	$make cd $INSTALLROOT/src
6693*906afcb8SAndy Fiddaman
6694*906afcb8SAndy Fiddaman	# disable core dumps (could be disasterous over nfs)
6695*906afcb8SAndy Fiddaman
6696*906afcb8SAndy Fiddaman	(ulimit -c 0) > /dev/null 2>&1 && ulimit -c 0
6697*906afcb8SAndy Fiddaman
6698*906afcb8SAndy Fiddaman	# do the tests
6699*906afcb8SAndy Fiddaman
6700*906afcb8SAndy Fiddaman	eval capture \$MAKE \$makeflags \$noexec \$only recurse test \$target \$nmakesep \$package $assign
6701*906afcb8SAndy Fiddaman	;;
6702*906afcb8SAndy Fiddaman
6703*906afcb8SAndy Fiddamanupdate)	# download the latest release.version for selected packages
6704*906afcb8SAndy Fiddaman
6705*906afcb8SAndy Fiddaman	# all work in $PACKAGEROOT/lib/package/tgz
6706*906afcb8SAndy Fiddaman
6707*906afcb8SAndy Fiddaman	if	test ! -d $PACKAGEROOT/lib/package/tgz
6708*906afcb8SAndy Fiddaman	then	$exec mkdir -p $PACKAGEROOT/lib/package/tgz || exit
6709*906afcb8SAndy Fiddaman		$exec cd $PACKAGEROOT/lib/package/tgz
6710*906afcb8SAndy Fiddaman	else	cd $PACKAGEROOT/lib/package/tgz
6711*906afcb8SAndy Fiddaman	fi
6712*906afcb8SAndy Fiddaman
6713*906afcb8SAndy Fiddaman	# get the architectures, update query url, and packages
6714*906afcb8SAndy Fiddaman
6715*906afcb8SAndy Fiddaman	set '' $args
6716*906afcb8SAndy Fiddaman	op=update
6717*906afcb8SAndy Fiddaman	tgz=tgz
6718*906afcb8SAndy Fiddaman	source=
6719*906afcb8SAndy Fiddaman	binary=
6720*906afcb8SAndy Fiddaman	setup=
6721*906afcb8SAndy Fiddaman	types=
6722*906afcb8SAndy Fiddaman	url=
6723*906afcb8SAndy Fiddaman	urlfile=$default_url
6724*906afcb8SAndy Fiddaman	while	:
6725*906afcb8SAndy Fiddaman	do	shift
6726*906afcb8SAndy Fiddaman		case $# in
6727*906afcb8SAndy Fiddaman		0)	break ;;
6728*906afcb8SAndy Fiddaman		esac
6729*906afcb8SAndy Fiddaman		case $1 in
6730*906afcb8SAndy Fiddaman		--)	shift
6731*906afcb8SAndy Fiddaman			break
6732*906afcb8SAndy Fiddaman			;;
6733*906afcb8SAndy Fiddaman		beta)	op=beta
6734*906afcb8SAndy Fiddaman			tgz=beta
6735*906afcb8SAndy Fiddaman			;;
6736*906afcb8SAndy Fiddaman		binary)	binary=1
6737*906afcb8SAndy Fiddaman			;;
6738*906afcb8SAndy Fiddaman		setup)	setup=1
6739*906afcb8SAndy Fiddaman			;;
6740*906afcb8SAndy Fiddaman		source)	source=1
6741*906afcb8SAndy Fiddaman			;;
6742*906afcb8SAndy Fiddaman		*://*)	url=$1
6743*906afcb8SAndy Fiddaman			shift
6744*906afcb8SAndy Fiddaman			break
6745*906afcb8SAndy Fiddaman			;;
6746*906afcb8SAndy Fiddaman		*.url)	urlfile=$1
6747*906afcb8SAndy Fiddaman			if	test ! -s $urlfile
6748*906afcb8SAndy Fiddaman			then	echo $command: $urlfile: not found >&2; exit 1
6749*906afcb8SAndy Fiddaman			fi
6750*906afcb8SAndy Fiddaman			break
6751*906afcb8SAndy Fiddaman			;;
6752*906afcb8SAndy Fiddaman		$all_types)
6753*906afcb8SAndy Fiddaman			binary=1
6754*906afcb8SAndy Fiddaman			types="$types $1"
6755*906afcb8SAndy Fiddaman			;;
6756*906afcb8SAndy Fiddaman		*)	break
6757*906afcb8SAndy Fiddaman			;;
6758*906afcb8SAndy Fiddaman		esac
6759*906afcb8SAndy Fiddaman	done
6760*906afcb8SAndy Fiddaman	case $source:$binary in
6761*906afcb8SAndy Fiddaman	:)	source=1 binary=1
6762*906afcb8SAndy Fiddaman		;;
6763*906afcb8SAndy Fiddaman	:1)	case $types in
6764*906afcb8SAndy Fiddaman		'')	types=$HOSTTYPE ;;
6765*906afcb8SAndy Fiddaman		esac
6766*906afcb8SAndy Fiddaman		;;
6767*906afcb8SAndy Fiddaman	esac
6768*906afcb8SAndy Fiddaman	case $url in
6769*906afcb8SAndy Fiddaman	'')	case $urlfile in
6770*906afcb8SAndy Fiddaman		$default_url)
6771*906afcb8SAndy Fiddaman			if	test ! -s $urlfile
6772*906afcb8SAndy Fiddaman			then	echo $command: url argument expected >&2; exit 1
6773*906afcb8SAndy Fiddaman			fi
6774*906afcb8SAndy Fiddaman			;;
6775*906afcb8SAndy Fiddaman		*)	default_url=
6776*906afcb8SAndy Fiddaman			;;
6777*906afcb8SAndy Fiddaman		esac
6778*906afcb8SAndy Fiddaman		url=
6779*906afcb8SAndy Fiddaman		if	grep '^url=' $urlfile >/dev/null
6780*906afcb8SAndy Fiddaman		then	a=$authorize
6781*906afcb8SAndy Fiddaman			p=$password
6782*906afcb8SAndy Fiddaman			case $urlfile in
6783*906afcb8SAndy Fiddaman			*/*)	;;
6784*906afcb8SAndy Fiddaman			*)	urlfile=./$urlfile ;;
6785*906afcb8SAndy Fiddaman			esac
6786*906afcb8SAndy Fiddaman			. $urlfile
6787*906afcb8SAndy Fiddaman			case $a:$p in
6788*906afcb8SAndy Fiddaman			$authorize:$password)
6789*906afcb8SAndy Fiddaman				default_url=
6790*906afcb8SAndy Fiddaman				;;
6791*906afcb8SAndy Fiddaman			*)	case $a in
6792*906afcb8SAndy Fiddaman				?*)	authorize=$a ;;
6793*906afcb8SAndy Fiddaman				esac
6794*906afcb8SAndy Fiddaman				case $p in
6795*906afcb8SAndy Fiddaman				?*)	password=$p ;;
6796*906afcb8SAndy Fiddaman				esac
6797*906afcb8SAndy Fiddaman				;;
6798*906afcb8SAndy Fiddaman			esac
6799*906afcb8SAndy Fiddaman		else	url=`cat $urlfile`
6800*906afcb8SAndy Fiddaman		fi
6801*906afcb8SAndy Fiddaman		;;
6802*906afcb8SAndy Fiddaman	esac
6803*906afcb8SAndy Fiddaman	case $exec in
6804*906afcb8SAndy Fiddaman	?*)	default_url= ;;
6805*906afcb8SAndy Fiddaman	esac
6806*906afcb8SAndy Fiddaman
6807*906afcb8SAndy Fiddaman	# get the update list
6808*906afcb8SAndy Fiddaman
6809*906afcb8SAndy Fiddaman	eval `echo $url | sed 's,\(.*\)://\([^/]*\)/\(.*\),prot=\"\1\" host=\"\2\" dir=\"\3\",'`
6810*906afcb8SAndy Fiddaman	get $host $dir/$op.html
6811*906afcb8SAndy Fiddaman
6812*906afcb8SAndy Fiddaman	# get/check the package names
6813*906afcb8SAndy Fiddaman
6814*906afcb8SAndy Fiddaman	case " $* " in
6815*906afcb8SAndy Fiddaman	*" - "*)case $source in
6816*906afcb8SAndy Fiddaman		1)	source_packages=$* ;;
6817*906afcb8SAndy Fiddaman		*)	source_packages= ;;
6818*906afcb8SAndy Fiddaman		esac
6819*906afcb8SAndy Fiddaman		case $binary in
6820*906afcb8SAndy Fiddaman		1)	binary_packages=$* ;;
6821*906afcb8SAndy Fiddaman		*)	binary_packages= ;;
6822*906afcb8SAndy Fiddaman		esac
6823*906afcb8SAndy Fiddaman		package_hit=$*
6824*906afcb8SAndy Fiddaman		;;
6825*906afcb8SAndy Fiddaman	"  ")	nl="
6826*906afcb8SAndy Fiddaman"
6827*906afcb8SAndy Fiddaman		case $source in
6828*906afcb8SAndy Fiddaman		1)	p=
6829*906afcb8SAndy Fiddaman			for f in `ls *.????-??-??.* 2>/dev/null`
6830*906afcb8SAndy Fiddaman			do	case $f in
6831*906afcb8SAndy Fiddaman				*.????-??-??.????-??-??.*.*)
6832*906afcb8SAndy Fiddaman					;;
6833*906afcb8SAndy Fiddaman				*.????-??-??.????-??-??.*)
6834*906afcb8SAndy Fiddaman					p=$p$nl$f
6835*906afcb8SAndy Fiddaman					;;
6836*906afcb8SAndy Fiddaman				*.????-??-??.*.*)
6837*906afcb8SAndy Fiddaman					;;
6838*906afcb8SAndy Fiddaman				*.????-??-??.*)
6839*906afcb8SAndy Fiddaman					p=$p$nl$f
6840*906afcb8SAndy Fiddaman					;;
6841*906afcb8SAndy Fiddaman				esac
6842*906afcb8SAndy Fiddaman			done
6843*906afcb8SAndy Fiddaman			set '' `echo "$p" | sed 's,\..*,,' | sort -u`
6844*906afcb8SAndy Fiddaman			shift
6845*906afcb8SAndy Fiddaman			source_packages=$*
6846*906afcb8SAndy Fiddaman			;;
6847*906afcb8SAndy Fiddaman		*)	source_packages=
6848*906afcb8SAndy Fiddaman			;;
6849*906afcb8SAndy Fiddaman		esac
6850*906afcb8SAndy Fiddaman		case $binary in
6851*906afcb8SAndy Fiddaman		1)	p=
6852*906afcb8SAndy Fiddaman			for f in `ls *.????-??-??.* 2>/dev/null`
6853*906afcb8SAndy Fiddaman			do	case $f in
6854*906afcb8SAndy Fiddaman				*.????-??-??.????-??-??.*.*)
6855*906afcb8SAndy Fiddaman					p=$p$nl$f
6856*906afcb8SAndy Fiddaman					;;
6857*906afcb8SAndy Fiddaman				*.????-??-??.????-??-??.*)
6858*906afcb8SAndy Fiddaman					;;
6859*906afcb8SAndy Fiddaman				*.????-??-??.*.*)
6860*906afcb8SAndy Fiddaman					p=$p$nl$f
6861*906afcb8SAndy Fiddaman					;;
6862*906afcb8SAndy Fiddaman				*.????-??-??.*)
6863*906afcb8SAndy Fiddaman					;;
6864*906afcb8SAndy Fiddaman				esac
6865*906afcb8SAndy Fiddaman			done
6866*906afcb8SAndy Fiddaman			set '' `echo "$p" | sed 's,\..*,,' | sort -u`
6867*906afcb8SAndy Fiddaman			shift
6868*906afcb8SAndy Fiddaman			binary_packages=$*
6869*906afcb8SAndy Fiddaman			;;
6870*906afcb8SAndy Fiddaman		*)	binary_packages=
6871*906afcb8SAndy Fiddaman			;;
6872*906afcb8SAndy Fiddaman		esac
6873*906afcb8SAndy Fiddaman		package_hit="$source_packages $binary_packages"
6874*906afcb8SAndy Fiddaman		;;
6875*906afcb8SAndy Fiddaman	*)	case $source in
6876*906afcb8SAndy Fiddaman		1)	source_packages=$* ;;
6877*906afcb8SAndy Fiddaman		*)	source_packages= ;;
6878*906afcb8SAndy Fiddaman		esac
6879*906afcb8SAndy Fiddaman		case $binary in
6880*906afcb8SAndy Fiddaman		1)	binary_packages=$* ;;
6881*906afcb8SAndy Fiddaman		*)	binary_packages= ;;
6882*906afcb8SAndy Fiddaman		esac
6883*906afcb8SAndy Fiddaman		package_hit=
6884*906afcb8SAndy Fiddaman		;;
6885*906afcb8SAndy Fiddaman	esac
6886*906afcb8SAndy Fiddaman
6887*906afcb8SAndy Fiddaman	# get the latest updates
6888*906afcb8SAndy Fiddaman
6889*906afcb8SAndy Fiddaman	types_test=
6890*906afcb8SAndy Fiddaman	types_local=
6891*906afcb8SAndy Fiddaman	dir=$dir/$tgz
6892*906afcb8SAndy Fiddaman	case $default_url in
6893*906afcb8SAndy Fiddaman	?*)	echo "url='$url' authorize='$authorize' password='$password'" > $default_url
6894*906afcb8SAndy Fiddaman		case $authorize in
6895*906afcb8SAndy Fiddaman		?*)	chmod go-rwx $default_url ;;
6896*906afcb8SAndy Fiddaman		esac
6897*906afcb8SAndy Fiddaman		;;
6898*906afcb8SAndy Fiddaman	esac
6899*906afcb8SAndy Fiddaman	echo "$got" > got.tmp
6900*906afcb8SAndy Fiddaman	case $only in
6901*906afcb8SAndy Fiddaman	0)	exec < got.tmp
6902*906afcb8SAndy Fiddaman		covered=
6903*906afcb8SAndy Fiddaman		while	read name suffix type base base_size delta delta_size sync sync_size requires covers base_sum delta_sum sync_sum comment
6904*906afcb8SAndy Fiddaman		do	case $requires in
6905*906afcb8SAndy Fiddaman			''|-*)	continue ;;
6906*906afcb8SAndy Fiddaman			esac
6907*906afcb8SAndy Fiddaman			IFS=:
6908*906afcb8SAndy Fiddaman			set '' $requires
6909*906afcb8SAndy Fiddaman			IFS=$ifs
6910*906afcb8SAndy Fiddaman			case $type in
6911*906afcb8SAndy Fiddaman			-)	case " $source_packages " in
6912*906afcb8SAndy Fiddaman				*" $name "*|*" - "*)
6913*906afcb8SAndy Fiddaman					for name
6914*906afcb8SAndy Fiddaman					do	case " $source_packages " in
6915*906afcb8SAndy Fiddaman						*" $name "*)
6916*906afcb8SAndy Fiddaman							;;
6917*906afcb8SAndy Fiddaman						*)	source_packages="$source_packages $name"
6918*906afcb8SAndy Fiddaman							covered=$covered:$covers
6919*906afcb8SAndy Fiddaman							;;
6920*906afcb8SAndy Fiddaman						esac
6921*906afcb8SAndy Fiddaman					done
6922*906afcb8SAndy Fiddaman					;;
6923*906afcb8SAndy Fiddaman				esac
6924*906afcb8SAndy Fiddaman				;;
6925*906afcb8SAndy Fiddaman			*)	case " $binary_packages " in
6926*906afcb8SAndy Fiddaman				*" $name "*|*" - "*)
6927*906afcb8SAndy Fiddaman					for name
6928*906afcb8SAndy Fiddaman					do	case " $binary_packages " in
6929*906afcb8SAndy Fiddaman						*" $name "*)
6930*906afcb8SAndy Fiddaman							;;
6931*906afcb8SAndy Fiddaman						*)	binary_packages="$binary_packages $name"
6932*906afcb8SAndy Fiddaman							covered=$covered:$covers
6933*906afcb8SAndy Fiddaman							;;
6934*906afcb8SAndy Fiddaman						esac
6935*906afcb8SAndy Fiddaman					done
6936*906afcb8SAndy Fiddaman					;;
6937*906afcb8SAndy Fiddaman				esac
6938*906afcb8SAndy Fiddaman				;;
6939*906afcb8SAndy Fiddaman			esac
6940*906afcb8SAndy Fiddaman		done
6941*906afcb8SAndy Fiddaman		case $covered in
6942*906afcb8SAndy Fiddaman		?*)	x=$source_packages
6943*906afcb8SAndy Fiddaman			source_packages=
6944*906afcb8SAndy Fiddaman			for name in $x
6945*906afcb8SAndy Fiddaman			do	case :$covered: in
6946*906afcb8SAndy Fiddaman				*:$name:*)	;;
6947*906afcb8SAndy Fiddaman				*)		source_packages="$source_packages $name" ;;
6948*906afcb8SAndy Fiddaman				esac
6949*906afcb8SAndy Fiddaman			done
6950*906afcb8SAndy Fiddaman			x=$binary_packages
6951*906afcb8SAndy Fiddaman			binary_packages=
6952*906afcb8SAndy Fiddaman			for name in $x
6953*906afcb8SAndy Fiddaman			do	case :$covered: in
6954*906afcb8SAndy Fiddaman				*:$name:*)	;;
6955*906afcb8SAndy Fiddaman				*)		binary_packages="$binary_packages $name" ;;
6956*906afcb8SAndy Fiddaman				esac
6957*906afcb8SAndy Fiddaman			done
6958*906afcb8SAndy Fiddaman			;;
6959*906afcb8SAndy Fiddaman		esac
6960*906afcb8SAndy Fiddaman		;;
6961*906afcb8SAndy Fiddaman	esac
6962*906afcb8SAndy Fiddaman	checksum=
6963*906afcb8SAndy Fiddaman	for i in $checksum_commands
6964*906afcb8SAndy Fiddaman	do	case `( $i ) < /dev/null 2> /dev/null` in
6965*906afcb8SAndy Fiddaman		${checksum_empty}|${checksum_empty}[\ \	]*)
6966*906afcb8SAndy Fiddaman			checksum=$i
6967*906afcb8SAndy Fiddaman			break
6968*906afcb8SAndy Fiddaman			;;
6969*906afcb8SAndy Fiddaman		esac
6970*906afcb8SAndy Fiddaman	done
6971*906afcb8SAndy Fiddaman	case $checksum in
6972*906afcb8SAndy Fiddaman	'')	echo $command: warning: '{' $checksum_commands '}' command not found -- only download sizes will be checked >&2 ;;
6973*906afcb8SAndy Fiddaman	esac
6974*906afcb8SAndy Fiddaman	exec < got.tmp
6975*906afcb8SAndy Fiddaman	while	read name suffix type base base_size delta delta_size sync sync_size requires covers base_sum delta_sum sync_sum comment
6976*906afcb8SAndy Fiddaman	do	case $verbose in
6977*906afcb8SAndy Fiddaman		1)	case $type in
6978*906afcb8SAndy Fiddaman			-)	i= ;;
6979*906afcb8SAndy Fiddaman			*)	i=.$type ;;
6980*906afcb8SAndy Fiddaman			esac
6981*906afcb8SAndy Fiddaman			j="$name.$base$i.$suffix"
6982*906afcb8SAndy Fiddaman			case $delta in
6983*906afcb8SAndy Fiddaman			-)	j="$j -" ;;
6984*906afcb8SAndy Fiddaman			*)	j="$j $name.$base.$delta$i.$suffix" ;;
6985*906afcb8SAndy Fiddaman			esac
6986*906afcb8SAndy Fiddaman			case $sync in
6987*906afcb8SAndy Fiddaman			-)	j="$j -" ;;
6988*906afcb8SAndy Fiddaman			*)	j="$j $name.$base.$sync$i.$suffix" ;;
6989*906afcb8SAndy Fiddaman			esac
6990*906afcb8SAndy Fiddaman			echo $command: $j $base_size:$base_sum $delta_size:$delta_sum $sync_size:$sync_sum $requires >&2
6991*906afcb8SAndy Fiddaman		esac
6992*906afcb8SAndy Fiddaman		case " $package_hit " in
6993*906afcb8SAndy Fiddaman		*" $name "*|*" - "*)
6994*906afcb8SAndy Fiddaman			;;
6995*906afcb8SAndy Fiddaman		*)	package_hit="$package_hit $name"
6996*906afcb8SAndy Fiddaman			;;
6997*906afcb8SAndy Fiddaman		esac
6998*906afcb8SAndy Fiddaman		case $type in
6999*906afcb8SAndy Fiddaman		-)	case " $source_packages " in
7000*906afcb8SAndy Fiddaman			*" $name "*|*" - "*)
7001*906afcb8SAndy Fiddaman				if	test -s $name.tim
7002*906afcb8SAndy Fiddaman				then	continue
7003*906afcb8SAndy Fiddaman				fi
7004*906afcb8SAndy Fiddaman				lcl=$name.$base.$suffix
7005*906afcb8SAndy Fiddaman				if	test -f $lcl
7006*906afcb8SAndy Fiddaman				then	case $checksum:$base_sum in
7007*906afcb8SAndy Fiddaman					:*|*:-)	size=`wc -c < $lcl | sed 's, ,,g'` sum=$base_sum ;;
7008*906afcb8SAndy Fiddaman					*)	size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ 	][ 	]*,,' -e 's,[ 	].*,,'` ;;
7009*906afcb8SAndy Fiddaman					esac
7010*906afcb8SAndy Fiddaman				else	size=X sum=X
7011*906afcb8SAndy Fiddaman				fi
7012*906afcb8SAndy Fiddaman				if	test "0" != "$force" -a "X-" = "X$delta" -o "$base_size" != "$size" -o "$base_sum" != "$sum"
7013*906afcb8SAndy Fiddaman				then	rmt=
7014*906afcb8SAndy Fiddaman					case $sync:$sync_size in
7015*906afcb8SAndy Fiddaman					-*|*[-:])
7016*906afcb8SAndy Fiddaman						;;
7017*906afcb8SAndy Fiddaman					*)	lcl=$name.$base.$sync.$suffix
7018*906afcb8SAndy Fiddaman						if	test -f $lcl
7019*906afcb8SAndy Fiddaman						then	rmt=1
7020*906afcb8SAndy Fiddaman							get $host $dir $lcl $sync_size $sync_sum
7021*906afcb8SAndy Fiddaman						fi
7022*906afcb8SAndy Fiddaman						;;
7023*906afcb8SAndy Fiddaman					esac
7024*906afcb8SAndy Fiddaman					case $base:$base_size in
7025*906afcb8SAndy Fiddaman					-*|*[-:])
7026*906afcb8SAndy Fiddaman						;;
7027*906afcb8SAndy Fiddaman					*)	case $rmt in
7028*906afcb8SAndy Fiddaman						'')	lcl=$name.$base.$suffix
7029*906afcb8SAndy Fiddaman							get $host $dir $lcl $base_size $base_sum
7030*906afcb8SAndy Fiddaman							;;
7031*906afcb8SAndy Fiddaman						esac
7032*906afcb8SAndy Fiddaman						;;
7033*906afcb8SAndy Fiddaman					esac
7034*906afcb8SAndy Fiddaman				fi
7035*906afcb8SAndy Fiddaman				case $delta:$delta_size in
7036*906afcb8SAndy Fiddaman				-*|*[-:])
7037*906afcb8SAndy Fiddaman					;;
7038*906afcb8SAndy Fiddaman				*)	lcl=$name.$delta.$base.$suffix
7039*906afcb8SAndy Fiddaman					if	test -f $lcl
7040*906afcb8SAndy Fiddaman					then	case $checksum:$delta_sum in
7041*906afcb8SAndy Fiddaman						:*|*:-)	size=`wc -c < $lcl | sed 's, ,,g'` sum=$delta_sum ;;
7042*906afcb8SAndy Fiddaman						*)	size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ 	][ 	]*,,' -e 's,[ 	].*,,'` ;;
7043*906afcb8SAndy Fiddaman						esac
7044*906afcb8SAndy Fiddaman					else	size=X sum=X
7045*906afcb8SAndy Fiddaman					fi
7046*906afcb8SAndy Fiddaman					if	test "0" != "$force" -o "$delta_size" != "$size" -o "$delta_sum" != "$sum"
7047*906afcb8SAndy Fiddaman					then	get $host $dir $lcl $delta_size $delta_sum
7048*906afcb8SAndy Fiddaman					fi
7049*906afcb8SAndy Fiddaman					;;
7050*906afcb8SAndy Fiddaman				esac
7051*906afcb8SAndy Fiddaman				;;
7052*906afcb8SAndy Fiddaman			esac
7053*906afcb8SAndy Fiddaman			;;
7054*906afcb8SAndy Fiddaman		*)	case " $binary_packages " in
7055*906afcb8SAndy Fiddaman			*" $name "*|*" - "*)
7056*906afcb8SAndy Fiddaman				if	test -s $name.$type.tim
7057*906afcb8SAndy Fiddaman				then	continue
7058*906afcb8SAndy Fiddaman				fi
7059*906afcb8SAndy Fiddaman				case " $types " in
7060*906afcb8SAndy Fiddaman				*" - "*);;
7061*906afcb8SAndy Fiddaman				"  ")	case " $types_test " in
7062*906afcb8SAndy Fiddaman					*" $type "*)
7063*906afcb8SAndy Fiddaman						;;
7064*906afcb8SAndy Fiddaman					*)	types_test="$types_test $type"
7065*906afcb8SAndy Fiddaman						for i in *.????-??-??.$type.* *.????-??-??.????-??-??.$type.*
7066*906afcb8SAndy Fiddaman						do	if	test -f $i
7067*906afcb8SAndy Fiddaman							then	types_local="$types_local $type"
7068*906afcb8SAndy Fiddaman							fi
7069*906afcb8SAndy Fiddaman							break
7070*906afcb8SAndy Fiddaman						done
7071*906afcb8SAndy Fiddaman						;;
7072*906afcb8SAndy Fiddaman					esac
7073*906afcb8SAndy Fiddaman					case " $types_local " in
7074*906afcb8SAndy Fiddaman					*" $type "*)
7075*906afcb8SAndy Fiddaman						;;
7076*906afcb8SAndy Fiddaman					*)	continue
7077*906afcb8SAndy Fiddaman						;;
7078*906afcb8SAndy Fiddaman					esac
7079*906afcb8SAndy Fiddaman					;;
7080*906afcb8SAndy Fiddaman				*)	case " $types " in
7081*906afcb8SAndy Fiddaman					*" $type "*)
7082*906afcb8SAndy Fiddaman						;;
7083*906afcb8SAndy Fiddaman					*)	continue
7084*906afcb8SAndy Fiddaman						;;
7085*906afcb8SAndy Fiddaman					esac
7086*906afcb8SAndy Fiddaman					;;
7087*906afcb8SAndy Fiddaman				esac
7088*906afcb8SAndy Fiddaman				lcl=$name.$base.$type.$suffix
7089*906afcb8SAndy Fiddaman				if	test -f $lcl
7090*906afcb8SAndy Fiddaman				then	case $checksum:$base_sum in
7091*906afcb8SAndy Fiddaman					:*|*:-)	size=`wc -c < $lcl | sed 's, ,,g'` sum=$base_sum ;;
7092*906afcb8SAndy Fiddaman					*)	size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ 	][ 	]*,,' -e 's,[ 	].*,,'` ;;
7093*906afcb8SAndy Fiddaman					esac
7094*906afcb8SAndy Fiddaman				else	size=X sum=X
7095*906afcb8SAndy Fiddaman				fi
7096*906afcb8SAndy Fiddaman				if	test "0" != "$force" -a "X-" = "X$delta" -o "$base_size" != "$size" -o "$base_sum" != "$sum"
7097*906afcb8SAndy Fiddaman				then	rmt=
7098*906afcb8SAndy Fiddaman					case $sync:$sync_size in
7099*906afcb8SAndy Fiddaman					-*|*[-:])
7100*906afcb8SAndy Fiddaman						;;
7101*906afcb8SAndy Fiddaman					*)	lcl=$name.$base.$sync.$type.$suffix
7102*906afcb8SAndy Fiddaman						if	test -f $lcl
7103*906afcb8SAndy Fiddaman						then	rmt=1
7104*906afcb8SAndy Fiddaman							get $host $dir $lcl $sync_size $sync_sum
7105*906afcb8SAndy Fiddaman						fi
7106*906afcb8SAndy Fiddaman						;;
7107*906afcb8SAndy Fiddaman					esac
7108*906afcb8SAndy Fiddaman					case $base:$base_size in
7109*906afcb8SAndy Fiddaman					-*|*[-:])
7110*906afcb8SAndy Fiddaman						;;
7111*906afcb8SAndy Fiddaman					*)	case $rmt in
7112*906afcb8SAndy Fiddaman						'')	lcl=$name.$base.$type.$suffix
7113*906afcb8SAndy Fiddaman							get $host $dir $lcl $base_size $base_sum
7114*906afcb8SAndy Fiddaman							;;
7115*906afcb8SAndy Fiddaman						esac
7116*906afcb8SAndy Fiddaman						;;
7117*906afcb8SAndy Fiddaman					esac
7118*906afcb8SAndy Fiddaman				fi
7119*906afcb8SAndy Fiddaman				case $delta:$delta_size in
7120*906afcb8SAndy Fiddaman				-*|*[-:])
7121*906afcb8SAndy Fiddaman					;;
7122*906afcb8SAndy Fiddaman				*)	lcl=$name.$delta.$base.$type.$suffix
7123*906afcb8SAndy Fiddaman					if	test -f $lcl
7124*906afcb8SAndy Fiddaman					then	sum=`$checksum < $lcl | sed -e 's,^[ 	][ 	]*,,' -e 's,[ 	].*,,'`
7125*906afcb8SAndy Fiddaman					else	sum=X
7126*906afcb8SAndy Fiddaman					fi
7127*906afcb8SAndy Fiddaman					if	test -f $lcl
7128*906afcb8SAndy Fiddaman					then	case $checksum:$delta_sum in
7129*906afcb8SAndy Fiddaman						:*|*:-)	size=`wc -c < $lcl | sed 's, ,,g'` sum=$delta_sum ;;
7130*906afcb8SAndy Fiddaman						*)	size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ 	][ 	]*,,' -e 's,[ 	].*,,'` ;;
7131*906afcb8SAndy Fiddaman						esac
7132*906afcb8SAndy Fiddaman					else	size=X sum=X
7133*906afcb8SAndy Fiddaman					fi
7134*906afcb8SAndy Fiddaman					if	test "0" != "$force" -o "$delta_size" != "$size" -o "$delta_sum" != "$sum"
7135*906afcb8SAndy Fiddaman					then	get $host $dir $lcl $delta_size $delta_sum
7136*906afcb8SAndy Fiddaman					fi
7137*906afcb8SAndy Fiddaman					;;
7138*906afcb8SAndy Fiddaman				esac
7139*906afcb8SAndy Fiddaman				;;
7140*906afcb8SAndy Fiddaman			esac
7141*906afcb8SAndy Fiddaman			;;
7142*906afcb8SAndy Fiddaman		esac
7143*906afcb8SAndy Fiddaman	done
7144*906afcb8SAndy Fiddaman	closure=
7145*906afcb8SAndy Fiddaman	for name in $source_packages $binary_packages
7146*906afcb8SAndy Fiddaman	do	case $name in
7147*906afcb8SAndy Fiddaman		-)	;;
7148*906afcb8SAndy Fiddaman		*)	case " $package_hit " in
7149*906afcb8SAndy Fiddaman			*" $name "*)
7150*906afcb8SAndy Fiddaman				case $setup in
7151*906afcb8SAndy Fiddaman				1)	case " $closure " in
7152*906afcb8SAndy Fiddaman					*" $name "*)
7153*906afcb8SAndy Fiddaman						;;
7154*906afcb8SAndy Fiddaman					*)	closure="$closure $name"
7155*906afcb8SAndy Fiddaman						;;
7156*906afcb8SAndy Fiddaman					esac
7157*906afcb8SAndy Fiddaman					;;
7158*906afcb8SAndy Fiddaman				esac
7159*906afcb8SAndy Fiddaman				;;
7160*906afcb8SAndy Fiddaman			*)	echo $command: $name: unknown package >&2
7161*906afcb8SAndy Fiddaman				;;
7162*906afcb8SAndy Fiddaman			esac
7163*906afcb8SAndy Fiddaman			;;
7164*906afcb8SAndy Fiddaman		esac
7165*906afcb8SAndy Fiddaman	done
7166*906afcb8SAndy Fiddaman	exec <&-
7167*906afcb8SAndy Fiddaman	rm -f got.tmp
7168*906afcb8SAndy Fiddaman	case $closure in
7169*906afcb8SAndy Fiddaman	?*)	echo $closure ;;
7170*906afcb8SAndy Fiddaman	esac
7171*906afcb8SAndy Fiddaman	;;
7172*906afcb8SAndy Fiddaman
7173*906afcb8SAndy Fiddamanuse)	# finalize the environment
7174*906afcb8SAndy Fiddaman
7175*906afcb8SAndy Fiddaman	x=:..
7176*906afcb8SAndy Fiddaman	for d in `( cd $PACKAGEROOT; ls src/*/Makefile src/*/Nmakefile 2>/dev/null | sed 's,/[^/]*$,,' | sort -u )`
7177*906afcb8SAndy Fiddaman	do	x=$x:$INSTALLROOT/$d
7178*906afcb8SAndy Fiddaman	done
7179*906afcb8SAndy Fiddaman	x=$x:$INSTALLROOT
7180*906afcb8SAndy Fiddaman	case $CDPATH: in
7181*906afcb8SAndy Fiddaman	$x:*)	;;
7182*906afcb8SAndy Fiddaman	*)	CDPATH=$x:$CDPATH
7183*906afcb8SAndy Fiddaman		$show CDPATH=$CDPATH
7184*906afcb8SAndy Fiddaman		$show export CDPATH
7185*906afcb8SAndy Fiddaman		export CDPATH
7186*906afcb8SAndy Fiddaman		;;
7187*906afcb8SAndy Fiddaman	esac
7188*906afcb8SAndy Fiddaman	P=$PACKAGEROOT
7189*906afcb8SAndy Fiddaman	$show P=$P
7190*906afcb8SAndy Fiddaman	$show export P
7191*906afcb8SAndy Fiddaman	export P
7192*906afcb8SAndy Fiddaman	A=$INSTALLROOT
7193*906afcb8SAndy Fiddaman	$show A=$A
7194*906afcb8SAndy Fiddaman	$show export A
7195*906afcb8SAndy Fiddaman	export A
7196*906afcb8SAndy Fiddaman	case $NPROC in
7197*906afcb8SAndy Fiddaman	'')	hostinfo cpu
7198*906afcb8SAndy Fiddaman		case $_hostinfo_ in
7199*906afcb8SAndy Fiddaman		0|1)	;;
7200*906afcb8SAndy Fiddaman		*)	NPROC=$_hostinfo_
7201*906afcb8SAndy Fiddaman			$show NPROC=$NPROC
7202*906afcb8SAndy Fiddaman			$show export NPROC
7203*906afcb8SAndy Fiddaman			export NPROC
7204*906afcb8SAndy Fiddaman			;;
7205*906afcb8SAndy Fiddaman		esac
7206*906afcb8SAndy Fiddaman		;;
7207*906afcb8SAndy Fiddaman	esac
7208*906afcb8SAndy Fiddaman	eval PACKAGE_USE=$package_use
7209*906afcb8SAndy Fiddaman	export PACKAGE_USE
7210*906afcb8SAndy Fiddaman
7211*906afcb8SAndy Fiddaman	# run the command
7212*906afcb8SAndy Fiddaman
7213*906afcb8SAndy Fiddaman	case $run in
7214*906afcb8SAndy Fiddaman	'')	case $show in
7215*906afcb8SAndy Fiddaman		':')	$exec exec $SHELL ;;
7216*906afcb8SAndy Fiddaman		esac
7217*906afcb8SAndy Fiddaman		;;
7218*906afcb8SAndy Fiddaman	*)	$exec exec $SHELL -c "$run"
7219*906afcb8SAndy Fiddaman		;;
7220*906afcb8SAndy Fiddaman	esac
7221*906afcb8SAndy Fiddaman	;;
7222*906afcb8SAndy Fiddaman
7223*906afcb8SAndy Fiddamanverify)	cd $PACKAGEROOT
7224*906afcb8SAndy Fiddaman	requirements binary $package
7225*906afcb8SAndy Fiddaman	if	executable ! $SUM
7226*906afcb8SAndy Fiddaman	then	echo "$command: $action: $SUM command required" >&2
7227*906afcb8SAndy Fiddaman		exit 1
7228*906afcb8SAndy Fiddaman	fi
7229*906afcb8SAndy Fiddaman	case $target in
7230*906afcb8SAndy Fiddaman	'')	cd arch
7231*906afcb8SAndy Fiddaman		set '' *
7232*906afcb8SAndy Fiddaman		shift
7233*906afcb8SAndy Fiddaman		target=$*
7234*906afcb8SAndy Fiddaman		cd ..
7235*906afcb8SAndy Fiddaman		;;
7236*906afcb8SAndy Fiddaman	esac
7237*906afcb8SAndy Fiddaman	code=0
7238*906afcb8SAndy Fiddaman	for a in $target
7239*906afcb8SAndy Fiddaman	do	case $package in
7240*906afcb8SAndy Fiddaman		'')	set '' arch/$a/lib/package/gen/*.sum
7241*906afcb8SAndy Fiddaman			shift
7242*906afcb8SAndy Fiddaman			if	test -f $1
7243*906afcb8SAndy Fiddaman			then	for i
7244*906afcb8SAndy Fiddaman				do	package_verify $i || code=1
7245*906afcb8SAndy Fiddaman				done
7246*906afcb8SAndy Fiddaman			else	echo "$command: warning: $a: no binary packages" >&2
7247*906afcb8SAndy Fiddaman			fi
7248*906afcb8SAndy Fiddaman			;;
7249*906afcb8SAndy Fiddaman		*)	for i in $package
7250*906afcb8SAndy Fiddaman			do	if	test -f arch/$a/lib/package/gen/$i.sum
7251*906afcb8SAndy Fiddaman				then	package_verify arch/$a/lib/package/gen/$i.sum || code=1
7252*906afcb8SAndy Fiddaman				else	echo "$command: warning: $a: no binary package for $i" >&2
7253*906afcb8SAndy Fiddaman				fi
7254*906afcb8SAndy Fiddaman			done
7255*906afcb8SAndy Fiddaman			;;
7256*906afcb8SAndy Fiddaman		esac
7257*906afcb8SAndy Fiddaman	done
7258*906afcb8SAndy Fiddaman	exit $code
7259*906afcb8SAndy Fiddaman	;;
7260*906afcb8SAndy Fiddaman
7261*906afcb8SAndy Fiddamanwrite)	set '' $target
7262*906afcb8SAndy Fiddaman	shift
7263*906afcb8SAndy Fiddaman	action=
7264*906afcb8SAndy Fiddaman	list=
7265*906afcb8SAndy Fiddaman	qualifier=
7266*906afcb8SAndy Fiddaman	while	:
7267*906afcb8SAndy Fiddaman	do	case $1 in
7268*906afcb8SAndy Fiddaman		base|closure|delta|exp|lcl|pkg|rpm|tgz)
7269*906afcb8SAndy Fiddaman			qualifier="$qualifier $1"
7270*906afcb8SAndy Fiddaman			;;
7271*906afcb8SAndy Fiddaman		binary)	action=$1
7272*906afcb8SAndy Fiddaman			type=$HOSTTYPE
7273*906afcb8SAndy Fiddaman			eval list=$PACKAGESRC/tgz/$admin_list
7274*906afcb8SAndy Fiddaman			;;
7275*906afcb8SAndy Fiddaman		cyg)	qualifier="$qualifier $1"
7276*906afcb8SAndy Fiddaman			assign="$assign closure=1"
7277*906afcb8SAndy Fiddaman			only=1
7278*906afcb8SAndy Fiddaman			;;
7279*906afcb8SAndy Fiddaman		runtime|source)
7280*906afcb8SAndy Fiddaman			action=$1
7281*906afcb8SAndy Fiddaman			;;
7282*906afcb8SAndy Fiddaman		tst)	qualifier="$qualifier tgz"
7283*906afcb8SAndy Fiddaman			assign="$assign copyright=0 'PACKAGEDIR=\$(PACKAGESRC)/tst'"
7284*906afcb8SAndy Fiddaman			;;
7285*906afcb8SAndy Fiddaman		nocopyright)
7286*906afcb8SAndy Fiddaman			assign="$assign copyright=0"
7287*906afcb8SAndy Fiddaman			;;
7288*906afcb8SAndy Fiddaman		*)	break
7289*906afcb8SAndy Fiddaman			;;
7290*906afcb8SAndy Fiddaman		esac
7291*906afcb8SAndy Fiddaman		shift
7292*906afcb8SAndy Fiddaman	done
7293*906afcb8SAndy Fiddaman	case $action in
7294*906afcb8SAndy Fiddaman	'')	echo "$command: binary or source operand expected" >&2
7295*906afcb8SAndy Fiddaman		exit 1
7296*906afcb8SAndy Fiddaman		;;
7297*906afcb8SAndy Fiddaman	esac
7298*906afcb8SAndy Fiddaman	set '' "$@" $package
7299*906afcb8SAndy Fiddaman	shift
7300*906afcb8SAndy Fiddaman	case $only in
7301*906afcb8SAndy Fiddaman	0)	set '' `order "$@"`
7302*906afcb8SAndy Fiddaman		shift
7303*906afcb8SAndy Fiddaman		;;
7304*906afcb8SAndy Fiddaman	esac
7305*906afcb8SAndy Fiddaman	case $# in
7306*906afcb8SAndy Fiddaman	0)	echo "$command: at least one package name expected" >&2
7307*906afcb8SAndy Fiddaman		exit 1
7308*906afcb8SAndy Fiddaman		;;
7309*906afcb8SAndy Fiddaman	esac
7310*906afcb8SAndy Fiddaman	if	nonmake $MAKE
7311*906afcb8SAndy Fiddaman	then	echo "$command: must have $MAKE to generate archives" >&2
7312*906afcb8SAndy Fiddaman		exit 1
7313*906afcb8SAndy Fiddaman	fi
7314*906afcb8SAndy Fiddaman
7315*906afcb8SAndy Fiddaman	# all work under $PACKAGEBIN
7316*906afcb8SAndy Fiddaman
7317*906afcb8SAndy Fiddaman	$make cd $PACKAGEBIN
7318*906afcb8SAndy Fiddaman	case $list in
7319*906afcb8SAndy Fiddaman	?*)	$exec rm -f $list ;;
7320*906afcb8SAndy Fiddaman	esac
7321*906afcb8SAndy Fiddaman
7322*906afcb8SAndy Fiddaman	# go for it
7323*906afcb8SAndy Fiddaman
7324*906afcb8SAndy Fiddaman	for package
7325*906afcb8SAndy Fiddaman	do	if	view - all $package.pkg || view - all lib/package/$package.pkg
7326*906afcb8SAndy Fiddaman		then	eval capture \$MAKE \$makeflags -X ignore \$noexec -f \$package.pkg \$qualifier \$action $assign
7327*906afcb8SAndy Fiddaman		else	echo "$command: $package: not a package" >&2
7328*906afcb8SAndy Fiddaman		fi
7329*906afcb8SAndy Fiddaman	done
7330*906afcb8SAndy Fiddaman	;;
7331*906afcb8SAndy Fiddaman
7332*906afcb8SAndy FiddamanTEST)	set '' $target $package
7333*906afcb8SAndy Fiddaman	shift
7334*906afcb8SAndy Fiddaman	case $1 in
7335*906afcb8SAndy Fiddaman	binary|source)
7336*906afcb8SAndy Fiddaman		action=$1
7337*906afcb8SAndy Fiddaman		shift
7338*906afcb8SAndy Fiddaman		;;
7339*906afcb8SAndy Fiddaman	esac
7340*906afcb8SAndy Fiddaman	order "$@"
7341*906afcb8SAndy Fiddaman	;;
7342*906afcb8SAndy Fiddaman
7343*906afcb8SAndy Fiddaman*)	echo "$command: $action: internal error" >&2
7344*906afcb8SAndy Fiddaman	exit 1
7345*906afcb8SAndy Fiddaman	;;
7346*906afcb8SAndy Fiddaman
7347*906afcb8SAndy Fiddamanesac
7348