Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-12 Thread Jakub Wilk
A quick grep through the sources of rev-deps shows that these packages 
use the PixelPacket structure:


gnudatalanguage
octave
pdf2djvu
python-pgmagick
witty
xastir

I expect them all to be affected by this ABI breakage.

So please don't paper over the problem with Breaks, but either revert 
the QuantumDepth change, or change the SONAME. Thanks. :)


In either case, please talk to the release team first, because they'll 
need to schedule binNMUs.


--
Jakub Wilk



Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-11 Thread GCS
On Mon, Aug 10, 2015 at 10:55 PM, Jakub Wilk jw...@debian.org wrote:
 $ pdf2djvu /usr/share/doc/quilt/quilt.pdf --fg-colors 42 -p1 -d72 -o
 tmp.djvu
 /usr/share/doc/quilt/quilt.pdf:
 - page #1 - #1
 pdf2djvu: malloc.c:3695: _int_malloc: Assertion `(unsigned long) (size) =
 (unsigned long) (nb)' failed.
 Magick: abort due to signal 6 (SIGABRT) Abort...
 Aborted

 (I think pdf2djvu doesn't work correctly with high quantum depths anyway,
 but that's another story... I'll get it fixed upstream.)
 So there will be a new pdf2djvu release? Currently I've fixed all the
bugs you are reported, thanks for them! Added a breaks for pdf2djvu
v0.7.21-2 and earlier; the binNMU (+b1) solved this issue for me (the
generation works). If you would like to have a look before I upload
it, you can do that[1].

Regards,
Laszlo/GCS
[1] dget -x http://www.barcikacomp.hu/gcs/graphicsmagick_1.3.21-3.dsc


-- 
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread Jakub Wilk

Package: libgraphicsmagick1-dev
Version: 1.3.21-2
Severity: serious

I upgraded libgraphicsmagick1-dev to 1.3.21, but not libgraphicsmagick++1-dev:

$ dpkg-query -W | grep '^libgraphicsmagick.*-dev'
libgraphicsmagick++1-dev1.3.20-3+deb8u1
libgraphicsmagick1-dev  1.3.21-2

Now I can't link stuff:

$ g++ -I/usr/include/GraphicsMagick test.cc -lGraphicsMagick++
/tmp/ccrGwLtD.o: In function `main':
test.cc:(.text+0x1c): undefined reference to `Magick::Color::Color(unsigned 
short, unsigned short, unsigned short)'
collect2: error: ld returned 1 exit status


Upgrading libgraphicsmagick++1-dev fixes this...

It looks like libgraphicsmagick1-dev needs versioned breaks against 
libgraphicsmagick++1-dev.



-- System Information:
Debian Release: stretch/sid
 APT prefers unstable
 APT policy: (990, 'unstable'), (500, 'experimental')
Architecture: i386 (x86_64)
Foreign Architectures: amd64

Kernel: Linux 4.1.0-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=C, LC_CTYPE=pl_PL.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: sysvinit (via /sbin/init)

Versions of packages libgraphicsmagick1-dev depends on:
ii  libbz2-dev 1.0.6-8
ii  libc6-dev  2.19-19
ii  libexif-dev0.6.21-2
ii  libfreetype6-dev   2.5.2-4
ii  libgraphicsmagick3 1.3.21-2
ii  libice-dev 2:1.0.9-1+b1
ii  libjasper-dev  1.900.1-debian1-2.4
ii  libjbig-dev2.1-3.1
ii  libjpeg-dev1:1.4.1-1
ii  libjpeg62-turbo-dev [libjpeg-dev]  1:1.4.1-1
ii  liblcms2-dev   2.6-3+b3
ii  libltdl-dev2.4.2-1.11
ii  libpng12-dev [libpng-dev]  1.2.50-2+b2
ii  libsm-dev  2:1.2.2-1+b1
ii  libtiff5-dev [libtiff-dev] 4.0.3-13
ii  libwmf-dev 0.2.8.4-10.4
ii  libx11-dev 2:1.6.3-1
ii  libxext-dev2:1.3.3-1
ii  libxml2-dev2.9.2+dfsg1-3
ii  x11proto-core-dev  7.0.27-1
ii  zlib1g-dev [libz-dev]  1:1.2.8.dfsg-2+b1

--
Jakub Wilk


--
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread Jakub Wilk

* Bob Friesenhahn bfrie...@simple.dallas.tx.us, 2015-08-10, 12:53:

$ g++ -I/usr/include/GraphicsMagick test.cc -lGraphicsMagick++
/tmp/ccrGwLtD.o: In function `main':
test.cc:(.text+0x1c): undefined reference to 
`Magick::Color::Color(unsigned short, unsigned short, unsigned 
short)'

collect2: error: ld returned 1 exit status


Upgrading libgraphicsmagick++1-dev fixes this...

It looks like libgraphicsmagick1-dev needs versioned breaks against 
libgraphicsmagick++1-dev.


Perhaps this issue is due to g++ defaulting to a newer version of the 
C++ standard and thus it requires a new C++ ABI?


I don't think so. I'd rather blame:

 * Test build with QuantumDepth 16 (closes: #557879).

But wait, isn't change of QuantumDepth an ABI breakage?
SONAME of the non-C++ library didn't change; it's still 
/usr/lib/libGraphicsMagick.so.3.


--
Jakub Wilk


--
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread Bob Friesenhahn

On Mon, 10 Aug 2015, Jakub Wilk wrote:


Perhaps this issue is due to g++ defaulting to a newer version of the C++ 
standard and thus it requires a new C++ ABI?


I don't think so. I'd rather blame:

* Test build with QuantumDepth 16 (closes: #557879).

But wait, isn't change of QuantumDepth an ABI breakage?
SONAME of the non-C++ library didn't change; it's still 
/usr/lib/libGraphicsMagick.so.3.


If --enable-quantum-library-names was used as an option to the 
configure script, then the shared library name would become like 
libGraphicsMagick-Q16.so so the whole run-time library name is 
different.  If the QuantumDepth 8 build did not use this option, then 
it would be named as before and existing apps (compiled with 
QuantumDepth 8) should work with it.  This allows the libraries to 
co-exist.


The package used for development needs to specify if it is for Q8 
or Q16 since (barring other factors), it is only possible to develop 
for one at a time.


Regardless, if GCC 5.X is now being used (is this the case?), I would 
suspect that the C++ default ABI (and libraries) have changed (to C++ 
11) and this results in different name mangling.  Note that the linker 
did find the library but not the method.


Bob
--
Bob Friesenhahn
bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,http://www.GraphicsMagick.org/


--
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread Bob Friesenhahn

On Mon, 10 Aug 2015, Jakub Wilk wrote:


Package: libgraphicsmagick1-dev
Version: 1.3.21-2
Severity: serious

I upgraded libgraphicsmagick1-dev to 1.3.21, but not 
libgraphicsmagick++1-dev:


$ dpkg-query -W | grep '^libgraphicsmagick.*-dev'
libgraphicsmagick++1-dev1.3.20-3+deb8u1
libgraphicsmagick1-dev  1.3.21-2

Now I can't link stuff:

$ g++ -I/usr/include/GraphicsMagick test.cc -lGraphicsMagick++
/tmp/ccrGwLtD.o: In function `main':
test.cc:(.text+0x1c): undefined reference to `Magick::Color::Color(unsigned 
short, unsigned short, unsigned short)'

collect2: error: ld returned 1 exit status


Upgrading libgraphicsmagick++1-dev fixes this...

It looks like libgraphicsmagick1-dev needs versioned breaks against 
libgraphicsmagick++1-dev.


Perhaps this issue is due to g++ defaulting to a newer version of the 
C++ standard and thus it requires a new C++ ABI?


If this is the case, then requesting an older C++ standard may allow 
linking with the previous libgraphicsmagick++1-dev.


Existing apps (not-recompiled) should still be able to use the 
previous library.


Bob
--
Bob Friesenhahn
bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,http://www.GraphicsMagick.org/


--
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread GCS
On Mon, Aug 10, 2015 at 8:27 PM, Bob Friesenhahn
bfrie...@simple.dallas.tx.us wrote:
 On Mon, 10 Aug 2015, Jakub Wilk wrote:
 Perhaps this issue is due to g++ defaulting to a newer version of the C++
 standard and thus it requires a new C++ ABI?
 I don't think so. I'd rather blame:

 * Test build with QuantumDepth 16 (closes: #557879).

 But wait, isn't change of QuantumDepth an ABI breakage?
 SONAME of the non-C++ library didn't change; it's still
 /usr/lib/libGraphicsMagick.so.3.
 As I know it's only an internal precision change, but doesn't affect
any method or function.

 If --enable-quantum-library-names was used as an option to the configure
 script, then the shared library name would become like
 libGraphicsMagick-Q16.so so the whole run-time library name is different.
 It was not used. Should I add this? It seems it would cause more
trouble than win.

 If the QuantumDepth 8 build did not use this option, then it would be named
 as before and existing apps (compiled with QuantumDepth 8) should work with
 it.  This allows the libraries to co-exist.
 It seems you also write that the quantum depth change shouldn't be a
problem for applications.

 The package used for development needs to specify if it is for Q8 or Q16
 since (barring other factors), it is only possible to develop for one at a
 time.
 As I know, GraphicsMagick will use roughly double the memory during
image processing with the latter, but that's what the user can see
(and that the output quality is better). Am I right?

 Regardless, if GCC 5.X is now being used (is this the case?), I would
 suspect that the C++ default ABI (and libraries) have changed (to C++ 11)
 and this results in different name mangling.  Note that the linker did find
 the library but not the method.
 Yes, it's now compiled with GCC 5.2.x and the name mangling is
changed for the C++ library. There are known regressions[1] between
v4.9 and v5 , but I don't know too much details.
While you are right in #795099 that the two libgraphicsmagick++
libraries are co-installable, but I fear that the two C++ ABIs would
cause more problems. The reverse dependencies list is small, those can
be re-compiled with the new library version.
But to answer your question, the API for 1.3.21/QuantumDepth16 should
be the same as previously. I attach the symbols change between 1.3.20
and 1.3.21 ; the additions are for WebP image support and two symbols
(RegisterAVIImage, UnregisterAVIImage) are removed. As I see, a
versioned breaks is the only thing I need to add.

Regards,
Laszlo/GCS
[1] 
https://wiki.debian.org/GCC5#libstdc.2B-.2B-_c.2B-.2B-11_incompatibilities_.284.9_and_5.29
--- 1.3.20/debian/libgraphicsmagick3.symbols2015-02-12 20:08:51.0 
+0100
+++ 1.3.21/debian/libgraphicsmagick3.symbols2015-08-08 17:48:44.521870457 
+0200
@@ -75,6 +75,7 @@
  ChannelThresholdImage@Base 1.3.5
  ChannelTypeToString@Base 1.3.5
  CharcoalImage@Base 1.3.5
+ CheckImagePixelLimits@Base 1.3.21
  ChopImage@Base 1.3.5
  ClassTypeToString@Base 1.3.5
  ClipImage@Base 1.3.5
@@ -504,6 +505,7 @@
  LockSemaphoreInfo@Base 1.3.5
  LogMagickEvent@Base 1.3.5
  LogMagickEventList@Base 1.3.5
+ LogPALMHeader@Base 1.3.21
  MSBOrderLong@Base 1.3.5
  MSBOrderShort@Base 1.3.5
  MagickAllocFunctions@Base 1.3.5
@@ -570,6 +572,7 @@
  MagickSetFileSystemBlockSize@Base 1.3.8
  MagickSizeStrToInt64@Base 1.3.5
  MagickSpawnVP@Base 1.3.5
+ MagickStripSpacesFromString@Base 1.3.21
  MagickStrlCat@Base 1.3.5
  MagickStrlCpy@Base 1.3.5
  MagickStrlCpyTrunc@Base 1.3.5
@@ -704,6 +707,7 @@
  PSPageGeometry@Base 1.3.5
  PackbitsEncode2Image@Base 1.3.5
  PackbitsEncodeImage@Base 1.3.5
+ PanicDestroyMagick@Base 1.3.21
  PersistCache@Base 1.3.5
  PingBlob@Base 1.3.5
  PingImage@Base 1.3.5
@@ -719,6 +723,7 @@
  PrependImageToList@Base 1.3.5
  ProfileImage@Base 1.3.5
  PurgeTemporaryFiles@Base 1.3.15
+ PurgeTemporaryFilesAsyncSafe@Base 1.3.21
  PushImagePixels@Base 1.3.5
  QuantizeImage@Base 1.3.5
  QuantizeImages@Base 1.3.5
@@ -764,7 +769,6 @@
  ReferenceCache@Base 1.3.5
  ReferenceImage@Base 1.3.5
  RegisterARTImage@Base 1.3.5
- RegisterAVIImage@Base 1.3.5
  RegisterAVSImage@Base 1.3.5
  RegisterBMPImage@Base 1.3.5
  RegisterCALSImage@Base 1.3.8
@@ -852,6 +856,7 @@
  RegisterVIDImage@Base 1.3.5
  RegisterVIFFImage@Base 1.3.5
  RegisterWBMPImage@Base 1.3.5
+ RegisterWEBPImage@Base 1.3.21
  RegisterWMFImage@Base 1.3.5
  RegisterWPGImage@Base 1.3.5
  RegisterXBMImage@Base 1.3.5
@@ -899,6 +904,7 @@
  SetImageColor@Base 1.3.15
  SetImageColorRegion@Base 1.3.15
  SetImageDepth@Base 1.3.5
+ SetImageEx@Base 1.3.21
  SetImageInfo@Base 1.3.5
  SetImageOpacity@Base 1.3.5
  SetImagePixels@Base 1.3.5
@@ -982,7 +988,6 @@
  UnlockSemaphoreInfo@Base 1.3.5
  UnmapBlob@Base 1.3.5
  UnregisterARTImage@Base 1.3.5
- UnregisterAVIImage@Base 1.3.5
  UnregisterAVSImage@Base 1.3.5
  UnregisterBMPImage@Base 1.3.5
  UnregisterCALSImage@Base 1.3.8
@@ -1070,6 +1075,7 @@
  UnregisterVIDImage@Base 1.3.5
  UnregisterVIFFImage@Base 1.3.5
  

Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread Jakub Wilk

* László Böszörményi (GCS) g...@debian.org, 2015-08-10, 21:53:

* Test build with QuantumDepth 16 (closes: #557879).

But wait, isn't change of QuantumDepth an ABI breakage? SONAME of the 
non-C++ library didn't change; it's still 
/usr/lib/libGraphicsMagick.so.3.
As I know it's only an internal precision change, but doesn't affect 
any method or function.


At least the PixelPacket struct has changed, which is rather 
fundamental part of the ABI, and not internal at all.


And practically, this is what happens in stretch, with 
libgraphicsmagick3 upgraded to 1.3.21-2:


$ pdf2djvu /usr/share/doc/quilt/quilt.pdf --fg-colors 42 -p1 -d72 -o tmp.djvu
/usr/share/doc/quilt/quilt.pdf:
- page #1 - #1
pdf2djvu: malloc.c:3695: _int_malloc: Assertion `(unsigned long) (size) = 
(unsigned long) (nb)' failed.
Magick: abort due to signal 6 (SIGABRT) Abort...
Aborted

