diff options
author | David Bremner <bremner@debian.org> | 2011-07-16 15:59:44 -0300 |
---|---|---|
committer | David Bremner <bremner@debian.org> | 2011-07-16 22:16:46 -0300 |
commit | feb22fef2e3f6f1cf1722f00945c580e506df0df (patch) | |
tree | efe0edb202123401e4083070d66a794e0128c5d5 /lib | |
parent | 8b310a157c06c826c0ee7f677fbbf9f19e78537b (diff) |
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).
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile.local | 4 | ||||
-rw-r--r-- | lib/gen-version-script.sh | 27 |
2 files changed, 28 insertions, 3 deletions
diff --git a/lib/Makefile.local b/lib/Makefile.local index 7e2bc87b..a6076ab5 100644 --- a/lib/Makefile.local +++ b/lib/Makefile.local @@ -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) $@ diff --git a/lib/gen-version-script.sh b/lib/gen-version-script.sh new file mode 100644 index 00000000..e753eaf5 --- /dev/null +++ b/lib/gen-version-script.sh @@ -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" |