AC_DEFUN([DC_SETUP_STABLE_API], [
VERSIONSCRIPT="$1"
SYMFILE="$2"
DC_FIND_STRIP_AND_REMOVESYMS([$SYMFILE])
DC_SETVERSIONSCRIPT([$VERSIONSCRIPT], [$SYMFILE])
])
AC_DEFUN([DC_SETVERSIONSCRIPT], [
VERSIONSCRIPT="$1"
SYMFILE="$2"
TMPSYMFILE="${SYMFILE}.tmp"
TMPVERSIONSCRIPT="${VERSIONSCRIPT}.tmp"
echo "${SYMPREFIX}Test_Symbol" > "${TMPSYMFILE}"
echo '{' > "${TMPVERSIONSCRIPT}"
echo ' local:' >> "${TMPVERSIONSCRIPT}"
echo " ${SYMPREFIX}Test_Symbol;" >> "${TMPVERSIONSCRIPT}"
echo '};' >> "${TMPVERSIONSCRIPT}"
SAVE_LDFLAGS="${LDFLAGS}"
AC_MSG_CHECKING([for how to set version script])
for tryaddldflags in "-Wl,--version-script,${TMPVERSIONSCRIPT}" "-Wl,-exported_symbols_list,${TMPSYMFILE}"; do
LDFLAGS="${SAVE_LDFLAGS} ${tryaddldflags}"
AC_TRY_LINK([void Test_Symbol(void) { return; }], [], [
addldflags="`echo "${tryaddldflags}" | sed 's/\.tmp$//'`"
break
])
done
rm -f "${TMPSYMFILE}"
rm -f "${TMPVERSIONSCRIPT}"
LDFLAGS="${SAVE_LDFLAGS}"
if test -n "${addldflags}"; then
SHOBJLDFLAGS="${SHOBJLDFLAGS} ${addldflags}"
AC_MSG_RESULT($addldflags)
else
AC_MSG_RESULT([don't know])
fi
AC_SUBST(SHOBJLDFLAGS)
])
AC_DEFUN([DC_FIND_STRIP_AND_REMOVESYMS], [
SYMFILE="$1"
dnl Determine how to strip executables
AC_CHECK_TOOLS(OBJCOPY, objcopy gobjcopy, [false])
AC_CHECK_TOOLS(STRIP, strip gstrip, [false])
if test "x${STRIP}" = "xfalse"; then
STRIP="${OBJCOPY}"
fi
WEAKENSYMS='true'
REMOVESYMS='true'
SYMPREFIX=''
case $host_os in
darwin*)
SYMPREFIX="_"
REMOVESYMS="${STRIP} -u -x"
;;
*)
if test "x${OBJCOPY}" != "xfalse"; then
WEAKENSYMS="${OBJCOPY} --keep-global-symbols=${SYMFILE}"
REMOVESYMS="${OBJCOPY} --discard-all"
elif test "x${STRIP}" != "xfalse"; then
REMOVESYMS="${STRIP} -x"
fi
;;
esac
AC_SUBST(WEAKENSYMS)
AC_SUBST(REMOVESYMS)
AC_SUBST(SYMPREFIX)
])