(I think pdf2djvu doesn't work correctly with high quantum depths 
anyway, but that's another story... I'll get it fixed upstream.)


--
Jakub Wilk


--
To UNSUBSCRIBE, email to debian-bugs-rc-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread Jakub Wilk

Duh, I forgot the attachment.

* Bob Friesenhahn bfrie...@simple.dallas.tx.us, 2015-08-10, 13:27:

Regardless, if GCC 5.X is now being used (is this the case?),


I get the same error both with GCC 4.9 and GCC 5.

I would suspect that the C++ default ABI (and libraries) have changed 
(to C++ 11) and this results in different name mangling.


This is true in general, but I don't believe anything that would affect 
this particular constructor have changed.


--
Jakub Wilk
#include Magick++.h

int main(int argc, char **argv)
{
	Magick::Color(0, 0, 0);
}


Bug#795102: libgraphicsmagick1-dev: undefined reference to `Magick::Color::Color(unsigned short, unsigned short, unsigned short)'

2015-08-10 Thread Bob Friesenhahn

On Mon, 10 Aug 2015, László Böszörményi wrote:


On Mon, Aug 10, 2015 at 8:27 PM, Bob Friesenhahn
bfrie...@simple.dallas.tx.us wrote:

On Mon, 10 Aug 2015, Jakub Wilk wrote:

