Back in 2003, libtool got a patch to use -version-script instead of
-retain-symbols-file under Linux (in the repo it's commit
fb5e6cda96bd9dcae9e4f62ec8b6b3e572a32743).

While I was toying with a few things, I've noticed, that this patch
doesn't affect C++.

I don't know if there was a technical reason for this.

I've came up with a patch, that kind of works, though it's most likely
not really correct. It's against libtool 2.4.

If this mail reaches the list, I'd like to know:
- was skipping C++ back then done on purpose ?
- just how incorrect is the attched patch ?

PS: CC me with the replies.

--- libtool.m4.old	2011-09-06 09:54:13.000000000 +0200
+++ libtool.m4	2013-02-03 07:45:11.446790391 +0100
@@ -4503,6 +4503,40 @@
     _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
     ;;
   esac
+  if test "$with_gnu_ld" = yes; then
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+  fi
+  case $host_os in
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test "$tmp_diet" = no
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global: extern \"C++\" {" > $output_objdir/$libname.ver~
+	    cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+	    echo "}; local: *; };" >> $output_objdir/$libname.ver~
+	    $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+      fi
+    ;;
+  esac
+
 ], [
   runpath_var=
   _LT_TAGVAR(allow_undefined_flag, $1)=
_______________________________________________
https://lists.gnu.org/mailman/listinfo/libtool

Reply via email to