During a build attempt of gcc-20051001 and more secnt on darwin 10.8 I have discovered that apparently for some unknown reason make_exports.pl get's called during th libstdc++ build and fails miserably:

> libstdc++-symbol.explist || (rm -f libstdc++-symbol.explist ; exit 1) nm -P .libs/bitmap_allocator.o .libs/pool_allocator.o .libs/ mt_allocator.o .libs /codecvt.o .libs/compatibility.o .libs/complex_io.o .libs/ ctype.o .libs/debug.o .libs/debug_list.o .libs/functexcept.o .libs/globals_locale.o .libs/ globals_io.o .libs/ios.o .libs/ios_failure.o .libs/ios_init.o .libs/ ios_locale.o .libs/limit s.o .libs/list.o .libs/locale.o .libs/locale_init.o .libs/ locale_facets.o .libs/ localename.o .libs/stdexcept.o .libs/strstream.o .libs/tree.o .libs/ allocator-in st.o .libs/concept-inst.o .libs/fstream-inst.o .libs/ext-inst.o .libs/ io-inst.o .libs/istream-inst.o .libs/istream.o .libs/locale-inst.o .libs/locale- misc-inst. o .libs/misc-inst.o .libs/ostream-inst.o .libs/sstream-inst.o .libs/ streambuf-in st.o .libs/streambuf.o .libs/string-inst.o .libs/valarray- inst.o .libs/wlocale-i nst.o .libs/wstring-inst.o .libs/atomicity.o .libs/ codecvt_members.o .libs/colla te_members.o .libs/ctype_members.o .libs/messages_members.o .libs/ monetary_membe rs.o .libs/numeric_members.o .libs/time_members.o .libs/ basic_file.o .libs/c++lo cale.o ../libmath/.libs/libmath.a ../libsupc++/.libs/libsupc+ +convenience.a|nm:
no name list
nm: no name list
nm error at /Users/dalecki/BUILD/gcc-4.1-20051001/libstdc++-v3/ scripts/make_expo
rts.pl line 130.
make[3]: *** [libstdc++-symbol.explist] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all] Error 2

Checking the corresponding Makefile.am I can see that this is used in the context of ENABLE_SYMVERS_DARWIN_EXPORT:

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

This macros get's set according to acinclude.m4 in libstdc++ for builds which utilize the glibc. Heck? What's the purpose here? Fortunately there is no such thing as the glibc on this system at all. Looking at the m4 macro I can't quite see how to fix this problem myself:

AC_SUBST(SYMVER_MAP)
AC_SUBST(port_specific_symbol_files)
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)

Looking up a bit further in the acinclude.m4 I can see that enable_symvers is enabled unconditionally if the target_os is darwin. This seems to be just completely wrong anyway. Maybe there is some development version out there utilizing this bloat hub?

I'm right now not in the mood to dive myself in to the non-formal, fragile, how to waste time chasing broken by design system, world of autoconf/automake. Just adding --diable-symvers seems to easy for now. However I think the above should at least provide sufficient information to someone with a fetish on this to propery fix the issue at hand easly.

Thanks.

Reply via email to