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