apenwarr-redo/redoconf/trycompile

71 lines
1.2 KiB
Text
Raw Permalink Normal View History

#!/bin/sh -e
die() {
echo "$0: trycompile: $*" >&2
exit 99
}
ctype=$1
linktype=$2
code=$3
case $ctype in
cc)
[ -n "$CC" ] || die 'must set $CC first.'
useCC="$CC"
useCF="$CFLAGS"
useExt=".c"
;;
cxx)
[ -n "$CXX" ] || die 'must set $CXX first.'
useCC="$CXX"
useCF="$CXXFLAGS"
useExt=".cc"
;;
*)
die "unknown compile type '$ctype'"
;;
esac
case $linktype in
link|run)
[ -n "$LINK" ] || die 'must set $LINK first.'
;;
nolink)
;;
*)
die "unknown link type '$linktype'"
;;
esac
base="try.$$.tmp"
out="$base.o"
out2="$base.exe"
src="$base$useExt"
rm -f "$src" "$out" "$out2"
set -x
: "[trycompile]" "$@"
main=
[ -n "$RCC_NO_MAIN" ] || main="int main() { return 0; }"
printf '%s' "
$code
$main
" >"$src"
NL="
"
IFS="$NL"
set +e
set -f
# We intentionally want to split the variables here,
# splitting on $NL, so we don't quote them.
# 'set -f' prevents interpreting wildcards, which
# we don't want to treat as special.
(
$useCC $CPPFLAGS $useCF -o "$out" -c "$src" || exit
if [ "$linktype" = "link" -o "$linktype" = "run" ]; then
$LINK $LDFLAGS -o "$out2" "$out" $LIBS || exit
fi
if [ "$linktype" = "run" ]; then
$RUN "./$out2" || exit
fi
)
rv=$?
rm -f "$src" "$out" "$out2"
exit "$rv"