commit fb6b538b745c1695b574ec95e7aac35f07b0fdd8
Author: Ramakrishnan Muthukrishnan <vu3rdd@gmail.com>
Date:   Sat Jul 30 17:34:16 2011 +0530

    versioned

diff --git a/configure.ac b/configure.ac
index ff29e0e..d3a1581 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2313,6 +2313,52 @@ if test X"$OPT_LIBRTMP" != Xno; then
 fi
 
 dnl **********************************************************************
+dnl Check for linker switch for versioned symbols
+dnl **********************************************************************
+
+AC_MSG_CHECKING([if libraries can be versioned])
+GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script`
+if test -z "$GLD"; then
+    versioned_symbols_flavour=
+    AC_MSG_RESULT(no)
+    AC_MSG_WARN(***
+*** You may want to rerun configure using --with-gnu-ld to enable versioned symbols.
+)
+else
+    AC_MSG_RESULT(yes)
+
+AC_MSG_CHECKING([whether versioned symbols are wanted])
+versioned_symbols_flavour=
+
+AC_ARG_ENABLE(versioned-symbols,
+AC_HELP_STRING([--enable-versioned-symbols], [Enable versioned symbols in shared library])
+AC_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shared library]),
+[ case "$enableval" in
+  yes) AC_MSG_RESULT(yes)
+	   if test "$OPENSSL_ENABLED" = "1"; then
+		   versioned_symbols_flavour="OPENSSL_"
+	   else
+		   if test "$OPT_GNUTLS" != "no"; then
+			   versioned_symbols_flavour="GNUTLS_"
+		   fi
+	   fi
+	   versioned_symbols="yes"
+	   ;;
+
+  *)   AC_MSG_RESULT(no)
+	   ;;
+  esac
+], [
+AC_MSG_RESULT(no)
+]
+)
+fi
+
+AC_SUBST(VERSIONED_FLAVOUR, ["$versioned_symbols_flavour"])
+AM_CONDITIONAL(VERSIONED_SYMBOLS, test "$versioned_symbols" = "yes")
+
+
+dnl **********************************************************************
 dnl Check for the presence of IDN libraries and headers
 dnl **********************************************************************
 
@@ -3080,6 +3126,7 @@ AC_CONFIG_FILES([Makefile \
            include/curl/Makefile \
            src/Makefile \
            lib/Makefile \
+           lib/libcurl.vers \
            tests/Makefile \
            tests/data/Makefile \
            tests/server/Makefile \
diff --git a/lib/Makefile.am b/lib/Makefile.am
index f2e54db..d764274 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -116,7 +116,11 @@ if MIMPURE
 MIMPURE = -mimpure-text
 endif
 
-libcurl_la_LDFLAGS = $(UNDEF) $(VERSIONINFO) $(MIMPURE) $(LIBCURL_LIBS)
+if VERSIONED_SYMBOLS
+VERSIONED_SYMBOLS = -Wl,--version-script=libcurl.vers
+endif
+
+libcurl_la_LDFLAGS = $(UNDEF) $(VERSIONINFO) $(MIMPURE) $(VERSIONED_SYMBOLS) $(LIBCURL_LIBS)
 
 # unit testing static library built only along with unit tests
 if BUILD_UNITTESTS
diff --git a/lib/libcurl.vers.in b/lib/libcurl.vers.in
new file mode 100644
index 0000000..43ae5de
--- /dev/null
+++ b/lib/libcurl.vers.in
@@ -0,0 +1,13 @@
+HIDDEN
+{
+	local:
+		__*;
+		_rest*;
+		_save*;
+};
+
+CURL_@VERSIONED_FLAVOUR@3
+{
+	global: curl_*; Curl_*;
+	local: *;
+};
