[Pkg-gmagick-im-team] Bug#564123: missed SONAME transition for imagemagick libraries

Vincent Fourmond fourmond at debian.org
Thu Jan 7 21:06:31 UTC 2010


Package: imagemagick
Version: 7:6.5.8.3-1
Severity: important

  Hello, dear imagemagick maintainers !

  I'm involved in packaging of rmagick, the Ruby bindings for
Imagemagick, and we are regularly hitting a nasty bug (currently
#557778), linked to the fact that the Ruby bindings check for the
exact version number of Imagemagick at runtime and fails if it does
not have a perfect match.

  I initially thought that this was irrelevant on systems with dynamic
linkers and appropriately versioned, since if the SONAME does not
change, then there are no problems. However, upon checking if the Ruby
magick bindings built with 6.5.5 work with 6.5.7, Antonio Terceiro
<terceiro at softwarelivre.org> found that it would crash at runtime...

  Upon closer examination, I found that there are lots of differences
between the 6.5.5 and 6.5.7 version (attached is a diff of the include
directory between both). There are many symbols missing, such as
DestroyDelegateList in ImageMagick/magick/delegate.h:

+++ version-6.5.7/usr/include/ImageMagick/magick/delegate.h     2009-11-17 21:07:22.000000000 +0100
@@ -62,12 +62,13 @@
   GetDelegateMode(const DelegateInfo *);
 
 extern MagickExport MagickBooleanType
+  DelegateComponentGenesis(void),
   GetDelegateThreadSupport(const DelegateInfo *),
   InvokeDelegate(ImageInfo *,Image *,const char *,const char *,ExceptionInfo *),
   ListDelegateInfo(FILE *,ExceptionInfo *);
 
 extern MagickExport void
-  DestroyDelegateList(void);
+  DelegateComponentTerminus(void);
 
  These would give missing symbols at runtime.

  Worse:

+++ version-6.5.7/usr/include/ImageMagick/wand/magick-image.h   2009-11-17 21:07:22.000000000 +0100
@@ -191,7 +193,8 @@
   MagickImportImagePixels(MagickWand *,const long,const long,
     const unsigned long,const unsigned long,const char *,const StorageType,
     const void *),
-  MagickInverseFourierTransformImage(MagickWand *,const MagickBooleanType),
+  MagickInverseFourierTransformImage(MagickWand *,MagickWand *,
+    const MagickBooleanType),
   MagickLabelImage(MagickWand *,const char *),
   MagickLevelImage(MagickWand *,const double,const double,const double),
   MagickLevelImageChannel(MagickWand *,const ChannelType,const double,

  The function MagickInverseFourierTransformImage apparently now takes
an additional argument... This means segfaults/bus errors at runtime !

  In short, you did miss a SONAME bump between 6.5.5 and 6.5.7 (this
might also be true for 6.5.7 and 6.5.8, but I'm less sure), since the
soversion only went from 2.0.0 to 2.0.1 between the two versions (it
should have been 3.0.0 in the newer version).

  My guess is that this is the reason why rmagick upstream is checking
so tightly the version number at runtime, since it appears that the
imagemagick developers make incompatible ABI changes without SONAME
bumps.

  I don't know what to do at present. Should the SONAME of imagemagick
libraries be bumped right now ? In any case, I would suggest not
trusting so much SONAME provided by upstream and checking yourself
binary compatibility. (a diff of the include dir of two successive
versions should be enough to check).

  Many thanks, and sorry for bringing this up.

       Vincent


-- System Information: Debian Release: squeeze/sid APT prefers
unstable APT policy: (500, 'unstable'), (500, 'testing'), (500,
'stable'), (1, 'experimental') Architecture: amd64 (x86_64)

Kernel: Linux 2.6.31-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB, LC_CTYPE=en_GB (charmap=ISO-8859-1)
Shell: /bin/sh linked to /bin/dash

Versions of packages imagemagick depends on:
ii  libbz2-1.0              1.0.5-3          high-quality block-sorting file co
ii  libc6                   2.10.2-4         Embedded GNU C Library: Shared lib
ii  libfontconfig1          2.8.0-2          generic font configuration library
ii  libfreetype6            2.3.11-1         FreeType 2 font engine, shared lib
ii  libglib2.0-0            2.22.3-2         The GLib library of C routines
ii  libgomp1                4.4.2-8          GCC OpenMP (GOMP) support library
ii  libice6                 2:1.0.6-1        X11 Inter-Client Exchange library
ii  libjpeg62               6b-15            The Independent JPEG Group's JPEG 
ii  liblcms1                1.18.dfsg-1.1    Color management library
ii  liblqr-1-0              0.4.1-1          converts plain array images into m
ii  libltdl7                2.2.6b-2         A system independent dlopen wrappe
ii  libmagickcore2          7:6.5.8.3-1      low-level image manipulation libra
ii  libmagickwand2          7:6.5.8.3-1      image manipulation library
ii  libsm6                  2:1.1.1-1        X11 Session Management library
ii  libtiff4                3.9.2-1          Tag Image File Format (TIFF) libra
ii  libx11-6                2:1.3.2-1        X11 client-side library
ii  libxext6                2:1.1.1-2        X11 miscellaneous extension librar
ii  libxt6                  1:1.0.7-1        X11 toolkit intrinsics library
ii  zlib1g                  1:1.2.3.4.dfsg-3 compression library - runtime

Versions of packages imagemagick recommends:
ii  ghostscript               8.70~dfsg-2+b1 The GPL Ghostscript PostScript/PDF
ii  libmagickcore2-extra      7:6.5.8.3-1    low-level image manipulation libra
ii  netpbm                    2:10.0-12      Graphics conversion tools
ii  ufraw                     0.16-1+b1      standalone importer for raw camera

Versions of packages imagemagick suggests:
pn  autotrace       <none>                   (no description available)
pn  cups-bsd | lpr  <none>                   (no description available)
ii  curl            7.19.7-1                 Get a file from an HTTP, HTTPS or 
ii  enscript        1.6.4-14                 converts text to Postscript, HTML 
ii  ffmpeg          5:0.5+svn20100104-0.0    audio/video encoder, streaming ser
ii  gimp            2.6.7-1.1                The GNU Image Manipulation Program
ii  gnuplot         4.2.6-1                  A command-line driven interactive 
pn  grads           <none>                   (no description available)
ii  groff-base      1.20.1-6                 GNU troff text-formatting system (
pn  hp2xx           <none>                   (no description available)
pn  html2ps         <none>                   (no description available)
pn  imagemagick-doc <none>                   (no description available)
ii  libwmf-bin      0.2.8.4-6.1              Windows metafile conversion tools
ii  mplayer         1:1.0.rc2svn20100104-0.1 The Ultimate Movie Player For Linu
pn  povray          <none>                   (no description available)
pn  radiance        <none>                   (no description available)
pn  sane-utils      <none>                   (no description available)
ii  texlive-binarie 2009-5                   Binaries for TeX Live
ii  transfig        1:3.2.5.a-2              Utilities for converting XFig figu
ii  xdg-utils       1.0.2-6.1                desktop integration utilities from

-- no debconf information
-------------- next part --------------
A non-text attachment was scrubbed...
Name: imagemagick-ABI-breakages.diff
Type: text/x-diff
Size: 93447 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-gmagick-im-team/attachments/20100107/2d0b9704/attachment-0001.diff>


More information about the Pkg-gmagick-im-team mailing list