From 3abf7e61babb76b1a33b33d6cf8ec0e924cba9a8 Mon Sep 17 00:00:00 2001 From: geoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Wed, 27 Jul 2005 18:28:32 +0000 Subject: [PATCH] Index: gcc/ChangeLog 2005-07-25 Geoffrey Keating <geoffk@apple.com> * doc/install.texi (Prerequisites): Mention that perl is needed to do export control in libstdc++ targetting Darwin. Index: libstdc++-v3/ChangeLog 2005-07-25 Geoffrey Keating <geoffk@apple.com> * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Handle darwin-export, and make it the default for Darwin. * scripts/make-exports.pl: New. * src/Makefile.am: Update for changes to GLIBCXX_ENABLE_SYMVERS. Handle darwin-export. * configure: Regenerate. * include/Makefile.in: Regenerate. * libmath/Makefile.in: Regenerate. * libsupc++/Makefile.in: Regenerate. * po/Makefile.in: Regenerate. * src/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102435 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 + gcc/doc/install.texi | 2 + libstdc++-v3/ChangeLog | 15 +++ libstdc++-v3/Makefile.in | 28 ++++-- libstdc++-v3/acinclude.m4 | 92 ++++++++++------- libstdc++-v3/configure | 145 +++++++++++++++++---------- libstdc++-v3/include/Makefile.in | 8 +- libstdc++-v3/libmath/Makefile.in | 8 +- libstdc++-v3/libsupc++/Makefile.in | 8 +- libstdc++-v3/po/Makefile.in | 8 +- libstdc++-v3/scripts/make_exports.pl | 144 ++++++++++++++++++++++++++ libstdc++-v3/src/Makefile.am | 16 ++- libstdc++-v3/src/Makefile.in | 43 +++++--- libstdc++-v3/testsuite/Makefile.in | 8 +- 14 files changed, 399 insertions(+), 131 deletions(-) create mode 100644 libstdc++-v3/scripts/make_exports.pl diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 363c9600fb37..baca021515fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-07-25 Geoffrey Keating <geoffk@apple.com> + + * doc/install.texi (Prerequisites): Mention that perl is needed + to do export control in libstdc++ targetting Darwin. + 2005-07-27 Steven Bosscher <stevenb@suse.de> PR rtl-optimization/17808 diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 56888f16330c..c1853bda5ce4 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -398,6 +398,8 @@ snapshots of the development sources are also available via FTP@. Necessary when regenerating @file{Makefile} dependencies in libiberty. Necessary when regenerating @file{libiberty/functions.texi}. Necessary when generating manpages from Texinfo manuals. +Necessary when targetting Darwin, building libstdc++, +and not using @option{--disable-symvers}. Used by various scripts to generate some files included in CVS (mainly Unicode-related and rarely changing) from source tables. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e3bf41c4207b..21f0924e243f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,18 @@ +2005-07-25 Geoffrey Keating <geoffk@apple.com> + + * acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Handle darwin-export, + and make it the default for Darwin. + * scripts/make-exports.pl: New. + * src/Makefile.am: Update for changes to GLIBCXX_ENABLE_SYMVERS. + Handle darwin-export. + * configure: Regenerate. + * include/Makefile.in: Regenerate. + * libmath/Makefile.in: Regenerate. + * libsupc++/Makefile.in: Regenerate. + * po/Makefile.in: Regenerate. + * src/Makefile.in: Regenerate. + * testsuite/Makefile.in: Regenerate. + 2005-07-25 Dave Odell <evilalias@hotmail.com> PR libstdc++/23053 diff --git a/libstdc++-v3/Makefile.in b/libstdc++-v3/Makefile.in index 5350407138b1..f328c63f5e59 100644 --- a/libstdc++-v3/Makefile.in +++ b/libstdc++-v3/Makefile.in @@ -2,7 +2,7 @@ # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -129,14 +129,16 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ENABLE_SYMVERS_DARWIN_EXPORT_FALSE = @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@ +ENABLE_SYMVERS_DARWIN_EXPORT_TRUE = @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@ +ENABLE_SYMVERS_GNU_FALSE = @ENABLE_SYMVERS_GNU_FALSE@ +ENABLE_SYMVERS_GNU_TRUE = @ENABLE_SYMVERS_GNU_TRUE@ EXEEXT = @EXEEXT@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GLIBCXX_BUILD_DEBUG_FALSE = @GLIBCXX_BUILD_DEBUG_FALSE@ GLIBCXX_BUILD_DEBUG_TRUE = @GLIBCXX_BUILD_DEBUG_TRUE@ GLIBCXX_BUILD_PCH_FALSE = @GLIBCXX_BUILD_PCH_FALSE@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE = @GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@ GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@ GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@ @@ -408,7 +410,13 @@ uninstall-info-am: # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @set fnord $$MAKEFLAGS; amf=$$2; \ + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ @@ -420,7 +428,7 @@ $(RECURSIVE_TARGETS): local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ @@ -428,7 +436,13 @@ $(RECURSIVE_TARGETS): mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: - @set fnord $$MAKEFLAGS; amf=$$2; \ + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ @@ -449,7 +463,7 @@ maintainer-clean-recursive: local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index d3156f2b2c43..6e5b4224a787 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -1671,16 +1671,30 @@ AC_DEFUN([GLIBCXX_ENABLE_SYMVERS], [ GLIBCXX_ENABLE(symvers,$1,[=STYLE], [enables symbol versioning of the shared library], - [permit yes|no|gnu]) + [permit yes|no|gnu|darwin-export]) # If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we # don't know enough about $LD to do tricks... AC_REQUIRE([GLIBCXX_CHECK_LINKER_FEATURES]) -# FIXME The following test is too strict, in theory. -if test $enable_shared = no || - test "x$LD" = x || - test x$glibcxx_gnu_ld_version = x; then - enable_symvers=no + +# Turn a 'yes' into a suitable default. +if test x$enable_symvers = xyes ; then + if test $enable_shared = no || + test "x$LD" = x ; then + enable_symvers=no + elif test $with_gnu_ld == yes ; then + enable_symvers=gnu + else + case ${target_os} in + darwin*) + enable_symvers=darwin-export ;; + *) + AC_MSG_WARN([=== You have requested some kind of symbol versioning, but]) + AC_MSG_WARN([=== you are not using a supported linker.]) + AC_MSG_WARN([=== Symbol versioning will be disabled.]) + enable_symvers=no ;; + esac + fi fi # Check to see if libgcc_s exists, indicating that shared libgcc is possible. @@ -1710,39 +1724,34 @@ changequote([,])dnl AC_MSG_RESULT($glibcxx_shared_libgcc) fi -# For GNU ld, we need at least this version. The format is described in -# GLIBCXX_CHECK_LINKER_FEATURES above. -glibcxx_min_gnu_ld_version=21400 +# If no shared libgcc, can't win. +if test $glibcxx_shared_libgcc != yes && + test $enable_symvers != no ; then + AC_MSG_WARN([=== You have requested some kind of symbol versioning, but]) + AC_MSG_WARN([=== you are not building a shared libgcc_s.]) + AC_MSG_WARN([=== Symbol versioning will be disabled.]) + enable_symvers=no + enable_symvers=no +fi + +# Check to see if 'gnu' can win. +if test $enable_symvers = gnu; then + # For GNU ld, we need at least this version. The format is described in + # GLIBCXX_CHECK_LINKER_FEATURES above. + glibcxx_min_gnu_ld_version=21400 -# Check to see if unspecified "yes" value can win, given results above. -# Change "yes" into either "no" or a style name. -if test $enable_symvers = yes; then - if test $with_gnu_ld = yes && - test $glibcxx_shared_libgcc = yes; - then - if test $glibcxx_gnu_ld_version -ge $glibcxx_min_gnu_ld_version ; then - enable_symvers=gnu - else - # The right tools, the right setup, but too old. Fallbacks? - AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for) - AC_MSG_WARN(=== full symbol versioning support in this release of GCC.) - AC_MSG_WARN(=== You would need to upgrade your binutils to version) - AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.) - if test $glibcxx_gnu_ld_version -ge 21200 ; then - # Globbing fix is present, proper block support is not. - AC_MSG_WARN([=== Symbol versioning will be disabled.]) - enable_symvers=no - else - # 2.11 or older. - AC_MSG_WARN([=== Symbol versioning will be disabled.]) - enable_symvers=no - fi - fi - else + if test $with_gnu_ld != yes ; then # just fail for now - AC_MSG_WARN([=== You have requested some kind of symbol versioning, but]) - AC_MSG_WARN([=== either you are not using a supported linker, or you are]) - AC_MSG_WARN([=== not building a shared libgcc_s (which is required).]) + AC_MSG_WARN([=== You have requested GNU symbol versioning, but]) + AC_MSG_WARN([=== you are not using the GNU linker.]) + AC_MSG_WARN([=== Symbol versioning will be disabled.]) + enable_symvers=no + elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then + # The right tools, the right setup, but too old. Fallbacks? + AC_MSG_WARN(=== Linker version $glibcxx_gnu_ld_version is too old for) + AC_MSG_WARN(=== full symbol versioning support in this release of GCC.) + AC_MSG_WARN(=== You would need to upgrade your binutils to version) + AC_MSG_WARN(=== $glibcxx_min_gnu_ld_version or later and rebuild GCC.) AC_MSG_WARN([=== Symbol versioning will be disabled.]) enable_symvers=no fi @@ -1756,7 +1765,10 @@ case $enable_symvers in gnu) SYMVER_MAP=config/linker-map.gnu AC_DEFINE(_GLIBCXX_SYMVER, 1, - [Define to use symbol versioning in the shared library.]) + [Define to use GNU symbol versioning in the shared library.]) + ;; + darwin-export) + SYMVER_MAP=config/linker-map.gnu ;; esac @@ -1787,7 +1799,9 @@ AC_MSG_RESULT([$glibcxx_ptrdiff_t_is_i]) AC_SUBST(SYMVER_MAP) AC_SUBST(port_specific_symbol_files) -GLIBCXX_CONDITIONAL(GLIBCXX_BUILD_VERSIONED_SHLIB, test $enable_symvers != no) +GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_GNU, test $enable_symvers == gnu) +GLIBCXX_CONDITIONAL(ENABLE_SYMVERS_DARWIN_EXPORT, dnl + test $enable_symvers == darwin-export) AC_MSG_NOTICE(versioning on shared library symbols is $enable_symvers) ]) diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index b679737757c2..c8b3f6a8c810 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include <unistd.h> #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS libtool_VERSION multi_basedir build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar glibcxx_builddir glibcxx_srcdir toplevel_srcdir CC ac_ct_CC EXEEXT OBJEXT CXX ac_ct_CXX CFLAGS CXXFLAGS LN_S AS ac_ct_AS AR ac_ct_AR RANLIB ac_ct_RANLIB MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT LIBTOOL CXXCPP CPPFLAGS enable_shared enable_static GLIBCXX_HOSTED_TRUE GLIBCXX_HOSTED_FALSE GLIBCXX_BUILD_PCH_TRUE GLIBCXX_BUILD_PCH_FALSE glibcxx_PCHFLAGS CSTDIO_H BASIC_FILE_H BASIC_FILE_CC CPP EGREP check_msgfmt glibcxx_MOFILES glibcxx_POFILES glibcxx_localedir USE_NLS CLOCALE_H CMESSAGES_H CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_H CTIME_CC CLOCALE_CC CLOCALE_INTERNAL_H ALLOCATOR_H ALLOCATOR_NAME C_INCLUDE_DIR GLIBCXX_C_HEADERS_C_TRUE GLIBCXX_C_HEADERS_C_FALSE GLIBCXX_C_HEADERS_C_STD_TRUE GLIBCXX_C_HEADERS_C_STD_FALSE GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE DEBUG_FLAGS GLIBCXX_BUILD_DEBUG_TRUE GLIBCXX_BUILD_DEBUG_FALSE EXTRA_CXX_FLAGS glibcxx_thread_h WERROR SECTION_FLAGS SECTION_LDFLAGS OPT_LDFLAGS LIBMATHOBJS LIBICONV SYMVER_MAP port_specific_symbol_files ENABLE_SYMVERS_GNU_TRUE ENABLE_SYMVERS_GNU_FALSE ENABLE_SYMVERS_DARWIN_EXPORT_TRUE ENABLE_SYMVERS_DARWIN_EXPORT_FALSE baseline_dir ATOMICITY_SRCDIR ATOMIC_WORD_SRCDIR ABI_TWEAKS_SRCDIR OS_INC_SRCDIR glibcxx_prefixdir gxx_include_dir glibcxx_toolexecdir glibcxx_toolexeclibdir GLIBCXX_INCLUDES TOPLEVEL_INCLUDES OPTIMIZE_CXXFLAGS WARN_FLAGS LIBSUPCXX_PICFLAGS LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -87145,7 +87145,7 @@ if test "${enable_symvers+set}" = set; then enableval="$enable_symvers" case "$enableval" in - yes|no|gnu) ;; + yes|no|gnu|darwin-export) ;; *) { { echo "$as_me:$LINENO: error: Unknown argument to enable/disable symvers" >&5 echo "$as_me: error: Unknown argument to enable/disable symvers" >&2;} { (exit 1); exit 1; }; } ;; @@ -87159,11 +87159,28 @@ fi; # If we never went through the GLIBCXX_CHECK_LINKER_FEATURES macro, then we # don't know enough about $LD to do tricks... -# FIXME The following test is too strict, in theory. -if test $enable_shared = no || - test "x$LD" = x || - test x$glibcxx_gnu_ld_version = x; then - enable_symvers=no + +# Turn a 'yes' into a suitable default. +if test x$enable_symvers = xyes ; then + if test $enable_shared = no || + test "x$LD" = x ; then + enable_symvers=no + elif test $with_gnu_ld == yes ; then + enable_symvers=gnu + else + case ${target_os} in + darwin*) + enable_symvers=darwin-export ;; + *) + { echo "$as_me:$LINENO: WARNING: === You have requested some kind of symbol versioning, but" >&5 +echo "$as_me: WARNING: === You have requested some kind of symbol versioning, but" >&2;} + { echo "$as_me:$LINENO: WARNING: === you are not using a supported linker." >&5 +echo "$as_me: WARNING: === you are not using a supported linker." >&2;} + { echo "$as_me:$LINENO: WARNING: === Symbol versioning will be disabled." >&5 +echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} + enable_symvers=no ;; + esac + fi fi # Check to see if libgcc_s exists, indicating that shared libgcc is possible. @@ -87292,48 +87309,44 @@ rm -f conftest.err conftest.$ac_objext \ echo "${ECHO_T}$glibcxx_shared_libgcc" >&6 fi -# For GNU ld, we need at least this version. The format is described in -# GLIBCXX_CHECK_LINKER_FEATURES above. -glibcxx_min_gnu_ld_version=21400 +# If no shared libgcc, can't win. +if test $glibcxx_shared_libgcc != yes && + test $enable_symvers != no ; then + { echo "$as_me:$LINENO: WARNING: === You have requested some kind of symbol versioning, but" >&5 +echo "$as_me: WARNING: === You have requested some kind of symbol versioning, but" >&2;} + { echo "$as_me:$LINENO: WARNING: === you are not building a shared libgcc_s." >&5 +echo "$as_me: WARNING: === you are not building a shared libgcc_s." >&2;} + { echo "$as_me:$LINENO: WARNING: === Symbol versioning will be disabled." >&5 +echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} + enable_symvers=no + enable_symvers=no +fi + +# Check to see if 'gnu' can win. +if test $enable_symvers = gnu; then + # For GNU ld, we need at least this version. The format is described in + # GLIBCXX_CHECK_LINKER_FEATURES above. + glibcxx_min_gnu_ld_version=21400 -# Check to see if unspecified "yes" value can win, given results above. -# Change "yes" into either "no" or a style name. -if test $enable_symvers = yes; then - if test $with_gnu_ld = yes && - test $glibcxx_shared_libgcc = yes; - then - if test $glibcxx_gnu_ld_version -ge $glibcxx_min_gnu_ld_version ; then - enable_symvers=gnu - else - # The right tools, the right setup, but too old. Fallbacks? - { echo "$as_me:$LINENO: WARNING: === Linker version $glibcxx_gnu_ld_version is too old for" >&5 + if test $with_gnu_ld != yes ; then + # just fail for now + { echo "$as_me:$LINENO: WARNING: === You have requested GNU symbol versioning, but" >&5 +echo "$as_me: WARNING: === You have requested GNU symbol versioning, but" >&2;} + { echo "$as_me:$LINENO: WARNING: === you are not using the GNU linker." >&5 +echo "$as_me: WARNING: === you are not using the GNU linker." >&2;} + { echo "$as_me:$LINENO: WARNING: === Symbol versioning will be disabled." >&5 +echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} + enable_symvers=no + elif test $glibcxx_gnu_ld_version -lt $glibcxx_min_gnu_ld_version ; then + # The right tools, the right setup, but too old. Fallbacks? + { echo "$as_me:$LINENO: WARNING: === Linker version $glibcxx_gnu_ld_version is too old for" >&5 echo "$as_me: WARNING: === Linker version $glibcxx_gnu_ld_version is too old for" >&2;} - { echo "$as_me:$LINENO: WARNING: === full symbol versioning support in this release of GCC." >&5 + { echo "$as_me:$LINENO: WARNING: === full symbol versioning support in this release of GCC." >&5 echo "$as_me: WARNING: === full symbol versioning support in this release of GCC." >&2;} - { echo "$as_me:$LINENO: WARNING: === You would need to upgrade your binutils to version" >&5 + { echo "$as_me:$LINENO: WARNING: === You would need to upgrade your binutils to version" >&5 echo "$as_me: WARNING: === You would need to upgrade your binutils to version" >&2;} - { echo "$as_me:$LINENO: WARNING: === $glibcxx_min_gnu_ld_version or later and rebuild GCC." >&5 + { echo "$as_me:$LINENO: WARNING: === $glibcxx_min_gnu_ld_version or later and rebuild GCC." >&5 echo "$as_me: WARNING: === $glibcxx_min_gnu_ld_version or later and rebuild GCC." >&2;} - if test $glibcxx_gnu_ld_version -ge 21200 ; then - # Globbing fix is present, proper block support is not. - { echo "$as_me:$LINENO: WARNING: === Symbol versioning will be disabled." >&5 -echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} - enable_symvers=no - else - # 2.11 or older. - { echo "$as_me:$LINENO: WARNING: === Symbol versioning will be disabled." >&5 -echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} - enable_symvers=no - fi - fi - else - # just fail for now - { echo "$as_me:$LINENO: WARNING: === You have requested some kind of symbol versioning, but" >&5 -echo "$as_me: WARNING: === You have requested some kind of symbol versioning, but" >&2;} - { echo "$as_me:$LINENO: WARNING: === either you are not using a supported linker, or you are" >&5 -echo "$as_me: WARNING: === either you are not using a supported linker, or you are" >&2;} - { echo "$as_me:$LINENO: WARNING: === not building a shared libgcc_s (which is required)." >&5 -echo "$as_me: WARNING: === not building a shared libgcc_s (which is required)." >&2;} { echo "$as_me:$LINENO: WARNING: === Symbol versioning will be disabled." >&5 echo "$as_me: WARNING: === Symbol versioning will be disabled." >&2;} enable_symvers=no @@ -87352,6 +87365,9 @@ cat >>confdefs.h <<\_ACEOF #define _GLIBCXX_SYMVER 1 _ACEOF + ;; + darwin-export) + SYMVER_MAP=config/linker-map.gnu ;; esac @@ -87481,6 +87497,7 @@ echo "${ECHO_T}$glibcxx_ptrdiff_t_is_i" >&6 + { echo "$as_me:$LINENO: versioning on shared library symbols is $enable_symvers" >&5 echo "$as_me: versioning on shared library symbols is $enable_symvers" >&6;} @@ -88290,12 +88307,23 @@ fi -if test $enable_symvers != no; then - GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE= - GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE='#' +if test $enable_symvers == gnu; then + ENABLE_SYMVERS_GNU_TRUE= + ENABLE_SYMVERS_GNU_FALSE='#' else - GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE='#' - GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE= + ENABLE_SYMVERS_GNU_TRUE='#' + ENABLE_SYMVERS_GNU_FALSE= +fi + + + + +if test $enable_symvers == darwin-export; then + ENABLE_SYMVERS_DARWIN_EXPORT_TRUE= + ENABLE_SYMVERS_DARWIN_EXPORT_FALSE='#' +else + ENABLE_SYMVERS_DARWIN_EXPORT_TRUE='#' + ENABLE_SYMVERS_DARWIN_EXPORT_FALSE= fi @@ -88642,10 +88670,17 @@ echo "$as_me: error: conditional \"GLIBCXX_BUILD_DEBUG\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi -if test -z "${GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"GLIBCXX_BUILD_VERSIONED_SHLIB\" was never defined. +if test -z "${ENABLE_SYMVERS_GNU_TRUE}" && test -z "${ENABLE_SYMVERS_GNU_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"ENABLE_SYMVERS_GNU\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"ENABLE_SYMVERS_GNU\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${ENABLE_SYMVERS_DARWIN_EXPORT_TRUE}" && test -z "${ENABLE_SYMVERS_DARWIN_EXPORT_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"ENABLE_SYMVERS_DARWIN_EXPORT\" was never defined. Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"GLIBCXX_BUILD_VERSIONED_SHLIB\" was never defined. +echo "$as_me: error: conditional \"ENABLE_SYMVERS_DARWIN_EXPORT\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi @@ -89315,8 +89350,10 @@ s,@LIBMATHOBJS@,$LIBMATHOBJS,;t t s,@LIBICONV@,$LIBICONV,;t t s,@SYMVER_MAP@,$SYMVER_MAP,;t t s,@port_specific_symbol_files@,$port_specific_symbol_files,;t t -s,@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@,$GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE,;t t -s,@GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@,$GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE,;t t +s,@ENABLE_SYMVERS_GNU_TRUE@,$ENABLE_SYMVERS_GNU_TRUE,;t t +s,@ENABLE_SYMVERS_GNU_FALSE@,$ENABLE_SYMVERS_GNU_FALSE,;t t +s,@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@,$ENABLE_SYMVERS_DARWIN_EXPORT_TRUE,;t t +s,@ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@,$ENABLE_SYMVERS_DARWIN_EXPORT_FALSE,;t t s,@baseline_dir@,$baseline_dir,;t t s,@ATOMICITY_SRCDIR@,$ATOMICITY_SRCDIR,;t t s,@ATOMIC_WORD_SRCDIR@,$ATOMIC_WORD_SRCDIR,;t t diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 221d5d4882d3..082c330a610d 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -2,7 +2,7 @@ # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -97,14 +97,16 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ENABLE_SYMVERS_DARWIN_EXPORT_FALSE = @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@ +ENABLE_SYMVERS_DARWIN_EXPORT_TRUE = @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@ +ENABLE_SYMVERS_GNU_FALSE = @ENABLE_SYMVERS_GNU_FALSE@ +ENABLE_SYMVERS_GNU_TRUE = @ENABLE_SYMVERS_GNU_TRUE@ EXEEXT = @EXEEXT@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GLIBCXX_BUILD_DEBUG_FALSE = @GLIBCXX_BUILD_DEBUG_FALSE@ GLIBCXX_BUILD_DEBUG_TRUE = @GLIBCXX_BUILD_DEBUG_TRUE@ GLIBCXX_BUILD_PCH_FALSE = @GLIBCXX_BUILD_PCH_FALSE@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE = @GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@ GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@ GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@ diff --git a/libstdc++-v3/libmath/Makefile.in b/libstdc++-v3/libmath/Makefile.in index f3aaf3eae7f3..bd9b73c9d985 100644 --- a/libstdc++-v3/libmath/Makefile.in +++ b/libstdc++-v3/libmath/Makefile.in @@ -2,7 +2,7 @@ # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -114,14 +114,16 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ENABLE_SYMVERS_DARWIN_EXPORT_FALSE = @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@ +ENABLE_SYMVERS_DARWIN_EXPORT_TRUE = @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@ +ENABLE_SYMVERS_GNU_FALSE = @ENABLE_SYMVERS_GNU_FALSE@ +ENABLE_SYMVERS_GNU_TRUE = @ENABLE_SYMVERS_GNU_TRUE@ EXEEXT = @EXEEXT@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GLIBCXX_BUILD_DEBUG_FALSE = @GLIBCXX_BUILD_DEBUG_FALSE@ GLIBCXX_BUILD_DEBUG_TRUE = @GLIBCXX_BUILD_DEBUG_TRUE@ GLIBCXX_BUILD_PCH_FALSE = @GLIBCXX_BUILD_PCH_FALSE@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE = @GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@ GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@ GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@ diff --git a/libstdc++-v3/libsupc++/Makefile.in b/libstdc++-v3/libsupc++/Makefile.in index 5d1c1390131b..0bb267bfbc41 100644 --- a/libstdc++-v3/libsupc++/Makefile.in +++ b/libstdc++-v3/libsupc++/Makefile.in @@ -2,7 +2,7 @@ # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -155,14 +155,16 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ENABLE_SYMVERS_DARWIN_EXPORT_FALSE = @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@ +ENABLE_SYMVERS_DARWIN_EXPORT_TRUE = @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@ +ENABLE_SYMVERS_GNU_FALSE = @ENABLE_SYMVERS_GNU_FALSE@ +ENABLE_SYMVERS_GNU_TRUE = @ENABLE_SYMVERS_GNU_TRUE@ EXEEXT = @EXEEXT@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GLIBCXX_BUILD_DEBUG_FALSE = @GLIBCXX_BUILD_DEBUG_FALSE@ GLIBCXX_BUILD_DEBUG_TRUE = @GLIBCXX_BUILD_DEBUG_TRUE@ GLIBCXX_BUILD_PCH_FALSE = @GLIBCXX_BUILD_PCH_FALSE@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE = @GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@ GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@ GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@ diff --git a/libstdc++-v3/po/Makefile.in b/libstdc++-v3/po/Makefile.in index 9f4bacab3e7a..4d4372f7e2e9 100644 --- a/libstdc++-v3/po/Makefile.in +++ b/libstdc++-v3/po/Makefile.in @@ -2,7 +2,7 @@ # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -97,14 +97,16 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ENABLE_SYMVERS_DARWIN_EXPORT_FALSE = @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@ +ENABLE_SYMVERS_DARWIN_EXPORT_TRUE = @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@ +ENABLE_SYMVERS_GNU_FALSE = @ENABLE_SYMVERS_GNU_FALSE@ +ENABLE_SYMVERS_GNU_TRUE = @ENABLE_SYMVERS_GNU_TRUE@ EXEEXT = @EXEEXT@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GLIBCXX_BUILD_DEBUG_FALSE = @GLIBCXX_BUILD_DEBUG_FALSE@ GLIBCXX_BUILD_DEBUG_TRUE = @GLIBCXX_BUILD_DEBUG_TRUE@ GLIBCXX_BUILD_PCH_FALSE = @GLIBCXX_BUILD_PCH_FALSE@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE = @GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@ GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@ GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@ diff --git a/libstdc++-v3/scripts/make_exports.pl b/libstdc++-v3/scripts/make_exports.pl new file mode 100644 index 000000000000..e5a58325ecb6 --- /dev/null +++ b/libstdc++-v3/scripts/make_exports.pl @@ -0,0 +1,144 @@ +#!/usr/bin/perl -w + +# This script takes two arguments, a version script and a dynamic library +# (in that order), and prints a list of symbols to be exported from the +# library. +# It expects a 'nm' with the POSIX '-P' option, but everyone has one of +# those, right? It also expects that symbol names have a leading underscore, +# which is somewhat less likely. + +use File::Glob ':glob'; +use FileHandle; +use IPC::Open2; + +# The glob patterns that are to be applied to the demangled name +my @cxx_globs = (); +# The glob patterns that apply directly to the name in the .o files +my @globs = (); +# The patterns for local variables (usually just '*'). +my @ignored = (); + +########## +# Fill in the various glob arrays. + +# The next pattern will go into this array. +my $glob = \@globs; +my $symvers = shift; + +open F,$symvers or die $!; + +while (<F>) { + chomp; + # Lines of the form '} SOME_VERSION_NAME_1.0;' + if (/^[ \t]*\}[ \tA-Z0-9_.a-z]*;[ \t]*$/) { + $glob = \@globs; + next; + } + # Comment and blank lines + next if (/^[ \t]*\#/); + next if (/^[ \t]*$/); + # Lines of the form 'SOME_VERSION_NAME_1.1 {' + next if (/^[A-Z0-9_. \t]*{$/); + # Ignore 'global:' + next if (/^[ \t]*global:$/); + # After 'local:', globs should be ignored, they won't be exported. + if (/^[ \t]*local:$/) { + $glob = \@ignored; + next; + } + # After 'extern "C++"', globs are C++ patterns + if (/^[ \t]*extern \"C\+\+\"[ \t]*$/) { + $glob = \@cxx_globs; + next; + } + # Catch globs. Note that '{}' is not allowed in globs by this script, + # so only '*' and '[]' are available. + if (/^[ \t]*([^ \t;{}#]+);?[ \t]*$/) { + my $ptn = $1; + # Turn the glob into a regex by replacing '*' with '.*'. + $ptn =~ s/\*/\.\*/g; + push @$glob,$ptn; + next; + } + # Important sanity check. This script can't handle lots of formats + # that GNU ld can, so be sure to error out if one is seen! + die "strange line `$_'"; +} +close F; + +# Make 'if (1)' for debugging. +if (0) { + print "cxx:\n"; + (printf "%s\n",$_) foreach (@cxx_globs); + print "globs:\n"; + (printf "%s\n", $_) foreach (@globs); + print "ignored:\n"; + (printf "%s\n", $_) foreach (@ignored); +} + +########## +# Combine the arrays into single regular expressions +# This cuts the time required from about 30 seconds to about 0.5 seconds. + +my $glob_regex = '^_(' . (join '|',@globs) . ')$'; +my $cxx_regex = (join '|',@cxx_globs); + +########## +# Get all the symbols from the library, match them, and add them to a hash. + +my %export_hash = (); + +# Process each symbol. +print STDERR 'nm -P '.(join ' ',@ARGV).'|'; +open NM,'nm -P '.(join ' ',@ARGV).'|' or die $!; +# Talk to c++filt through a pair of file descriptors. +open2(*FILTIN, *FILTOUT, "c++filt") or die $!; +NAME: while (<NM>) { + my $i; + chomp; + + # nm prints out stuff at the start, ignore it. + next if (/^$/); + next if (/:$/); + # Ignore undefined and local symbols. + next if (/^([^ ]+) [Ua-z] /); + + # $sym is the name of the symbol, $noeh_sym is the same thing with + # any '.eh' suffix removed. + die "unknown nm output $_" if (! /^([^ ]+) [A-Z] /); + my $sym = $1; + my $noeh_sym = $sym; + $noeh_sym =~ s/\.eh$//; + + # Maybe it matches one of the patterns based on the symbol in the .o file. + if ($noeh_sym =~ /$glob_regex/) { + $export_hash{$sym} = 1; + next NAME; + } + + # No? Well, maybe its demangled form matches one of those patterns. + printf FILTOUT "%s\n",$noeh_sym; + my $dem = <FILTIN>; + chomp $dem; + if ($dem =~ /$cxx_regex/) { + $export_hash{$sym} = 2; + next NAME; + } + + # No? Well, then ignore it. +} +close NM or die "nm error"; +close FILTOUT or die "c++filt error"; +close FILTIN or die "c++filt error"; + +########## +# Print out the export file + +# Print information about generating this file +print "# This is a generated file.\n"; +print "# It was generated by:\n"; +printf "# %s %s %s\n", $0, $symvers, (join ' ',@ARGV); + +foreach my $i (keys %export_hash) { + printf "%s\n",$i or die; +} diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am index 13f5397ceb48..940d669e39f8 100644 --- a/libstdc++-v3/src/Makefile.am +++ b/libstdc++-v3/src/Makefile.am @@ -28,7 +28,7 @@ include $(top_srcdir)/fragment.am toolexeclib_LTLIBRARIES = libstdc++.la # Symbol versioning for shared libraries. -if GLIBCXX_BUILD_VERSIONED_SHLIB +if ENABLE_SYMVERS_GNU version_arg = -Wl,--version-script=libstdc++-symbol.ver version_dep = libstdc++-symbol.ver libstdc++-symbol.ver: ${glibcxx_srcdir}/$(SYMVER_MAP) @@ -40,9 +40,23 @@ libstdc++-symbol.ver: ${glibcxx_srcdir}/$(SYMVER_MAP) rm tmp.top tmp.bottom; \ fi else +if ENABLE_SYMVERS_DARWIN_EXPORT +version_arg = -Wl,-exported_symbols_list,libstdc++-symbol.explist +version_dep = libstdc++-symbol.explist +libstdc++-symbol.explist : ${glibcxx_srcdir}/$(SYMVER_MAP) \ + ${glibcxx_srcdir}/scripts/make_exports.pl \ + $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) + perl ${glibcxx_srcdir}/scripts/make_exports.pl \ + ${glibcxx_srcdir}/$(SYMVER_MAP) \ + $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \ + `echo $(libstdc___la_LIBADD) | \ + sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \ + > $@ || (rm -f $@ ; exit 1) +else version_arg = version_dep = endif +endif # Source files linked in via configuration/make substitution for a diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in index 076115b2e4c3..4f3e20b7a176 100644 --- a/libstdc++-v3/src/Makefile.in +++ b/libstdc++-v3/src/Makefile.in @@ -2,7 +2,7 @@ # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -133,14 +133,16 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ENABLE_SYMVERS_DARWIN_EXPORT_FALSE = @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@ +ENABLE_SYMVERS_DARWIN_EXPORT_TRUE = @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@ +ENABLE_SYMVERS_GNU_FALSE = @ENABLE_SYMVERS_GNU_FALSE@ +ENABLE_SYMVERS_GNU_TRUE = @ENABLE_SYMVERS_GNU_TRUE@ EXEEXT = @EXEEXT@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GLIBCXX_BUILD_DEBUG_FALSE = @GLIBCXX_BUILD_DEBUG_FALSE@ GLIBCXX_BUILD_DEBUG_TRUE = @GLIBCXX_BUILD_DEBUG_TRUE@ GLIBCXX_BUILD_PCH_FALSE = @GLIBCXX_BUILD_PCH_FALSE@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE = @GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@ GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@ GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@ @@ -273,12 +275,14 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES) # Cross compiler support. toolexeclib_LTLIBRARIES = libstdc++.la -@GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@version_arg = +@ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@@ENABLE_SYMVERS_GNU_FALSE@version_arg = +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@version_arg = -Wl,-exported_symbols_list,libstdc++-symbol.explist # Symbol versioning for shared libraries. -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@version_arg = -Wl,--version-script=libstdc++-symbol.ver -@GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@version_dep = -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@version_dep = libstdc++-symbol.ver +@ENABLE_SYMVERS_GNU_TRUE@version_arg = -Wl,--version-script=libstdc++-symbol.ver +@ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@@ENABLE_SYMVERS_GNU_FALSE@version_dep = +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@version_dep = libstdc++-symbol.explist +@ENABLE_SYMVERS_GNU_TRUE@version_dep = libstdc++-symbol.ver # Source files linked in via configuration/make substitution for a # particular host. @@ -665,14 +669,23 @@ uninstall-am: uninstall-info-am uninstall-toolexeclibLTLIBRARIES tags uninstall uninstall-am uninstall-info-am \ uninstall-toolexeclibLTLIBRARIES -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@libstdc++-symbol.ver: ${glibcxx_srcdir}/$(SYMVER_MAP) -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ if test "x$(port_specific_symbol_files)" != x; then \ -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ rm tmp.top tmp.bottom; \ -@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ fi +@ENABLE_SYMVERS_GNU_TRUE@libstdc++-symbol.ver: ${glibcxx_srcdir}/$(SYMVER_MAP) +@ENABLE_SYMVERS_GNU_TRUE@ cp ${glibcxx_srcdir}/$(SYMVER_MAP) ./libstdc++-symbol.ver +@ENABLE_SYMVERS_GNU_TRUE@ if test "x$(port_specific_symbol_files)" != x; then \ +@ENABLE_SYMVERS_GNU_TRUE@ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \ +@ENABLE_SYMVERS_GNU_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \ +@ENABLE_SYMVERS_GNU_TRUE@ cat tmp.top $(port_specific_symbol_files) tmp.bottom > $@; \ +@ENABLE_SYMVERS_GNU_TRUE@ rm tmp.top tmp.bottom; \ +@ENABLE_SYMVERS_GNU_TRUE@ fi +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@libstdc++-symbol.explist : ${glibcxx_srcdir}/$(SYMVER_MAP) \ +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ ${glibcxx_srcdir}/scripts/make_exports.pl \ +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ $(libstdc___la_OBJECTS) $(libstdc___la_LIBADD) +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ perl ${glibcxx_srcdir}/scripts/make_exports.pl \ +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ ${glibcxx_srcdir}/$(SYMVER_MAP) \ +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ $(libstdc___la_OBJECTS:%.lo=.libs/%.o) \ +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ `echo $(libstdc___la_LIBADD) | \ +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ sed 's,/\([^/.]*\)\.la,/.libs/\1.a,g'` \ +@ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@@ENABLE_SYMVERS_GNU_FALSE@ > $@ || (rm -f $@ ; exit 1) codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC) $(LN_S) ${glibcxx_srcdir}/$(CCODECVT_CC) . || true diff --git a/libstdc++-v3/testsuite/Makefile.in b/libstdc++-v3/testsuite/Makefile.in index 91e1874ebabf..68040f28d6f9 100644 --- a/libstdc++-v3/testsuite/Makefile.in +++ b/libstdc++-v3/testsuite/Makefile.in @@ -2,7 +2,7 @@ # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -101,14 +101,16 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ +ENABLE_SYMVERS_DARWIN_EXPORT_FALSE = @ENABLE_SYMVERS_DARWIN_EXPORT_FALSE@ +ENABLE_SYMVERS_DARWIN_EXPORT_TRUE = @ENABLE_SYMVERS_DARWIN_EXPORT_TRUE@ +ENABLE_SYMVERS_GNU_FALSE = @ENABLE_SYMVERS_GNU_FALSE@ +ENABLE_SYMVERS_GNU_TRUE = @ENABLE_SYMVERS_GNU_TRUE@ EXEEXT = @EXEEXT@ EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@ GLIBCXX_BUILD_DEBUG_FALSE = @GLIBCXX_BUILD_DEBUG_FALSE@ GLIBCXX_BUILD_DEBUG_TRUE = @GLIBCXX_BUILD_DEBUG_TRUE@ GLIBCXX_BUILD_PCH_FALSE = @GLIBCXX_BUILD_PCH_FALSE@ GLIBCXX_BUILD_PCH_TRUE = @GLIBCXX_BUILD_PCH_TRUE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE = @GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@ -GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE = @GLIBCXX_C_HEADERS_COMPATIBILITY_FALSE@ GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE = @GLIBCXX_C_HEADERS_COMPATIBILITY_TRUE@ GLIBCXX_C_HEADERS_C_FALSE = @GLIBCXX_C_HEADERS_C_FALSE@ -- GitLab