Index: config/weakref.m4 |
diff --git a/config/weakref.m4 b/config/weakref.m4 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ecb85672805882b330cac43e0fc12e7fe96aeec9 |
--- /dev/null |
+++ b/config/weakref.m4 |
@@ -0,0 +1,47 @@ |
+ |
+dnl Check if the target supports weak. |
+AC_DEFUN([GCC_CHECK_ATTRIBUTE_WEAK], [ |
+ AC_CACHE_CHECK([whether the target supports weak], |
+ ac_cv_have_attribute_weak, [ |
+ weakref_m4_saved_CFLAGS="$CFLAGS" |
+ CFLAGS="$CFLAGS -Werror" |
+ AC_TRY_COMPILE([void __attribute__((weak)) foo(void) { }], |
+ [], ac_cv_have_attribute_weak=yes, |
+ ac_cv_have_attribute_weak=no) |
+ CFLAGS="$weakref_m4_saved_CFLAGS"]) |
+ if test x"$ac_cv_have_attribute_weak" = xyes; then |
+ AC_DEFINE(HAVE_ATTRIBUTE_WEAK, 1, |
+ [Define to 1 if the target supports __attribute__((weak)).]) |
+ fi]) |
+ |
+dnl Check whether weak refs work like the ELF ones. |
+dnl This means that the weak reference works without having to satify |
+dnl linkage for the item. |
+dnl There are targets (at least Darwin) where we have fully functional |
+dnl weakrefs at runtime, but must supply the referenced item at link time. |
+AC_DEFUN([GCC_CHECK_ELF_STYLE_WEAKREF], [ |
+ AC_CACHE_CHECK([whether weak refs work like ELF], |
+ ac_cv_have_elf_style_weakref, [ |
+ weakref_m4_saved_CFLAGS="$CFLAGS" |
+ case "${host}" in |
+ *-apple-darwin*) CFLAGS="$CFLAGS -Wl,-undefined,dynamic_lookup" ;; |
+ *) ;; |
+ esac |
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[ |
+extern void fNotToBeFound(void) __attribute__((weak)); |
+int main () |
+{ |
+ if (fNotToBeFound) |
+ return 1; |
+ else |
+ return 0; |
+} |
+]])], ac_cv_have_elf_style_weakref=yes, ac_cv_have_elf_style_weakref=no, [ |
+case "${host}" in |
+ *-apple-darwin[[89]]*) ac_cv_have_elf_style_weakref=no ;; |
+ *) ac_cv_have_elf_style_weakref=yes;; |
+esac])CFLAGS="$weakref_m4_saved_CFLAGS"]) |
+if test x"$ac_cv_have_elf_style_weakref" = xyes; then |
+ AC_DEFINE(HAVE_ELF_STYLE_WEAKREF, 1, [Define to 1 if target has a weakref that works like the ELF one.]) |
+fi]) |
+ |