1#
2# Get the linker version string.
3#
4# This macro is specific to LLVM.
5#
6AC_DEFUN([AC_LINK_GET_VERSION],
7  [AC_CACHE_CHECK([for linker version],[llvm_cv_link_version],
8  [
9   version_string="$(${LD:-ld} -v 2>&1 | head -1)"
10
11   # Check for ld64.
12   if (echo "$version_string" | grep -q "ld64"); then
13     llvm_cv_link_version=$(echo "$version_string" | sed -e "s#.*ld64-\([^ ]*\)\( (.*)\)\{0,1\}#\1#")
14   else
15     llvm_cv_link_version=$(echo "$version_string" | sed -e "s#[^0-9]*\([0-9.]*\).*#\1#")
16   fi
17  ])
18  AC_DEFINE_UNQUOTED([HOST_LINK_VERSION],"$llvm_cv_link_version",
19                     [Linker version detected at compile time.])
20])
21
22#
23# Determine if the system can handle the -R option being passed to the linker.
24#
25# This macro is specific to LLVM.
26#
27AC_DEFUN([AC_LINK_USE_R],
28[AC_CACHE_CHECK([for compiler -Wl,-R<path> option],[llvm_cv_link_use_r],
29[ AC_LANG_PUSH([C])
30  oldcflags="$CFLAGS"
31  CFLAGS="$CFLAGS -Wl,-R."
32  AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
33    [llvm_cv_link_use_r=yes],[llvm_cv_link_use_r=no])
34  CFLAGS="$oldcflags"
35  AC_LANG_POP([C])
36])
37if test "$llvm_cv_link_use_r" = yes ; then
38  AC_DEFINE([HAVE_LINK_R],[1],[Define if you can use -Wl,-R. to pass -R. to the linker, in order to add the current directory to the dynamic linker search path.])
39  fi
40])
41
42#
43# Determine if the system can handle the -rdynamic option being passed
44# to the compiler.
45#
46# This macro is specific to LLVM.
47#
48AC_DEFUN([AC_LINK_EXPORT_DYNAMIC],
49[AC_CACHE_CHECK([for compiler -rdynamic option],
50                [llvm_cv_link_use_export_dynamic],
51[ AC_LANG_PUSH([C])
52  oldcflags="$CFLAGS"
53  CFLAGS="$CFLAGS -rdynamic"
54  AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
55    [llvm_cv_link_use_export_dynamic=yes],[llvm_cv_link_use_export_dynamic=no])
56  CFLAGS="$oldcflags"
57  AC_LANG_POP([C])
58])
59if test "$llvm_cv_link_use_export_dynamic" = yes ; then
60  AC_DEFINE([HAVE_LINK_EXPORT_DYNAMIC],[1],[Define if you can use -rdynamic.])
61  fi
62])
63
64#
65# Determine if the system can handle the --version-script option being
66# passed to the linker.
67#
68# This macro is specific to LLVM.
69#
70AC_DEFUN([AC_LINK_VERSION_SCRIPT],
71[AC_CACHE_CHECK([for compiler -Wl,--version-script option],
72                [llvm_cv_link_use_version_script],
73[ AC_LANG_PUSH([C])
74  oldcflags="$CFLAGS"
75
76  # The following code is from the autoconf manual,
77  # "11.13: Limitations of Usual Tools".
78  # Create a temporary directory $tmp in $TMPDIR (default /tmp).
79  # Use mktemp if possible; otherwise fall back on mkdir,
80  # with $RANDOM to make collisions less likely.
81  : ${TMPDIR=/tmp}
82  {
83    tmp=`
84      (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
85    ` &&
86    test -n "$tmp" && test -d "$tmp"
87  } || {
88    tmp=$TMPDIR/foo$$-$RANDOM
89    (umask 077 && mkdir "$tmp")
90  } || exit $?
91
92  echo "{" > "$tmp/export.map"
93  echo "  global: main;" >> "$tmp/export.map"
94  echo "  local: *;" >> "$tmp/export.map"
95  echo "};" >> "$tmp/export.map"
96
97  CFLAGS="$CFLAGS -Wl,--version-script=$tmp/export.map"
98  AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
99    [llvm_cv_link_use_version_script=yes],[llvm_cv_link_use_version_script=no])
100  rm "$tmp/export.map"
101  rmdir "$tmp"
102  CFLAGS="$oldcflags"
103  AC_LANG_POP([C])
104])
105if test "$llvm_cv_link_use_version_script" = yes ; then
106  AC_SUBST(HAVE_LINK_VERSION_SCRIPT,1)
107  fi
108])
109
110