mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-13 11:42:21 +00:00
Not cleaning up the FIFO broke 'grep -r' in the arch directory, making it hang forever. So we need a better way of cleaning it up. bin/package, src/cmd/INIT/package.sh: - Unlink the FIFO early after sleeping a second in the background. This works because the named directory entry is only needed to establish the pipe, not to keep it going.
7381 lines
185 KiB
Text
Executable file
7381 lines
185 KiB
Text
Executable file
USAGE_LICENSE="[-author?Glenn Fowler <gsf@research.att.com>][-copyright?Copyright (c) 1994-2012 AT&T Intellectual Property][-license?http://www.eclipse.org/org/documents/epl-v10.html]"
|
||
########################################################################
|
||
# #
|
||
# This software is part of the ast package #
|
||
# Copyright (c) 1994-2012 AT&T Intellectual Property #
|
||
# and is licensed under the #
|
||
# Eclipse Public License, Version 1.0 #
|
||
# by AT&T Intellectual Property #
|
||
# #
|
||
# A copy of the License is available at #
|
||
# http://www.eclipse.org/org/documents/epl-v10.html #
|
||
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
|
||
# #
|
||
# Information and Software Systems Research #
|
||
# AT&T Research #
|
||
# Florham Park NJ #
|
||
# #
|
||
# Glenn Fowler <gsf@research.att.com> #
|
||
# #
|
||
########################################################################
|
||
### this script contains archaic constructs that work with all sh variants ###
|
||
# package - source and binary package control
|
||
# Glenn Fowler <gsf@research.att.com>
|
||
|
||
command=package
|
||
|
||
case $-:$BASH_VERSION in
|
||
*x*:[0123456789]*) : bash set -x is broken :; set +ex ;;
|
||
esac
|
||
|
||
# ksh checks -- ksh between 2007-11-05 and 2011-11-11 conflict with new -lcmd -- wea culpa
|
||
checksh()
|
||
{
|
||
egrep 'Version.*(88|1993)' $1 >/dev/null 2>&1 ||
|
||
$1 -c '(( .sh.version >= 20111111 ))' >/dev/null 2>&1
|
||
}
|
||
|
||
case $_AST_BIN_PACKAGE_:$SHELL:$0 in
|
||
1:*:*|*:/bin/sh:*)
|
||
;;
|
||
*:*/*:*/*)
|
||
_AST_BIN_PACKAGE_=1 # prevent non-interactive sh .rc referencing bin/package recursion #
|
||
export _AST_BIN_PACKAGE_
|
||
if checksh $SHELL
|
||
then : no -lcmd conflict :
|
||
else case " $* " in
|
||
*" debug "*|*" DEBUG "*|*" show "*)
|
||
echo $command: $SHELL: warning: possible -lcmd conflict -- falling back to /bin/sh >&2
|
||
;;
|
||
esac
|
||
SHELL=/bin/sh
|
||
export SHELL
|
||
exec $SHELL "$0" "$@"
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
LC_ALL=C
|
||
export LC_ALL
|
||
|
||
src="cmd contrib etc lib"
|
||
use="/usr/common /exp /usr/local /usr/add-on /usr/addon /usr/tools /usr /opt"
|
||
usr="/home"
|
||
lib="" # nee /usr/local/lib /usr/local/shlib
|
||
ccs="/usr/kvm /usr/ccs/bin"
|
||
org="gnu GNU"
|
||
makefiles="Mamfile Nmakefile nmakefile Makefile makefile"
|
||
env="HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH"
|
||
checksum=md5sum
|
||
checksum_commands="$checksum md5"
|
||
checksum_empty="d41d8cd98f00b204e9800998ecf8427e"
|
||
|
||
package_use='=$HOSTTYPE=$PACKAGEROOT=$INSTALLROOT=$EXECROOT=$CC='
|
||
|
||
PACKAGE_admin_tail_timeout=${PACKAGE_admin_tail_timeout:-"1m"}
|
||
|
||
CROSS=0
|
||
|
||
admin_db=admin.db
|
||
admin_env=admin.env
|
||
admin_ditto="ditto --checksum --delete --verbose"
|
||
admin_ditto_update=--update
|
||
admin_ditto_skip="OFFICIAL|core|old|*.core|*.tmp|.nfs*"
|
||
admin_list='PACKAGE.$type.lst'
|
||
admin_ping="ping -c 1 -w 5"
|
||
|
||
default_url=default.url
|
||
MAKESKIP=${MAKESKIP:-"*[-.]*"}
|
||
RATZ=ratz
|
||
SED=
|
||
TAR=tar
|
||
TARFLAGS=xv
|
||
TARPROBE=B
|
||
TR=
|
||
|
||
all_types='*.*|sun4' # all but sun4 match *.*
|
||
|
||
case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
|
||
0123) USAGE=$'
|
||
[-?
|
||
@(#)$Id: package (AT&T Research) 2012-06-28 $
|
||
]'$USAGE_LICENSE$'
|
||
[+NAME?package - source and binary package control]
|
||
[+DESCRIPTION?The \bpackage\b command controls source and binary
|
||
packages. It is a \bsh\b(1) script coded for maximal portability. All
|
||
package files are in the \b$PACKAGEROOT\b directory tree.
|
||
\b$PACKAGEROOT\b must at minimum contain a \bbin/package\b command or a
|
||
\blib/package\b directory. Binary package files are in the
|
||
\b$INSTALLROOT\b (\b$PACKAGEROOT/arch/\b\ahosttype\a) tree, where
|
||
\ahosttpe\a=`\bpackage\b`. All \aactions\a but \bhost\b and \buse\b
|
||
require the current directory to be under \b$PACKAGEROOT\b. See
|
||
\bDETAILS\b for more information.]
|
||
[+?Note that no environment variables need be set by the user;
|
||
\bpackage\b determines the environment based on the current working
|
||
directory. The \buse\b action starts a \bsh\b(1) with the environment
|
||
initialized. \bCC\b, \bCCFLAGS\b, \bHOSTTYPE\b and \bSHELL\b may be set
|
||
by explicit command argument assignments to override the defaults.]
|
||
[+?Packages are composed of components. Each component is built and
|
||
installed by an \bast\b \bnmake\b(1) makefile. Each package is also
|
||
described by an \bnmake\b makefile that lists its components and
|
||
provides a content description. The package makefile and component
|
||
makefiles provide all the information required to read, write, build
|
||
and install packages.]
|
||
[+?Package recipients only need \bsh\b(1) and \bcc\b(1) to build and
|
||
install source packages, and \bsh\b to install binary packages.
|
||
\bnmake\b and \bksh93\b are required to write new packages. An
|
||
\b$INSTALLROOT/bin/cc\b script may be supplied for some architectures.
|
||
This script supplies a reasonable set of default options for compilers
|
||
that accept multiple dialects or generate multiple object/executable
|
||
formats.]
|
||
[+?The command arguments are composed of a sequence of words: zero or
|
||
more \aqualifiers\a, one \aaction\a, and zero or more action-specific
|
||
\aarguments\a, and zero or more \aname=value\a definitions. \apackage\a
|
||
names a particular package. The naming scheme is a \b-\b separated
|
||
hierarchy; the leftmost parts describe ownership, e.g.,
|
||
\bgnu-fileutils\b, \bast-base\b. If no packages are specified then all
|
||
packages are operated on. \boptget\b(3) documentation options are also
|
||
supported. The default with no arguments is \bhost type\b.]
|
||
[+?The qualifiers are:]
|
||
{
|
||
[+authorize \aname\a?Remote authorization user name or license
|
||
acceptance phrase.]
|
||
[+debug|environment?Show environment and actions but do not
|
||
execute.]
|
||
[+flat?Collapse \b$INSTALLROOT\b { bin fun include lib } onto
|
||
\b$PACKAGEROOT\b.]
|
||
[+force?Force the action to override saved state.]
|
||
[+never?Run make -N and show other actions.]
|
||
[+only?Only operate on the specified packages.]
|
||
[+password \apassword\a?Remote authorization or license
|
||
acceptance password.]
|
||
[+quiet?Do not list captured action output.]
|
||
[+show?Run make -n and show other actions.]
|
||
[+verbose?Provide detailed action output.]
|
||
[+DEBUG?Trace the package script actions in detail.]
|
||
}
|
||
[+?The actions are:]
|
||
{
|
||
[+admin\b [\ball\b]] [\bdb\b \afile\a]] [\bon\b \apattern\a]][\aaction\a ...]]?Apply
|
||
\aaction\a ... to the hosts listed in \afile\a. If \afile\a is
|
||
omitted then \badmin.db\b is assumed. The caller must have
|
||
\brcp\b(1) and \brsh\b(1) or \bscp\b(1) and \bssh\b(1) access
|
||
to the hosts. Output for \aaction\a is saved per-host in the
|
||
file \aaction\a\b.log/\b\ahost\a. Logs can be viewed by
|
||
\bpackage admin\b [\bon\b \ahost\a]] \bresults\b [\aaction\a]].
|
||
By default only local PACKAGEROOT hosts are selected from
|
||
\afile\a; \ball\b selects all hosts. \bon\b \apattern\a selects
|
||
only hosts matching the \b|\b separated \apattern\a. \afile\a
|
||
contains four types of lines. Blank lines and lines beginning
|
||
with \b#\b are ignored. Lines starting with \aid\a=\avalue\a
|
||
are variable assignments. Set admin_ping to local conventions
|
||
if \"'$admin_ping$'\" fails. If a package list is not specified
|
||
on the command line the \aaction\a applies to all packages; a
|
||
variable assignment \bpackage\b=\"\alist\a\" applies \aaction\a
|
||
to the packages in \alist\a for subsequent hosts in \afile\a.
|
||
The remaining line type is a host description consisting of 6
|
||
tab separated fields. The first 3 are mandatory; the remaining
|
||
3 are updated by the \badmin\b action. \afile\a is saved in
|
||
\afile\a\b.old\b before update. The fields are:]
|
||
{
|
||
[+hosttype?The host type as reported by
|
||
\"\bpackage\b\".]
|
||
[+[user@]]host?The host name and optionally user name
|
||
for \brcp\b(1) and \brsh\b(1) access.]
|
||
[+[remote::[[master]]::]]]]PACKAGEROOT?The absolute remote package
|
||
root directory and optionally the remote protocol (rsh
|
||
or ssh) if the directory is on a different server than
|
||
the master package root directory. If
|
||
\blib/package/admin/'$admin_env$'\b exists under this
|
||
directory then it is sourced by \bsh\b(1) before
|
||
\aaction\a is done. If this field begins with \b-\b
|
||
then the host is ignored. If this field contains \b:\b
|
||
then \bditto\b(1) is used to sync the remote \bsrc\b
|
||
directory hierarchy to the local one. If [\amaster\a]]:
|
||
is specified then the sync is deferred to the \amaster\a
|
||
host. If \amaster\a is omitted (two :) then the sync is
|
||
disabled. These directories must exist on the remote side:
|
||
\blib/package\b, \bsrc/cmd\b, \bsrc/lib\b.]
|
||
[+date?\aYYMMDD\a of the last action.]
|
||
[+time?Elapsed wall time for the last action.]
|
||
[+M T W?The \badmin\b action \bmake\b, \btest\b and
|
||
\bwrite\b action error counts. A non-numeric value in
|
||
any of these fields disables the corresponding action.]
|
||
[+owner?The owner contact information.]
|
||
[+attributes?\aname=value\a attributes. Should at least contain
|
||
\bcc\b=\acompiler-version\a.]
|
||
}
|
||
[+clean | clobber?Delete the \barch/\b\aHOSTTYPE\a hierarchy; this
|
||
deletes all generated files and directories for \aHOSTTYPE\a.
|
||
The hierarchy can be rebuilt by \bpackage make\b.]
|
||
[+contents\b [ \apackage\a ... ]]?List description and
|
||
components for \apackage\a on the standard output.]
|
||
[+copyright\b [ \apackage\a ... ]]?List the general copyright
|
||
notice(s) for \apackage\a on the standard output. Note that
|
||
individual components in \apackage\a may contain additional or
|
||
replacement notices.]
|
||
[+export\b [ \avariable\a ...]]?List \aname\a=\avalue\a for
|
||
\avariable\a, one per line. If the \bonly\b attribute is
|
||
specified then only the variable values are listed. If no
|
||
variables are specified then \b'$env$'\b are assumed.]
|
||
[+help\b [ \aaction\a ]]?Display help text on the standard
|
||
error (standard output for \aaction\a).]
|
||
[+host\b [ \aattribute\a ... ]]?List
|
||
architecture/implementation dependent host information on the
|
||
standard output. \btype\b is listed if no attributes are
|
||
specified. Information is listed on a single line in
|
||
\aattribute\a order. The attributes are:]
|
||
{
|
||
[+canon \aname\a?An external host type name to be
|
||
converted to \bpackage\b syntax.]
|
||
[+cpu?The number of cpus; 1 if the host is not a
|
||
multiprocessor.]
|
||
[+name?The host name.]
|
||
[+rating?The cpu rating in pseudo mips; the value is
|
||
useful useful only in comparisons with rating values of
|
||
other hosts. Other than a vax rating (mercifully) fixed
|
||
at 1, ratings can vary wildly but consistently from
|
||
vendor mips ratings. \bcc\b(1) may be required to
|
||
determine the rating.]
|
||
[+type?The host type, usually in the form
|
||
\avendor\a.\aarchitecture\a, with an optional trailing
|
||
-\aversion\a. The main theme is that type names within
|
||
a family of architectures are named in a similar,
|
||
predictable style. OS point release information is
|
||
avoided as much as possible, but vendor resistance to
|
||
release incompatibilities has for the most part been
|
||
futile.]
|
||
}
|
||
[+html\b [ \aaction\a ]]?Display html help text on the standard
|
||
error (standard output for \aaction\a).]
|
||
[+install\b [ \aarchitecture\a ... ]] \adirectory\a [ \apackage\a ... ]]?Copy
|
||
the package binary hierarchy to \adirectory\a. If
|
||
\aarchitecture\a is omitted then all architectures are
|
||
installed. If \bflat\b is specified then exactly one
|
||
\aarchitecture\a must be specified; this architecture will be
|
||
installed in \adirectory\a without the \barch/\b\aHOSTTYPE\a
|
||
directory prefixes. Otherwise each architecture will be
|
||
installed in a separate \barch/\b\aHOSTTYPE\a subdirectory of
|
||
\adirectory\a. The \aarchitecture\a \b-\b names the current
|
||
architecture. \adirectory\a must be an existing directory. If
|
||
\apackage\a is omitted then all binary packages are installed.
|
||
This action requires \bnmake\b.]
|
||
[+license\b [ \apackage\a ... ]]?List the source license(s) for
|
||
\apackage\a on the standard output. Note that individual
|
||
components in \apackage\a may contain additional or replacement
|
||
licenses.]
|
||
[+list\b [ \apackage\a ... ]]?List the name, version and
|
||
prerequisites for \apackage\a on the standard output.]
|
||
[+make\b [ \apackage\a ]] [ \aoption\a ... ]] [ \atarget\a ... ]]?Build
|
||
and install. The default \atarget\a is \binstall\b, which makes
|
||
and installs \apackage\a. If the standard output is a terminal
|
||
then the output is also captured in
|
||
\b$INSTALLROOT/lib/package/gen/make.out\b. The build is done in
|
||
the \b$INSTALLROOT\b directory tree viewpathed on top of the
|
||
\b$PACKAGEROOT\b directory tree. If \bflat\b is specified then
|
||
the \b$INSTALLROOT\b { bin fun include lib } directories are
|
||
linked to the same directories in the package root. Only one
|
||
architecture may be \bflat\b. Leaf directory names matching the
|
||
\b|\b-separated shell pattern \b$MAKESKIP\b are ignored. The
|
||
\bview\b action is done before making. \aoption\a operands are
|
||
passed to the underlying make command.]
|
||
[+read\b [ \apackage\a ... | \aarchive\a ... ]]?Read the named
|
||
package or archive(s). Must be run from the package root
|
||
directory. Archives are searched for in \b.\b and
|
||
\blib/package/tgz\b. Each package archive is read only once.
|
||
The file \blib/package/tgz/\b\apackage\a[.\atype\a]]\b.tim\b
|
||
tracks the read time. See the \bwrite\b action for archive
|
||
naming conventions. Text file archive member are assumed to be
|
||
ASCII or UTF-8 encoded.]
|
||
[+regress?\bdiff\b(1) the current and previous \bpackage test\b
|
||
results.]
|
||
[+release\b [ [\aCC\a]]\aYY-MM-DD\a [ [\acc\a]]\ayy-mm-dd\a ]]]] [ \apackage\a ]]?Display
|
||
recent changes for the date range [\aCC\a]]\aYY-MM-DD\a (up to
|
||
[\acc\a]]\ayy-mm-dd\a.), where \b-\b means lowest (or highest.)
|
||
If no dates are specified then changes for the last 4 months
|
||
are listed. \apackage\a may be a package or component name.]
|
||
[+remove\b [ \apackage\a ]]?Remove files installed for
|
||
\apackage\a.]
|
||
[+results\b [ \bfailed\b ]] [ \bpath\b ]] [ \bold\b ]] [\bmake\b | \btest\b | \bwrite\b ]]?List
|
||
results and interesting messages captured by the most recent
|
||
\bmake\b (default), \btest\b or \bwrite\b action. \bold\b
|
||
specifies the previous results, if any (current and previous
|
||
results are retained.) \b$HOME/.pkgresults\b, if it exists,
|
||
must contain an \begrep\b(1) expression of result lines to be
|
||
ignored. \bfailed\b lists failures only and \bpath\b lists the
|
||
results file path name only.]
|
||
[+setup\b [ beta ]] [ binary ]] [ source ]] [ \aarchitecture\a ... ]] [ \aurl\a ]] [ \apackage\a ... ]]?This
|
||
action initializes the current directory as a package root, runs the
|
||
\bupdate\b action to download new or out of date packages, and runs the
|
||
\bread\b action on those packages. If \bflat\b is specified then the
|
||
\b$INSTALLROOT\b { bin fun include lib } directories are linked to the
|
||
same directories in the package root. Only one architecture may be
|
||
\bflat\b. See the \bupdate\b and \bread\b action descriptions for
|
||
argument details.]
|
||
[+test\b [ \apackage\a ]]?Run the regression tests for
|
||
\apackage\a. If the standard output is a terminal then the
|
||
output is also captured in
|
||
\b$INSTALLROOT/lib/package/gen/test.out\b. In general a package
|
||
must be made before it can be tested. Components tested with
|
||
the \bregress\b(1) command require \bksh93\b. If \bonly\b is
|
||
also specified then only the listed package components are
|
||
tested, otherwise the closure of the components is tested.]
|
||
[+update\b [ beta ]] [ binary ]] [ source ]] [\aarchitecture\a ... ]] [ \aurl\a ]] [ \apackage\a ... ]]?Download
|
||
the latest release of the selected and required packages from \aurl\a
|
||
(e.g., \bhttp://www.research.att.com/sw/download\b) into the directory
|
||
\b$PACKAGEROOT/lib/package/tgz\b. \bbeta\b accesses beta packages;
|
||
download these at your own risk. If \aarchitecture\a is omitted then
|
||
only architectures already present in the \btgz\b directory will be
|
||
downloaded. If \aarchitecture\a is \b-\b then all posted architectures
|
||
will be downloaded. If \aurl\a matches \b*.url\b then it is interpreted
|
||
as a file containing shell variable assignments for \burl\b,
|
||
\bauthorize\b and \bpassword\b. If \aurl\a is omitted then the
|
||
definitions for \burl\b, \bauthorize\b and \bpassword\b in
|
||
\b$PACKAGEROOT/lib/package/tgz/default.url\b, if it exists, are used.
|
||
If \b$PACKAGEROOT/lib/package/tgz/default.url\b does not exist then it
|
||
is initialized with the current \burl\b, \bauthorize\b and \bpassword\b
|
||
values and read permission for the current user only. If \apackage\a is
|
||
omitted then only packages already present in the tgz directory will be
|
||
downloaded. If \apackage\a is \b-\b then all posted packages will be
|
||
downloaded. If \bsource\b and \bbinary\b are omitted then both source
|
||
and binary packages will be downloaded. If \bonly\b is specified then
|
||
only the named packages are updated; otherwise the closure of required
|
||
packages is updated. This action requires \bwget\b(1), \blynx\b(1),
|
||
\bcurl\b(1) or a shell that supports io to
|
||
\b/dev/tcp/\b\ahost\a/\aport\a.]
|
||
[+use\b [ \auid\a | \apackage\a | . [ 32 | 64 ]] | 32 | 64 | - ]] [ command ...]]?Run
|
||
\acommand\a, or an interactive shell if \acommand\a is omitted,
|
||
with the environment initialized for using the package (can you
|
||
say \ashared\a \alibrary\a or \adll\a without cussing?) If
|
||
\auid\a or \apackage\a or \a.\a is specified then it is used
|
||
to determine a \b$PACKAGEROOT\b, possibly different from
|
||
the current directory. For example, to try out bozo`s package:
|
||
\bpackage use bozo\b. The \buse\b action may be run from any
|
||
directory. If the file \b$INSTALLROOT/lib/package/profile\b is
|
||
readable then it is sourced to initialize the environment. 32 or 64
|
||
implies \b$PACKAGEROOT\b of . and specifies the target architecture
|
||
word size (which may be silently ignored.)]
|
||
[+verify\b [ \apackage\a ]]?Verify installed binary files
|
||
against the checksum files in
|
||
\b$INSTALLROOT/lib/\b\apackage\a\b/gen/*.sum\b. The checksum
|
||
files contain mode, user and group information. If the checksum
|
||
matches for a given file then the mode, user and group are
|
||
changed as necessary to match the checksum entry. A warning is
|
||
printed on the standard error for each mismatch. Requires the
|
||
\bast\b package \bcksum\b(1) command.]
|
||
[+view\b?Initialize the architecture specific viewpath
|
||
hierarchy. If \bflat\b is specified then the \b$INSTALLROOT\b {
|
||
bin fun include lib } directories are linked to the same
|
||
directories in the package root. Only one architecture may be
|
||
\bflat\b. The \bmake\b action implicitly calls this action.]
|
||
[+write\b [\aformat\a]] \atype\a ... [ \apackage\a ...]]?Write
|
||
a package archive for \apackage\a. All work is done in the
|
||
\b$PACKAGEROOT/lib/package\b directory. \aformat\a-specific
|
||
files are placed in the \aformat\a subdirectory. A
|
||
\apackage\a[.\atype\a]]\b.tim\b file in this directory tracks
|
||
the write time and prevents a package from being read in the
|
||
same root it was written. If more than one file is generated
|
||
for a particular \aformat\a then those files are placed in the
|
||
\aformat\a/\apackage\a subdirectory. File names in the
|
||
\aformat\a subdirectory will contain the package name, a
|
||
\ayyyy-mm-dd\a date, and for binary packages, \aHOSTTYPE\a. If
|
||
\apackage\a is omitted then an ordered list of previously
|
||
written packages is generated. If \bonly\b is specified then
|
||
only the named packages will be written; otherwise prerequisite
|
||
packages are written first. Package components must be listed
|
||
in \apackage\a\b.pkg\b. \aformat\a may be one of:]
|
||
{
|
||
[+cyg?Generate a \bcygwin\b package.]
|
||
[+exp?Generate an \bexptools\b maintainer source
|
||
archive and \aNPD\a file, suitable for \bexpmake\b(1)]
|
||
[+lcl?Generate a package archive suitable for
|
||
restoration into the local source tree (i.e., the
|
||
source is not annotated for licencing.)]
|
||
[+pkg?Generate a \bpkgmk\b(1) package suitable for
|
||
\bpkgadd\b(1).]
|
||
[+rpm?Generate an \brpm\b(1) package.]
|
||
[+tgz?Generate a \bgzip\b(1) \btar\b(1) package
|
||
archive. This is the default.]
|
||
[+tst?Generate a \btgz\b format package archive in the
|
||
\btst\b subdirectory. Version state files are not updated.]
|
||
}
|
||
[+?\btype\b specifies the package type which must be one of
|
||
\bsource\b, \bbinary\b or \bruntime\b. A source package
|
||
contains the source needed to build the corresponding binary
|
||
package. A binary package includes the libraries and headers
|
||
needed for compiling and linking against the public interfaces.
|
||
A runtime package contains the commands and required dynamic
|
||
libraries.]
|
||
[+?A package may be either a \bbase\b or \bdelta\b. A base
|
||
package contains a complete copy of all components. A delta
|
||
package contains only changes from a previous base package.
|
||
Delta recipients must have the \bast\b \bpax\b(1) command (in
|
||
the \bast-base\b package.) If neither \bbase\b nor \bdelta\b is
|
||
specified, then the current base is overwritten if there are no
|
||
deltas referring to the current base. Only the \btgz\b and
|
||
\blcl\b formats support \bdelta\b. If \bbase\b is specified
|
||
then a new base and two delta archives are generated: one delta
|
||
to generate the new base from the old, and one delta to
|
||
generate the old base from the new; the old base is then
|
||
removed. If \bdelta\b is specified then a new delta referring
|
||
to the current base is written.]
|
||
[+?\apackage\a\b.pkg\b may reference other packages. By default
|
||
a pointer to those packages is written. The recipient \bpackage
|
||
read\b will then check that all required packages have been
|
||
downloaded. If \bclosure\b is specified then the components for
|
||
all package references are included in the generated package.
|
||
This may be useful for \blcl\b and versioning.]
|
||
[+?All formats but \blcl\b annotate each \bsource\b file (not
|
||
already annotated) with a license comment as it is written to
|
||
the package archive using \bproto\b(1).]
|
||
}
|
||
[+DETAILS?The package directory hierarchy is rooted at
|
||
\b$PACKAGEROOT\b. All source and binaries reside under this tree. A two
|
||
level viewpath is used to separate source and binaries. The top view is
|
||
architecture specific, the bottom view is shared source. All building
|
||
is done in the architecture specific view; no source view files are
|
||
intentionally changed. This means that many different binary
|
||
architectures can be made from a single copy of the source.]
|
||
[+?Independent \b$PACKAGEROOT\b hierarchies can be combined by
|
||
appending \b$INSTALLROOT:$PACKAGEROOT\b pairs to \bVPATH\b. The
|
||
\bVPATH\b viewing order is from left to right. Each \b$PACKAGEROOT\b
|
||
must have a \b$PACKAGEROOT/lib/package\b directory.]
|
||
[+?Each package contains one or more components. Component source for
|
||
the \afoo\a command is in \b$PACKAGEROOT/src/cmd/\b\afoo\a, and source
|
||
for the \abar\a library is in \b$PACKAGEROOT/src/lib/lib\b\abar\a. This
|
||
naming is for convenience only; the underlying makefiles handle
|
||
inter-component build order. The \bINIT\b component, which contains
|
||
generic package support files, is always made first, then the
|
||
components named \bINIT\b*, then the component order determined by the
|
||
closure of component makefile dependencies.]
|
||
[+?\b$PACKAGEROOT/lib/package\b contains package specific files. The
|
||
package naming convention is \agroup\a[-\apart\a]]; e.g., \bast-base\b,
|
||
\bgnu-fileutils\b. The *\b.pkg\b files are ast \bnmake\b(1) makefiles
|
||
that contain the package name, package components, references to other
|
||
packages, and a short package description. *\b.pkg\b files are used by
|
||
\bpackage write\b to generate new source and binary packages.]
|
||
[+?\b$PACKAGEROOT/lib/package/\b\agroup\a\b.lic\b files contain license
|
||
information that is used by the \bast\b \bproto\b(1) and \bnmake\b(1)
|
||
commands to generate source and binary license strings. \agroup\a is
|
||
determined by the first \b:PACKAGE:\b operator name listed in the
|
||
component \bnmake\b makefile. \agroup\a\b.lic\b files are part of the
|
||
licensing documentation. Each component may have its own \bLICENSE\b file
|
||
that overrides the \agroup\a\b.lic\b file. The full text of the licenses
|
||
are in the \b$PACKAGEROOT/lib/package/LICENSES\b and
|
||
\b$INSTALLROOT/lib/package/LICENSES\b directories.]
|
||
[+?A few files are generated in \b$PACKAGEROOT/lib/package/gen\b and
|
||
\b$INSTALLROOT/lib/package/gen\b. \apackage\a\b.ver\b contains one line
|
||
consisting of \apackage version release\a \b1\b for the most recent
|
||
instance of \apackage\a read into \b$PACKAGEROOT\b, where \apackage\a
|
||
is the package name, \aversion\a is the \aYYYY-MM-DD\a base version,
|
||
and \arelease\a is \aversion\a for the base release or \aYYYY-MM-DD\a
|
||
for delta releases. \apackage\a\b.req\b contains *\b.ver\b entries for
|
||
the packages required by \apackage\a, except that the fourth field is
|
||
\b0\b instead of \b1\b. All packages except \bINIT\b require the
|
||
\bINIT\b package. A simple sort of \apackage\a\b.pkg\b and *\b.ver\b
|
||
determines if the required package have been read in. Finally,
|
||
\apackage\a\b.README\b and \apackage\a\a.html\b contain the README text
|
||
for \apackage\a and all its components. Included are all changes added
|
||
to the component \bRELEASE\b, \bCHANGES\b or \bChangeLog\b files dated
|
||
since the two most recent base releases. Component \bRELEASE\b files
|
||
contain tag lines of the form [\aYY\a]]\aYY-MM-DD\a [ \atext\a ]] (or
|
||
\bdate\b(1) format dates) followed by README text, in reverse
|
||
chronological order (newer entries at the top of the file.) \bpackage
|
||
release\b lists this information, and \bpackage contents ...\b lists
|
||
the descriptions and components.]
|
||
[+?\b$HOSTYPE\b names the current binary architecture and is determined
|
||
by the output of \bpackage\b (no arguments.) The \b$HOSTTYPE\b naming
|
||
scheme is used to separate incompatible executable and object formats.
|
||
All architecture specific binaries are placed under \b$INSTALLROOT\b
|
||
(\b$PACKAGEROOT/arch/$HOSTTYPE\b.) There are a few places that match
|
||
against \b$HOSTTYPE\b when making binaries; these are limited to
|
||
makefile compiler workarounds, e.g., if \b$HOSTTYPE\b matches \bhp.*\b
|
||
then turn off the optimizer for these objects. All other architecture
|
||
dependent logic is handled either by the \bast\b \biffe\b(1) command or
|
||
by component specific configure scripts. Explicit \b$HOSTYPE\b
|
||
values matching *,*cc*[,-*,...]] optionally set the default \bCC\b and
|
||
\bCCFLAGS\b. This is handy for build farms that support different
|
||
compilers on the same architecture.]
|
||
[+?Each component contains an \bast\b \bnmake\b(1) makefile (either
|
||
\bNmakefile\b or \bMakefile\b) and a \bMAM\b (make abstract machine)
|
||
file (\bMamfile\b.) A Mamfile contains a portable makefile description
|
||
that is used by \bmamake\b(1) to simulate \bnmake\b. Currently there is
|
||
no support for old-make/gnu-make makefiles; if the binaries are just
|
||
being built then \bmamake\b will suffice; if source or makefile
|
||
modifications are anticipated then \bnmake\b (in the \bast-base\b
|
||
package) should be used. Mamfiles are automatically generated by
|
||
\bpackage write\b.]
|
||
[+?Most component C source is prototyped. If \b$CC\b (default value
|
||
\bcc\b) is not a prototyping C compiler then \bpackage make\b runs
|
||
\bproto\b(1) on portions of the \b$PACKAGEROOT/src\b tree and places
|
||
the converted output files in the \b$PACKAGEROOT/proto/src\b tree.
|
||
Converted files are then viewpathed over the original source.
|
||
\bproto\b(1) converts an ANSI C subset to code that is compatible with
|
||
K&R, ANSI, and C++ dialects.]
|
||
[+?All scripts and commands under \b$PACKAGEROOT\b use \b$PATH\b
|
||
relative pathnames (via the \bast\b \bpathpath\b(3) function); there
|
||
are no embedded absolute pathnames. This means that binaries generated
|
||
under \b$PACKAGEROOT\b may be copied to a different root; users need
|
||
only change their \b$PATH\b variable to reference the new installation
|
||
root \bbin\b directory. \bpackage install\b installs binary packages in
|
||
a new \b$INSTALLROOT\b.]
|
||
|
||
[ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]
|
||
|
||
[+SEE ALSO?\bautoconfig\b(1), \bcksum\b(1), \bexecrate\b(1), \bexpmake\b(1),
|
||
\bgzip\b(1), \bmake\b(1), \bmamake\b(1), \bnmake\b(1), \bpax\b(1),
|
||
\bpkgadd\b(1), \bpkgmk\b(1), \bproto\b(1), \bratz\b(1), \brpm\b(1),
|
||
\bsh\b(1), \btar\b(1), \boptget\b(3)]
|
||
'
|
||
case $* in
|
||
help) set -- --man ;;
|
||
esac
|
||
while getopts -a $command "$USAGE" OPT
|
||
do :
|
||
done
|
||
shift $OPTIND-1
|
||
;;
|
||
esac
|
||
|
||
# check the args
|
||
|
||
case $AR in
|
||
'') AR=ar ;;
|
||
esac
|
||
case $CC in
|
||
'') CC=cc ;;
|
||
esac
|
||
case $LD in
|
||
'') LD=ld ;;
|
||
esac
|
||
case $NM in
|
||
'') NM=nm ;;
|
||
esac
|
||
|
||
action=
|
||
admin_all=1
|
||
admin_on=
|
||
authorize=
|
||
bit=
|
||
exec=
|
||
flat=0
|
||
force=0
|
||
global=
|
||
hi=
|
||
html=0
|
||
ifs=${IFS-'
|
||
'}
|
||
lo=
|
||
make=
|
||
makeflags='-K'
|
||
nmakeflags=
|
||
nmakesep=
|
||
nl="
|
||
"
|
||
noexec=
|
||
only=0
|
||
output=
|
||
package_src=
|
||
password=
|
||
quiet=0
|
||
show=:
|
||
tab=" "
|
||
verbose=0
|
||
AUTHORIZE=
|
||
DEBUG=
|
||
HURL=
|
||
PROTOROOT=-
|
||
SHELLMAGIC=-
|
||
|
||
unset FIGNORE BINDIR DLLDIR ETCDIR FUNDIR INCLUDEDIR LIBDIR LOCALEDIR MANDIR SHAREDIR 2>/dev/null || true
|
||
|
||
while :
|
||
do case $# in
|
||
0) set host type ;;
|
||
esac
|
||
case $1 in
|
||
admin|clean|clobber|contents|copyright|export|host|install|license|list|make|read|regress|release|remove|results|setup|test|update|use|verify|view|write|TEST)
|
||
action=$1
|
||
shift
|
||
break
|
||
;;
|
||
authorize)
|
||
case $# in
|
||
1) echo $command: $1: authorization user name argument expected >&2; exit 1 ;;
|
||
esac
|
||
shift
|
||
authorize=$1
|
||
shift
|
||
continue
|
||
;;
|
||
debug|environment)
|
||
exec=echo make=echo show=echo
|
||
;;
|
||
flat) flat=1
|
||
;;
|
||
force) force=1
|
||
;;
|
||
never) exec=echo noexec=-N
|
||
;;
|
||
only) only=1
|
||
;;
|
||
password)
|
||
case $# in
|
||
1) echo $command: $1: authorization password argument expected >&2; exit 1 ;;
|
||
esac
|
||
shift
|
||
password=$1
|
||
shift
|
||
continue
|
||
;;
|
||
quiet) quiet=1
|
||
;;
|
||
show) exec=echo noexec=-n
|
||
;;
|
||
verbose)verbose=1
|
||
;;
|
||
DEBUG) DEBUG=1
|
||
PS4='+$LINENO:$SECONDS+ '
|
||
set -x
|
||
;;
|
||
help|HELP|html|man|--[?m]*)
|
||
case $1 in
|
||
help) code=0
|
||
case $2 in
|
||
'') exec 1>&2 ;;
|
||
esac
|
||
;;
|
||
html) code=0 html=1
|
||
;;
|
||
*) code=2
|
||
exec 1>&2
|
||
;;
|
||
esac
|
||
case $html in
|
||
1) bO="<HTML>
|
||
<HEAD>
|
||
<TITLE>$2 package installation instructions</TITLE>
|
||
<HEAD>
|
||
<BODY bgcolor=white link=teal vlink=dimgray>"
|
||
eO='</BODY>
|
||
</HTML>'
|
||
bH="<CENTER><H3><FONT face=courier color=red>"
|
||
eH='</FONT></H3></CENTER>'
|
||
bP='<P>'
|
||
bL='<P><TABLE cellpadding=0 cellspacing=2>'
|
||
bL2='<P><TABLE border=0 cellpadding=0 cellspacing=2>'
|
||
eL='</TABLE><P>'
|
||
bT='<TR><TD align=right valign=top><B>'
|
||
bD='</B></TD><TD align=left>' eD='</TD></TR>'
|
||
bB='<B>' eB='</B>'
|
||
bI='<I>' eI='</I>'
|
||
bX='<PRE>' eX='</PRE>'
|
||
bF='<TT>' eF='</TT>'
|
||
Camp='&'
|
||
Mcurl='<A href=../../man/man1/curl.html>curl</A>(1)'
|
||
Mdate='<A href=../../man/man1/date.html>date</A>(1)'
|
||
Mfile='<A href=../../man/man1/file.html>file</A>(1)'
|
||
Mgunzip='<A href=../../man/man1/gzip.html>gunzip</A>(1)'
|
||
Mhurl='<A href=../../man/man1/hurl.html>hurl</A>(1)'
|
||
Mlynx='<A href=../../man/man1/lynx.html>lynx</A>(1)'
|
||
Mnmake='<A href=../../man/man1/nmake.html>nmake</A>(1)'
|
||
Mpackage='<A href=../../man/man1/package.html>package</A>(1)'
|
||
Mproto='<A href=../../man/man1/proto.html>proto</A>(1)'
|
||
Mratz='<A href=../../man/man1/ratz.html>ratz</A>'
|
||
Mtar='<A href=../../man/man1/tar.html>tar</A>(1)'
|
||
Mwget='<A href=../../man/man1/wget.html>wget</A>(1)'
|
||
;;
|
||
*) bO='' eO=''
|
||
bH='' eH=':'
|
||
bP=''
|
||
bL='' eL=''
|
||
bL2=''
|
||
bT=' '
|
||
bD=' ' eD=''
|
||
bB='' eB=''
|
||
bI='' eI=''
|
||
bX='' eX=''
|
||
bF='"' eF='"'
|
||
Camp='&'
|
||
Mcurl='curl(1)'
|
||
Mdate='date(1)'
|
||
Mfile='file(1)'
|
||
Mgunzip='gunzip(1)'
|
||
Mhurl='hurl(1)'
|
||
Mlynx='lynx(1)'
|
||
Mnmake='nmake(1)'
|
||
Mpackage='package(1)'
|
||
Mproto='proto(1)'
|
||
Mratz='ratz'
|
||
Mtar='tar(1)'
|
||
Mwget='wget(1)'
|
||
;;
|
||
esac
|
||
case $2 in
|
||
binary) echo "${bO}
|
||
${bH}Binary Package Installation Instructions${eH}
|
||
${bL}
|
||
${bT}(1)${bD}Do not install packages as ${bI}root/super-user${eI}. Although some components may
|
||
have setuid executables, few must be owned by ${bI}root${eI}. These are best
|
||
changed manually when the security implications are understood.${eD}
|
||
${bT}(2)${bD}Choose a package root directory and cd to it. This will be a local work
|
||
area for all packages.${eD}
|
||
${bT}(3)${bD}These instructions bypass the ${bI}click to download${eI} package links on the
|
||
download site. If you already clicked, or if your system does not have
|
||
${Mcurl}, ${Mhurl}, ${Mlynx} or ${Mwget} then use the alternate instructions
|
||
for (3),(4),(5) in plan ${bB}B${eB} below. Plan ${bB}B${eB} installs the ${Mhurl}
|
||
script which works with ksh and modern bash. The top level URL is:${bX}
|
||
URL=http://www.research.att.com/sw/download${eX}${eD}
|
||
${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then run:${bX}
|
||
test -d bin || mkdir bin
|
||
url=\$URL/package
|
||
(wget -O - \$url||curl -L \$url||hurl \$url) > bin/package
|
||
chmod +x bin/package${eX}${eD}
|
||
${bT}(5)${bD}Determine the list of package names you want from the download site, then
|
||
use the ${Mpackage} command to do the actual download:${bX}
|
||
bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
|
||
setup binary \$URL ${bI}PACKAGE${eI} ...${eX}
|
||
(Refer to the ${bB}AUTHORIZATION${eB} paragraph on the main download page for
|
||
${bI}NAME${eI}/${bI}PASSWORD${eI} details.) This downloads the closure of the latest
|
||
binary package(s); covered and up-to-date packages are not downloaded again unless
|
||
${bB}package force ...${eB} is specified. Package content is verified using ${bB}${checksum}${eB}.
|
||
If the package root will contain only one architecture then you can install in ${bB}bin${eB} and
|
||
${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
|
||
instead:${bX}
|
||
bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
|
||
flat setup binary \$URL ${bB}PACKAGE${eB} ...${eX}
|
||
To update the same packages from the same URL run:${bX}
|
||
bin/package setup binary${eX}${eD}
|
||
${bT}(6)${bD}The packaged binaries are position independent, i.e., they do not
|
||
contain hard-coded paths. However, commands with related files, like
|
||
${Mfile} and ${Mnmake}, require the path of the bin directory to be
|
||
exported in ${bB}PATH${eb}.${eD}
|
||
${bT}(7)${bD}You can run the binaries directly from the package root, or you can
|
||
install them in a public root (requires the ${bI}AT${Camp}T${eI} ${Mnmake} command):${bX}
|
||
bin/package flat install ${bI}DIRECTORY PACKAGE${eI}${eX}
|
||
This will install in ${bI}DIRECTORY${eI}${bB}/bin${eB} and ${bI}DIRECTORY${eI}${bB}/lib${eB}. If you want to
|
||
preserve the ${bB}arch/${eB}${bI}HOSTTYPE${eI} hierarchy under ${bI}DIRECTORY${eI} then omit the
|
||
${bB}flat${eB} argument. If you don't have ${Mnmake} then the following will do a
|
||
flat install:${bX}
|
||
cd \$INSTALLROOT
|
||
cp -p -r bin lib include ${bI}DIRECTORY${eI}${eX}${eD}
|
||
${bT}(8)${bD}To summarize, after the first time, the download cycle for the latest
|
||
binary release is:${bX}
|
||
bin/package setup binary${eX}${eD}${eL}
|
||
|
||
${bH}Binary Package Installation Instructions -- Plan B${eH}
|
||
${bL}
|
||
${bT}(3)${bD}Create the subdirectory ${bB}lib/package/tgz${eB} and download all package archives
|
||
into that directory.${eD}
|
||
${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then manually read the ${bB}INIT${eB}
|
||
binary package:${bX}
|
||
gunzip < lib/package/tgz/INIT.${bI}YYYY-MM-DD.HOSTTYPE${eI}.tgz |
|
||
${TAR} ${TARFLAGS}f -${eX}
|
||
Note that some browsers automatically unzip downloaded without warning.
|
||
If the gunzip fails try:
|
||
${TAR} ${TARFLAGS}f -${eX} lib/package/tgz/INIT.${bI}YYYY-MM-DD.HOSTTYPE${eI}.tgz
|
||
If your system does not have ${Mtar} or ${Mgunzip} then download the ${Mratz}
|
||
binary package:${bX}
|
||
mkdir bin
|
||
cp lib/package/tgz/ratz.${bI}YYYY-MM-DD.HOSTTYPE${eI}.exe bin/ratz
|
||
chmod +x bin/ratz
|
||
bin/ratz -lm < lib/package/tgz/INIT.${bI}YYYY-MM-DD/HOSTTYPE${eI}.tgz
|
||
${bT}(5)${bD}Read all unread package archive(s):${bX}
|
||
bin/package read${eX}
|
||
Both source and binary packages will be read by this step.${eD}${eL}${eO}"
|
||
;;
|
||
intro) echo "${bO}
|
||
${bH}Package Hierarchy Details${eH}
|
||
${bP}
|
||
The package directory hierarchy is rooted at ${bB}\$PACKAGEROOT${eB}. All source and
|
||
binaries reside under this tree. A two level viewpath is used to separate
|
||
source and binaries. The top view is architecture specific, the bottom view
|
||
is shared source. All building is done in the architecture specific view;
|
||
no source view files are intentionally changed. This means that many
|
||
different binary architectures can be made from a single copy of the source.
|
||
${bP}
|
||
Each package contains one or more components. Component source for the ${bI}FOO${eI}
|
||
command is in ${bB}\$PACKAGEROOT/src/cmd/${eB}${bI}FOO${eI}, and source for the ${bI}BAR${eI} library is
|
||
in ${bB}\$PACKAGEROOT/src/lib/lib${eB}${bI}BAR${eI}. This naming is for convenience only; the
|
||
underlying makefiles handle inter-component build order. The ${bB}INIT${eB} component,
|
||
which contains generic package support files, is always made first, then the
|
||
components named ${bB}INIT${eB}*, then the order determined by the closure of component
|
||
makefile dependencies.
|
||
${bP}
|
||
${bB}\$PACKAGEROOT/lib/package${eB} contains package specific files. The package naming
|
||
convention is ${bI}GROUP${eI}[${bI}-PART${eI}]; e.g., ${bB}ast-base${eB}, ${bB}gnu-fileutils${eB}. The *${bB}.pkg${eB} files
|
||
are ${bB}ast${eB} ${Mnmake} makefiles that contain the package name, package components,
|
||
references to other packages, and a short package description. *${bB}.pkg${eB} files
|
||
are used by ${bF}package write${eF} to generate new source and binary packages.
|
||
${bP}
|
||
${bB}\$PACKAGEROOT/lib/package/${eB}${bI}GROUP${eI}${bB}.lic${eB} files contain license information that
|
||
is used by the ${bB}ast${eB} ${Mproto} and ${Mnmake} commands to generate source and
|
||
binary license strings. ${bI}GROUP${eI} is determined by the first ${bB}:PACKAGE:${eB} operator
|
||
name listed in the component ${bB}nmake${eB} makefile. ${bI}GROUP${eI}${bB}.lic${eB} files are part of the
|
||
licensing documentation. Each component may have its own ${bB}LICENSE${eB} file that
|
||
overrides the ${bI}GROUP${eI}${bB}.lic${eB} file. The full text of the licenses are in the
|
||
${bB}\$PACKAGEROOT/lib/package/LICENSES${eB} and ${bB}\$INSTALLROOT/lib/package/LICENSES${eB}
|
||
directories.
|
||
${bP}
|
||
A few files are generated in ${bB}\$PACKAGEROOT/lib/package/gen${eB} and
|
||
${bB}\$INSTALLROOT/lib/package/gen${eB}. ${bI}PACKAGE${eI}${bB}.ver${eB} contains one line consisting of${bX}
|
||
${bI}PACKAGE VERSION RELEASE${eI} 1${eX}
|
||
for the most recent instance of ${bI}PACKAGE${eI} read into ${bB}\$PACKAGEROOT${eB}, where
|
||
${bI}PACKAGE${eI} is the package name, ${bI}VERSION${eI} is the ${bI}YYYY-MM-DD${eI} base version,
|
||
and ${bI}RELEASE${eI} is ${bI}VERSION${eI} for the base release or ${bI}YYYY-MM-DD${eI} for delta releases.
|
||
${bI}PACKAGE${eI}${bB}.req${eB} contains *${bB}.ver${eB} entries for the packages required by
|
||
${bI}PACKAGE${eI}, except that the fourth field is 0 instead of 1. All packages
|
||
except ${bB}INIT${eB} and ${Mratz} require the ${bB}INIT${eB} package. A simple sort of ${bI}PACKAGE${eI}${bB}.pkg${eB}
|
||
and *${bB}.ver${eB} determines if the required package have been read in. Finally,
|
||
${bI}PACKAGE${eI}${bB}.README${eB} contains the ${bB}README${eB} text for ${bI}PACKAGE${eI} and all its
|
||
components. Included are all changes added to the component ${bB}RELEASE${eB},
|
||
${bB}CHANGES${eB} or ${bB}ChangeLog${eB} files dated since the two most recent base
|
||
releases. Component ${bB}RELEASE${eB} files contain tag lines of the form
|
||
[${bI}CC${eI}]${bI}YY-MM-DD${eI} [ ${bI}TEXT${eI} ] (or ${Mdate} format dates) followed by README
|
||
text, in reverse chronological order (newer entries at the top of the
|
||
file.) ${bF}package release${eF} generates this information, and
|
||
${bF}package contents ...${eF} lists the descriptions and components.
|
||
${bP}
|
||
${bB}\$HOSTYPE${eB} names the current binary architecture and is determined by the
|
||
output of ${bF}package${eF} (no arguments.) The ${bB}\$HOSTTYPE${eB} naming scheme is used
|
||
to separate incompatible executable and object formats. All architecture
|
||
specific binaries are placed under ${bB}\$INSTALLROOT${eB} (${bB}\$PACKAGEROOT/arch/\$HOSTTYPE${eB}.)
|
||
There are a few places that match against ${bB}\$HOSTTYPE${eB} when making binaries; these
|
||
are limited to makefile compiler workarounds, e.g., if ${bB}\$HOSTTYPE${eB} matches
|
||
'hp.*' then turn off the optimizer for these objects. All other architecture
|
||
dependent logic is handled either by ${bB}\$INSTALLROOT/bin/iffe${eB} or by component
|
||
specific configure scripts. Explicit ${bB}\$HOSTYPE${eB} values matching *,*cc*[,-*,...]
|
||
optionally set the default ${bB}CC${eB} and ${bB}CCFLAGS${eB}. This is handy for build
|
||
farms that support different compilers on the same architecture.
|
||
${bP}
|
||
Each component contains an ${bB}ast${eB} ${Mnmake} makefile (either ${bB}Nmakefile${eB} or ${bB}Makefile${eB})
|
||
and a ${bI}MAM${eI} (make abstract machine) file (${bB}Mamfile${eB}.) A Mamfile contains a portable
|
||
makefile description that is used by ${bB}\$INSTALLROOT/bin/mamake${eB} to simulate
|
||
${bB}nmake${eB}. Currently there is no support for old-make/gnu-make makefiles; if
|
||
the binaries are just being built then ${bB}mamake${eB} will suffice; if source or
|
||
makefile modifications are anticipated then ${bB}nmake${eB} (from the ${bB}ast-open${eB} or
|
||
${bB}ast-base${eB} package) should be used. Mamfiles are automatically generated by
|
||
${bF}package write${eF}.
|
||
${bP}
|
||
Most component C source is prototyped. If ${bB}\$CC${eB} (default value ${bB}cc${eB}) is not a
|
||
prototyping C compiler then ${bF}package make${eF} runs ${Mproto} on portions of the
|
||
${bB}\$PACKAGEROOT/src${eB} tree and places the converted output files in the
|
||
${bB}\$PACKAGEROOT/proto/src${eB} tree. Converted files are then viewpathed over the
|
||
original source. The ${bB}ast${eB} ${Mproto} command converts an ANSI C subset to code
|
||
that is compatible with K&R, ANSI, and C++ dialects.
|
||
${bP}
|
||
All scripts and commands under ${bB}\$PACKAGEROOT${eB} use ${bB}\$PATH${eB} relative pathnames;
|
||
there are no embedded absolute pathnames. This means that binaries generated
|
||
under ${bB}\$PACKAGEROOT${eB} may be copied to a different root; users need only change
|
||
their ${bB}\$PATH${eB} variable to reference the new installation root bin directory.
|
||
${bF}package install${eF} installs binary packages in a new ${bB}\$INSTALLROOT${eB}.
|
||
${eO}"
|
||
;;
|
||
source) echo "${bO}
|
||
${bH}Source Package Installation Instructions${eH}
|
||
${bL}
|
||
${bT}(1)${bD}Do not install packages as ${bI}root/super-user${eI}. Although some components may
|
||
have setuid executables, few must be owned by ${bI}root${eI}. These are best
|
||
changed manually when the security implications are understood.${eD}
|
||
${bT}(2)${bD}Choose a package root directory and cd to it. This will be a local work
|
||
area for all packages.
|
||
${bT}(3)${bD}These instructions bypass the ${bI}click to download${eI} package links on the
|
||
download site. If you already clicked, or if your system does not have
|
||
${Mcurl}, ${Mhurl}, ${Mlynx} or ${Mwget} then use the alternate instructions
|
||
for (3),(4),(5) in plan ${bB}B${eB} below. Plan ${bB}B${eB} installs the ${Mhurl}
|
||
script which works with ksh and modern bash. The top level URL is:${bX}
|
||
URL=http://www.research.att.com/sw/download${eX}${eD}
|
||
${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then run:${bX}
|
||
test -d bin || mkdir bin
|
||
url=\$URL/package
|
||
(wget -O - \$url||curl -L \$url||hurl \$url) > bin/package
|
||
chmod +x bin/package${eX}${eD}
|
||
${bT}(5)${bD}Determine the list of package names you want from the download site, then
|
||
use the ${Mpackage} command to do the actual download:${bX}
|
||
bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
|
||
setup source \$URL ${bB}PACKAGE${eB} ...${eX}
|
||
(Refer to the ${bB}AUTHORIZATION${eB} paragraph on the main download page for
|
||
${bI}NAME${eI}/${bI}PASSWORD${eI} details.) This downloads the closure of the latest
|
||
source package(s); covered and up-to-date packages are not downloaded again unless
|
||
${bB}package force ...${eB} is specified. Package content is verified using ${bB}${checksum}${eB}.
|
||
If the package root will contain only one architecture then you can install in ${bB}bin${eB} and
|
||
${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
|
||
instead:${bX}
|
||
bin/package authorize \"${bI}NAME${eI}\" password \"${bI}PASSWORD${eI}\" \\
|
||
flat setup source \$URL ${bB}PACKAGE${eB} ...${eX}
|
||
To update the same packages from the same URL run:${bX}
|
||
bin/package setup source${eX}${eD}
|
||
${bT}(6)${bD}Build and install; all generated files are placed under ${bB}arch/${eB}${bI}HOSTTYPE${eI}
|
||
(${bB}\$INSTALLROOT${eB}), where ${bI}HOSTTYPE${eI} is the output of ${bB}bin/package${eB} (with no
|
||
arguments.) ${bI}name=value${eI} arguments are supported; ${bB}CC${eB} and ${bB}debug=1${eB} (compile
|
||
with -g instead of -O) are likely candidates. The output is written to
|
||
the terminal and captured in ${bB}\$INSTALLROOT/lib/package/gen/make.out${eB}:${bX}
|
||
bin/package make${eX}${eD}
|
||
${bT}(7)${bD}List make results and interesting errors:${bX}
|
||
bin/package results${eX}
|
||
Run the regression tests:${bX}
|
||
bin/package test${eX}
|
||
List test results and errors:${bX}
|
||
bin/package results test${eX}${eD}
|
||
${bT}(8)${bD}The generated binaries are position independent, i.e., they do not
|
||
contain hard-coded paths. However, commands with related files, like
|
||
${Mfile} and ${Mnmake}, require the path of the bin directory to be
|
||
exported in ${bB}PATH${eb}.${eD}
|
||
${bT}(9)${bD}You can run the binaries directly from the package root, or you can
|
||
install them in a public root after you are satisfied with the make and
|
||
test actions (requires the ${bI}AT${Camp}T${eI} ${Mnmake} command):${bX}
|
||
bin/package flat install ${bI}DIRECTORY PACKAGE${eI}${eX}
|
||
This will install in ${bI}DIRECTORY${eI}${bB}/bin${eB} and ${bI}DIRECTORY${eI}${bB}/lib${eB}. If you want to
|
||
preserve the ${bB}arch/${eB}${bI}HOSTTYPE${eI} hierarchy under ${bI}DIRECTORY${eI} then omit the
|
||
${bB}flat${eB} argument. If you don't have ${Mnmake} then the following will do a
|
||
flat install:${bX}
|
||
cd \$INSTALLROOT
|
||
cp -p -r bin lib include ${bI}DIRECTORY${eI}${eX}${eD}
|
||
${bT}(10)${bD}To summarize, after the first time the download, build, and test cycle
|
||
for the latest source release is:${bX}
|
||
bin/package setup source
|
||
bin/package make
|
||
bin/package test${eX}${eD}${eL}
|
||
|
||
${bH}Source Package Installation Instructions -- Plan B${eH}
|
||
${bL}
|
||
${bT}(3)${bD}Create the subdirectory ${bB}lib/package/tgz${eB} and download all package archives
|
||
into that directory.${eD}
|
||
${bT}(4)${bD}If the ${bB}bin/package${eB} script does not exist then manually read the ${bB}INIT${eB}
|
||
source package:${bX}
|
||
gunzip < lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz | ${TAR} ${TARFLAGS}f -${eX}
|
||
Note that some browsers automatically unzip downloaded without warning.
|
||
If the gunzip fails try:
|
||
${TAR} ${TARFLAGS}f -${eX} lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz
|
||
If your system does not have ${Mtar} or ${Mgunzip} then download the ${Mratz}
|
||
source package, compile it, and manually read the ${bB}INIT${eB}
|
||
source package:${bX}
|
||
mkdir bin
|
||
cp lib/package/tgz/ratz.${bI}YYYY-MM-DD${eI}.c lib/package/tgz/ratz.c
|
||
cc -o bin/ratz lib/package/tgz/ratz.c
|
||
bin/ratz -lm < lib/package/tgz/INIT.${bI}YYYY-MM-DD${eI}.tgz
|
||
${bT}(5)${bD}Read all unread package archive(s):${bX}
|
||
bin/package read${eX}
|
||
Both source and binary packages will be read by this step.${eD}${eL}${eO}"
|
||
;;
|
||
*) echo "Usage: $command [ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]
|
||
|
||
The $command command controls source and binary packages. It must be run
|
||
within the package root directory tree. See \"$command help intro\" for
|
||
details. In the following, PACKAGE names either a package or a component
|
||
within a package; if omitted, all packages are operated on. The default
|
||
action is \"host type\".
|
||
|
||
qualifier:
|
||
authorize NAME Remote authorization name or license acceptance phrase.
|
||
debug|environment Show environment and actions; do not execute.
|
||
flat Collapse \$INSTALLROOT { bin fun include lib } onto \$PACKAGEROOT.
|
||
force Force the action to override saved state.
|
||
never Run make -N; otherwise show other actions.
|
||
only Only operate on the specified packages.
|
||
password PASSWORD Remote authorization or license acceptance password.
|
||
quiet Do not list captured make and test action output.
|
||
show Run make -n; otherwise show other actions.
|
||
DEBUG Trace the package script actions in detail for debugging.
|
||
action:
|
||
admin [ all ] [ db FILE ] [ on PATTERN ] [ action ... ]
|
||
Apply ACTION ... to the hosts listed in FILE. If FILE is
|
||
omitted then "admin.db" is assumed. The caller must have rcp(1)
|
||
and rsh(1) or scp(1) and ssh(1) access to the hosts. Output
|
||
for the action is saved per-host in ACTION.log/HOST. Logs
|
||
can be viewed by \"package admin [on HOST] results [ACTION]\".
|
||
By default only local PACKAGEROOT hosts are selected from FILE;
|
||
\"all\" selects all hosts. \"on PATTERN\" selects only
|
||
hosts matching the | separated PATTERN. FILE contains four
|
||
types of lines. Blank lines and lines beginning with # are
|
||
ignored. Lines starting with id=value are variable assignments.
|
||
Set admin_ping to local conventions if \"$admin_ping\" fails.
|
||
If a package list is not specified on the command line the
|
||
action applies to all packages; a variable assignment
|
||
package=list applies action to the packages in list for
|
||
subsequent hosts in FILE. The remaining line type is a host
|
||
description consisting of 6 tab separated fields. The first 3
|
||
are mandatory; the remaining 3 are updated by the admin action:
|
||
hosttype
|
||
The host type as reported by package.
|
||
[user@]host
|
||
The host name and optionally user name for rcp(1)
|
||
and rsh(1) access.
|
||
[remote:[[master]:]]PACKAGEROOT
|
||
The absolute remote package root directory and
|
||
optionally the remote prorocol (rsh or ssh) if
|
||
the directory is on a different server than the
|
||
master package root directory. If
|
||
lib/package/admin/$admin_env exists under
|
||
this directory then it is sourced by sh(1)
|
||
before ACTION is done. If this field begins with -
|
||
then the host is ignored. If this field contains
|
||
: then ditto(1) is used to sync the remote src
|
||
directory hierarchy to the local one. If [master]:
|
||
is specified then the sync is deferred to the
|
||
master host. If master is omitted (two :) then
|
||
the sync is disabled. These directories must exist
|
||
on the remote side: lib/package, src/cmd, src/lib.
|
||
date YYMMDD of the last action.
|
||
date Elapsed wall time of the last action.
|
||
M T W The admin action make, test and write action error
|
||
counts. A non-numeric value in any of these fields
|
||
disables the corresponding action.
|
||
owner The owner contact information.
|
||
attributes
|
||
NAME=VALUE attributes. Should at least contain
|
||
cc=compiler-version.
|
||
clean | clobber
|
||
Delete the arch/HOSTTYPE hierarchy; this deletes all generated
|
||
files and directories for HOSTTYPE. The hierarchy can be rebuilt
|
||
by package make.]
|
||
contents [ package ... ]
|
||
List description and components for PACKAGE on the standard
|
||
output.
|
||
copyright [ package ... ]
|
||
List the general copyright notice(s) for PACKAGE on the
|
||
standard output. Note that individual components in PACKAGE
|
||
may contain additional or replacement notices.
|
||
export [ VARIABLE ... ]
|
||
List NAME=VALUE for each VARIABLE, one per line. If the
|
||
\"only\" attribute is specified then only the variable
|
||
values are listed. If no variables are specified then
|
||
$env are assumed.
|
||
help [ ACTION ]
|
||
Display help text on the standard error [ standard output
|
||
for ACTION ].
|
||
host [ canon cpu name rating type ... ]
|
||
List architecture/implementation dependent host information
|
||
on the standard output. type is listed if no attributes are
|
||
specified. Information is listed on a single line in attributes
|
||
order. The attributes are:
|
||
canon The next argument is a host type name to be
|
||
converted to package syntax.
|
||
cpu The number of cpus; 1 if the host is not a
|
||
multiprocessor.
|
||
name The host name.
|
||
rating The cpu rating in pseudo mips; the value is useful
|
||
useful only in comparisons with rating values of
|
||
other hosts. Other than a vax rating fixed at 1,
|
||
ratings can vary wildly but consistently from
|
||
vendor mips ratings. cc(1) may be required to
|
||
determine the rating.
|
||
type The host type, usually of the form
|
||
vendor.architecture, with an optional trailing
|
||
-version. The main theme is that type names within
|
||
a family of architectures are named in a similar,
|
||
predictable style. Os point release information is
|
||
avoided as much as possible, but vendor resistance
|
||
to release incompatibilities has for the most part
|
||
been futile.
|
||
html [ ACTION ]
|
||
Display html help text on the standard error [ standard output
|
||
for ACTION ].
|
||
install [ ARCHITECTURE ... ] DIR [ PACKAGE ... ]
|
||
Copy the package binary hierarchy to DIR. If ARCHITECTURE is
|
||
omitted then all architectures are installed. If the \"flat\"
|
||
attribute is specified then exactly one ARCHITECTURE must be
|
||
specified; this architecture will be installed in DIR without
|
||
the \"arch/HOSTTYPE\" directory prefixes. Otherwise each
|
||
architecture will be installed in a separate \"arch/HOSTTYPE\"
|
||
subdirectory of DIR. The ARCHITECTURE - names the current
|
||
architecture. DIR must be an existing directory. If PACKAGE
|
||
is omitted then all binary packages are installed. This action
|
||
requires nmake.
|
||
license [ package ... ]
|
||
List the source license(s) for PACKAGE on the standard output.
|
||
Note that individual components in PACKAGE may contain
|
||
additional or replacement licenses.
|
||
list [ PACKAGE ... ]
|
||
List the name, version and prerequisites for PACKAGE on the
|
||
standard output.
|
||
make [ PACKAGE ] [ OPTION ... ] [ TARGET ... ]
|
||
Build and install. The default TARGET is install, which
|
||
makes and installs all packages. If the standard output
|
||
is a terminal then the output is also captured in
|
||
\$INSTALLROOT/lib/package/gen/make.out. The build is done
|
||
in the \$INSTALLROOT directory tree viewpathed on top of
|
||
the \$PACKAGEROOT directory tree. If \"flat\" is specified then
|
||
the \$INSTALLROOT { bin fun include lib } directories are
|
||
linked to the same directories in the package root. Only
|
||
one architecture may be flat. Leaf directory names matching
|
||
the |-separated shell pattern \$MAKESKIP are ignored. The
|
||
view action is done before making. OPTION operands are
|
||
passed to the underlying make command.
|
||
read [ package ... | archive ... ]
|
||
Read the named package archive(s). Must be run from the
|
||
package root directory. Archives are searched for in .
|
||
and lib/package/tgz. Each package is read only once. The
|
||
file lib/package/tgz/package[.type].tim tracks the read time.
|
||
See the write action for archive naming conventions. Text
|
||
file archive member are assumed to be ASCII or UTF-8 encoded.
|
||
regress diff(1) the current and previous package test results.
|
||
release [ [CC]YY-MM-DD [ [cc]yy-mm-dd ] ] [ package ]
|
||
Display recent changes since [CC]YY-MM-DD (up to [cc]yy-mm-dd),
|
||
where - means lowest (or highest.) If no dates are specified
|
||
then changes for the last 4 months are listed. PACKAGE may
|
||
be a package or component name.
|
||
remove PACKAGE
|
||
Remove files installed for PACKAGE.
|
||
results [ path ] [ old ] [ make | test ]
|
||
List results and interesting messages captured by the most
|
||
recent make (default), test or write action. old specifies the
|
||
previous results, if any (current and previous results are
|
||
retained.) $HOME/.pkgresults, if it exists, must contain an
|
||
egrep(1) expression of result lines to be ignored. failed lists
|
||
failures only and path lists the results file path only.
|
||
setup [ beta ] [ binary ] [ source ] [ ARCHITECTURE ... ] [ URL ] [ PACKAGE ... ]
|
||
The action initializes the current directory as a package root,
|
||
runs the update action to download new or out of date packages,
|
||
and runs the read action on those packages. If \"flat\" is
|
||
specified then the \$INSTALLROOT { bin fun include lib }
|
||
directories are linked to the same directories in the package
|
||
root. Only one architecture may be flat. See the update and
|
||
read actions for argument details.
|
||
test [ PACKAGE ]
|
||
Run the regression tests for PACKAGE. If the standard output
|
||
is a terminal then the output is also captured in
|
||
\$INSTALLROOT/lib/package/gen/test.out. In general a package
|
||
must be made before it can be tested. Components tested with
|
||
the \bregress\b(1) command require \bksh93\b. If only is
|
||
also specified then only the listed package components are
|
||
tested, otherwise the closure of the components is tested.
|
||
update [ beta ] [ binary ] [ source ] [ ARCHITECTURE ... ] [ URL ] [ PACKAGE ... ]
|
||
Download the latest release of the selected and required
|
||
packages from URL (e.g.,
|
||
http://www.research.att.com/sw/download) into the directory
|
||
\$PACKAGEROOT/lib/package/tgz. beta accesses beta packages;
|
||
download these at your own risk. If ARCHITECTURE is omitted
|
||
then only architectures already present in the tgz directory
|
||
will be downloaded. If ARCHITECTURE is - then all posted
|
||
architectures will be downloaded. If URL matches *.url then
|
||
it is interpreted as a file containing shell variable
|
||
assignments for url, authorize and password. If URL is
|
||
omitted then the definitions for url, authorize and password
|
||
in \$PACKAGEROOT/lib/package/tgz/$default_url, if it exists,
|
||
are used. If \$PACKAGEROOT/lib/package/tgz/$default_url does
|
||
not exist then it is initialized with the current url,
|
||
authorize and password values and read permission for the
|
||
current user only. If PACKAGE is omitted then only
|
||
packages already present in the tgz directory will be
|
||
downloaded. If PACKAGE is - then all posted packages will be
|
||
downloaded. If source and binary are omitted then both source
|
||
and binary packages will be downloaded. If \bonly\b is
|
||
specified then only the named packages are updated; otherwise
|
||
the closure of required packages is updated. This action
|
||
requires wget(1), lynx(1), curl(1) or a shell that supports
|
||
io to /dev/tcp/HOST/PORT.
|
||
use [ uid | PACKAGE | . [ 32 | 64 ] | 32 | 64 | - ] [ COMMAND ... ]
|
||
Run COMMAND or an interactive shell if COMMAND is omitted, with
|
||
the environment initialized for using the package (can you say
|
||
shared library without cussing?) If uid or PACKAGE or . is
|
||
specified then it is used to determine a \$PACKAGEROOT,
|
||
possibly different from the current directory. For example, to
|
||
try out bozo's package: \"package use bozo\". In this case the
|
||
command may be run from any directory. If the file
|
||
\$INSTALLROOT/lib/package/profile is readable then it is
|
||
sourced to initialize the environment. 32 or 64 implies
|
||
\$PACKAGEROOT of . and specifies the target architecture word
|
||
size (which may be silently ignored.)
|
||
verify [ PACKAGE ]
|
||
Verify installed binary files against the checksum files in
|
||
\$INSTALLROOT/lib/package/gen/*.sum. The checksum files contain
|
||
mode, user and group information. If the checksum matches
|
||
for a given file then the mode, user and group are changed
|
||
as necessary to match the checksum entry. A warning is printed
|
||
on the standard error for each mismatch. Requires the ast
|
||
package cksum(1) command.
|
||
view
|
||
Initialize the architecture specific viewpath hierarchy. The
|
||
make action implicitly calls this action. If \"flat\" is specified
|
||
then the \$INSTALLROOT { bin fun include lib } directories are
|
||
linked to the same directories in the package root. Only one
|
||
architecture may be flat.
|
||
write [closure] [cyg|exp|lcl|pkg|rpm|tgz|tst] [base|delta]
|
||
[binary|runtime|source] PACKAGE
|
||
Write a package archive for PACKAGE. All work is done in the
|
||
\$PACKAGEROOT/lib/package directory. FORMAT-specific files
|
||
are placed in the FORMAT subdirectory. A PACKAGE[.TYPE].tim
|
||
file in this directory tracksthe write time and prevents a
|
||
package from being read in the same root it was written. If
|
||
more than one file is generated for a particular FORMAT then
|
||
those files are placed in the FORMAT/PACKAGE subdirectory.
|
||
File names in the FORMAT subdirectory will contain the package
|
||
name, a YYYY-MM-DD date, and for binary packages, HOSTTYPE.
|
||
If PACKAGE is omitted then an ordered list of previously
|
||
written packages is generated. If \"only\" is specified then
|
||
only the named packages will be written; otherwise
|
||
prerequisite packages are written first. Package components
|
||
must be listed in PACKAGE.pkg. FORMAT may be one of:
|
||
cyg generate a cygwin package
|
||
exp generate an exptools(1) maintainer source archive
|
||
and NPD file in the exp subdirectory, suitable for
|
||
expmake(1); support files are placed in the
|
||
exp/PACKAGE subdirectory
|
||
lcl generate a package archive or delta in the lcl
|
||
subdirectory, suitable for restoration into the
|
||
primary source tree (no source licence annotation)
|
||
pkg generate a pkgmk(1) package, suitable for pkgadd(1)
|
||
rpm generate an rpm(1) package
|
||
tgz generate a gzip(1) tar(1) package archive; this is
|
||
the default
|
||
tst generate tgz FORMAT package archive in the tst
|
||
subdirectory; version state files are not updated
|
||
The package type must be one of source, binary or runtime.
|
||
A source package contains the source needed to build the
|
||
corresponding binary package. A binary package includes the
|
||
libraries and headers needed for compiling and linking
|
||
against the public interfaces. A runtime package contains
|
||
the commands and required dynamic libraries. A package may
|
||
be either a base or delta. A base package contains a
|
||
complete copy of all components. A delta package contains
|
||
only changes from a previous base package. Delta recipients
|
||
must have the ast pax(1) command (in the ast-base package.)
|
||
If neither base nor delta is specified, then the current
|
||
base is overwritten if there are no deltas referring to the
|
||
current base. Only the tgz and lcl formats support delta.
|
||
If base is specified then a new base and two delta archives
|
||
are generated: one delta to generate the new base from the
|
||
old, and one delta to generate the old base from the new;
|
||
the old base is then removed. If delta is specified then a
|
||
new delta referring to the current base is written.
|
||
package.pkg may reference other packages. By default a
|
||
pointer to those packages is written. The recipient package
|
||
read will then check that all required packages have been
|
||
downloaded. If closure is specified then the components for
|
||
all package references are included in the generated
|
||
package. This may be useful for lcl and versioning. All
|
||
formats but lcl annotate each source file (not already
|
||
annotated) with a license comment as it is written to the
|
||
package archive using proto(1).
|
||
name=value:
|
||
variable definition: typically CC=cc or CCFLAGS=-g."
|
||
;;
|
||
esac
|
||
exit $code
|
||
;;
|
||
*=*) set DEFAULT host type "$@"
|
||
;;
|
||
*) echo "Usage: $command [ options ] [ qualifier ... ] [ action ] [ arg ... ] [ n=v ... ]" >&2
|
||
exit 2
|
||
;;
|
||
esac
|
||
global="$global $1"
|
||
shift
|
||
done
|
||
|
||
# gather HOSTTYPE *,* options
|
||
# ,*cc*,-*,... set CC and CCFLAGS
|
||
|
||
hostopts()
|
||
{
|
||
_ifs_=$IFS
|
||
IFS=,
|
||
set '' $HOSTTYPE
|
||
IFS=$_ifs_
|
||
shift
|
||
while :
|
||
do case $# in
|
||
0|1) break ;;
|
||
esac
|
||
shift
|
||
case $1 in
|
||
*cc*) CC=$1
|
||
while :
|
||
do case $# in
|
||
0|1) break ;;
|
||
esac
|
||
case $2 in
|
||
-*) case $assign_CCFLAGS in
|
||
?*) assign_CCFLAGS="$assign_CCFLAGS " ;;
|
||
esac
|
||
assign_CCFLAGS="$assign_CCFLAGS$2"
|
||
shift
|
||
;;
|
||
*) break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
done
|
||
}
|
||
|
||
# collect command line targets and definitions
|
||
|
||
case $_PACKAGE_HOSTTYPE_ in
|
||
?*) HOSTTYPE=$_PACKAGE_HOSTTYPE_
|
||
KEEP_HOSTTYPE=1
|
||
;;
|
||
*) KEEP_HOSTTYPE=0
|
||
;;
|
||
esac
|
||
KEEP_PACKAGEROOT=0
|
||
KEEP_SHELL=0
|
||
USER_VPATH=
|
||
args=
|
||
assign=
|
||
assign_CCFLAGS=
|
||
for i
|
||
do case $i in
|
||
*:*=*) args="$args $i"
|
||
continue
|
||
;;
|
||
*=*) eval `echo ' ' "$i" | sed 's,^[ ]*\([^=]*\)=\(.*\),n=\1 v='\''\2'\'','`
|
||
;;
|
||
esac
|
||
case $i in
|
||
AR=*|LD=*|NM=*)
|
||
assign="$assign $n='$v'"
|
||
eval $n='$'v
|
||
;;
|
||
CC=*) eval $n='$'v
|
||
;;
|
||
CCFLAGS=*)
|
||
eval $n='$'v
|
||
assign_CCFLAGS="CCFLAGS=\"\$CCFLAGS\""
|
||
;;
|
||
HOSTTYPE=*)
|
||
eval $n='$'v
|
||
case $HOSTTYPE in
|
||
?*) KEEP_HOSTTYPE=1 ;;
|
||
esac
|
||
;;
|
||
HURL=*) eval $n='$'v
|
||
;;
|
||
PACKAGEROOT=*)
|
||
eval $n='$'v
|
||
case $PACKAGEROOT in
|
||
?*) KEEP_PACKAGEROOT=1 ;;
|
||
esac
|
||
;;
|
||
SHELL=*)eval $n='$'v
|
||
case $SHELL in
|
||
?*) KEEP_SHELL=1 ;;
|
||
esac
|
||
;;
|
||
TAR=*) eval $n='$'v
|
||
;;
|
||
TARFLAGS=*)
|
||
eval $n='$'v
|
||
;;
|
||
VPATH=*)eval USER_$n='$'v
|
||
;;
|
||
'debug=1')
|
||
makeflags="$makeflags --debug-symbols"
|
||
;;
|
||
'strip=1')
|
||
makeflags="$makeflags --strip-symbols"
|
||
;;
|
||
*=*) assign="$assign $n='$v'"
|
||
;;
|
||
*) args="$args $i"
|
||
;;
|
||
esac
|
||
done
|
||
case $HOSTTYPE in
|
||
*,*) hostopts $HOSTTYPE ;;
|
||
esac
|
||
case $assign_CCFLAGS in
|
||
?*) assign="$assign $assign_CCFLAGS"
|
||
esac
|
||
case $CC in
|
||
''|cc) ;;
|
||
*) export CC ;;
|
||
esac
|
||
|
||
# grab action specific args
|
||
|
||
case $action in
|
||
admin) while :
|
||
do case $# in
|
||
0) set list
|
||
break
|
||
;;
|
||
esac
|
||
case $1 in
|
||
all) admin_all=1
|
||
;;
|
||
db) case $# in
|
||
1) echo $command: $action: $1: db file argument expected >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
shift
|
||
admin_db=$1
|
||
;;
|
||
on) case $# in
|
||
1) echo $command: $action: $1: host pattern argument expected >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
shift
|
||
admin_on=$1
|
||
;;
|
||
*) break
|
||
;;
|
||
esac
|
||
shift
|
||
done
|
||
admin_action=$1
|
||
admin_args=$*
|
||
for i
|
||
do case $i in
|
||
debug|environment|force|never|only|quiet|show|DEBUG)
|
||
;;
|
||
*) admin_action=$i
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
setup) PACKAGEROOT=${PWD:-`pwd`}
|
||
export PACKAGEROOT
|
||
KEEP_PACKAGEROOT=1
|
||
;;
|
||
use) case $1 in
|
||
.|32|64)case $1 in
|
||
32|64) bit=$1 ;;
|
||
esac
|
||
shift
|
||
|
||
# HOSTTYPE specific setup
|
||
|
||
case $HOSTTYPE in
|
||
win32.*)sys=uwin
|
||
wow=`uname -i`
|
||
case $bit in
|
||
32) case $HOSTTYPE in
|
||
*-64) HOSTTYPE=${HOSTTYPE%-64} ;;
|
||
esac
|
||
case $wow in
|
||
*/32) ;;
|
||
*) vpath / /$bit ;;
|
||
esac
|
||
;;
|
||
64) case $HOSTTYPE in
|
||
*-64) ;;
|
||
*) HOSTTYPE=$HOSTTYPE-64 ;;
|
||
esac
|
||
case $wow in
|
||
*/32) echo $command: cannot build $bit-bit on $wow $sys >&2; exit 2 ;;
|
||
*) vpath / /$bit ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $bit in
|
||
'') PS1="($sys) " ;;
|
||
*) PS1="($sys-$bit) " ;;
|
||
esac
|
||
|
||
$exec umask 002
|
||
$exec unset MAKESKIP
|
||
|
||
$exec export P=$PWD
|
||
$exec export A=$P/arch/$HOSTTYPE
|
||
|
||
$exec export CDPATH=:..:$A/src/cmd:$A/src/lib:$A/src/uwin:$P/lib/package
|
||
$exec export INSTALLROOT=$A
|
||
$exec export PACKAGEROOT=$P
|
||
$exec export PATH=$A/bin:$P/bin:$PATH
|
||
$exec export PS1="$PS1"
|
||
$exec export VPATH=$A:$P
|
||
$exec export nativepp=/usr/lib
|
||
|
||
if test '' != "$INSTALLROOT" -a -d $INSTALLROOT/include/ast
|
||
then $exec export PACKAGE_ast=$INSTALLROOT
|
||
elif test -d ${PWD%/*}/ast/arch/$HOSTTYPE
|
||
then $exec export PACKAGE_ast=${PWD%/*}/ast/arch/$HOSTTYPE
|
||
fi
|
||
|
||
# run the command
|
||
|
||
case $# in
|
||
0) case $show in
|
||
':') $exec exec $SHELL ;;
|
||
esac
|
||
;;
|
||
*) $exec exec $SHELL -c "$@"
|
||
;;
|
||
esac
|
||
exit
|
||
;;
|
||
esac
|
||
PACKAGEROOT=${PWD:-`pwd`}
|
||
$show export PACKAGEROOT
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
# true if arg is a valid PACKAGEROOT
|
||
|
||
packageroot() # dir
|
||
{
|
||
test -d $1/lib/$command -o -x $1/bin/$command
|
||
}
|
||
|
||
# true if arg is executable
|
||
|
||
executable() # [!] command
|
||
{
|
||
case $1 in
|
||
'!') test ! -x "$2" -a ! -x "$2.exe"; return ;;
|
||
*) test -x "$1" -o -x "$1.exe"; return ;;
|
||
esac
|
||
}
|
||
|
||
# initialize SHELLMAGIC
|
||
# tangible proof of cygwin's disdain for unix (well, this and execrate)
|
||
|
||
shellmagic()
|
||
{
|
||
case $SHELLMAGIC in
|
||
'') ;;
|
||
-) if test -f /emx/bin/sh.exe
|
||
then SHELLMAGIC='#!/emx/bin/sh.exe'$nl
|
||
elif test -f /bin/env.exe
|
||
then SHELLMAGIC='#!/bin/env sh'$nl
|
||
else SHELLMAGIC=
|
||
fi
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# true if arg is executable command on $PATH
|
||
|
||
onpath() # command
|
||
{
|
||
_onpath_b=$1
|
||
case $_onpath_b in
|
||
/*) if executable $_onpath_b
|
||
then _onpath_=$_onpath_b
|
||
return 0
|
||
fi
|
||
return 1
|
||
;;
|
||
esac
|
||
IFS=':'
|
||
set '' $PATH
|
||
IFS=$ifs
|
||
shift
|
||
for _onpath_d
|
||
do case $_onpath_d in
|
||
'') _onpath_d=. ;;
|
||
esac
|
||
if executable "$_onpath_d/$_onpath_b"
|
||
then _onpath_=$_onpath_d/$_onpath_b
|
||
return 0
|
||
fi
|
||
done
|
||
return 1
|
||
}
|
||
|
||
# true if no nmake or nmake not from AT&T or nmake too old
|
||
|
||
nonmake() # nmake
|
||
{
|
||
_nonmake_version=`( $1 -n -f - 'print $(MAKEVERSION:@/.*AT&T.* //:/-//G:@/.* .*/19960101/)' . ) </dev/null 2>/dev/null || echo 19840919`
|
||
if test $_nonmake_version -lt 20001031
|
||
then return 0
|
||
fi
|
||
return 1
|
||
}
|
||
|
||
# determine local host attributes
|
||
|
||
hostinfo() # attribute ...
|
||
{
|
||
case $DEBUG in
|
||
1) set -x ;;
|
||
esac
|
||
map=
|
||
something=
|
||
path=$PATH
|
||
for i in $ccs
|
||
do PATH=$PATH:$i
|
||
done
|
||
for i in $use
|
||
do for j in $org
|
||
do PATH=$PATH:$i/$j/bin
|
||
done
|
||
PATH=$PATH:$i/bin
|
||
done
|
||
# LD_LIBRARY_PATH may be out of sync with PATH here
|
||
case $SED in
|
||
'') SED=sed
|
||
$SED 1d < /dev/null > /dev/null 2>&1 ||
|
||
for dir in /bin /usr/bin
|
||
do if test -x $dir/$SED
|
||
then SED=$dir/$SED
|
||
break
|
||
fi
|
||
done
|
||
TR=tr
|
||
$TR < /dev/null > /dev/null 2>&1 ||
|
||
for dir in /bin /usr/bin
|
||
do if test -x $dir/$TR
|
||
then TR=$dir/$TR
|
||
break
|
||
fi
|
||
done
|
||
;;
|
||
esac
|
||
case $PACKAGE_PATH in
|
||
?*) for i in `echo $PACKAGE_PATH | $SED 's,:, ,g'`
|
||
do PATH=$PATH:$i/bin
|
||
done
|
||
;;
|
||
esac
|
||
|
||
# validate the args
|
||
|
||
canon=
|
||
cc=$CC
|
||
for info
|
||
do case $canon in
|
||
-) canon=$info
|
||
;;
|
||
*) case $info in
|
||
*/*|*[cC][cC])
|
||
cc=$info
|
||
;;
|
||
canon) canon=-
|
||
something=1
|
||
;;
|
||
cpu|name|rating|type)
|
||
something=1
|
||
;;
|
||
*) echo "$command: $action: $info: unknown attribute" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
case $canon in
|
||
-) echo "$command: $action: canon: host type name expected" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
case $something in
|
||
"") set "$@" type ;;
|
||
esac
|
||
case $DEBUG in
|
||
'') exec 9>&2
|
||
exec 2>/dev/null
|
||
;;
|
||
esac
|
||
|
||
# compute the info
|
||
|
||
_hostinfo_=
|
||
for info
|
||
do
|
||
case $info in
|
||
cpu) case $NPROC in
|
||
[123456789]*)
|
||
_hostinfo_="$_hostinfo_ $NPROC"
|
||
continue
|
||
;;
|
||
esac
|
||
cpu=`grep -ic '^processor[ ][ ]*:[ ]*[0123456789]' /proc/cpuinfo`
|
||
case $cpu in
|
||
[123456789]*)
|
||
_hostinfo_="$_hostinfo_ $cpu"
|
||
continue
|
||
;;
|
||
esac
|
||
cpu=1
|
||
# exact match
|
||
set \
|
||
hinv '^Processor [0123456789]' \
|
||
psrinfo 'on-line' \
|
||
'cat /reg/LOCAL_MACHINE/Hardware/Description/System/CentralProcessor' '.' \
|
||
'cat /proc/registry/HKEY_LOCAL_MACHINE/Hardware/Description/System/CentralProcessor' '.' \
|
||
|
||
while :
|
||
do case $# in
|
||
0) break ;;
|
||
esac
|
||
i=`$1 2>/dev/null | grep -c "$2"`
|
||
case $i in
|
||
[123456789]*)
|
||
cpu=$i
|
||
break
|
||
;;
|
||
esac
|
||
shift;shift
|
||
done
|
||
case $cpu in
|
||
0|1) set \
|
||
/bin/mpstat
|
||
|
||
while :
|
||
do case $# in
|
||
0) break ;;
|
||
esac
|
||
if executable $1
|
||
then case `$1 | grep -ic '^cpu '` in
|
||
1) cpu=`$1 | grep -ic '^ *[0123456789][0123456789]* '`
|
||
break
|
||
;;
|
||
esac
|
||
fi
|
||
shift
|
||
done
|
||
;;
|
||
esac
|
||
case $cpu in
|
||
0|1) # token match
|
||
set \
|
||
/usr/kvm/mpstat 'cpu[0123456789]' \
|
||
/usr/etc/cpustatus 'enable' \
|
||
/usr/alliant/showsched 'CE' \
|
||
'ls /config/hw/system/cpu' 'cpu' \
|
||
prtconf 'cpu-unit' \
|
||
|
||
while :
|
||
do case $# in
|
||
0) break ;;
|
||
esac
|
||
i=`$1 2>/dev/null | $TR ' ' '
|
||
|
||
' | grep -c "^$2"`
|
||
case $i in
|
||
[123456789]*)
|
||
cpu=$i
|
||
break
|
||
;;
|
||
esac
|
||
shift;shift
|
||
done
|
||
;;
|
||
esac
|
||
case $cpu in
|
||
0|1) # special match
|
||
set \
|
||
\
|
||
hinv \
|
||
'/^[0123456789][0123456789]* .* Processors*$/' \
|
||
'/[ ].*//' \
|
||
\
|
||
/usr/bin/hostinfo \
|
||
'/^[0123456789][0123456789]* .* physically available\.*$/' \
|
||
'/[ ].*//' \
|
||
|
||
while :
|
||
do case $# in
|
||
0) break ;;
|
||
esac
|
||
i=`$1 2>/dev/null | $SED -e "${2}!d" -e "s${3}"`
|
||
case $i in
|
||
[123456789]*)
|
||
cpu=$i
|
||
break
|
||
;;
|
||
esac
|
||
shift;shift;shift
|
||
done
|
||
;;
|
||
esac
|
||
case $cpu in
|
||
0|1) cpu=`(
|
||
cd ${TMPDIR:-/tmp}
|
||
tmp=hi$$
|
||
trap 'rm -f $tmp.*' 0 1 2
|
||
cat > $tmp.c <<!
|
||
#include <stdio.h>
|
||
#include <pthread.h>
|
||
int main()
|
||
{
|
||
printf("%d\n", pthread_num_processors_np());
|
||
return 0;
|
||
}
|
||
!
|
||
for o in -lpthread ''
|
||
do if $CC $o -O -o $tmp.exe $tmp.c $o >/dev/null 2>&1 ||
|
||
gcc $o -O -o $tmp.exe $tmp.c $o >/dev/null 2>&1
|
||
then ./$tmp.exe
|
||
break
|
||
fi
|
||
done
|
||
)`
|
||
case $cpu in
|
||
[0123456789]*) ;;
|
||
*) cpu=1 ;;
|
||
esac
|
||
;;
|
||
esac
|
||
_hostinfo_="$_hostinfo_ $cpu"
|
||
;;
|
||
name) _name_=`hostname || uname -n || cat /etc/whoami || echo local`
|
||
_hostinfo_="$_hostinfo_ $_name_"
|
||
;;
|
||
rating) for rating in `grep -i ^bogomips /proc/cpuinfo 2>/dev/null | $SED -e 's,.*:[ ]*,,' -e 's,\(...*\)\..*,\1,' -e 's,\(\..\).*,\1,'`
|
||
do case $rating in
|
||
[0123456789]*) break ;;
|
||
esac
|
||
done
|
||
case $rating in
|
||
[0123456789]*) ;;
|
||
*) cd ${TMPDIR:-/tmp}
|
||
tmp=hi$$
|
||
trap 'rm -f $tmp.*' 0 1 2
|
||
cat > $tmp.c <<!
|
||
#include <stdio.h>
|
||
#include <sys/types.h>
|
||
#if TD || TZ
|
||
#include <sys/time.h>
|
||
#else
|
||
extern time_t time();
|
||
#endif
|
||
int main()
|
||
{
|
||
register unsigned long i;
|
||
register unsigned long j;
|
||
register unsigned long k;
|
||
unsigned long l;
|
||
unsigned long m;
|
||
unsigned long t;
|
||
int x;
|
||
#if TD || TZ
|
||
struct timeval b;
|
||
struct timeval e;
|
||
#if TZ
|
||
struct timezone z;
|
||
#endif
|
||
#endif
|
||
l = 500;
|
||
m = 890;
|
||
x = 0;
|
||
for (;;)
|
||
{
|
||
#if TD || TZ
|
||
#if TZ
|
||
gettimeofday(&b, &z);
|
||
#else
|
||
gettimeofday(&b);
|
||
#endif
|
||
#else
|
||
t = (unsigned long)time((time_t*)0);
|
||
#endif
|
||
k = 0;
|
||
for (i = 0; i < l; i++)
|
||
for (j = 0; j < 50000; j++)
|
||
k += j;
|
||
#if TD || TZ
|
||
#if TZ
|
||
gettimeofday(&e, &z);
|
||
#else
|
||
gettimeofday(&e);
|
||
#endif
|
||
t = (e.tv_sec - b.tv_sec) * 1000 + (e.tv_usec - b.tv_usec) / 1000;
|
||
if (!x++ && t < 1000)
|
||
{
|
||
t = 10000 / t;
|
||
l = (l * t) / 10;
|
||
continue;
|
||
}
|
||
#else
|
||
t = ((unsigned long)time((time_t*)0) - t) * 1000;
|
||
if (!x++ && t < 20000)
|
||
{
|
||
t = 200000l / t;
|
||
l = (l * t) / 10;
|
||
continue;
|
||
}
|
||
#endif
|
||
#if PR
|
||
printf("[ k=%lu l=%lu m=%lu t=%lu ] ", k, l, m, t);
|
||
#endif
|
||
if (t == 0)
|
||
t = 1;
|
||
break;
|
||
}
|
||
printf("%lu\n", ((l * m) / 10) / t);
|
||
return k == 0;
|
||
}
|
||
!
|
||
rating=
|
||
for o in -DTZ -DTD ''
|
||
do if $CC $o -O -o $tmp.exe $tmp.c >/dev/null 2>&1 ||
|
||
gcc $o -O -o $tmp.exe $tmp.c >/dev/null 2>&1
|
||
then rating=`./$tmp.exe`
|
||
break
|
||
fi
|
||
done
|
||
case $rating in
|
||
[0123456789]*) ;;
|
||
*) rating=1 ;;
|
||
esac
|
||
;;
|
||
esac
|
||
_hostinfo_="$_hostinfo_ $rating"
|
||
;;
|
||
type|canon)
|
||
case $CROSS:$canon in
|
||
0:) case $cc in
|
||
cc) case $KEEP_HOSTTYPE:$HOSTTYPE in
|
||
0:?*) if test -d ${PACKAGEROOT:-.}/arch/$HOSTTYPE
|
||
then KEEP_HOSTTYPE=1
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $KEEP_HOSTTYPE in
|
||
1) _hostinfo_="$_hostinfo_ $HOSTTYPE"
|
||
continue
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $cc in
|
||
/*) a=`$cc -dumpmachine $CCFLAGS 2>/dev/null`
|
||
case $a in
|
||
'') case $CCFLAGS in
|
||
?*) a=`$cc -dumpmachine 2>/dev/null` ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $a in
|
||
''|*' '*|*/*:*)
|
||
;;
|
||
*.*-*) _hostinfo_="$_hostinfo_ $a"
|
||
continue
|
||
;;
|
||
*-*-*) case $canon in
|
||
'') canon=$a ;;
|
||
esac
|
||
;;
|
||
*) _hostinfo_="$_hostinfo_ $a"
|
||
continue
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
IFS=:
|
||
set /$IFS$PATH
|
||
IFS=$ifs
|
||
shift
|
||
f=../lib/hostinfo/typemap
|
||
for i
|
||
do case $i in
|
||
"") i=. ;;
|
||
esac
|
||
case $canon in
|
||
'') case $cc in
|
||
/*|cc) ;;
|
||
*) if executable $i/$cc
|
||
then a=`$i/$cc -dumpmachine $CCFLAGS 2>/dev/null`
|
||
case $a in
|
||
'') case $CCFLAGS in
|
||
?*) a=`$cc -dumpmachine 2>/dev/null` ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $a in
|
||
''|*' '*|*/*:*)
|
||
;;
|
||
*-*) canon=$a
|
||
;;
|
||
*) _hostinfo_="$_hostinfo_ $a"
|
||
continue 2
|
||
;;
|
||
esac
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
if test -f "$i/$f"
|
||
then map="`grep -v '^#' $i/$f` $map"
|
||
fi
|
||
done
|
||
|
||
# inconsistent -dumpmachine filtered here
|
||
|
||
case -${canon}- in
|
||
--|*-powerpc-*)
|
||
h=`hostname || uname -n || cat /etc/whoami`
|
||
case $h in
|
||
'') h=local ;;
|
||
esac
|
||
a=`arch || uname -m || att uname -m || uname -s || att uname -s`
|
||
case $a in
|
||
*[\ \ ]*) a=`echo $a | $SED "s/[ ]/-/g"` ;;
|
||
esac
|
||
case $a in
|
||
'') a=unknown ;;
|
||
esac
|
||
m=`mach || machine || uname -p || att uname -p`
|
||
case $m in
|
||
*[\ \ ]*) m=`echo $m | $SED "s/[ ]/-/g"` ;;
|
||
esac
|
||
case $m in
|
||
'') m=unknown ;;
|
||
esac
|
||
x=`uname -a || att uname -a`
|
||
case $x in
|
||
'') x="unknown $host unknown unknown unknown unknown unknown" ;;
|
||
esac
|
||
set "" $h $a $m $x
|
||
expected=$1 host=$2 arch=$3 mach=$4 os=$5 sys=$6 rel=$7 ver=$8
|
||
;;
|
||
*) case $canon in
|
||
*-*) IFS=-
|
||
set "" $canon
|
||
shift
|
||
IFS=$ifs
|
||
case $# in
|
||
2) host= mach= arch=$1 os=$2 sys= rel= ;;
|
||
*) host= mach=$2 arch=$1 os=$3 sys= rel= ;;
|
||
esac
|
||
case $os in
|
||
[abcdefghijklmnopqrstuvwxyz]*[0123456789])
|
||
eval `echo $os | $SED -e 's/^\([^0123456789.]*\)\.*\(.*\)/os=\1 rel=\2/'`
|
||
;;
|
||
esac
|
||
;;
|
||
*) arch=$canon mach= os= sys= rel=
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
type=unknown
|
||
case $host in
|
||
*.*) host=`echo $host | $SED -e 's/\..*//'` ;;
|
||
esac
|
||
case $mach in
|
||
unknown)
|
||
mach=
|
||
;;
|
||
[Rr][0123][0123456789][0123456789][0123456789])
|
||
mach=mips1
|
||
;;
|
||
[Rr][4][0123456789][0123456789][0123456789])
|
||
mach=mips2
|
||
;;
|
||
[Rr][56789][0123456789][0123456789][0123456789]|[Rr][123456789][0123456789][0123456789][0123456789][0123456789])
|
||
mach=mips4
|
||
;;
|
||
pc) arch=i386
|
||
mach=
|
||
;;
|
||
[Pp][Oo][Ww][Ee][Rr][Pp][Cc])
|
||
arch=ppc
|
||
mach=
|
||
;;
|
||
*) case $arch in
|
||
34[0123456789][0123456789])
|
||
os=ncr
|
||
arch=i386
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $canon in
|
||
'') set \
|
||
\
|
||
/NextDeveloper -d next - \
|
||
/config/hw/system/cpu -d tandem mach \
|
||
|
||
while :
|
||
do case $# in
|
||
0) break ;;
|
||
esac
|
||
if test $2 $1
|
||
then os=$3
|
||
case $4 in
|
||
arch) mach=$arch ;;
|
||
mach) arch=$mach ;;
|
||
esac
|
||
break
|
||
fi
|
||
shift;shift;shift;shift
|
||
done
|
||
;;
|
||
esac
|
||
case $os in
|
||
AIX*|aix*)
|
||
type=ibm.risc
|
||
;;
|
||
HP-UX) case $arch in
|
||
9000/[78]*)
|
||
type=hp.pa
|
||
;;
|
||
*/*) type=hp.`echo $arch | $SED 's,/,_,g'`
|
||
;;
|
||
*) type=hp.$arch
|
||
;;
|
||
esac
|
||
;;
|
||
[Ii][Rr][Ii][Xx]*)
|
||
set xx `hinv | $SED -e '/^CPU:/!d' -e 's/CPU:[ ]*\([^ ]*\)[ ]*\([^ ]*\).*/\1 \2/' -e q | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
|
||
shift
|
||
type=$1
|
||
n=
|
||
case $2 in
|
||
r[0123][0123456789][0123456789][0123456789])
|
||
n=1
|
||
;;
|
||
r[4][0123][0123456789][0123456789])
|
||
n=2
|
||
;;
|
||
r[4][456789][0123456789][0123456789]|r[5][0123456789][0123456789][0123456789])
|
||
n=3
|
||
;;
|
||
r[6789][0123456789][0123456789][0123456789]|r[123456789][0123456789][0123456789][0123456789][0123456789])
|
||
n=4
|
||
;;
|
||
esac
|
||
case $rel in
|
||
[01234].*|5.[012]|5.[012].*)
|
||
case $n in
|
||
1) ;;
|
||
*) n=2 ;;
|
||
esac
|
||
;;
|
||
5.*) case $n in
|
||
2) n=3 ;;
|
||
esac
|
||
;;
|
||
esac
|
||
if executable $cc
|
||
then a=$cc
|
||
else IFS=:
|
||
set /$IFS$PATH
|
||
IFS=$ifs
|
||
shift
|
||
for i
|
||
do a=$i/$cc
|
||
if executable $a
|
||
then break
|
||
fi
|
||
done
|
||
fi
|
||
split='
|
||
'
|
||
a=`strings $a < /dev/null | $SED -e 's/[^abcdefghijklmnopqrstuvwxyz0123456789]/ /g' -e 's/[ ][ ]*/\'"$split"'/g' | $SED -e "/^${type}[0123456789]$/!d" -e "s/^${type}//" -e q`
|
||
case $a in
|
||
[0123456789]) n=$a ;;
|
||
esac
|
||
case $n in
|
||
4) a=`$cc -${type}3 2>&1`
|
||
case $a in
|
||
*unknown*|*install*|*conflict*)
|
||
;;
|
||
*) n=3
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
a=`$cc -show F0oB@r.c 2>&1`
|
||
case $n:$a in
|
||
[!2]:*mips2*) n=2 ;;
|
||
[!23]:*mips3*) n=3 ;;
|
||
[!234]:*mips4*) n=4 ;;
|
||
esac
|
||
case $n:$a in
|
||
[!2]:*[Oo]32*) abi=-o32 ;;
|
||
[!3]:*[Nn]32*) abi=-n32 ;;
|
||
esac
|
||
mach=${type}$n
|
||
type=sgi.$mach
|
||
;;
|
||
OSx*|SMP*|pyramid)
|
||
type=pyr
|
||
;;
|
||
OS/390) type=mvs.390
|
||
;;
|
||
[Ss][Cc][Oo]*)
|
||
type=sco
|
||
;;
|
||
[Ss]ol*)
|
||
v=`echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//'`
|
||
case $v in
|
||
[6789]|[1-9][0-9])
|
||
;;
|
||
*) v=
|
||
;;
|
||
esac
|
||
case $arch in
|
||
'') case $mach in
|
||
'') arch=sun4 ;;
|
||
*) arch=$mach ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $arch in
|
||
sparc) arch=sun4 ;;
|
||
esac
|
||
type=sol$v.$arch
|
||
;;
|
||
[Ss]un*)type=`echo $arch | $SED -e 's/\(sun.\).*/\1/'`
|
||
case $type in
|
||
sparc) type=sun4 ;;
|
||
esac
|
||
case $rel in
|
||
[01234]*)
|
||
;;
|
||
'') case $os in
|
||
*[Oo][Ss])
|
||
;;
|
||
*) type=sol.$type
|
||
;;
|
||
esac
|
||
;;
|
||
*) case $type in
|
||
'') case $mach in
|
||
sparc*) type=sun4 ;;
|
||
*) type=$mach ;;
|
||
esac
|
||
;;
|
||
esac
|
||
v=`echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//'`
|
||
case $v in
|
||
[6789]|[1-9][0-9])
|
||
;;
|
||
*) v=
|
||
;;
|
||
esac
|
||
type=sol$v.$type
|
||
;;
|
||
esac
|
||
case $type in
|
||
sun*|*.*)
|
||
;;
|
||
*) type=sun.$type
|
||
;;
|
||
esac
|
||
;;
|
||
[Uu][Nn][Ii][Xx]_[Ss][Vv])
|
||
type=unixware
|
||
;;
|
||
UTS*|uts*)
|
||
if test -x /bin/u370 -o -x /bin/u390
|
||
then type=uts.390
|
||
else case $arch in
|
||
'') arch=$mach ;;
|
||
esac
|
||
type=uts.$arch
|
||
fi
|
||
;;
|
||
$host) type=$arch
|
||
case $type in
|
||
*.*|*[0123456789]*86|*68*)
|
||
;;
|
||
*) case $mach in
|
||
*[0123456789]*86|*68*|mips)
|
||
type=$type.$mach
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
unknown)
|
||
case $arch in
|
||
?*) case $arch in
|
||
sun*) mach= ;;
|
||
esac
|
||
type=$arch
|
||
case $mach in
|
||
?*) type=$type.$mach ;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
*) case $ver in
|
||
FTX*|ftx*)
|
||
case $mach in
|
||
*[0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
|
||
mach=`echo $mach | $SED -e 's/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*$//'`
|
||
;;
|
||
esac
|
||
type=stratus.$mach
|
||
;;
|
||
*) case $arch in
|
||
[Oo][Ss][-/.]2)
|
||
type=os2
|
||
arch=$rel
|
||
;;
|
||
*) type=`echo $os | $SED -e 's/[0123456789].*//' -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789.].*//'`
|
||
;;
|
||
esac
|
||
case $type in
|
||
[Cc][Yy][Gg][Ww][Ii][Nn]_*)
|
||
type=cygwin
|
||
;;
|
||
[Uu][Ww][Ii][Nn]*|[Ww]indows_[0123456789][0123456789]|[Ww]indows_[Nn][Tt])
|
||
type=win32
|
||
arch=`echo $arch | $SED -e 's/_[^_]*$//'`
|
||
;;
|
||
esac
|
||
case $arch in
|
||
'') case $mach in
|
||
?*) type=$type.$mach ;;
|
||
esac
|
||
;;
|
||
*) type=$type.$arch ;;
|
||
esac
|
||
;;
|
||
esac
|
||
esac
|
||
case $type in
|
||
[0123456789]*)
|
||
case $mach in
|
||
?*) type=$mach ;;
|
||
esac
|
||
case $type in
|
||
*/MC) type=ncr.$type ;;
|
||
esac
|
||
;;
|
||
*.*) ;;
|
||
*[0123456789]*86|*68*)
|
||
case $rel in
|
||
[34].[0123456789]*)
|
||
type=att.$type
|
||
;;
|
||
esac
|
||
;;
|
||
[abcdefghijklmnopqrstuvwxyz]*[0123456789])
|
||
;;
|
||
[abcdefghijklmnopqrstuvwxyz]*) case $mach in
|
||
$type) case $ver in
|
||
Fault*|fault*|FAULT*)
|
||
type=ft.$type
|
||
;;
|
||
esac
|
||
;;
|
||
?*) case $arch in
|
||
'') type=$type.$mach ;;
|
||
*) type=$type.$arch ;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $type in
|
||
*[-_]32|*[-_]64|*[-_]128)
|
||
bits=`echo $type | $SED 's,.*[-_],,'`
|
||
type=`echo $type | $SED 's,[-_][0-9]*$,,'`
|
||
;;
|
||
*) bits=
|
||
;;
|
||
esac
|
||
type=`echo $type | $SED -e 's%[-+/].*%%' | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
|
||
case $type in
|
||
*.*) lhs=`echo $type | $SED -e 's/\..*//'`
|
||
rhs=`echo $type | $SED -e 's/.*\.//'`
|
||
case $rhs in
|
||
[x0123456789]*86) rhs=i$rhs ;;
|
||
68*) rhs=m$rhs ;;
|
||
esac
|
||
case $rhs in
|
||
i[x23456789]86|i?[x23456789]86|*86pc)
|
||
rhs=i386 ;;
|
||
powerpc) rhs=ppc ;;
|
||
s[0123456789]*[0123456789]x)
|
||
rhs=`echo $rhs | $SED -e 's/x$/-64/'` ;;
|
||
esac
|
||
case $rhs in
|
||
arm[abcdefghijklmnopqrstuvwxyz_][0123456789]*)
|
||
rhs=arm ;;
|
||
hppa) rhs=pa ;;
|
||
esac
|
||
case $lhs in
|
||
?*coff|?*dwarf|?*elf)
|
||
case $lhs in
|
||
?*coff) x=coff ;;
|
||
?*dwarf)x=coff ;;
|
||
?*elf) x=elf ;;
|
||
esac
|
||
lhs=`echo ${lhs}XXX | $SED -e "s/${x}XXX//"`
|
||
;;
|
||
esac
|
||
case $lhs in
|
||
bsdi) lhs=bsd ;;
|
||
darwin) case $(/usr/bin/cc --version) in
|
||
*'(GCC)'*) case $rel in
|
||
[0-9].*|10.*) lhs=darwin07 ;;
|
||
*) lhs=darwin11 ;;
|
||
esac ;;
|
||
esac
|
||
;;
|
||
freebsd) case $rel in
|
||
[01234].*) lhs=${lhs}4 ;;
|
||
[123456789]*.*) lhs=${lhs}`echo $rel | $SED -e 's/\..*//'` ;;
|
||
esac
|
||
;;
|
||
hpux) lhs=hp ;;
|
||
mvs) rhs=390 ;;
|
||
esac
|
||
case $lhs in
|
||
'') type=$rhs ;;
|
||
$rhs) type=$lhs ;;
|
||
*) type=$lhs.$rhs ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $type in
|
||
sgi.mips*)
|
||
case $mach in
|
||
mips2) type=sgi.$mach
|
||
abi=-o32
|
||
;;
|
||
mips3) type=sgi.$mach
|
||
abi=-n32
|
||
;;
|
||
mips[456789])
|
||
type=sgi.$mach
|
||
case $abi in
|
||
*-n32) ;;
|
||
*) abi=-64 ;;
|
||
esac
|
||
;;
|
||
*) pwd=`pwd`
|
||
cd ${TMPDIR:-/tmp}
|
||
tmp=hi$$
|
||
trap 'rm -f $tmp.*' 0 1 2
|
||
cat > $tmp.a.c <<!
|
||
extern int b();
|
||
int main() { return b(); }
|
||
!
|
||
cat > $tmp.b.c <<!
|
||
int b() { return 0; }
|
||
!
|
||
abi=
|
||
if $cc -c $tmp.a.c
|
||
then for i in -n32 -o32 -64
|
||
do if $cc $i -c $tmp.b.c &&
|
||
$cc -o $tmp.exe $tmp.a.o $tmp.b.o
|
||
then abi=$i
|
||
for i in 2 3 4 5 6 7 8 9
|
||
do case $i:$abi in
|
||
2:-n32|2:-64|3:-64)
|
||
continue
|
||
;;
|
||
esac
|
||
if $cc $abi -mips$i -c $tmp.b.c &&
|
||
$cc -o $tmp.exe $tmp.a.o $tmp.b.o
|
||
then type=`echo $type | $SED -e 's/.$//'`$i
|
||
break
|
||
fi
|
||
done
|
||
break
|
||
fi
|
||
done
|
||
fi </dev/null >/dev/null 2>&1
|
||
rm -f $tmp.*
|
||
trap - 0 1 2
|
||
cd $pwd
|
||
;;
|
||
esac
|
||
case $type$abi in
|
||
sgi.mips2-o32)
|
||
;;
|
||
sgi.mips3)
|
||
type=$type-o32
|
||
;;
|
||
sgi.mips3-n32)
|
||
;;
|
||
sgi.mips4)
|
||
type=$type-o32
|
||
;;
|
||
sgi.mips[456789]-64)
|
||
;;
|
||
*) type=$type$abi
|
||
;;
|
||
esac
|
||
;;
|
||
*) case $bits in
|
||
'') case `file /bin/sh 2>/dev/null` in
|
||
*universal*64* | *64-bit* | *x86[_-]64*)
|
||
pwd=`pwd`
|
||
cd ${TMPDIR:-/tmp}
|
||
tmp=hi$$
|
||
trap 'rm -f $tmp.*' 0 1 2
|
||
cat > $tmp.a.c <<!
|
||
int main() { return 0; }
|
||
!
|
||
if $cc -o $tmp.a.exe $tmp.a.c
|
||
then case `file $tmp.a.exe` in
|
||
*64*) bits=64 ;;
|
||
esac
|
||
fi </dev/null >/dev/null 2>&1
|
||
rm -f $tmp.*
|
||
trap - 0 1 2
|
||
cd $pwd
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $bits in
|
||
32) case $type in
|
||
*.i386) bits= ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $bits in
|
||
?*) type=$type-$bits ;;
|
||
esac
|
||
|
||
# last chance mapping
|
||
|
||
set "" "" $map
|
||
while :
|
||
do case $# in
|
||
[012]) break ;;
|
||
esac
|
||
shift;shift
|
||
eval " case \$type in
|
||
$1) type=\$2; break ;;
|
||
esac"
|
||
done
|
||
_hostinfo_="$_hostinfo_ $type"
|
||
;;
|
||
esac
|
||
done
|
||
set '' $_hostinfo_
|
||
shift
|
||
_hostinfo_=$*
|
||
|
||
# restore the global state
|
||
|
||
PATH=$path
|
||
case $DEBUG in
|
||
'') exec 2>&9
|
||
exec 9>&-
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# info message
|
||
|
||
note() # message ...
|
||
{
|
||
echo $command: "$@" >&2
|
||
}
|
||
|
||
# cc checks
|
||
#
|
||
# CC: compiler base name name
|
||
# cc: full path, empty if not found
|
||
|
||
checkcc()
|
||
{
|
||
cc=
|
||
if onpath $CC
|
||
then cc=$_onpath_
|
||
else case $CC in
|
||
cc) if onpath gcc
|
||
then CC=gcc
|
||
cc=$_onpath_
|
||
fi
|
||
;;
|
||
esac
|
||
fi
|
||
case $cc in
|
||
'') case $action in
|
||
make|test) note "$CC: not found"; exit 1 ;;
|
||
*) note "warning: $CC: not found" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# some actions have their own PACKAGEROOT or kick out early
|
||
|
||
case $action in
|
||
host) eval u=$package_use
|
||
case $u in
|
||
$PACKAGE_USE)
|
||
;;
|
||
*) if onpath $0
|
||
then case $_onpath_ in
|
||
*/arch/$HOSTTYPE/bin/package)
|
||
KEEP_HOSTTYPE=1
|
||
;;
|
||
*) KEEP_HOSTTYPE=0
|
||
;;
|
||
esac
|
||
else KEEP_HOSTTYPE=0
|
||
fi
|
||
;;
|
||
esac
|
||
hostinfo $args
|
||
echo $_hostinfo_
|
||
exit 0
|
||
;;
|
||
export|setup|use)
|
||
x=
|
||
;;
|
||
*) x=
|
||
eval u=$package_use
|
||
case $u in
|
||
$PACKAGE_USE)
|
||
case :$PATH: in
|
||
*:$INSTALLROOT/bin:*)
|
||
case $LIBPATH: in
|
||
$INSTALLROOT/bin:$INSTALLROOT/lib:*)
|
||
case $SHLIB_PATH: in
|
||
$INSTALLROOT/lib:*)
|
||
x=1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
run=-
|
||
case $x in
|
||
1) : accept the current package use environment
|
||
|
||
OK=ok
|
||
KSH=$EXECROOT/bin/ksh
|
||
MAKE=nmake
|
||
NMAKE=$EXECROOT/bin/$MAKE
|
||
SUM=$EXECROOT/bin/sum
|
||
TEE=$EXECROOT/bin/tee
|
||
INITROOT=$PACKAGEROOT/src/cmd/INIT
|
||
checkcc
|
||
;;
|
||
*) hosttype=
|
||
case $KEEP_PACKAGEROOT in
|
||
0) case $action in
|
||
use) PACKAGEROOT=
|
||
case $show in
|
||
echo) exec=echo make=echo show=echo ;;
|
||
esac
|
||
set '' $args
|
||
shift
|
||
case $# in
|
||
0) ;;
|
||
*) case $1 in
|
||
-|.) ;;
|
||
/*) PACKAGEROOT=$1
|
||
;;
|
||
*) i=`echo ~$1`
|
||
if packageroot $i
|
||
then PACKAGEROOT=$i
|
||
else for i in `echo $HOME | sed -e 's,/[^/]*$,,'` $usr $use
|
||
do if packageroot $i/$1
|
||
then PACKAGEROOT=$i/$1
|
||
break
|
||
fi
|
||
done
|
||
case $PACKAGEROOT in
|
||
'') hosttype=$1 ;;
|
||
esac
|
||
fi
|
||
;;
|
||
esac
|
||
shift
|
||
;;
|
||
esac
|
||
run="$@"
|
||
;;
|
||
esac
|
||
case $PACKAGEROOT in
|
||
'') PACKAGEROOT=${PWD:-`pwd`} ;;
|
||
esac
|
||
|
||
# . must be within the PACKAGEROOT tree
|
||
|
||
i=X$PACKAGEROOT
|
||
IFS=/
|
||
set $i
|
||
IFS=$ifs
|
||
while :
|
||
do i=$1
|
||
shift
|
||
case $i in
|
||
X) break ;;
|
||
esac
|
||
done
|
||
case $PACKAGEROOT in
|
||
//*) d=/ ;;
|
||
*) d= ;;
|
||
esac
|
||
case $1 in
|
||
home) k=1 ;;
|
||
*) k=0 ;;
|
||
esac
|
||
for i
|
||
do case $i in
|
||
'') continue ;;
|
||
esac
|
||
d=$d/$i
|
||
case $k in
|
||
2) k=1
|
||
;;
|
||
1) k=0
|
||
;;
|
||
0) case $i in
|
||
arch) k=2
|
||
;;
|
||
*) if packageroot $d
|
||
then PACKAGEROOT=$d
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
INITROOT=$PACKAGEROOT/src/cmd/INIT
|
||
$show PACKAGEROOT=$PACKAGEROOT
|
||
$show export PACKAGEROOT
|
||
export PACKAGEROOT
|
||
|
||
# initialize the architecture environment
|
||
|
||
case $KEEP_HOSTTYPE in
|
||
0) hostinfo type
|
||
HOSTTYPE=$_hostinfo_
|
||
;;
|
||
1) _PACKAGE_HOSTTYPE_=$HOSTTYPE
|
||
export _PACKAGE_HOSTTYPE_
|
||
;;
|
||
esac
|
||
$show HOSTTYPE=$HOSTTYPE
|
||
$show export HOSTTYPE
|
||
export HOSTTYPE
|
||
INSTALLROOT=$PACKAGEROOT/arch/$HOSTTYPE
|
||
case $action in
|
||
admin|install|make|read|remove|test|verify|view|write)
|
||
;;
|
||
*) if test ! -d $INSTALLROOT
|
||
then INSTALLROOT=$PACKAGEROOT
|
||
fi
|
||
;;
|
||
esac
|
||
$show INSTALLROOT=$INSTALLROOT
|
||
$show export INSTALLROOT
|
||
export INSTALLROOT
|
||
|
||
# check the basic package hierarchy
|
||
|
||
case $action in
|
||
export|use)
|
||
packageroot $PACKAGEROOT || {
|
||
echo "$command: $PACKAGEROOT: invalid package root directory" >&2
|
||
exit 1
|
||
}
|
||
case $KEEP_HOSTTYPE:$hosttype in
|
||
0:?*) if test -d ${PACKAGEROOT:-.}/arch/$hosttype
|
||
then KEEP_HOSTTYPE=1
|
||
HOSTTYPE=$hosttype
|
||
else echo "$command: $hosttype: package root not found" >&2
|
||
exit 1
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
*) packageroot $PACKAGEROOT || {
|
||
case $KEEP_PACKAGEROOT in
|
||
1) ;;
|
||
*) echo "$command: $PACKAGEROOT: must be in the package root directory tree" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
case $action in
|
||
admin) ;;
|
||
*) for i in arch arch/$HOSTTYPE
|
||
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
|
||
done
|
||
for i in lib
|
||
do test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
|
||
done
|
||
;;
|
||
esac
|
||
|
||
# no $INITROOT means INIT already installed elsewhere
|
||
|
||
if test -d $INITROOT
|
||
then
|
||
# update the basic package commands
|
||
|
||
for i in execrate ignore mamprobe silent
|
||
do test -h $PACKAGEROOT/bin/$i 2>/dev/null ||
|
||
case `ls -t $INITROOT/$i.sh $PACKAGEROOT/bin/$i 2>/dev/null` in
|
||
"$INITROOT/$i.sh"*)
|
||
note update $PACKAGEROOT/bin/$i
|
||
shellmagic
|
||
case $SHELLMAGIC in
|
||
'') $exec cp $INITROOT/$i.sh $PACKAGEROOT/bin/$i || exit
|
||
;;
|
||
*) case $exec in
|
||
'') {
|
||
echo "$SHELLMAGIC"
|
||
cat $INITROOT/$i.sh
|
||
} > $PACKAGEROOT/bin/$i || exit
|
||
;;
|
||
*) echo "{
|
||
echo \"$SHELLMAGIC\"
|
||
cat $INITROOT/$i.sh
|
||
} > $PACKAGEROOT/bin/$i"
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
$exec chmod +x $PACKAGEROOT/bin/$i || exit
|
||
;;
|
||
esac
|
||
done
|
||
fi
|
||
;;
|
||
esac
|
||
path=$PATH
|
||
PATH=$INSTALLROOT/bin:$PACKAGEROOT/bin:$PATH
|
||
checkcc
|
||
PATH=$path
|
||
case $cc in
|
||
?*) if test -f $INITROOT/hello.c
|
||
then
|
||
# check if $CC (full path $cc) is a cross compiler
|
||
|
||
(
|
||
cd /tmp || exit 3
|
||
cp $INITROOT/hello.c pkg$$.c || exit 3
|
||
$cc -o pkg$$.exe pkg$$.c > pkg$$.e 2>&1 || {
|
||
if $cc -Dnew=old -o pkg$$.exe pkg$$.c > /dev/null 2>&1
|
||
then echo "$command: ${warn}$CC: must be a C compiler (not C++)" >&2
|
||
else cat pkg$$.e
|
||
echo "$command: ${warn}$CC: failed to compile and link $INITROOT/hello.c -- is it a C compiler?" >&2
|
||
fi
|
||
exit 2
|
||
}
|
||
if ./pkg$$.exe >/dev/null 2>&1
|
||
then code=0
|
||
else code=1
|
||
fi
|
||
rm -f pkg$$.*
|
||
exit $code
|
||
)
|
||
code=$?
|
||
case $code in
|
||
1) CROSS=1 ;;
|
||
esac
|
||
fi
|
||
;;
|
||
esac
|
||
EXECTYPE=$HOSTTYPE
|
||
EXECROOT=$INSTALLROOT
|
||
case $CROSS in
|
||
0) # dll hackery -- why is this so complicated?
|
||
|
||
abi=
|
||
case $HOSTTYPE in
|
||
sgi.mips[0123456789]*)
|
||
x=rld
|
||
if executable /lib32/$x || executable /lib64/$x
|
||
then case $INSTALLROOT in
|
||
*/sgi.mips[0123456789]*)
|
||
u=`echo $INSTALLROOT | sed -e 's,-[^-/]*$,,' -e 's,.$,,'`
|
||
;;
|
||
*) u=
|
||
;;
|
||
esac
|
||
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"
|
||
do eval $a
|
||
case $v in
|
||
N32) case $n:$HOSTTYPE in
|
||
*-n32:*-n32) ;;
|
||
*-n32:*) continue ;;
|
||
*:*-n32) continue ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $l in
|
||
?*) if executable ! /$l/$x
|
||
then continue
|
||
fi
|
||
;;
|
||
esac
|
||
case $u in
|
||
'') case $HOSTTYPE in
|
||
sgi.mips$n|sgi.mips$n-*)
|
||
abi="$abi 'd=$INSTALLROOT v=$v'"
|
||
;;
|
||
*) continue
|
||
;;
|
||
esac
|
||
;;
|
||
*) if test -d $u$n
|
||
then abi="$abi 'd=$u$n v=$v'"
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
fi
|
||
;;
|
||
esac
|
||
case $abi in
|
||
'') abi="'d=$INSTALLROOT v='" ;;
|
||
esac
|
||
p=0
|
||
eval "
|
||
for a in $abi
|
||
do eval \$a
|
||
eval \"
|
||
case \\\$LD_LIBRARY\${v}_PATH: in
|
||
\\\$d/lib:*)
|
||
;;
|
||
*) x=\\\$LD_LIBRARY\${v}_PATH
|
||
case \\\$x in
|
||
''|:*) ;;
|
||
*) x=:\\\$x ;;
|
||
esac
|
||
LD_LIBRARY\${v}_PATH=\$d/lib\\\$x
|
||
export LD_LIBRARY\${v}_PATH
|
||
p=1
|
||
;;
|
||
esac
|
||
\"
|
||
done
|
||
"
|
||
case $LD_LIBRARY_PATH in
|
||
'') ;;
|
||
*) for d in $lib
|
||
do case $HOSTTYPE in
|
||
*64) if test -d ${d}64
|
||
then d=${d}64
|
||
fi
|
||
;;
|
||
esac
|
||
case :$LD_LIBRARY_PATH: in
|
||
*:$d:*) ;;
|
||
*) if test -d $d
|
||
then LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$d
|
||
p=1
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
case $p in
|
||
1) $show LD_LIBRARY_PATH=$LD_LIBRARY_PATH
|
||
$show export LD_LIBRARY_PATH
|
||
export LD_LIBRARY_PATH
|
||
;;
|
||
esac
|
||
case $LIBPATH: in
|
||
$INSTALLROOT/bin:$INSTALLROOT/lib:*)
|
||
;;
|
||
*) case $LIBPATH in
|
||
'') LIBPATH=/usr/lib:/lib ;;
|
||
esac
|
||
LIBPATH=$INSTALLROOT/bin:$INSTALLROOT/lib:$LIBPATH
|
||
$show LIBPATH=$LIBPATH
|
||
$show export LIBPATH
|
||
export LIBPATH
|
||
;;
|
||
esac
|
||
case $SHLIB_PATH: in
|
||
$INSTALLROOT/lib:*)
|
||
;;
|
||
*) SHLIB_PATH=$INSTALLROOT/lib${SHLIB_PATH:+:$SHLIB_PATH}
|
||
$show SHLIB_PATH=$SHLIB_PATH
|
||
$show export SHLIB_PATH
|
||
export SHLIB_PATH
|
||
;;
|
||
esac
|
||
case $DYLD_LIBRARY_PATH: in
|
||
$INSTALLROOT/lib:*)
|
||
;;
|
||
*) DYLD_LIBRARY_PATH=$INSTALLROOT/lib${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}
|
||
$show DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH
|
||
$show export DYLD_LIBRARY_PATH
|
||
export DYLD_LIBRARY_PATH
|
||
;;
|
||
esac
|
||
case $_RLD_ROOT in
|
||
$INSTALLROOT/arch*) ;;
|
||
':') _RLD_ROOT=$INSTALLROOT/arch:/ ;;
|
||
/|*:/) _RLD_ROOT=$INSTALLROOT/arch:$_RLD_ROOT ;;
|
||
*) _RLD_ROOT=$INSTALLROOT/arch:$_RLD_ROOT:/ ;;
|
||
esac
|
||
$show _RLD_ROOT=$_RLD_ROOT
|
||
$show export _RLD_ROOT
|
||
export _RLD_ROOT
|
||
|
||
# now set up PATH
|
||
#
|
||
# NOTE: PACKAGEROOT==INSTALLROOT is possible for binary installations
|
||
|
||
case $PATH: in
|
||
$PACKAGEROOT/bin:*)
|
||
;;
|
||
*) PATH=$PACKAGEROOT/bin:$PATH
|
||
;;
|
||
esac
|
||
case $PATH: in
|
||
$INSTALLROOT/bin:*)
|
||
;;
|
||
*) PATH=$INSTALLROOT/bin:$PATH
|
||
;;
|
||
esac
|
||
$show PATH=$PATH
|
||
$show export PATH
|
||
export PATH
|
||
;;
|
||
*) for i in package proto nmake
|
||
do if onpath $i
|
||
then EXECROOT=`echo $_onpath_ | sed -e 's,//*[^/]*//*[^/]*$,,'`
|
||
EXECTYPE=`echo $EXECROOT | sed -e 's,.*/,,'`
|
||
break
|
||
fi
|
||
done
|
||
case $HOSTTYPE in
|
||
$EXECTYPE)
|
||
OCC=$CC
|
||
CC=cc
|
||
hostinfo type
|
||
EXECTYPE=$_hostinfo_
|
||
case $HOSTTYPE in
|
||
$EXECTYPE)
|
||
echo "$command: $CC: seems to be a cross-compiler" >&2
|
||
echo "$command: set HOSTTYPE to something other than the native $EXECTYPE" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
$show EXECTYPE=$EXECTYPE
|
||
$show export EXECTYPE
|
||
export EXECTYPE
|
||
;;
|
||
esac
|
||
$show EXECROOT=$EXECROOT
|
||
$show export EXECROOT
|
||
export EXECROOT
|
||
|
||
# use these if possible
|
||
|
||
OK=ok
|
||
KSH=$EXECROOT/bin/ksh
|
||
MAKE=nmake
|
||
NMAKE=$EXECROOT/bin/$MAKE
|
||
SUM=$EXECROOT/bin/sum
|
||
TEE=$EXECROOT/bin/tee
|
||
|
||
# grab a decent default shell
|
||
|
||
case $KEEP_SHELL in
|
||
0) executable "$SHELL" || SHELL=
|
||
case $SHELL in
|
||
?*) checksh $SHELL || SHELL= ;;
|
||
esac
|
||
case $SHELL in
|
||
''|/bin/*|/usr/bin/*)
|
||
case $SHELL in
|
||
'') SHELL=/bin/sh ;;
|
||
esac
|
||
for i in ksh sh bash
|
||
do if onpath $i && checksh $_onpath_
|
||
then SHELL=$_onpath_
|
||
break
|
||
fi
|
||
done
|
||
;;
|
||
*/*ksh) if executable $KSH
|
||
then SHELL=$KSH
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
# $SHELL must be /bin/sh compatible
|
||
|
||
case $SHELL in
|
||
/bin/sh);;
|
||
'') SHELL=/bin/sh
|
||
;;
|
||
*) $SHELL -c 'trap "exit 0" 0; exit 1' 2>/dev/null
|
||
case $? in
|
||
1) SHELL=/bin/sh
|
||
;;
|
||
*) # catch (our own) pipe/socket configuration mismatches
|
||
$SHELL -c "date | $SHELL -c 'read x'"
|
||
case $? in
|
||
0) ;;
|
||
*) SHELL=/bin/sh ;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
export SHELL
|
||
$show SHELL=$SHELL
|
||
$show export SHELL
|
||
COSHELL=$SHELL
|
||
export COSHELL
|
||
$show COSHELL=$COSHELL
|
||
$show export COSHELL
|
||
|
||
# tame the environment
|
||
|
||
case $action in
|
||
use) ;;
|
||
*) ENV=
|
||
ERROR_OPTIONS=
|
||
export ENV ERROR_OPTIONS
|
||
;;
|
||
esac
|
||
|
||
# finalize the views
|
||
|
||
case $USER_VPATH in
|
||
'') case $VPATH in
|
||
?*) IFS=':'
|
||
set '' $VPATH
|
||
shift
|
||
IFS=$ifs
|
||
USER_VPATH=
|
||
for i
|
||
do case $i in
|
||
*/arch/$HOSTTYPE) ;;
|
||
*/arch/*/*) ;;
|
||
*/arch/*) continue ;;
|
||
esac
|
||
if packageroot $i
|
||
then case $USER_VPATH in
|
||
'') USER_VPATH=$i ;;
|
||
?*) USER_VPATH=$USER_VPATH:$i ;;
|
||
esac
|
||
fi
|
||
done
|
||
esac
|
||
;;
|
||
esac
|
||
case $USER_VPATH in
|
||
?*) IFS=':'
|
||
set '' $USER_VPATH
|
||
shift
|
||
IFS=$ifs
|
||
USER_VPATH=
|
||
USER_VPATH_CHAIN=
|
||
p=$PACKAGEROOT
|
||
for i
|
||
do case $i in
|
||
''|$PACKAGEROOT|$INSTALLROOT)
|
||
;;
|
||
?*) USER_VPATH=$USER_VPATH:$i
|
||
USER_VPATH_CHAIN="$USER_VPATH_CHAIN $p $i"
|
||
p=$i
|
||
case $PROTOROOT in
|
||
-) executable $i/bin/mamake && PROTOROOT= ;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
PACKAGESRC=$PACKAGEROOT/lib/package
|
||
PACKAGEBIN=$INSTALLROOT/lib/package
|
||
case $action:$run in
|
||
use:-) set '' $args
|
||
shift
|
||
case $# in
|
||
0) ;;
|
||
*) shift ;;
|
||
esac
|
||
run="$@"
|
||
;;
|
||
esac
|
||
|
||
# HOSTTYPE specific package profile
|
||
|
||
if test -r $INSTALLROOT/lib/package/profile
|
||
then . $INSTALLROOT/lib/package/profile
|
||
fi
|
||
|
||
# more cygwin hassles
|
||
|
||
case $HOSTTYPE in
|
||
cygwin.*)
|
||
lose=
|
||
case $CYGWIN in
|
||
*nontsec*)
|
||
lose=ntsec
|
||
;;
|
||
*ntsec*);;
|
||
*) exe=/tmp/pkg$$.exe
|
||
rm -f $exe
|
||
: > $exe
|
||
if test -x $exe
|
||
then lose=ntsec
|
||
fi
|
||
;;
|
||
esac
|
||
case $CYGWIN in
|
||
*nobinmode*)
|
||
case $lose in
|
||
'') lose=binmode ;;
|
||
*) lose="$lose binmode" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $lose in
|
||
?*) echo "$command: $HOSTTYPE: export '$lose' in CYGWIN or languish in windows" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
# set up the view state
|
||
|
||
VIEW_bin=$INSTALLROOT VIEW_src=$PACKAGEROOT VIEW_all="$INSTALLROOT $PACKAGEROOT"
|
||
if (vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN) >/dev/null 2>&1 &&
|
||
vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN
|
||
then $show vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN
|
||
else VPATH=$INSTALLROOT:$PACKAGEROOT$USER_VPATH
|
||
$show VPATH=$VPATH
|
||
$show export VPATH
|
||
export VPATH
|
||
IFS=':'
|
||
set '' $VPATH
|
||
shift
|
||
IFS=$ifs
|
||
for i
|
||
do case $i in
|
||
*/arch/*/*)
|
||
VIEW_src="$VIEW_src $i"
|
||
;;
|
||
*/arch/*)
|
||
VIEW_bin="$VIEW_bin $i"
|
||
;;
|
||
*)
|
||
VIEW_src="$VIEW_src $i"
|
||
;;
|
||
esac
|
||
VIEW_all="$VIEW_all $i"
|
||
done
|
||
fi
|
||
|
||
# return 0 if arg in src|bin|all view
|
||
|
||
view() # [test] [-|type] [src|bin|all] file
|
||
{
|
||
case $1 in
|
||
-[dfsx])_view_T_=$1; shift ;;
|
||
*) _view_T_=-f ;;
|
||
esac
|
||
case $1 in
|
||
-) _view_t_= ;;
|
||
*) _view_t_=$1 ;;
|
||
esac
|
||
shift
|
||
case $1 in
|
||
all) shift; _view_v_=$VIEW_all ;;
|
||
bin) shift; _view_v_=$VIEW_bin ;;
|
||
src) shift; _view_v_=$VIEW_src ;;
|
||
*) _view_v_=$VIEW_all ;;
|
||
esac
|
||
case $1 in
|
||
/*) if test $_view_T_ $1
|
||
then _view_=$1
|
||
return 0
|
||
fi
|
||
;;
|
||
*) for _view_d_ in $_view_v_
|
||
do if test $_view_T_ $_view_d_/$1
|
||
then _view_=$_view_d_/$1
|
||
return 0
|
||
fi
|
||
done
|
||
;;
|
||
esac
|
||
_view_=
|
||
case $_view_t_ in
|
||
?*) echo $command: $1: $_view_t_ not found >&2 ;;
|
||
esac
|
||
return 1
|
||
}
|
||
|
||
# determine the package and targets
|
||
|
||
case $action in
|
||
admin) case $admin_action in
|
||
results)action=$admin_action
|
||
set '' $admin_args
|
||
shift;shift
|
||
admin_args="admin $*"
|
||
case $admin_on in
|
||
'') target=$admin_args ;;
|
||
*) target="on $admin_on $admin_args" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
release)set '' $args
|
||
target=
|
||
while :
|
||
do shift
|
||
case $1 in
|
||
-|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
|
||
target="$target $1"
|
||
;;
|
||
*) break
|
||
;;
|
||
esac
|
||
done
|
||
package=$*
|
||
;;
|
||
setup) # { update read } with optional (bin|fun|include|lib) symlinks
|
||
# flat option sets up { bin fun include lib } symlinks from
|
||
# $INSTALLROOT to $PACKAGEROOT
|
||
|
||
# . is the package root
|
||
|
||
set '' $args
|
||
shift
|
||
types=
|
||
url=
|
||
while :
|
||
do case $# in
|
||
0) break ;;
|
||
esac
|
||
case $1 in
|
||
--) shift
|
||
break
|
||
;;
|
||
flat) flat=1 # backwards compatibility -- documentation dropped
|
||
;;
|
||
*://*|*.url)
|
||
url=$1
|
||
shift
|
||
break
|
||
;;
|
||
*) types="$types $1"
|
||
;;
|
||
esac
|
||
shift
|
||
done
|
||
if test ! -d $PACKAGEROOT/lib/package/tgz
|
||
then $exec mkdir -p $PACKAGEROOT/lib/package/tgz || exit
|
||
fi
|
||
case " $types " in
|
||
*" source "*)
|
||
case " $* " in
|
||
' ') ;;
|
||
*" INIT "*)
|
||
;;
|
||
*) view - all src/cmd/INIT ||
|
||
set INIT "$@"
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
packages=`$0 $global authorize "$authorize" password "$password" update setup $types $url "$@" PACKAGEROOT=$PACKAGEROOT`
|
||
case $packages in
|
||
?*) $0 $global read $packages PACKAGEROOT=$PACKAGEROOT
|
||
esac
|
||
exit
|
||
;;
|
||
*) package=
|
||
target=
|
||
set '' $args
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break ;;
|
||
esac
|
||
case $1 in
|
||
''|-) target="$target $package"
|
||
package=
|
||
;;
|
||
*) if view - src "lib/package/$1.pkg"
|
||
then package="$package $1"
|
||
else target="$target $package $1"
|
||
package=
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
|
||
# flatten -- assumes symlink support
|
||
|
||
case $flat in
|
||
1) case $action in
|
||
make|read|setup|update|use|view)
|
||
if test ! -d $INSTALLROOT
|
||
then $exec mkdir -p $INSTALLROOT || exit
|
||
fi
|
||
for i in bin include lib fun man share
|
||
do if test ! -d $INSTALLROOT/../../$i
|
||
then $exec mkdir $INSTALLROOT/../../$i
|
||
fi
|
||
if test ! -d $INSTALLROOT/$i
|
||
then if test ! -h $INSTALLROOT/$i
|
||
then $exec ln -s ../../$i $INSTALLROOT/$i
|
||
fi
|
||
elif test ! -h $INSTALLROOT/$i
|
||
then for x in $INSTALLROOT/$i/.[a-z]* $INSTALLROOT/$i/*
|
||
do if test -f $x -o -d $x
|
||
then if test ! -d $INSTALLROOT/$i/$x || test ! -d $INSTALLROOT/../../$i/$x
|
||
then $exec mv $x $INSTALLROOT/../../$i
|
||
fi
|
||
fi
|
||
done
|
||
$exec rm -rf $INSTALLROOT/$i
|
||
$exec ln -s ../../$i $INSTALLROOT/$i
|
||
fi
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
# check that cmd args are up to date a.out's
|
||
|
||
checkaout() # cmd ...
|
||
{
|
||
case $PROTOROOT in
|
||
-) PROTOROOT=
|
||
case $* in
|
||
ratz) if test -f $INITROOT/ratz.c -a -w $PACKAGEROOT
|
||
then test -f $INITROOT/hello.c || {
|
||
cat > $INITROOT/hello.c <<'!'
|
||
#ifndef printf
|
||
#include <stdio.h>
|
||
#endif
|
||
int main() { int new = 0; printf("hello world\n"); return new;}
|
||
!
|
||
}
|
||
test -f $INITROOT/p.c || {
|
||
cat > $INITROOT/p.c <<'!'
|
||
/*
|
||
* small test for prototyping cc
|
||
*/
|
||
|
||
int main(int argc, char** argv) { return argc || argv; }
|
||
!
|
||
}
|
||
fi
|
||
;;
|
||
esac
|
||
test -f $INITROOT/hello.c -a -f $INITROOT/p.c -a -w $PACKAGEROOT || {
|
||
for i
|
||
do onpath $i || {
|
||
echo "$command: $i: command not found" >&2
|
||
return 1
|
||
}
|
||
done
|
||
return 0
|
||
}
|
||
case $cc in
|
||
'') _PACKAGE_cc=0
|
||
;;
|
||
*) _PACKAGE_cc=1
|
||
test -f $INITROOT/hello.c -a -f $INITROOT/p.c || {
|
||
echo "$command: $INITROOT: INIT package source not found" >&2
|
||
return 1
|
||
}
|
||
executable $INSTALLROOT/bin/nmake || {
|
||
# check for prototyping cc
|
||
# NOTE: proto.c must be K&R compatible
|
||
|
||
$CC -c $INITROOT/p.c >/dev/null 2>&1
|
||
c=$?
|
||
rm -f p.*
|
||
test 0 != "$c" && {
|
||
checkaout proto || return
|
||
PROTOROOT=$PACKAGEROOT/proto
|
||
$show PROTOROOT=$PACKAGEROOT/proto
|
||
export PROTOROOT
|
||
INITPROTO=$PROTOROOT/src/cmd/INIT
|
||
note proto convert $PACKAGEROOT/src into $PROTOROOT/src
|
||
if test -d $PACKAGEROOT/src/cmd/nmake
|
||
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"
|
||
else dirs="src"
|
||
fi
|
||
(
|
||
if test -f $PROTOROOT/UPDATE
|
||
then newer="-newer $PROTOROOT/UPDATE"
|
||
else newer=""
|
||
fi
|
||
case $exec in
|
||
'') cd $PACKAGEROOT
|
||
find $dirs -name '*.[CcHh]' $newer -print | proto -v -L - -C proto
|
||
;;
|
||
*) $exec cd $PACKAGEROOT
|
||
$exec "find $dirs -name '*.[CcHh]' $newer -print | proto -L - -C proto"
|
||
;;
|
||
esac
|
||
$exec touch $PROTOROOT/UPDATE
|
||
)
|
||
if (vpath $INSTALLROOT - $INSTALLROOT $PROTOROOT $PROTOROOT $PACKAGEROOT) >/dev/null 2>&1 &&
|
||
vpath $INSTALLROOT - $INSTALLROOT $PROTOROOT $PROTOROOT $PACKAGEROOT
|
||
then $show vpath $INSTALLROOT $PROTOROOT $PROTOROOT $PACKAGEROOT $USER_VPATH_CHAIN
|
||
else VPATH=$INSTALLROOT:$PROTOROOT:$PACKAGEROOT$USER_VPATH
|
||
$show VPATH=$VPATH
|
||
export VPATH
|
||
fi
|
||
}
|
||
}
|
||
for i in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
|
||
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || return
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $_PACKAGE_cc in
|
||
'') case $cc in
|
||
'') _PACKAGE_cc=0 ;;
|
||
*) _PACKAGE_cc=1 ;;
|
||
esac
|
||
;;
|
||
esac
|
||
for i
|
||
do eval j=\$_PACKAGE_AOUT_$i
|
||
case $j in
|
||
'') eval _PACKAGE_AOUT_$i=1 ;;
|
||
*) continue ;;
|
||
esac
|
||
k=$_PACKAGE_cc
|
||
if test -f $INITROOT/$i.c
|
||
then k=${k}1
|
||
else k=${k}0
|
||
fi
|
||
if executable $EXECROOT/bin/$i
|
||
then k=${k}1
|
||
else k=${k}0
|
||
fi
|
||
: $k : compiler : source : binary :
|
||
case $k in
|
||
*00) view - bin/$i && continue ;;
|
||
esac
|
||
case $k in
|
||
000) echo "$command: $i: not found: download the INIT package $HOSTTYPE binary to continue" >&2
|
||
return 1
|
||
;;
|
||
010) echo "$command: $i: not found: set CC=C-compiler or download the INIT package $HOSTTYPE binary to continue" >&2
|
||
return 1
|
||
;;
|
||
100) echo "$command: $i: not found: download the INIT package source or $HOSTTYPE binary to continue" >&2
|
||
return 1
|
||
;;
|
||
110) case $CROSS in
|
||
1) echo "$command: $i: not found: make the local $EXECTYPE binary package before $HOSTTYPE" >&2
|
||
return 1
|
||
;;
|
||
esac
|
||
;;
|
||
?01) : accept binary
|
||
continue
|
||
;;
|
||
011) : accept binary
|
||
continue
|
||
;;
|
||
??1) case $CROSS in
|
||
1) continue ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case `ls -t $INITROOT/$i.c $INSTALLROOT/bin/$i 2>/dev/null` in
|
||
"$INITROOT/$i.c"*)
|
||
note update $INSTALLROOT/bin/$i
|
||
if test proto != "$i" && executable $INSTALLROOT/bin/proto
|
||
then case $exec in
|
||
'') $INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c || return ;;
|
||
*) $exec "$INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c" ;;
|
||
esac
|
||
$exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $i.c || return
|
||
$exec rm -f $i.c
|
||
else if test ! -d $INSTALLROOT/bin
|
||
then for j in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
|
||
do test -d $PACKAGEROOT/$j || $exec mkdir $PACKAGEROOT/$j || return
|
||
done
|
||
fi
|
||
if test '' != "$PROTOROOT" -a -f $INITPROTO/$i.c
|
||
then $exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITPROTO/$i.c || return
|
||
else $exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITROOT/$i.c || return
|
||
fi
|
||
case $i:$exec in
|
||
proto:) test -d $INSTALLROOT/include || mkdir $INSTALLROOT/include
|
||
$INSTALLROOT/bin/proto -f /dev/null > $i.c
|
||
cmp -s $i.c $INSTALLROOT/include/prototyped.h 2>/dev/null || cp $i.c $INSTALLROOT/include/prototyped.h
|
||
rm $i.c
|
||
;;
|
||
esac
|
||
fi
|
||
test -f $i.o && $exec rm -f $i.o
|
||
i=$PATH
|
||
PATH=/bin
|
||
PATH=$i
|
||
;;
|
||
esac
|
||
done
|
||
return 0
|
||
}
|
||
|
||
# check package requirements against received packages
|
||
|
||
requirements() # source|binary [ package ]
|
||
{
|
||
case $1 in
|
||
binary) r=$VIEW_BIN ;;
|
||
source) r=$VIEW_SRC ;;
|
||
*) r=$VIEW_ALL ;;
|
||
esac
|
||
shift
|
||
case $1 in
|
||
'') x= ;;
|
||
*) x=$* ;;
|
||
esac
|
||
set ''
|
||
for d in $r
|
||
do set "$@" $d/gen/*.ver
|
||
case $x in
|
||
'') set "$@" $d/gen/*.req
|
||
;;
|
||
*) for p in $x
|
||
do set "$@" $d/gen/$p.req
|
||
done
|
||
;;
|
||
esac
|
||
done
|
||
shift
|
||
e=0
|
||
x=$*
|
||
y=
|
||
n=
|
||
set ''
|
||
for i in $x
|
||
do p=`echo $i | sed -e 's,.*/,,' -e 's,\....$,,'`
|
||
if test -f $i
|
||
then set "$@" $i
|
||
y="$y $p"
|
||
else case $p in
|
||
'*') ;;
|
||
*) n="$n $p" ;;
|
||
esac
|
||
fi
|
||
done
|
||
for i in $n
|
||
do case " $y " in
|
||
*" $i "*)
|
||
;;
|
||
*) echo "$command: $i: must read or write package" >&2
|
||
e=1
|
||
;;
|
||
esac
|
||
done
|
||
case $e in
|
||
1) exit 1 ;;
|
||
esac
|
||
shift
|
||
test 0 != "$#" && release=`sort -r "$@" | {
|
||
q=
|
||
e=0
|
||
o=
|
||
while read p v r s
|
||
do q="$q
|
||
$v $r"
|
||
case $p in
|
||
$o) continue ;;
|
||
esac
|
||
case $s in
|
||
0) e=1
|
||
case $r in
|
||
base) echo "$command: base package $p.$v or newer required" >&2 ;;
|
||
*) echo "$command: delta package $p.$v.$r or newer required" >&2 ;;
|
||
esac
|
||
;;
|
||
esac
|
||
o=$p
|
||
done
|
||
case $e in
|
||
0) echo "$q" | sort | { read v r; read v r; echo $v; } ;;
|
||
1) echo ERROR ;;
|
||
esac
|
||
}`
|
||
case $release in
|
||
ERROR) case $force in
|
||
0) exit 1 ;;
|
||
esac
|
||
;;
|
||
?*) eval `echo $release | sed -e 's,\(.*\)-\(.*\)-\(.*\),yy=\1 mm=\2 dd=\3,'`
|
||
# slide back 4 months
|
||
case $mm in
|
||
01) mm=09 dd=1 ;;
|
||
02) mm=10 dd=1 ;;
|
||
03) mm=11 dd=1 ;;
|
||
04) mm=12 dd=1 ;;
|
||
05) mm=01 dd=0 ;;
|
||
06) mm=02 dd=0 ;;
|
||
07) mm=03 dd=0 ;;
|
||
08) mm=04 dd=0 ;;
|
||
09) mm=05 dd=0 ;;
|
||
10) mm=06 dd=0 ;;
|
||
11) mm=07 dd=0 ;;
|
||
12) mm=08 dd=0 ;;
|
||
esac
|
||
case $dd in
|
||
1) yy=`expr $yy - 1` ;;
|
||
esac
|
||
release=$yy-$mm-01
|
||
count=1
|
||
lo=$release
|
||
release="-f $release -r $count"
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# write ordered package prerequisite list to the standard output
|
||
|
||
order() # [ package ]
|
||
{
|
||
_order_t_=lib/package/tgz
|
||
case $action in
|
||
binary) _order_a_=.$HOSTTYPE ;;
|
||
*) _order_a_= ;;
|
||
esac
|
||
_order_n_=$#
|
||
case $_order_n_ in
|
||
0) _order_p_=
|
||
for _order_v_ in $VIEW_all
|
||
do for _order_f_ in $_order_v_/lib/package/*.pkg
|
||
do if test -f $_order_f_
|
||
then _order_p_="$_order_p_ $_order_f_"
|
||
fi
|
||
done
|
||
done
|
||
set '' $_order_p_
|
||
shift
|
||
esac
|
||
{
|
||
if test ratz != "$*"
|
||
then for _order_f_ in ratz INIT
|
||
do if view -s - src $_order_t_/$_order_f_$_order_a_.tim
|
||
then echo $_order_f_ $_order_f_
|
||
fi
|
||
done
|
||
fi
|
||
for _order_f_
|
||
do while :
|
||
do view - src $_order_f_ && break
|
||
case $_order_f_ in
|
||
*.pkg) ;;
|
||
*) _order_f_=$_order_f_.pkg; view - src $_order_f_ && break ;;
|
||
esac
|
||
case $_order_f_ in
|
||
*/*) ;;
|
||
*) _order_f_=lib/package/$_order_f_; view - src $_order_f_ && break ;;
|
||
esac
|
||
echo "$command: $_order_f_: not a package" >&2
|
||
continue 2
|
||
done
|
||
_order_f_=$_view_
|
||
_order_p_=`echo $_order_f_ | sed -e 's,.*/,,' -e 's,\.pkg$,,'`
|
||
case $_order_n_ in
|
||
0) view -s - src $_order_t_/$_order_p_$_order_a_.tim || continue ;;
|
||
esac
|
||
echo $_order_p_ $_order_p_
|
||
case $_order_p_ in
|
||
INIT|ratz)
|
||
;;
|
||
*) echo INIT $_order_p_
|
||
;;
|
||
esac
|
||
{
|
||
req= req_sep=
|
||
op=::
|
||
while read line
|
||
do IFS=' \\'
|
||
set '' $line
|
||
IFS=$ifs
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break ;;
|
||
esac
|
||
case $1 in
|
||
:*:) op=$1
|
||
;;
|
||
INIT|'$('*|*')')
|
||
;;
|
||
*) case $op in
|
||
:REQUIRES:)
|
||
req="$req$req_sep$1"
|
||
req_sep=" "
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
for _order_i_ in $req
|
||
do if view - src lib/package/$_order_i_.pkg
|
||
then case $_order_u_ in
|
||
0) view -s - src $_order_t_/$_order_i_$_order_a_.tim || continue ;;
|
||
esac
|
||
echo $_order_i_ $_order_i_; echo INIT $_order_i_; echo $_order_i_ $_order_p_
|
||
fi
|
||
done
|
||
} < $_order_f_
|
||
done
|
||
} | tsort
|
||
}
|
||
|
||
# generate the package component list in _components_
|
||
|
||
components() # [ package ]
|
||
{
|
||
_components_=
|
||
for p
|
||
do case $p in
|
||
'') ;;
|
||
INIT) case " $_components_ " in
|
||
*" $p "*) ;;
|
||
*) _components_="$_components_ $p" ;;
|
||
esac
|
||
;;
|
||
*) if view - src lib/package/$p.pkg
|
||
then p=$_view_
|
||
op=::
|
||
exec < $p
|
||
while read line
|
||
do IFS=' \\'
|
||
set '' $line
|
||
IFS=$ifs
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break ;;
|
||
esac
|
||
case $1 in
|
||
:*:) op=$1
|
||
;;
|
||
INIT|'$('*|*')')
|
||
;;
|
||
*) case $op in
|
||
:PACKAGE:)
|
||
case " $_components_ " in
|
||
*" $1 "*) ;;
|
||
*) _components_="$_components_ $1" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
exec < /dev/null
|
||
elif test -d $PACKAGEROOT/src/cmd/$p -o -d $PACKAGEROOT/src/lib/$p
|
||
then _components_="$_components_ $p"
|
||
else echo "$command: $p: package or component not found" >&2
|
||
exit 1
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
}
|
||
|
||
# list main environment values
|
||
|
||
showenv()
|
||
{
|
||
case $1 in
|
||
''|make)for __i__ in CC SHELL $env
|
||
do eval echo $__i__='$'$__i__
|
||
done
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# capture command output
|
||
|
||
capture() # file command ...
|
||
{
|
||
case $make:$noexec in
|
||
:) case $action in
|
||
install|make|view)
|
||
o=$action
|
||
;;
|
||
*) case $package in
|
||
''|*' '*)
|
||
o=$action
|
||
;;
|
||
*) o=$package
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $action in
|
||
write) d=$PACKAGESRC/gen ;;
|
||
*) d=$PACKAGEBIN/gen ;;
|
||
esac
|
||
test -d $d || $exec mkdir $d
|
||
o=$d/$o
|
||
case $o in
|
||
$output)o=$o.out
|
||
s=
|
||
;;
|
||
*) output=$o
|
||
if test -f $o.old
|
||
then mv $o.old $o.out.1
|
||
if test -f $o.out
|
||
then mv $o.out $o.out.2
|
||
fi
|
||
elif test -f $o.out
|
||
then for i in `ls -t $o.out.? 2>/dev/null`
|
||
do break
|
||
done
|
||
case $i in
|
||
*.1) i=2 ;;
|
||
*.2) i=3 ;;
|
||
*.3) i=4 ;;
|
||
*.4) i=5 ;;
|
||
*.5) i=6 ;;
|
||
*.6) i=7 ;;
|
||
*.7) i=8 ;;
|
||
*.8) i=9 ;;
|
||
*) i=1 ;;
|
||
esac
|
||
mv $o.out $o.out.$i
|
||
fi
|
||
o=$o.out
|
||
: > $o
|
||
note $action output captured in $o
|
||
s="$command: $action start at `date` in $INSTALLROOT"
|
||
case $quiet in
|
||
0) trap "echo \"$command: $action done at \`date\`\" in $INSTALLROOT 2>&1 | \$TEE -a $o" 0 1 2 ;;
|
||
*) trap "echo \"$command: $action done at \`date\`\" in $INSTALLROOT >> $o" 0 1 2 ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $quiet in
|
||
0) if executable ! $TEE
|
||
then TEE=tee
|
||
fi
|
||
# Connect 'tee' to a FIFO instead of a pipe, so that the build is invoked from
|
||
# the main shell environment and its exit status can be used for $error_status
|
||
rm -f $o.fifo
|
||
mkfifo -m 600 $o.fifo || exit
|
||
(
|
||
sleep 1
|
||
# unlink early
|
||
exec rm $o.fifo
|
||
) &
|
||
$TEE -a $o < $o.fifo &
|
||
{
|
||
case $s in
|
||
?*) echo "$s" ;;
|
||
esac
|
||
showenv $action
|
||
"$@"
|
||
} < /dev/null > $o.fifo 2>&1
|
||
;;
|
||
*) {
|
||
case $s in
|
||
?*) echo "$s" ;;
|
||
esac
|
||
showenv $action
|
||
"$@"
|
||
} < /dev/null > $o 2>&1
|
||
;;
|
||
esac
|
||
;;
|
||
*) $make "$@"
|
||
;;
|
||
esac
|
||
exit_status=$?
|
||
if test "$exit_status" -gt "$error_status"
|
||
then error_status=$exit_status
|
||
fi
|
||
}
|
||
|
||
package_install() # dest sum
|
||
{
|
||
dest=$1 sum=$2
|
||
ot=
|
||
code=0
|
||
sed -e '/ /!d' -e 's,[^ ]* ,,' -e 's, \(arch/[^/]*\)/, \1 ,' -e '/ arch\//!s,^[^ ]* [^ ]* [^ ]*,& .,' -e 's,/\([^ /]*\)$, \1,' $sum |
|
||
while read mode user group arch dir file
|
||
do case $flat:$arch in
|
||
1:*|?:.)t=$dest/$dir ;;
|
||
*) t=$dest/$arch/$dir ;;
|
||
esac
|
||
case $t in
|
||
$ot) ;;
|
||
*) if test ! -d "$t"
|
||
then $exec mkdir -p "$t" || exit
|
||
fi
|
||
ot=$t
|
||
;;
|
||
esac
|
||
case $file in
|
||
?*) case $arch in
|
||
.) f=$dir/$file ;;
|
||
*) f=$arch/$dir/$file ;;
|
||
esac
|
||
if test -f "$f"
|
||
then t=$t/$file
|
||
case $quiet in
|
||
0) echo "$t" ;;
|
||
esac
|
||
$exec cp -f "$f" "$t" || code=1
|
||
$exec chmod $mode "$t" || code=1
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
return $code
|
||
}
|
||
|
||
package_verify() # sum
|
||
{
|
||
$exec $SUM -cp $1
|
||
}
|
||
|
||
make_recurse() # dir
|
||
{
|
||
for _make_recurse_j in $makefiles
|
||
do if view - $1/$_make_recurse_j
|
||
then return
|
||
fi
|
||
done
|
||
if test -d $1
|
||
then case $exec in
|
||
'') echo :MAKE: > $1/Makefile || exit ;;
|
||
*) $exec "echo :MAKE: > $1/Makefile" ;;
|
||
esac
|
||
fi
|
||
}
|
||
|
||
get() # host path [ file size ]
|
||
{
|
||
case $HURL in
|
||
'') HURL=.
|
||
for i in wget lynx curl
|
||
do if onpath $i
|
||
then HURL=$i
|
||
break;
|
||
fi
|
||
done
|
||
AUTHORIZE="User-Agent: package AT&T Research\\r\\n"
|
||
case $HURL:$authorize in
|
||
.:?*) AUTHORIZE="${AUTHORIZE}Authorization: Basic `print -n -r -- $authorize:$password | uuencode -h -x base64`\\r\\n" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
getfd=8
|
||
case $3 in
|
||
'') case $HURL in
|
||
.) host=$1
|
||
path=$2
|
||
while :
|
||
do eval "exec $getfd<> /dev/tcp/$host/80" || exit
|
||
case $path in
|
||
/*) ;;
|
||
*) path=/$path ;;
|
||
esac
|
||
print "GET $path HTTP/1.0\\r\\nHost: $host\\r\\n$AUTHORIZE\\r" >&$getfd
|
||
cat <&8 > get.tmp
|
||
got=`sed -e 1q get.tmp`
|
||
case $got in
|
||
*" "200" "*)
|
||
got=`sed -e '1,/^.$/d' -e '/^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]/!d' get.tmp`
|
||
: > get.err
|
||
code=0
|
||
break
|
||
;;
|
||
*" "30[123]" "*)
|
||
got=`sed -e '/^Location: /!d' -e 's,^Location: \(.*\)://\([^/]*\)\(/.*\),prot='\''\1'\'' host='\''\2'\'' path='\''\3'\'',' get.tmp`
|
||
case $got in
|
||
'') rm get.tmp
|
||
echo "$command: $action: $url: redirect error" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
eval $got
|
||
;;
|
||
*) rm get.tmp
|
||
echo "$command: $action: $url: $got" >&2
|
||
echo '' "$got" > get.err
|
||
code=1
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
curl) case $authorize in
|
||
'') curl -s -L -o get.tmp http://$1/$2 2> get.err; code=$? ;;
|
||
*) curl -s -L -o get.tmp -u "$authorize":"$password" http://$1/$2 2> get.err; code=$? ;;
|
||
esac
|
||
got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp 2>/dev/null`
|
||
case $code in
|
||
0) if grep '^<H1>Authorization Required</H1>' get.tmp > get.err
|
||
then code=1
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
hurl) case $authorize in
|
||
'') hurl http://$1/$2 > get.tmp 2> get.err; code=$? ;;
|
||
*) hurl -a "$authorize":"$password" http://$1/$2 > get.tmp 2> get.err; code=$? ;;
|
||
esac
|
||
got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp`
|
||
;;
|
||
lynx) case $authorize in
|
||
'') lynx -source http://$1/$2 > get.tmp 2> get.err; code=$? ;;
|
||
*) lynx -source -auth "$authorize":"$password" http://$1/$2 > get.tmp 2> get.err; code=$? ;;
|
||
esac
|
||
got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp`
|
||
;;
|
||
wget) wget -nv -O get.tmp ${authorize:+--http-user="$authorize"} ${password:+--http-passwd="$password"} http://$1/$2 2> get.err
|
||
code=$?
|
||
got=`grep '^[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYZ]' get.tmp 2>/dev/null`
|
||
;;
|
||
*) echo $command: $action: $HURL: url get command not found >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
if test 0 != "$code"
|
||
then case `cat get.err get.tmp 2>/dev/null` in
|
||
*[Aa][Uu][Tt][Hh][Oo][Rr][Ii][SsZz]*|*[Dd][Ee][Nn][Ii][Ee][Dd]*)
|
||
echo $command: $action: authorization required -- see $url for license acceptance authorization name and password >&2
|
||
;;
|
||
*) cat get.err
|
||
;;
|
||
esac
|
||
rm -f get.tmp get.err
|
||
echo $command: $action: $2: download failed >&2
|
||
exit 1
|
||
fi
|
||
rm -f get.tmp get.err
|
||
;;
|
||
*) case $exec in
|
||
'') echo "$3 ($4 bytes):" >&2
|
||
case $HURL in
|
||
.) eval "exec $getfd<> /dev/tcp/$1/80" || exit
|
||
path=$2/$3
|
||
case $path in
|
||
/*) ;;
|
||
*) path=/$path ;;
|
||
esac
|
||
print "GET $path HTTP/1.0\\r\\nHost: $host\\r\\n$AUTHORIZE\\r" >&$getfd
|
||
read got <&$getfd
|
||
case $got in
|
||
*" 200 "*)
|
||
code=0
|
||
: > get.err
|
||
;;
|
||
*) echo '' "$got" > get.err
|
||
code=1
|
||
;;
|
||
esac
|
||
while read got <&$getfd
|
||
do case $got in
|
||
''|?) break ;;
|
||
esac
|
||
done
|
||
cat <&$getfd > get.tmp
|
||
;;
|
||
curl) case $authorize in
|
||
'') curl -s -L -o get.tmp http://$1/$2/$3 2> get.err; code=$? ;;
|
||
*) curl -s -L -o get.tmp -u "$authorize":"$password" http://$1/$2/$3 2> get.err; code=$?
|
||
esac
|
||
case $code in
|
||
0) if grep '^<H1>Authorization Required</H1>' get.tmp > get.err
|
||
then code=1
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
hurl) case $authorize in
|
||
'') ksh -x hurl http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
|
||
*) ksh -x hurl -a "$authorize":"$password" http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
|
||
esac
|
||
;;
|
||
lynx) case $authorize in
|
||
'') lynx -source http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
|
||
*) lynx -source -auth "$authorize":"$password" http://$1/$2/$3 > get.tmp 2> get.err; code=$? ;;
|
||
esac
|
||
;;
|
||
wget) wget -nv -O get.tmp ${authorize:+--http-user="$authorize"} ${password:+--http-passwd="$password"} http://$1/$2/$3 2> get.err
|
||
code=$?
|
||
;;
|
||
*) echo $command: $action: $HURL: url get command not found >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
if test 0 != "$code"
|
||
then case `cat get.err get.tmp` in
|
||
*[Aa][Uu][Tt][Hh][Oo][Rr][Ii][SsZz]*|*[Dd][Ee][Nn][Ii][Ee][Dd]*)
|
||
echo $command: $action: authorization required -- see $url for license acceptance authorization name and password >&2
|
||
;;
|
||
*) cat get.err
|
||
;;
|
||
esac
|
||
rm get.tmp get.err
|
||
echo $command: $action: $3: download failed >&2
|
||
exit 1
|
||
fi
|
||
rm get.err
|
||
case $checksum:$5 in
|
||
:*|*:-) z=`wc -c < get.tmp`
|
||
case " $z " in
|
||
*" $4 "*)
|
||
;;
|
||
*) rm -f get.tmp
|
||
echo $command: $3: download error: expected $4 bytes, got $z >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
*) z=`$checksum < get.tmp | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'`
|
||
case " $z " in
|
||
*" $5 "*)
|
||
;;
|
||
*) rm -f get.tmp
|
||
echo $command: $3: download $checksum error: expected $5, got $z >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
mv get.tmp $3 || exit
|
||
;;
|
||
*) echo "$3 ($4 bytes)" >&2
|
||
;;
|
||
esac
|
||
esac
|
||
}
|
||
|
||
# generate copyright notice
|
||
|
||
copyright()
|
||
{
|
||
if test -f $1.lic
|
||
then echo $1 package general copyright notice
|
||
echo
|
||
proto -c'#' -p -s -l $1.lic -o type=verbose,author='*' /dev/null
|
||
return 0
|
||
fi
|
||
case $1 in
|
||
*-*) eval `echo '' $1 | sed 's/\([^-]*\)-\(.*\)/__j__="\1" __i__="\2"/'`
|
||
if copyright $__i__ || copyright $__j__
|
||
then return 0
|
||
fi
|
||
;;
|
||
esac
|
||
return 1
|
||
}
|
||
|
||
# run remote make on host
|
||
|
||
remote() # host no-exec-background
|
||
{
|
||
host=$1
|
||
background=$2
|
||
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
|
||
case $keep in
|
||
1*) ;;
|
||
*) return ;;
|
||
esac
|
||
case $host in
|
||
$main) ;;
|
||
*) case $exec in
|
||
'') exec > $admin_log/$log 2>&1 ;;
|
||
*) echo "exec > $admin_log/$log 2>&1" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
if $admin_ping $name >/dev/null 2>&1 || $admin_ping $name >/dev/null 2>&1
|
||
then cmd=". ./.profile"
|
||
case $root in
|
||
.) root=
|
||
;;
|
||
*) cmd="$cmd && cd $root"
|
||
root=$root/
|
||
;;
|
||
esac
|
||
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='"
|
||
case $admin_binary in
|
||
'') snarf= ;;
|
||
esac
|
||
case $snarf in
|
||
'') $exec $rsh $user$name "$cmd" $background
|
||
;;
|
||
*?) rcp=`echo $rsh | sed 's/\(.\).*/\1/'`cp
|
||
case $background in
|
||
?*) $exec "{" ;;
|
||
esac
|
||
$exec $rsh $user$name "$cmd"
|
||
eval lst=$admin_list
|
||
case $admin_pkgs in
|
||
'') filter=cat ;;
|
||
*) filter="egrep lib/package/tgz/($admin_pkgs)\\." ;;
|
||
esac
|
||
if $exec $rcp $user$name:${root}lib/package/tgz/$lst $PACKAGESRC/tgz
|
||
then $exec $rcp `$filter $PACKAGESRC/tgz/$lst | sed "s,^,$user$name:,"` $PACKAGESRC/tgz
|
||
else echo "$command: $user$name:${root}lib/package/tgz/$lst: not found" >&2
|
||
fi
|
||
case $background in
|
||
?*) $exec "} $background" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
else echo "$command: $name: down" >&2
|
||
fi
|
||
}
|
||
|
||
# update package_src
|
||
|
||
checksrc()
|
||
{
|
||
case $package_src in
|
||
'') package_src=$src
|
||
for _i_ in `cd $PACKAGESRC; ls *.def *.lic *.pkg 2>/dev/null | sed 's/[-.].*//'`
|
||
do case " $package_src " in
|
||
*" $_i_ "*)
|
||
;;
|
||
*) package_src="$package_src $_i_"
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# check for native ascii 0:yes 1:no
|
||
|
||
__isascii__=
|
||
|
||
isascii()
|
||
{
|
||
case $__isascii__ in
|
||
'') case `echo A | od -o | sed -e 's/[ ]*$//' -e '/[ ]/!d' -e 's/.*[ ]//'` in
|
||
005101|040412) __isascii__=0 ;;
|
||
*) __isascii__=1 ;;
|
||
esac
|
||
esac
|
||
return $__isascii__
|
||
}
|
||
|
||
error_status=0
|
||
|
||
case $action in
|
||
|
||
admin) while test ! -f $admin_db
|
||
do case $admin_db in
|
||
/*) echo $command: $action: $admin_db: data file not found >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
view file src lib/package/admin/$admin_db || exit 1
|
||
admin_db=$_view_
|
||
done
|
||
admin_components=
|
||
case $admin_action in
|
||
list) cat $admin_db
|
||
exit
|
||
;;
|
||
test) set $admin_args
|
||
while :
|
||
do case $# in
|
||
1) break ;;
|
||
esac
|
||
shift
|
||
case $1 in
|
||
*=*) ;;
|
||
*) admin_components=-$1
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
: all work done in $PACKAGESRC/admin
|
||
cd $PACKAGESRC/admin || exit
|
||
checksrc
|
||
packages=
|
||
admin_log=${admin_action}${admin_components}.log
|
||
exec < $admin_db || exit
|
||
test -d $admin_log || $exec mkdir $admin_log || exit
|
||
case $admin_on in
|
||
'') admin_on="*" ;;
|
||
esac
|
||
hostname=
|
||
hosts=
|
||
logs=
|
||
local_hosts=
|
||
local_types=
|
||
pids=
|
||
remote_hosts=
|
||
sync_hosts=
|
||
admin_host=_admin_host_
|
||
admin_out=
|
||
case " $admin_args " in
|
||
*" write binary "*|*" write "*" binary "*)
|
||
admin_binary=1
|
||
;;
|
||
*) admin_binary=
|
||
;;
|
||
esac
|
||
case $only in
|
||
1) admin_args="only $admin_args" ;;
|
||
esac
|
||
trap 'kill $pids >/dev/null 2>&1' 1 2 3 15
|
||
index=0
|
||
while read type host root date time make test write owner attributes
|
||
do case $type in
|
||
''|'#'*);;
|
||
*=*) eval "$type $host $root $date $time $make $test $write $owner $attributes"
|
||
;;
|
||
*) case $admin_action in
|
||
make|test|write)
|
||
eval f='$'$admin_action
|
||
case $f in
|
||
*[!0123456789]*) continue ;;
|
||
esac
|
||
;;
|
||
esac
|
||
rsh=rsh
|
||
case $host in
|
||
*@*) IFS=@
|
||
set '' $host
|
||
IFS=$ifs
|
||
user=${2}@
|
||
host=$3
|
||
;;
|
||
*) user=
|
||
;;
|
||
esac
|
||
: type=$type host=$host root=$root date=$date time=$time make=$make test=$test write=$write :
|
||
name=$host
|
||
host=`echo $name | sed 's,[^abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789],__,g'`
|
||
eval x='$'${host}_index
|
||
eval ${host}_index=1
|
||
case $x in
|
||
1) i=0
|
||
while :
|
||
do case $i in
|
||
$index) h=''
|
||
break
|
||
;;
|
||
esac
|
||
i=`expr $i + 1`
|
||
eval h='$'${admin_host}${i}_name
|
||
case $h in
|
||
$host) host=${admin_host}${i}
|
||
eval user='$'${host}_user root='$'${host}_rsh:$host:'$'${host}_root
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
case $root in
|
||
*:$name:*)root=`echo '' $root | sed 's,:.*,:,'` ;;
|
||
esac
|
||
case $root in
|
||
*:*:*) index=`expr $index + 1`
|
||
host=${admin_host}$index
|
||
;;
|
||
*:*) case " $sync_hosts " in
|
||
*" $name ${admin_host}"*)
|
||
set '' '' $sync_hosts
|
||
while :
|
||
do shift
|
||
shift
|
||
case $1 in
|
||
$name) host=$2
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
*) index=`expr $index + 1`
|
||
host=${admin_host}$index
|
||
sync_hosts="$sync_hosts $name $host"
|
||
;;
|
||
esac
|
||
;;
|
||
*) index=`expr $index + 1`
|
||
host=${admin_host}$index
|
||
;;
|
||
esac
|
||
case $root in
|
||
-*) continue
|
||
;;
|
||
*:*) case $admin_all in
|
||
0) continue ;;
|
||
esac
|
||
case $root in
|
||
*:) root=${root}. ;;
|
||
esac
|
||
IFS=:
|
||
set '' $root
|
||
IFS=$ifs
|
||
sync=$host
|
||
case $hostname in
|
||
'') hostinfo name
|
||
hostname=$_hostinfo_
|
||
;;
|
||
esac
|
||
shift
|
||
case $# in
|
||
0) ;;
|
||
1) root=$1
|
||
;;
|
||
2) rsh=$1 root=$2
|
||
;;
|
||
*) rsh=$1 sync=$2 root=$3
|
||
case $sync in
|
||
${admin_host}*)
|
||
;;
|
||
?*) case " $sync_hosts " in
|
||
*" $sync ${admin_host}"*)
|
||
set '' '' $sync_hosts
|
||
while :
|
||
do shift
|
||
shift
|
||
case $1 in
|
||
$sync) sync=$2
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
*) index=`expr $index + 1`
|
||
x=${admin_host}$index
|
||
sync_hosts="$sync_hosts $sync $x"
|
||
sync=$x
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
*) sync=
|
||
;;
|
||
esac
|
||
case $name in
|
||
$admin_on)
|
||
keep=1
|
||
;;
|
||
*) case " $admin_on " in
|
||
*" $name "*) keep=1 ;;
|
||
*) keep=0 ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case " $admin_out " in
|
||
*" $name "*)
|
||
log=$name.$type
|
||
;;
|
||
*) admin_out="$admin_out $name"
|
||
log=$name
|
||
;;
|
||
esac
|
||
case $sync in
|
||
'') local_types="$local_types $type" ;;
|
||
esac
|
||
case $sync in
|
||
$host) remote_hosts="$remote_hosts $host"
|
||
;;
|
||
?*) eval ${sync}_share=\"\$${sync}_share $host\"
|
||
;;
|
||
'') local_hosts="$local_hosts $host"
|
||
;;
|
||
esac
|
||
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
|
||
;;
|
||
esac
|
||
done
|
||
p=
|
||
for i in $admin_args
|
||
do p="$i $p"
|
||
done
|
||
admin_pkgs=
|
||
for i in $p
|
||
do if view - src "lib/package/$i.pkg"
|
||
then case $admin_pkgs in
|
||
'') admin_pkgs="$i" ;;
|
||
*) admin_pkgs="$admin_pkgs|$i" ;;
|
||
esac
|
||
fi
|
||
done
|
||
: "admin_binary :" $admin_binary
|
||
: "admin_args :" $admin_args
|
||
: "admin_pkgs :" $admin_pkgs
|
||
: "admin_on :" "$admin_on"
|
||
: "local_hosts :" $local_hosts
|
||
: "local_types :" $local_types
|
||
: "remote_hosts :" $remote_hosts
|
||
: "sync_hosts :" $sync_hosts
|
||
: "sync_share :" $sync_share
|
||
case $admin_binary in
|
||
1) admin_bin_types=
|
||
admin_bin_main=
|
||
for main in $local_hosts $remote_hosts
|
||
do eval share=\$${main}_share keep=\$${main}_keep
|
||
case $keep in
|
||
0*) continue ;;
|
||
esac
|
||
for host in $main $share
|
||
do case " $admin_bin_hosts " in
|
||
*" $host "*)
|
||
continue
|
||
;;
|
||
esac
|
||
eval type=\$${host}_type
|
||
case " $admin_bin_types " in
|
||
*" $type "*)
|
||
continue
|
||
;;
|
||
esac
|
||
case " $types " in
|
||
" ") ;;
|
||
*" $type "*)
|
||
;;
|
||
*) continue
|
||
;;
|
||
esac
|
||
admin_bin_hosts="$admin_bin_hosts $host"
|
||
admin_bin_types="$admin_bin_types $type"
|
||
case " $admin_bin_hosts " in
|
||
*" $main "*)
|
||
;;
|
||
*) case " $admin_bin_main " in
|
||
*" $main "*)
|
||
;;
|
||
*) admin_bin_main="$admin_bin_main $main"
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
local=
|
||
remote=
|
||
for host in $admin_bin_main $admin_bin_hosts
|
||
do case " $local_hosts " in
|
||
*" $host "*)
|
||
local="$local $host"
|
||
;;
|
||
*) case " $remote_hosts " in
|
||
*" $host "*)
|
||
remote="$remote $host"
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
local_hosts=$local
|
||
remote_hosts=$remote
|
||
;;
|
||
esac
|
||
for host in $remote_hosts $local_hosts
|
||
do eval share=\$${host}_share
|
||
case $share in
|
||
?*) while :
|
||
do oshare=$share
|
||
for s in $share
|
||
do eval r='$'${s}_share
|
||
case $r in
|
||
?*) case " $share " in
|
||
*" $r "*) ;;
|
||
*) share="$share $r" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
case $share in
|
||
$oshare) eval ${host}_share="'$share'"
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
done
|
||
for host in $remote_hosts
|
||
do eval type=\$${host}_type
|
||
case " $local_types " in
|
||
*" $type "*)
|
||
eval ${host}_snarf=
|
||
;;
|
||
esac
|
||
eval name=\$${host}_name keep=\$${host}_keep share=\$${host}_share
|
||
for share in $share
|
||
do eval type=\$${share}_type keep=\$keep\$${share}_keep
|
||
case " $local_types " in
|
||
*" $type "*)
|
||
eval ${share}_snarf=
|
||
;;
|
||
esac
|
||
done
|
||
case $keep in
|
||
0*1*) keep=2$keep ;;
|
||
*1*) ;;
|
||
*) keep=0 ;;
|
||
esac
|
||
eval ${host}_keep=$keep
|
||
done
|
||
for host in $remote_hosts $local_hosts
|
||
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
|
||
case $keep in
|
||
0*) continue ;;
|
||
esac
|
||
case $sync in
|
||
'') case $admin_action in
|
||
ditto) continue ;;
|
||
esac
|
||
case $admin_binary in
|
||
1) case $keep in
|
||
1*|?*1*);;
|
||
*) continue ;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
eval main_log='$'${host}_log
|
||
main=
|
||
share_keep=
|
||
for i in $host $share
|
||
do eval n='$'${i}_name t='$'${i}_type q='$'${i}_sync s='$'${i}_snarf l='$'${i}_log k='$'${i}_keep
|
||
case $main:$k in
|
||
:*) ;;
|
||
*:0) continue ;;
|
||
esac
|
||
case $admin_binary in
|
||
1) case $s:$q in
|
||
:?*) continue ;;
|
||
esac
|
||
case " $admin_bin_hosts " in
|
||
*" $i "*)
|
||
;;
|
||
*) continue
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $main in
|
||
'') main=$i ;;
|
||
*) share_keep="$share_keep $i" ;;
|
||
esac
|
||
echo package "$admin_args" "[ $n $t ]"
|
||
case $exec in
|
||
'') : > $admin_log/$l ;;
|
||
*) $exec ": > $admin_log/$l" ;;
|
||
esac
|
||
done
|
||
host=$main
|
||
share=$share_keep
|
||
case $force in
|
||
0) admin_ditto_update=--update ;;
|
||
*) admin_ditto_update= ;;
|
||
esac
|
||
case $exec in
|
||
'') {
|
||
case $admin_binary:$sync in
|
||
:?*) eval syncname='$'${sync}_name
|
||
test -x $PACKAGEROOT/bin/package && $admin_ditto $admin_ditto_update --remote=$rsh --expr="name=='package'" $PACKAGEROOT/bin $user$syncname:$root/bin
|
||
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
|
||
for dir in $package_src
|
||
do case $MAKESKIP in
|
||
'') expr="--expr=if(name=='$admin_ditto_skip')status=SKIP" ;;
|
||
*) expr="--expr=if(name=='$admin_ditto_skip'||level==1&&name=='$MAKESKIP')status=SKIP" ;;
|
||
esac
|
||
test -d $PACKAGEROOT/src/$dir && $admin_ditto $admin_ditto_update --remote=$rsh "$expr" $PACKAGEROOT/src/$dir $user$syncname:$root/src/$dir
|
||
done
|
||
;;
|
||
esac
|
||
case $admin_action in
|
||
ditto) ;;
|
||
?*) pids=
|
||
set '' $host $share
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break
|
||
;;
|
||
1) remote $1
|
||
;;
|
||
*) remote $1 &
|
||
pids="$pids $!"
|
||
;;
|
||
esac
|
||
done
|
||
case $pids in
|
||
?*) wait $pids ;;
|
||
esac
|
||
;;
|
||
esac
|
||
} < /dev/null > $admin_log/$main_log 2>&1 &
|
||
pids="$pids $!"
|
||
;;
|
||
*) echo "{"
|
||
case $admin_binary:$sync in
|
||
:?*) eval syncname='$'${sync}_name
|
||
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
|
||
for dir in $package_src
|
||
do case $MAKESKIP in
|
||
'') expr="--expr=if(name=='$admin_ditto_skip')status=SKIP" ;;
|
||
*) expr="--expr=if(name=='$admin_ditto_skip'||level==1&&name=='$MAKESKIP')status=SKIP" ;;
|
||
esac
|
||
test -d $PACKAGEROOT/src/$dir && echo $admin_ditto $admin_ditto_update --remote=$rsh "$expr" $PACKAGEROOT/src/$dir $user$syncname:$root/src/$dir
|
||
done
|
||
;;
|
||
esac
|
||
case $admin_action in
|
||
ditto) ;;
|
||
?*) pids=
|
||
set '' $host $share
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break
|
||
;;
|
||
1) remote $1
|
||
;;
|
||
*) remote $1 "&"
|
||
pids=1
|
||
;;
|
||
esac
|
||
done
|
||
case $pids in
|
||
1) echo wait ;;
|
||
esac
|
||
;;
|
||
esac
|
||
echo "} < /dev/null > $admin_log/$main_log 2>&1 &"
|
||
;;
|
||
esac
|
||
eval name='$'${main}_name
|
||
hosts="$hosts $name"
|
||
logs="$logs $main_log"
|
||
for share in $share
|
||
do eval keep=\$${share}_keep
|
||
case $keep in
|
||
1) eval name='$'${share}_name log='$'${share}_log
|
||
hosts="$hosts $name"
|
||
logs="$logs $log"
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
case $exec in
|
||
'') # track the progress
|
||
case $quiet in
|
||
0) cd $admin_log
|
||
tail -t $PACKAGE_admin_tail_timeout -f $logs
|
||
cd ..
|
||
;;
|
||
esac
|
||
# wait for the remote actions to complete
|
||
wait
|
||
trap - 1 2 3 15
|
||
# update the db
|
||
exec < $admin_db || exit
|
||
exec 9>&1
|
||
D=`date +%y%m%d`
|
||
while read line
|
||
do set -- $line
|
||
case $1 in
|
||
''|'#'*|*=*)
|
||
;;
|
||
*) case " $hosts " in
|
||
*" $2 "*)
|
||
: ast date command assumed :
|
||
E=`eval date -E \`egrep '[ ](start|done)[ ][ ]*at[ ]' $admin_log/$2 | sed -e 's/.*[ ][ ]*at[ ][ ]*//' -e 's/[ ][ ]*in[ ].*$//' -e 's/.*/"&"/'\``
|
||
M=$6 T=$7 W=$8
|
||
case $admin_action in
|
||
make|view)
|
||
M=`egrep -c ']:.* (\*\*\*.* code|don'\''t know) | \*\*\* termination code ' $admin_log/$2` ;;
|
||
test) T=`grep -ci 'fail[es]' $admin_log/$2` ;;
|
||
*) W=`grep '^[abcdefghijklmnopqrstuvwxyz][abcdefghijklmnopqrstuvwxyz]*:.' $admin_log/$2 | egrep -cv 'start at|done at|output captured|warning:|: package not found|whence: command not found'` ;;
|
||
esac
|
||
case $1 in
|
||
?|??|???|????|?????|??????|???????)
|
||
t1=' '
|
||
;;
|
||
????????|?????????|??????????|???????????|????????????|?????????????|??????????????|???????????????)
|
||
t1=' '
|
||
;;
|
||
*) t1=''
|
||
;;
|
||
esac
|
||
case $2 in
|
||
?|??|???|????|?????|??????|???????)
|
||
t2=' '
|
||
;;
|
||
*) t2=''
|
||
;;
|
||
esac
|
||
case $3 in
|
||
?|??|???|????|?????|??????|???????)
|
||
t3=' '
|
||
;;
|
||
*) t3=''
|
||
;;
|
||
esac
|
||
case $E in
|
||
?????) E=" $E" ;;
|
||
????) E=" $E" ;;
|
||
???) E=" $E" ;;
|
||
??) E=" $E" ;;
|
||
?) E=" $E" ;;
|
||
esac
|
||
case $M in
|
||
???) M="$M" ;;
|
||
??) M=" $M" ;;
|
||
?) M=" $M" ;;
|
||
'') M=" 0" ;;
|
||
esac
|
||
case $T in
|
||
???) T="$T" ;;
|
||
??) T=" $T" ;;
|
||
?) T=" $T" ;;
|
||
'') T=" 0" ;;
|
||
esac
|
||
case $W in
|
||
???) W="$W" ;;
|
||
??) W=" $W" ;;
|
||
?) W=" $W" ;;
|
||
'') W=" 0" ;;
|
||
esac
|
||
A=$1$t1
|
||
H=$2$t2
|
||
R=$3$t3
|
||
case $# in
|
||
[0-8]) O=
|
||
K=
|
||
;;
|
||
*) shift 8
|
||
O=$1
|
||
K=$2
|
||
case $O in
|
||
''|?|??|???) K=" $K" ;;
|
||
esac
|
||
case $# in
|
||
[0-2]) ;;
|
||
*) K="$K $*" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
echo "$A $H $R $D $E $M $T $W $O $K"
|
||
echo "$A $H $R $D $E $M $T $W $O $K" >&9
|
||
continue
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
echo "$line"
|
||
done > $admin_db.new
|
||
mv $admin_db $admin_db.old
|
||
mv $admin_db.new $admin_db
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
clean|clobber)
|
||
cd $PACKAGEROOT
|
||
$exec rm -rf arch/$HOSTTYPE
|
||
exit
|
||
;;
|
||
|
||
contents|list)
|
||
# all work in $PACKAGESRC
|
||
|
||
cd $PACKAGESRC
|
||
|
||
# generate the package list
|
||
|
||
set '' $target $package
|
||
shift
|
||
argc=$#
|
||
case $# in
|
||
0) set '' *.pkg
|
||
case $2 in
|
||
'*.pkg')
|
||
echo $command: $action: no packages >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
set '' `echo $* | sed 's,\.pkg,,g'`
|
||
shift
|
||
;;
|
||
esac
|
||
sep="$nl "
|
||
echo packages in $PACKAGEROOT
|
||
case $action in
|
||
list) echo
|
||
echo "NAME${nl}VERSION${nl}RELEASE${nl}TYPE${nl}STATUS${nl}REQUIRES${nl}----${nl}-------${nl}-------${nl}----${nl}------${nl}--------" | pr -6 -a -o4 -t
|
||
;;
|
||
esac
|
||
{
|
||
omit=:
|
||
for pkg
|
||
do if test ! -f $pkg.pkg
|
||
then echo $command: $action: $pkg: not a package >&2
|
||
else if test -f gen/$pkg.ver
|
||
then set '' `cat gen/$pkg.ver`
|
||
case $3 in
|
||
$2) ver=base ;;
|
||
*) ver=$3 ;;
|
||
esac
|
||
if test -s tgz/$pkg.tim
|
||
then sts=local
|
||
else sts=
|
||
fi
|
||
else ver=
|
||
sts=unwritten
|
||
fi
|
||
typ=
|
||
txt=
|
||
cmp= cmp_sep=
|
||
req= req_sep=
|
||
op=::
|
||
exec < $pkg.pkg
|
||
while read line
|
||
do IFS=' \\'
|
||
set '' $line
|
||
IFS=$ifs
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break ;;
|
||
esac
|
||
case $1 in
|
||
:*:) op=$1
|
||
;;
|
||
INIT|'$('*|*')')
|
||
;;
|
||
*) case $op in
|
||
:DESCRIPTION:)
|
||
txt="$txt$sep$line"
|
||
break
|
||
;;
|
||
:PACKAGE:)
|
||
cmp="$cmp$cmp_sep$1"
|
||
cmp_sep=$nl
|
||
;;
|
||
:REQUIRES:)
|
||
req="$req$req_sep$1"
|
||
req_sep=" "
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
exec < /dev/null
|
||
case $txt in
|
||
?*) txt="$nl$txt" ;;
|
||
esac
|
||
case :$ver: in
|
||
*::*) ;;
|
||
*) case $action in
|
||
list) case $sts in
|
||
'') case `ls -t "tgz/$pkg.$ver.base" "tgz/$pkg.tim" 2>/dev/null` in
|
||
"tgz/$pkg.tim"*)
|
||
sts=read
|
||
;;
|
||
*) sts=unread
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
echo "$pkg${nl}$ver${nl}base${nl}$typ${nl}$sts${nl}$req"
|
||
case $typ in
|
||
'') omit=$omit$pkg.$ver.base: ;;
|
||
esac
|
||
;;
|
||
*) case $req in
|
||
?*) req=": $req" ;;
|
||
esac
|
||
echo
|
||
echo $pkg $ver $req "$txt"
|
||
case $cmp in
|
||
?*) echo "${sep}Components in this package:$nl"
|
||
echo "$cmp" | pr -4 -o4 -t ;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
fi
|
||
done
|
||
case $argc:$action in
|
||
0:list) if test -d tgz
|
||
then cd tgz
|
||
# f:file p:package v:version r:release t:type u:update
|
||
for f in `find . -name '*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]*' -print | sed 's,^\./,,' | sort -r`
|
||
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,'`
|
||
case $t in
|
||
'') case $omit in
|
||
*:$p.$v.$r:*) continue ;;
|
||
esac
|
||
u=$p.tim
|
||
;;
|
||
*) u=$p.$t.tim
|
||
;;
|
||
esac
|
||
if test -s "$u"
|
||
then s=local
|
||
elif test -f "$u"
|
||
then case `ls -t "$f" "$u" 2>/dev/null` in
|
||
"$u"*) s=read ;;
|
||
*) s=unread ;;
|
||
esac
|
||
else s=unread
|
||
fi
|
||
echo "$p$nl$v$nl$r$nl$t$nl$s$nl"
|
||
done
|
||
fi
|
||
;;
|
||
esac
|
||
} |
|
||
case $action in
|
||
list) pr -6 -a -o4 -t | sort -u ;;
|
||
*) cat ;;
|
||
esac
|
||
case $argc in
|
||
0) if test -d $PACKAGEROOT/arch
|
||
then echo
|
||
echo architectures in $PACKAGEROOT
|
||
echo
|
||
for i in `ls $PACKAGEROOT/arch`
|
||
do if test -f $PACKAGEROOT/arch/$i/lib/package/gen/host
|
||
then h=`cat $PACKAGEROOT/arch/$i/lib/package/gen/host`
|
||
else h=
|
||
fi
|
||
echo $i
|
||
echo $h
|
||
echo
|
||
echo
|
||
done | pr -4 -a -o4 -t
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
copyright)
|
||
# all work in $PACKAGESRC
|
||
|
||
cd $PACKAGESRC
|
||
|
||
# generate the package list
|
||
|
||
set '' $target $package
|
||
shift
|
||
argc=$#
|
||
case $# in
|
||
0) set '' `echo *.lic | sed 's,\.lic,,g'`
|
||
shift
|
||
case $1 in
|
||
'*') echo $command: $action: no packages >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
checkaout proto || exit
|
||
for i
|
||
do copyright $i
|
||
done
|
||
;;
|
||
|
||
export) case $INSTALLROOT in
|
||
$PACKAGEROOT)
|
||
INSTALLROOT=$INSTALLROOT/arch/$HOSTTYPE
|
||
;;
|
||
esac
|
||
case $only in
|
||
0) v='$i=' ;;
|
||
*) v= ;;
|
||
esac
|
||
set '' $target $package
|
||
case $# in
|
||
1) set '' $env ;;
|
||
esac
|
||
while :
|
||
do case $# in
|
||
1) break ;;
|
||
esac
|
||
shift
|
||
i=$1
|
||
eval echo ${v}'$'${i}
|
||
done
|
||
;;
|
||
|
||
install)cd $PACKAGEROOT
|
||
set '' $package
|
||
shift
|
||
case $only in
|
||
0) set '' `order "$@"`
|
||
shift
|
||
;;
|
||
esac
|
||
case $# in
|
||
0) echo "$command: at least one package name expected" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
package=$*
|
||
requirements - $package
|
||
set '' $target
|
||
shift
|
||
case $1 in
|
||
flat) flat=1 # backwards compatibility -- documentation dropped
|
||
shift
|
||
;;
|
||
esac
|
||
case $# in
|
||
0) echo "$command: $action: target directory argument expected" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
target=
|
||
while :
|
||
do case $# in
|
||
1) directory=$1
|
||
break
|
||
;;
|
||
esac
|
||
target="$target $1"
|
||
shift
|
||
done
|
||
if test ! -d $directory
|
||
then echo "$command: $action: $directory: target directory not found" >&2
|
||
exit 1
|
||
fi
|
||
case $target in
|
||
'') cd arch
|
||
set '' *
|
||
shift
|
||
target=$*
|
||
cd ..
|
||
;;
|
||
esac
|
||
code=0
|
||
makecheck=1
|
||
for a in $target
|
||
do case $a in
|
||
-) a=$HOSTTYPE ;;
|
||
esac
|
||
case $flat:$a in
|
||
1:*|?:.)dest=$directory
|
||
;;
|
||
*) dest=$directory/arch/$a
|
||
if test "" = "$exec" -a ! -d $dest
|
||
then mkdir -p $dest || {
|
||
echo "$command: $dest: destination directory must exist" >&2
|
||
exit 1
|
||
}
|
||
fi
|
||
;;
|
||
esac
|
||
for i in $package
|
||
do if test "ratz" = "$i"
|
||
then : skip
|
||
elif test -f arch/$a/lib/package/gen/$i.sum
|
||
then package_install $directory arch/$a/lib/package/gen/$i.sum || code=1
|
||
elif test ! -d arch/$a/bin
|
||
then echo "$command: $a: invalid architecture" >&2
|
||
elif test ! -d $dest
|
||
then echo "$command: $dest: destination directory must exist" >&2
|
||
else if test "" != "$makecheck"
|
||
then if onpath $MAKE
|
||
then MAKE=$_onpath_
|
||
else echo "$command: $MAKE: not found" >&2
|
||
exit 1
|
||
fi
|
||
makecheck=
|
||
fi
|
||
if test "" != "$exec"
|
||
then (
|
||
trap - 0 1 2 15
|
||
echo "=== $i installation manifest ==="
|
||
cd arch/$a
|
||
(
|
||
cd lib/package
|
||
INSTALLROOT=$PACKAGEROOT/arch/$a
|
||
VPATH=$INSTALLROOT:$PACKAGEROOT:$VPATH
|
||
export INSTALLROOT VPATH
|
||
$MAKE -s $makeflags -f $i.pkg $qualifier list.installed $assign
|
||
) | sort -u
|
||
)
|
||
else (
|
||
set -
|
||
cd arch/$a
|
||
(
|
||
cd lib/package
|
||
INSTALLROOT=$PACKAGEROOT/arch/$a
|
||
VPATH=$INSTALLROOT:$PACKAGEROOT:$VPATH
|
||
export INSTALLROOT VPATH
|
||
echo lib/$command
|
||
$MAKE -s $makeflags -f $i.pkg $qualifier list.installed $assign
|
||
) | sort -u | pax -drw -ps $dest
|
||
)
|
||
fi
|
||
fi
|
||
done
|
||
done
|
||
exit $code
|
||
;;
|
||
|
||
license)# all work in $PACKAGESRC/LICENSES
|
||
|
||
cd $PACKAGESRC/LICENSES || exit
|
||
|
||
# generate the package list
|
||
|
||
set '' $target $package
|
||
shift
|
||
argc=$#
|
||
case $# in
|
||
0) set '' *
|
||
shift
|
||
case $1 in
|
||
'*') echo $command: $action: no licenses >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
*) checkaout proto || exit
|
||
a=
|
||
for i
|
||
do while :
|
||
do if test -f ../$i.lic
|
||
then j=`proto -df -l ../$i.lic -o query=type /dev/null 2>/dev/null`
|
||
case $j in
|
||
?*) if test -f $j
|
||
then case " $a " in
|
||
*" $j "*) ;;
|
||
*) a="$a $j" ;;
|
||
esac
|
||
fi
|
||
break
|
||
;;
|
||
esac
|
||
fi
|
||
case $i in
|
||
*-*) i=`echo $i | sed 's/-[^-]*$//'`
|
||
;;
|
||
*) echo "$command: $i: package license not found" >&2
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
set '' $a
|
||
shift
|
||
;;
|
||
esac
|
||
for i
|
||
do case $exec in
|
||
'') echo
|
||
echo " --- $i source license ---"
|
||
echo
|
||
cat $i
|
||
;;
|
||
*) echo $PACKAGESRC/LICENSES/$i
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
|
||
make|view)
|
||
cd $PACKAGEROOT
|
||
case $package in
|
||
'') lic="lib/package/*.lic"
|
||
;;
|
||
*) for i in $package
|
||
do lic="$lic lib/package/$i.lic"
|
||
case $i in
|
||
*-*) lic="$lic lib/package/"`echo $i | sed 's,-.*,,'`".lic" ;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
checksrc
|
||
requirements source $package
|
||
components $package
|
||
package=$_components_
|
||
|
||
# check for some required commands
|
||
|
||
must="$AR"
|
||
warn="$NM yacc bison"
|
||
test="$must $warn"
|
||
have=
|
||
IFS=:
|
||
set /$IFS$PATH
|
||
IFS=$ifs
|
||
shift
|
||
for t in $test
|
||
do if executable $t
|
||
then have="$have $t"
|
||
fi
|
||
done
|
||
for d
|
||
do for t in $test
|
||
do case " $have " in
|
||
*" $t "*)
|
||
;;
|
||
*) if executable $d/$t
|
||
then have="$have $t"
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
case " $have " in
|
||
*" bison "*) ;;
|
||
*" yacc "*) have="$have bison" ;;
|
||
esac
|
||
case " $have " in
|
||
*" yacc "*) ;;
|
||
*" bison "*) have="$have yacc" ;;
|
||
esac
|
||
for t in $test
|
||
do case " $have " in
|
||
*" $t "*)
|
||
;;
|
||
*) case " $must " in
|
||
*" $t "*)
|
||
echo "$command: $t: not found -- must be on PATH to $action" >&2
|
||
exit 1
|
||
;;
|
||
*) echo "$command: warning: $t: not found -- some $action actions may fail" >&2
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
|
||
# verify the top view
|
||
|
||
if test ! -d $PACKAGEROOT/src
|
||
then note no source packages to make
|
||
exit 0
|
||
elif test ! -d $INSTALLROOT/src
|
||
then note initialize the $INSTALLROOT view
|
||
fi
|
||
for i in arch arch/$HOSTTYPE
|
||
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
|
||
done
|
||
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
|
||
do test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
|
||
done
|
||
make_recurse src
|
||
o= k=
|
||
for i in $makefiles
|
||
do case $o in
|
||
?*) o="$o -o" k="$k|" ;;
|
||
esac
|
||
o="$o -name $i"
|
||
k="$k$i"
|
||
done
|
||
o="( $o ) -print"
|
||
for d in $package_src
|
||
do i=src/$d
|
||
if test -d $i
|
||
then test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
|
||
make_recurse $i
|
||
for j in `cd $i; find . $o 2>/dev/null | sed -e 's,^\./,,' -e '/\//!d' -e 's,/[^/]*$,,' | sort -u`
|
||
do case $j in
|
||
$k|$MAKESKIP) continue ;;
|
||
esac
|
||
test -d $INSTALLROOT/$i/$j ||
|
||
$exec mkdir -p $INSTALLROOT/$i/$j || exit
|
||
done
|
||
fi
|
||
done
|
||
def=
|
||
for i in $lic
|
||
do test -f $i || continue
|
||
cmp -s $i $INSTALLROOT/$i 2>/dev/null ||
|
||
$exec cp $PACKAGEROOT/$i $INSTALLROOT/$i
|
||
for j in `grep '^. .*\.def$' $i`
|
||
do case $j in
|
||
.) ;;
|
||
*) case " $def " in
|
||
*" $i "*) ;;
|
||
*) def="$def $i" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
for i in $def
|
||
do i=lib/package/$i
|
||
test -f $i || continue
|
||
cmp -s $i $INSTALLROOT/$i 2>/dev/null ||
|
||
$exec cp $PACKAGEROOT/$i $INSTALLROOT/$i
|
||
done
|
||
|
||
# check $CC and { ar cc ld ldd } intercepts
|
||
|
||
h="${HOSTTYPE} ${HOSTTYPE}.*"
|
||
case $HOSTTYPE in
|
||
*.*) t=`echo $HOSTTYPE | sed 's/[.][^.]*//'`
|
||
h="$h $t"
|
||
;;
|
||
*) t=$HOSTTYPE
|
||
;;
|
||
esac
|
||
case $t in
|
||
*[0123456789])
|
||
t=`echo $t | sed 's/[0123456789]*$//'`
|
||
h="$h $t"
|
||
;;
|
||
esac
|
||
case $CC in
|
||
cc) c=cc
|
||
b=$INSTALLROOT/bin/$c
|
||
t=$INSTALLROOT/lib/package/gen/$c.tim
|
||
intercept=0
|
||
for k in $h
|
||
do for s in $INITROOT/$c.$k
|
||
do test -x "$s" || continue
|
||
if cmp -s "$s" "$b" >/dev/null 2>&1
|
||
then intercept=1
|
||
break 2
|
||
fi
|
||
case `ls -t "$t" "$b" "$s" 2>/dev/null` in
|
||
$t*) ;;
|
||
$b*) cc=$b
|
||
;;
|
||
$s*) cd $INSTALLROOT/lib/package/gen
|
||
tmp=pkg$$
|
||
eval '$'exec echo "'int main(){return 0;}' > $tmp.c"
|
||
if $exec $s -o $tmp.exe $tmp.c >/dev/null 2>&1 &&
|
||
test -x $tmp.exe
|
||
then case $HOSTTYPE in
|
||
*.mips*)$s -version >/dev/null 2>&1 || s= ;;
|
||
esac
|
||
case $s in
|
||
?*) $exec sed "s/^HOSTTYPE=.*/HOSTTYPE=$HOSTTYPE/" < "$s" > "$b" || exit
|
||
$exec chmod +x "$b" || exit
|
||
cc=$b
|
||
intercept=1
|
||
note update $b
|
||
;;
|
||
esac
|
||
fi
|
||
$exec rm -f $tmp.*
|
||
$exec touch "$t"
|
||
cd $PACKAGEROOT
|
||
;;
|
||
esac
|
||
break 2
|
||
done
|
||
done
|
||
case $intercept in
|
||
1) c=ld
|
||
b=$INSTALLROOT/bin/$c
|
||
for k in $h
|
||
do for s in $INITROOT/$c.$k
|
||
do test -x "$s" || continue
|
||
case `ls -t "$b" "$s" 2>/dev/null` in
|
||
$b*) ;;
|
||
$s*) $exec cp "$s" "$b"
|
||
note update $b
|
||
;;
|
||
esac
|
||
done
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
c=ldd
|
||
b=$INSTALLROOT/bin/$c
|
||
for t in $h
|
||
do s=$INITROOT/$c.$t
|
||
test -x "$s" || continue
|
||
onpath $c ||
|
||
case `ls -t "$b" "$s" 2>/dev/null` in
|
||
$b*) ;;
|
||
$s*) $exec cp "$s" "$b"
|
||
note update $b
|
||
;;
|
||
esac
|
||
done
|
||
c=ar
|
||
b=$INSTALLROOT/bin/$c
|
||
for t in $h
|
||
do s=$INITROOT/$c.$t
|
||
test -x "$s" || continue
|
||
case `ls -t "$b" "$s" 2>/dev/null` in
|
||
$b*) ;;
|
||
$s*) $exec cp "$s" "$b"
|
||
note update $b
|
||
;;
|
||
esac
|
||
done
|
||
# following code stubbed out just in case ar.ibm.risc is needed
|
||
# c=ar
|
||
# b=$INSTALLROOT/bin/$c
|
||
# for t in $h
|
||
# do s=$INITROOT/$c.$t
|
||
# test -x "$s" || continue
|
||
# onpath $c ||
|
||
# case `ls -t "$b" "$s" 2>/dev/null` in
|
||
# $b*) ;;
|
||
# $s*) x=`$s -tv /foo/bar.a 2>&1 | egrep -i 'option|usage'`
|
||
# case $x in
|
||
# '') $exec cp "$s" "$b"
|
||
# note update $b
|
||
# ;;
|
||
# esac
|
||
# ;;
|
||
# esac
|
||
# done
|
||
case $cc in
|
||
/*) ;;
|
||
*) echo "$command: $CC: not found -- set CC=C-compiler" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
case $exec in
|
||
'') cd $INSTALLROOT/lib/package/gen
|
||
tmp=pkg$$
|
||
echo 'int main(){return 0;}' > $tmp.c
|
||
if $CC -o $tmp.exe $tmp.c > /dev/null 2> $tmp.err &&
|
||
test -x $tmp.exe
|
||
then : ok
|
||
else echo "$command: $CC: failed to compile this program:" >&2
|
||
cat $tmp.c >&2
|
||
if test -s $tmp.err
|
||
then cat $tmp.err >&2
|
||
else echo "$command: $CC: not a C compiler" >&2
|
||
fi
|
||
rm -f $tmp.*
|
||
exit 1
|
||
fi
|
||
rm -f $tmp.*
|
||
cd $PACKAGEROOT
|
||
;;
|
||
esac
|
||
|
||
# remember the default $CC
|
||
|
||
case $CC in
|
||
cc) ;;
|
||
*) if test -x $INSTALLROOT/bin/cc
|
||
then case `sed 1q $INSTALLROOT/bin/cc` in
|
||
": $CC :")
|
||
CC=cc
|
||
export CC
|
||
;;
|
||
*) assign="$assign CC=\"\$CC\""
|
||
;;
|
||
esac
|
||
else case $CROSS in
|
||
1) assign="$assign CC=\"\$CC\""
|
||
;;
|
||
*) case $exec in
|
||
'') {
|
||
echo ": $CC :"
|
||
echo "$CC \"\$@\""
|
||
} > $INSTALLROOT/bin/cc
|
||
chmod +x $INSTALLROOT/bin/cc
|
||
;;
|
||
*) note generate a $INSTALLROOT/bin/cc wrapper for $CC
|
||
;;
|
||
esac
|
||
CC=cc
|
||
export CC
|
||
;;
|
||
esac
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
# no $INITROOT means INIT already installed elsewhere
|
||
|
||
if test -d $INITROOT
|
||
then
|
||
# update probe scripts
|
||
|
||
for i in lib/probe lib/probe/C lib/probe/C/make
|
||
do test -d $INSTALLROOT/$i || $exec mkdir $INSTALLROOT/$i || exit
|
||
done
|
||
i=$INSTALLROOT/lib/probe/C/make/probe
|
||
j=$INITROOT/C+probe
|
||
k=$INITROOT/make.probe
|
||
case `ls -t $i $j $k 2>/dev/null` in
|
||
$i*) ;;
|
||
*) if test -f $j -a -f $k
|
||
then note update $i
|
||
shellmagic
|
||
case $exec in
|
||
'') {
|
||
case $SHELLMAGIC in
|
||
?*) echo "$SHELLMAGIC" ;;
|
||
esac
|
||
cat $j $k
|
||
} > $i || exit
|
||
;;
|
||
*) echo "{
|
||
echo $SHELLMAGIC
|
||
cat $j $k
|
||
} > $i"
|
||
;;
|
||
esac
|
||
$exec chmod +x $i || exit
|
||
fi
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
# initialize a few mamake related commands
|
||
|
||
checkaout mamake proto ratz release || exit
|
||
|
||
# execrate if necessary
|
||
|
||
if (execrate) >/dev/null 2>&1
|
||
then execrate=execrate
|
||
$make cd $INSTALLROOT/bin
|
||
for i in chmod chgrp cmp cp ln mv rm
|
||
do if test ! -x $OK/$i -a -x /bin/$i.exe
|
||
then shellmagic
|
||
case $exec in
|
||
'') echo "$SHELLMAGIC"'execrate /bin/'$i' "$@"' > $OK/$i
|
||
chmod +x $OK/$i
|
||
;;
|
||
*) $exec echo \'"$SHELLMAGIC"'execrate /bin/'$i' "$@"'\'' >' $OK/$i
|
||
$exec chmod +x $OK/$i
|
||
;;
|
||
esac
|
||
fi
|
||
done
|
||
PATH=$INSTALLROOT/bin/$OK:$PATH
|
||
export PATH
|
||
else execrate=
|
||
fi
|
||
case $action in
|
||
view) exit 0 ;;
|
||
esac
|
||
|
||
# all work under $INSTALLROOT/src
|
||
|
||
$make cd $INSTALLROOT/src
|
||
|
||
# record the build host name
|
||
|
||
case $noexec in
|
||
'') hostinfo name
|
||
echo "$_hostinfo_" | sed 's,\..*,,' > $PACKAGEBIN/gen/host
|
||
;;
|
||
esac
|
||
|
||
# make in parallel if possible
|
||
|
||
case $NPROC in
|
||
'') hostinfo cpu
|
||
case $_hostinfo_ in
|
||
0|1) ;;
|
||
*) NPROC=$_hostinfo_
|
||
$show NPROC=$NPROC
|
||
$show export NPROC
|
||
export NPROC
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
|
||
# separate flags from target list
|
||
|
||
case $target in
|
||
*-*) a=
|
||
for t in $target
|
||
do case $t in
|
||
-[eiknFKNV]*|--*-symbols)
|
||
makeflags="$makeflags $t"
|
||
;;
|
||
-*) nmakeflags="$nmakeflags $t"
|
||
;;
|
||
*) a="$a $t"
|
||
;;
|
||
esac
|
||
done
|
||
target=$a
|
||
;;
|
||
esac
|
||
|
||
# generate nmake first if possible
|
||
|
||
if executable ! $NMAKE && test -d $PACKAGEROOT/src/cmd/nmake
|
||
then if nonmake $MAKE
|
||
then note make $NMAKE with mamake
|
||
c=$CC
|
||
a=$assign
|
||
case $HOSTTYPE in
|
||
win32*|cygwin*)
|
||
CC="$CC -D_BLD_STATIC"
|
||
accept="libast"
|
||
case $assign in
|
||
*' CC='*) ;;
|
||
*) assign="$assign CC=\"\$CC\"" ;;
|
||
esac
|
||
;;
|
||
*) accept=nmake
|
||
;;
|
||
esac
|
||
eval capture mamake \$makeflags \$nmakeflags \$noexec install nmake $assign
|
||
assign=$a
|
||
CC=$c
|
||
case $make$noexec in
|
||
'') if executable ! $NMAKE
|
||
then echo "$command: $action: errors making $NMAKE" >&2
|
||
exit 1
|
||
fi
|
||
;;
|
||
*) make=echo
|
||
;;
|
||
esac
|
||
if test '' != "$PROTOROOT"
|
||
then if (vpath $INSTALLROOT - $PROTOROOT - $INSTALLROOT $PACKAGEROOT) >/dev/null 2>&1 &&
|
||
vpath $INSTALLROOT - $PROTOROOT - $INSTALLROOT $PACKAGEROOT
|
||
then $show vpath $INSTALLROOT $PACKAGEROOT $USER_VPATH_CHAIN
|
||
else VPATH=$INSTALLROOT:$PACKAGEROOT$USER_VPATH
|
||
$show VPATH=$VPATH
|
||
export VPATH
|
||
fi
|
||
fi
|
||
note believe generated files for $accept
|
||
eval capture \$NMAKE \$makeflags \$nmakeflags \$noexec recurse believe \$nmakesep $accept $assign
|
||
$exec touch $INSTALLROOT/bin/.paths
|
||
note make the remaining targets with $NMAKE
|
||
else eval capture $MAKE \$makeflags \$nmakeflags \$noexec install nmake $assign
|
||
case $make$noexec in
|
||
'') if executable ! $NMAKE
|
||
then echo "$command: $action: errors making $NMAKE" >&2
|
||
exit 1
|
||
fi
|
||
;;
|
||
*) make=echo
|
||
;;
|
||
esac
|
||
fi
|
||
fi
|
||
|
||
# generate ksh next if possible
|
||
|
||
if nonmake $MAKE
|
||
then : no need to generate ksh next -- it could be the only package
|
||
elif test "$KEEP_SHELL" != 1 -a -d $PACKAGEROOT/src/cmd/ksh93 && executable ! $KSH
|
||
then eval capture nmake $nmakeflags \$makeflags \$noexec install ksh93 $assign
|
||
case $make$noexec in
|
||
'') if executable ! $KSH
|
||
then echo "$command: $action: errors making $KSH" >&2
|
||
exit 1
|
||
fi
|
||
;;
|
||
*) make=echo
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
# mamprobe data should have been generated by this point
|
||
|
||
case $exec in
|
||
'') if test ! -f $INSTALLROOT/bin/.paths -o -w $INSTALLROOT/bin/.paths
|
||
then N='
|
||
'
|
||
b= f= h= n= p= u= B= L=
|
||
if test -f $INSTALLROOT/bin/.paths
|
||
then exec < $INSTALLROOT/bin/.paths
|
||
while read x
|
||
do case $x in
|
||
'#'?*) case $h in
|
||
'') h=$x ;;
|
||
esac
|
||
;;
|
||
*BUILTIN_LIB=*) b=$x
|
||
;;
|
||
*FPATH=*) f=$x
|
||
;;
|
||
*PLUGIN_LIB=*) p=$x
|
||
;;
|
||
*) case $u in
|
||
?*) u=$u$N ;;
|
||
esac
|
||
u=$u$x
|
||
;;
|
||
esac
|
||
done
|
||
fi
|
||
ifs=$IFS
|
||
m=
|
||
case $p in
|
||
?*) b=
|
||
;;
|
||
esac
|
||
case $b in
|
||
?*) IFS='='
|
||
set $b
|
||
IFS=$ifs
|
||
shift
|
||
p="PLUGIN_LIB=$*"
|
||
case $b in
|
||
[Nn][Oo]*) p=no$p ;;
|
||
esac
|
||
m=1
|
||
;;
|
||
esac
|
||
case $f in
|
||
'') f="FPATH=../fun"
|
||
m=1
|
||
;;
|
||
esac
|
||
case $h in
|
||
'') h='# use { no NO } prefix to permanently disable #' ;;
|
||
esac
|
||
case $p in
|
||
'') p="PLUGIN_LIB=cmd"
|
||
if grep '^setv mam_cc_DIALECT .* EXPORT=[AD]LL' $INSTALLROOT/lib/probe/C/mam/* >/dev/null 2>&1
|
||
then p=no$p
|
||
fi
|
||
m=1
|
||
;;
|
||
esac
|
||
case $m in
|
||
1) case $u in
|
||
?*) u=$N$u ;;
|
||
esac
|
||
echo "$h$N$p$N$f$N$u" > $INSTALLROOT/bin/.paths
|
||
;;
|
||
esac
|
||
fi
|
||
;;
|
||
esac
|
||
|
||
# run from separate copies since nmake and ksh may be rebuilt
|
||
|
||
case $EXECROOT in
|
||
$INSTALLROOT)
|
||
$make cd $INSTALLROOT/bin
|
||
if executable /bin/cp
|
||
then cp=/bin/cp
|
||
else cp=cp
|
||
fi
|
||
if executable /bin/mv
|
||
then mv=/bin/mv
|
||
else mv=mv
|
||
fi
|
||
if executable /bin/rm
|
||
then rm=/bin/rm
|
||
else rm=rm
|
||
fi
|
||
for i in \
|
||
ksh nmake tee cp ln mv rm \
|
||
*ast*.dll *cmd*.dll *dll*.dll *shell*.dll
|
||
do executable $i && {
|
||
cmp -s $i $OK/$i 2>/dev/null || {
|
||
test -f $OK/$i &&
|
||
$exec $execrate $rm $OK/$i </dev/null
|
||
test -f $OK/$i &&
|
||
$exec $execrate $mv $OK/$i $OK/$i.old </dev/null
|
||
test -f $OK/$i &&
|
||
case $exec:$i in
|
||
:nmake|:ksh)
|
||
echo "$command: $OK/$i: cannot update [may be in use by a running process] remove manually and try again" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
$exec $execrate $cp $i $OK/$i
|
||
}
|
||
}
|
||
done
|
||
if test -f ../lib/make/makerules.mo
|
||
then cmp -s ../lib/make/makerules.mo $OK/lib/makerules.mo ||
|
||
$exec $execrate $cp -p ../lib/make/makerules.mo $OK/lib/makerules.mo ||
|
||
$exec $execrate $cp ../lib/make/makerules.mo $OK/lib/makerules.mo
|
||
fi
|
||
if executable $OK/nmake
|
||
then MAKE="$INSTALLROOT/bin/$OK/nmake LOCALRULESPATH=$INSTALLROOT/bin/$OK/lib"
|
||
fi
|
||
if executable $OK/tee
|
||
then TEE=$INSTALLROOT/bin/$OK/tee
|
||
fi
|
||
if test "$KEEP_SHELL" != 1 && executable $OK/ksh
|
||
then SHELL=$INSTALLROOT/bin/$OK/ksh
|
||
export SHELL
|
||
COSHELL=$SHELL
|
||
export COSHELL
|
||
fi
|
||
case :$PATH: in
|
||
*:$INSTALLROOT/bin/$OK:*)
|
||
;;
|
||
*) PATH=$INSTALLROOT/bin/$OK:$PATH
|
||
export PATH
|
||
;;
|
||
esac
|
||
$make cd $INSTALLROOT/src
|
||
;;
|
||
esac
|
||
|
||
# fall back to mamake if nmake not found or too old
|
||
|
||
if nonmake $MAKE
|
||
then note make with mamake
|
||
case $target in
|
||
'') target="install" ;;
|
||
esac
|
||
eval capture mamake \$makeflags \$noexec \$target $assign
|
||
else case $target in
|
||
'') target="install cc-" ;;
|
||
esac
|
||
eval capture \$MAKE \$makeflags \$nmakeflags \$noexec recurse \$target \$nmakesep \$package $assign
|
||
fi
|
||
;;
|
||
|
||
read) case ${PWD:-`pwd`} in
|
||
$PACKAGEROOT)
|
||
;;
|
||
*) echo "$command: must be in package root directory" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
PAX=
|
||
if onpath pax
|
||
then case `$_onpath_ -rw --?meter 2>&1` in
|
||
*--meter*) PAX=pax ;;
|
||
esac
|
||
fi
|
||
code=0
|
||
i=
|
||
x=
|
||
remove=
|
||
touch=
|
||
set '' $target
|
||
case $2 in
|
||
lcl|tgz)tgz=$2
|
||
shift 2
|
||
target=$*
|
||
;;
|
||
*) tgz=tgz
|
||
;;
|
||
esac
|
||
set '' $package $target
|
||
case $# in
|
||
1) verbose=:
|
||
set '' `ls lib/package/$tgz/*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
|
||
;;
|
||
*) verbose=
|
||
;;
|
||
esac
|
||
shift
|
||
files=
|
||
for f
|
||
do if test -f "$f"
|
||
then : ok
|
||
elif test -f "lib/package/$tgz/$f"
|
||
then f=lib/package/$tgz/$f
|
||
else set '' `ls -r ${f}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
|
||
if test '' != "$2" -a -f "$2"
|
||
then f=$2
|
||
else set '' `ls -r lib/package/$tgz/${f}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]* 2>/dev/null`
|
||
if test '' != "$2" -a -f "$2"
|
||
then f=$2
|
||
else echo "$command: $f: package archive not found" >&2
|
||
continue
|
||
fi
|
||
fi
|
||
fi
|
||
files="$files $f"
|
||
done
|
||
case $files in
|
||
'') echo "$command: lib/package/$tgz: no package archives" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
set '' `ls -r $files 2>/dev/null`
|
||
shift
|
||
f1= f2= f3= f4=
|
||
for f
|
||
do case $f in
|
||
ratz.*|*/ratz.*)
|
||
f1="$f1 $f"
|
||
;;
|
||
INIT.*|*/INIT.*)
|
||
f2="$f2 $f"
|
||
;;
|
||
INIT*|*/INIT*)
|
||
f3="$f3 $f"
|
||
;;
|
||
*) f4="$f4 $f"
|
||
;;
|
||
esac
|
||
done
|
||
gen=
|
||
set '' $f1 $f2 $f3 $f4
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break ;;
|
||
esac
|
||
f=$1
|
||
case $f in
|
||
*.gz) : standalone packages unbundled manually
|
||
continue
|
||
;;
|
||
*.md5) : tarball checksum
|
||
continue
|
||
;;
|
||
*?[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]*)
|
||
;;
|
||
*) echo "$command: $f: not a package archive" >&2
|
||
code=1
|
||
continue
|
||
;;
|
||
esac
|
||
case $f in
|
||
*/*) eval `echo "$f" | sed -e 's,\(.*/\)\(.*\),d=\1 a=\2,'` ;;
|
||
*) d= a=$f ;;
|
||
esac
|
||
# f:file d:dir a:base p:package v:version r:release t:type
|
||
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,'`
|
||
case $r in
|
||
base) y=$p.base ;;
|
||
*) y=$p.delta ;;
|
||
esac
|
||
case " $x " in
|
||
*" $y "*)
|
||
continue
|
||
;;
|
||
esac
|
||
case $t in
|
||
'') w=$PACKAGESRC
|
||
q=
|
||
Q=
|
||
m=
|
||
;;
|
||
*) w=$PACKAGEROOT/arch/$t/lib/package
|
||
q=".$t"
|
||
Q="_$t"
|
||
m="[_.]$t"
|
||
;;
|
||
esac
|
||
u=$d$p$q.tim
|
||
if test -s "$u"
|
||
then continue
|
||
else case $force in
|
||
0) case `ls -t "$f" "$u" 2>/dev/null` in
|
||
"$u"*) case $verbose in
|
||
1) note $p already read ;;
|
||
esac
|
||
continue
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
fi
|
||
case $p in
|
||
INIT) if test -f $PACKAGEROOT/bin/package
|
||
then $exec mv $PACKAGEROOT/bin/package $PACKAGEROOT/bin/package.old
|
||
fi
|
||
;;
|
||
esac
|
||
z=
|
||
case $r in
|
||
base) # base archive
|
||
if test ratz = "$p"
|
||
then # ratz packages are not archives
|
||
case $t in
|
||
'') for i in src src/cmd src/cmd/INIT
|
||
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
|
||
done
|
||
$exec cp $f $PACKAGEROOT/src/cmd/INIT/$p.c
|
||
;;
|
||
*) for i in arch arch/$t arch/$t/bin
|
||
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
|
||
done
|
||
$exec cp $f $PACKAGEROOT/arch/$t/bin/$p &&
|
||
$exec chmod +x $PACKAGEROOT/arch/$t/bin/$p
|
||
;;
|
||
esac
|
||
elif test "" != "$PAX"
|
||
then $exec pax -L --from=ascii --local -m -ps -rvf "$f" || {
|
||
code=1
|
||
continue
|
||
}
|
||
else if onpath gunzip && onpath $TAR && isascii
|
||
then case $TARPROBE in
|
||
?*) for i in $TARPROBE
|
||
do if $TAR ${i}f - /dev/null > /dev/null 2>&1
|
||
then TARFLAGS=$TARFLAGS$i
|
||
fi
|
||
done
|
||
TARPROBE=
|
||
;;
|
||
esac
|
||
if gunzip -l < "$f" > /dev/null 2>&1
|
||
then case $exec in
|
||
'') $exec gunzip < "$f" | $TAR ${TARFLAGS}f - ;;
|
||
*) $exec "gunzip < $f | $TAR ${TARFLAGS}f -" ;;
|
||
esac || {
|
||
code=1
|
||
continue
|
||
}
|
||
else $exec $TAR ${TARFLAGS}f "$f" || {
|
||
code=1
|
||
continue
|
||
}
|
||
fi
|
||
else checkaout ratz && onpath ratz || {
|
||
code=1
|
||
continue
|
||
}
|
||
RATZ=$_onpath_
|
||
case $exec in
|
||
'') echo $f:
|
||
$exec $RATZ -lm < "$f"
|
||
;;
|
||
*) $exec "$RATZ -lm < $f"
|
||
;;
|
||
esac || {
|
||
code=1
|
||
continue
|
||
}
|
||
fi
|
||
if test -f $PACKAGEBIN/gen/$p.sum
|
||
then while read md5 mode usr grp file
|
||
do case $file in
|
||
-*) file=./$file ;;
|
||
esac
|
||
case $mode in
|
||
[01234567][01234567][01234567][01234567])
|
||
case $grp in
|
||
-) ;;
|
||
*) $exec chgrp $grp "$file" ;;
|
||
esac
|
||
case $usr in
|
||
-) ;;
|
||
*) $exec chown $usr "$file" ;;
|
||
esac
|
||
$exec chmod $mode "$file"
|
||
;;
|
||
esac
|
||
done < $PACKAGEBIN/gen/$p.sum
|
||
fi
|
||
fi
|
||
;;
|
||
*) # delta archive
|
||
test "" != "$PAX" || {
|
||
echo "$command: $f: pax required to read delta archive" >&2
|
||
code=1
|
||
continue
|
||
}
|
||
case `echo "$v:
|
||
$r:" | sort` in
|
||
$r:*) y=$p.base
|
||
b=${d}${p}_${r}${Q}.tgz
|
||
test -f "$b" || b=${d}${p}.${r}${q}.tgz
|
||
test -f "$b" || {
|
||
case " $gen " in
|
||
*" $b "*)
|
||
;;
|
||
*) case $# in
|
||
1) echo "$command: $f: base archive $b required to read delta" >&2
|
||
code=1
|
||
;;
|
||
*) shift
|
||
y=$1
|
||
shift
|
||
set '' $y $f "$@"
|
||
esac
|
||
continue
|
||
;;
|
||
esac
|
||
}
|
||
# -m with delta bug fixed 2005-02-08
|
||
$exec pax -L --from=ascii --local -ps -rvf "$f" -z "$b" || {
|
||
code=1
|
||
continue
|
||
}
|
||
note $f: generate new base $d$p.$v$q.tgz
|
||
$exec pax -rf "$f" -z "$b" -wf $d$p.$v$q.tgz -x tgz || {
|
||
code=1
|
||
continue
|
||
}
|
||
case $exec in
|
||
'') echo $p $v $v 1 > $w/gen/$p.ver
|
||
;;
|
||
*) z=$d${p}[_.]$v$q.tgz
|
||
$exec "echo $p $v $v 1 > $w/gen/$p.ver"
|
||
gen="$gen $d$p.$v$q.tgz"
|
||
;;
|
||
esac
|
||
case " $remove " in
|
||
*" $f "*) ;;
|
||
*) remove="$remove $f" ;;
|
||
esac
|
||
;;
|
||
*) b=${d}${p}_${v}${Q}.tgz
|
||
test -f "$b" || b=${d}${p}.${v}${q}.tgz
|
||
test -f "$b" || {
|
||
case " $gen " in
|
||
*" $b "*)
|
||
;;
|
||
*) case $# in
|
||
1) echo "$command: $f: base archive $b required to read delta" >&2
|
||
code=1
|
||
;;
|
||
*) shift
|
||
y=$1
|
||
shift
|
||
set '' $y $f "$@"
|
||
esac
|
||
continue
|
||
;;
|
||
esac
|
||
}
|
||
# -m with delta bug fixed 2005-02-08
|
||
$exec pax -L --from=ascii --local -ps -rvf "$f" -z "$b" || {
|
||
code=1
|
||
continue
|
||
}
|
||
;;
|
||
esac
|
||
;;
|
||
*) echo "$command: $f: unknown archive type" >&2
|
||
code=1
|
||
continue
|
||
;;
|
||
esac
|
||
|
||
# check for ini files
|
||
|
||
if executable $w/$p.ini
|
||
then $exec $w/$p.ini read || {
|
||
code=1
|
||
continue
|
||
}
|
||
fi
|
||
|
||
# add to the obsolete list
|
||
|
||
k=
|
||
for i in `ls $d$p[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.]????$m* $z 2>/dev/null`
|
||
do case $i in
|
||
*.md5) continue
|
||
;;
|
||
$d${p}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789][_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]$m*)
|
||
;;
|
||
$d${p}[_.][0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]$m*)
|
||
continue
|
||
;;
|
||
esac
|
||
case $k in
|
||
?*) case " $remove " in
|
||
*" $k "*) ;;
|
||
*) remove="$remove $k" ;;
|
||
esac
|
||
;;
|
||
esac
|
||
k=$i
|
||
done
|
||
x="$x $y"
|
||
case " $touch " in
|
||
*" $u "*) ;;
|
||
*) touch="$touch $u" ;;
|
||
esac
|
||
done
|
||
if test ! -f $PACKAGEROOT/bin/package -a -f $PACKAGEROOT/bin/package.old
|
||
then $exec cp $PACKAGEROOT/bin/package.old $PACKAGEROOT/bin/package
|
||
fi
|
||
|
||
# drop obsolete archives
|
||
|
||
case $remove in
|
||
?*) $exec rm -f $remove ;;
|
||
esac
|
||
|
||
# mark the updated archives
|
||
|
||
case $touch in
|
||
?*) sleep 1; $exec touch $touch ;;
|
||
esac
|
||
|
||
# check the requirements
|
||
|
||
case $code$exec in
|
||
0) requirements - $x ;;
|
||
esac
|
||
exit $code
|
||
;;
|
||
|
||
regress)if test ! -d $PACKAGEBIN/gen
|
||
then echo "$command: 'package make' and 'package test' required for regression" >&2
|
||
exit 1
|
||
fi
|
||
dir=$PACKAGEBIN/gen
|
||
cd $dir
|
||
for s in out old
|
||
do case `ls -t regress.$s test.$s 2>/dev/null` in
|
||
regress*)
|
||
;;
|
||
test*) if test -f regress.$s
|
||
then $exec mv regress.$s regress.old
|
||
fi
|
||
case $exec in
|
||
'') egrep -i '\*\*\*|FAIL|^TEST.* [123456789][0123456789]* error|core.*dump' test.$s |
|
||
sed -e '/\*\*\* [0123456789]/d' \
|
||
-e '/^TEST.\//s,/[^ ]*/,,' \
|
||
-e 's,[ ][ ]*$,,' \
|
||
-e 's/[0123456789][0123456789]*:* \([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*[Cc][Oo][Rr][Ee][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789 ]*)\)/\1/' \
|
||
-e 's/\.sh failed at .* with /.sh failed /' \
|
||
> regress.$s
|
||
;;
|
||
*) $exec filter test failures from $dir/test.$s to $dir/regress.$s
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
if test -f regress.out -a -f regress.old
|
||
then $exec diff -b regress.out regress.old
|
||
else echo "$command: at least 2 test runs required for regression" >&2
|
||
exit 1
|
||
fi
|
||
;;
|
||
|
||
release)count= lo= hi=
|
||
checksrc
|
||
checkaout release || exit
|
||
requirements source $package
|
||
components $package
|
||
package=$_components_
|
||
set '' $target
|
||
shift
|
||
case $# in
|
||
0) ;;
|
||
*) case $1 in
|
||
-|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
|
||
case $1 in
|
||
-) lo= release= ;;
|
||
*) lo=$1 release="-f $1" ;;
|
||
esac
|
||
shift
|
||
case $1 in
|
||
-|[0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789])
|
||
case $1 in
|
||
-) hi= ;;
|
||
*) hi=$1 release="$release -t $1" ;;
|
||
esac
|
||
shift
|
||
;;
|
||
esac
|
||
;;
|
||
[0123456789]|[0123456789][0123456789]|[0123456789][0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789]|[0123456789][0123456789][0123456789][0123456789][0123456789]*)
|
||
count=$1
|
||
release="-r $count"
|
||
shift
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $# in
|
||
0) case $package in
|
||
'') package=* ;;
|
||
esac
|
||
;;
|
||
*) case $package in
|
||
'') package=$*
|
||
;;
|
||
*) echo $command: $*: lo-date hi-date arguments expected >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
echo
|
||
case $count:$lo:$hi in
|
||
::) echo "All recorded changes follow." ;;
|
||
1::) echo "Changes since the last release follow." ;;
|
||
?*::) echo "Changes since the last $count releases follow." ;;
|
||
1:?*:) echo "Changes since $lo or the last release follow." ;;
|
||
*:?*:*) echo "Changes since $lo follow." ;;
|
||
*::?*) echo "Changes before $hi follow." ;;
|
||
*) echo "Changes between $lo and $hi follow." ;;
|
||
esac
|
||
x=
|
||
for r in $INSTALLROOT $PACKAGEROOT
|
||
do for s in $package_src
|
||
do d=$r/src/$s
|
||
if test -d $d
|
||
then cd $d
|
||
for i in $package
|
||
do if test -h $i 2>/dev/null
|
||
then continue
|
||
fi
|
||
case " $x " in
|
||
*" $i "*) continue ;;
|
||
esac
|
||
for f in RELEASE CHANGES ChangeLog
|
||
do if test -f $i/$f
|
||
then $exec release $release $i/$f
|
||
x="$x $i"
|
||
for f in $i/*/$f
|
||
do if test -f $f
|
||
then $exec release $release $f
|
||
fi
|
||
done
|
||
break
|
||
fi
|
||
done
|
||
done
|
||
fi
|
||
done
|
||
done
|
||
;;
|
||
|
||
remove) echo "$command: $action: not implemented yet" >&2
|
||
exit 1
|
||
;;
|
||
|
||
results)set '' $target
|
||
shift
|
||
def=make
|
||
dir=$PACKAGEBIN/gen
|
||
case $verbose in
|
||
0) filter=yes ;;
|
||
*) filter=cat ;;
|
||
esac
|
||
path=0
|
||
suf=out
|
||
on=
|
||
while :
|
||
do case $# in
|
||
0) break ;;
|
||
esac
|
||
case $1 in
|
||
--) shift
|
||
break
|
||
;;
|
||
admin) dir=$PACKAGESRC/admin
|
||
;;
|
||
error*|fail*)
|
||
filter=errors
|
||
;;
|
||
make|test|view|write)
|
||
def=$1
|
||
case $filter:$1:$SHELL in
|
||
errors:*:*) ;;
|
||
*:test:*/ksh*) filter=rt ;;
|
||
esac
|
||
;;
|
||
old) suf=old
|
||
;;
|
||
on) case $# in
|
||
1) echo $command: $action: $1: host pattern argument expected >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
shift
|
||
case $on in
|
||
?*) on="$on|" ;;
|
||
esac
|
||
on="$on$1"
|
||
;;
|
||
path) path=1
|
||
;;
|
||
test) def=test
|
||
filter=rt
|
||
;;
|
||
*) break
|
||
;;
|
||
esac
|
||
shift
|
||
done
|
||
case $dir in
|
||
*/admin)case $on in
|
||
'') on="*" ;;
|
||
*) on="@($on)" ;;
|
||
esac
|
||
def=$def.log/$on
|
||
;;
|
||
esac
|
||
case $# in
|
||
0) set "$def" ;;
|
||
esac
|
||
m=
|
||
t=
|
||
for i
|
||
do k=0
|
||
eval set '""' $i - $i.$suf - $dir/$i - $dir/$i.$suf -
|
||
shift
|
||
for j
|
||
do case $j in
|
||
-) case $k in
|
||
1) continue 2 ;;
|
||
esac
|
||
;;
|
||
*) if test -f $j
|
||
then k=1
|
||
case /$j in
|
||
*/test.*) t="$t $j" ;;
|
||
*) m="$m $j" ;;
|
||
esac
|
||
fi
|
||
;;
|
||
esac
|
||
done
|
||
echo "$command: $i action output not found" >&2
|
||
exit 1
|
||
done
|
||
sep=
|
||
case $t in
|
||
?*) case $path in
|
||
0) for j in $t
|
||
do echo "$sep==> $j <=="
|
||
sep=$nl
|
||
case $filter in
|
||
cat) $exec cat $j
|
||
;;
|
||
errors) $exec egrep -i '\*\*\*|FAIL[ES]|^TEST.* [123456789][0123456789]* error|core.*dump' $j | sed -e '/^TEST.\//s,/[^ ]*/,,'
|
||
;;
|
||
rt) $exec $KSH rt - $j
|
||
;;
|
||
*) $exec egrep -i '^TEST|FAIL' $j
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
1) echo $t
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $m in
|
||
?*) case $path in
|
||
0) case $filter in
|
||
cat) cat $m
|
||
;;
|
||
*) if test -f $HOME/.pkgresults
|
||
then i="`cat $HOME/.pkgresults`"
|
||
case $i in
|
||
'|'*) ;;
|
||
*) i="|$i" ;;
|
||
esac
|
||
else i=
|
||
fi
|
||
for j in $m
|
||
do echo "$sep==> $j <=="
|
||
sep=$nl
|
||
case $filter in
|
||
errors) $exeg egrep '^pax:|\*\*\*' $j
|
||
;;
|
||
*) $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 |
|
||
$exec grep :
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
1) echo $m
|
||
;;
|
||
esac
|
||
esac
|
||
;;
|
||
|
||
test) requirements source $package
|
||
components $package
|
||
package=$_components_
|
||
case $only in
|
||
0) only= ;;
|
||
1) only=--recurse=only ;;
|
||
esac
|
||
|
||
# must have nmake
|
||
|
||
if nonmake $MAKE
|
||
then echo $command: $action: must have $MAKE to test >&2
|
||
exit 1
|
||
fi
|
||
|
||
# all work under $INSTALLROOT/src
|
||
|
||
$make cd $INSTALLROOT/src
|
||
|
||
# disable core dumps (could be disastrous over nfs)
|
||
|
||
(ulimit -c 0) > /dev/null 2>&1 && ulimit -c 0
|
||
|
||
# do the tests
|
||
|
||
eval capture \$MAKE \$makeflags \$noexec \$only recurse test \$target \$nmakesep \$package $assign
|
||
;;
|
||
|
||
update) # download the latest release.version for selected packages
|
||
|
||
# all work in $PACKAGEROOT/lib/package/tgz
|
||
|
||
if test ! -d $PACKAGEROOT/lib/package/tgz
|
||
then $exec mkdir -p $PACKAGEROOT/lib/package/tgz || exit
|
||
$exec cd $PACKAGEROOT/lib/package/tgz
|
||
else cd $PACKAGEROOT/lib/package/tgz
|
||
fi
|
||
|
||
# get the architectures, update query url, and packages
|
||
|
||
set '' $args
|
||
op=update
|
||
tgz=tgz
|
||
source=
|
||
binary=
|
||
setup=
|
||
types=
|
||
url=
|
||
urlfile=$default_url
|
||
while :
|
||
do shift
|
||
case $# in
|
||
0) break ;;
|
||
esac
|
||
case $1 in
|
||
--) shift
|
||
break
|
||
;;
|
||
beta) op=beta
|
||
tgz=beta
|
||
;;
|
||
binary) binary=1
|
||
;;
|
||
setup) setup=1
|
||
;;
|
||
source) source=1
|
||
;;
|
||
*://*) url=$1
|
||
shift
|
||
break
|
||
;;
|
||
*.url) urlfile=$1
|
||
if test ! -s $urlfile
|
||
then echo $command: $urlfile: not found >&2; exit 1
|
||
fi
|
||
break
|
||
;;
|
||
$all_types)
|
||
binary=1
|
||
types="$types $1"
|
||
;;
|
||
*) break
|
||
;;
|
||
esac
|
||
done
|
||
case $source:$binary in
|
||
:) source=1 binary=1
|
||
;;
|
||
:1) case $types in
|
||
'') types=$HOSTTYPE ;;
|
||
esac
|
||
;;
|
||
esac
|
||
case $url in
|
||
'') case $urlfile in
|
||
$default_url)
|
||
if test ! -s $urlfile
|
||
then echo $command: url argument expected >&2; exit 1
|
||
fi
|
||
;;
|
||
*) default_url=
|
||
;;
|
||
esac
|
||
url=
|
||
if grep '^url=' $urlfile >/dev/null
|
||
then a=$authorize
|
||
p=$password
|
||
case $urlfile in
|
||
*/*) ;;
|
||
*) urlfile=./$urlfile ;;
|
||
esac
|
||
. $urlfile
|
||
case $a:$p in
|
||
$authorize:$password)
|
||
default_url=
|
||
;;
|
||
*) case $a in
|
||
?*) authorize=$a ;;
|
||
esac
|
||
case $p in
|
||
?*) password=$p ;;
|
||
esac
|
||
;;
|
||
esac
|
||
else url=`cat $urlfile`
|
||
fi
|
||
;;
|
||
esac
|
||
case $exec in
|
||
?*) default_url= ;;
|
||
esac
|
||
|
||
# get the update list
|
||
|
||
eval `echo $url | sed 's,\(.*\)://\([^/]*\)/\(.*\),prot=\"\1\" host=\"\2\" dir=\"\3\",'`
|
||
get $host $dir/$op.html
|
||
|
||
# get/check the package names
|
||
|
||
case " $* " in
|
||
*" - "*)case $source in
|
||
1) source_packages=$* ;;
|
||
*) source_packages= ;;
|
||
esac
|
||
case $binary in
|
||
1) binary_packages=$* ;;
|
||
*) binary_packages= ;;
|
||
esac
|
||
package_hit=$*
|
||
;;
|
||
" ") nl="
|
||
"
|
||
case $source in
|
||
1) p=
|
||
for f in `ls *.????-??-??.* 2>/dev/null`
|
||
do case $f in
|
||
*.????-??-??.????-??-??.*.*)
|
||
;;
|
||
*.????-??-??.????-??-??.*)
|
||
p=$p$nl$f
|
||
;;
|
||
*.????-??-??.*.*)
|
||
;;
|
||
*.????-??-??.*)
|
||
p=$p$nl$f
|
||
;;
|
||
esac
|
||
done
|
||
set '' `echo "$p" | sed 's,\..*,,' | sort -u`
|
||
shift
|
||
source_packages=$*
|
||
;;
|
||
*) source_packages=
|
||
;;
|
||
esac
|
||
case $binary in
|
||
1) p=
|
||
for f in `ls *.????-??-??.* 2>/dev/null`
|
||
do case $f in
|
||
*.????-??-??.????-??-??.*.*)
|
||
p=$p$nl$f
|
||
;;
|
||
*.????-??-??.????-??-??.*)
|
||
;;
|
||
*.????-??-??.*.*)
|
||
p=$p$nl$f
|
||
;;
|
||
*.????-??-??.*)
|
||
;;
|
||
esac
|
||
done
|
||
set '' `echo "$p" | sed 's,\..*,,' | sort -u`
|
||
shift
|
||
binary_packages=$*
|
||
;;
|
||
*) binary_packages=
|
||
;;
|
||
esac
|
||
package_hit="$source_packages $binary_packages"
|
||
;;
|
||
*) case $source in
|
||
1) source_packages=$* ;;
|
||
*) source_packages= ;;
|
||
esac
|
||
case $binary in
|
||
1) binary_packages=$* ;;
|
||
*) binary_packages= ;;
|
||
esac
|
||
package_hit=
|
||
;;
|
||
esac
|
||
|
||
# get the latest updates
|
||
|
||
types_test=
|
||
types_local=
|
||
dir=$dir/$tgz
|
||
case $default_url in
|
||
?*) echo "url='$url' authorize='$authorize' password='$password'" > $default_url
|
||
case $authorize in
|
||
?*) chmod go-rwx $default_url ;;
|
||
esac
|
||
;;
|
||
esac
|
||
echo "$got" > got.tmp
|
||
case $only in
|
||
0) exec < got.tmp
|
||
covered=
|
||
while read name suffix type base base_size delta delta_size sync sync_size requires covers base_sum delta_sum sync_sum comment
|
||
do case $requires in
|
||
''|-*) continue ;;
|
||
esac
|
||
IFS=:
|
||
set '' $requires
|
||
IFS=$ifs
|
||
case $type in
|
||
-) case " $source_packages " in
|
||
*" $name "*|*" - "*)
|
||
for name
|
||
do case " $source_packages " in
|
||
*" $name "*)
|
||
;;
|
||
*) source_packages="$source_packages $name"
|
||
covered=$covered:$covers
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
*) case " $binary_packages " in
|
||
*" $name "*|*" - "*)
|
||
for name
|
||
do case " $binary_packages " in
|
||
*" $name "*)
|
||
;;
|
||
*) binary_packages="$binary_packages $name"
|
||
covered=$covered:$covers
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
case $covered in
|
||
?*) x=$source_packages
|
||
source_packages=
|
||
for name in $x
|
||
do case :$covered: in
|
||
*:$name:*) ;;
|
||
*) source_packages="$source_packages $name" ;;
|
||
esac
|
||
done
|
||
x=$binary_packages
|
||
binary_packages=
|
||
for name in $x
|
||
do case :$covered: in
|
||
*:$name:*) ;;
|
||
*) binary_packages="$binary_packages $name" ;;
|
||
esac
|
||
done
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
checksum=
|
||
for i in $checksum_commands
|
||
do case `( $i ) < /dev/null 2> /dev/null` in
|
||
${checksum_empty}|${checksum_empty}[\ \ ]*)
|
||
checksum=$i
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
case $checksum in
|
||
'') echo $command: warning: '{' $checksum_commands '}' command not found -- only download sizes will be checked >&2 ;;
|
||
esac
|
||
exec < got.tmp
|
||
while read name suffix type base base_size delta delta_size sync sync_size requires covers base_sum delta_sum sync_sum comment
|
||
do case $verbose in
|
||
1) case $type in
|
||
-) i= ;;
|
||
*) i=.$type ;;
|
||
esac
|
||
j="$name.$base$i.$suffix"
|
||
case $delta in
|
||
-) j="$j -" ;;
|
||
*) j="$j $name.$base.$delta$i.$suffix" ;;
|
||
esac
|
||
case $sync in
|
||
-) j="$j -" ;;
|
||
*) j="$j $name.$base.$sync$i.$suffix" ;;
|
||
esac
|
||
echo $command: $j $base_size:$base_sum $delta_size:$delta_sum $sync_size:$sync_sum $requires >&2
|
||
esac
|
||
case " $package_hit " in
|
||
*" $name "*|*" - "*)
|
||
;;
|
||
*) package_hit="$package_hit $name"
|
||
;;
|
||
esac
|
||
case $type in
|
||
-) case " $source_packages " in
|
||
*" $name "*|*" - "*)
|
||
if test -s $name.tim
|
||
then continue
|
||
fi
|
||
lcl=$name.$base.$suffix
|
||
if test -f $lcl
|
||
then case $checksum:$base_sum in
|
||
:*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$base_sum ;;
|
||
*) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
|
||
esac
|
||
else size=X sum=X
|
||
fi
|
||
if test "0" != "$force" -a "X-" = "X$delta" -o "$base_size" != "$size" -o "$base_sum" != "$sum"
|
||
then rmt=
|
||
case $sync:$sync_size in
|
||
-*|*[-:])
|
||
;;
|
||
*) lcl=$name.$base.$sync.$suffix
|
||
if test -f $lcl
|
||
then rmt=1
|
||
get $host $dir $lcl $sync_size $sync_sum
|
||
fi
|
||
;;
|
||
esac
|
||
case $base:$base_size in
|
||
-*|*[-:])
|
||
;;
|
||
*) case $rmt in
|
||
'') lcl=$name.$base.$suffix
|
||
get $host $dir $lcl $base_size $base_sum
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
fi
|
||
case $delta:$delta_size in
|
||
-*|*[-:])
|
||
;;
|
||
*) lcl=$name.$delta.$base.$suffix
|
||
if test -f $lcl
|
||
then case $checksum:$delta_sum in
|
||
:*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$delta_sum ;;
|
||
*) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
|
||
esac
|
||
else size=X sum=X
|
||
fi
|
||
if test "0" != "$force" -o "$delta_size" != "$size" -o "$delta_sum" != "$sum"
|
||
then get $host $dir $lcl $delta_size $delta_sum
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
*) case " $binary_packages " in
|
||
*" $name "*|*" - "*)
|
||
if test -s $name.$type.tim
|
||
then continue
|
||
fi
|
||
case " $types " in
|
||
*" - "*);;
|
||
" ") case " $types_test " in
|
||
*" $type "*)
|
||
;;
|
||
*) types_test="$types_test $type"
|
||
for i in *.????-??-??.$type.* *.????-??-??.????-??-??.$type.*
|
||
do if test -f $i
|
||
then types_local="$types_local $type"
|
||
fi
|
||
break
|
||
done
|
||
;;
|
||
esac
|
||
case " $types_local " in
|
||
*" $type "*)
|
||
;;
|
||
*) continue
|
||
;;
|
||
esac
|
||
;;
|
||
*) case " $types " in
|
||
*" $type "*)
|
||
;;
|
||
*) continue
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
lcl=$name.$base.$type.$suffix
|
||
if test -f $lcl
|
||
then case $checksum:$base_sum in
|
||
:*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$base_sum ;;
|
||
*) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
|
||
esac
|
||
else size=X sum=X
|
||
fi
|
||
if test "0" != "$force" -a "X-" = "X$delta" -o "$base_size" != "$size" -o "$base_sum" != "$sum"
|
||
then rmt=
|
||
case $sync:$sync_size in
|
||
-*|*[-:])
|
||
;;
|
||
*) lcl=$name.$base.$sync.$type.$suffix
|
||
if test -f $lcl
|
||
then rmt=1
|
||
get $host $dir $lcl $sync_size $sync_sum
|
||
fi
|
||
;;
|
||
esac
|
||
case $base:$base_size in
|
||
-*|*[-:])
|
||
;;
|
||
*) case $rmt in
|
||
'') lcl=$name.$base.$type.$suffix
|
||
get $host $dir $lcl $base_size $base_sum
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
fi
|
||
case $delta:$delta_size in
|
||
-*|*[-:])
|
||
;;
|
||
*) lcl=$name.$delta.$base.$type.$suffix
|
||
if test -f $lcl
|
||
then sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'`
|
||
else sum=X
|
||
fi
|
||
if test -f $lcl
|
||
then case $checksum:$delta_sum in
|
||
:*|*:-) size=`wc -c < $lcl | sed 's, ,,g'` sum=$delta_sum ;;
|
||
*) size=$base_size sum=`$checksum < $lcl | sed -e 's,^[ ][ ]*,,' -e 's,[ ].*,,'` ;;
|
||
esac
|
||
else size=X sum=X
|
||
fi
|
||
if test "0" != "$force" -o "$delta_size" != "$size" -o "$delta_sum" != "$sum"
|
||
then get $host $dir $lcl $delta_size $delta_sum
|
||
fi
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
closure=
|
||
for name in $source_packages $binary_packages
|
||
do case $name in
|
||
-) ;;
|
||
*) case " $package_hit " in
|
||
*" $name "*)
|
||
case $setup in
|
||
1) case " $closure " in
|
||
*" $name "*)
|
||
;;
|
||
*) closure="$closure $name"
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
;;
|
||
*) echo $command: $name: unknown package >&2
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
done
|
||
exec <&-
|
||
rm -f got.tmp
|
||
case $closure in
|
||
?*) echo $closure ;;
|
||
esac
|
||
;;
|
||
|
||
use) # finalize the environment
|
||
|
||
x=:..
|
||
for d in `( cd $PACKAGEROOT; ls src/*/Makefile src/*/Nmakefile 2>/dev/null | sed 's,/[^/]*$,,' | sort -u )`
|
||
do x=$x:$INSTALLROOT/$d
|
||
done
|
||
x=$x:$INSTALLROOT
|
||
case $CDPATH: in
|
||
$x:*) ;;
|
||
*) CDPATH=$x:$CDPATH
|
||
$show CDPATH=$CDPATH
|
||
$show export CDPATH
|
||
export CDPATH
|
||
;;
|
||
esac
|
||
P=$PACKAGEROOT
|
||
$show P=$P
|
||
$show export P
|
||
export P
|
||
A=$INSTALLROOT
|
||
$show A=$A
|
||
$show export A
|
||
export A
|
||
case $NPROC in
|
||
'') hostinfo cpu
|
||
case $_hostinfo_ in
|
||
0|1) ;;
|
||
*) NPROC=$_hostinfo_
|
||
$show NPROC=$NPROC
|
||
$show export NPROC
|
||
export NPROC
|
||
;;
|
||
esac
|
||
;;
|
||
esac
|
||
eval PACKAGE_USE=$package_use
|
||
export PACKAGE_USE
|
||
|
||
# run the command
|
||
|
||
case $run in
|
||
'') case $show in
|
||
':') $exec exec $SHELL ;;
|
||
esac
|
||
;;
|
||
*) $exec exec $SHELL -c "$run"
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
verify) cd $PACKAGEROOT
|
||
requirements binary $package
|
||
if executable ! $SUM
|
||
then echo "$command: $action: $SUM command required" >&2
|
||
exit 1
|
||
fi
|
||
case $target in
|
||
'') cd arch
|
||
set '' *
|
||
shift
|
||
target=$*
|
||
cd ..
|
||
;;
|
||
esac
|
||
code=0
|
||
for a in $target
|
||
do case $package in
|
||
'') set '' arch/$a/lib/package/gen/*.sum
|
||
shift
|
||
if test -f $1
|
||
then for i
|
||
do package_verify $i || code=1
|
||
done
|
||
else echo "$command: warning: $a: no binary packages" >&2
|
||
fi
|
||
;;
|
||
*) for i in $package
|
||
do if test -f arch/$a/lib/package/gen/$i.sum
|
||
then package_verify arch/$a/lib/package/gen/$i.sum || code=1
|
||
else echo "$command: warning: $a: no binary package for $i" >&2
|
||
fi
|
||
done
|
||
;;
|
||
esac
|
||
done
|
||
exit $code
|
||
;;
|
||
|
||
write) set '' $target
|
||
shift
|
||
action=
|
||
list=
|
||
qualifier=
|
||
while :
|
||
do case $1 in
|
||
base|closure|delta|exp|lcl|pkg|rpm|tgz)
|
||
qualifier="$qualifier $1"
|
||
;;
|
||
binary) action=$1
|
||
type=$HOSTTYPE
|
||
eval list=$PACKAGESRC/tgz/$admin_list
|
||
;;
|
||
cyg) qualifier="$qualifier $1"
|
||
assign="$assign closure=1"
|
||
only=1
|
||
;;
|
||
runtime|source)
|
||
action=$1
|
||
;;
|
||
tst) qualifier="$qualifier tgz"
|
||
assign="$assign copyright=0 'PACKAGEDIR=\$(PACKAGESRC)/tst'"
|
||
;;
|
||
nocopyright)
|
||
assign="$assign copyright=0"
|
||
;;
|
||
*) break
|
||
;;
|
||
esac
|
||
shift
|
||
done
|
||
case $action in
|
||
'') echo "$command: binary or source operand expected" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
set '' "$@" $package
|
||
shift
|
||
case $only in
|
||
0) set '' `order "$@"`
|
||
shift
|
||
;;
|
||
esac
|
||
case $# in
|
||
0) echo "$command: at least one package name expected" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
if nonmake $MAKE
|
||
then echo "$command: must have $MAKE to generate archives" >&2
|
||
exit 1
|
||
fi
|
||
|
||
# all work under $PACKAGEBIN
|
||
|
||
$make cd $PACKAGEBIN
|
||
case $list in
|
||
?*) $exec rm -f $list ;;
|
||
esac
|
||
|
||
# go for it
|
||
|
||
for package
|
||
do if view - all $package.pkg || view - all lib/package/$package.pkg
|
||
then eval capture \$MAKE \$makeflags -X ignore \$noexec -f \$package.pkg \$qualifier \$action $assign
|
||
else echo "$command: $package: not a package" >&2
|
||
fi
|
||
done
|
||
;;
|
||
|
||
TEST) set '' $target $package
|
||
shift
|
||
case $1 in
|
||
binary|source)
|
||
action=$1
|
||
shift
|
||
;;
|
||
esac
|
||
order "$@"
|
||
;;
|
||
|
||
*) echo "$command: $action: internal error" >&2
|
||
exit 1
|
||
;;
|
||
|
||
esac
|
||
|
||
exit "$error_status"
|