path: root/configure
diff options
authorShiz <>2015-06-28 23:08:20 +0200
committerRich Felker <>2015-07-06 19:37:06 -0400
commitf8db6f74b2c74a50c4dec7e30be5215f0e2c37a6 (patch)
treef47f964d740d59c848336c4da765c3fd8752d5e8 /configure
parentb3cd7d13fe630ba1847326242525298e361018c1 (diff)
build: fix musl-targeting toolchain test
the old test was broken in that it would never fail on a toolchains built without dynamic linking support, leading to the wrapper script possibly being installed on compilers that do not support it. in addition, the new test is portable across compilers: the old test only worked on GCC. the new test works by testing whether the toolchain libc defines __GLIBC__: most non-musl Linux libc's do define this for compatibility even when they are not glibc, so this is a safe bet to check for musl. in addition, the compiler runtime would need to have a somewhat glibc-compatible ABI in the first place, so any non-glibc compatible libc's compiler runtime might not work. it is safer to disable these cases by default and have the user enable the wrappers manually there using --enable-wrapper if they certain it works.
Diffstat (limited to 'configure')
1 files changed, 8 insertions, 9 deletions
diff --git a/configure b/configure
index b6b6f894..99cb04d1 100755
--- a/configure
+++ b/configure
@@ -237,17 +237,16 @@ echo "$cc_family"
# Figure out toolchain wrapper to build
if test "$wrapper" = auto -o "$wrapper" = detect ; then
+echo "#include <stdlib.h>" > "$tmpc"
+echo "#if ! __GLIBC__" >> "$tmpc"
+echo "#error no" >> "$tmpc"
+echo "#endif" >> "$tmpc"
printf "checking for toolchain wrapper to build... "
-if test "$cc_family" = gcc ; then
+if test "$wrapper" = auto && ! $CC -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
+echo "none"
+elif test "$cc_family" = gcc ; then
-if test "$wrapper" = auto ; then
-while read line ; do
-case "$line" in */ld-musl-*) gcc_wrapper=no ;; esac
-done <<EOF
-$($CC -dumpspecs)
-test "$gcc_wrapper" = yes && echo "gcc"
+echo "gcc"
echo "none"
if test "$wrapper" = detect ; then