mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
Fixes to compile on Solaris variants, NetBSD, and NixOS
Solaris, Illumos distributions, and NetBSD need LDFLAGS set to link explicitly to libm, otherwise, due to as-yet unknown reasons, the src/lib/libdll/features/dll fails to write a valid header file and compilation fails due to unknown identifiers such as Dllscan_t. This commit adds the flag on those systems. NixOS is a Linux distro that uses very different paths from the usual Unix conventions (though it's POSIX compliant), and the regression tests still needed a lot of tweaks to be compatible. src/cmd/INIT/package.sh, bin/package: - On SunOS (Solaris and illumos distros) and NetBSD, add '-lm' to LDFLAGS before compiling. src/cmd/INIT/mamprobe.sh, bin/mamprobe, src/cmd/INIT/execrate.sh, bin/execrate: - Instead of only in /bin, /usr/bin, /sbin and /usr/sbin, search utilities in the path given by the OS 'getconf PATH', and use the user's original $PATH as a fallback. src/cmd/ksh93/tests/*.sh: - Miscellaneous portability fixes, mainly elimination of unportable hardcoded paths to commands. - basic.sh: Remove test for 'time' keyword millisecond precision. It was racy and could fail depending on system and system load.
This commit is contained in:
parent
5a7bd2c196
commit
d3cd4cf906
18 changed files with 102 additions and 42 deletions
7
TODO
7
TODO
|
@ -4,11 +4,16 @@ ______
|
|||
Fix regression test failures:
|
||||
|
||||
- On OpenBSD, there are 15 locale-related test failures in variables.sh.
|
||||
- There are many regression test failures on NetBSD.
|
||||
|
||||
______
|
||||
Fix build system:
|
||||
|
||||
- ksh does not currently build on NetBSD, AIX, Solaris, or QNX.
|
||||
- ksh does not currently build on AIX or QNX.
|
||||
- On NetBSD 9.0, the build fails if /bin/sh is used as $SHELL (the default)
|
||||
as iffe writes line numbers directly into generated header files. The cause
|
||||
needs to be investigated. It could be a regression in NetBSD 9.0 sh.
|
||||
Workaround: bin/package make SHELL=/some/other/shell
|
||||
- Reimport the removed nmake. It is necessary for changes in Makefiles
|
||||
to take effect. The machine-generated Mamfiles are now used as a fallback,
|
||||
but they are not meant to be edited by hand.
|
||||
|
|
10
bin/mamprobe
10
bin/mamprobe
|
@ -27,6 +27,14 @@ esac
|
|||
|
||||
command=mamprobe
|
||||
|
||||
bins=`
|
||||
(
|
||||
userPATH=$PATH
|
||||
PATH=/run/current-system/sw/bin:/usr/xpg7/bin:/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin:$PATH
|
||||
getconf PATH 2>/dev/null && echo "$userPATH" || echo /bin:/usr/bin:/sbin:/usr/sbin:"$userPATH"
|
||||
) | sed 's/:/ /g'
|
||||
` || exit
|
||||
|
||||
# check the options
|
||||
|
||||
opt=
|
||||
|
@ -236,7 +244,7 @@ do case $# in
|
|||
0|1) break ;;
|
||||
esac
|
||||
p=$2
|
||||
for d in /bin /usr/bin /usr/sbin
|
||||
for d in $bins
|
||||
do if test -x $d/$p
|
||||
then p=$d/$p
|
||||
break
|
||||
|
|
13
bin/package
13
bin/package
|
@ -5395,6 +5395,19 @@ license)# all work in $PACKAGESRC/LICENSES
|
|||
;;
|
||||
|
||||
make|view)
|
||||
# Hack to build on some systems that need an explicit link with libm due to a bug in the build system
|
||||
case `uname` in
|
||||
NetBSD | SunOS)
|
||||
case " $LDFLAGS " in
|
||||
*" -m "*)
|
||||
;;
|
||||
*) LDFLAGS="-lm${LDFLAGS:+ $LDFLAGS}"
|
||||
export LDFLAGS
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
cd $PACKAGEROOT
|
||||
case $package in
|
||||
'') lic="lib/package/*.lic"
|
||||
|
|
|
@ -21,7 +21,13 @@
|
|||
|
||||
command=execrate
|
||||
|
||||
bins='/bin /usr/bin /usr/sbin'
|
||||
bins=`
|
||||
(
|
||||
userPATH=$PATH
|
||||
PATH=/run/current-system/sw/bin:/usr/xpg7/bin:/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin:$PATH
|
||||
getconf PATH 2>/dev/null && echo "$userPATH" || echo /bin:/usr/bin:/sbin:/usr/sbin:"$userPATH"
|
||||
) | sed 's/:/ /g'
|
||||
` || exit
|
||||
|
||||
case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
|
||||
0123) ARGV0="-a $command"
|
||||
|
|
|
@ -27,6 +27,14 @@ esac
|
|||
|
||||
command=mamprobe
|
||||
|
||||
bins=`
|
||||
(
|
||||
userPATH=$PATH
|
||||
PATH=/run/current-system/sw/bin:/usr/xpg7/bin:/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin:$PATH
|
||||
getconf PATH 2>/dev/null && echo "$userPATH" || echo /bin:/usr/bin:/sbin:/usr/sbin:"$userPATH"
|
||||
) | sed 's/:/ /g'
|
||||
` || exit
|
||||
|
||||
# check the options
|
||||
|
||||
opt=
|
||||
|
@ -236,7 +244,7 @@ do case $# in
|
|||
0|1) break ;;
|
||||
esac
|
||||
p=$2
|
||||
for d in /bin /usr/bin /usr/sbin
|
||||
for d in $bins
|
||||
do if test -x $d/$p
|
||||
then p=$d/$p
|
||||
break
|
||||
|
|
|
@ -5394,6 +5394,19 @@ license)# all work in $PACKAGESRC/LICENSES
|
|||
;;
|
||||
|
||||
make|view)
|
||||
# Hack to build on some systems that need an explicit link with libm due to a bug in the build system
|
||||
case `uname` in
|
||||
NetBSD | SunOS)
|
||||
case " $LDFLAGS " in
|
||||
*" -m "*)
|
||||
;;
|
||||
*) LDFLAGS="-lm${LDFLAGS:+ $LDFLAGS}"
|
||||
export LDFLAGS
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
cd $PACKAGEROOT
|
||||
case $package in
|
||||
'') lic="lib/package/*.lic"
|
||||
|
|
|
@ -84,7 +84,7 @@ then [[ ! $(alias -t | grep rm= ) ]] && err_exit 'tracked alias not set'
|
|||
[[ $(alias -t | grep rm= ) ]] && err_exit 'tracked alias not cleared'
|
||||
fi
|
||||
if hash -r 2>/dev/null && [[ ! $(hash) ]]
|
||||
then PATH=$tmp:/bin:/usr/bin
|
||||
then PATH=$tmp:$PATH
|
||||
for i in foo -foo --
|
||||
do print ':' > $tmp/$i
|
||||
chmod +x $tmp/$i
|
||||
|
|
|
@ -492,14 +492,13 @@ typeset -A expect=(
|
|||
[Mtoupper]='typeset -x -r -u foo'
|
||||
[R]='typeset -x -r -R 0 foo'
|
||||
# [R17]='typeset -x -r -R 17 foo' # TODO: outputs '-L 0'
|
||||
[X]='typeset -x -r -X 32 foo'
|
||||
[X17]='typeset -x -r -X 17 foo'
|
||||
[S]='typeset -x -r foo'
|
||||
[T]='typeset -x -r foo'
|
||||
[Z]='typeset -x -r -Z 0 -R 0 foo'
|
||||
# [Z13]='typeset -x -r -Z 13 -R 13 foo' # TODO: outputs 'typeset -x -r -Z 0 -R 0 foo'
|
||||
)
|
||||
for flag in a b i i37 l n s u A C E E12 F F12 H L Mtolower Mtoupper R X X17 S T Z
|
||||
for flag in a b i i37 l n s u A C E E12 F F12 H L Mtolower Mtoupper R X17 S T Z
|
||||
do unset foo
|
||||
actual=$(
|
||||
redirect 2>&1
|
||||
|
|
|
@ -553,21 +553,7 @@ $SHELL 2> /dev/null -c $'for i;\ndo :;done' || err_exit 'for i ; <newline> not v
|
|||
) || err_exit "crash when sourcing multiple files (exit status $?)"
|
||||
|
||||
# ======
|
||||
# The time keyword should correctly handle millisecond precision, except
|
||||
# on older systems that do not support getrusage(2) or gettimeofday(2).
|
||||
result=$(
|
||||
TIMEFORMAT=$'\%3R'
|
||||
redirect 2>&1
|
||||
set +x
|
||||
time sleep .002
|
||||
)
|
||||
case $result in
|
||||
0.000 | 0.010)
|
||||
err_exit "warning: 'time' keyword doesn't support millisecond precision"
|
||||
let "Errors--" ;;
|
||||
0.002) ;;
|
||||
*) err_exit "'time' keyword, millisecond precision: expected 0.002, got $result" ;;
|
||||
esac
|
||||
# The time keyword
|
||||
|
||||
# A single '%' after a format specifier should not be a syntax
|
||||
# error (it should be treated as a literal '%').
|
||||
|
|
|
@ -123,7 +123,7 @@ fi
|
|||
if [[ ! -w /dev/fd/2 ]]
|
||||
then err_exit "/dev/fd/2 not open for writing"
|
||||
fi
|
||||
sleep .01
|
||||
sleep 1 # there are still file systems with 1-second timestamp granularity...
|
||||
> $newer_file
|
||||
if [[ ! $file -ot $newer_file ]]
|
||||
then err_exit "$file should be older than $newer_file"
|
||||
|
|
|
@ -307,7 +307,7 @@ x=$(LC_ALL=debug $SHELL -c 'typeset -L10 x="a<2b|>c";print -r -- "${x}"')
|
|||
if $SHELL -c "export LC_ALL=en_US.UTF-8; c=$'\342\202\254'; [[ \${#c} == 1 ]]" 2>/dev/null
|
||||
then LC_ALL=en_US.UTF-8
|
||||
unset i p1 p2 x
|
||||
for i in 9 b c d 20 1680 2000 2001 2002 2003 2004 2005 2006 2008 2009 200a 2028 2029 3000 # 1803 2007 202f 205f
|
||||
for i in 9 b c d 20 2000 2001 2002 2003 2004 2005 2006 2008 2009 200a 2028 2029 3000 # 1680 1803 2007 202f 205f
|
||||
do if ! eval "[[ \$'\\u[$i]' == [[:space:]] ]]"
|
||||
then x+=,$i
|
||||
fi
|
||||
|
|
|
@ -72,7 +72,7 @@ PATH=$p
|
|||
[[ $($SHELL -c 'print -r -- "$PATH"') == "$PATH" ]] || err_exit 'export PATH lost in subshell'
|
||||
cat > bug1 <<- EOF
|
||||
print print ok > $tmp/ok
|
||||
/bin/chmod 755 $tmp/ok
|
||||
command -p chmod 755 $tmp/ok
|
||||
function a
|
||||
{
|
||||
typeset -x PATH=$tmp
|
||||
|
@ -207,11 +207,11 @@ got=$(whence $PWD/notfound)
|
|||
[[ $got == $exp ]] || err_exit "whence \$PWD/$cmd failed -- expected '$exp', got '$got'"
|
||||
|
||||
PATH=$d:
|
||||
cp "$rm" kshrm
|
||||
command -p cp "$rm" kshrm
|
||||
if [[ $(whence kshrm) != $PWD/kshrm ]]
|
||||
then err_exit 'trailing : in pathname not working'
|
||||
fi
|
||||
cp "$rm" rm
|
||||
command -p cp "$rm" rm
|
||||
PATH=:$d
|
||||
if [[ $(whence rm) != $PWD/rm ]]
|
||||
then err_exit 'leading : in pathname not working'
|
||||
|
@ -220,9 +220,9 @@ PATH=$d: whence rm > /dev/null
|
|||
if [[ $(whence rm) != $PWD/rm ]]
|
||||
then err_exit 'pathname not restored after scoping'
|
||||
fi
|
||||
mkdir bin
|
||||
command -p mkdir bin
|
||||
print 'print ok' > bin/tst
|
||||
chmod +x bin/tst
|
||||
command -p chmod +x bin/tst
|
||||
if [[ $(PATH=$PWD/bin tst 2>/dev/null) != ok ]]
|
||||
then err_exit '(PATH=$PWD/bin foo) does not find $PWD/bin/foo'
|
||||
fi
|
||||
|
@ -371,10 +371,14 @@ EOF
|
|||
x=$(FPATH= PATH=$PWD/bin $SHELL -c ': $(whence less);myfun') 2> /dev/null
|
||||
[[ $x == myfun ]] || err_exit 'function myfun not found'
|
||||
|
||||
cp $(whence -p echo) user_to_group_relationship.hdr.query
|
||||
command -p cat >user_to_group_relationship.hdr.query <<EOF
|
||||
#!$SHELL
|
||||
print -r -- "\$@"
|
||||
EOF
|
||||
command -p chmod 755 user_to_group_relationship.hdr.query
|
||||
FPATH=/foobar:
|
||||
PATH=$FPATH:$PATH:.
|
||||
[[ $(user_to_group_relationship.hdr.query foobar) == foobar ]] 2> /dev/null || err_exit 'Cannot execute command with . in name when PATH and FPATH end in :.'
|
||||
[[ $(user_to_group_relationship.hdr.query foobar) == foobar ]] || err_exit 'Cannot execute command with . in name when PATH and FPATH end in :.'
|
||||
|
||||
mkdir -p $tmp/new/bin
|
||||
mkdir $tmp/new/fun
|
||||
|
@ -386,12 +390,14 @@ x=$(whence -p echo 2> /dev/null)
|
|||
[[ $x == "$tmp/new/bin/echo" ]] || err_exit 'nonexistant FPATH directory in .paths file causes path search to fail'
|
||||
|
||||
$SHELL 2> /dev/null <<- \EOF || err_exit 'path search problem with non-existent directories in PATH'
|
||||
PATH=/usr/nogood1/bin:/usr/nogood2/bin:/bin:/usr/bin
|
||||
builtin getconf
|
||||
PATH=$(getconf PATH)
|
||||
PATH=/dev/null/nogood1/bin:/dev/null/nogood2/bin:$PATH
|
||||
tail /dev/null && tail /dev/null
|
||||
EOF
|
||||
|
||||
( PATH=/bin:usr/bin
|
||||
cat << END >/dev/null 2>&1
|
||||
( PATH=/dev/null
|
||||
command -p cat << END >/dev/null 2>&1
|
||||
${.sh.version}
|
||||
END
|
||||
) || err_exit '${.sh.xxx} variables causes cat not be found'
|
||||
|
|
|
@ -493,7 +493,7 @@ p :test-1:
|
|||
w set +o vi +o emacs
|
||||
p :test-2:
|
||||
w true /de\tv/nu\tl\tl
|
||||
r ^:test-2: true /de\tv/nu\tl\tl\r\n$
|
||||
r ^:test-2: true (/de\tv/nu\tl\tl|/de v/nu l l)\r\n$
|
||||
p :test-3:
|
||||
!
|
||||
|
||||
|
|
|
@ -256,7 +256,10 @@ case $SHELL in
|
|||
*/*) SHELL=$d/$SHELL;;
|
||||
*) SHELL=$(whence $SHELL);;
|
||||
esac
|
||||
PATH=/bin:/usr/bin
|
||||
PATH=$(
|
||||
PATH=/run/current-system/sw/bin:/usr/xpg7/bin:/usr/xpg6/bin:/usr/xpg4/bin:/bin:/usr/bin:$PATH
|
||||
getconf PATH 2>/dev/null || { builtin getconf 2>/dev/null && getconf PATH; }
|
||||
) || PATH=/bin:/usr/bin
|
||||
if [[ -d /usr/ucb ]]
|
||||
then PATH=$PATH:/usr/ucb
|
||||
fi
|
||||
|
|
|
@ -442,10 +442,10 @@ let "$? == 256+9" && err_exit 'exit with status > 256 makes shell kill itself'
|
|||
# and that a signal still causes the exit status to be set to a value > 128
|
||||
cat >"$tmp/sigtest.sh" <<\EOF
|
||||
echo begin
|
||||
sh -c 'kill -9 "$$"'
|
||||
"$1" -c 'kill -9 "$$"'
|
||||
EOF
|
||||
expect=$'^begin\n/.*/sigtest.sh: line 2: [1-9][0-9]*: Killed\n[1-9][0-9]{1,2}$'
|
||||
actual=$("$SHELL" -c 'ksh "$1"; echo "$?"' x "$tmp/sigtest.sh" 2>&1)
|
||||
actual=$(LANG=C "$SHELL" -c '"$1" "$2" "$1"; echo "$?"' x "$SHELL" "$tmp/sigtest.sh" 2>&1)
|
||||
if ! [[ $actual =~ $expect ]]
|
||||
then [[ $actual == *Killed*Killed* ]] && msg='ksh killed itself' || msg='unexpected output'
|
||||
err_exit "$msg after child process signal (expected match to $(printf %q "$expect"); got $(printf %q "$actual"))"
|
||||
|
|
|
@ -238,6 +238,7 @@ foo=$($SHELL <<- ++EOF++
|
|||
[[ $foo == foobar ]] || err_exit 'trap on exit when last commands is subshell is not triggered'
|
||||
|
||||
err=$(
|
||||
ulimit -n 1024
|
||||
$SHELL 2>&1 <<- \EOF
|
||||
date=$(whence -p date)
|
||||
function foo
|
||||
|
@ -333,7 +334,8 @@ done
|
|||
# Ref.: https://github.com/att/ast/issues/478
|
||||
expect='foo=bar'
|
||||
actual=$(
|
||||
foo=$(print `/bin/echo bar`) # should print nothing
|
||||
bin_echo=${ whence -p echo; } || bin_echo=echo
|
||||
foo=$(print `"$bin_echo" bar`) # should print nothing
|
||||
print foo=$foo # should print "foo=bar"
|
||||
)
|
||||
[[ $actual == "$expect" ]] \
|
||||
|
@ -602,7 +604,7 @@ trap ERR ERR
|
|||
[[ $(trap -p) == *ERR* ]] || err_exit 'trap -p in subshell does not contain ERR'
|
||||
trap - USR1 ERR
|
||||
|
||||
( PATH=/bin:/usr/bin
|
||||
( builtin getconf && PATH=$(getconf PATH)
|
||||
dot=$(cat <<-EOF
|
||||
$(ls -d .)
|
||||
EOF
|
||||
|
|
|
@ -745,7 +745,7 @@ do exp="$cmd ok"
|
|||
rm -f $cmd
|
||||
print print $exp > glean/$cmd
|
||||
chmod +x glean/$cmd
|
||||
got=$(set +x; CDPATH=:.. $SHELL -c "PATH=:/bin:/usr/bin; date > /dev/null; cd glean && ./$cmd" 2>&1)
|
||||
got=$(set +x; CDPATH=:.. $SHELL -c "command -p date > /dev/null; cd glean && ./$cmd" 2>&1)
|
||||
[[ $got == "$exp" ]] || err_exit "cd with CDPATH after PATH change failed -- expected '$exp', got '$got'"
|
||||
done
|
||||
|
||||
|
|
|
@ -333,7 +333,17 @@ $cc -E $tmp.c >/dev/null 2>&1 || systeminfo=
|
|||
|
||||
CONF_getconf=
|
||||
CONF_getconf_a=
|
||||
for d in /usr/bin /bin /usr/sbin /sbin
|
||||
IFS=':'; set -f
|
||||
for d in \
|
||||
/run/current-system/sw/bin \
|
||||
/usr/xpg7/bin \
|
||||
/usr/xpg6/bin \
|
||||
/usr/xpg4/bin \
|
||||
/usr/bin \
|
||||
/bin \
|
||||
/usr/sbin \
|
||||
/sbin \
|
||||
$PATH
|
||||
do if test -x $d/getconf
|
||||
then case `$d/getconf --?-version 2>&1` in
|
||||
*"AT&T"*"Research"*)
|
||||
|
@ -348,6 +358,7 @@ do if test -x $d/getconf
|
|||
break
|
||||
fi
|
||||
done
|
||||
IFS=$ifs; set +f
|
||||
export CONF_getconf CONF_getconf_a
|
||||
|
||||
case $verbose in
|
||||
|
|
Loading…
Reference in a new issue