tryflag () {
printf "checking whether compiler accepts %s... " "$2"
echo "typedef int x;" > "$tmpc"
-if $CC $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
+if $CC $CFLAGS_TRY $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
printf "yes\n"
eval "$1=\"\${$1} \$2\""
eval "$1=\${$1# }"
tryldflag () {
printf "checking whether linker accepts %s... " "$2"
echo "typedef int x;" > "$tmpc"
-if $CC -nostdlib -shared "$2" -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
+if $CC $LDFLAGS_TRY -nostdlib -shared "$2" -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
printf "yes\n"
eval "$1=\"\${$1} \$2\""
eval "$1=\${$1# }"
CFLAGS_AUTO=
CFLAGS_MEMOPS=
CFLAGS_NOSSP=
+CFLAGS_TRY=
LDFLAGS_AUTO=
+LDFLAGS_TRY=
OPTIMIZE_GLOBS=
prefix=/usr/local/musl
exec_prefix='$(prefix)'
exit 1
fi
+#
+# Figure out options to force errors on unknown flags.
+#
+tryflag CFLAGS_TRY -Werror=unknown-warning-option
+tryflag CFLAGS_TRY -Werror=unused-command-line-argument
+tryldflag LDFLAGS_TRY -Werror=unknown-warning-option
+tryldflag LDFLAGS_TRY -Werror=unused-command-line-argument
+
#
# Need to know if the compiler is gcc to decide whether to build the
# musl-gcc wrapper, and for critical bug detection in some gcc versions.
# extensions enabled by default. This is bad for making static binaries.
# We cheat and use i486 rather than i386 because i386 really does not
# work anyway (issues with atomic ops).
+# Some build environments pass -march and -mtune options via CC, so
+# check both CC and CFLAGS.
#
if test "$ARCH" = "i386" ; then
-fnmatch '-march=*|*\ -march=*' "$CFLAGS" || tryldflag CFLAGS_AUTO -march=i486
-fnmatch '-mtune=*|*\ -mtune=*' "$CFLAGS" || tryldflag CFLAGS_AUTO -mtune=generic
+fnmatch '-march=*|*\ -march=*' "$CC $CFLAGS" || tryldflag CFLAGS_AUTO -march=i486
+fnmatch '-mtune=*|*\ -mtune=*' "$CC $CFLAGS" || tryldflag CFLAGS_AUTO -mtune=generic
fi
#
tryflag CFLAGS_AUTO -Wno-pointer-to-int-cast
fi
-if test "x$visibility" == xauto ; then
+if test "x$visibility" = xauto ; then
# This test checks toolchain support for several things:
# - the -include option
# - the attributes/pragmas used in vis.h
echo 'int foo(void) { }' >> "$tmpc"
echo 'int bar(void) { fp = foo; return foo(); }' >> "$tmpc"
if $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS \
- -DSHARED -fPIC -include src/internal/vis.h \
+ -DSHARED -fPIC -I./src/internal -include vis.h \
-nostdlib -shared -Wl,-Bsymbolic-functions \
-o /dev/null "$tmpc" >/dev/null 2>&1 ; then
visibility=yes
printf "%s\n" "$visibility"
fi
-if test "x$visibility" == xyes ; then
-CFLAGS_AUTO="$CFLAGS_AUTO -include src/internal/vis.h"
+if test "x$visibility" = xyes ; then
+CFLAGS_AUTO="$CFLAGS_AUTO -include vis.h"
CFLAGS_AUTO="${CFLAGS_AUTO# }"
fi
# Figure out arch variants for archs with variants
SUBARCH=
-t="$CFLAGS_C99FSE $CPPFLAGS $CFLAGS_AUTO $CFLAGS"
+t="$CFLAGS_C99FSE $CPPFLAGS $CFLAGS"
if test "$ARCH" = "x86_64" ; then
trycppif __ILP32__ "$t" && ARCH=x32