Perhaps this issue is due to g++ defaulting to a newer version of the C++
standard and thus it requires a new C++ ABI?

I don't think so. I'd rather blame:

* Test build with QuantumDepth 16 (closes: #557879).

But wait, isn't change of QuantumDepth an ABI breakage?
SONAME of the non-C++ library didn't change; it's still
/usr/lib/libGraphicsMagick.so.3.

As I know it's only an internal precision change, but doesn't affect
any method or function.


It changes the size of Quantum and IndexPacket (types), as well as the 
value of MaxRGB, MaxMap, and TransparentOpacity (constants), so 
unfortunately it is very much exposed to the API user.



If --enable-quantum-library-names was used as an option to the configure
script, then the shared library name would become like
libGraphicsMagick-Q16.so so the whole run-time library name is different.

It was not used. Should I add this? It seems it would cause more
trouble than win.


It should not cause much trouble.  The link library name exposed to 
developers is the normal name.


The main value is to allow two run-time libraries to be installed 
side-by-side.



If the QuantumDepth 8 build did not use this option, then it would be named
as before and existing apps (compiled with QuantumDepth 8) should work with
it.  This allows the libraries to co-exist.

It seems you also write that the quantum depth change shouldn't be a
problem for applications.


It depends on the application.


The package used for development needs to specify if it is for Q8 or Q16
since (barring other factors), it is only possible to develop for one at a
time.

As I know, GraphicsMagick will use roughly double the memory during
image processing with the latter, but that's what the user can see
(and that the output quality is better). Am I right?


The output quality is sometimes better, but often identical.  The main 
value is with preserving original quality for deeper images.



But to answer your question, the API for 1.3.21/QuantumDepth16 should
be the same as previously. I attach the symbols change between 1.3.20
and 1.3.21 ; the additions are for WebP image support and two symbols
(RegisterAVIImage, UnregisterAVIImage) are removed. As I see, a
versioned breaks is the only thing I need to add.


With Q16, the API has changed (from Q8) since the sizes of things 
change.


Bob
--
Bob Friesenhahn
bfrie...@simple.dallas.tx.us, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,http://www.GraphicsMagick.org/