libnotmuch: export Xapian typeinfo symbols

The lack of such exporting seems to cause problems catching
exceptions, as suggested by

    http://gcc.gnu.org/wiki/Visibility

This manifested in the symbol-hiding test failing when notmuch was
compile with gcc 4.4.5. On i386, this further manifested as notmuch
new failing to run (crashing with an uncaught exception on first run).
This commit is contained in:
David Bremner 2011-07-16 15:59:44 -03:00
parent 8b310a157c
commit feb22fef2e
2 changed files with 28 additions and 3 deletions

View file

@ -76,9 +76,7 @@ $(dir)/$(LIBNAME): $(libnotmuch_modules) notmuch.sym
$(call quiet,CXX $(CXXFLAGS)) $(libnotmuch_modules) $(FINAL_LIBNOTMUCH_LDFLAGS) $(LIBRARY_LINK_FLAG) -o $@
notmuch.sym: lib/notmuch.h
printf "{\nglobal:\n" > notmuch.sym
sed -n 's/^\s*\(notmuch_[a-z_]*\)\s*(.*/\t\1;/p' $< >> notmuch.sym
printf "local: *;\n};\n" >> notmuch.sym
sh lib/gen-version-script.sh $< $(libnotmuch_modules) > $@
$(dir)/$(SONAME): $(dir)/$(LIBNAME)
ln -sf $(LIBNAME) $@

27
lib/gen-version-script.sh Normal file
View file

@ -0,0 +1,27 @@
# we go through a bit of work to get the unmangled names of the
# typeinfo symbols because of
# http://sourceware.org/bugzilla/show_bug.cgi?id=10326
if [ $# -lt 2 ]; then
echo Usage: $0 header obj1 obj2 obj3
exit 1;
fi
HEADER=$1
shift
printf '{\nglobal:\n'
nm --defined $* | awk '$3 ~ "Xapian.*Error" {print $3}' | sort | uniq | \
while read sym; do
demangled=$(c++filt $sym)
case $demangled in
typeinfo*)
printf "\t$sym;\n"
;;
*)
;;
esac
done
sed -n 's/^\s*\(notmuch_[a-z_]*\)\s*(.*/\t\1;/p' $HEADER
printf "local: *;\n};\n"