mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
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.
275 lines
6.5 KiB
Text
Executable file
275 lines
6.5 KiB
Text
Executable file
########################################################################
|
|
# #
|
|
# This software is part of the ast package #
|
|
# Copyright (c) 1994-2011 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 ###
|
|
# mamprobe - generate MAM cc probe info
|
|
# Glenn Fowler <gsf@research.att.com>
|
|
|
|
case $-:$BASH_VERSION in
|
|
*x*:[0123456789]*) : bash set -x is broken :; set +ex ;;
|
|
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=
|
|
|
|
case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
|
|
0123) USAGE=$'
|
|
[-?
|
|
@(#)$Id: mamprobe (AT&T Labs Research) 2011-02-11 $
|
|
]
|
|
[+NAME?mamprobe - generate MAM cc probe info]
|
|
[+DESCRIPTION?\bmamprobe\b generates MAM (make abstract machine) \bcc\b(1)
|
|
probe information for use by \bmamake\b(1). \acc-path\a is the
|
|
absolute path of the probed compiler and \ainfo-file\a is where
|
|
the information is placed. \ainfo-file\a is usually
|
|
\b$INSTALLROOT/lib/probe/C/mam/\b\ahash\a, where \ahash\a is a hash
|
|
of \acc-path\a. Any \ainfo-file\a directories are created if needed.
|
|
If \ainfo-file\a is \b-\b then the probe information is written to
|
|
the standard output.]
|
|
[+?\bmamprobe\b and \bmamake\b are used in the bootstrap phase of
|
|
\bpackage\b(1) installation before \bnmake\b(1) is built. The
|
|
probed variable names are the \bnmake\b(1) names with a \bmam_\b
|
|
prefix, \bCC\b converted to \bcc\b, and \b.\b converted to \b_\b.
|
|
Additional variables are:]{
|
|
[+_hosttype_?the \bpackage\b(1) host type]
|
|
[+mam_cc_L?\b-L\b\adir\a supported]
|
|
[+STDCAT?command to execute for \bcat\b(1); prefixed by
|
|
\bexecrate\b(1) on \b.exe\b challenged systems]
|
|
[+STDCHMOD?command to execute for \bchmod\b(1); prefixed by
|
|
\bexecrate\b(1) on \b.exe\b challenged systems]
|
|
[+STDCMP?command to execute for \bcmp\b(1); prefixed by
|
|
\bexecrate\b(1) on \b.exe\b challenged systems]
|
|
[+STDCP?command to execute for \bcp\b(1); prefixed by
|
|
\bexecrate\b(1) on \b.exe\b challenged systems]
|
|
[+STDED?command to execute for \bed\b(1) or \bex\b(1)]
|
|
[+STDEDFLAGS?flags for \bSTDED\b]
|
|
[+STDLN?command to execute for \bln\b(1); prefixed by
|
|
\bexecrate\b(1) on \b.exe\b challenged systems]
|
|
[+STDMV?command to execute for \bmv\b(1); prefixed by
|
|
\bexecrate\b(1) on \b.exe\b challenged systems]
|
|
[+STDRM?command to execute for \brm\b(1); prefixed by
|
|
\bexecrate\b(1) on \b.exe\b challenged systems]
|
|
}
|
|
[d:debug?Enable probe script debug trace.]
|
|
|
|
info-file cc-path
|
|
|
|
[+SEE ALSO?\bexecrate\b(1), \bpackage\b(1), \bmamake\b(1), \bnmake\b(1),
|
|
\bprobe\b(1)]
|
|
'
|
|
while getopts -a "$command" "$USAGE" OPT
|
|
do case $OPT in
|
|
d) opt=-d ;;
|
|
esac
|
|
done
|
|
shift `expr $OPTIND - 1`
|
|
;;
|
|
*) while :
|
|
do case $# in
|
|
0) break ;;
|
|
esac
|
|
case $1 in
|
|
--) shift
|
|
break
|
|
;;
|
|
-) break
|
|
;;
|
|
-d) opt=-d
|
|
;;
|
|
-*) echo $command: $1: unknown option >&2
|
|
;;
|
|
*) break
|
|
;;
|
|
esac
|
|
set ''
|
|
break
|
|
done
|
|
;;
|
|
esac
|
|
|
|
# check the args
|
|
|
|
case $1 in
|
|
-) ;;
|
|
/*) ;;
|
|
*) set '' ;;
|
|
esac
|
|
case $2 in
|
|
/*) ;;
|
|
*) set '' ;;
|
|
esac
|
|
case $# in
|
|
0|1) echo "Usage: $command info-file cc-path" >&2; exit 2 ;;
|
|
esac
|
|
info=$1
|
|
shift
|
|
cc=$*
|
|
|
|
# find the make probe script
|
|
|
|
ifs=${IFS-'
|
|
'}
|
|
IFS=:
|
|
set $PATH
|
|
IFS=$ifs
|
|
script=lib/probe/C/make/probe
|
|
while :
|
|
do case $# in
|
|
0) echo "$0: ../$script: probe script not found on PATH" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
case $1 in
|
|
'') continue ;;
|
|
esac
|
|
makeprobe=`echo $1 | sed 's,[^/]*$,'$script,`
|
|
if test -x $makeprobe
|
|
then break
|
|
fi
|
|
shift
|
|
done
|
|
|
|
# create the info dir if necessary
|
|
|
|
case $info in
|
|
/*) i=X$info
|
|
ifs=${IFS-'
|
|
'}
|
|
IFS=/
|
|
set $i
|
|
IFS=$ifs
|
|
while :
|
|
do i=$1
|
|
shift
|
|
case $i in
|
|
X) break ;;
|
|
esac
|
|
done
|
|
case $info in
|
|
//*) path=/ ;;
|
|
*) path= ;;
|
|
esac
|
|
while :
|
|
do case $# in
|
|
0|1) break ;;
|
|
esac
|
|
comp=$1
|
|
shift
|
|
case $comp in
|
|
'') continue ;;
|
|
esac
|
|
path=$path/$comp
|
|
if test ! -d $path
|
|
then mkdir $path || exit
|
|
fi
|
|
done
|
|
;;
|
|
esac
|
|
|
|
# generate info in a tmp file and rename when finished
|
|
|
|
case $info in
|
|
-) ;;
|
|
*) tmp=/tmp/mam$$
|
|
trap "exec >/dev/null; rm -f $tmp" 0 1 2 3 15
|
|
exec > $tmp
|
|
echo "probing C language processor $cc for mam information" >&2
|
|
;;
|
|
esac
|
|
|
|
echo "note generated by $0 for $cc"
|
|
|
|
(
|
|
set '' $opt $cc
|
|
shift
|
|
. $makeprobe "$@"
|
|
|
|
case " $CC_DIALECT " in
|
|
*" -L "*) echo "CC.L = 1" ;;
|
|
esac
|
|
|
|
) | sed \
|
|
-e '/^CC\./!d' \
|
|
-e 's/^CC./setv mam_cc_/' \
|
|
-e 's/^\([^=.]*\)\./\1_/' \
|
|
-e 's/^\([^=.]*\)\./\1_/' \
|
|
-e 's/ =//' \
|
|
-e 's/\$("\([^"]*\)")/\1/g' \
|
|
-e 's/\$(\([^)]*\))/${\1}/g' \
|
|
-e 's/\${CC\./${mam_cc_}/g'
|
|
|
|
echo 'setv _hosttype_ ${mam_cc_HOSTTYPE}'
|
|
|
|
# STD* are standard commands/flags with possible execrate(1)
|
|
|
|
if (
|
|
ed <<!
|
|
q
|
|
!
|
|
) < /dev/null > /dev/null 2>&1
|
|
then STDED=ed
|
|
else STDED=ex
|
|
fi
|
|
STDEDFLAGS=-
|
|
set STDCAT cat STDCHMOD chmod STDCMP cmp STDCP cp STDLN ln STDMV mv STDRM rm
|
|
while :
|
|
do case $# in
|
|
0|1) break ;;
|
|
esac
|
|
p=$2
|
|
for d in $bins
|
|
do if test -x $d/$p
|
|
then p=$d/$p
|
|
break
|
|
fi
|
|
done
|
|
eval $1=\$p
|
|
shift
|
|
shift
|
|
done
|
|
if execrate
|
|
then for n in STDCAT STDCHMOD STDCMP STDCP STDLN STDMV STDRM
|
|
do eval $n=\"execrate \$$n\"
|
|
done
|
|
fi
|
|
for n in STDCAT STDCHMOD STDCMP STDCP STDED STDEDFLAGS STDLN STDMV STDRM
|
|
do eval echo setv \$n \$$n
|
|
done
|
|
|
|
# all done
|
|
|
|
case $info in
|
|
-) ;;
|
|
*) exec >/dev/null
|
|
test -f $info && rm -f $info
|
|
cp $tmp $info
|
|
chmod -w $info
|
|
;;
|
|
esac
|