소스 검색

More sophisticated attempt at detecting working linker options

On some platforms, the linker is perfectly happy to produce binaries
that won't run if you give it the wrong set of flags.  So when not
cross-compiling, try to link-and-run a little test program, rather
than just linking it.

Possible fix for 6173.
Nick Mathewson 12 년 전
부모
커밋
adbdeafad9
2개의 변경된 파일12개의 추가작업 그리고 2개의 파일을 삭제
  1. 7 2
      acinclude.m4
  2. 5 0
      changes/bug6173

+ 7 - 2
acinclude.m4

@@ -71,9 +71,14 @@ AC_DEFUN([TOR_CHECK_LDFLAGS], [
     CFLAGS="$CFLAGS -pedantic -Werror"
     LDFLAGS="$LDFLAGS $2 $1"
     LIBS="$LIBS $3"
-    AC_TRY_LINK([], [return 0;],
+    AC_RUN_IFELSE([
+#include <stdio.h>
+int main(int argc, char **argv) { fputs("", stdout); return 0; }],
                    [AS_VAR_SET(VAR,yes)],
-                   [AS_VAR_SET(VAR,no)])
+                   [AS_VAR_SET(VAR,no)],
+		   [AC_TRY_LINK([], [return 0;],
+                                    [AS_VAR_SET(VAR,yes)],
+                                    [AS_VAR_SET(VAR,no)])])
     CFLAGS="$tor_saved_CFLAGS"
     LDFLAGS="$tor_saved_LDFLAGS"
     LIBS="$tor_saved_LIBS"

+ 5 - 0
changes/bug6173

@@ -0,0 +1,5 @@
+  o Major bugfixes:
+    - Make our linker option detection code more robust against linkers
+      where a bad combination of options completes successfully but
+      makes an unrunnable binary. Fixes bug 6173; bugfix on 0.2.3.17-beta.
+