71 lines
1.2 KiB
Text
71 lines
1.2 KiB
Text
|
|
#!/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"
|