Explorar o código

Merge branch 'gcc-rpath' into next

* gcc-rpath:
  Only add -rpath if it is really needed.
  Fix cache handling
Bryan Drewery %!s(int64=11) %!d(string=hai) anos
pai
achega
7394f9506f
Modificáronse 2 ficheiros con 131 adicións e 18 borrados
  1. 45 10
      build/autotools/includes/acinclude.m4
  2. 86 8
      configure

+ 45 - 10
build/autotools/includes/acinclude.m4

@@ -215,16 +215,51 @@ dnl Fix GCC lame compiler paths (FreeBSD)
 dnl @summary check whether compiler requires -rpath for libstdc++.so
 AC_DEFUN([CXX_RPATH_CHECK],
 [
-  AC_CACHE_CHECK([whether the compiler requires -rpath], ax_cv_prog_cc_rpath, [
-    ax_cv_prog_cc_rpath=
-    for path in `${CXX} -print-search-dirs | awk '/^libraries:/ {print substr([$]0, 13)}' | tr ':' ' '`; do
-      if [[ -r "${path}/libstdc++.so" ]]; then
-        ax_cv_prog_cc_rpath="${path}"
-        LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-Wl,-rpath,${path}"
-        break
-      fi
-    done
-  ])
+  AC_CACHE_CHECK([whether the compiler requires -rpath], ax_cv_prog_cc_need_rpath, [
+  AC_TRY_RUN([
+#include <vector>
+int main() {
+        std::vector<int> test;
+        try {
+                return test.at(5);
+        } catch (...) {
+                ;
+        }
+        return 0;
+}
+  ], ax_cv_prog_cc_need_rpath=no, ax_cv_prog_cc_need_rpath=yes)])
+
+  if [[ "${ax_cv_prog_cc_need_rpath}" = "yes" ]]; then
+    save_ldflags="$LDFLAGS"
+    AC_CACHE_CHECK([whether the compiler requires -rpath], ax_cv_prog_cc_rpath, [
+      ax_cv_prog_cc_rpath=
+
+      for path in `${CXX} -print-search-dirs | awk '/^libraries:/ {print substr([$]0, 13)}' | tr ':' ' '`; do
+        if [[ -r "${path}/libstdc++.so" ]]; then
+          LDFLAGS="-Wl,-rpath,${path}"
+          AC_TRY_RUN([
+#include <vector>
+int main() {
+        std::vector<int> test;
+        try {
+                return test.at(5);
+        } catch (...) {
+                ;
+        }
+        return 0;
+}
+          ], ax_cv_prog_cc_rpath="`realpath ${path}`")
+          LDFLAGS="$save_ldflags"
+          [[ -n "${ax_cv_prog_cc_rpath}" ]] && break
+        fi
+      done
+    ])
+    LDFLAGS="$save_ldflags"
+  fi
+
+  if [[ -n "${ax_cv_prog_cc_rpath}" ]]; then
+    LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-Wl,-rpath,${ax_cv_prog_cc_rpath}"
+  fi
 ])
 
 dnl  EGG_CHECK_CCSTATIC()

+ 86 - 8
configure

@@ -3351,24 +3351,102 @@ fi
 
 
 
+
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler requires -rpath" >&5
 $as_echo_n "checking whether the compiler requires -rpath... " >&6; }
+if ${ax_cv_prog_cc_need_rpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`build/config.log' for more details" "$LINENO" 5; }
+else
+  cat build/confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end build/confdefs.h.  */
+
+#include <vector>
+int main() {
+        std::vector<int> test;
+        try {
+                return test.at(5);
+        } catch (...) {
+                ;
+        }
+        return 0;
+}
+
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+  ax_cv_prog_cc_need_rpath=no
+else
+  ax_cv_prog_cc_need_rpath=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_prog_cc_need_rpath" >&5
+$as_echo "$ax_cv_prog_cc_need_rpath" >&6; }
+
+  if [ "${ax_cv_prog_cc_need_rpath}" = "yes" ]; then
+    save_ldflags="$LDFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler requires -rpath" >&5
+$as_echo_n "checking whether the compiler requires -rpath... " >&6; }
 if ${ax_cv_prog_cc_rpath+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
-    ax_cv_prog_cc_rpath=
-    for path in `${CXX} -print-search-dirs | awk '/^libraries:/ {print substr($0, 13)}' | tr ':' ' '`; do
-      if [ -r "${path}/libstdc++.so" ]; then
-        ax_cv_prog_cc_rpath="${path}"
-        LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-Wl,-rpath,${path}"
-        break
-      fi
-    done
+      ax_cv_prog_cc_rpath=
+
+      for path in `${CXX} -print-search-dirs | awk '/^libraries:/ {print substr($0, 13)}' | tr ':' ' '`; do
+        if [ -r "${path}/libstdc++.so" ]; then
+          LDFLAGS="-Wl,-rpath,${path}"
+          if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`build/config.log' for more details" "$LINENO" 5; }
+else
+  cat build/confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end build/confdefs.h.  */
+
+#include <vector>
+int main() {
+        std::vector<int> test;
+        try {
+                return test.at(5);
+        } catch (...) {
+                ;
+        }
+        return 0;
+}
+
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+  ax_cv_prog_cc_rpath="`realpath ${path}`"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+          LDFLAGS="$save_ldflags"
+          [ -n "${ax_cv_prog_cc_rpath}" ] && break
+        fi
+      done
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_prog_cc_rpath" >&5
 $as_echo "$ax_cv_prog_cc_rpath" >&6; }
+    LDFLAGS="$save_ldflags"
+  fi
+
+  if [ -n "${ax_cv_prog_cc_rpath}" ]; then
+    LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-Wl,-rpath,${ax_cv_prog_cc_rpath}"
+  fi
 
 
 #checkpoint