1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

bin/package: more cleanups (re: 9166545a)

src/cmd/INIT/package.sh, bin/package:
- Derive the command name from $0 instead of hardcoding it.
- Remove NPROC and related code to support parallel building. This
  is not supported with mamake, is unlikely to be reintroduced any
  time soon, and if it ever is it will need to be done in a
  different way anwyay.
- Invoke 'sed' and 'tr' directly instead of via $SED and $TR
  variables. We're not building our own dynamically linked 'sed'
  and 'tr' in this distribution so LD_LIBRARY_PATH is irrelevant.
  If we ever do again, there are better ways to make sure the OS
  standard 'sed' and 'tr' are invoked than this kludge.
- Use note() consistently to print warnings to standard error.
  note() is changed to print each argument on a new line prefixed
  by the command name, so arguments need to be quoted now if they
  are to be shown on a single line.
- Use a new err_out() function to error out, avoiding code
  repetition.
This commit is contained in:
Martijn Dekker 2021-12-18 14:38:23 +00:00
parent ce3e080c0e
commit 69e0de9274
2 changed files with 196 additions and 338 deletions

View file

@ -23,7 +23,6 @@
# based on AST 'package' by Glenn Fowler <gsf@research.att.com> #
# simplified and rewritten by Martijn Dekker <martijn@inlv.org> #
########################################################################
command=package
# Escape from a non-POSIX shell
min_posix='path=Bad && case $PATH in (Bad) exit 1;; esac && '\
@ -95,18 +94,17 @@ lib="" # need /usr/local/lib /usr/local/shlib
ccs="/usr/kvm /usr/ccs/bin"
org="gnu GNU"
makefiles="Mamfile" # ksh 93u+m no longer uses these: Nmakefile nmakefile Makefile makefile
env="HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH"
env="HOSTTYPE PACKAGEROOT INSTALLROOT PATH"
package_use='=$HOSTTYPE=$PACKAGEROOT=$INSTALLROOT=$EXECROOT=$CC='
CROSS=0
MAKESKIP=${MAKESKIP:-"*[-.]*"}
SED=
TR=
all_types='*.*|sun4' # all but sun4 match *.*
command=${0##*/}
case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
0123) USAGE=$'
[-?
@ -125,7 +123,7 @@ case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
All package files are in the \b$PACKAGEROOT\b directory tree.
Binary package files are in the \b$INSTALLROOT\b
(\b$PACKAGEROOT/arch/\b\ahosttype\a) tree, where
\ahosttpe\a=$(\bbin/package host type\b).
\ahosttype\a=$(\bbin/package host type\b).
See \bDETAILS\b for more information.]
[+?Note that no environment variables need be set by the user;
\b'$command$'\b determines the environment based on the current working
@ -371,6 +369,8 @@ do case $# in
exec 1>&2
;;
esac
# Plain-text fallback. Regenerate with:
# ksh -c 'COLUMNS=80 bin/package --man' 2>&1 | sed "s/'/'\\\\''/g; 1s/^/echo '/; \$s/\$/'/"
echo 'NAME
package - build, test and install ksh 93u+m
@ -383,7 +383,7 @@ DESCRIPTION
POSIX shell and C compiler installation are the only requirements. All
package files are in the $PACKAGEROOT directory tree. Binary package files
are in the $INSTALLROOT ($PACKAGEROOT/arch/hosttype) tree, where
hosttpe=$(bin/package host type). See DETAILS for more information.
hosttype=$(bin/package host type). See DETAILS for more information.
Note that no environment variables need be set by the user; package
determines the environment based on the current working directory. The use
@ -417,8 +417,7 @@ DESCRIPTION
export [ variable ...]
List name=value for variable, one per line. If the only attribute is
specified then only the variable values are listed. If no variables
are specified then HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH are
assumed.
are specified then HOSTTYPE PACKAGEROOT INSTALLROOT PATH are assumed.
help [ action ]
Display help text on the standard error (standard output for action).
host [ attribute ... ]
@ -727,7 +726,7 @@ use) case $1 in
*) HOSTTYPE=$HOSTTYPE-64 ;;
esac
case $wow in
*/32) echo $command: cannot build $bit-bit on $wow $sys >&2; exit 2 ;;
*/32) err_out "cannot build $bit-bit on $wow $sys" ;;
esac
;;
esac
@ -739,8 +738,8 @@ use) case $1 in
$exec umask 002
$exec unset MAKESKIP
$exec export P=$PWD
$exec export A=$P/arch/$HOSTTYPE
P=$PWD
A=$P/arch/$HOSTTYPE
$exec export CDPATH=:..:$A/src/cmd:$A/src/lib:$A/src/uwin:$P/lib/package
$exec export INSTALLROOT=$A
@ -857,28 +856,8 @@ hostinfo() # attribute ...
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')
?*) for i in $(echo "$PACKAGE_PATH" | sed 's,:, ,g')
do PATH=$PATH:$i/bin
done
;;
@ -902,16 +881,14 @@ hostinfo() # attribute ...
cpu|name|rating|type)
something=1
;;
*) echo "$command: $action: $info: unknown attribute" >&2
exit 1
*) err_out "$action: $info: unknown attribute"
;;
esac
;;
esac
done
case $canon in
-) echo "$command: $action: canon: host type name expected" >&2
exit 1
-) err_out "$action: canon: host type name expected"
;;
esac
case $something in
@ -929,13 +906,7 @@ hostinfo() # attribute ...
for info
do
case $info in
cpu) case $NPROC in
[123456789]*)
_hostinfo_="$_hostinfo_ $NPROC"
continue
;;
esac
cpu=$(sysctl -n hw.ncpu)
cpu) cpu=$(sysctl -n hw.ncpu)
case $cpu in
[123456789]*)
_hostinfo_="$_hostinfo_ $cpu"
@ -1002,7 +973,7 @@ hostinfo() # attribute ...
do case $# in
0) break ;;
esac
i=$($1 2>/dev/null | $TR ' ' '
i=$($1 2>/dev/null | tr ' ' '
' | grep -c "^$2")
case $i in
@ -1031,7 +1002,7 @@ hostinfo() # attribute ...
do case $# in
0) break ;;
esac
i=$($1 2>/dev/null | $SED -e "${2}!d" -e "s${3}")
i=$($1 2>/dev/null | sed -e "${2}!d" -e "s${3}")
case $i in
[123456789]*)
cpu=$i
@ -1075,7 +1046,7 @@ int main()
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,')
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
@ -1267,14 +1238,14 @@ int main()
esac
a=$(arch || uname -m || att uname -m || uname -s || att uname -s)
case $a in
*[\ \ ]*) a=$(echo $a | $SED "s/[ ]/-/g") ;;
*[\ \ ]*) 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") ;;
*[\ \ ]*) m=$(echo $m | sed "s/[ ]/-/g") ;;
esac
case $m in
'') m=unknown ;;
@ -1297,7 +1268,7 @@ int main()
esac
case $os in
[abcdefghijklmnopqrstuvwxyz]*[0123456789])
eval $(echo $os | $SED -e 's/^\([^0123456789.]*\)\.*\(.*\)/os=\1 rel=\2/')
eval $(echo $os | sed -e 's/^\([^0123456789.]*\)\.*\(.*\)/os=\1 rel=\2/')
;;
esac
;;
@ -1308,7 +1279,7 @@ int main()
esac
type=unknown
case $host in
*.*) host=$(echo $host | $SED -e 's/\..*//') ;;
*.*) host=$(echo $host | sed -e 's/\..*//') ;;
esac
case $mach in
unknown)
@ -1368,14 +1339,14 @@ int main()
9000/[78]*)
type=hp.pa
;;
*/*) type=hp.$(echo $arch | $SED 's,/,_,g')
*/*) 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)
set xx $(hinv | sed -e '/^CPU:/!d' -e 's/CPU:[ ]*\([^ ]*\)[ ]*\([^ ]*\).*/\1 \2/' -e q | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
shift
type=$1
n=
@ -1420,7 +1391,7 @@ int main()
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)
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
@ -1456,7 +1427,7 @@ int main()
type=sco
;;
[Ss]ol*)
v=$(echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//')
v=$(echo $rel | sed -e 's/^[25]\.//' -e 's/\.[^.]*$//')
case $v in
[6789]|[1-9][0-9])
;;
@ -1475,7 +1446,7 @@ int main()
esac
type=sol$v.$arch
;;
[Ss]un*)type=$(echo $arch | $SED -e 's/\(sun.\).*/\1/')
[Ss]un*)type=$(echo $arch | sed -e 's/\(sun.\).*/\1/')
case $type in
sparc) type=sun4 ;;
esac
@ -1496,7 +1467,7 @@ int main()
esac
;;
esac
v=$(echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//')
v=$(echo $rel | sed -e 's/^[25]\.//' -e 's/\.[^.]*$//')
case $v in
[6789]|[1-9][0-9])
;;
@ -1553,7 +1524,7 @@ int main()
FTX*|ftx*)
case $mach in
*[0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
mach=$(echo $mach | $SED -e 's/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*$//')
mach=$(echo $mach | sed -e 's/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*$//')
;;
esac
type=stratus.$mach
@ -1563,7 +1534,7 @@ int main()
type=os2
arch=$rel
;;
*) type=$(echo $os | $SED -e 's/[0123456789].*//' -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789.].*//')
*) type=$(echo $os | sed -e 's/[0123456789].*//' -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789.].*//')
;;
esac
case $type in
@ -1572,7 +1543,7 @@ int main()
;;
[Uu][Ww][Ii][Nn]*|[Ww]indows_[0123456789][0123456789]|[Ww]indows_[Nn][Tt])
type=win32
arch=$(echo $arch | $SED -e 's/_[^_]*$//')
arch=$(echo $arch | sed -e 's/_[^_]*$//')
;;
esac
case $arch in
@ -1621,16 +1592,16 @@ int main()
esac
case $type in
*[-_]32|*[-_]64|*[-_]128)
bits=$(echo $type | $SED 's,.*[-_],,')
type=$(echo $type | $SED 's,[-_][0-9]*$,,')
bits=$(echo $type | sed 's,.*[-_],,')
type=$(echo $type | sed 's,[-_][0-9]*$,,')
;;
*) bits=
;;
esac
type=$(echo $type | $SED -e 's%[-+/].*%%' | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
type=$(echo $type | sed -e 's%[-+/].*%%' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
case $type in
*.*) lhs=$(echo $type | $SED -e 's/\..*//')
rhs=$(echo $type | $SED -e 's/.*\.//')
*.*) lhs=$(echo $type | sed -e 's/\..*//')
rhs=$(echo $type | sed -e 's/.*\.//')
case $rhs in
[x0123456789]*86) rhs=i$rhs ;;
68*) rhs=m$rhs ;;
@ -1640,7 +1611,7 @@ int main()
rhs=i386 ;;
powerpc) rhs=ppc ;;
s[0123456789]*[0123456789]x)
rhs=$(echo $rhs | $SED -e 's/x$/-64/') ;;
rhs=$(echo $rhs | sed -e 's/x$/-64/') ;;
esac
case $rhs in
arm[abcdefghijklmnopqrstuvwxyz_][0123456789]*)
@ -1654,7 +1625,7 @@ int main()
?*dwarf)x=coff ;;
?*elf) x=elf ;;
esac
lhs=$(echo ${lhs}XXX | $SED -e "s/${x}XXX//")
lhs=$(echo ${lhs}XXX | sed -e "s/${x}XXX//")
;;
esac
case $lhs in
@ -1668,7 +1639,7 @@ int main()
;;
freebsd) case $rel in
[01234].*) lhs=${lhs}4 ;;
[123456789]*.*) lhs=${lhs}$(echo $rel | $SED -e 's/\..*//') ;;
[123456789]*.*) lhs=${lhs}$(echo $rel | sed -e 's/\..*//') ;;
esac
;;
hpux) lhs=hp ;;
@ -1722,7 +1693,7 @@ int b() { return 0; }
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
then type=$(echo $type | sed -e 's/.$//')$i
break
fi
done
@ -1814,7 +1785,13 @@ int b() { return 0; }
note() # message ...
{
echo $command: "$@" >&2
printf "$command: %s\\n" "$@" >&2
}
err_out()
{
note "$@"
exit 1
}
# cc checks
@ -1837,7 +1814,7 @@ checkcc()
fi
case $cc in
'') case $action in
make|test) note "$CC: not found"; exit 1 ;;
make|test) err_out "$CC: not found" ;;
*) note "warning: $CC: not found" ;;
esac
;;
@ -2022,16 +1999,12 @@ case $x in
case $action in
export|use)
packageroot $PACKAGEROOT || {
echo "$command: $PACKAGEROOT: invalid package root directory" >&2
exit 1
}
packageroot $PACKAGEROOT || err_out "$PACKAGEROOT: invalid package root directory"
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
else err_out "$hosttype: package root not found"
fi
;;
esac
@ -2039,8 +2012,7 @@ case $x in
*) packageroot $PACKAGEROOT || {
case $KEEP_PACKAGEROOT in
1) ;;
*) echo "$command: $PACKAGEROOT: must be in the package root directory tree" >&2
exit 1
*) err_out "$PACKAGEROOT: must be in the package root directory tree"
;;
esac
}
@ -2062,7 +2034,7 @@ case $x in
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
note "update $PACKAGEROOT/bin/$i"
shellmagic
case $SHELLMAGIC in
'') $exec cp $INITROOT/$i.sh $PACKAGEROOT/bin/$i || exit
@ -2102,11 +2074,10 @@ cat $INITROOT/$i.sh
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
then err_out "${warn}$CC: must be a C compiler (not C++)"
else cat pkg$$.e
echo "$command: ${warn}$CC: failed to compile and link $INITROOT/hello.c -- is it a C compiler?" >&2
err_out "${warn}$CC: failed to compile and link $INITROOT/hello.c -- is it a C compiler?"
fi
exit 2
}
if ./pkg$$.exe >/dev/null 2>&1
then code=0
@ -2298,11 +2269,10 @@ cat $INITROOT/$i.sh
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
echo "$command: If not, your $TMPDIR directory may be mounted without execute permission." >&2
echo "$command: Try exporting TMPDIR as a directory where you can execute binary files." >&2
exit 1
err_out "$CC seems to be a cross-compiler." \
"Set HOSTTYPE to something other than the native $EXECTYPE." \
"If not, your $TMPDIR directory may be mounted without execute permission." \
"Try exporting TMPDIR as a directory where you can execute binary files."
;;
esac
;;
@ -2343,8 +2313,8 @@ cat $INITROOT/$i.sh
PATH=$save_PATH
unset save_PATH
case $KEEP_SHELL in
0) echo "Cannot find good default shell, please supply SHELL=/path/to/shell" >&2
exit 1 ;;
0) err_out "Cannot find a good default shell; please supply SHELL=/path/to/shell"
;;
esac
;;
esac
@ -2458,8 +2428,7 @@ cygwin.*)
;;
esac
case $lose in
?*) echo "$command: $HOSTTYPE: export '$lose' in CYGWIN or languish in Windows" >&2
exit 1
?*) err_out "$HOSTTYPE: export '$lose' in CYGWIN or languish in Windows"
;;
esac
;;
@ -2526,7 +2495,7 @@ view() # [test] [-|type] [src|bin|all] file
esac
_view_=
case $_view_t_ in
?*) echo $command: $1: $_view_t_ not found >&2 ;;
?*) note "$1: $_view_t_ not found" ;;
esac
return 1
}
@ -2588,7 +2557,7 @@ int main(int argc, char** argv) { return argc || argv; }
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
note "$i: command not found"
return 1
}
done
@ -2599,7 +2568,7 @@ int main(int argc, char** argv) { return argc || argv; }
;;
*) _PACKAGE_cc=1
test -f $INITROOT/hello.c -a -f $INITROOT/p.c || {
echo "$command: $INITROOT: INIT package source not found" >&2
note "$INITROOT: INIT package source not found"
return 1
}
@ -2615,7 +2584,7 @@ int main(int argc, char** argv) { return argc || argv; }
$show PROTOROOT=$PACKAGEROOT/proto
export PROTOROOT
INITPROTO=$PROTOROOT/src/cmd/INIT
note proto convert $PACKAGEROOT/src into $PROTOROOT/src
note "proto convert $PACKAGEROOT/src into $PROTOROOT/src"
dirs="src"
(
if test -f $PROTOROOT/UPDATE
@ -2671,17 +2640,17 @@ int main(int argc, char** argv) { return argc || argv; }
*00) view - bin/$i && continue ;;
esac
case $k in
000) echo "$command: $i: not found: download the INIT package $HOSTTYPE binary to continue" >&2
000) note "$i: not found: download the INIT package $HOSTTYPE binary to continue"
return 1
;;
010) echo "$command: $i: not found: set CC=C-compiler or download the INIT package $HOSTTYPE binary to continue" >&2
010) note "$i: not found: set CC=C-compiler or download the INIT package $HOSTTYPE binary to continue"
return 1
;;
100) echo "$command: $i: not found: download the INIT package source or $HOSTTYPE binary to continue" >&2
100) note "$i: not found: download the INIT package source or $HOSTTYPE binary to continue"
return 1
;;
110) case $CROSS in
1) echo "$command: $i: not found: make the local $EXECTYPE binary package before $HOSTTYPE" >&2
1) note "$i: not found: make the local $EXECTYPE binary package before $HOSTTYPE"
return 1
;;
esac
@ -2699,7 +2668,7 @@ int main(int argc, char** argv) { return argc || argv; }
esac
case $(ls -t $INITROOT/$i.c $INSTALLROOT/bin/$i 2>/dev/null) in
"$INITROOT/$i.c"*)
note update $INSTALLROOT/bin/$i
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 ;;
@ -2797,7 +2766,7 @@ capture() # file command ...
fi
o=$o.out
: > $o
note $action output captured in $o
note "$action output captured in $o"
s="$command: $action start at $(date) in $INSTALLROOT"
case $quiet in
0) cmd="echo \"$command: $action done at \$(date)\" in $INSTALLROOT 2>&1 | \$TEE -a $o" ;;
@ -2955,10 +2924,9 @@ make|view)
;;
*) case " $must " in
*" $t "*)
echo "$command: $t: not found -- must be on PATH to $action" >&2
exit 1
err_out "$t: not found -- must be on PATH to $action"
;;
*) echo "$command: warning: $t: not found -- some $action actions may fail" >&2
*) note "warning: $t: not found -- some $action actions may fail"
;;
esac
;;
@ -2968,10 +2936,10 @@ make|view)
# verify the top view
if test ! -d $PACKAGEROOT/src
then note no source packages to make
then note "no source packages to make"
exit 0
elif test ! -d $INSTALLROOT/src
then note initialize the $INSTALLROOT view
then note "initialize the $INSTALLROOT view"
fi
for i in arch arch/$HOSTTYPE
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
@ -3049,7 +3017,7 @@ make|view)
$exec chmod +x "$b" || exit
cc=$b
intercept=1
note update $b
note "update $b"
;;
esac
fi
@ -3070,7 +3038,7 @@ make|view)
case $(ls -t "$b" "$s" 2>/dev/null) in
$b*) ;;
$s*) $exec cp "$s" "$b"
note update $b
note "update $b"
;;
esac
done
@ -3088,7 +3056,7 @@ make|view)
case $(ls -t "$b" "$s" 2>/dev/null) in
$b*) ;;
$s*) $exec cp "$s" "$b"
note update $b
note "update $b"
;;
esac
done
@ -3100,14 +3068,13 @@ make|view)
case $(ls -t "$b" "$s" 2>/dev/null) in
$b*) ;;
$s*) $exec cp "$s" "$b"
note update $b
note "update $b"
;;
esac
done
case $cc in
/*) ;;
*) echo "$command: $CC: not found -- set CC=C-compiler" >&2
exit 1
*) err_out "$CC: not found -- set CC=C-compiler"
;;
esac
case $exec in
@ -3117,11 +3084,11 @@ make|view)
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
else note "$CC: failed to compile this program:"
cat $tmp.c >&2
if test -s $tmp.err
then cat $tmp.err >&2
else echo "$command: $CC: not a C compiler" >&2
else note "$CC: not a C compiler"
fi
rm -f $tmp.*
exit 1
@ -3154,7 +3121,7 @@ make|view)
} > $INSTALLROOT/bin/cc
chmod +x $INSTALLROOT/bin/cc
;;
*) note generate a $INSTALLROOT/bin/cc wrapper for $CC
*) note "generate a $INSTALLROOT/bin/cc wrapper for $CC"
;;
esac
CC=cc
@ -3180,7 +3147,7 @@ make|view)
case $(ls -t $i $j $k 2>/dev/null) in
$i*) ;;
*) if test -f $j -a -f $k
then note update $i
then note "update $i"
shellmagic
case $exec in
'') {
@ -3250,7 +3217,7 @@ cat $j $k
'') new="(none)" ;;
*) new="'$new'" ;;
esac
echo "$command: $var changed from $old to $new" >&2
note "$var changed from $old to $new"
err=y ;;
esac
else test -d $INSTALLROOT/lib/package/gen && case $new in
@ -3260,9 +3227,9 @@ cat $j $k
fi
done
case $err,${FORCE_FLAGS+f} in
y,) echo "$command: This would likely break the build. Restore the flag(s)," >&2
echo "$command: or delete the build directory and rebuild from scratch." >&2
exit 1 ;;
y,) err_out "This would likely break the build. Restore the flag(s)," \
"or delete the build directory and rebuild from scratch."
;;
esac
unset err var store old new
@ -3278,21 +3245,6 @@ cat $j $k
;;
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
@ -3412,8 +3364,7 @@ cat $j $k
test -f $OK/$i &&
case $exec:$i in
:ksh)
echo "$command: $OK/$i: cannot update [may be in use by a running process] remove manually and try again" >&2
exit 1
err_out "$OK/$i: cannot update [may be in use by a running process] remove manually and try again"
;;
esac
$exec $execrate $cp $i $OK/$i
@ -3440,17 +3391,13 @@ cat $j $k
# build with mamake
note make with mamake
note "make with mamake"
case $target in
'') target="install" ;;
esac
eval capture mamake \$makeflags \$noexec \$target $assign
;;
remove) echo "$command: $action: not implemented yet" >&2
exit 1
;;
results)set '' $target
shift
def=make
@ -3483,8 +3430,7 @@ results)set '' $target
old) suf=old
;;
on) case $# in
1) echo $command: $action: $1: host pattern argument expected >&2
exit 1
1) err_out "$action: $1: host pattern argument expected"
;;
esac
shift
@ -3536,8 +3482,7 @@ results)set '' $target
;;
esac
done
echo "$command: $i action output not found" >&2
exit 1
err_out "$i action output not found"
done
sep=
case $t in
@ -3614,33 +3559,18 @@ use) # finalize the environment
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
'') note "You are now entering a new environment set up to use the package in:" \
" $INSTALLROOT" \
"You're using the shell:" \
" $SHELL" \
"Type 'exit' to leave and go back to normal."
case $show in
':') $exec exec $SHELL ;;
esac
;;
@ -3649,8 +3579,7 @@ use) # finalize the environment
esac
;;
*) echo "$command: $action: internal error" >&2
exit 1
*) err_out "$action: internal error"
;;
esac

View file

@ -23,7 +23,6 @@
# based on AST 'package' by Glenn Fowler <gsf@research.att.com> #
# simplified and rewritten by Martijn Dekker <martijn@inlv.org> #
########################################################################
command=package
# Escape from a non-POSIX shell
min_posix='path=Bad && case $PATH in (Bad) exit 1;; esac && '\
@ -95,18 +94,17 @@ lib="" # need /usr/local/lib /usr/local/shlib
ccs="/usr/kvm /usr/ccs/bin"
org="gnu GNU"
makefiles="Mamfile" # ksh 93u+m no longer uses these: Nmakefile nmakefile Makefile makefile
env="HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH"
env="HOSTTYPE PACKAGEROOT INSTALLROOT PATH"
package_use='=$HOSTTYPE=$PACKAGEROOT=$INSTALLROOT=$EXECROOT=$CC='
CROSS=0
MAKESKIP=${MAKESKIP:-"*[-.]*"}
SED=
TR=
all_types='*.*|sun4' # all but sun4 match *.*
command=${0##*/}
case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
0123) USAGE=$'
[-?
@ -125,7 +123,7 @@ case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
All package files are in the \b$PACKAGEROOT\b directory tree.
Binary package files are in the \b$INSTALLROOT\b
(\b$PACKAGEROOT/arch/\b\ahosttype\a) tree, where
\ahosttpe\a=$(\bbin/package host type\b).
\ahosttype\a=$(\bbin/package host type\b).
See \bDETAILS\b for more information.]
[+?Note that no environment variables need be set by the user;
\b'$command$'\b determines the environment based on the current working
@ -371,6 +369,8 @@ do case $# in
exec 1>&2
;;
esac
# Plain-text fallback. Regenerate with:
# ksh -c 'COLUMNS=80 bin/package --man' 2>&1 | sed "s/'/'\\\\''/g; 1s/^/echo '/; \$s/\$/'/"
echo 'NAME
package - build, test and install ksh 93u+m
@ -383,7 +383,7 @@ DESCRIPTION
POSIX shell and C compiler installation are the only requirements. All
package files are in the $PACKAGEROOT directory tree. Binary package files
are in the $INSTALLROOT ($PACKAGEROOT/arch/hosttype) tree, where
hosttpe=$(bin/package host type). See DETAILS for more information.
hosttype=$(bin/package host type). See DETAILS for more information.
Note that no environment variables need be set by the user; package
determines the environment based on the current working directory. The use
@ -417,8 +417,7 @@ DESCRIPTION
export [ variable ...]
List name=value for variable, one per line. If the only attribute is
specified then only the variable values are listed. If no variables
are specified then HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH are
assumed.
are specified then HOSTTYPE PACKAGEROOT INSTALLROOT PATH are assumed.
help [ action ]
Display help text on the standard error (standard output for action).
host [ attribute ... ]
@ -727,7 +726,7 @@ use) case $1 in
*) HOSTTYPE=$HOSTTYPE-64 ;;
esac
case $wow in
*/32) echo $command: cannot build $bit-bit on $wow $sys >&2; exit 2 ;;
*/32) err_out "cannot build $bit-bit on $wow $sys" ;;
esac
;;
esac
@ -739,8 +738,8 @@ use) case $1 in
$exec umask 002
$exec unset MAKESKIP
$exec export P=$PWD
$exec export A=$P/arch/$HOSTTYPE
P=$PWD
A=$P/arch/$HOSTTYPE
$exec export CDPATH=:..:$A/src/cmd:$A/src/lib:$A/src/uwin:$P/lib/package
$exec export INSTALLROOT=$A
@ -857,28 +856,8 @@ hostinfo() # attribute ...
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')
?*) for i in $(echo "$PACKAGE_PATH" | sed 's,:, ,g')
do PATH=$PATH:$i/bin
done
;;
@ -902,16 +881,14 @@ hostinfo() # attribute ...
cpu|name|rating|type)
something=1
;;
*) echo "$command: $action: $info: unknown attribute" >&2
exit 1
*) err_out "$action: $info: unknown attribute"
;;
esac
;;
esac
done
case $canon in
-) echo "$command: $action: canon: host type name expected" >&2
exit 1
-) err_out "$action: canon: host type name expected"
;;
esac
case $something in
@ -929,13 +906,7 @@ hostinfo() # attribute ...
for info
do
case $info in
cpu) case $NPROC in
[123456789]*)
_hostinfo_="$_hostinfo_ $NPROC"
continue
;;
esac
cpu=$(sysctl -n hw.ncpu)
cpu) cpu=$(sysctl -n hw.ncpu)
case $cpu in
[123456789]*)
_hostinfo_="$_hostinfo_ $cpu"
@ -1002,7 +973,7 @@ hostinfo() # attribute ...
do case $# in
0) break ;;
esac
i=$($1 2>/dev/null | $TR ' ' '
i=$($1 2>/dev/null | tr ' ' '
' | grep -c "^$2")
case $i in
@ -1031,7 +1002,7 @@ hostinfo() # attribute ...
do case $# in
0) break ;;
esac
i=$($1 2>/dev/null | $SED -e "${2}!d" -e "s${3}")
i=$($1 2>/dev/null | sed -e "${2}!d" -e "s${3}")
case $i in
[123456789]*)
cpu=$i
@ -1075,7 +1046,7 @@ int main()
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,')
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
@ -1267,14 +1238,14 @@ int main()
esac
a=$(arch || uname -m || att uname -m || uname -s || att uname -s)
case $a in
*[\ \ ]*) a=$(echo $a | $SED "s/[ ]/-/g") ;;
*[\ \ ]*) 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") ;;
*[\ \ ]*) m=$(echo $m | sed "s/[ ]/-/g") ;;
esac
case $m in
'') m=unknown ;;
@ -1297,7 +1268,7 @@ int main()
esac
case $os in
[abcdefghijklmnopqrstuvwxyz]*[0123456789])
eval $(echo $os | $SED -e 's/^\([^0123456789.]*\)\.*\(.*\)/os=\1 rel=\2/')
eval $(echo $os | sed -e 's/^\([^0123456789.]*\)\.*\(.*\)/os=\1 rel=\2/')
;;
esac
;;
@ -1308,7 +1279,7 @@ int main()
esac
type=unknown
case $host in
*.*) host=$(echo $host | $SED -e 's/\..*//') ;;
*.*) host=$(echo $host | sed -e 's/\..*//') ;;
esac
case $mach in
unknown)
@ -1368,14 +1339,14 @@ int main()
9000/[78]*)
type=hp.pa
;;
*/*) type=hp.$(echo $arch | $SED 's,/,_,g')
*/*) 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)
set xx $(hinv | sed -e '/^CPU:/!d' -e 's/CPU:[ ]*\([^ ]*\)[ ]*\([^ ]*\).*/\1 \2/' -e q | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
shift
type=$1
n=
@ -1420,7 +1391,7 @@ int main()
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)
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
@ -1456,7 +1427,7 @@ int main()
type=sco
;;
[Ss]ol*)
v=$(echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//')
v=$(echo $rel | sed -e 's/^[25]\.//' -e 's/\.[^.]*$//')
case $v in
[6789]|[1-9][0-9])
;;
@ -1475,7 +1446,7 @@ int main()
esac
type=sol$v.$arch
;;
[Ss]un*)type=$(echo $arch | $SED -e 's/\(sun.\).*/\1/')
[Ss]un*)type=$(echo $arch | sed -e 's/\(sun.\).*/\1/')
case $type in
sparc) type=sun4 ;;
esac
@ -1496,7 +1467,7 @@ int main()
esac
;;
esac
v=$(echo $rel | $SED -e 's/^[25]\.//' -e 's/\.[^.]*$//')
v=$(echo $rel | sed -e 's/^[25]\.//' -e 's/\.[^.]*$//')
case $v in
[6789]|[1-9][0-9])
;;
@ -1553,7 +1524,7 @@ int main()
FTX*|ftx*)
case $mach in
*[0123456789][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
mach=$(echo $mach | $SED -e 's/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*$//')
mach=$(echo $mach | sed -e 's/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*$//')
;;
esac
type=stratus.$mach
@ -1563,7 +1534,7 @@ int main()
type=os2
arch=$rel
;;
*) type=$(echo $os | $SED -e 's/[0123456789].*//' -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789.].*//')
*) type=$(echo $os | sed -e 's/[0123456789].*//' -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789.].*//')
;;
esac
case $type in
@ -1572,7 +1543,7 @@ int main()
;;
[Uu][Ww][Ii][Nn]*|[Ww]indows_[0123456789][0123456789]|[Ww]indows_[Nn][Tt])
type=win32
arch=$(echo $arch | $SED -e 's/_[^_]*$//')
arch=$(echo $arch | sed -e 's/_[^_]*$//')
;;
esac
case $arch in
@ -1621,16 +1592,16 @@ int main()
esac
case $type in
*[-_]32|*[-_]64|*[-_]128)
bits=$(echo $type | $SED 's,.*[-_],,')
type=$(echo $type | $SED 's,[-_][0-9]*$,,')
bits=$(echo $type | sed 's,.*[-_],,')
type=$(echo $type | sed 's,[-_][0-9]*$,,')
;;
*) bits=
;;
esac
type=$(echo $type | $SED -e 's%[-+/].*%%' | $TR ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
type=$(echo $type | sed -e 's%[-+/].*%%' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
case $type in
*.*) lhs=$(echo $type | $SED -e 's/\..*//')
rhs=$(echo $type | $SED -e 's/.*\.//')
*.*) lhs=$(echo $type | sed -e 's/\..*//')
rhs=$(echo $type | sed -e 's/.*\.//')
case $rhs in
[x0123456789]*86) rhs=i$rhs ;;
68*) rhs=m$rhs ;;
@ -1640,7 +1611,7 @@ int main()
rhs=i386 ;;
powerpc) rhs=ppc ;;
s[0123456789]*[0123456789]x)
rhs=$(echo $rhs | $SED -e 's/x$/-64/') ;;
rhs=$(echo $rhs | sed -e 's/x$/-64/') ;;
esac
case $rhs in
arm[abcdefghijklmnopqrstuvwxyz_][0123456789]*)
@ -1654,7 +1625,7 @@ int main()
?*dwarf)x=coff ;;
?*elf) x=elf ;;
esac
lhs=$(echo ${lhs}XXX | $SED -e "s/${x}XXX//")
lhs=$(echo ${lhs}XXX | sed -e "s/${x}XXX//")
;;
esac
case $lhs in
@ -1668,7 +1639,7 @@ int main()
;;
freebsd) case $rel in
[01234].*) lhs=${lhs}4 ;;
[123456789]*.*) lhs=${lhs}$(echo $rel | $SED -e 's/\..*//') ;;
[123456789]*.*) lhs=${lhs}$(echo $rel | sed -e 's/\..*//') ;;
esac
;;
hpux) lhs=hp ;;
@ -1722,7 +1693,7 @@ int b() { return 0; }
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
then type=$(echo $type | sed -e 's/.$//')$i
break
fi
done
@ -1814,7 +1785,13 @@ int b() { return 0; }
note() # message ...
{
echo $command: "$@" >&2
printf "$command: %s\\n" "$@" >&2
}
err_out()
{
note "$@"
exit 1
}
# cc checks
@ -1837,7 +1814,7 @@ checkcc()
fi
case $cc in
'') case $action in
make|test) note "$CC: not found"; exit 1 ;;
make|test) err_out "$CC: not found" ;;
*) note "warning: $CC: not found" ;;
esac
;;
@ -2022,16 +1999,12 @@ case $x in
case $action in
export|use)
packageroot $PACKAGEROOT || {
echo "$command: $PACKAGEROOT: invalid package root directory" >&2
exit 1
}
packageroot $PACKAGEROOT || err_out "$PACKAGEROOT: invalid package root directory"
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
else err_out "$hosttype: package root not found"
fi
;;
esac
@ -2039,8 +2012,7 @@ case $x in
*) packageroot $PACKAGEROOT || {
case $KEEP_PACKAGEROOT in
1) ;;
*) echo "$command: $PACKAGEROOT: must be in the package root directory tree" >&2
exit 1
*) err_out "$PACKAGEROOT: must be in the package root directory tree"
;;
esac
}
@ -2062,7 +2034,7 @@ case $x in
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
note "update $PACKAGEROOT/bin/$i"
shellmagic
case $SHELLMAGIC in
'') $exec cp $INITROOT/$i.sh $PACKAGEROOT/bin/$i || exit
@ -2102,11 +2074,10 @@ cat $INITROOT/$i.sh
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
then err_out "${warn}$CC: must be a C compiler (not C++)"
else cat pkg$$.e
echo "$command: ${warn}$CC: failed to compile and link $INITROOT/hello.c -- is it a C compiler?" >&2
err_out "${warn}$CC: failed to compile and link $INITROOT/hello.c -- is it a C compiler?"
fi
exit 2
}
if ./pkg$$.exe >/dev/null 2>&1
then code=0
@ -2298,11 +2269,10 @@ cat $INITROOT/$i.sh
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
echo "$command: If not, your $TMPDIR directory may be mounted without execute permission." >&2
echo "$command: Try exporting TMPDIR as a directory where you can execute binary files." >&2
exit 1
err_out "$CC seems to be a cross-compiler." \
"Set HOSTTYPE to something other than the native $EXECTYPE." \
"If not, your $TMPDIR directory may be mounted without execute permission." \
"Try exporting TMPDIR as a directory where you can execute binary files."
;;
esac
;;
@ -2343,8 +2313,8 @@ cat $INITROOT/$i.sh
PATH=$save_PATH
unset save_PATH
case $KEEP_SHELL in
0) echo "Cannot find good default shell, please supply SHELL=/path/to/shell" >&2
exit 1 ;;
0) err_out "Cannot find a good default shell; please supply SHELL=/path/to/shell"
;;
esac
;;
esac
@ -2458,8 +2428,7 @@ cygwin.*)
;;
esac
case $lose in
?*) echo "$command: $HOSTTYPE: export '$lose' in CYGWIN or languish in Windows" >&2
exit 1
?*) err_out "$HOSTTYPE: export '$lose' in CYGWIN or languish in Windows"
;;
esac
;;
@ -2526,7 +2495,7 @@ view() # [test] [-|type] [src|bin|all] file
esac
_view_=
case $_view_t_ in
?*) echo $command: $1: $_view_t_ not found >&2 ;;
?*) note "$1: $_view_t_ not found" ;;
esac
return 1
}
@ -2588,7 +2557,7 @@ int main(int argc, char** argv) { return argc || argv; }
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
note "$i: command not found"
return 1
}
done
@ -2599,7 +2568,7 @@ int main(int argc, char** argv) { return argc || argv; }
;;
*) _PACKAGE_cc=1
test -f $INITROOT/hello.c -a -f $INITROOT/p.c || {
echo "$command: $INITROOT: INIT package source not found" >&2
note "$INITROOT: INIT package source not found"
return 1
}
@ -2615,7 +2584,7 @@ int main(int argc, char** argv) { return argc || argv; }
$show PROTOROOT=$PACKAGEROOT/proto
export PROTOROOT
INITPROTO=$PROTOROOT/src/cmd/INIT
note proto convert $PACKAGEROOT/src into $PROTOROOT/src
note "proto convert $PACKAGEROOT/src into $PROTOROOT/src"
dirs="src"
(
if test -f $PROTOROOT/UPDATE
@ -2671,17 +2640,17 @@ int main(int argc, char** argv) { return argc || argv; }
*00) view - bin/$i && continue ;;
esac
case $k in
000) echo "$command: $i: not found: download the INIT package $HOSTTYPE binary to continue" >&2
000) note "$i: not found: download the INIT package $HOSTTYPE binary to continue"
return 1
;;
010) echo "$command: $i: not found: set CC=C-compiler or download the INIT package $HOSTTYPE binary to continue" >&2
010) note "$i: not found: set CC=C-compiler or download the INIT package $HOSTTYPE binary to continue"
return 1
;;
100) echo "$command: $i: not found: download the INIT package source or $HOSTTYPE binary to continue" >&2
100) note "$i: not found: download the INIT package source or $HOSTTYPE binary to continue"
return 1
;;
110) case $CROSS in
1) echo "$command: $i: not found: make the local $EXECTYPE binary package before $HOSTTYPE" >&2
1) note "$i: not found: make the local $EXECTYPE binary package before $HOSTTYPE"
return 1
;;
esac
@ -2699,7 +2668,7 @@ int main(int argc, char** argv) { return argc || argv; }
esac
case $(ls -t $INITROOT/$i.c $INSTALLROOT/bin/$i 2>/dev/null) in
"$INITROOT/$i.c"*)
note update $INSTALLROOT/bin/$i
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 ;;
@ -2797,7 +2766,7 @@ capture() # file command ...
fi
o=$o.out
: > $o
note $action output captured in $o
note "$action output captured in $o"
s="$command: $action start at $(date) in $INSTALLROOT"
case $quiet in
0) cmd="echo \"$command: $action done at \$(date)\" in $INSTALLROOT 2>&1 | \$TEE -a $o" ;;
@ -2955,10 +2924,9 @@ make|view)
;;
*) case " $must " in
*" $t "*)
echo "$command: $t: not found -- must be on PATH to $action" >&2
exit 1
err_out "$t: not found -- must be on PATH to $action"
;;
*) echo "$command: warning: $t: not found -- some $action actions may fail" >&2
*) note "warning: $t: not found -- some $action actions may fail"
;;
esac
;;
@ -2968,10 +2936,10 @@ make|view)
# verify the top view
if test ! -d $PACKAGEROOT/src
then note no source packages to make
then note "no source packages to make"
exit 0
elif test ! -d $INSTALLROOT/src
then note initialize the $INSTALLROOT view
then note "initialize the $INSTALLROOT view"
fi
for i in arch arch/$HOSTTYPE
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || exit
@ -3049,7 +3017,7 @@ make|view)
$exec chmod +x "$b" || exit
cc=$b
intercept=1
note update $b
note "update $b"
;;
esac
fi
@ -3070,7 +3038,7 @@ make|view)
case $(ls -t "$b" "$s" 2>/dev/null) in
$b*) ;;
$s*) $exec cp "$s" "$b"
note update $b
note "update $b"
;;
esac
done
@ -3088,7 +3056,7 @@ make|view)
case $(ls -t "$b" "$s" 2>/dev/null) in
$b*) ;;
$s*) $exec cp "$s" "$b"
note update $b
note "update $b"
;;
esac
done
@ -3100,14 +3068,13 @@ make|view)
case $(ls -t "$b" "$s" 2>/dev/null) in
$b*) ;;
$s*) $exec cp "$s" "$b"
note update $b
note "update $b"
;;
esac
done
case $cc in
/*) ;;
*) echo "$command: $CC: not found -- set CC=C-compiler" >&2
exit 1
*) err_out "$CC: not found -- set CC=C-compiler"
;;
esac
case $exec in
@ -3117,11 +3084,11 @@ make|view)
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
else note "$CC: failed to compile this program:"
cat $tmp.c >&2
if test -s $tmp.err
then cat $tmp.err >&2
else echo "$command: $CC: not a C compiler" >&2
else note "$CC: not a C compiler"
fi
rm -f $tmp.*
exit 1
@ -3154,7 +3121,7 @@ make|view)
} > $INSTALLROOT/bin/cc
chmod +x $INSTALLROOT/bin/cc
;;
*) note generate a $INSTALLROOT/bin/cc wrapper for $CC
*) note "generate a $INSTALLROOT/bin/cc wrapper for $CC"
;;
esac
CC=cc
@ -3180,7 +3147,7 @@ make|view)
case $(ls -t $i $j $k 2>/dev/null) in
$i*) ;;
*) if test -f $j -a -f $k
then note update $i
then note "update $i"
shellmagic
case $exec in
'') {
@ -3250,7 +3217,7 @@ cat $j $k
'') new="(none)" ;;
*) new="'$new'" ;;
esac
echo "$command: $var changed from $old to $new" >&2
note "$var changed from $old to $new"
err=y ;;
esac
else test -d $INSTALLROOT/lib/package/gen && case $new in
@ -3260,9 +3227,9 @@ cat $j $k
fi
done
case $err,${FORCE_FLAGS+f} in
y,) echo "$command: This would likely break the build. Restore the flag(s)," >&2
echo "$command: or delete the build directory and rebuild from scratch." >&2
exit 1 ;;
y,) err_out "This would likely break the build. Restore the flag(s)," \
"or delete the build directory and rebuild from scratch."
;;
esac
unset err var store old new
@ -3278,21 +3245,6 @@ cat $j $k
;;
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
@ -3412,8 +3364,7 @@ cat $j $k
test -f $OK/$i &&
case $exec:$i in
:ksh)
echo "$command: $OK/$i: cannot update [may be in use by a running process] remove manually and try again" >&2
exit 1
err_out "$OK/$i: cannot update [may be in use by a running process] remove manually and try again"
;;
esac
$exec $execrate $cp $i $OK/$i
@ -3440,17 +3391,13 @@ cat $j $k
# build with mamake
note make with mamake
note "make with mamake"
case $target in
'') target="install" ;;
esac
eval capture mamake \$makeflags \$noexec \$target $assign
;;
remove) echo "$command: $action: not implemented yet" >&2
exit 1
;;
results)set '' $target
shift
def=make
@ -3483,8 +3430,7 @@ results)set '' $target
old) suf=old
;;
on) case $# in
1) echo $command: $action: $1: host pattern argument expected >&2
exit 1
1) err_out "$action: $1: host pattern argument expected"
;;
esac
shift
@ -3536,8 +3482,7 @@ results)set '' $target
;;
esac
done
echo "$command: $i action output not found" >&2
exit 1
err_out "$i action output not found"
done
sep=
case $t in
@ -3614,33 +3559,18 @@ use) # finalize the environment
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
'') note "You are now entering a new environment set up to use the package in:" \
" $INSTALLROOT" \
"You're using the shell:" \
" $SHELL" \
"Type 'exit' to leave and go back to normal."
case $show in
':') $exec exec $SHELL ;;
esac
;;
@ -3649,8 +3579,7 @@ use) # finalize the environment
esac
;;
*) echo "$command: $action: internal error" >&2
exit 1
*) err_out "$action: internal error"
;;
esac