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.