configure: Disable libtool if -fPIE does not work with it (bug #1257099)
Adjust TMPO and added TMPB, TMPL, and TMPA. libtool needs the names to be fixed (TMPB). Add new functions do_libtool and libtool_prog. Add check for broken gcc and libtool. Signed-off-by: Don Slutz <dslutz@verizon.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d3399d7cf8
commit
66518bf668
63
configure
vendored
63
configure
vendored
@ -12,7 +12,10 @@ else
|
||||
fi
|
||||
|
||||
TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
|
||||
TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
|
||||
TMPB="qemu-conf-${RANDOM}-$$-${RANDOM}"
|
||||
TMPO="${TMPDIR1}/${TMPB}.o"
|
||||
TMPL="${TMPDIR1}/${TMPB}.lo"
|
||||
TMPA="${TMPDIR1}/lib${TMPB}.la"
|
||||
TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe"
|
||||
|
||||
# NB: do not call "exit" in the trap handler; this is buggy with some shells;
|
||||
@ -86,6 +89,38 @@ compile_prog() {
|
||||
do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
|
||||
}
|
||||
|
||||
do_libtool() {
|
||||
local mode=$1
|
||||
shift
|
||||
# Run the compiler, capturing its output to the log.
|
||||
echo $libtool $mode --tag=CC $cc "$@" >> config.log
|
||||
$libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
|
||||
# Test passed. If this is an --enable-werror build, rerun
|
||||
# the test with -Werror and bail out if it fails. This
|
||||
# makes warning-generating-errors in configure test code
|
||||
# obvious to developers.
|
||||
if test "$werror" != "yes"; then
|
||||
return 0
|
||||
fi
|
||||
# Don't bother rerunning the compile if we were already using -Werror
|
||||
case "$*" in
|
||||
*-Werror*)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
|
||||
$libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
|
||||
error_exit "configure test passed without -Werror but failed with -Werror." \
|
||||
"This is probably a bug in the configure script. The failing command" \
|
||||
"will be at the bottom of config.log." \
|
||||
"You can run configure with --disable-werror to bypass this check."
|
||||
}
|
||||
|
||||
libtool_prog() {
|
||||
do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
|
||||
do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
|
||||
}
|
||||
|
||||
# symbolically link $1 to $2. Portable version of "ln -sf".
|
||||
symlink() {
|
||||
rm -rf "$2"
|
||||
@ -1406,6 +1441,32 @@ EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
# check for broken gcc and libtool in RHEL5
|
||||
if test -n "$libtool" -a "$pie" != "no" ; then
|
||||
cat > $TMPC <<EOF
|
||||
|
||||
void *f(unsigned char *buf, int len);
|
||||
void *g(unsigned char *buf, int len);
|
||||
|
||||
void *
|
||||
f(unsigned char *buf, int len)
|
||||
{
|
||||
return (void*)0L;
|
||||
}
|
||||
|
||||
void *
|
||||
g(unsigned char *buf, int len)
|
||||
{
|
||||
return f(buf, len);
|
||||
}
|
||||
|
||||
EOF
|
||||
if ! libtool_prog; then
|
||||
echo "Disabling libtool due to broken toolchain support"
|
||||
libtool=
|
||||
fi
|
||||
fi
|
||||
|
||||
##########################################
|
||||
# __sync_fetch_and_and requires at least -march=i486. Many toolchains
|
||||
# use i686 as default anyway, but for those that don't, an explicit
|
||||
|
Loading…
Reference in New Issue
Block a user