Have ./configure use the compiler return code for error indication.

Previously ./configure would use any output on stderr as an indication
that the compilation failed.  However if some compiler wrapper uses
stderr for some other purpose, e.g. distcc for nodes going down, then
./configure would not properly configure the build.  This problem was
noted by Mike Frysinger.  For backwards compatibility, ./configure
will revert to the old way, i.e. checking for anything on stderr, if
when it deliberately runs the compiler with an error, a zero exit
status is returned.
This commit is contained in:
Mark Adler 2012-01-16 14:50:09 -08:00
parent 5a5dd2c793
commit 2d55657c03

44
configure vendored
View File

@ -97,6 +97,22 @@ case "$1" in
done done
test=ztest$$ test=ztest$$
cat > $test.c <<EOF
#error error
EOF
if ($CC -c $CFLAGS $test.c) 2>/dev/null; then
try()
{
test "`( $* ) 2>&1`" = ""
}
else
try()
{
( $* ) 2>/dev/null
}
fi
cat > $test.c <<EOF cat > $test.c <<EOF
extern int getchar(); extern int getchar();
int hello() {return getchar();} int hello() {return getchar();}
@ -249,8 +265,8 @@ SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}
if test $shared -eq 1; then if test $shared -eq 1; then
echo Checking for shared library support... echo Checking for shared library support...
# we must test in two steps (cc then ld), required at least on SunOS 4.x # we must test in two steps (cc then ld), required at least on SunOS 4.x
if test "`($CC -w -c $SFLAGS $test.c) 2>&1`" = "" && if try $CC -w -c $SFLAGS $test.c &&
test "`($LDSHARED $SFLAGS -o $test$shared_ext $test.o) 2>&1`" = ""; then try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
echo Building shared library $SHAREDLIBV with $CC. echo Building shared library $SHAREDLIBV with $CC.
elif test -z "$old_cc" -a -z "$old_cflags"; then elif test -z "$old_cc" -a -z "$old_cflags"; then
echo No shared library support. echo No shared library support.
@ -281,7 +297,7 @@ cat > $test.c <<EOF
#include <sys/types.h> #include <sys/types.h>
off64_t dummy = 0; off64_t dummy = 0;
EOF EOF
if test "`($CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then
CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1" CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1" SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
ALL="${ALL} all64" ALL="${ALL} all64"
@ -297,7 +313,7 @@ int main(void) {
return 0; return 0;
} }
EOF EOF
if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then if try $CC $CFLAGS -o $test $test.c; then
echo "Checking for fseeko... Yes." echo "Checking for fseeko... Yes."
else else
CFLAGS="${CFLAGS} -DNO_FSEEKO" CFLAGS="${CFLAGS} -DNO_FSEEKO"
@ -312,7 +328,7 @@ cat > $test.c <<EOF
#include <unistd.h> #include <unistd.h>
int main() { return 0; } int main() { return 0; }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
mv zconf.temp.h zconf.h mv zconf.temp.h zconf.h
echo "Checking for unistd.h... Yes." echo "Checking for unistd.h... Yes."
@ -324,7 +340,7 @@ cat > $test.c <<EOF
#include <stdarg.h> #include <stdarg.h>
int main() { return 0; } int main() { return 0; }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
mv zconf.temp.h zconf.h mv zconf.temp.h zconf.h
echo "Checking for stdarg.h... Yes." echo "Checking for stdarg.h... Yes."
@ -367,7 +383,7 @@ int main()
} }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()."
cat > $test.c <<EOF cat > $test.c <<EOF
@ -390,7 +406,7 @@ int main()
return (mytest("Hello%d\n", 1)); return (mytest("Hello%d\n", 1));
} }
EOF EOF
if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then if try $CC $CFLAGS -o $test $test.c; then
echo "Checking for vsnprintf() in stdio.h... Yes." echo "Checking for vsnprintf() in stdio.h... Yes."
cat >$test.c <<EOF cat >$test.c <<EOF
@ -415,7 +431,7 @@ int main()
} }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of vsnprintf()... Yes." echo "Checking for return value of vsnprintf()... Yes."
else else
CFLAGS="$CFLAGS -DHAS_vsnprintf_void" CFLAGS="$CFLAGS -DHAS_vsnprintf_void"
@ -455,7 +471,7 @@ int main()
} }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of vsprintf()... Yes." echo "Checking for return value of vsprintf()... Yes."
else else
CFLAGS="$CFLAGS -DHAS_vsprintf_void" CFLAGS="$CFLAGS -DHAS_vsprintf_void"
@ -486,7 +502,7 @@ int main()
} }
EOF EOF
if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then if try $CC $CFLAGS -o $test $test.c; then
echo "Checking for snprintf() in stdio.h... Yes." echo "Checking for snprintf() in stdio.h... Yes."
cat >$test.c <<EOF cat >$test.c <<EOF
@ -505,7 +521,7 @@ int main()
} }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of snprintf()... Yes." echo "Checking for return value of snprintf()... Yes."
else else
CFLAGS="$CFLAGS -DHAS_snprintf_void" CFLAGS="$CFLAGS -DHAS_snprintf_void"
@ -539,7 +555,7 @@ int main()
} }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of sprintf()... Yes." echo "Checking for return value of sprintf()... Yes."
else else
CFLAGS="$CFLAGS -DHAS_sprintf_void" CFLAGS="$CFLAGS -DHAS_sprintf_void"
@ -565,7 +581,7 @@ int main()
return 0; return 0;
} }
EOF EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then if try $CC -c $CFLAGS $test.c; then
echo "Checking for attribute(visibility) support... Yes." echo "Checking for attribute(visibility) support... Yes."
else else
CFLAGS="$CFLAGS -DNO_VIZ" CFLAGS="$CFLAGS -DNO_VIZ"