Package: zbar
Version: 0.10+doc-2
Severity: minor
Tags: patch
User: [email protected]
Usertags: origin-ubuntu ubuntu-patch maverick
Hi there
zbar was failing to build on all arches in Ubuntu, partly due to symbol
files issues. While looking into it, I noticed that the symbols were
duplicated across arches and hard to maintain and patch.
I've factored the symbol files together, and used the demangled C++
names for the symbols. I think this is much more maintainable.
It seemed it used to be required to have symbol files for 32-bits arnd
64-bits arches; in which case you could use something like:
(arch=alpha amd64 ia64)#include "libfoo.symbols.64"
I'm attaching the resulting symbol file which I've also updated to
match Ubuntu symbols. I suspect this wont work out of the box in
Debian, but this should be a good base to build nicer symbol files on.
What I fear will break:
- usage of different qt4-x11 version seems to cause some symbols to
appear/disappear on some arches; this is a big issue for backports or
source compatibility across distros
- usage of slightly different compilers (e.g. libstdc++) might result
in different symbols for the zbar classes; probably not a high risk;
should really be fixed in dpkg-dev
I suppose more work would be needed to avoid exposing the Qt ABI in the
libs and to mark some symbols as optional depending on the compiler
version. This can be done with c++|regexp syntax, for instance marking
all Qt symbols as optional. I'm not sure how to properly deal with
this with libtool and C++ upstream though.
Thanks!
PS: attaching the debian/libzbarqt0.symbols file which should replace
all the debian/libzbarqt0.symbols* files you currently have.
--
Loïc Minier
libzbarqt.so.0 libzbarqt0 #MINVER#
(c++)"QList<QEvent*>::append(QEvent* const&)@Base" 0.10+doc-1
(c++)"QList<QEvent*>::~QList()@Base" 0.10
(c++)"QMutexLocker::~QMutexLocker()@Base" 0.10
(c++)"QString::~QString()@Base" 0.10
(c++)"non-virtual thunk to
zbar::QZBarThread::image_callback(zbar::Image&)@Base" 0.10
(c++)"non-virtual thunk to zbar::QZBarThread::~QZBarThread()@Base" 0.10
(c++)"non-virtual thunk to zbar::QZBarThread::~QZBarThread()@Base" 0.10
(c++)"non-virtual thunk to zbar::QZBar::~QZBar()@Base" 0.10
(c++)"non-virtual thunk to zbar::QZBar::~QZBar()@Base" 0.10
(c++)"non-virtual thunk to zbar::QZBar::paintEngine() co...@base" 0.10
(c++)"typeinfo for zbar::busyer...@base" 0.10
(c++)"typeinfo for zbar::closeder...@base" 0.10
(c++)"typeinfo for zbar::except...@base" 0.10
(c++)"typeinfo for zbar::formater...@base" 0.10
(c++)"typeinfo for zbar::Image::hand...@base" 0.10
(c++)"typeinfo for zbar::internaler...@base" 0.10
(c++)"typeinfo for zbar::invalider...@base" 0.10
(c++)"typeinfo for zbar::lockinger...@base" 0.10
(c++)"typeinfo for zbar::qz...@base" 0.10
(c++)"typeinfo for zbar::qzbarthr...@base" 0.10
(c++)"typeinfo for zbar::QZBarThread::scanimageev...@base" 0.10
(c++)"typeinfo for zbar::QZBarThread::videodeviceev...@base" 0.10
(c++)"typeinfo for zbar::QZBarThread::videoenabledev...@base" 0.10
(c++)"typeinfo for zbar::systemer...@base" 0.10
(c++)"typeinfo for zbar::unsupporteder...@base" 0.10
(c++)"typeinfo for zbar::xdisplayer...@base" 0.10
(c++)"typeinfo for zbar::xprotoer...@base" 0.10
(c++)"typeinfo name for zbar::busyer...@base" 0.10
(c++)"typeinfo name for zbar::closeder...@base" 0.10
(c++)"typeinfo name for zbar::except...@base" 0.10
(c++)"typeinfo name for zbar::formater...@base" 0.10
(c++)"typeinfo name for zbar::Image::hand...@base" 0.10
(c++)"typeinfo name for zbar::internaler...@base" 0.10
(c++)"typeinfo name for zbar::invalider...@base" 0.10
(c++)"typeinfo name for zbar::lockinger...@base" 0.10
(c++)"typeinfo name for zbar::qz...@base" 0.10
(c++)"typeinfo name for zbar::qzbarthr...@base" 0.10
(c++)"typeinfo name for zbar::QZBarThread::scanimageev...@base" 0.10
(c++)"typeinfo name for zbar::QZBarThread::videodeviceev...@base" 0.10
(c++)"typeinfo name for zbar::QZBarThread::videoenabledev...@base" 0.10
(c++)"typeinfo name for zbar::systemer...@base" 0.10
(c++)"typeinfo name for zbar::unsupporteder...@base" 0.10
(c++)"typeinfo name for zbar::xdisplayer...@base" 0.10
(c++)"typeinfo name for zbar::xprotoer...@base" 0.10
(c++)"vtable for zbar::busyer...@base" 0.10
(c++)"vtable for zbar::closeder...@base" 0.10
(c++)"vtable for zbar::except...@base" 0.10
(c++)"vtable for zbar::formater...@base" 0.10
(c++)"vtable for zbar::Image::hand...@base" 0.10
(c++)"vtable for zbar::internaler...@base" 0.10
(c++)"vtable for zbar::invalider...@base" 0.10
(c++)"vtable for zbar::lockinger...@base" 0.10
(c++)"vtable for zbar::qz...@base" 0.10
(c++)"vtable for zbar::qzbarthr...@base" 0.10
(c++)"vtable for zbar::QZBarThread::scanimageev...@base" 0.10
(c++)"vtable for zbar::QZBarThread::videodeviceev...@base" 0.10
(c++)"vtable for zbar::QZBarThread::videoenabledev...@base" 0.10
(c++)"vtable for zbar::systemer...@base" 0.10
(c++)"vtable for zbar::unsupporteder...@base" 0.10
(c++)"vtable for zbar::xdisplayer...@base" 0.10
(c++)"vtable for zbar::xprotoer...@base" 0.10
(c++)"zbar::BusyError::~BusyError()@Base" 0.10
(c++)"zbar::BusyError::~BusyError()@Base" 0.10
(c++)"zbar::ClosedError::~ClosedError()@Base" 0.10
(c++)"zbar::ClosedError::~ClosedError()@Base" 0.10
(c++)"zbar::Exception::~Exception()@Base" 0.10
(c++)"zbar::Exception::~Exception()@Base" 0.10
(c++)"zbar::Exception::what() co...@base" 0.10
(c++)"zbar::FormatError::~FormatError()@Base" 0.10
(c++)"zbar::FormatError::~FormatError()@Base" 0.10
(c++)"zbar::FormatError::what() co...@base" 0.10
(c++)"zbar::Image::_cleanup(zbar::zbar_image_s*)@Base" 0.10
(c++)"zbar::Image::Handler::_cb(zbar::zbar_image_s*, void const*)@Base" 0.10
(c++)"zbar::Image::Handler::~Handler()@Base" 0.10
(c++)"zbar::Image::Handler::~Handler()@Base" 0.10
(c++)"zbar::Image::SymbolIterator::~SymbolIterator()@Base" 0.10
(c++)"zbar::InternalError::~InternalError()@Base" 0.10
(c++)"zbar::InternalError::~InternalError()@Base" 0.10
(c++)"zbar::InvalidError::~InvalidError()@Base" 0.10
(c++)"zbar::InvalidError::~InvalidError()@Base" 0.10
(c++)"zbar::LockingError::~LockingError()@Base" 0.10
(c++)"zbar::LockingError::~LockingError()@Base" 0.10
(c++)"zbar::QZBar::attach()@Base" 0.10
(c++)"zbar::QZBar::changeEvent(QEvent*)@Base" 0.10
(c++)"zbar::QZBar::decoded(int, QString const&)@Base" 0.10
(c++)"zbar::QZBar::decodedText(QString const&)@Base" 0.10
(c++)"zbar::QZBar::dragEnterEvent(QDragEnterEvent*)@Base" 0.10
(c++)"zbar::QZBar::dropEvent(QDropEvent*)@Base" 0.10
(c++)"zbar::QZBar::heightForWidth(int) co...@base" 0.10
(c++)"zbar::QZBar::isVideoEnabled() co...@base" 0.10
(c++)"zbar::QZBar::isVideoOpened() co...@base" 0.10
(c++)"zbar::QZBar::metaObject() co...@base" 0.10
(c++)"zbar::QZBar::paintEngine() co...@base" 0.10
(c++)"zbar::QZBar::paintEvent(QPaintEvent*)@Base" 0.10
(c++)"zbar::QZBar::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.10
(c++)"zbar::QZBar::qt_metacast(char const*)@Base" 0.10
(c++)"zbar::QZBar::~QZBar()@Base" 0.10
(c++)"zbar::QZBar::~QZBar()@Base" 0.10
(c++)"zbar::QZBar::~QZBar()@Base" 0.10
(c++)"zbar::QZBar::QZBar(QWidget*)@Base" 0.10
(c++)"zbar::QZBar::QZBar(QWidget*)@Base" 0.10
(c++)"zbar::QZBar::resizeEvent(QResizeEvent*)@Base" 0.10
(c++)"zbar::QZBar::scanImage(QImage const&)@Base" 0.10
(c++)"zbar::QZBar::setVideoDevice(QString const&)@Base" 0.10
(c++)"zbar::QZBar::setVideoEnabled(bool)@Base" 0.10
(c++)"zbar::QZBar::showEvent(QShowEvent*)@Base" 0.10
(c++)"zbar::QZBar::sizeChange()@Base" 0.10
(c++)"zbar::QZBar::sizeHint() co...@base" 0.10
(c++)"zbar::QZBar::staticmetaobj...@base" 0.10
(c++)"zbar::QZBarThread::clear()@Base" 0.10
(c++)"zbar::QZBarThread::decoded(int, QString const&)@Base" 0.10
(c++)"zbar::QZBarThread::decodedText(QString const&)@Base" 0.10
(c++)"zbar::QZBarThread::enableVideo(bool)@Base" 0.10
(c++)"zbar::QZBarThread::event(QEvent*)@Base" 0.10
(c++)"zbar::QZBarThread::image_callback(zbar::Image&)@Base" 0.10
(c++)"zbar::QZBarThread::metaObject() co...@base" 0.10
(c++)"zbar::QZBarThread::openVideo(QString const&)@Base" 0.10
(c++)"zbar::QZBarThread::processImage(zbar::Image&)@Base" 0.10
(c++)"zbar::QZBarThread::qt_metacall(QMetaObject::Call, int, void**)@Base" 0.10
(c++)"zbar::QZBarThread::qt_metacast(char const*)@Base" 0.10
(c++)"zbar::QZBarThread::~QZBarThread()@Base" 0.10
(c++)"zbar::QZBarThread::~QZBarThread()@Base" 0.10
(c++)"zbar::QZBarThread::QZBarThread()@Base" 0.10
(c++)"zbar::QZBarThread::QZBarThread()@Base" 0.10
(c++)"zbar::QZBarThread::run()@Base" 0.10
(c++)"zbar::QZBarThread::ScanImageEvent::~ScanImageEvent()@Base" 0.10
(c++)"zbar::QZBarThread::ScanImageEvent::~ScanImageEvent()@Base" 0.10
(c++)"zbar::QZBarThread::scanImageEvent(zbar::QZBarThread::ScanImageEvent*)@Base"
0.10
(c++)"zbar::QZBarThread::staticmetaobj...@base" 0.10
(c++)"zbar::QZBarThread::update()@Base" 0.10
(c++)"zbar::QZBarThread::VideoDeviceEvent::~VideoDeviceEvent()@Base" 0.10
(c++)"zbar::QZBarThread::VideoDeviceEvent::~VideoDeviceEvent()@Base" 0.10
(c++)"zbar::QZBarThread::videoDeviceEvent(zbar::QZBarThread::VideoDeviceEvent*)@Base"
0.10
(c++)"zbar::QZBarThread::VideoEnabledEvent::~VideoEnabledEvent()@Base" 0.10
(c++)"zbar::QZBarThread::VideoEnabledEvent::~VideoEnabledEvent()@Base" 0.10
(c++)"zbar::QZBarThread::videoEnabledEvent(zbar::QZBarThread::VideoEnabledEvent*)@Base"
0.10
(c++)"zbar::QZBarThread::videoOpened(bool)@Base" 0.10
(c++)"zbar::QZBar::videoDevice() co...@base" 0.10
(c++)"zbar::QZBar::videoOpened(bool)@Base" 0.10
(c++)"zbar::SymbolSet::~SymbolSet()@Base" 0.10
(c++)"zbar::Symbol::~Symbol()@Base" 0.10
(c++)"zbar::SystemError::~SystemError()@Base" 0.10
(c++)"zbar::SystemError::~SystemError()@Base" 0.10
(c++)"zbar::UnsupportedError::~UnsupportedError()@Base" 0.10
(c++)"zbar::UnsupportedError::~UnsupportedError()@Base" 0.10
(c++)"zbar::XDisplayError::~XDisplayError()@Base" 0.10
(c++)"zbar::XDisplayError::~XDisplayError()@Base" 0.10
(c++)"zbar::XProtoError::~XProtoError()@Base" 0.10
(c++)"zbar::XProtoError::~XProtoError()@Base" 0.10